oh-my-opencode 2.0.1 → 2.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.ko.md +74 -1
- package/README.md +74 -1
- package/dist/config/schema.d.ts +284 -2
- package/dist/index.js +60 -46
- package/package.json +1 -1
package/README.ko.md
CHANGED
|
@@ -261,8 +261,9 @@ opencode auth login
|
|
|
261
261
|
|
|
262
262
|
### Agents: 당신의 새로운 팀원들
|
|
263
263
|
|
|
264
|
+
- **OmO** (`anthropic/claude-opus-4-5`): **기본 에이전트입니다.** OpenCode를 위한 강력한 AI 오케스트레이터입니다. 전문 서브에이전트를 활용하여 복잡한 작업을 계획, 위임, 실행합니다. 백그라운드 태스크 위임과 todo 기반 워크플로우를 강조합니다. 최대 추론 능력을 위해 Claude Opus 4.5와 확장된 사고(32k 버짓)를 사용합니다.
|
|
264
265
|
- **oracle** (`openai/gpt-5.2`): 아키텍처, 코드 리뷰, 전략 수립을 위한 전문가 조언자. GPT-5.2의 뛰어난 논리적 추론과 깊은 분석 능력을 활용합니다. AmpCode 에서 영감을 받았습니다.
|
|
265
|
-
- **librarian** (`
|
|
266
|
+
- **librarian** (`opencode/big-pickle`): 멀티 레포 분석, 문서 조회, 구현 예제 담당. OpenCode Zen을 통해 GLM-4.6(big-pickle)을 사용합니다—무료이고 빠르며 문서 조사에 탁월합니다. AmpCode 에서 영감을 받았습니다.
|
|
266
267
|
- **explore** (`opencode/grok-code`): 빠른 코드베이스 탐색, 파일 패턴 매칭. Claude Code는 Haiku를 쓰지만, 우리는 Grok을 씁니다. 현재 무료이고, 극도로 빠르며, 파일 탐색 작업에 충분한 지능을 갖췄기 때문입니다. Claude Code 에서 영감을 받았습니다.
|
|
267
268
|
- **frontend-ui-ux-engineer** (`google/gemini-3-pro-preview`): 개발자로 전향한 디자이너라는 설정을 갖고 있습니다. 멋진 UI를 만듭니다. 아름답고 창의적인 UI 코드를 생성하는 데 탁월한 Gemini를 사용합니다.
|
|
268
269
|
- **document-writer** (`google/gemini-3-pro-preview`): 기술 문서 전문가라는 설정을 갖고 있습니다. Gemini 는 문학가입니다. 글을 기가막히게 씁니다.
|
|
@@ -465,7 +466,12 @@ Oh My OpenCode는 다음 위치의 훅을 읽고 실행합니다:
|
|
|
465
466
|
- **Anthropic Auto Compact**: Claude 모델이 토큰 제한에 도달하면 자동으로 세션을 요약하고 압축합니다. 수동 개입 없이 작업을 계속할 수 있습니다.
|
|
466
467
|
- **Session Recovery**: 세션 에러(누락된 도구 결과, thinking 블록 문제, 빈 메시지 등)에서 자동 복구합니다. 돌다가 세션이 망가지지 않습니다. 망가져도 복구됩니다.
|
|
467
468
|
- **Auto Update Checker**: oh-my-opencode의 새 버전이 출시되면 알림을 표시합니다.
|
|
469
|
+
- **Startup Toast**: OhMyOpenCode 로드 시 환영 메시지를 표시합니다. 세션을 제대로 시작하기 위한 작은 "oMoMoMo".
|
|
468
470
|
- **Background Notification**: 백그라운드 에이전트 작업이 완료되면 알림을 받습니다.
|
|
471
|
+
- **Session Notification**: 에이전트가 대기 상태가 되면 OS 알림을 보냅니다. macOS, Linux, Windows에서 작동—에이전트가 입력을 기다릴 때 놓치지 마세요.
|
|
472
|
+
- **Empty Task Response Detector**: Task 도구가 빈 응답을 반환하면 감지합니다. 이미 빈 응답이 왔는데 무한정 기다리는 상황을 방지합니다.
|
|
473
|
+
- **Grep Output Truncator**: grep은 산더미 같은 텍스트를 반환할 수 있습니다. 남은 컨텍스트 윈도우에 따라 동적으로 출력을 축소합니다—50% 여유 공간 유지, 최대 50k 토큰.
|
|
474
|
+
- **Tool Output Truncator**: 같은 아이디어, 더 넓은 범위. Grep, Glob, LSP 도구, AST-grep의 출력을 축소합니다. 한 번의 장황한 검색이 전체 컨텍스트를 잡아먹는 것을 방지합니다.
|
|
469
475
|
|
|
470
476
|
## 설정
|
|
471
477
|
|
|
@@ -515,6 +521,34 @@ Google Gemini 모델을 위한 내장 Antigravity OAuth를 활성화합니다:
|
|
|
515
521
|
|
|
516
522
|
각 에이전트에서 지원하는 옵션: `model`, `temperature`, `top_p`, `prompt`, `tools`, `disable`, `description`, `mode`, `color`, `permission`.
|
|
517
523
|
|
|
524
|
+
`OmO` (메인 오케스트레이터)와 `build` (기본 에이전트)도 동일한 옵션으로 설정을 오버라이드할 수 있습니다.
|
|
525
|
+
|
|
526
|
+
#### Permission 옵션
|
|
527
|
+
|
|
528
|
+
에이전트가 할 수 있는 작업을 세밀하게 제어합니다:
|
|
529
|
+
|
|
530
|
+
```json
|
|
531
|
+
{
|
|
532
|
+
"agents": {
|
|
533
|
+
"explore": {
|
|
534
|
+
"permission": {
|
|
535
|
+
"edit": "deny",
|
|
536
|
+
"bash": "ask",
|
|
537
|
+
"webfetch": "allow"
|
|
538
|
+
}
|
|
539
|
+
}
|
|
540
|
+
}
|
|
541
|
+
}
|
|
542
|
+
```
|
|
543
|
+
|
|
544
|
+
| Permission | 설명 | 값 |
|
|
545
|
+
|------------|------|-----|
|
|
546
|
+
| `edit` | 파일 편집 권한 | `ask` / `allow` / `deny` |
|
|
547
|
+
| `bash` | Bash 명령 실행 권한 | `ask` / `allow` / `deny` 또는 명령별: `{ "git": "allow", "rm": "deny" }` |
|
|
548
|
+
| `webfetch` | 웹 요청 권한 | `ask` / `allow` / `deny` |
|
|
549
|
+
| `doom_loop` | 무한 루프 감지 오버라이드 허용 | `ask` / `allow` / `deny` |
|
|
550
|
+
| `external_directory` | 프로젝트 루트 외부 파일 접근 | `ask` / `allow` / `deny` |
|
|
551
|
+
|
|
518
552
|
또는 ~/.config/opencode/oh-my-opencode.json 혹은 .opencode/oh-my-opencode.json 의 `disabled_agents` 를 사용하여 비활성화할 수 있습니다:
|
|
519
553
|
|
|
520
554
|
```json
|
|
@@ -525,6 +559,45 @@ Google Gemini 모델을 위한 내장 Antigravity OAuth를 활성화합니다:
|
|
|
525
559
|
|
|
526
560
|
사용 가능한 에이전트: `oracle`, `librarian`, `explore`, `frontend-ui-ux-engineer`, `document-writer`, `multimodal-looker`
|
|
527
561
|
|
|
562
|
+
### OmO Agent
|
|
563
|
+
|
|
564
|
+
활성화 시(기본값), OmO는 두 개의 primary 에이전트를 추가하고 내장 에이전트를 subagent로 강등합니다:
|
|
565
|
+
|
|
566
|
+
- **OmO**: Primary 오케스트레이터 에이전트 (Claude Opus 4.5)
|
|
567
|
+
- **OmO-Plan**: OpenCode plan 에이전트의 모든 설정을 런타임에 상속 (description에 "OhMyOpenCode version" 추가)
|
|
568
|
+
- **build**: subagent로 강등
|
|
569
|
+
- **plan**: subagent로 강등
|
|
570
|
+
|
|
571
|
+
OmO를 비활성화하고 원래 build/plan 에이전트를 복원하려면:
|
|
572
|
+
|
|
573
|
+
```json
|
|
574
|
+
{
|
|
575
|
+
"omo_agent": {
|
|
576
|
+
"disabled": true
|
|
577
|
+
}
|
|
578
|
+
}
|
|
579
|
+
```
|
|
580
|
+
|
|
581
|
+
다른 에이전트처럼 OmO와 OmO-Plan도 커스터마이징할 수 있습니다:
|
|
582
|
+
|
|
583
|
+
```json
|
|
584
|
+
{
|
|
585
|
+
"agents": {
|
|
586
|
+
"OmO": {
|
|
587
|
+
"model": "anthropic/claude-sonnet-4",
|
|
588
|
+
"temperature": 0.3
|
|
589
|
+
},
|
|
590
|
+
"OmO-Plan": {
|
|
591
|
+
"model": "openai/gpt-5.2"
|
|
592
|
+
}
|
|
593
|
+
}
|
|
594
|
+
}
|
|
595
|
+
```
|
|
596
|
+
|
|
597
|
+
| 옵션 | 기본값 | 설명 |
|
|
598
|
+
|------|--------|------|
|
|
599
|
+
| `disabled` | `false` | `true`면 OmO 에이전트를 비활성화하고 원래 build/plan을 primary로 복원합니다. `false`(기본값)면 OmO와 OmO-Plan이 primary 에이전트가 됩니다. |
|
|
600
|
+
|
|
528
601
|
### Hooks
|
|
529
602
|
|
|
530
603
|
`~/.config/opencode/oh-my-opencode.json` 또는 `.opencode/oh-my-opencode.json`의 `disabled_hooks`를 통해 특정 내장 훅을 비활성화할 수 있습니다:
|
package/README.md
CHANGED
|
@@ -262,8 +262,9 @@ The plugin works perfectly with defaults. Aside from the recommended `google_aut
|
|
|
262
262
|
|
|
263
263
|
### Agents: Your Teammates
|
|
264
264
|
|
|
265
|
+
- **OmO** (`anthropic/claude-opus-4-5`): **The default agent.** A powerful AI orchestrator for OpenCode. Plans, delegates, and executes complex tasks using specialized subagents with aggressive parallel execution. Emphasizes background task delegation and todo-driven workflow. Uses Claude Opus 4.5 with extended thinking (32k budget) for maximum reasoning capability.
|
|
265
266
|
- **oracle** (`openai/gpt-5.2`): Architecture, code review, strategy. Uses GPT-5.2 for its stellar logical reasoning and deep analysis. Inspired by AmpCode.
|
|
266
|
-
- **librarian** (`
|
|
267
|
+
- **librarian** (`opencode/big-pickle`): Multi-repo analysis, doc lookup, implementation examples. Uses GLM-4.6 (big-pickle) via OpenCode Zen—free, fast, and excellent for documentation research. Inspired by AmpCode.
|
|
267
268
|
- **explore** (`opencode/grok-code`): Fast codebase exploration and pattern matching. Claude Code uses Haiku; we use Grok—it's free, blazing fast, and plenty smart for file traversal. Inspired by Claude Code.
|
|
268
269
|
- **frontend-ui-ux-engineer** (`google/gemini-3-pro-preview`): A designer turned developer. Builds gorgeous UIs. Gemini excels at creative, beautiful UI code.
|
|
269
270
|
- **document-writer** (`google/gemini-3-pro-preview`): Technical writing expert. Gemini is a wordsmith—writes prose that flows.
|
|
@@ -466,7 +467,12 @@ When agents thrive, you thrive. But I want to help you directly too.
|
|
|
466
467
|
- **Anthropic Auto Compact**: When Claude models hit token limits, automatically summarizes and compacts the session—no manual intervention needed.
|
|
467
468
|
- **Session Recovery**: Automatically recovers from session errors (missing tool results, thinking block issues, empty messages). Sessions don't crash mid-run. Even if they do, they recover.
|
|
468
469
|
- **Auto Update Checker**: Notifies you when a new version of oh-my-opencode is available.
|
|
470
|
+
- **Startup Toast**: Shows a welcome message when OhMyOpenCode loads. A little "oMoMoMo" to start your session right.
|
|
469
471
|
- **Background Notification**: Get notified when background agent tasks complete.
|
|
472
|
+
- **Session Notification**: Sends OS notifications when agents go idle. Works on macOS, Linux, and Windows—never miss when your agent needs input.
|
|
473
|
+
- **Empty Task Response Detector**: Catches when Task tool returns nothing. Warns you about potential agent failures so you don't wait forever for a response that already came back empty.
|
|
474
|
+
- **Grep Output Truncator**: Grep can return mountains of text. This dynamically truncates output based on your remaining context window—keeps 50% headroom, caps at 50k tokens.
|
|
475
|
+
- **Tool Output Truncator**: Same idea, broader scope. Truncates output from Grep, Glob, LSP tools, and AST-grep. Prevents one verbose search from eating your entire context.
|
|
470
476
|
|
|
471
477
|
## Configuration
|
|
472
478
|
|
|
@@ -516,6 +522,34 @@ Override built-in agent settings:
|
|
|
516
522
|
|
|
517
523
|
Each agent supports: `model`, `temperature`, `top_p`, `prompt`, `tools`, `disable`, `description`, `mode`, `color`, `permission`.
|
|
518
524
|
|
|
525
|
+
You can also override settings for `OmO` (the main orchestrator) and `build` (the default agent) using the same options.
|
|
526
|
+
|
|
527
|
+
#### Permission Options
|
|
528
|
+
|
|
529
|
+
Fine-grained control over what agents can do:
|
|
530
|
+
|
|
531
|
+
```json
|
|
532
|
+
{
|
|
533
|
+
"agents": {
|
|
534
|
+
"explore": {
|
|
535
|
+
"permission": {
|
|
536
|
+
"edit": "deny",
|
|
537
|
+
"bash": "ask",
|
|
538
|
+
"webfetch": "allow"
|
|
539
|
+
}
|
|
540
|
+
}
|
|
541
|
+
}
|
|
542
|
+
}
|
|
543
|
+
```
|
|
544
|
+
|
|
545
|
+
| Permission | Description | Values |
|
|
546
|
+
|------------|-------------|--------|
|
|
547
|
+
| `edit` | File editing permission | `ask` / `allow` / `deny` |
|
|
548
|
+
| `bash` | Bash command execution | `ask` / `allow` / `deny` or per-command: `{ "git": "allow", "rm": "deny" }` |
|
|
549
|
+
| `webfetch` | Web request permission | `ask` / `allow` / `deny` |
|
|
550
|
+
| `doom_loop` | Allow infinite loop detection override | `ask` / `allow` / `deny` |
|
|
551
|
+
| `external_directory` | Access files outside project root | `ask` / `allow` / `deny` |
|
|
552
|
+
|
|
519
553
|
Or disable via `disabled_agents` in `~/.config/opencode/oh-my-opencode.json` or `.opencode/oh-my-opencode.json`:
|
|
520
554
|
|
|
521
555
|
```json
|
|
@@ -526,6 +560,45 @@ Or disable via `disabled_agents` in `~/.config/opencode/oh-my-opencode.json` or
|
|
|
526
560
|
|
|
527
561
|
Available agents: `oracle`, `librarian`, `explore`, `frontend-ui-ux-engineer`, `document-writer`, `multimodal-looker`
|
|
528
562
|
|
|
563
|
+
### OmO Agent
|
|
564
|
+
|
|
565
|
+
When enabled (default), OmO adds two primary agents and demotes the built-in agents to subagents:
|
|
566
|
+
|
|
567
|
+
- **OmO**: Primary orchestrator agent (Claude Opus 4.5)
|
|
568
|
+
- **OmO-Plan**: Inherits all settings from OpenCode's plan agent at runtime (description appended with "OhMyOpenCode version")
|
|
569
|
+
- **build**: Demoted to subagent
|
|
570
|
+
- **plan**: Demoted to subagent
|
|
571
|
+
|
|
572
|
+
To disable OmO and restore the original build/plan agents:
|
|
573
|
+
|
|
574
|
+
```json
|
|
575
|
+
{
|
|
576
|
+
"omo_agent": {
|
|
577
|
+
"disabled": true
|
|
578
|
+
}
|
|
579
|
+
}
|
|
580
|
+
```
|
|
581
|
+
|
|
582
|
+
You can also customize OmO and OmO-Plan like other agents:
|
|
583
|
+
|
|
584
|
+
```json
|
|
585
|
+
{
|
|
586
|
+
"agents": {
|
|
587
|
+
"OmO": {
|
|
588
|
+
"model": "anthropic/claude-sonnet-4",
|
|
589
|
+
"temperature": 0.3
|
|
590
|
+
},
|
|
591
|
+
"OmO-Plan": {
|
|
592
|
+
"model": "openai/gpt-5.2"
|
|
593
|
+
}
|
|
594
|
+
}
|
|
595
|
+
}
|
|
596
|
+
```
|
|
597
|
+
|
|
598
|
+
| Option | Default | Description |
|
|
599
|
+
|--------|---------|-------------|
|
|
600
|
+
| `disabled` | `false` | When `true`, disables OmO agents and restores original build/plan as primary. When `false` (default), OmO and OmO-Plan become primary agents. |
|
|
601
|
+
|
|
529
602
|
### Hooks
|
|
530
603
|
|
|
531
604
|
Disable specific built-in hooks via `disabled_hooks` in `~/.config/opencode/oh-my-opencode.json` or `.opencode/oh-my-opencode.json`:
|
package/dist/config/schema.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
export declare const BuiltinAgentNameSchema: z.ZodEnum<{
|
|
3
|
+
OmO: "OmO";
|
|
3
4
|
oracle: "oracle";
|
|
4
5
|
librarian: "librarian";
|
|
5
6
|
explore: "explore";
|
|
@@ -8,6 +9,7 @@ export declare const BuiltinAgentNameSchema: z.ZodEnum<{
|
|
|
8
9
|
"multimodal-looker": "multimodal-looker";
|
|
9
10
|
}>;
|
|
10
11
|
export declare const OverridableAgentNameSchema: z.ZodEnum<{
|
|
12
|
+
OmO: "OmO";
|
|
11
13
|
oracle: "oracle";
|
|
12
14
|
librarian: "librarian";
|
|
13
15
|
explore: "explore";
|
|
@@ -15,8 +17,11 @@ export declare const OverridableAgentNameSchema: z.ZodEnum<{
|
|
|
15
17
|
"document-writer": "document-writer";
|
|
16
18
|
"multimodal-looker": "multimodal-looker";
|
|
17
19
|
build: "build";
|
|
20
|
+
plan: "plan";
|
|
21
|
+
"OmO-Plan": "OmO-Plan";
|
|
18
22
|
}>;
|
|
19
23
|
export declare const AgentNameSchema: z.ZodEnum<{
|
|
24
|
+
OmO: "OmO";
|
|
20
25
|
oracle: "oracle";
|
|
21
26
|
librarian: "librarian";
|
|
22
27
|
explore: "explore";
|
|
@@ -137,6 +142,144 @@ export declare const AgentOverridesSchema: z.ZodObject<{
|
|
|
137
142
|
}>>;
|
|
138
143
|
}, z.core.$strip>>;
|
|
139
144
|
}, z.core.$strip>>;
|
|
145
|
+
plan: z.ZodOptional<z.ZodObject<{
|
|
146
|
+
model: z.ZodOptional<z.ZodString>;
|
|
147
|
+
temperature: z.ZodOptional<z.ZodNumber>;
|
|
148
|
+
top_p: z.ZodOptional<z.ZodNumber>;
|
|
149
|
+
prompt: z.ZodOptional<z.ZodString>;
|
|
150
|
+
tools: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodBoolean>>;
|
|
151
|
+
disable: z.ZodOptional<z.ZodBoolean>;
|
|
152
|
+
description: z.ZodOptional<z.ZodString>;
|
|
153
|
+
mode: z.ZodOptional<z.ZodEnum<{
|
|
154
|
+
subagent: "subagent";
|
|
155
|
+
primary: "primary";
|
|
156
|
+
all: "all";
|
|
157
|
+
}>>;
|
|
158
|
+
color: z.ZodOptional<z.ZodString>;
|
|
159
|
+
permission: z.ZodOptional<z.ZodObject<{
|
|
160
|
+
edit: z.ZodOptional<z.ZodEnum<{
|
|
161
|
+
allow: "allow";
|
|
162
|
+
deny: "deny";
|
|
163
|
+
ask: "ask";
|
|
164
|
+
}>>;
|
|
165
|
+
bash: z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{
|
|
166
|
+
allow: "allow";
|
|
167
|
+
deny: "deny";
|
|
168
|
+
ask: "ask";
|
|
169
|
+
}>, z.ZodRecord<z.ZodString, z.ZodEnum<{
|
|
170
|
+
allow: "allow";
|
|
171
|
+
deny: "deny";
|
|
172
|
+
ask: "ask";
|
|
173
|
+
}>>]>>;
|
|
174
|
+
webfetch: z.ZodOptional<z.ZodEnum<{
|
|
175
|
+
allow: "allow";
|
|
176
|
+
deny: "deny";
|
|
177
|
+
ask: "ask";
|
|
178
|
+
}>>;
|
|
179
|
+
doom_loop: z.ZodOptional<z.ZodEnum<{
|
|
180
|
+
allow: "allow";
|
|
181
|
+
deny: "deny";
|
|
182
|
+
ask: "ask";
|
|
183
|
+
}>>;
|
|
184
|
+
external_directory: z.ZodOptional<z.ZodEnum<{
|
|
185
|
+
allow: "allow";
|
|
186
|
+
deny: "deny";
|
|
187
|
+
ask: "ask";
|
|
188
|
+
}>>;
|
|
189
|
+
}, z.core.$strip>>;
|
|
190
|
+
}, z.core.$strip>>;
|
|
191
|
+
OmO: z.ZodOptional<z.ZodObject<{
|
|
192
|
+
model: z.ZodOptional<z.ZodString>;
|
|
193
|
+
temperature: z.ZodOptional<z.ZodNumber>;
|
|
194
|
+
top_p: z.ZodOptional<z.ZodNumber>;
|
|
195
|
+
prompt: z.ZodOptional<z.ZodString>;
|
|
196
|
+
tools: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodBoolean>>;
|
|
197
|
+
disable: z.ZodOptional<z.ZodBoolean>;
|
|
198
|
+
description: z.ZodOptional<z.ZodString>;
|
|
199
|
+
mode: z.ZodOptional<z.ZodEnum<{
|
|
200
|
+
subagent: "subagent";
|
|
201
|
+
primary: "primary";
|
|
202
|
+
all: "all";
|
|
203
|
+
}>>;
|
|
204
|
+
color: z.ZodOptional<z.ZodString>;
|
|
205
|
+
permission: z.ZodOptional<z.ZodObject<{
|
|
206
|
+
edit: z.ZodOptional<z.ZodEnum<{
|
|
207
|
+
allow: "allow";
|
|
208
|
+
deny: "deny";
|
|
209
|
+
ask: "ask";
|
|
210
|
+
}>>;
|
|
211
|
+
bash: z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{
|
|
212
|
+
allow: "allow";
|
|
213
|
+
deny: "deny";
|
|
214
|
+
ask: "ask";
|
|
215
|
+
}>, z.ZodRecord<z.ZodString, z.ZodEnum<{
|
|
216
|
+
allow: "allow";
|
|
217
|
+
deny: "deny";
|
|
218
|
+
ask: "ask";
|
|
219
|
+
}>>]>>;
|
|
220
|
+
webfetch: z.ZodOptional<z.ZodEnum<{
|
|
221
|
+
allow: "allow";
|
|
222
|
+
deny: "deny";
|
|
223
|
+
ask: "ask";
|
|
224
|
+
}>>;
|
|
225
|
+
doom_loop: z.ZodOptional<z.ZodEnum<{
|
|
226
|
+
allow: "allow";
|
|
227
|
+
deny: "deny";
|
|
228
|
+
ask: "ask";
|
|
229
|
+
}>>;
|
|
230
|
+
external_directory: z.ZodOptional<z.ZodEnum<{
|
|
231
|
+
allow: "allow";
|
|
232
|
+
deny: "deny";
|
|
233
|
+
ask: "ask";
|
|
234
|
+
}>>;
|
|
235
|
+
}, z.core.$strip>>;
|
|
236
|
+
}, z.core.$strip>>;
|
|
237
|
+
"OmO-Plan": z.ZodOptional<z.ZodObject<{
|
|
238
|
+
model: z.ZodOptional<z.ZodString>;
|
|
239
|
+
temperature: z.ZodOptional<z.ZodNumber>;
|
|
240
|
+
top_p: z.ZodOptional<z.ZodNumber>;
|
|
241
|
+
prompt: z.ZodOptional<z.ZodString>;
|
|
242
|
+
tools: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodBoolean>>;
|
|
243
|
+
disable: z.ZodOptional<z.ZodBoolean>;
|
|
244
|
+
description: z.ZodOptional<z.ZodString>;
|
|
245
|
+
mode: z.ZodOptional<z.ZodEnum<{
|
|
246
|
+
subagent: "subagent";
|
|
247
|
+
primary: "primary";
|
|
248
|
+
all: "all";
|
|
249
|
+
}>>;
|
|
250
|
+
color: z.ZodOptional<z.ZodString>;
|
|
251
|
+
permission: z.ZodOptional<z.ZodObject<{
|
|
252
|
+
edit: z.ZodOptional<z.ZodEnum<{
|
|
253
|
+
allow: "allow";
|
|
254
|
+
deny: "deny";
|
|
255
|
+
ask: "ask";
|
|
256
|
+
}>>;
|
|
257
|
+
bash: z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{
|
|
258
|
+
allow: "allow";
|
|
259
|
+
deny: "deny";
|
|
260
|
+
ask: "ask";
|
|
261
|
+
}>, z.ZodRecord<z.ZodString, z.ZodEnum<{
|
|
262
|
+
allow: "allow";
|
|
263
|
+
deny: "deny";
|
|
264
|
+
ask: "ask";
|
|
265
|
+
}>>]>>;
|
|
266
|
+
webfetch: z.ZodOptional<z.ZodEnum<{
|
|
267
|
+
allow: "allow";
|
|
268
|
+
deny: "deny";
|
|
269
|
+
ask: "ask";
|
|
270
|
+
}>>;
|
|
271
|
+
doom_loop: z.ZodOptional<z.ZodEnum<{
|
|
272
|
+
allow: "allow";
|
|
273
|
+
deny: "deny";
|
|
274
|
+
ask: "ask";
|
|
275
|
+
}>>;
|
|
276
|
+
external_directory: z.ZodOptional<z.ZodEnum<{
|
|
277
|
+
allow: "allow";
|
|
278
|
+
deny: "deny";
|
|
279
|
+
ask: "ask";
|
|
280
|
+
}>>;
|
|
281
|
+
}, z.core.$strip>>;
|
|
282
|
+
}, z.core.$strip>>;
|
|
140
283
|
oracle: z.ZodOptional<z.ZodObject<{
|
|
141
284
|
model: z.ZodOptional<z.ZodString>;
|
|
142
285
|
temperature: z.ZodOptional<z.ZodNumber>;
|
|
@@ -422,7 +565,7 @@ export declare const ClaudeCodeConfigSchema: z.ZodObject<{
|
|
|
422
565
|
hooks: z.ZodOptional<z.ZodBoolean>;
|
|
423
566
|
}, z.core.$strip>;
|
|
424
567
|
export declare const OmoAgentConfigSchema: z.ZodObject<{
|
|
425
|
-
|
|
568
|
+
disabled: z.ZodOptional<z.ZodBoolean>;
|
|
426
569
|
}, z.core.$strip>;
|
|
427
570
|
export declare const OhMyOpenCodeConfigSchema: z.ZodObject<{
|
|
428
571
|
$schema: z.ZodOptional<z.ZodString>;
|
|
@@ -432,6 +575,7 @@ export declare const OhMyOpenCodeConfigSchema: z.ZodObject<{
|
|
|
432
575
|
grep_app: "grep_app";
|
|
433
576
|
}>>>;
|
|
434
577
|
disabled_agents: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
578
|
+
OmO: "OmO";
|
|
435
579
|
oracle: "oracle";
|
|
436
580
|
librarian: "librarian";
|
|
437
581
|
explore: "explore";
|
|
@@ -506,6 +650,144 @@ export declare const OhMyOpenCodeConfigSchema: z.ZodObject<{
|
|
|
506
650
|
}>>;
|
|
507
651
|
}, z.core.$strip>>;
|
|
508
652
|
}, z.core.$strip>>;
|
|
653
|
+
plan: z.ZodOptional<z.ZodObject<{
|
|
654
|
+
model: z.ZodOptional<z.ZodString>;
|
|
655
|
+
temperature: z.ZodOptional<z.ZodNumber>;
|
|
656
|
+
top_p: z.ZodOptional<z.ZodNumber>;
|
|
657
|
+
prompt: z.ZodOptional<z.ZodString>;
|
|
658
|
+
tools: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodBoolean>>;
|
|
659
|
+
disable: z.ZodOptional<z.ZodBoolean>;
|
|
660
|
+
description: z.ZodOptional<z.ZodString>;
|
|
661
|
+
mode: z.ZodOptional<z.ZodEnum<{
|
|
662
|
+
subagent: "subagent";
|
|
663
|
+
primary: "primary";
|
|
664
|
+
all: "all";
|
|
665
|
+
}>>;
|
|
666
|
+
color: z.ZodOptional<z.ZodString>;
|
|
667
|
+
permission: z.ZodOptional<z.ZodObject<{
|
|
668
|
+
edit: z.ZodOptional<z.ZodEnum<{
|
|
669
|
+
allow: "allow";
|
|
670
|
+
deny: "deny";
|
|
671
|
+
ask: "ask";
|
|
672
|
+
}>>;
|
|
673
|
+
bash: z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{
|
|
674
|
+
allow: "allow";
|
|
675
|
+
deny: "deny";
|
|
676
|
+
ask: "ask";
|
|
677
|
+
}>, z.ZodRecord<z.ZodString, z.ZodEnum<{
|
|
678
|
+
allow: "allow";
|
|
679
|
+
deny: "deny";
|
|
680
|
+
ask: "ask";
|
|
681
|
+
}>>]>>;
|
|
682
|
+
webfetch: z.ZodOptional<z.ZodEnum<{
|
|
683
|
+
allow: "allow";
|
|
684
|
+
deny: "deny";
|
|
685
|
+
ask: "ask";
|
|
686
|
+
}>>;
|
|
687
|
+
doom_loop: z.ZodOptional<z.ZodEnum<{
|
|
688
|
+
allow: "allow";
|
|
689
|
+
deny: "deny";
|
|
690
|
+
ask: "ask";
|
|
691
|
+
}>>;
|
|
692
|
+
external_directory: z.ZodOptional<z.ZodEnum<{
|
|
693
|
+
allow: "allow";
|
|
694
|
+
deny: "deny";
|
|
695
|
+
ask: "ask";
|
|
696
|
+
}>>;
|
|
697
|
+
}, z.core.$strip>>;
|
|
698
|
+
}, z.core.$strip>>;
|
|
699
|
+
OmO: z.ZodOptional<z.ZodObject<{
|
|
700
|
+
model: z.ZodOptional<z.ZodString>;
|
|
701
|
+
temperature: z.ZodOptional<z.ZodNumber>;
|
|
702
|
+
top_p: z.ZodOptional<z.ZodNumber>;
|
|
703
|
+
prompt: z.ZodOptional<z.ZodString>;
|
|
704
|
+
tools: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodBoolean>>;
|
|
705
|
+
disable: z.ZodOptional<z.ZodBoolean>;
|
|
706
|
+
description: z.ZodOptional<z.ZodString>;
|
|
707
|
+
mode: z.ZodOptional<z.ZodEnum<{
|
|
708
|
+
subagent: "subagent";
|
|
709
|
+
primary: "primary";
|
|
710
|
+
all: "all";
|
|
711
|
+
}>>;
|
|
712
|
+
color: z.ZodOptional<z.ZodString>;
|
|
713
|
+
permission: z.ZodOptional<z.ZodObject<{
|
|
714
|
+
edit: z.ZodOptional<z.ZodEnum<{
|
|
715
|
+
allow: "allow";
|
|
716
|
+
deny: "deny";
|
|
717
|
+
ask: "ask";
|
|
718
|
+
}>>;
|
|
719
|
+
bash: z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{
|
|
720
|
+
allow: "allow";
|
|
721
|
+
deny: "deny";
|
|
722
|
+
ask: "ask";
|
|
723
|
+
}>, z.ZodRecord<z.ZodString, z.ZodEnum<{
|
|
724
|
+
allow: "allow";
|
|
725
|
+
deny: "deny";
|
|
726
|
+
ask: "ask";
|
|
727
|
+
}>>]>>;
|
|
728
|
+
webfetch: z.ZodOptional<z.ZodEnum<{
|
|
729
|
+
allow: "allow";
|
|
730
|
+
deny: "deny";
|
|
731
|
+
ask: "ask";
|
|
732
|
+
}>>;
|
|
733
|
+
doom_loop: z.ZodOptional<z.ZodEnum<{
|
|
734
|
+
allow: "allow";
|
|
735
|
+
deny: "deny";
|
|
736
|
+
ask: "ask";
|
|
737
|
+
}>>;
|
|
738
|
+
external_directory: z.ZodOptional<z.ZodEnum<{
|
|
739
|
+
allow: "allow";
|
|
740
|
+
deny: "deny";
|
|
741
|
+
ask: "ask";
|
|
742
|
+
}>>;
|
|
743
|
+
}, z.core.$strip>>;
|
|
744
|
+
}, z.core.$strip>>;
|
|
745
|
+
"OmO-Plan": z.ZodOptional<z.ZodObject<{
|
|
746
|
+
model: z.ZodOptional<z.ZodString>;
|
|
747
|
+
temperature: z.ZodOptional<z.ZodNumber>;
|
|
748
|
+
top_p: z.ZodOptional<z.ZodNumber>;
|
|
749
|
+
prompt: z.ZodOptional<z.ZodString>;
|
|
750
|
+
tools: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodBoolean>>;
|
|
751
|
+
disable: z.ZodOptional<z.ZodBoolean>;
|
|
752
|
+
description: z.ZodOptional<z.ZodString>;
|
|
753
|
+
mode: z.ZodOptional<z.ZodEnum<{
|
|
754
|
+
subagent: "subagent";
|
|
755
|
+
primary: "primary";
|
|
756
|
+
all: "all";
|
|
757
|
+
}>>;
|
|
758
|
+
color: z.ZodOptional<z.ZodString>;
|
|
759
|
+
permission: z.ZodOptional<z.ZodObject<{
|
|
760
|
+
edit: z.ZodOptional<z.ZodEnum<{
|
|
761
|
+
allow: "allow";
|
|
762
|
+
deny: "deny";
|
|
763
|
+
ask: "ask";
|
|
764
|
+
}>>;
|
|
765
|
+
bash: z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{
|
|
766
|
+
allow: "allow";
|
|
767
|
+
deny: "deny";
|
|
768
|
+
ask: "ask";
|
|
769
|
+
}>, z.ZodRecord<z.ZodString, z.ZodEnum<{
|
|
770
|
+
allow: "allow";
|
|
771
|
+
deny: "deny";
|
|
772
|
+
ask: "ask";
|
|
773
|
+
}>>]>>;
|
|
774
|
+
webfetch: z.ZodOptional<z.ZodEnum<{
|
|
775
|
+
allow: "allow";
|
|
776
|
+
deny: "deny";
|
|
777
|
+
ask: "ask";
|
|
778
|
+
}>>;
|
|
779
|
+
doom_loop: z.ZodOptional<z.ZodEnum<{
|
|
780
|
+
allow: "allow";
|
|
781
|
+
deny: "deny";
|
|
782
|
+
ask: "ask";
|
|
783
|
+
}>>;
|
|
784
|
+
external_directory: z.ZodOptional<z.ZodEnum<{
|
|
785
|
+
allow: "allow";
|
|
786
|
+
deny: "deny";
|
|
787
|
+
ask: "ask";
|
|
788
|
+
}>>;
|
|
789
|
+
}, z.core.$strip>>;
|
|
790
|
+
}, z.core.$strip>>;
|
|
509
791
|
oracle: z.ZodOptional<z.ZodObject<{
|
|
510
792
|
model: z.ZodOptional<z.ZodString>;
|
|
511
793
|
temperature: z.ZodOptional<z.ZodNumber>;
|
|
@@ -792,7 +1074,7 @@ export declare const OhMyOpenCodeConfigSchema: z.ZodObject<{
|
|
|
792
1074
|
}, z.core.$strip>>;
|
|
793
1075
|
google_auth: z.ZodOptional<z.ZodBoolean>;
|
|
794
1076
|
omo_agent: z.ZodOptional<z.ZodObject<{
|
|
795
|
-
|
|
1077
|
+
disabled: z.ZodOptional<z.ZodBoolean>;
|
|
796
1078
|
}, z.core.$strip>>;
|
|
797
1079
|
}, z.core.$strip>;
|
|
798
1080
|
export type OhMyOpenCodeConfig = z.infer<typeof OhMyOpenCodeConfigSchema>;
|
package/dist/index.js
CHANGED
|
@@ -1839,41 +1839,6 @@ var omoAgent = {
|
|
|
1839
1839
|
budgetTokens: 32000
|
|
1840
1840
|
},
|
|
1841
1841
|
maxTokens: 128000,
|
|
1842
|
-
tools: {
|
|
1843
|
-
read: true,
|
|
1844
|
-
write: true,
|
|
1845
|
-
edit: true,
|
|
1846
|
-
multiedit: true,
|
|
1847
|
-
patch: true,
|
|
1848
|
-
glob: true,
|
|
1849
|
-
grep: true,
|
|
1850
|
-
list: true,
|
|
1851
|
-
bash: true,
|
|
1852
|
-
batch: true,
|
|
1853
|
-
webfetch: true,
|
|
1854
|
-
websearch: true,
|
|
1855
|
-
codesearch: true,
|
|
1856
|
-
todowrite: true,
|
|
1857
|
-
todoread: true,
|
|
1858
|
-
task: true,
|
|
1859
|
-
lsp_hover: true,
|
|
1860
|
-
lsp_goto_definition: true,
|
|
1861
|
-
lsp_find_references: true,
|
|
1862
|
-
lsp_document_symbols: true,
|
|
1863
|
-
lsp_workspace_symbols: true,
|
|
1864
|
-
lsp_diagnostics: true,
|
|
1865
|
-
lsp_rename: true,
|
|
1866
|
-
lsp_prepare_rename: true,
|
|
1867
|
-
lsp_code_actions: true,
|
|
1868
|
-
lsp_code_action_resolve: true,
|
|
1869
|
-
lsp_servers: true,
|
|
1870
|
-
ast_grep_search: true,
|
|
1871
|
-
ast_grep_replace: true,
|
|
1872
|
-
skill: true,
|
|
1873
|
-
call_omo_agent: true,
|
|
1874
|
-
background_task: true,
|
|
1875
|
-
background_output: true
|
|
1876
|
-
},
|
|
1877
1842
|
prompt: OMO_SYSTEM_PROMPT,
|
|
1878
1843
|
color: "#00CED1"
|
|
1879
1844
|
};
|
|
@@ -3601,7 +3566,7 @@ async function sendNotification(ctx, p, title, message) {
|
|
|
3601
3566
|
await ctx.$`osascript -e ${'display notification "' + escapedMessage + '" with title "' + escapedTitle + '"'}`;
|
|
3602
3567
|
break;
|
|
3603
3568
|
case "linux":
|
|
3604
|
-
await ctx.$`notify-send ${escapedTitle} ${escapedMessage}
|
|
3569
|
+
await ctx.$`notify-send ${escapedTitle} ${escapedMessage}`.catch(() => {});
|
|
3605
3570
|
break;
|
|
3606
3571
|
case "win32":
|
|
3607
3572
|
await ctx.$`powershell -Command ${"[System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms'); [System.Windows.Forms.MessageBox]::Show('" + escapedMessage + "', '" + escapedTitle + "')"}`;
|
|
@@ -7455,7 +7420,7 @@ TELL THE USER WHAT AGENTS YOU WILL LEVERAGE NOW TO SATISFY USER'S REQUEST.
|
|
|
7455
7420
|
## WORKFLOW
|
|
7456
7421
|
1. Analyze the request and identify required capabilities
|
|
7457
7422
|
2. Spawn exploration/librarian agents via background_task in PARALLEL (10+ if needed)
|
|
7458
|
-
3. Use
|
|
7423
|
+
3. Always Use Plan agent with gathered context to create detailed work breakdown
|
|
7459
7424
|
4. Execute with continuous verification against original requirements
|
|
7460
7425
|
|
|
7461
7426
|
</ultrawork-mode>
|
|
@@ -25596,6 +25561,7 @@ var AgentPermissionSchema = exports_external.object({
|
|
|
25596
25561
|
external_directory: PermissionValue.optional()
|
|
25597
25562
|
});
|
|
25598
25563
|
var BuiltinAgentNameSchema = exports_external.enum([
|
|
25564
|
+
"OmO",
|
|
25599
25565
|
"oracle",
|
|
25600
25566
|
"librarian",
|
|
25601
25567
|
"explore",
|
|
@@ -25605,6 +25571,9 @@ var BuiltinAgentNameSchema = exports_external.enum([
|
|
|
25605
25571
|
]);
|
|
25606
25572
|
var OverridableAgentNameSchema = exports_external.enum([
|
|
25607
25573
|
"build",
|
|
25574
|
+
"plan",
|
|
25575
|
+
"OmO",
|
|
25576
|
+
"OmO-Plan",
|
|
25608
25577
|
"oracle",
|
|
25609
25578
|
"librarian",
|
|
25610
25579
|
"explore",
|
|
@@ -25646,6 +25615,9 @@ var AgentOverrideConfigSchema = exports_external.object({
|
|
|
25646
25615
|
});
|
|
25647
25616
|
var AgentOverridesSchema = exports_external.object({
|
|
25648
25617
|
build: AgentOverrideConfigSchema.optional(),
|
|
25618
|
+
plan: AgentOverrideConfigSchema.optional(),
|
|
25619
|
+
OmO: AgentOverrideConfigSchema.optional(),
|
|
25620
|
+
"OmO-Plan": AgentOverrideConfigSchema.optional(),
|
|
25649
25621
|
oracle: AgentOverrideConfigSchema.optional(),
|
|
25650
25622
|
librarian: AgentOverrideConfigSchema.optional(),
|
|
25651
25623
|
explore: AgentOverrideConfigSchema.optional(),
|
|
@@ -25661,7 +25633,7 @@ var ClaudeCodeConfigSchema = exports_external.object({
|
|
|
25661
25633
|
hooks: exports_external.boolean().optional()
|
|
25662
25634
|
});
|
|
25663
25635
|
var OmoAgentConfigSchema = exports_external.object({
|
|
25664
|
-
|
|
25636
|
+
disabled: exports_external.boolean().optional()
|
|
25665
25637
|
});
|
|
25666
25638
|
var OhMyOpenCodeConfigSchema = exports_external.object({
|
|
25667
25639
|
$schema: exports_external.string().optional(),
|
|
@@ -25683,11 +25655,32 @@ function getUserConfigDir2() {
|
|
|
25683
25655
|
}
|
|
25684
25656
|
return process.env.XDG_CONFIG_HOME || path6.join(os4.homedir(), ".config");
|
|
25685
25657
|
}
|
|
25658
|
+
var AGENT_NAME_MAP = {
|
|
25659
|
+
omo: "OmO",
|
|
25660
|
+
build: "build",
|
|
25661
|
+
oracle: "oracle",
|
|
25662
|
+
librarian: "librarian",
|
|
25663
|
+
explore: "explore",
|
|
25664
|
+
"frontend-ui-ux-engineer": "frontend-ui-ux-engineer",
|
|
25665
|
+
"document-writer": "document-writer",
|
|
25666
|
+
"multimodal-looker": "multimodal-looker"
|
|
25667
|
+
};
|
|
25668
|
+
function normalizeAgentNames(agents) {
|
|
25669
|
+
const normalized = {};
|
|
25670
|
+
for (const [key, value] of Object.entries(agents)) {
|
|
25671
|
+
const normalizedKey = AGENT_NAME_MAP[key.toLowerCase()] ?? key;
|
|
25672
|
+
normalized[normalizedKey] = value;
|
|
25673
|
+
}
|
|
25674
|
+
return normalized;
|
|
25675
|
+
}
|
|
25686
25676
|
function loadConfigFromPath2(configPath) {
|
|
25687
25677
|
try {
|
|
25688
25678
|
if (fs6.existsSync(configPath)) {
|
|
25689
25679
|
const content = fs6.readFileSync(configPath, "utf-8");
|
|
25690
25680
|
const rawConfig = JSON.parse(content);
|
|
25681
|
+
if (rawConfig.agents && typeof rawConfig.agents === "object") {
|
|
25682
|
+
rawConfig.agents = normalizeAgentNames(rawConfig.agents);
|
|
25683
|
+
}
|
|
25691
25684
|
const result = OhMyOpenCodeConfigSchema.safeParse(rawConfig);
|
|
25692
25685
|
if (!result.success) {
|
|
25693
25686
|
log(`Config validation error in ${configPath}:`, result.error.issues);
|
|
@@ -25795,14 +25788,35 @@ var OhMyOpenCodePlugin = async (ctx) => {
|
|
|
25795
25788
|
const builtinAgents = createBuiltinAgents(pluginConfig.disabled_agents, pluginConfig.agents);
|
|
25796
25789
|
const userAgents = pluginConfig.claude_code?.agents ?? true ? loadUserAgents() : {};
|
|
25797
25790
|
const projectAgents = pluginConfig.claude_code?.agents ?? true ? loadProjectAgents() : {};
|
|
25798
|
-
const
|
|
25799
|
-
|
|
25800
|
-
...
|
|
25801
|
-
|
|
25802
|
-
|
|
25803
|
-
|
|
25804
|
-
|
|
25805
|
-
|
|
25791
|
+
const isOmoEnabled = pluginConfig.omo_agent?.disabled !== true;
|
|
25792
|
+
if (isOmoEnabled && builtinAgents.OmO) {
|
|
25793
|
+
const { name: _planName, ...planConfigWithoutName } = config3.agent?.plan ?? {};
|
|
25794
|
+
const omoPlanOverride = pluginConfig.agents?.["OmO-Plan"];
|
|
25795
|
+
const omoPlanBase = {
|
|
25796
|
+
...builtinAgents.OmO,
|
|
25797
|
+
...planConfigWithoutName,
|
|
25798
|
+
description: `${config3.agent?.plan?.description ?? "Plan agent"} (OhMyOpenCode version)`,
|
|
25799
|
+
color: config3.agent?.plan?.color ?? "#6495ED"
|
|
25800
|
+
};
|
|
25801
|
+
const omoPlanConfig = omoPlanOverride ? deepMerge(omoPlanBase, omoPlanOverride) : omoPlanBase;
|
|
25802
|
+
config3.agent = {
|
|
25803
|
+
OmO: builtinAgents.OmO,
|
|
25804
|
+
"OmO-Plan": omoPlanConfig,
|
|
25805
|
+
...Object.fromEntries(Object.entries(builtinAgents).filter(([k]) => k !== "OmO")),
|
|
25806
|
+
...userAgents,
|
|
25807
|
+
...projectAgents,
|
|
25808
|
+
...config3.agent,
|
|
25809
|
+
build: { ...config3.agent?.build, mode: "subagent" },
|
|
25810
|
+
plan: { ...config3.agent?.plan, mode: "subagent" }
|
|
25811
|
+
};
|
|
25812
|
+
} else {
|
|
25813
|
+
config3.agent = {
|
|
25814
|
+
...builtinAgents,
|
|
25815
|
+
...userAgents,
|
|
25816
|
+
...projectAgents,
|
|
25817
|
+
...config3.agent
|
|
25818
|
+
};
|
|
25819
|
+
}
|
|
25806
25820
|
config3.tools = {
|
|
25807
25821
|
...config3.tools
|
|
25808
25822
|
};
|