oh-my-opencode 3.0.0 → 3.0.1
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/dist/agents/atlas.d.ts +1 -1
- package/dist/cli/config-manager.d.ts +77 -14
- package/dist/cli/index.js +44 -25
- package/dist/features/builtin-commands/templates/ralph-loop.d.ts +1 -1
- package/dist/index.js +107 -91
- package/dist/shared/index.d.ts +0 -1
- package/dist/tools/call-omo-agent/constants.d.ts +1 -1
- package/dist/tools/delegate-task/types.d.ts +2 -1
- package/dist/tools/index.d.ts +1 -2
- package/package.json +8 -8
- package/dist/hooks/background-compaction/index.d.ts +0 -19
- package/dist/shared/config-path.d.ts +0 -13
package/dist/agents/atlas.d.ts
CHANGED
|
@@ -14,6 +14,6 @@ export interface OrchestratorContext {
|
|
|
14
14
|
availableSkills?: AvailableSkill[];
|
|
15
15
|
userCategories?: Record<string, CategoryConfig>;
|
|
16
16
|
}
|
|
17
|
-
export declare const ATLAS_SYSTEM_PROMPT = "\n<identity>\nYou are Atlas - the Master Orchestrator from OhMyOpenCode.\n\nIn Greek mythology, Atlas holds up the celestial heavens. You hold up the entire workflow - coordinating every agent, every task, every verification until completion.\n\nYou are a conductor, not a musician. A general, not a soldier. You DELEGATE, COORDINATE, and VERIFY.\nYou never write code yourself. You orchestrate specialists who do.\n</identity>\n\n<mission>\nComplete ALL tasks in a work plan via `delegate_task()` until fully done.\nOne task per delegation. Parallel when independent. Verify everything.\n</mission>\n\n<delegation_system>\n## How to Delegate\n\nUse `delegate_task()` with EITHER category OR agent (mutually exclusive):\n\n```typescript\n// Option A: Category + Skills (spawns Sisyphus-Junior with domain config)\ndelegate_task(\n category=\"[category-name]\",\n load_skills=[\"skill-1\", \"skill-2\"],\n run_in_background=false,\n prompt=\"...\"\n)\n\n// Option B: Specialized Agent (for specific expert tasks)\ndelegate_task(\n subagent_type=\"[agent-name]\",\n load_skills=[],\n run_in_background=false,\n prompt=\"...\"\n)\n```\n\n{CATEGORY_SECTION}\n\n{AGENT_SECTION}\n\n{DECISION_MATRIX}\n\n{SKILLS_SECTION}\n\n{{CATEGORY_SKILLS_DELEGATION_GUIDE}}\n\n## 6-Section Prompt Structure (MANDATORY)\n\nEvery `delegate_task()` prompt MUST include ALL 6 sections:\n\n```markdown\n## 1. TASK\n[Quote EXACT checkbox item. Be obsessively specific.]\n\n## 2. EXPECTED OUTCOME\n- [ ] Files created/modified: [exact paths]\n- [ ] Functionality: [exact behavior]\n- [ ] Verification: `[command]` passes\n\n## 3. REQUIRED TOOLS\n- [tool]: [what to search/check]\n- context7: Look up [library] docs\n- ast-grep: `sg --pattern '[pattern]' --lang [lang]`\n\n## 4. MUST DO\n- Follow pattern in [reference file:lines]\n- Write tests for [specific cases]\n- Append findings to notepad (never overwrite)\n\n## 5. MUST NOT DO\n- Do NOT modify files outside [scope]\n- Do NOT add dependencies\n- Do NOT skip verification\n\n## 6. CONTEXT\n### Notepad Paths\n- READ: .sisyphus/notepads/{plan-name}/*.md\n- WRITE: Append to appropriate category\n\n### Inherited Wisdom\n[From notepad - conventions, gotchas, decisions]\n\n### Dependencies\n[What previous tasks built]\n```\n\n**If your prompt is under 30 lines, it's TOO SHORT.**\n</delegation_system>\n\n<workflow>\n## Step 0: Register Tracking\n\n```\nTodoWrite([{\n id: \"orchestrate-plan\",\n content: \"Complete ALL tasks in work plan\",\n status: \"in_progress\",\n priority: \"high\"\n}])\n```\n\n## Step 1: Analyze Plan\n\n1. Read the todo list file\n2. Parse incomplete checkboxes `- [ ]`\n3. Extract parallelizability info from each task\n4. Build parallelization map:\n - Which tasks can run simultaneously?\n - Which have dependencies?\n - Which have file conflicts?\n\nOutput:\n```\nTASK ANALYSIS:\n- Total: [N], Remaining: [M]\n- Parallelizable Groups: [list]\n- Sequential Dependencies: [list]\n```\n\n## Step 2: Initialize Notepad\n\n```bash\nmkdir -p .sisyphus/notepads/{plan-name}\n```\n\nStructure:\n```\n.sisyphus/notepads/{plan-name}/\n learnings.md # Conventions, patterns\n decisions.md # Architectural choices\n issues.md # Problems, gotchas\n problems.md # Unresolved blockers\n```\n\n## Step 3: Execute Tasks\n\n### 3.1 Check Parallelization\nIf tasks can run in parallel:\n- Prepare prompts for ALL parallelizable tasks\n- Invoke multiple `delegate_task()` in ONE message\n- Wait for all to complete\n- Verify all, then continue\n\nIf sequential:\n- Process one at a time\n\n### 3.2 Before Each Delegation\n\n**MANDATORY: Read notepad first**\n```\nglob(\".sisyphus/notepads/{plan-name}/*.md\")\nRead(\".sisyphus/notepads/{plan-name}/learnings.md\")\nRead(\".sisyphus/notepads/{plan-name}/issues.md\")\n```\n\nExtract wisdom and include in prompt.\n\n### 3.3 Invoke delegate_task()\n\n```typescript\ndelegate_task(\n category=\"[category]\",\n load_skills=[\"[relevant-skills]\"],\n run_in_background=false,\n prompt=`[FULL 6-SECTION PROMPT]`\n)\n```\n\n### 3.4 Verify (PROJECT-LEVEL QA)\n\n**After EVERY delegation, YOU must verify:**\n\n1. **Project-level diagnostics**:\n `lsp_diagnostics(filePath=\"src/\")` or `lsp_diagnostics(filePath=\".\")`\n MUST return ZERO errors\n\n2. **Build verification**:\n `bun run build` or `bun run typecheck`\n Exit code MUST be 0\n\n3. **Test verification**:\n `bun test`\n ALL tests MUST pass\n\n4. **Manual inspection**:\n - Read changed files\n - Confirm changes match requirements\n - Check for regressions\n\n**Checklist:**\n```\n[ ] lsp_diagnostics at project level - ZERO errors\n[ ] Build command - exit 0\n[ ] Test suite - all pass\n[ ] Files exist and match requirements\n[ ] No regressions\n```\n\n**If verification fails**: Resume the SAME session with the ACTUAL error output:\n```typescript\ndelegate_task(\n
|
|
17
|
+
export declare const ATLAS_SYSTEM_PROMPT = "\n<identity>\nYou are Atlas - the Master Orchestrator from OhMyOpenCode.\n\nIn Greek mythology, Atlas holds up the celestial heavens. You hold up the entire workflow - coordinating every agent, every task, every verification until completion.\n\nYou are a conductor, not a musician. A general, not a soldier. You DELEGATE, COORDINATE, and VERIFY.\nYou never write code yourself. You orchestrate specialists who do.\n</identity>\n\n<mission>\nComplete ALL tasks in a work plan via `delegate_task()` until fully done.\nOne task per delegation. Parallel when independent. Verify everything.\n</mission>\n\n<delegation_system>\n## How to Delegate\n\nUse `delegate_task()` with EITHER category OR agent (mutually exclusive):\n\n```typescript\n// Option A: Category + Skills (spawns Sisyphus-Junior with domain config)\ndelegate_task(\n category=\"[category-name]\",\n load_skills=[\"skill-1\", \"skill-2\"],\n run_in_background=false,\n prompt=\"...\"\n)\n\n// Option B: Specialized Agent (for specific expert tasks)\ndelegate_task(\n subagent_type=\"[agent-name]\",\n load_skills=[],\n run_in_background=false,\n prompt=\"...\"\n)\n```\n\n{CATEGORY_SECTION}\n\n{AGENT_SECTION}\n\n{DECISION_MATRIX}\n\n{SKILLS_SECTION}\n\n{{CATEGORY_SKILLS_DELEGATION_GUIDE}}\n\n## 6-Section Prompt Structure (MANDATORY)\n\nEvery `delegate_task()` prompt MUST include ALL 6 sections:\n\n```markdown\n## 1. TASK\n[Quote EXACT checkbox item. Be obsessively specific.]\n\n## 2. EXPECTED OUTCOME\n- [ ] Files created/modified: [exact paths]\n- [ ] Functionality: [exact behavior]\n- [ ] Verification: `[command]` passes\n\n## 3. REQUIRED TOOLS\n- [tool]: [what to search/check]\n- context7: Look up [library] docs\n- ast-grep: `sg --pattern '[pattern]' --lang [lang]`\n\n## 4. MUST DO\n- Follow pattern in [reference file:lines]\n- Write tests for [specific cases]\n- Append findings to notepad (never overwrite)\n\n## 5. MUST NOT DO\n- Do NOT modify files outside [scope]\n- Do NOT add dependencies\n- Do NOT skip verification\n\n## 6. CONTEXT\n### Notepad Paths\n- READ: .sisyphus/notepads/{plan-name}/*.md\n- WRITE: Append to appropriate category\n\n### Inherited Wisdom\n[From notepad - conventions, gotchas, decisions]\n\n### Dependencies\n[What previous tasks built]\n```\n\n**If your prompt is under 30 lines, it's TOO SHORT.**\n</delegation_system>\n\n<workflow>\n## Step 0: Register Tracking\n\n```\nTodoWrite([{\n id: \"orchestrate-plan\",\n content: \"Complete ALL tasks in work plan\",\n status: \"in_progress\",\n priority: \"high\"\n}])\n```\n\n## Step 1: Analyze Plan\n\n1. Read the todo list file\n2. Parse incomplete checkboxes `- [ ]`\n3. Extract parallelizability info from each task\n4. Build parallelization map:\n - Which tasks can run simultaneously?\n - Which have dependencies?\n - Which have file conflicts?\n\nOutput:\n```\nTASK ANALYSIS:\n- Total: [N], Remaining: [M]\n- Parallelizable Groups: [list]\n- Sequential Dependencies: [list]\n```\n\n## Step 2: Initialize Notepad\n\n```bash\nmkdir -p .sisyphus/notepads/{plan-name}\n```\n\nStructure:\n```\n.sisyphus/notepads/{plan-name}/\n learnings.md # Conventions, patterns\n decisions.md # Architectural choices\n issues.md # Problems, gotchas\n problems.md # Unresolved blockers\n```\n\n## Step 3: Execute Tasks\n\n### 3.1 Check Parallelization\nIf tasks can run in parallel:\n- Prepare prompts for ALL parallelizable tasks\n- Invoke multiple `delegate_task()` in ONE message\n- Wait for all to complete\n- Verify all, then continue\n\nIf sequential:\n- Process one at a time\n\n### 3.2 Before Each Delegation\n\n**MANDATORY: Read notepad first**\n```\nglob(\".sisyphus/notepads/{plan-name}/*.md\")\nRead(\".sisyphus/notepads/{plan-name}/learnings.md\")\nRead(\".sisyphus/notepads/{plan-name}/issues.md\")\n```\n\nExtract wisdom and include in prompt.\n\n### 3.3 Invoke delegate_task()\n\n```typescript\ndelegate_task(\n category=\"[category]\",\n load_skills=[\"[relevant-skills]\"],\n run_in_background=false,\n prompt=`[FULL 6-SECTION PROMPT]`\n)\n```\n\n### 3.4 Verify (PROJECT-LEVEL QA)\n\n**After EVERY delegation, YOU must verify:**\n\n1. **Project-level diagnostics**:\n `lsp_diagnostics(filePath=\"src/\")` or `lsp_diagnostics(filePath=\".\")`\n MUST return ZERO errors\n\n2. **Build verification**:\n `bun run build` or `bun run typecheck`\n Exit code MUST be 0\n\n3. **Test verification**:\n `bun test`\n ALL tests MUST pass\n\n4. **Manual inspection**:\n - Read changed files\n - Confirm changes match requirements\n - Check for regressions\n\n**Checklist:**\n```\n[ ] lsp_diagnostics at project level - ZERO errors\n[ ] Build command - exit 0\n[ ] Test suite - all pass\n[ ] Files exist and match requirements\n[ ] No regressions\n```\n\n**If verification fails**: Resume the SAME session with the ACTUAL error output:\n```typescript\ndelegate_task(\n session_id=\"ses_xyz789\", // ALWAYS use the session from the failed task\n load_skills=[...],\n prompt=\"Verification failed: {actual error}. Fix.\"\n)\n```\n\n### 3.5 Handle Failures (USE RESUME)\n\n**CRITICAL: When re-delegating, ALWAYS use `session_id` parameter.**\n\nEvery `delegate_task()` output includes a session_id. STORE IT.\n\nIf task fails:\n1. Identify what went wrong\n2. **Resume the SAME session** - subagent has full context already:\n ```typescript\n delegate_task(\n session_id=\"ses_xyz789\", // Session from failed task\n load_skills=[...],\n prompt=\"FAILED: {error}. Fix by: {specific instruction}\"\n )\n ```\n3. Maximum 3 retry attempts with the SAME session\n4. If blocked after 3 attempts: Document and continue to independent tasks\n\n**Why session_id is MANDATORY for failures:**\n- Subagent already read all files, knows the context\n- No repeated exploration = 70%+ token savings\n- Subagent knows what approaches already failed\n- Preserves accumulated knowledge from the attempt\n\n**NEVER start fresh on failures** - that's like asking someone to redo work while wiping their memory.\n\n### 3.6 Loop Until Done\n\nRepeat Step 3 until all tasks complete.\n\n## Step 4: Final Report\n\n```\nORCHESTRATION COMPLETE\n\nTODO LIST: [path]\nCOMPLETED: [N/N]\nFAILED: [count]\n\nEXECUTION SUMMARY:\n- Task 1: SUCCESS (category)\n- Task 2: SUCCESS (agent)\n\nFILES MODIFIED:\n[list]\n\nACCUMULATED WISDOM:\n[from notepad]\n```\n</workflow>\n\n<parallel_execution>\n## Parallel Execution Rules\n\n**For exploration (explore/librarian)**: ALWAYS background\n```typescript\ndelegate_task(subagent_type=\"explore\", run_in_background=true, ...)\ndelegate_task(subagent_type=\"librarian\", run_in_background=true, ...)\n```\n\n**For task execution**: NEVER background\n```typescript\ndelegate_task(category=\"...\", run_in_background=false, ...)\n```\n\n**Parallel task groups**: Invoke multiple in ONE message\n```typescript\n// Tasks 2, 3, 4 are independent - invoke together\ndelegate_task(category=\"quick\", prompt=\"Task 2...\")\ndelegate_task(category=\"quick\", prompt=\"Task 3...\")\ndelegate_task(category=\"quick\", prompt=\"Task 4...\")\n```\n\n**Background management**:\n- Collect results: `background_output(task_id=\"...\")`\n- Before final answer: `background_cancel(all=true)`\n</parallel_execution>\n\n<notepad_protocol>\n## Notepad System\n\n**Purpose**: Subagents are STATELESS. Notepad is your cumulative intelligence.\n\n**Before EVERY delegation**:\n1. Read notepad files\n2. Extract relevant wisdom\n3. Include as \"Inherited Wisdom\" in prompt\n\n**After EVERY completion**:\n- Instruct subagent to append findings (never overwrite, never use Edit tool)\n\n**Format**:\n```markdown\n## [TIMESTAMP] Task: {task-id}\n{content}\n```\n\n**Path convention**:\n- Plan: `.sisyphus/plans/{name}.md` (READ ONLY)\n- Notepad: `.sisyphus/notepads/{name}/` (READ/APPEND)\n</notepad_protocol>\n\n<verification_rules>\n## QA Protocol\n\nYou are the QA gate. Subagents lie. Verify EVERYTHING.\n\n**After each delegation**:\n1. `lsp_diagnostics` at PROJECT level (not file level)\n2. Run build command\n3. Run test suite\n4. Read changed files manually\n5. Confirm requirements met\n\n**Evidence required**:\n| Action | Evidence |\n|--------|----------|\n| Code change | lsp_diagnostics clean at project level |\n| Build | Exit code 0 |\n| Tests | All pass |\n| Delegation | Verified independently |\n\n**No evidence = not complete.**\n</verification_rules>\n\n<boundaries>\n## What You Do vs Delegate\n\n**YOU DO**:\n- Read files (for context, verification)\n- Run commands (for verification)\n- Use lsp_diagnostics, grep, glob\n- Manage todos\n- Coordinate and verify\n\n**YOU DELEGATE**:\n- All code writing/editing\n- All bug fixes\n- All test creation\n- All documentation\n- All git operations\n</boundaries>\n\n<critical_overrides>\n## Critical Rules\n\n**NEVER**:\n- Write/edit code yourself - always delegate\n- Trust subagent claims without verification\n- Use run_in_background=true for task execution\n- Send prompts under 30 lines\n- Skip project-level lsp_diagnostics after delegation\n- Batch multiple tasks in one delegation\n- Start fresh session for failures/follow-ups - use `resume` instead\n\n**ALWAYS**:\n- Include ALL 6 sections in delegation prompts\n- Read notepad before every delegation\n- Run project-level QA after every delegation\n- Pass inherited wisdom to every subagent\n- Parallelize independent tasks\n- Verify with your own tools\n- **Store session_id from every delegation output**\n- **Use `session_id=\"{session_id}\"` for retries, fixes, and follow-ups**\n</critical_overrides>\n";
|
|
18
18
|
export declare function createAtlasAgent(ctx: OrchestratorContext): AgentConfig;
|
|
19
19
|
export declare const atlasPromptMetadata: AgentPromptMetadata;
|
|
@@ -40,23 +40,21 @@ export declare function runBunInstallWithDetails(): Promise<BunInstallResult>;
|
|
|
40
40
|
*
|
|
41
41
|
* IMPORTANT: Model names MUST use `antigravity-` prefix for stability.
|
|
42
42
|
*
|
|
43
|
-
*
|
|
44
|
-
* - `antigravity-gemini-3-pro
|
|
45
|
-
* - `gemini-3-
|
|
43
|
+
* Since opencode-antigravity-auth v1.3.0, models use a variant system:
|
|
44
|
+
* - `antigravity-gemini-3-pro` with variants: low, high
|
|
45
|
+
* - `antigravity-gemini-3-flash` with variants: minimal, low, medium, high
|
|
46
46
|
*
|
|
47
|
-
* Legacy names
|
|
48
|
-
*
|
|
47
|
+
* Legacy tier-suffixed names (e.g., `antigravity-gemini-3-pro-high`) still work
|
|
48
|
+
* but variants are the recommended approach.
|
|
49
49
|
*
|
|
50
|
-
* @see https://github.com/NoeFabris/opencode-antigravity-auth#
|
|
50
|
+
* @see https://github.com/NoeFabris/opencode-antigravity-auth#models
|
|
51
51
|
*/
|
|
52
52
|
export declare const ANTIGRAVITY_PROVIDER_CONFIG: {
|
|
53
53
|
google: {
|
|
54
54
|
name: string;
|
|
55
55
|
models: {
|
|
56
|
-
"antigravity-gemini-3-pro
|
|
56
|
+
"antigravity-gemini-3-pro": {
|
|
57
57
|
name: string;
|
|
58
|
-
thinking: boolean;
|
|
59
|
-
attachment: boolean;
|
|
60
58
|
limit: {
|
|
61
59
|
context: number;
|
|
62
60
|
output: number;
|
|
@@ -65,11 +63,17 @@ export declare const ANTIGRAVITY_PROVIDER_CONFIG: {
|
|
|
65
63
|
input: string[];
|
|
66
64
|
output: string[];
|
|
67
65
|
};
|
|
66
|
+
variants: {
|
|
67
|
+
low: {
|
|
68
|
+
thinkingLevel: string;
|
|
69
|
+
};
|
|
70
|
+
high: {
|
|
71
|
+
thinkingLevel: string;
|
|
72
|
+
};
|
|
73
|
+
};
|
|
68
74
|
};
|
|
69
|
-
"antigravity-gemini-3-
|
|
75
|
+
"antigravity-gemini-3-flash": {
|
|
70
76
|
name: string;
|
|
71
|
-
thinking: boolean;
|
|
72
|
-
attachment: boolean;
|
|
73
77
|
limit: {
|
|
74
78
|
context: number;
|
|
75
79
|
output: number;
|
|
@@ -78,10 +82,34 @@ export declare const ANTIGRAVITY_PROVIDER_CONFIG: {
|
|
|
78
82
|
input: string[];
|
|
79
83
|
output: string[];
|
|
80
84
|
};
|
|
85
|
+
variants: {
|
|
86
|
+
minimal: {
|
|
87
|
+
thinkingLevel: string;
|
|
88
|
+
};
|
|
89
|
+
low: {
|
|
90
|
+
thinkingLevel: string;
|
|
91
|
+
};
|
|
92
|
+
medium: {
|
|
93
|
+
thinkingLevel: string;
|
|
94
|
+
};
|
|
95
|
+
high: {
|
|
96
|
+
thinkingLevel: string;
|
|
97
|
+
};
|
|
98
|
+
};
|
|
81
99
|
};
|
|
82
|
-
"antigravity-
|
|
100
|
+
"antigravity-claude-sonnet-4-5": {
|
|
101
|
+
name: string;
|
|
102
|
+
limit: {
|
|
103
|
+
context: number;
|
|
104
|
+
output: number;
|
|
105
|
+
};
|
|
106
|
+
modalities: {
|
|
107
|
+
input: string[];
|
|
108
|
+
output: string[];
|
|
109
|
+
};
|
|
110
|
+
};
|
|
111
|
+
"antigravity-claude-sonnet-4-5-thinking": {
|
|
83
112
|
name: string;
|
|
84
|
-
attachment: boolean;
|
|
85
113
|
limit: {
|
|
86
114
|
context: number;
|
|
87
115
|
output: number;
|
|
@@ -90,6 +118,41 @@ export declare const ANTIGRAVITY_PROVIDER_CONFIG: {
|
|
|
90
118
|
input: string[];
|
|
91
119
|
output: string[];
|
|
92
120
|
};
|
|
121
|
+
variants: {
|
|
122
|
+
low: {
|
|
123
|
+
thinkingConfig: {
|
|
124
|
+
thinkingBudget: number;
|
|
125
|
+
};
|
|
126
|
+
};
|
|
127
|
+
max: {
|
|
128
|
+
thinkingConfig: {
|
|
129
|
+
thinkingBudget: number;
|
|
130
|
+
};
|
|
131
|
+
};
|
|
132
|
+
};
|
|
133
|
+
};
|
|
134
|
+
"antigravity-claude-opus-4-5-thinking": {
|
|
135
|
+
name: string;
|
|
136
|
+
limit: {
|
|
137
|
+
context: number;
|
|
138
|
+
output: number;
|
|
139
|
+
};
|
|
140
|
+
modalities: {
|
|
141
|
+
input: string[];
|
|
142
|
+
output: string[];
|
|
143
|
+
};
|
|
144
|
+
variants: {
|
|
145
|
+
low: {
|
|
146
|
+
thinkingConfig: {
|
|
147
|
+
thinkingBudget: number;
|
|
148
|
+
};
|
|
149
|
+
};
|
|
150
|
+
max: {
|
|
151
|
+
thinkingConfig: {
|
|
152
|
+
thinkingBudget: number;
|
|
153
|
+
};
|
|
154
|
+
};
|
|
155
|
+
};
|
|
93
156
|
};
|
|
94
157
|
};
|
|
95
158
|
};
|
package/dist/cli/index.js
CHANGED
|
@@ -4913,9 +4913,6 @@ var init_dynamic_truncator = __esm(() => {
|
|
|
4913
4913
|
ANTHROPIC_ACTUAL_LIMIT = process.env.ANTHROPIC_1M_CONTEXT === "true" || process.env.VERTEX_ANTHROPIC_1M_CONTEXT === "true" ? 1e6 : 200000;
|
|
4914
4914
|
});
|
|
4915
4915
|
|
|
4916
|
-
// src/shared/config-path.ts
|
|
4917
|
-
var init_config_path = () => {};
|
|
4918
|
-
|
|
4919
4916
|
// src/shared/data-path.ts
|
|
4920
4917
|
import * as path2 from "path";
|
|
4921
4918
|
import * as os2 from "os";
|
|
@@ -6113,7 +6110,6 @@ var init_shared = __esm(() => {
|
|
|
6113
6110
|
init_deep_merge();
|
|
6114
6111
|
init_file_utils();
|
|
6115
6112
|
init_dynamic_truncator();
|
|
6116
|
-
init_config_path();
|
|
6117
6113
|
init_data_path();
|
|
6118
6114
|
init_config_errors();
|
|
6119
6115
|
init_claude_config_dir();
|
|
@@ -6686,25 +6682,48 @@ var init_config_manager = __esm(() => {
|
|
|
6686
6682
|
google: {
|
|
6687
6683
|
name: "Google",
|
|
6688
6684
|
models: {
|
|
6689
|
-
"antigravity-gemini-3-pro
|
|
6690
|
-
name: "Gemini 3 Pro
|
|
6691
|
-
thinking: true,
|
|
6692
|
-
attachment: true,
|
|
6693
|
-
limit: { context: 1048576, output: 65535 },
|
|
6694
|
-
modalities: { input: ["text", "image", "pdf"], output: ["text"] }
|
|
6695
|
-
},
|
|
6696
|
-
"antigravity-gemini-3-pro-low": {
|
|
6697
|
-
name: "Gemini 3 Pro Low (Antigravity)",
|
|
6698
|
-
thinking: true,
|
|
6699
|
-
attachment: true,
|
|
6685
|
+
"antigravity-gemini-3-pro": {
|
|
6686
|
+
name: "Gemini 3 Pro (Antigravity)",
|
|
6700
6687
|
limit: { context: 1048576, output: 65535 },
|
|
6701
|
-
modalities: { input: ["text", "image", "pdf"], output: ["text"] }
|
|
6688
|
+
modalities: { input: ["text", "image", "pdf"], output: ["text"] },
|
|
6689
|
+
variants: {
|
|
6690
|
+
low: { thinkingLevel: "low" },
|
|
6691
|
+
high: { thinkingLevel: "high" }
|
|
6692
|
+
}
|
|
6702
6693
|
},
|
|
6703
6694
|
"antigravity-gemini-3-flash": {
|
|
6704
6695
|
name: "Gemini 3 Flash (Antigravity)",
|
|
6705
|
-
attachment: true,
|
|
6706
6696
|
limit: { context: 1048576, output: 65536 },
|
|
6697
|
+
modalities: { input: ["text", "image", "pdf"], output: ["text"] },
|
|
6698
|
+
variants: {
|
|
6699
|
+
minimal: { thinkingLevel: "minimal" },
|
|
6700
|
+
low: { thinkingLevel: "low" },
|
|
6701
|
+
medium: { thinkingLevel: "medium" },
|
|
6702
|
+
high: { thinkingLevel: "high" }
|
|
6703
|
+
}
|
|
6704
|
+
},
|
|
6705
|
+
"antigravity-claude-sonnet-4-5": {
|
|
6706
|
+
name: "Claude Sonnet 4.5 (Antigravity)",
|
|
6707
|
+
limit: { context: 200000, output: 64000 },
|
|
6707
6708
|
modalities: { input: ["text", "image", "pdf"], output: ["text"] }
|
|
6709
|
+
},
|
|
6710
|
+
"antigravity-claude-sonnet-4-5-thinking": {
|
|
6711
|
+
name: "Claude Sonnet 4.5 Thinking (Antigravity)",
|
|
6712
|
+
limit: { context: 200000, output: 64000 },
|
|
6713
|
+
modalities: { input: ["text", "image", "pdf"], output: ["text"] },
|
|
6714
|
+
variants: {
|
|
6715
|
+
low: { thinkingConfig: { thinkingBudget: 8192 } },
|
|
6716
|
+
max: { thinkingConfig: { thinkingBudget: 32768 } }
|
|
6717
|
+
}
|
|
6718
|
+
},
|
|
6719
|
+
"antigravity-claude-opus-4-5-thinking": {
|
|
6720
|
+
name: "Claude Opus 4.5 Thinking (Antigravity)",
|
|
6721
|
+
limit: { context: 200000, output: 64000 },
|
|
6722
|
+
modalities: { input: ["text", "image", "pdf"], output: ["text"] },
|
|
6723
|
+
variants: {
|
|
6724
|
+
low: { thinkingConfig: { thinkingBudget: 8192 } },
|
|
6725
|
+
max: { thinkingConfig: { thinkingBudget: 32768 } }
|
|
6726
|
+
}
|
|
6708
6727
|
}
|
|
6709
6728
|
}
|
|
6710
6729
|
}
|
|
@@ -7882,7 +7901,7 @@ var import_picocolors2 = __toESM(require_picocolors(), 1);
|
|
|
7882
7901
|
// package.json
|
|
7883
7902
|
var package_default = {
|
|
7884
7903
|
name: "oh-my-opencode",
|
|
7885
|
-
version: "3.0.
|
|
7904
|
+
version: "3.0.1",
|
|
7886
7905
|
description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
|
|
7887
7906
|
main: "dist/index.js",
|
|
7888
7907
|
types: "dist/index.d.ts",
|
|
@@ -7955,13 +7974,13 @@ var package_default = {
|
|
|
7955
7974
|
typescript: "^5.7.3"
|
|
7956
7975
|
},
|
|
7957
7976
|
optionalDependencies: {
|
|
7958
|
-
"oh-my-opencode-darwin-arm64": "3.0.
|
|
7959
|
-
"oh-my-opencode-darwin-x64": "3.0.
|
|
7960
|
-
"oh-my-opencode-linux-arm64": "3.0.
|
|
7961
|
-
"oh-my-opencode-linux-arm64-musl": "3.0.
|
|
7962
|
-
"oh-my-opencode-linux-x64": "3.0.
|
|
7963
|
-
"oh-my-opencode-linux-x64-musl": "3.0.
|
|
7964
|
-
"oh-my-opencode-windows-x64": "3.0.
|
|
7977
|
+
"oh-my-opencode-darwin-arm64": "3.0.1",
|
|
7978
|
+
"oh-my-opencode-darwin-x64": "3.0.1",
|
|
7979
|
+
"oh-my-opencode-linux-arm64": "3.0.1",
|
|
7980
|
+
"oh-my-opencode-linux-arm64-musl": "3.0.1",
|
|
7981
|
+
"oh-my-opencode-linux-x64": "3.0.1",
|
|
7982
|
+
"oh-my-opencode-linux-x64-musl": "3.0.1",
|
|
7983
|
+
"oh-my-opencode-windows-x64": "3.0.1"
|
|
7965
7984
|
},
|
|
7966
7985
|
trustedDependencies: [
|
|
7967
7986
|
"@ast-grep/cli",
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const RALPH_LOOP_TEMPLATE = "You are starting a Ralph Loop - a self-referential development loop that runs until task completion.\n\n## How Ralph Loop Works\n\n1. You will work on the task continuously\n2. When you believe the task is FULLY complete, output: `<promise>{{COMPLETION_PROMISE}}</promise>`\n3. If you don't output the promise, the loop will automatically inject another prompt to continue\n4. Maximum iterations: Configurable (default 100)\n\n## Rules\n\n- Focus on completing the task fully, not partially\n- Don't output the completion promise until the task is truly done\n- Each iteration should make meaningful progress toward the goal\n- If stuck, try different approaches\n- Use todos to track your progress\n\n## Exit Conditions\n\n1. **Completion**: Output
|
|
1
|
+
export declare const RALPH_LOOP_TEMPLATE = "You are starting a Ralph Loop - a self-referential development loop that runs until task completion.\n\n## How Ralph Loop Works\n\n1. You will work on the task continuously\n2. When you believe the task is FULLY complete, output: `<promise>{{COMPLETION_PROMISE}}</promise>`\n3. If you don't output the promise, the loop will automatically inject another prompt to continue\n4. Maximum iterations: Configurable (default 100)\n\n## Rules\n\n- Focus on completing the task fully, not partially\n- Don't output the completion promise until the task is truly done\n- Each iteration should make meaningful progress toward the goal\n- If stuck, try different approaches\n- Use todos to track your progress\n\n## Exit Conditions\n\n1. **Completion**: Output your completion promise tag when fully complete\n2. **Max Iterations**: Loop stops automatically at limit\n3. **Cancel**: User runs `/cancel-ralph` command\n\n## Your Task\n\nParse the arguments below and begin working on the task. The format is:\n`\"task description\" [--completion-promise=TEXT] [--max-iterations=N]`\n\nDefault completion promise is \"DONE\" and default max iterations is 100.";
|
|
2
2
|
export declare const CANCEL_RALPH_TEMPLATE = "Cancel the currently active Ralph Loop.\n\nThis will:\n1. Stop the loop from continuing\n2. Clear the loop state file\n3. Allow the session to end normally\n\nCheck if a loop is active and cancel it. Inform the user of the result.";
|
package/dist/index.js
CHANGED
|
@@ -3228,9 +3228,6 @@ var init_dynamic_truncator = __esm(() => {
|
|
|
3228
3228
|
ANTHROPIC_ACTUAL_LIMIT2 = process.env.ANTHROPIC_1M_CONTEXT === "true" || process.env.VERTEX_ANTHROPIC_1M_CONTEXT === "true" ? 1e6 : 200000;
|
|
3229
3229
|
});
|
|
3230
3230
|
|
|
3231
|
-
// src/shared/config-path.ts
|
|
3232
|
-
var init_config_path = () => {};
|
|
3233
|
-
|
|
3234
3231
|
// src/shared/config-errors.ts
|
|
3235
3232
|
function getConfigLoadErrors() {
|
|
3236
3233
|
return configLoadErrors;
|
|
@@ -5034,7 +5031,6 @@ var init_shared = __esm(() => {
|
|
|
5034
5031
|
init_deep_merge();
|
|
5035
5032
|
init_file_utils();
|
|
5036
5033
|
init_dynamic_truncator();
|
|
5037
|
-
init_config_path();
|
|
5038
5034
|
init_data_path();
|
|
5039
5035
|
init_config_errors();
|
|
5040
5036
|
init_claude_config_dir();
|
|
@@ -19427,10 +19423,10 @@ TELL THE USER WHAT AGENTS YOU WILL LEVERAGE NOW TO SATISFY USER'S REQUEST.
|
|
|
19427
19423
|
## AGENTS / **CATEGORY + SKILLS** UTILIZATION PRINCIPLES (by capability, not by name)
|
|
19428
19424
|
- **Codebase Exploration**: Spawn exploration agents using BACKGROUND TASKS for file patterns, internal implementations, project structure
|
|
19429
19425
|
- **Documentation & References**: Use librarian-type agents via BACKGROUND TASKS for API references, examples, external library docs
|
|
19430
|
-
- **Planning & Strategy**: NEVER plan yourself - ALWAYS spawn
|
|
19431
|
-
- MUST
|
|
19432
|
-
-
|
|
19433
|
-
- IF IMPLEMENT TASK, MUST ADD TODO NOW: "
|
|
19426
|
+
- **Planning & Strategy**: NEVER plan yourself - ALWAYS spawn the Plan agent for work breakdown
|
|
19427
|
+
- MUST invoke: \`delegate_task(subagent_type="plan", prompt="<gathered context + user request>")\`
|
|
19428
|
+
- In your prompt to the Plan agent, ASK it to recommend which CATEGORY + SKILLS / AGENTS to leverage for implementation.
|
|
19429
|
+
- IF IMPLEMENT TASK, MUST ADD TODO NOW: "Consult Plan agent via delegate_task(subagent_type='plan') for work breakdown with category + skills recommendations"
|
|
19434
19430
|
- **High-IQ Reasoning**: Leverage specialized agents for architecture decisions, code review, strategic planning
|
|
19435
19431
|
- **SPECIAL TASKS COVERED WITH CATEGORY + LOAD_SKILLS**: Delegate to specialized agents with category+skills for design and implementation, as following guide:
|
|
19436
19432
|
- CATEGORY + SKILL GUIDE
|
|
@@ -19450,7 +19446,7 @@ TELL THE USER WHAT AGENTS YOU WILL LEVERAGE NOW TO SATISFY USER'S REQUEST.
|
|
|
19450
19446
|
## WORKFLOW
|
|
19451
19447
|
1. Analyze the request and identify required capabilities
|
|
19452
19448
|
2. Spawn exploration/librarian agents via delegate_task(background=true) in PARALLEL (10+ if needed)
|
|
19453
|
-
3.
|
|
19449
|
+
3. Spawn Plan agent: \`delegate_task(subagent_type="plan", prompt="<context + request>")\` to create detailed work breakdown
|
|
19454
19450
|
4. Execute with continuous verification against original requirements
|
|
19455
19451
|
|
|
19456
19452
|
## VERIFICATION GUARANTEE (NON-NEGOTIABLE)
|
|
@@ -19524,9 +19520,9 @@ Write these criteria explicitly. Share with user if scope is non-trivial.
|
|
|
19524
19520
|
|
|
19525
19521
|
THE USER ASKED FOR X. DELIVER EXACTLY X. NOT A SUBSET. NOT A DEMO. NOT A STARTING POINT.
|
|
19526
19522
|
|
|
19527
|
-
1. EXPLORES + LIBRARIANS
|
|
19528
|
-
2. GATHER ->
|
|
19529
|
-
3. WORK BY DELEGATING TO
|
|
19523
|
+
1. EXPLORES + LIBRARIANS (background)
|
|
19524
|
+
2. GATHER -> delegate_task(subagent_type="plan", prompt="<context + request>")
|
|
19525
|
+
3. WORK BY DELEGATING TO CATEGORY + SKILLS AGENTS
|
|
19530
19526
|
|
|
19531
19527
|
NOW.
|
|
19532
19528
|
|
|
@@ -20250,7 +20246,20 @@ function createRalphLoopHook(ctx, options) {
|
|
|
20250
20246
|
return false;
|
|
20251
20247
|
const content = readFileSync19(transcriptPath, "utf-8");
|
|
20252
20248
|
const pattern = new RegExp(`<promise>\\s*${escapeRegex(promise)}\\s*</promise>`, "is");
|
|
20253
|
-
|
|
20249
|
+
const lines = content.split(`
|
|
20250
|
+
`).filter((l) => l.trim());
|
|
20251
|
+
for (const line of lines) {
|
|
20252
|
+
try {
|
|
20253
|
+
const entry = JSON.parse(line);
|
|
20254
|
+
if (entry.type === "user")
|
|
20255
|
+
continue;
|
|
20256
|
+
if (pattern.test(line))
|
|
20257
|
+
return true;
|
|
20258
|
+
} catch {
|
|
20259
|
+
continue;
|
|
20260
|
+
}
|
|
20261
|
+
}
|
|
20262
|
+
return false;
|
|
20254
20263
|
} catch {
|
|
20255
20264
|
return false;
|
|
20256
20265
|
}
|
|
@@ -21054,7 +21063,7 @@ Interpret creatively and make unexpected choices that feel genuinely designed fo
|
|
|
21054
21063
|
};
|
|
21055
21064
|
var gitMasterSkill = {
|
|
21056
21065
|
name: "git-master",
|
|
21057
|
-
description: "MUST USE for ANY git operations. Atomic commits, rebase/squash, history search (blame, bisect, log -S). STRONGLY RECOMMENDED: Use with delegate_task(category='quick',
|
|
21066
|
+
description: "MUST USE for ANY git operations. Atomic commits, rebase/squash, history search (blame, bisect, log -S). STRONGLY RECOMMENDED: Use with delegate_task(category='quick', load_skills=['git-master'], ...) to save context. Triggers: 'commit', 'rebase', 'squash', 'who wrote', 'when was X added', 'find the commit that'.",
|
|
21058
21067
|
template: `# Git Master Agent
|
|
21059
21068
|
|
|
21060
21069
|
You are a Git expert combining three specializations:
|
|
@@ -22744,14 +22753,14 @@ function createTaskResumeInfoHook() {
|
|
|
22744
22753
|
if (output.output.startsWith("Error:") || output.output.startsWith("Failed"))
|
|
22745
22754
|
return;
|
|
22746
22755
|
if (output.output.includes(`
|
|
22747
|
-
to
|
|
22756
|
+
to continue:`))
|
|
22748
22757
|
return;
|
|
22749
22758
|
const sessionId = extractSessionId(output.output);
|
|
22750
22759
|
if (!sessionId)
|
|
22751
22760
|
return;
|
|
22752
22761
|
output.output = output.output.trimEnd() + `
|
|
22753
22762
|
|
|
22754
|
-
to
|
|
22763
|
+
to continue: delegate_task(session_id="${sessionId}", prompt="...")`;
|
|
22755
22764
|
};
|
|
22756
22765
|
return {
|
|
22757
22766
|
"tool.execute.after": toolExecuteAfter
|
|
@@ -23221,7 +23230,7 @@ function buildVerificationReminder(sessionId) {
|
|
|
23221
23230
|
|
|
23222
23231
|
**If ANY verification fails, use this immediately:**
|
|
23223
23232
|
\`\`\`
|
|
23224
|
-
delegate_task(
|
|
23233
|
+
delegate_task(session_id="${sessionId}", prompt="fix: [describe the specific failure]")
|
|
23225
23234
|
\`\`\``;
|
|
23226
23235
|
}
|
|
23227
23236
|
function buildOrchestratorReminder(planName, progress, sessionId) {
|
|
@@ -23647,7 +23656,7 @@ function createAtlasHook(ctx, options) {
|
|
|
23647
23656
|
return;
|
|
23648
23657
|
}
|
|
23649
23658
|
const outputStr = output.output && typeof output.output === "string" ? output.output : "";
|
|
23650
|
-
const isBackgroundLaunch = outputStr.includes("Background task launched") || outputStr.includes("Background task
|
|
23659
|
+
const isBackgroundLaunch = outputStr.includes("Background task launched") || outputStr.includes("Background task continued");
|
|
23651
23660
|
if (isBackgroundLaunch) {
|
|
23652
23661
|
return;
|
|
23653
23662
|
}
|
|
@@ -39543,7 +39552,7 @@ var RALPH_LOOP_TEMPLATE = `You are starting a Ralph Loop - a self-referential de
|
|
|
39543
39552
|
|
|
39544
39553
|
## Exit Conditions
|
|
39545
39554
|
|
|
39546
|
-
1. **Completion**: Output
|
|
39555
|
+
1. **Completion**: Output your completion promise tag when fully complete
|
|
39547
39556
|
2. **Max Iterations**: Loop stops automatically at limit
|
|
39548
39557
|
3. **Cancel**: User runs \`/cancel-ralph\` command
|
|
39549
39558
|
|
|
@@ -40329,7 +40338,7 @@ function loadBuiltinCommands(disabledCommands) {
|
|
|
40329
40338
|
for (const [name, definition] of Object.entries(BUILTIN_COMMAND_DEFINITIONS)) {
|
|
40330
40339
|
if (!disabled.has(name)) {
|
|
40331
40340
|
const { argumentHint: _argumentHint, ...openCodeCompatible } = definition;
|
|
40332
|
-
commands[name] = openCodeCompatible;
|
|
40341
|
+
commands[name] = { ...openCodeCompatible, name };
|
|
40333
40342
|
}
|
|
40334
40343
|
}
|
|
40335
40344
|
return commands;
|
|
@@ -41892,14 +41901,14 @@ function createBackgroundCancel(manager, client2) {
|
|
|
41892
41901
|
`);
|
|
41893
41902
|
const resumableTasks = cancelledInfo.filter((t) => t.sessionID);
|
|
41894
41903
|
const resumeSection = resumableTasks.length > 0 ? `
|
|
41895
|
-
##
|
|
41904
|
+
## Continue Instructions
|
|
41896
41905
|
|
|
41897
|
-
To
|
|
41906
|
+
To continue a cancelled task, use:
|
|
41898
41907
|
\`\`\`
|
|
41899
|
-
delegate_task(
|
|
41908
|
+
delegate_task(session_id="<session_id>", prompt="Continue: <your follow-up>")
|
|
41900
41909
|
\`\`\`
|
|
41901
41910
|
|
|
41902
|
-
|
|
41911
|
+
Continuable sessions:
|
|
41903
41912
|
${resumableTasks.map((t) => `- \`${t.sessionID}\` (${t.description})`).join(`
|
|
41904
41913
|
`)}` : "";
|
|
41905
41914
|
return `Cancelled ${cancellableTasks.length} background task(s):
|
|
@@ -41953,7 +41962,7 @@ var CALL_OMO_AGENT_DESCRIPTION = `Spawn explore/librarian agent. run_in_backgrou
|
|
|
41953
41962
|
|
|
41954
41963
|
Available: {agents}
|
|
41955
41964
|
|
|
41956
|
-
Pass \`
|
|
41965
|
+
Pass \`session_id=<id>\` to continue previous agent with full context. Prompts MUST be in English. Use \`background_output\` for async results.`;
|
|
41957
41966
|
// src/tools/call-omo-agent/tools.ts
|
|
41958
41967
|
import { existsSync as existsSync44, readdirSync as readdirSync14 } from "fs";
|
|
41959
41968
|
import { join as join53 } from "path";
|
|
@@ -42590,8 +42599,8 @@ function formatDetailedError(error45, ctx) {
|
|
|
42590
42599
|
lines.push(`- subagent_type: ${ctx.args.subagent_type ?? "(none)"}`);
|
|
42591
42600
|
lines.push(`- run_in_background: ${ctx.args.run_in_background}`);
|
|
42592
42601
|
lines.push(`- load_skills: [${ctx.args.load_skills?.join(", ") ?? ""}]`);
|
|
42593
|
-
if (ctx.args.
|
|
42594
|
-
lines.push(`-
|
|
42602
|
+
if (ctx.args.session_id) {
|
|
42603
|
+
lines.push(`- session_id: ${ctx.args.session_id}`);
|
|
42595
42604
|
}
|
|
42596
42605
|
}
|
|
42597
42606
|
if (stack) {
|
|
@@ -42658,7 +42667,7 @@ function createDelegateTask(options) {
|
|
|
42658
42667
|
`);
|
|
42659
42668
|
const description = `Spawn agent task with category-based or direct agent selection.
|
|
42660
42669
|
|
|
42661
|
-
MUTUALLY EXCLUSIVE: Provide EITHER category OR subagent_type, not both (unless
|
|
42670
|
+
MUTUALLY EXCLUSIVE: Provide EITHER category OR subagent_type, not both (unless continuing a session).
|
|
42662
42671
|
|
|
42663
42672
|
- load_skills: ALWAYS REQUIRED. Pass at least one skill name (e.g., ["playwright"], ["git-master", "frontend-ui-ux"]).
|
|
42664
42673
|
- category: Use predefined category \u2192 Spawns Sisyphus-Junior with category config
|
|
@@ -42666,12 +42675,13 @@ MUTUALLY EXCLUSIVE: Provide EITHER category OR subagent_type, not both (unless r
|
|
|
42666
42675
|
${categoryList}
|
|
42667
42676
|
- subagent_type: Use specific agent directly (e.g., "oracle", "explore")
|
|
42668
42677
|
- run_in_background: true=async (returns task_id), false=sync (waits for result). Default: false. Use background=true ONLY for parallel exploration with 5+ independent queries.
|
|
42669
|
-
-
|
|
42678
|
+
- session_id: Existing Task session to continue (from previous task output). Continues agent with FULL CONTEXT PRESERVED - saves tokens, maintains continuity.
|
|
42679
|
+
- command: The command that triggered this task (optional, for slash command tracking).
|
|
42670
42680
|
|
|
42671
|
-
**WHEN TO USE
|
|
42672
|
-
- Task failed/incomplete \u2192
|
|
42673
|
-
- Need follow-up on previous result \u2192
|
|
42674
|
-
- Multi-turn conversation with same agent \u2192 always
|
|
42681
|
+
**WHEN TO USE session_id:**
|
|
42682
|
+
- Task failed/incomplete \u2192 session_id with "fix: [specific issue]"
|
|
42683
|
+
- Need follow-up on previous result \u2192 session_id with additional question
|
|
42684
|
+
- Multi-turn conversation with same agent \u2192 always session_id instead of new task
|
|
42675
42685
|
|
|
42676
42686
|
Prompts MUST be in English.`;
|
|
42677
42687
|
return tool({
|
|
@@ -42683,7 +42693,8 @@ Prompts MUST be in English.`;
|
|
|
42683
42693
|
run_in_background: tool.schema.boolean().describe("true=async (returns task_id), false=sync (waits). Default: false"),
|
|
42684
42694
|
category: tool.schema.string().optional().describe(`Category (e.g., ${categoryExamples}). Mutually exclusive with subagent_type.`),
|
|
42685
42695
|
subagent_type: tool.schema.string().optional().describe("Agent name (e.g., 'oracle', 'explore'). Mutually exclusive with category."),
|
|
42686
|
-
|
|
42696
|
+
session_id: tool.schema.string().optional().describe("Existing Task session to continue"),
|
|
42697
|
+
command: tool.schema.string().optional().describe("The command that triggered this task")
|
|
42687
42698
|
},
|
|
42688
42699
|
async execute(args, toolContext) {
|
|
42689
42700
|
const ctx = toolContext;
|
|
@@ -42724,11 +42735,11 @@ Prompts MUST be in English.`;
|
|
|
42724
42735
|
resolvedParentAgent: parentAgent
|
|
42725
42736
|
});
|
|
42726
42737
|
const parentModel = prevMessage?.model?.providerID && prevMessage?.model?.modelID ? { providerID: prevMessage.model.providerID, modelID: prevMessage.model.modelID } : undefined;
|
|
42727
|
-
if (args.
|
|
42738
|
+
if (args.session_id) {
|
|
42728
42739
|
if (runInBackground) {
|
|
42729
42740
|
try {
|
|
42730
42741
|
const task = await manager.resume({
|
|
42731
|
-
sessionId: args.
|
|
42742
|
+
sessionId: args.session_id,
|
|
42732
42743
|
prompt: args.prompt,
|
|
42733
42744
|
parentSessionID: ctx.sessionID,
|
|
42734
42745
|
parentMessageID: ctx.messageID,
|
|
@@ -42736,17 +42747,18 @@ Prompts MUST be in English.`;
|
|
|
42736
42747
|
parentAgent
|
|
42737
42748
|
});
|
|
42738
42749
|
ctx.metadata?.({
|
|
42739
|
-
title: `
|
|
42750
|
+
title: `Continue: ${task.description}`,
|
|
42740
42751
|
metadata: {
|
|
42741
42752
|
prompt: args.prompt,
|
|
42742
42753
|
agent: task.agent,
|
|
42743
42754
|
load_skills: args.load_skills,
|
|
42744
42755
|
description: args.description,
|
|
42745
42756
|
run_in_background: args.run_in_background,
|
|
42746
|
-
sessionId: task.sessionID
|
|
42757
|
+
sessionId: task.sessionID,
|
|
42758
|
+
command: args.command
|
|
42747
42759
|
}
|
|
42748
42760
|
});
|
|
42749
|
-
return `Background task
|
|
42761
|
+
return `Background task continued.
|
|
42750
42762
|
|
|
42751
42763
|
Task ID: ${task.id}
|
|
42752
42764
|
Session ID: ${task.sessionID}
|
|
@@ -42758,39 +42770,40 @@ Agent continues with full previous context preserved.
|
|
|
42758
42770
|
Use \`background_output\` with task_id="${task.id}" to check progress.`;
|
|
42759
42771
|
} catch (error45) {
|
|
42760
42772
|
return formatDetailedError(error45, {
|
|
42761
|
-
operation: "
|
|
42773
|
+
operation: "Continue background task",
|
|
42762
42774
|
args,
|
|
42763
|
-
sessionID: args.
|
|
42775
|
+
sessionID: args.session_id
|
|
42764
42776
|
});
|
|
42765
42777
|
}
|
|
42766
42778
|
}
|
|
42767
42779
|
const toastManager2 = getTaskToastManager();
|
|
42768
|
-
const taskId2 = `resume_sync_${args.
|
|
42780
|
+
const taskId2 = `resume_sync_${args.session_id.slice(0, 8)}`;
|
|
42769
42781
|
const startTime = new Date;
|
|
42770
42782
|
if (toastManager2) {
|
|
42771
42783
|
toastManager2.addTask({
|
|
42772
42784
|
id: taskId2,
|
|
42773
42785
|
description: args.description,
|
|
42774
|
-
agent: "
|
|
42786
|
+
agent: "continue",
|
|
42775
42787
|
isBackground: false
|
|
42776
42788
|
});
|
|
42777
42789
|
}
|
|
42778
42790
|
ctx.metadata?.({
|
|
42779
|
-
title: `
|
|
42791
|
+
title: `Continue: ${args.description}`,
|
|
42780
42792
|
metadata: {
|
|
42781
42793
|
prompt: args.prompt,
|
|
42782
42794
|
load_skills: args.load_skills,
|
|
42783
42795
|
description: args.description,
|
|
42784
42796
|
run_in_background: args.run_in_background,
|
|
42785
|
-
sessionId: args.
|
|
42786
|
-
sync: true
|
|
42797
|
+
sessionId: args.session_id,
|
|
42798
|
+
sync: true,
|
|
42799
|
+
command: args.command
|
|
42787
42800
|
}
|
|
42788
42801
|
});
|
|
42789
42802
|
try {
|
|
42790
42803
|
let resumeAgent;
|
|
42791
42804
|
let resumeModel;
|
|
42792
42805
|
try {
|
|
42793
|
-
const messagesResp = await client2.session.messages({ path: { id: args.
|
|
42806
|
+
const messagesResp = await client2.session.messages({ path: { id: args.session_id } });
|
|
42794
42807
|
const messages2 = messagesResp.data ?? [];
|
|
42795
42808
|
for (let i2 = messages2.length - 1;i2 >= 0; i2--) {
|
|
42796
42809
|
const info = messages2[i2].info;
|
|
@@ -42801,13 +42814,13 @@ Use \`background_output\` with task_id="${task.id}" to check progress.`;
|
|
|
42801
42814
|
}
|
|
42802
42815
|
}
|
|
42803
42816
|
} catch {
|
|
42804
|
-
const resumeMessageDir = getMessageDir9(args.
|
|
42817
|
+
const resumeMessageDir = getMessageDir9(args.session_id);
|
|
42805
42818
|
const resumeMessage = resumeMessageDir ? findNearestMessageWithFields(resumeMessageDir) : null;
|
|
42806
42819
|
resumeAgent = resumeMessage?.agent;
|
|
42807
42820
|
resumeModel = resumeMessage?.model?.providerID && resumeMessage?.model?.modelID ? { providerID: resumeMessage.model.providerID, modelID: resumeMessage.model.modelID } : undefined;
|
|
42808
42821
|
}
|
|
42809
42822
|
await client2.session.prompt({
|
|
42810
|
-
path: { id: args.
|
|
42823
|
+
path: { id: args.session_id },
|
|
42811
42824
|
body: {
|
|
42812
42825
|
...resumeAgent !== undefined ? { agent: resumeAgent } : {},
|
|
42813
42826
|
...resumeModel !== undefined ? { model: resumeModel } : {},
|
|
@@ -42825,9 +42838,9 @@ Use \`background_output\` with task_id="${task.id}" to check progress.`;
|
|
|
42825
42838
|
toastManager2.removeTask(taskId2);
|
|
42826
42839
|
}
|
|
42827
42840
|
const errorMessage = promptError instanceof Error ? promptError.message : String(promptError);
|
|
42828
|
-
return `Failed to send
|
|
42841
|
+
return `Failed to send continuation prompt: ${errorMessage}
|
|
42829
42842
|
|
|
42830
|
-
Session ID: ${args.
|
|
42843
|
+
Session ID: ${args.session_id}`;
|
|
42831
42844
|
}
|
|
42832
42845
|
const POLL_INTERVAL_MS = 500;
|
|
42833
42846
|
const MIN_STABILITY_TIME_MS = 5000;
|
|
@@ -42840,7 +42853,7 @@ Session ID: ${args.resume}`;
|
|
|
42840
42853
|
const elapsed = Date.now() - pollStart;
|
|
42841
42854
|
if (elapsed < MIN_STABILITY_TIME_MS)
|
|
42842
42855
|
continue;
|
|
42843
|
-
const messagesCheck = await client2.session.messages({ path: { id: args.
|
|
42856
|
+
const messagesCheck = await client2.session.messages({ path: { id: args.session_id } });
|
|
42844
42857
|
const msgs = messagesCheck.data ?? messagesCheck;
|
|
42845
42858
|
const currentMsgCount = msgs.length;
|
|
42846
42859
|
if (currentMsgCount > 0 && currentMsgCount === lastMsgCount) {
|
|
@@ -42853,7 +42866,7 @@ Session ID: ${args.resume}`;
|
|
|
42853
42866
|
}
|
|
42854
42867
|
}
|
|
42855
42868
|
const messagesResult = await client2.session.messages({
|
|
42856
|
-
path: { id: args.
|
|
42869
|
+
path: { id: args.session_id }
|
|
42857
42870
|
});
|
|
42858
42871
|
if (messagesResult.error) {
|
|
42859
42872
|
if (toastManager2) {
|
|
@@ -42861,7 +42874,7 @@ Session ID: ${args.resume}`;
|
|
|
42861
42874
|
}
|
|
42862
42875
|
return `Error fetching result: ${messagesResult.error}
|
|
42863
42876
|
|
|
42864
|
-
Session ID: ${args.
|
|
42877
|
+
Session ID: ${args.session_id}`;
|
|
42865
42878
|
}
|
|
42866
42879
|
const messages = messagesResult.data ?? messagesResult;
|
|
42867
42880
|
const assistantMessages = messages.filter((m) => m.info?.role === "assistant").sort((a, b) => (b.info?.time?.created ?? 0) - (a.info?.time?.created ?? 0));
|
|
@@ -42872,22 +42885,22 @@ Session ID: ${args.resume}`;
|
|
|
42872
42885
|
if (!lastMessage) {
|
|
42873
42886
|
return `No assistant response found.
|
|
42874
42887
|
|
|
42875
|
-
Session ID: ${args.
|
|
42888
|
+
Session ID: ${args.session_id}`;
|
|
42876
42889
|
}
|
|
42877
42890
|
const textParts = lastMessage?.parts?.filter((p) => p.type === "text" || p.type === "reasoning") ?? [];
|
|
42878
42891
|
const textContent = textParts.map((p) => p.text ?? "").filter(Boolean).join(`
|
|
42879
42892
|
`);
|
|
42880
42893
|
const duration3 = formatDuration2(startTime);
|
|
42881
|
-
return `Task
|
|
42894
|
+
return `Task continued and completed in ${duration3}.
|
|
42882
42895
|
|
|
42883
|
-
Session ID: ${args.
|
|
42896
|
+
Session ID: ${args.session_id}
|
|
42884
42897
|
|
|
42885
42898
|
---
|
|
42886
42899
|
|
|
42887
42900
|
${textContent || "(No text output)"}
|
|
42888
42901
|
|
|
42889
42902
|
---
|
|
42890
|
-
To
|
|
42903
|
+
To continue this session: session_id="${args.session_id}"`;
|
|
42891
42904
|
}
|
|
42892
42905
|
if (args.category && args.subagent_type) {
|
|
42893
42906
|
return `Invalid arguments: Provide EITHER category OR subagent_type, not both.`;
|
|
@@ -43021,7 +43034,8 @@ Task ID: ${task.id}`;
|
|
|
43021
43034
|
load_skills: args.load_skills,
|
|
43022
43035
|
description: args.description,
|
|
43023
43036
|
run_in_background: args.run_in_background,
|
|
43024
|
-
sessionId: sessionID
|
|
43037
|
+
sessionId: sessionID,
|
|
43038
|
+
command: args.command
|
|
43025
43039
|
}
|
|
43026
43040
|
});
|
|
43027
43041
|
const startTime = new Date;
|
|
@@ -43096,7 +43110,7 @@ RESULT:
|
|
|
43096
43110
|
${textContent || "(No text output)"}
|
|
43097
43111
|
|
|
43098
43112
|
---
|
|
43099
|
-
To
|
|
43113
|
+
To continue this session: session_id="${sessionID}"`;
|
|
43100
43114
|
} catch (error45) {
|
|
43101
43115
|
return formatDetailedError(error45, {
|
|
43102
43116
|
operation: "Launch monitored background task",
|
|
@@ -43157,7 +43171,8 @@ Sisyphus-Junior is spawned automatically when you specify a category. Pick the a
|
|
|
43157
43171
|
load_skills: args.load_skills,
|
|
43158
43172
|
description: args.description,
|
|
43159
43173
|
run_in_background: args.run_in_background,
|
|
43160
|
-
sessionId: task.sessionID
|
|
43174
|
+
sessionId: task.sessionID,
|
|
43175
|
+
command: args.command
|
|
43161
43176
|
}
|
|
43162
43177
|
});
|
|
43163
43178
|
return `Background task launched.
|
|
@@ -43169,7 +43184,7 @@ Agent: ${task.agent}${args.category ? ` (category: ${args.category})` : ""}
|
|
|
43169
43184
|
Status: ${task.status}
|
|
43170
43185
|
|
|
43171
43186
|
System notifies on completion. Use \`background_output\` with task_id="${task.id}" to check.
|
|
43172
|
-
To
|
|
43187
|
+
To continue this session: session_id="${task.sessionID}"`;
|
|
43173
43188
|
} catch (error45) {
|
|
43174
43189
|
return formatDetailedError(error45, {
|
|
43175
43190
|
operation: "Launch background task",
|
|
@@ -43223,7 +43238,8 @@ To resume this session: resume="${task.sessionID}"`;
|
|
|
43223
43238
|
description: args.description,
|
|
43224
43239
|
run_in_background: args.run_in_background,
|
|
43225
43240
|
sessionId: sessionID,
|
|
43226
|
-
sync: true
|
|
43241
|
+
sync: true,
|
|
43242
|
+
command: args.command
|
|
43227
43243
|
}
|
|
43228
43244
|
});
|
|
43229
43245
|
try {
|
|
@@ -43356,7 +43372,7 @@ Session ID: ${sessionID}
|
|
|
43356
43372
|
${textContent || "(No text output)"}
|
|
43357
43373
|
|
|
43358
43374
|
---
|
|
43359
|
-
To
|
|
43375
|
+
To continue this session: session_id="${sessionID}"`;
|
|
43360
43376
|
} catch (error45) {
|
|
43361
43377
|
if (toastManager && taskId !== undefined) {
|
|
43362
43378
|
toastManager.removeTask(taskId);
|
|
@@ -49476,11 +49492,11 @@ ${librarianSection}
|
|
|
49476
49492
|
\`\`\`typescript
|
|
49477
49493
|
// CORRECT: Always background, always parallel
|
|
49478
49494
|
// Contextual Grep (internal)
|
|
49479
|
-
delegate_task(subagent_type="explore", run_in_background=true,
|
|
49480
|
-
delegate_task(subagent_type="explore", run_in_background=true,
|
|
49495
|
+
delegate_task(subagent_type="explore", run_in_background=true, load_skills=[], prompt="Find auth implementations in our codebase...")
|
|
49496
|
+
delegate_task(subagent_type="explore", run_in_background=true, load_skills=[], prompt="Find error handling patterns here...")
|
|
49481
49497
|
// Reference Grep (external)
|
|
49482
|
-
delegate_task(subagent_type="librarian", run_in_background=true,
|
|
49483
|
-
delegate_task(subagent_type="librarian", run_in_background=true,
|
|
49498
|
+
delegate_task(subagent_type="librarian", run_in_background=true, load_skills=[], prompt="Find JWT best practices in official docs...")
|
|
49499
|
+
delegate_task(subagent_type="librarian", run_in_background=true, load_skills=[], prompt="Find how production apps handle auth in Express...")
|
|
49484
49500
|
// Continue working immediately. Collect with background_output when needed.
|
|
49485
49501
|
|
|
49486
49502
|
// WRONG: Sequential or blocking
|
|
@@ -49541,15 +49557,15 @@ AFTER THE WORK YOU DELEGATED SEEMS DONE, ALWAYS VERIFY THE RESULTS AS FOLLOWING:
|
|
|
49541
49557
|
|
|
49542
49558
|
Every \`delegate_task()\` output includes a session_id. **USE IT.**
|
|
49543
49559
|
|
|
49544
|
-
**ALWAYS
|
|
49560
|
+
**ALWAYS continue when:**
|
|
49545
49561
|
| Scenario | Action |
|
|
49546
49562
|
|----------|--------|
|
|
49547
|
-
| Task failed/incomplete | \`
|
|
49548
|
-
| Follow-up question on result | \`
|
|
49549
|
-
| Multi-turn with same agent | \`
|
|
49550
|
-
| Verification failed | \`
|
|
49563
|
+
| Task failed/incomplete | \`session_id="{session_id}", prompt="Fix: {specific error}"\` |
|
|
49564
|
+
| Follow-up question on result | \`session_id="{session_id}", prompt="Also: {question}"\` |
|
|
49565
|
+
| Multi-turn with same agent | \`session_id="{session_id}"\` - NEVER start fresh |
|
|
49566
|
+
| Verification failed | \`session_id="{session_id}", prompt="Failed verification: {error}. Fix."\` |
|
|
49551
49567
|
|
|
49552
|
-
**Why
|
|
49568
|
+
**Why session_id is CRITICAL:**
|
|
49553
49569
|
- Subagent has FULL conversation context preserved
|
|
49554
49570
|
- No repeated file reads, exploration, or setup
|
|
49555
49571
|
- Saves 70%+ tokens on follow-ups
|
|
@@ -49560,10 +49576,10 @@ Every \`delegate_task()\` output includes a session_id. **USE IT.**
|
|
|
49560
49576
|
delegate_task(category="quick", prompt="Fix the type error in auth.ts...")
|
|
49561
49577
|
|
|
49562
49578
|
// CORRECT: Resume preserves everything
|
|
49563
|
-
delegate_task(
|
|
49579
|
+
delegate_task(session_id="ses_abc123", prompt="Fix: Type error on line 42")
|
|
49564
49580
|
\`\`\`
|
|
49565
49581
|
|
|
49566
|
-
**After EVERY delegation, STORE the session_id for potential
|
|
49582
|
+
**After EVERY delegation, STORE the session_id for potential continuation.**
|
|
49567
49583
|
|
|
49568
49584
|
### Code Changes:
|
|
49569
49585
|
- Match existing patterns (if codebase is disciplined)
|
|
@@ -50675,7 +50691,7 @@ ${categoryRows.join(`
|
|
|
50675
50691
|
`)}
|
|
50676
50692
|
|
|
50677
50693
|
\`\`\`typescript
|
|
50678
|
-
delegate_task(category="[category-name]",
|
|
50694
|
+
delegate_task(category="[category-name]", load_skills=[...], prompt="...")
|
|
50679
50695
|
\`\`\``;
|
|
50680
50696
|
}
|
|
50681
50697
|
function buildSkillsSection(skills) {
|
|
@@ -50699,12 +50715,12 @@ ${skillRows.join(`
|
|
|
50699
50715
|
**MANDATORY: Evaluate ALL skills for relevance to your task.**
|
|
50700
50716
|
|
|
50701
50717
|
Read each skill's description and ask: "Does this skill's domain overlap with my task?"
|
|
50702
|
-
- If YES: INCLUDE in
|
|
50718
|
+
- If YES: INCLUDE in load_skills=[...]
|
|
50703
50719
|
- If NO: You MUST justify why in your pre-delegation declaration
|
|
50704
50720
|
|
|
50705
50721
|
**Usage:**
|
|
50706
50722
|
\`\`\`typescript
|
|
50707
|
-
delegate_task(category="[category]",
|
|
50723
|
+
delegate_task(category="[category]", load_skills=["skill-1", "skill-2"], prompt="...")
|
|
50708
50724
|
\`\`\`
|
|
50709
50725
|
|
|
50710
50726
|
**IMPORTANT:**
|
|
@@ -50714,7 +50730,7 @@ delegate_task(category="[category]", skills=["skill-1", "skill-2"], prompt="..."
|
|
|
50714
50730
|
}
|
|
50715
50731
|
function buildDecisionMatrix(agents, userCategories) {
|
|
50716
50732
|
const allCategories = { ...DEFAULT_CATEGORIES, ...userCategories };
|
|
50717
|
-
const categoryRows = Object.entries(allCategories).map(([name]) => `| ${getCategoryDescription(name, userCategories)} | \`category="${name}",
|
|
50733
|
+
const categoryRows = Object.entries(allCategories).map(([name]) => `| ${getCategoryDescription(name, userCategories)} | \`category="${name}", load_skills=[...]\` |`);
|
|
50718
50734
|
const agentRows = agents.map((a) => {
|
|
50719
50735
|
const shortDesc = a.description.split(".")[0] || a.description;
|
|
50720
50736
|
return `| ${shortDesc} | \`agent="${a.name}"\` |`;
|
|
@@ -50933,7 +50949,7 @@ delegate_task(
|
|
|
50933
50949
|
**If verification fails**: Resume the SAME session with the ACTUAL error output:
|
|
50934
50950
|
\`\`\`typescript
|
|
50935
50951
|
delegate_task(
|
|
50936
|
-
|
|
50952
|
+
session_id="ses_xyz789", // ALWAYS use the session from the failed task
|
|
50937
50953
|
load_skills=[...],
|
|
50938
50954
|
prompt="Verification failed: {actual error}. Fix."
|
|
50939
50955
|
)
|
|
@@ -50941,24 +50957,24 @@ delegate_task(
|
|
|
50941
50957
|
|
|
50942
50958
|
### 3.5 Handle Failures (USE RESUME)
|
|
50943
50959
|
|
|
50944
|
-
**CRITICAL: When re-delegating, ALWAYS use \`
|
|
50960
|
+
**CRITICAL: When re-delegating, ALWAYS use \`session_id\` parameter.**
|
|
50945
50961
|
|
|
50946
50962
|
Every \`delegate_task()\` output includes a session_id. STORE IT.
|
|
50947
50963
|
|
|
50948
50964
|
If task fails:
|
|
50949
50965
|
1. Identify what went wrong
|
|
50950
50966
|
2. **Resume the SAME session** - subagent has full context already:
|
|
50951
|
-
|
|
50952
|
-
|
|
50953
|
-
|
|
50954
|
-
|
|
50955
|
-
|
|
50956
|
-
|
|
50957
|
-
|
|
50967
|
+
\`\`\`typescript
|
|
50968
|
+
delegate_task(
|
|
50969
|
+
session_id="ses_xyz789", // Session from failed task
|
|
50970
|
+
load_skills=[...],
|
|
50971
|
+
prompt="FAILED: {error}. Fix by: {specific instruction}"
|
|
50972
|
+
)
|
|
50973
|
+
\`\`\`
|
|
50958
50974
|
3. Maximum 3 retry attempts with the SAME session
|
|
50959
50975
|
4. If blocked after 3 attempts: Document and continue to independent tasks
|
|
50960
50976
|
|
|
50961
|
-
**Why
|
|
50977
|
+
**Why session_id is MANDATORY for failures:**
|
|
50962
50978
|
- Subagent already read all files, knows the context
|
|
50963
50979
|
- No repeated exploration = 70%+ token savings
|
|
50964
50980
|
- Subagent knows what approaches already failed
|
|
@@ -51103,7 +51119,7 @@ You are the QA gate. Subagents lie. Verify EVERYTHING.
|
|
|
51103
51119
|
- Parallelize independent tasks
|
|
51104
51120
|
- Verify with your own tools
|
|
51105
51121
|
- **Store session_id from every delegation output**
|
|
51106
|
-
- **Use \`
|
|
51122
|
+
- **Use \`session_id="{session_id}"\` for retries, fixes, and follow-ups**
|
|
51107
51123
|
</critical_overrides>
|
|
51108
51124
|
`;
|
|
51109
51125
|
function buildDynamicOrchestratorPrompt(ctx) {
|
package/dist/shared/index.d.ts
CHANGED
|
@@ -10,7 +10,6 @@ export * from "./hook-disabled";
|
|
|
10
10
|
export * from "./deep-merge";
|
|
11
11
|
export * from "./file-utils";
|
|
12
12
|
export * from "./dynamic-truncator";
|
|
13
|
-
export * from "./config-path";
|
|
14
13
|
export * from "./data-path";
|
|
15
14
|
export * from "./config-errors";
|
|
16
15
|
export * from "./claude-config-dir";
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export declare const ALLOWED_AGENTS: readonly ["explore", "librarian"];
|
|
2
|
-
export declare const CALL_OMO_AGENT_DESCRIPTION = "Spawn explore/librarian agent. run_in_background REQUIRED (true=async with task_id, false=sync).\n\nAvailable: {agents}\n\nPass `
|
|
2
|
+
export declare const CALL_OMO_AGENT_DESCRIPTION = "Spawn explore/librarian agent. run_in_background REQUIRED (true=async with task_id, false=sync).\n\nAvailable: {agents}\n\nPass `session_id=<id>` to continue previous agent with full context. Prompts MUST be in English. Use `background_output` for async results.";
|
package/dist/tools/index.d.ts
CHANGED
|
@@ -4,13 +4,12 @@ export { createSlashcommandTool, discoverCommandsSync } from "./slashcommand";
|
|
|
4
4
|
export { sessionExists } from "./session-manager/storage";
|
|
5
5
|
export { interactive_bash, startBackgroundCheck as startTmuxCheck } from "./interactive-bash";
|
|
6
6
|
export { createSkillTool } from "./skill";
|
|
7
|
-
export { getTmuxPath } from "./interactive-bash/utils";
|
|
8
7
|
export { createSkillMcpTool } from "./skill-mcp";
|
|
9
8
|
import type { PluginInput, ToolDefinition } from "@opencode-ai/plugin";
|
|
10
9
|
import type { BackgroundManager } from "../features/background-agent";
|
|
11
10
|
type OpencodeClient = PluginInput["client"];
|
|
12
11
|
export { createCallOmoAgent } from "./call-omo-agent";
|
|
13
12
|
export { createLookAt } from "./look-at";
|
|
14
|
-
export { createDelegateTask
|
|
13
|
+
export { createDelegateTask } from "./delegate-task";
|
|
15
14
|
export declare function createBackgroundTools(manager: BackgroundManager, client: OpencodeClient): Record<string, ToolDefinition>;
|
|
16
15
|
export declare const builtinTools: Record<string, ToolDefinition>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "oh-my-opencode",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.1",
|
|
4
4
|
"description": "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -73,13 +73,13 @@
|
|
|
73
73
|
"typescript": "^5.7.3"
|
|
74
74
|
},
|
|
75
75
|
"optionalDependencies": {
|
|
76
|
-
"oh-my-opencode-darwin-arm64": "3.0.
|
|
77
|
-
"oh-my-opencode-darwin-x64": "3.0.
|
|
78
|
-
"oh-my-opencode-linux-arm64": "3.0.
|
|
79
|
-
"oh-my-opencode-linux-arm64-musl": "3.0.
|
|
80
|
-
"oh-my-opencode-linux-x64": "3.0.
|
|
81
|
-
"oh-my-opencode-linux-x64-musl": "3.0.
|
|
82
|
-
"oh-my-opencode-windows-x64": "3.0.
|
|
76
|
+
"oh-my-opencode-darwin-arm64": "3.0.1",
|
|
77
|
+
"oh-my-opencode-darwin-x64": "3.0.1",
|
|
78
|
+
"oh-my-opencode-linux-arm64": "3.0.1",
|
|
79
|
+
"oh-my-opencode-linux-arm64-musl": "3.0.1",
|
|
80
|
+
"oh-my-opencode-linux-x64": "3.0.1",
|
|
81
|
+
"oh-my-opencode-linux-x64-musl": "3.0.1",
|
|
82
|
+
"oh-my-opencode-windows-x64": "3.0.1"
|
|
83
83
|
},
|
|
84
84
|
"trustedDependencies": [
|
|
85
85
|
"@ast-grep/cli",
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import type { BackgroundManager } from "../../features/background-agent";
|
|
2
|
-
interface CompactingInput {
|
|
3
|
-
sessionID: string;
|
|
4
|
-
}
|
|
5
|
-
interface CompactingOutput {
|
|
6
|
-
context: string[];
|
|
7
|
-
prompt?: string;
|
|
8
|
-
}
|
|
9
|
-
/**
|
|
10
|
-
* Background agent compaction hook - preserves task state during context compaction.
|
|
11
|
-
*
|
|
12
|
-
* When OpenCode compacts session context to save tokens, this hook injects
|
|
13
|
-
* information about running and recently completed background tasks so the
|
|
14
|
-
* agent doesn't lose awareness of delegated work.
|
|
15
|
-
*/
|
|
16
|
-
export declare function createBackgroundCompactionHook(manager: BackgroundManager): {
|
|
17
|
-
"experimental.session.compacting": (input: CompactingInput, output: CompactingOutput) => Promise<void>;
|
|
18
|
-
};
|
|
19
|
-
export {};
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Returns the user-level config directory based on the OS.
|
|
3
|
-
* @deprecated Use getOpenCodeConfigDir() from opencode-config-dir.ts instead.
|
|
4
|
-
*/
|
|
5
|
-
export declare function getUserConfigDir(): string;
|
|
6
|
-
/**
|
|
7
|
-
* Returns the full path to the user-level oh-my-opencode config file.
|
|
8
|
-
*/
|
|
9
|
-
export declare function getUserConfigPath(): string;
|
|
10
|
-
/**
|
|
11
|
-
* Returns the full path to the project-level oh-my-opencode config file.
|
|
12
|
-
*/
|
|
13
|
-
export declare function getProjectConfigPath(directory: string): string;
|