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.
@@ -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 resume=\"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 `resume` 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 resume=\"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 resume 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 `resume=\"{session_id}\"` for retries, fixes, and follow-ups**\n</critical_overrides>\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
- * The opencode-antigravity-auth plugin supports two naming conventions:
44
- * - `antigravity-gemini-3-pro-high` (RECOMMENDED, explicit Antigravity quota routing)
45
- * - `gemini-3-pro-high` (LEGACY, backward compatible but may break in future)
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 rely on Gemini CLI using `-preview` suffix for disambiguation.
48
- * If Google removes `-preview`, legacy names may route to wrong quota.
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#migration-guide-v127
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-high": {
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-pro-low": {
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-gemini-3-flash": {
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-high": {
6690
- name: "Gemini 3 Pro High (Antigravity)",
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.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.0",
7959
- "oh-my-opencode-darwin-x64": "3.0.0",
7960
- "oh-my-opencode-linux-arm64": "3.0.0",
7961
- "oh-my-opencode-linux-arm64-musl": "3.0.0",
7962
- "oh-my-opencode-linux-x64": "3.0.0",
7963
- "oh-my-opencode-linux-x64-musl": "3.0.0",
7964
- "oh-my-opencode-windows-x64": "3.0.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 `<promise>DONE</promise>` (or custom promise text) 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.";
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 a dedicated planning agent for work breakdown
19431
- - MUST USE PLAN AGENT. MUST USE PLAN AGENT. MUST USE PLAN AGENT.
19432
- - ALWAYS ASK PLAN AGENT TO WHAT CATEGORY + SKILLS / AGENTS TO LEVERAGE.
19433
- - IF IMPLEMENT TASK, MUST ADD TODO NOW: "CONSULT WITH PLAN AGENT WITH CATEGORY + SKILLS"
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. Always Use Plan agent with gathered context to create detailed work breakdown
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 -> PLAN AGENT SPAWN
19529
- 3. WORK BY DELEGATING TO ANOTHER AGENTS
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
- return pattern.test(content);
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', skills=['git-master'], ...) to save context. Triggers: 'commit', 'rebase', 'squash', 'who wrote', 'when was X added', 'find the commit that'.",
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 resume:`))
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 resume: delegate_task(resume="${sessionId}", prompt="...")`;
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(resume="${sessionId}", prompt="fix: [describe the specific failure]")
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 resumed");
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 \`<promise>DONE</promise>\` (or custom promise text) when fully complete
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
- ## Resume Instructions
41904
+ ## Continue Instructions
41896
41905
 
41897
- To resume a cancelled task, use:
41906
+ To continue a cancelled task, use:
41898
41907
  \`\`\`
41899
- delegate_task(resume="<session_id>", prompt="Continue: <your follow-up>")
41908
+ delegate_task(session_id="<session_id>", prompt="Continue: <your follow-up>")
41900
41909
  \`\`\`
41901
41910
 
41902
- Resumable sessions:
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 \`resume=session_id\` to continue previous agent with full context. Prompts MUST be in English. Use \`background_output\` for async results.`;
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.resume) {
42594
- lines.push(`- resume: ${ctx.args.resume}`);
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 resuming).
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
- - resume: Session ID to resume (from previous task output). Continues agent with FULL CONTEXT PRESERVED - saves tokens, maintains continuity.
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 resume:**
42672
- - Task failed/incomplete \u2192 resume with "fix: [specific issue]"
42673
- - Need follow-up on previous result \u2192 resume with additional question
42674
- - Multi-turn conversation with same agent \u2192 always resume instead of new task
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
- resume: tool.schema.string().optional().describe("Session ID to resume")
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.resume) {
42738
+ if (args.session_id) {
42728
42739
  if (runInBackground) {
42729
42740
  try {
42730
42741
  const task = await manager.resume({
42731
- sessionId: args.resume,
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: `Resume: ${task.description}`,
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 resumed.
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: "Resume background task",
42773
+ operation: "Continue background task",
42762
42774
  args,
42763
- sessionID: args.resume
42775
+ sessionID: args.session_id
42764
42776
  });
42765
42777
  }
42766
42778
  }
42767
42779
  const toastManager2 = getTaskToastManager();
42768
- const taskId2 = `resume_sync_${args.resume.slice(0, 8)}`;
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: "resume",
42786
+ agent: "continue",
42775
42787
  isBackground: false
42776
42788
  });
42777
42789
  }
42778
42790
  ctx.metadata?.({
42779
- title: `Resume: ${args.description}`,
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.resume,
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.resume } });
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.resume);
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.resume },
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 resume prompt: ${errorMessage}
42841
+ return `Failed to send continuation prompt: ${errorMessage}
42829
42842
 
42830
- Session ID: ${args.resume}`;
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.resume } });
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.resume }
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.resume}`;
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.resume}`;
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 resumed and completed in ${duration3}.
42894
+ return `Task continued and completed in ${duration3}.
42882
42895
 
42883
- Session ID: ${args.resume}
42896
+ Session ID: ${args.session_id}
42884
42897
 
42885
42898
  ---
42886
42899
 
42887
42900
  ${textContent || "(No text output)"}
42888
42901
 
42889
42902
  ---
42890
- To resume this session: resume="${args.resume}"`;
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 resume this session: resume="${sessionID}"`;
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 resume this session: resume="${task.sessionID}"`;
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 resume this session: resume="${sessionID}"`;
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, skills=[], prompt="Find auth implementations in our codebase...")
49480
- delegate_task(subagent_type="explore", run_in_background=true, skills=[], prompt="Find error handling patterns here...")
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, skills=[], prompt="Find JWT best practices in official docs...")
49483
- delegate_task(subagent_type="librarian", run_in_background=true, skills=[], prompt="Find how production apps handle auth in Express...")
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 resume when:**
49560
+ **ALWAYS continue when:**
49545
49561
  | Scenario | Action |
49546
49562
  |----------|--------|
49547
- | Task failed/incomplete | \`resume="{session_id}", prompt="Fix: {specific error}"\` |
49548
- | Follow-up question on result | \`resume="{session_id}", prompt="Also: {question}"\` |
49549
- | Multi-turn with same agent | \`resume="{session_id}"\` - NEVER start fresh |
49550
- | Verification failed | \`resume="{session_id}", prompt="Failed verification: {error}. Fix."\` |
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 resume is CRITICAL:**
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(resume="ses_abc123", prompt="Fix: Type error on line 42")
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 resume.**
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]", skills=[...], prompt="...")
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 skills=[...]
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]", skills=["skill-1", "skill-2"], prompt="...")
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}", skills=[...]\` |`);
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
- resume="ses_xyz789", // ALWAYS use the session from the failed task
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 \`resume\` parameter.**
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
- \`\`\`typescript
50952
- delegate_task(
50953
- resume="ses_xyz789", // Session from failed task
50954
- load_skills=[...],
50955
- prompt="FAILED: {error}. Fix by: {specific instruction}"
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 resume is MANDATORY for failures:**
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 \`resume="{session_id}"\` for retries, fixes, and follow-ups**
51122
+ - **Use \`session_id="{session_id}"\` for retries, fixes, and follow-ups**
51107
51123
  </critical_overrides>
51108
51124
  `;
51109
51125
  function buildDynamicOrchestratorPrompt(ctx) {
@@ -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 `resume=session_id` to continue previous agent with full context. Prompts MUST be in English. Use `background_output` for async results.";
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.";
@@ -4,6 +4,7 @@ export interface DelegateTaskArgs {
4
4
  category?: string;
5
5
  subagent_type?: string;
6
6
  run_in_background: boolean;
7
- resume?: string;
7
+ session_id?: string;
8
+ command?: string;
8
9
  load_skills: string[];
9
10
  }
@@ -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, type DelegateTaskToolOptions, DEFAULT_CATEGORIES, CATEGORY_PROMPT_APPENDS } from "./delegate-task";
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.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.0",
77
- "oh-my-opencode-darwin-x64": "3.0.0",
78
- "oh-my-opencode-linux-arm64": "3.0.0",
79
- "oh-my-opencode-linux-arm64-musl": "3.0.0",
80
- "oh-my-opencode-linux-x64": "3.0.0",
81
- "oh-my-opencode-linux-x64-musl": "3.0.0",
82
- "oh-my-opencode-windows-x64": "3.0.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;