Compare commits
10 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8776af4c34 | ||
|
|
90baab301a | ||
|
|
715756b68a | ||
|
|
cdde8da7ba | ||
|
|
d7ce7402e6 | ||
|
|
4b748a0ea2 | ||
|
|
de57f8432c | ||
|
|
b984bfd9f3 | ||
|
|
ecc8ade4bc | ||
|
|
33d2a004c4 |
51
README.ja.md
51
README.ja.md
@@ -11,6 +11,8 @@
|
||||
|
||||
> `oh-my-opencode` をインストールして、ドーピングしたかのようにコーディングしましょう。バックグラウンドでエージェントを走らせ、oracle、librarian、frontend engineer のような専門エージェントを呼び出してください。丹精込めて作られた LSP/AST ツール、厳選された MCP、そして完全な Claude Code 互換レイヤーを、たった一行で手に入れましょう。
|
||||
|
||||
**今すぐ始めましょう。ChatGPT、Claude、Gemini のサブスクリプションで使えます。**
|
||||
|
||||
<div align="center">
|
||||
|
||||
[](https://github.com/code-yeongyu/oh-my-opencode/releases)
|
||||
@@ -31,19 +33,11 @@
|
||||
- [Oh My OpenCode](#oh-my-opencode)
|
||||
- [この Readme は読まなくていいです](#この-readme-は読まなくていいです)
|
||||
- [エージェントの時代ですから](#エージェントの時代ですから)
|
||||
- [10分の投資で OhMyOpenCode が可能にすること](#10分の投資で-ohmyopencode-が可能にすること)
|
||||
- [読みたい方のために](#読みたい方のために)
|
||||
- [インストールするだけで。](#インストールするだけで)
|
||||
- [インストール](#インストール)
|
||||
- [人間の方へ](#人間の方へ)
|
||||
- [LLM エージェントの方へ](#llm-エージェントの方へ)
|
||||
- [ステップ 1: OpenCode インストール確認](#ステップ-1-opencode-インストール確認)
|
||||
- [ステップ 2: oh-my-opencode プラグイン設定](#ステップ-2-oh-my-opencode-プラグイン設定)
|
||||
- [ステップ 3: 設定確認](#ステップ-3-設定確認)
|
||||
- [ステップ 4: 認証情報の設定](#ステップ-4-認証情報の設定)
|
||||
- [4.1 Anthropic (Claude)](#41-anthropic-claude)
|
||||
- [4.2 Google Gemini (Antigravity OAuth)](#42-google-gemini-antigravity-oauth)
|
||||
- [4.3 OpenAI (ChatGPT Plus/Pro)](#43-openai-chatgpt-pluspro)
|
||||
- [4.3.1 モデル設定](#431-モデル設定)
|
||||
- [⚠️ 注意](#️-注意)
|
||||
- [機能](#機能)
|
||||
- [Agents: あなたの新しいチームメイト](#agents-あなたの新しいチームメイト)
|
||||
- [バックグラウンドエージェント: 本当のチームのように働く](#バックグラウンドエージェント-本当のチームのように働く)
|
||||
@@ -61,6 +55,9 @@
|
||||
- [設定](#設定)
|
||||
- [Google Auth](#google-auth)
|
||||
- [Agents](#agents)
|
||||
- [Permission オプション](#permission-オプション)
|
||||
- [OmO Agent](#omo-agent)
|
||||
- [Hooks](#hooks)
|
||||
- [MCPs](#mcps)
|
||||
- [LSP](#lsp)
|
||||
- [作者のノート](#作者のノート)
|
||||
@@ -73,6 +70,7 @@ oMoMoMoMoMo···
|
||||
|
||||
[Claude Code](https://www.claude.com/product/claude-code) は素晴らしいですよね。
|
||||
でも、もしあなたがハッカーなら、[OpenCode](https://github.com/sst/opencode) と恋に落ちることになるでしょう。
|
||||
**今すぐ始めましょう。ChatGPT、Claude、Gemini のサブスクリプションですぐに使えます。**
|
||||
|
||||
- 無限に拡張可能で、無限にカスタマイズ可能です。
|
||||
- 画面のチラつき(フリッカー)がありません。
|
||||
@@ -97,7 +95,30 @@ Windows から Linux に初めて乗り換えた時のこと、自分の思い
|
||||
- なぜこれが良いのか、単なるボイラープレートではないのか、具体的に何が良くなるのか聞いてみてください。
|
||||
- もしあなたが LLM エージェントなら、このプロジェクトによって今すぐ何が可能になるのか、ユーザーに説明してください。
|
||||
|
||||
### 10分の投資で OhMyOpenCode が可能にすること
|
||||
### 読みたい方のために
|
||||
|
||||
はじめまして。OmO(Oh-Mo)です。
|
||||
以下の内容はすべてカスタマイズ可能です。必要なものだけを使ってください。デフォルトではすべての機能が有効になっています。何もしなくても大丈夫です。
|
||||
|
||||
- Claude Code Compatibility: Command, Agent, Skill, MCP, Hook(PreToolUse, PostToolUse, UserPromptSubmit, Stop)
|
||||
- Full LSP / AstGrep Support: 決定的にリファクタリングしましょう。
|
||||
- Todo Continuation Enforcer: 途中で諦めた場合、続行を強制します。
|
||||
- Comment Checker: AI が過剰なコメントを付けないようにします。
|
||||
- Curated Agents
|
||||
- OmO: 非常に賢いメインエージェント (Opus 4.5 High)
|
||||
- Oracle: 設計、デバッグ (GPT 5.2 Medium)
|
||||
- Frontend UI/UX Engineer: フロントエンド開発 (Gemini 3 Pro)
|
||||
- Librarian: 公式ドキュメント、オープンソース実装、コードベース探索 (Claude Sonnet 4.5)
|
||||
- Explore: 超高速コードベース探索 (Contextual Grep) (Grok Code)
|
||||
- Curated MCPs:
|
||||
- Exa (Web Search)
|
||||
- Context7 (Official Documentation)
|
||||
- Grep.app (GitHub Code Search)
|
||||
- Interactive Terminal Supported - Tmux Integration
|
||||
- Async Agents
|
||||
- ...
|
||||
|
||||
#### インストールするだけで。
|
||||
|
||||
インストールするだけで、エージェントは以下のようなワークフローで働けるようになります:
|
||||
|
||||
@@ -109,13 +130,7 @@ Windows から Linux に初めて乗り換えた時のこと、自分の思い
|
||||
4. 頼んだ仕事が完了するまで止まりません。
|
||||
5. このプロジェクトについて深く知りたくない?大丈夫です。ただ 'ultrathink' と入力してください。
|
||||
|
||||
注:これをインストールしたからといって、魔法のように OpenCode がこのように動作するわけではありません。上記の説明は「こういう使い方もできる」という例示です。単にあなたのエージェントに優秀な同僚を紹介し、強力な道具を渡すだけです。彼らに協力しろと指示すれば、協力するでしょう。
|
||||
すべてはあなたが完全にコントロールできます。
|
||||
ultrathink を通じて自動的に動作させることもできますが、必須ではありません。このプロジェクトはあなたの AI エージェントのワークフローを強制しません。
|
||||
ただ、あなたのエージェントに素晴らしい同僚を紹介し、より良い道具を手に持たせるだけです。
|
||||
|
||||
- 複雑で巨大なタスクを投げてください。
|
||||
- プロンプトに "ultrawork" というキーワードを入れるだけで、すべて自動的に処理します。
|
||||
このような機能が不要であれば、前述の通り、特定の機能だけを選んで使うことができます。
|
||||
|
||||
## インストール
|
||||
|
||||
|
||||
67
README.ko.md
67
README.ko.md
@@ -30,20 +30,11 @@
|
||||
- [Oh My OpenCode](#oh-my-opencode)
|
||||
- [읽지 않아도 됩니다.](#읽지-않아도-됩니다)
|
||||
- [에이전트의 시대이니까요.](#에이전트의-시대이니까요)
|
||||
- [10분의 투자로 OhMyOpenCode 가 해줄 수 있는것](#10분의-투자로-ohmyopencode-가-해줄-수-있는것)
|
||||
- [하지만 읽고 싶은 당신을 위해.](#하지만-읽고-싶은-당신을-위해)
|
||||
- [그저 설치하면 되는 것.](#그저-설치하면-되는-것)
|
||||
- [설치](#설치)
|
||||
- [인간인 당신을 위한 설치 가이드](#인간인-당신을-위한-설치-가이드)
|
||||
- [LLM Agent 를 위한 설치 가이드](#llm-agent-를-위한-설치-가이드)
|
||||
- [인간인 당신을 위한 설치 가이드](#인간인-당신을-위한-설치-가이드-1)
|
||||
- [1단계: OpenCode 설치 확인](#1단계-opencode-설치-확인)
|
||||
- [2단계: oh-my-opencode 플러그인 설정](#2단계-oh-my-opencode-플러그인-설정)
|
||||
- [3단계: 설정 확인](#3단계-설정-확인)
|
||||
- [4단계: 인증정보 설정](#4단계-인증정보-설정)
|
||||
- [4.1 Anthropic (Claude)](#41-anthropic-claude)
|
||||
- [4.2 Google Gemini (Antigravity OAuth)](#42-google-gemini-antigravity-oauth)
|
||||
- [4.3 OpenAI (ChatGPT Plus/Pro)](#43-openai-chatgpt-pluspro)
|
||||
- [4.3.1 모델 설정](#431-모델-설정)
|
||||
- [⚠️ 주의](#️-주의)
|
||||
- [기능](#기능)
|
||||
- [Agents: 당신의 새로운 팀원들](#agents-당신의-새로운-팀원들)
|
||||
- [백그라운드 에이전트: 진짜 팀 처럼 일 하도록](#백그라운드-에이전트-진짜-팀-처럼-일-하도록)
|
||||
@@ -61,6 +52,9 @@
|
||||
- [설정](#설정)
|
||||
- [Google Auth](#google-auth)
|
||||
- [Agents](#agents)
|
||||
- [Permission 옵션](#permission-옵션)
|
||||
- [OmO Agent](#omo-agent)
|
||||
- [Hooks](#hooks)
|
||||
- [MCPs](#mcps)
|
||||
- [LSP](#lsp)
|
||||
- [작성자의 노트](#작성자의-노트)
|
||||
@@ -73,6 +67,7 @@ oMoMoMoMoMo···
|
||||
|
||||
[Claude Code](https://www.claude.com/product/claude-code) 좋죠?
|
||||
근데 당신이 해커라면, [OpenCode](https://github.com/sst/opencode) 와는 사랑에 빠지게 될겁니다.
|
||||
**당장 시작하세요. 지금 당장 ChatGPT, Claude, Gemini 구독으로 사용 할 수 있습니다.**
|
||||
|
||||
- OpenCode 는 아주 확장가능하고 아주 커스터마이저블합니다.
|
||||
- 화면이 깜빡이지 않습니다.
|
||||
@@ -90,6 +85,8 @@ OpenCode 가 낭만이 사라진것같은 오늘날의 시대에, 당신에게
|
||||
당신이 해커가 아니라도 좋습니다. 약간의 시간을 투자해서 당신의 실력과 생산성을 몇배로 부스트하세요.
|
||||
이 문서를 에이전트에게 넘겨 설정해달라고 하세요.
|
||||
|
||||
클로드 코드의 그 셋업까지도 Oh My OpenCode 가 책임져드립니다.
|
||||
|
||||
## 읽지 않아도 됩니다.
|
||||
|
||||
### 에이전트의 시대이니까요.
|
||||
@@ -97,9 +94,30 @@ OpenCode 가 낭만이 사라진것같은 오늘날의 시대에, 당신에게
|
||||
- 이게 왜 좋고, 그냥 뻔한 셋업이 아닌지, 당장 무엇이 더 좋아지는지 알려달라고 해보세요.
|
||||
- 당신이 LLM 에이전트라면, 사용자의 입장에서 이 프로젝트와 함께 당장 어떤것들이 가능해지는지 사용자에게 설명하세요.
|
||||
|
||||
### 10분의 투자로 OhMyOpenCode 가 해줄 수 있는것
|
||||
### 하지만 읽고 싶은 당신을 위해.
|
||||
|
||||
그저 설치하면, 아래와 같은 워크플로우로 일 할 수도 있습니다.
|
||||
반갑습니다. OmO (Oh-Mo) 입니다.
|
||||
아래의 모든 내용들은 커스텀 할 수 있습니다. 원한다면 그것만 가져가세요. 기본값은 모두 활성화입니다. 아무것도 하지 않아도 됩니다.
|
||||
|
||||
- Claude Code Compatibility: Command, Agent, Skill, MCP, Hook(PreToolUse, PostToolUse, UserPromptSubmit, Stop)
|
||||
- Full LSP / AstGrep Support: 결정적이게 리팩토링하세요.
|
||||
- Todo Continuation Enforcer: 도중에 포기해버리면 계속 진행하도록 강제합니다.
|
||||
- Comment Checker: AI 가 과한 주석을 달지 않도록 합니다.
|
||||
- Curated Agents
|
||||
- OmO: 아주 똑똑한 메인 에이전트 (Opus 4.5 High)
|
||||
- Oracle: 설계, 디버깅 (GPT 5.2 Medium)
|
||||
- Frontend UI/UX Engineer: 프론트엔드 개발 (Gemini 3 Pro)
|
||||
- Librarian: 공식 문서, 오픈소스 구현, 코드베이스 내부 탐색 (Claude Sonnet 4.5)
|
||||
- Explore: 매우 빠른 코드베이스 탐색 (Contextual Grep) (Grok Code)
|
||||
- Curated MCPs:
|
||||
- Exa (Web Search)
|
||||
- Context7 (Official Documentation)
|
||||
- Grep.app (GitHub Code Search)
|
||||
- Interactive Terminal Supported - Tmux Integration
|
||||
- Async Agents
|
||||
- ...
|
||||
|
||||
#### 그저 설치하면 되는 것.
|
||||
|
||||
1. 백그라운드 태스크로 Gemini 3 Pro 가 프론트엔드를 작성하게 시켜두는 동안, Claude Opus 4.5 가 백엔드를 작성하고, 디버깅하다 막히면 GPT 5.2 에게 도움을 받습니다. 프론트엔드 구현이 완료되었다고 보고받으면, 이를 다시 확인하고 일하게 만들 수 있습니다.
|
||||
2. 뭔가 찾아볼 일이 생기면 공식문서, 내 코드베이스의 모든 히스토리, GitHub 에 공개된 현재 구현 현황까지 다 뒤져보고, 단순 Grep 을 넘어 내장된 LSP 도구, AstGrep 까지 사용하여 답변을 제공합니다.
|
||||
@@ -109,10 +127,7 @@ OpenCode 가 낭만이 사라진것같은 오늘날의 시대에, 당신에게
|
||||
4. 하기로 약속 한 일을 완수 할 때 까지 멈추지 않습니다.
|
||||
5. 이 프로젝트에 자세히 알기 싫다고요? 괜찮습니다. 그냥 'ultrathink' 라고 치세요.
|
||||
|
||||
주의: 이걸 설치한다고 갑자기 OpenCode 가 이렇게 동작한다는 것은 아닙니다. 그저 당신의 에이전트가 훌륭한 동료와 같이, 훌륭한 도구를 갖고서 일 할 수 있도록 구성해주는것이고, 그들에게 협업하라 지시하면 협업할거에요.
|
||||
모든 과정은 당신이 완전히 컨트롤 할 수 있습니다.
|
||||
ultrathink 를 통해 자동으로 동작하게 할 수 있지만, 그렇지 않을수도 있습니다. 이 프로젝트가 당신의 AI 에이전트 워크플로우를 제시하지는 않습니다.
|
||||
이 프로젝트는 그저 당신의 에이전트에게 좋은 동료를 소개시켜주고, 좋은 도구를 쥐어주는 것 뿐입니다.
|
||||
그러나 이러한 작업이 싫다면, 말했듯 특정한 기능만 가져가 사용 할 수 있습니다.
|
||||
|
||||
## 설치
|
||||
|
||||
@@ -575,13 +590,13 @@ Google Gemini 모델을 위한 내장 Antigravity OAuth를 활성화합니다:
|
||||
}
|
||||
```
|
||||
|
||||
| Permission | 설명 | 값 |
|
||||
|------------|------|-----|
|
||||
| `edit` | 파일 편집 권한 | `ask` / `allow` / `deny` |
|
||||
| `bash` | Bash 명령 실행 권한 | `ask` / `allow` / `deny` 또는 명령별: `{ "git": "allow", "rm": "deny" }` |
|
||||
| `webfetch` | 웹 요청 권한 | `ask` / `allow` / `deny` |
|
||||
| `doom_loop` | 무한 루프 감지 오버라이드 허용 | `ask` / `allow` / `deny` |
|
||||
| `external_directory` | 프로젝트 루트 외부 파일 접근 | `ask` / `allow` / `deny` |
|
||||
| Permission | 설명 | 값 |
|
||||
| -------------------- | ------------------------------ | ------------------------------------------------------------------------ |
|
||||
| `edit` | 파일 편집 권한 | `ask` / `allow` / `deny` |
|
||||
| `bash` | Bash 명령 실행 권한 | `ask` / `allow` / `deny` 또는 명령별: `{ "git": "allow", "rm": "deny" }` |
|
||||
| `webfetch` | 웹 요청 권한 | `ask` / `allow` / `deny` |
|
||||
| `doom_loop` | 무한 루프 감지 오버라이드 허용 | `ask` / `allow` / `deny` |
|
||||
| `external_directory` | 프로젝트 루트 외부 파일 접근 | `ask` / `allow` / `deny` |
|
||||
|
||||
또는 ~/.config/opencode/oh-my-opencode.json 혹은 .opencode/oh-my-opencode.json 의 `disabled_agents` 를 사용하여 비활성화할 수 있습니다:
|
||||
|
||||
@@ -628,8 +643,8 @@ OmO를 비활성화하고 원래 build/plan 에이전트를 복원하려면:
|
||||
}
|
||||
```
|
||||
|
||||
| 옵션 | 기본값 | 설명 |
|
||||
|------|--------|------|
|
||||
| 옵션 | 기본값 | 설명 |
|
||||
| ---------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
|
||||
| `disabled` | `false` | `true`면 OmO 에이전트를 비활성화하고 원래 build/plan을 primary로 복원합니다. `false`(기본값)면 OmO와 OmO-Plan이 primary 에이전트가 됩니다. |
|
||||
|
||||
### Hooks
|
||||
|
||||
83
README.md
83
README.md
@@ -11,6 +11,8 @@
|
||||
|
||||
> This is coding on steroids—`oh-my-opencode` in action. Run background agents, call specialized agents like oracle, librarian, and frontend engineer. Use crafted LSP/AST tools, curated MCPs, and a full Claude Code compatibility layer.
|
||||
|
||||
**START WITH YOUR ChatGPT, Claude, Gemini SUBSCRIPTIONS. WE ALL COVER THEM.**
|
||||
|
||||
<div align="center">
|
||||
|
||||
[](https://github.com/code-yeongyu/oh-my-opencode/releases)
|
||||
@@ -31,19 +33,26 @@
|
||||
- [Oh My OpenCode](#oh-my-opencode)
|
||||
- [Just Skip Reading This Readme](#just-skip-reading-this-readme)
|
||||
- [It's the Age of Agents](#its-the-age-of-agents)
|
||||
- [10 Minutes to Unlock](#10-minutes-to-unlock)
|
||||
- [For Those Who Want to Read](#for-those-who-want-to-read)
|
||||
- [Just Install It.](#just-install-it)
|
||||
- [Installation](#installation)
|
||||
- [For Humans](#for-humans)
|
||||
- [For LLM Agents](#for-llm-agents)
|
||||
- [Step 1: Verify OpenCode Installation](#step-1-verify-opencode-installation)
|
||||
- [Step 0: Ask user about the setup.](#step-0-ask-user-about-the-setup)
|
||||
- [Step 1: Install OpenCode, if not](#step-1-install-opencode-if-not)
|
||||
- [Step 2: Configure oh-my-opencode Plugin](#step-2-configure-oh-my-opencode-plugin)
|
||||
- [JSONC](#jsonc)
|
||||
- [JSON](#json)
|
||||
- [Step 3: Verify Setup](#step-3-verify-setup)
|
||||
- [Step 4: Configure Authentication](#step-4-configure-authentication)
|
||||
- [4.1 Anthropic (Claude)](#41-anthropic-claude)
|
||||
- [4.2 Google Gemini (Antigravity OAuth)](#42-google-gemini-antigravity-oauth)
|
||||
- [4.3 OpenAI (ChatGPT Plus/Pro)](#43-openai-chatgpt-pluspro)
|
||||
- [4.3.1 Model Configuration](#431-model-configuration)
|
||||
- [Anthropic (Claude)](#anthropic-claude)
|
||||
- [Google Gemini (Antigravity OAuth)](#google-gemini-antigravity-oauth)
|
||||
- [OpenAI (ChatGPT Plus/Pro)](#openai-chatgpt-pluspro)
|
||||
- [Model Configuration](#model-configuration)
|
||||
- [⚠️ Warning](#️-warning)
|
||||
- [Verify the setup](#verify-the-setup)
|
||||
- [Say 'Congratulations! 🎉' to the user](#say-congratulations--to-the-user)
|
||||
- [Too Complicated?](#too-complicated)
|
||||
- [Features](#features)
|
||||
- [Agents: Your Teammates](#agents-your-teammates)
|
||||
- [Background Agents: Work Like a Team](#background-agents-work-like-a-team)
|
||||
@@ -61,6 +70,9 @@
|
||||
- [Configuration](#configuration)
|
||||
- [Google Auth](#google-auth)
|
||||
- [Agents](#agents)
|
||||
- [Permission Options](#permission-options)
|
||||
- [OmO Agent](#omo-agent)
|
||||
- [Hooks](#hooks)
|
||||
- [MCPs](#mcps)
|
||||
- [LSP](#lsp)
|
||||
- [Author's Note](#authors-note)
|
||||
@@ -73,6 +85,7 @@ oMoMoMoMoMo···
|
||||
|
||||
[Claude Code](https://www.claude.com/product/claude-code) is great.
|
||||
But if you're a hacker, you'll fall head over heels for [OpenCode](https://github.com/sst/opencode).
|
||||
**START WITH YOUR ChatGPT, Claude, Gemini SUBSCRIPTIONS. WE ALL COVER THEM.**
|
||||
|
||||
- Endlessly extensible. Endlessly customizable.
|
||||
- Zero screen flicker.
|
||||
@@ -97,7 +110,31 @@ Hand this doc to an agent and let them set it up.
|
||||
- Ask why it's good, why it's not just another boilerplate setup, what actually gets better.
|
||||
- If you're an LLM agent, explain to the user what becomes possible right now with this project.
|
||||
|
||||
### 10 Minutes to Unlock
|
||||
### For Those Who Want to Read
|
||||
|
||||
Welcome. Introducing OmO (Oh-Mo).
|
||||
Everything below is customizable. Take what you want.
|
||||
All features are enabled by default. You don't have to do anything. Battery Included, works out of the box.
|
||||
|
||||
- Claude Code Compatibility: Command, Agent, Skill, MCP, Hook(PreToolUse, PostToolUse, UserPromptSubmit, Stop)
|
||||
- Comment Checker: No AI-like Comments Anymore.
|
||||
- Full LSP / AstGrep Support: Explore precisely, Refactor with confidence.
|
||||
- Todo Continuation Enforcer: Forces the agent to continue if it quits halfway.
|
||||
- Curated Agents
|
||||
- OmO: Super smart main agent (Opus 4.5 High)
|
||||
- Oracle: Design, debugging (GPT 5.2 Medium)
|
||||
- Frontend UI/UX Engineer: Frontend development (Gemini 3 Pro)
|
||||
- Librarian: Official docs, open source implementations, codebase exploration (Claude Sonnet 4.5)
|
||||
- Explore: Blazing fast codebase exploration (Contextual Grep) (Grok Code)
|
||||
- Curated MCPs:
|
||||
- Exa (Web Search)
|
||||
- Context7 (Official Documentation)
|
||||
- Grep.app (GitHub Code Search)
|
||||
- Interactive Terminal Supported - Tmux Integration
|
||||
- Async Agents
|
||||
- ...
|
||||
|
||||
#### Just Install It.
|
||||
|
||||
Just by installing this, you make your agents to work like:
|
||||
|
||||
@@ -109,13 +146,7 @@ Just by installing this, you make your agents to work like:
|
||||
4. It doesn't stop until the job is done.
|
||||
5. Don't want to dive deep into this project? No problem. Just type 'ultrathink'.
|
||||
|
||||
Note: Installing this doesn't magically make OpenCode behave this way. Above explanation is like "you can utilize even like this". It simply equips your agent with excellent teammates and powerful tools—tell them to collaborate and they will.
|
||||
You're in full control.
|
||||
You can enable automatic behavior via ultrathink, but you don't have to. This project doesn't dictate your AI agent workflow.
|
||||
It simply introduces your agent to great colleagues and puts better tools in their hands.
|
||||
|
||||
- Throw complex, massive tasks at it.
|
||||
- Drop the "ultrawork" keyword in your prompt and it handles everything automatically.
|
||||
If you don't want all this, as mentioned, you can just pick and choose specific features.
|
||||
|
||||
## Installation
|
||||
|
||||
@@ -265,6 +296,12 @@ opencode auth login
|
||||
```
|
||||
|
||||
|
||||
### ⚠️ Warning
|
||||
|
||||
**Unless the user explicitly requests it, do not change model settings or disable features (agents, hooks, MCPs).**
|
||||
|
||||
The plugin works perfectly by default. Except for the recommended `google_auth: true` setting, do not change other settings or turn off features without an explicit request.
|
||||
|
||||
### Verify the setup
|
||||
|
||||
Read this document again, think about you have done everything correctly.
|
||||
@@ -569,13 +606,13 @@ Fine-grained control over what agents can do:
|
||||
}
|
||||
```
|
||||
|
||||
| Permission | Description | Values |
|
||||
|------------|-------------|--------|
|
||||
| `edit` | File editing permission | `ask` / `allow` / `deny` |
|
||||
| `bash` | Bash command execution | `ask` / `allow` / `deny` or per-command: `{ "git": "allow", "rm": "deny" }` |
|
||||
| `webfetch` | Web request permission | `ask` / `allow` / `deny` |
|
||||
| `doom_loop` | Allow infinite loop detection override | `ask` / `allow` / `deny` |
|
||||
| `external_directory` | Access files outside project root | `ask` / `allow` / `deny` |
|
||||
| Permission | Description | Values |
|
||||
| -------------------- | -------------------------------------- | --------------------------------------------------------------------------- |
|
||||
| `edit` | File editing permission | `ask` / `allow` / `deny` |
|
||||
| `bash` | Bash command execution | `ask` / `allow` / `deny` or per-command: `{ "git": "allow", "rm": "deny" }` |
|
||||
| `webfetch` | Web request permission | `ask` / `allow` / `deny` |
|
||||
| `doom_loop` | Allow infinite loop detection override | `ask` / `allow` / `deny` |
|
||||
| `external_directory` | Access files outside project root | `ask` / `allow` / `deny` |
|
||||
|
||||
Or disable via `disabled_agents` in `~/.config/opencode/oh-my-opencode.json` or `.opencode/oh-my-opencode.json`:
|
||||
|
||||
@@ -622,8 +659,8 @@ You can also customize OmO and OmO-Plan like other agents:
|
||||
}
|
||||
```
|
||||
|
||||
| Option | Default | Description |
|
||||
|--------|---------|-------------|
|
||||
| Option | Default | Description |
|
||||
| ---------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `disabled` | `false` | When `true`, disables OmO agents and restores original build/plan as primary. When `false` (default), OmO and OmO-Plan become primary agents. |
|
||||
|
||||
### Hooks
|
||||
|
||||
10
bun.lock
10
bun.lock
@@ -7,9 +7,9 @@
|
||||
"dependencies": {
|
||||
"@ast-grep/cli": "^0.40.0",
|
||||
"@ast-grep/napi": "^0.40.0",
|
||||
"@code-yeongyu/comment-checker": "^0.5.0",
|
||||
"@code-yeongyu/comment-checker": "^0.6.0",
|
||||
"@openauthjs/openauth": "^0.4.3",
|
||||
"@opencode-ai/plugin": "^1.0.150",
|
||||
"@opencode-ai/plugin": "^1.0.162",
|
||||
"hono": "^4.10.4",
|
||||
"picomatch": "^4.0.2",
|
||||
"xdg-basedir": "^5.1.0",
|
||||
@@ -68,13 +68,13 @@
|
||||
|
||||
"@ast-grep/napi-win32-x64-msvc": ["@ast-grep/napi-win32-x64-msvc@0.40.0", "", { "os": "win32", "cpu": "x64" }, "sha512-Hk2IwfPqMFGZt5SRxsoWmGLxBXxprow4LRp1eG6V8EEiJCNHxZ9ZiEaIc5bNvMDBjHVSnqZAXT22dROhrcSKQg=="],
|
||||
|
||||
"@code-yeongyu/comment-checker": ["@code-yeongyu/comment-checker@0.5.0", "", { "os": [ "linux", "win32", "darwin", ], "cpu": [ "x64", "arm64", ], "bin": { "comment-checker": "bin/comment-checker" } }, "sha512-rKD2qQnTVUacsVQtpu3I5Sxi09X/XpOwS9fcmbUv1yfUL6llraaPuLmmxMBMRcmm7Zu31yEPVKCeUkVODfRL1g=="],
|
||||
"@code-yeongyu/comment-checker": ["@code-yeongyu/comment-checker@0.6.0", "", { "os": [ "linux", "win32", "darwin", ], "cpu": [ "x64", "arm64", ], "bin": { "comment-checker": "bin/comment-checker" } }, "sha512-VtDPrhbUJcb5BIS18VMcY/N/xSLbMr6dpU9MO1NYQyEDhI4pSIx07K4gOlCutG/nHVCjO+HEarn8rttODP+5UA=="],
|
||||
|
||||
"@openauthjs/openauth": ["@openauthjs/openauth@0.4.3", "", { "dependencies": { "@standard-schema/spec": "1.0.0-beta.3", "aws4fetch": "1.0.20", "jose": "5.9.6" }, "peerDependencies": { "arctic": "^2.2.2", "hono": "^4.0.0" } }, "sha512-RlnjqvHzqcbFVymEwhlUEuac4utA5h4nhSK/i2szZuQmxTIqbGUxZ+nM+avM+VV4Ing+/ZaNLKILoXS3yrkOOw=="],
|
||||
|
||||
"@opencode-ai/plugin": ["@opencode-ai/plugin@1.0.150", "", { "dependencies": { "@opencode-ai/sdk": "1.0.150", "zod": "4.1.8" } }, "sha512-XmY3yydk120GBv2KeLxSZlElFx4Zx9TYLa3bS9X1TxXot42UeoMLEi3Xa46yboYnWwp4bC9Fu+Gd1E7hypG8Jw=="],
|
||||
"@opencode-ai/plugin": ["@opencode-ai/plugin@1.0.162", "", { "dependencies": { "@opencode-ai/sdk": "1.0.162", "zod": "4.1.8" } }, "sha512-tiJw7SCfSlG/3tY2O0J2UT06OLuazOzsv1zYlFbLxLy/EVedtW0pzxYalO20a4e//vInvOXFkhd2jLyB5vNEVA=="],
|
||||
|
||||
"@opencode-ai/sdk": ["@opencode-ai/sdk@1.0.150", "", {}, "sha512-Nz9Di8UD/GK01w3N+jpiGNB733pYkNY8RNLbuE/HUxEGSP5apbXBY0IdhbW7859sXZZK38kF1NqOx4UxwBf4Bw=="],
|
||||
"@opencode-ai/sdk": ["@opencode-ai/sdk@1.0.162", "", {}, "sha512-+XqRErBUt9eb1m3i/7WkZc/QCKCCjTaGV3MvhLhs/CUwbUn767D/ugzcG/i2ec8j/4nQmjJbjPDRmrQfvF1Qjw=="],
|
||||
|
||||
"@oslojs/asn1": ["@oslojs/asn1@1.0.0", "", { "dependencies": { "@oslojs/binary": "1.0.0" } }, "sha512-zw/wn0sj0j0QKbIXfIlnEcTviaCzYOY3V5rAyjR6YtOByFtJiT574+8p9Wlach0lZH9fddD4yb9laEAIl4vXQA=="],
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "oh-my-opencode",
|
||||
"version": "2.1.4",
|
||||
"version": "2.1.6",
|
||||
"description": "OpenCode plugin - custom agents (oracle, librarian) and enhanced features",
|
||||
"main": "dist/index.js",
|
||||
"types": "dist/index.d.ts",
|
||||
@@ -48,9 +48,9 @@
|
||||
"dependencies": {
|
||||
"@ast-grep/cli": "^0.40.0",
|
||||
"@ast-grep/napi": "^0.40.0",
|
||||
"@code-yeongyu/comment-checker": "^0.5.0",
|
||||
"@code-yeongyu/comment-checker": "^0.6.0",
|
||||
"@openauthjs/openauth": "^0.4.3",
|
||||
"@opencode-ai/plugin": "^1.0.150",
|
||||
"@opencode-ai/plugin": "^1.0.162",
|
||||
"hono": "^4.10.4",
|
||||
"picomatch": "^4.0.2",
|
||||
"xdg-basedir": "^5.1.0",
|
||||
|
||||
@@ -10,6 +10,7 @@ import {
|
||||
findNearestMessageWithFields,
|
||||
MESSAGE_STORAGE,
|
||||
} from "../hook-message-injector"
|
||||
import { subagentSessions } from "../claude-code-session-state"
|
||||
|
||||
type OpencodeClient = PluginInput["client"]
|
||||
|
||||
@@ -82,6 +83,7 @@ export class BackgroundManager {
|
||||
}
|
||||
|
||||
const sessionID = createResult.data.id
|
||||
subagentSessions.add(sessionID)
|
||||
|
||||
const task: BackgroundTask = {
|
||||
id: `bg_${crypto.randomUUID().slice(0, 8)}`,
|
||||
@@ -236,6 +238,7 @@ export class BackgroundManager {
|
||||
|
||||
this.tasks.delete(task.id)
|
||||
this.clearNotificationsForTask(task.id)
|
||||
subagentSessions.delete(sessionID)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import type { PluginInput } from "@opencode-ai/plugin"
|
||||
import { platform } from "os"
|
||||
import { subagentSessions } from "../features/claude-code-session-state"
|
||||
|
||||
interface Todo {
|
||||
content: string
|
||||
@@ -219,6 +220,8 @@ export function createSessionNotification(
|
||||
const sessionID = props?.sessionID as string | undefined
|
||||
if (!sessionID) return
|
||||
|
||||
if (subagentSessions.has(sessionID)) return
|
||||
|
||||
if (notifiedSessions.has(sessionID)) return
|
||||
if (pendingTimers.has(sessionID)) return
|
||||
|
||||
|
||||
@@ -312,7 +312,6 @@ const OhMyOpenCodePlugin: Plugin = async (ctx) => {
|
||||
const { name: _planName, ...planConfigWithoutName } = config.agent?.plan ?? {};
|
||||
const omoPlanOverride = pluginConfig.agents?.["OmO-Plan"];
|
||||
const omoPlanBase = {
|
||||
...builtinAgents.OmO,
|
||||
...planConfigWithoutName,
|
||||
description: `${config.agent?.plan?.description ?? "Plan agent"} (OhMyOpenCode version)`,
|
||||
color: config.agent?.plan?.color ?? "#6495ED",
|
||||
|
||||
@@ -1,36 +1,7 @@
|
||||
export const BACKGROUND_TASK_DESCRIPTION = `Launch a background agent task that runs asynchronously.
|
||||
export const BACKGROUND_TASK_DESCRIPTION = `Run agent task in background. Returns task_id immediately; notifies on completion.
|
||||
|
||||
The task runs in a separate session while you continue with other work. The system will notify you when the task completes.
|
||||
Use \`background_output\` to get results. Prompts MUST be in English.`
|
||||
|
||||
Use this for:
|
||||
- Long-running research tasks
|
||||
- Complex analysis that doesn't need immediate results
|
||||
- Parallel workloads to maximize throughput
|
||||
export const BACKGROUND_OUTPUT_DESCRIPTION = `Get output from background task. System notifies on completion, so block=true rarely needed.`
|
||||
|
||||
Arguments:
|
||||
- description: Short task description (shown in status)
|
||||
- prompt: Full detailed prompt for the agent (MUST be in English for optimal LLM performance)
|
||||
- agent: Agent type to use (any agent allowed)
|
||||
|
||||
IMPORTANT: Always write prompts in English regardless of user's language. LLMs perform significantly better with English prompts.
|
||||
|
||||
Returns immediately with task ID and session info. Use \`background_output\` to check progress or retrieve results.`
|
||||
|
||||
export const BACKGROUND_OUTPUT_DESCRIPTION = `Get output from a background task.
|
||||
|
||||
Arguments:
|
||||
- task_id: Required task ID to get output from
|
||||
- block: If true, wait for task completion. If false (default), return current status immediately.
|
||||
- timeout: Max wait time in ms when blocking (default: 60000, max: 600000)
|
||||
|
||||
The system automatically notifies when background tasks complete. You typically don't need block=true.`
|
||||
|
||||
export const BACKGROUND_CANCEL_DESCRIPTION = `Cancel running background task(s).
|
||||
|
||||
Only works for tasks with status "running". Aborts the background session and marks the task as cancelled.
|
||||
|
||||
Arguments:
|
||||
- taskId: Task ID to cancel (optional if all=true)
|
||||
- all: Set to true to cancel ALL running background tasks at once (default: false)
|
||||
|
||||
**Cleanup Before Answer**: When you have gathered sufficient information and are ready to provide your final answer to the user, use \`all=true\` to cancel ALL running background tasks first, then deliver your response. This conserves resources and ensures clean workflow completion.`
|
||||
export const BACKGROUND_CANCEL_DESCRIPTION = `Cancel running background task(s). Use all=true to cancel ALL before final answer.`
|
||||
|
||||
@@ -1,25 +1,7 @@
|
||||
export const ALLOWED_AGENTS = ["explore", "librarian"] as const
|
||||
|
||||
export const CALL_OMO_AGENT_DESCRIPTION = `Launch a new agent to handle complex, multi-step tasks autonomously.
|
||||
export const CALL_OMO_AGENT_DESCRIPTION = `Spawn explore/librarian agent. run_in_background REQUIRED (true=async with task_id, false=sync).
|
||||
|
||||
This is a restricted version of the Task tool that only allows spawning explore and librarian agents.
|
||||
Available: {agents}
|
||||
|
||||
Available agent types:
|
||||
{agents}
|
||||
|
||||
When using this tool, you must specify a subagent_type parameter to select which agent type to use.
|
||||
|
||||
**IMPORTANT: run_in_background parameter is REQUIRED**
|
||||
- \`run_in_background=true\`: Task runs asynchronously in background. Returns immediately with task_id.
|
||||
The system will notify you when the task completes.
|
||||
Use \`background_output\` tool with task_id to check progress (block=false returns full status info).
|
||||
- \`run_in_background=false\`: Task runs synchronously. Waits for completion and returns full result.
|
||||
|
||||
Usage notes:
|
||||
1. Launch multiple agents concurrently whenever possible, to maximize performance
|
||||
2. When the agent is done, it will return a single message back to you
|
||||
3. Each agent invocation is stateless unless you provide a session_id
|
||||
4. Your prompt should contain a highly detailed task description for the agent to perform autonomously
|
||||
5. Clearly tell the agent whether you expect it to write code or just to do research
|
||||
6. For long-running research tasks, use run_in_background=true to avoid blocking
|
||||
7. **IMPORTANT**: Always write prompts in English regardless of user's language. LLMs perform significantly better with English prompts.`
|
||||
Prompts MUST be in English. Use \`background_output\` for async results.`
|
||||
|
||||
@@ -11,12 +11,6 @@ export const BLOCKED_TMUX_SUBCOMMANDS = [
|
||||
"pipep",
|
||||
]
|
||||
|
||||
export const INTERACTIVE_BASH_DESCRIPTION = `Execute tmux commands for interactive terminal session management.
|
||||
export const INTERACTIVE_BASH_DESCRIPTION = `Execute tmux commands. Use "omo-{name}" session pattern.
|
||||
|
||||
Use session names following the pattern "omo-{name}" for automatic tracking.
|
||||
|
||||
BLOCKED COMMANDS (use bash tool instead):
|
||||
- capture-pane / capturep: Use bash to read output files or pipe output
|
||||
- save-buffer / saveb: Use bash to save content to files
|
||||
- show-buffer / showb: Use bash to read buffer content
|
||||
- pipe-pane / pipep: Use bash for piping output`
|
||||
Blocked (use bash instead): capture-pane, save-buffer, show-buffer, pipe-pane.`
|
||||
|
||||
@@ -1,10 +1,3 @@
|
||||
export const MULTIMODAL_LOOKER_AGENT = "multimodal-looker" as const
|
||||
|
||||
export const LOOK_AT_DESCRIPTION = `Analyze media files (PDFs, images, diagrams) that require visual interpretation.
|
||||
|
||||
Parameters:
|
||||
- file_path: Absolute path to the file to analyze
|
||||
- goal: What specific information to extract (be specific for better results)
|
||||
|
||||
This tool uses a separate context window with Gemini 2.5 Flash for multimodal analysis,
|
||||
saving tokens in the main conversation while providing accurate visual interpretation.`
|
||||
export const LOOK_AT_DESCRIPTION = `Analyze media files (PDFs, images, diagrams) via Gemini 2.5 Flash in separate context. Saves main context tokens.`
|
||||
|
||||
@@ -35,12 +35,11 @@ import type {
|
||||
|
||||
|
||||
export const lsp_hover = tool({
|
||||
description:
|
||||
"Get type information, documentation, and signature for a symbol at a specific position in a file. Use this when you need to understand what a variable, function, class, or any identifier represents.",
|
||||
description: "Get type info, docs, and signature for a symbol at position.",
|
||||
args: {
|
||||
filePath: tool.schema.string().describe("The absolute path to the file"),
|
||||
line: tool.schema.number().min(1).describe("Line number (1-based)"),
|
||||
character: tool.schema.number().min(0).describe("Character position (0-based)"),
|
||||
filePath: tool.schema.string(),
|
||||
line: tool.schema.number().min(1).describe("1-based"),
|
||||
character: tool.schema.number().min(0).describe("0-based"),
|
||||
},
|
||||
execute: async (args, context) => {
|
||||
try {
|
||||
@@ -57,12 +56,11 @@ export const lsp_hover = tool({
|
||||
})
|
||||
|
||||
export const lsp_goto_definition = tool({
|
||||
description:
|
||||
"Jump to the source definition of a symbol (variable, function, class, type, import, etc.). Use this when you need to find WHERE something is defined.",
|
||||
description: "Jump to symbol definition. Find WHERE something is defined.",
|
||||
args: {
|
||||
filePath: tool.schema.string().describe("The absolute path to the file"),
|
||||
line: tool.schema.number().min(1).describe("Line number (1-based)"),
|
||||
character: tool.schema.number().min(0).describe("Character position (0-based)"),
|
||||
filePath: tool.schema.string(),
|
||||
line: tool.schema.number().min(1).describe("1-based"),
|
||||
character: tool.schema.number().min(0).describe("0-based"),
|
||||
},
|
||||
execute: async (args, context) => {
|
||||
try {
|
||||
@@ -95,12 +93,11 @@ export const lsp_goto_definition = tool({
|
||||
})
|
||||
|
||||
export const lsp_find_references = tool({
|
||||
description:
|
||||
"Find ALL usages/references of a symbol across the entire workspace. Use this when you need to understand the impact of changing something.",
|
||||
description: "Find ALL usages/references of a symbol across the entire workspace.",
|
||||
args: {
|
||||
filePath: tool.schema.string().describe("The absolute path to the file"),
|
||||
line: tool.schema.number().min(1).describe("Line number (1-based)"),
|
||||
character: tool.schema.number().min(0).describe("Character position (0-based)"),
|
||||
filePath: tool.schema.string(),
|
||||
line: tool.schema.number().min(1).describe("1-based"),
|
||||
character: tool.schema.number().min(0).describe("0-based"),
|
||||
includeDeclaration: tool.schema.boolean().optional().describe("Include the declaration itself"),
|
||||
},
|
||||
execute: async (args, context) => {
|
||||
@@ -133,10 +130,9 @@ export const lsp_find_references = tool({
|
||||
})
|
||||
|
||||
export const lsp_document_symbols = tool({
|
||||
description:
|
||||
"Get a hierarchical outline of all symbols (classes, functions, methods, variables, types, constants) in a single file. Use this to quickly understand a file's structure.",
|
||||
description: "Get hierarchical outline of all symbols in a file.",
|
||||
args: {
|
||||
filePath: tool.schema.string().describe("The absolute path to the file"),
|
||||
filePath: tool.schema.string(),
|
||||
},
|
||||
execute: async (args, context) => {
|
||||
try {
|
||||
@@ -172,12 +168,11 @@ export const lsp_document_symbols = tool({
|
||||
})
|
||||
|
||||
export const lsp_workspace_symbols = tool({
|
||||
description:
|
||||
"Search for symbols by name across the ENTIRE workspace/project. Use this when you know (or partially know) a symbol's name but don't know which file it's in.",
|
||||
description: "Search symbols by name across ENTIRE workspace.",
|
||||
args: {
|
||||
filePath: tool.schema.string().describe("A file path in the workspace to determine the workspace root"),
|
||||
query: tool.schema.string().describe("The symbol name to search for (supports fuzzy matching)"),
|
||||
limit: tool.schema.number().optional().describe("Maximum number of results to return"),
|
||||
filePath: tool.schema.string(),
|
||||
query: tool.schema.string().describe("Symbol name (fuzzy match)"),
|
||||
limit: tool.schema.number().optional().describe("Max results"),
|
||||
},
|
||||
execute: async (args, context) => {
|
||||
try {
|
||||
@@ -208,10 +203,9 @@ export const lsp_workspace_symbols = tool({
|
||||
})
|
||||
|
||||
export const lsp_diagnostics = tool({
|
||||
description:
|
||||
"Get all errors, warnings, and hints for a file from the language server. Use this to check if code has type errors, syntax issues, or linting problems BEFORE running the build.",
|
||||
description: "Get errors, warnings, hints from language server BEFORE running build.",
|
||||
args: {
|
||||
filePath: tool.schema.string().describe("The absolute path to the file"),
|
||||
filePath: tool.schema.string(),
|
||||
severity: tool.schema
|
||||
.enum(["error", "warning", "information", "hint", "all"])
|
||||
.optional()
|
||||
@@ -256,7 +250,7 @@ export const lsp_diagnostics = tool({
|
||||
})
|
||||
|
||||
export const lsp_servers = tool({
|
||||
description: "List all available LSP servers and check if they are installed. Use this to see what language support is available.",
|
||||
description: "List available LSP servers and installation status.",
|
||||
args: {},
|
||||
execute: async (_args, context) => {
|
||||
try {
|
||||
@@ -278,12 +272,11 @@ export const lsp_servers = tool({
|
||||
})
|
||||
|
||||
export const lsp_prepare_rename = tool({
|
||||
description:
|
||||
"Check if a symbol at a specific position can be renamed. Use this BEFORE attempting to rename to validate the operation and get the current symbol name.",
|
||||
description: "Check if rename is valid. Use BEFORE lsp_rename.",
|
||||
args: {
|
||||
filePath: tool.schema.string().describe("The absolute path to the file"),
|
||||
line: tool.schema.number().min(1).describe("Line number (1-based)"),
|
||||
character: tool.schema.number().min(0).describe("Character position (0-based)"),
|
||||
filePath: tool.schema.string(),
|
||||
line: tool.schema.number().min(1).describe("1-based"),
|
||||
character: tool.schema.number().min(0).describe("0-based"),
|
||||
},
|
||||
execute: async (args, context) => {
|
||||
try {
|
||||
@@ -303,13 +296,12 @@ export const lsp_prepare_rename = tool({
|
||||
})
|
||||
|
||||
export const lsp_rename = tool({
|
||||
description:
|
||||
"Rename a symbol across the entire workspace. This APPLIES the rename to all files. Use lsp_prepare_rename first to check if rename is possible.",
|
||||
description: "Rename symbol across entire workspace. APPLIES changes to all files.",
|
||||
args: {
|
||||
filePath: tool.schema.string().describe("The absolute path to the file"),
|
||||
line: tool.schema.number().min(1).describe("Line number (1-based)"),
|
||||
character: tool.schema.number().min(0).describe("Character position (0-based)"),
|
||||
newName: tool.schema.string().describe("The new name for the symbol"),
|
||||
filePath: tool.schema.string(),
|
||||
line: tool.schema.number().min(1).describe("1-based"),
|
||||
character: tool.schema.number().min(0).describe("0-based"),
|
||||
newName: tool.schema.string().describe("New symbol name"),
|
||||
},
|
||||
execute: async (args, context) => {
|
||||
try {
|
||||
@@ -327,14 +319,13 @@ export const lsp_rename = tool({
|
||||
})
|
||||
|
||||
export const lsp_code_actions = tool({
|
||||
description:
|
||||
"Get available code actions for a range in the file. Code actions include quick fixes, refactorings (extract, inline, rewrite), and source actions (organize imports, fix all). Use this to discover what automated changes the language server can perform.",
|
||||
description: "Get available quick fixes, refactorings, and source actions (organize imports, fix all).",
|
||||
args: {
|
||||
filePath: tool.schema.string().describe("The absolute path to the file"),
|
||||
startLine: tool.schema.number().min(1).describe("Start line number (1-based)"),
|
||||
startCharacter: tool.schema.number().min(0).describe("Start character position (0-based)"),
|
||||
endLine: tool.schema.number().min(1).describe("End line number (1-based)"),
|
||||
endCharacter: tool.schema.number().min(0).describe("End character position (0-based)"),
|
||||
filePath: tool.schema.string(),
|
||||
startLine: tool.schema.number().min(1).describe("1-based"),
|
||||
startCharacter: tool.schema.number().min(0).describe("0-based"),
|
||||
endLine: tool.schema.number().min(1).describe("1-based"),
|
||||
endCharacter: tool.schema.number().min(0).describe("0-based"),
|
||||
kind: tool.schema
|
||||
.enum([
|
||||
"quickfix",
|
||||
@@ -372,13 +363,10 @@ export const lsp_code_actions = tool({
|
||||
})
|
||||
|
||||
export const lsp_code_action_resolve = tool({
|
||||
description:
|
||||
"Resolve and APPLY a code action. This resolves the full details and applies the changes to files. Use after getting a code action from lsp_code_actions.",
|
||||
description: "Resolve and APPLY a code action from lsp_code_actions.",
|
||||
args: {
|
||||
filePath: tool.schema
|
||||
.string()
|
||||
.describe("The absolute path to a file in the workspace (used to find the LSP server)"),
|
||||
codeAction: tool.schema.string().describe("The code action JSON object as returned by lsp_code_actions (stringified)"),
|
||||
filePath: tool.schema.string(),
|
||||
codeAction: tool.schema.string().describe("Code action JSON from lsp_code_actions"),
|
||||
},
|
||||
execute: async (args, context) => {
|
||||
try {
|
||||
|
||||
Reference in New Issue
Block a user