oh-my-opencode 4.16.1 → 4.16.2
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/cli/index.js +13 -13
- package/dist/cli-node/index.js +13 -13
- package/dist/features/background-agent/parent-wake-dedupe.d.ts +1 -0
- package/dist/features/background-agent/parent-wake-flush-runner.d.ts +2 -0
- package/dist/features/background-agent/parent-wake-prompt-dispatch.d.ts +1 -0
- package/dist/features/builtin-commands/templates/refactor-sections/intro-and-analysis.d.ts +1 -1
- package/dist/features/builtin-commands/templates/remove-ai-slops.d.ts +1 -1
- package/dist/index.js +63 -32
- package/dist/skills/review-work/SKILL.md +3 -1
- package/dist/skills/start-work/SKILL.md +2 -0
- package/dist/skills/ulw-research/SKILL.md +3 -1
- package/package.json +13 -13
- package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
- package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
- package/packages/omo-codex/plugin/components/codegraph/package.json +1 -1
- package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
- package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
- package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
- package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
- package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
- package/packages/omo-codex/plugin/components/rules/bundled-rules/hephaestus.md +1 -1
- package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
- package/packages/omo-codex/plugin/components/rules/package.json +1 -1
- package/packages/omo-codex/plugin/components/start-work-continuation/directive.md +1 -1
- package/packages/omo-codex/plugin/components/start-work-continuation/hooks/hooks.json +2 -2
- package/packages/omo-codex/plugin/components/start-work-continuation/package.json +1 -1
- package/packages/omo-codex/plugin/components/start-work-continuation/test/codex-hook.test.ts +1 -1
- package/packages/omo-codex/plugin/components/teammode/AGENTS.md +1 -1
- package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
- package/packages/omo-codex/plugin/components/teammode/skills/teammode/SKILL.md +3 -3
- package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/directive.md +1 -0
- package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/skills/ultrawork/SKILL.md +1 -0
- package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/SKILL.md +2 -0
- package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/full-workflow.md +2 -0
- package/packages/omo-codex/plugin/components/ulw-loop/directive.md +1 -0
- package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +2 -2
- package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/SKILL.md +2 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/skill-contract.test.ts +1 -1
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-codegraph-init-guidance.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
- package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
- package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-checking-codegraph-bootstrap.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
- package/packages/omo-codex/plugin/hooks/stop-checking-start-work-continuation.json +1 -1
- package/packages/omo-codex/plugin/hooks/subagent-stop-checking-start-work-continuation.json +1 -1
- package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
- package/packages/omo-codex/plugin/package.json +1 -1
- package/packages/omo-codex/plugin/scripts/auto-update.mjs +64 -17
- package/packages/omo-codex/plugin/scripts/migrate-codex-config/multi-agent-v2-guard.mjs +186 -20
- package/packages/omo-codex/plugin/scripts/migrate-codex-config/subagent-limit-guard.mjs +51 -3
- package/packages/omo-codex/plugin/scripts/migrate-codex-config.mjs +33 -5
- package/packages/omo-codex/plugin/scripts/sync-skills.mjs +1 -1
- package/packages/omo-codex/plugin/skills/init-deep/SKILL.md +1 -1
- package/packages/omo-codex/plugin/skills/refactor/SKILL.md +1 -1
- package/packages/omo-codex/plugin/skills/remove-ai-slops/SKILL.md +1 -1
- package/packages/omo-codex/plugin/skills/review-work/SKILL.md +1 -1
- package/packages/omo-codex/plugin/skills/start-work/SKILL.md +1 -1
- package/packages/omo-codex/plugin/skills/teammode/SKILL.md +3 -3
- package/packages/omo-codex/plugin/skills/ultrawork/SKILL.md +1 -0
- package/packages/omo-codex/plugin/skills/ulw-loop/SKILL.md +2 -0
- package/packages/omo-codex/plugin/skills/ulw-plan/SKILL.md +2 -0
- package/packages/omo-codex/plugin/skills/ulw-plan/references/full-workflow.md +2 -0
- package/packages/omo-codex/plugin/skills/ulw-research/SKILL.md +1 -1
- package/packages/omo-codex/plugin/skills/visual-qa/SKILL.md +1 -1
- package/packages/omo-codex/plugin/test/aggregate-plugin-fixture.mjs +1 -1
- package/packages/omo-codex/plugin/test/auto-update.test.mjs +35 -1
- package/packages/omo-codex/plugin/test/migrate-codex-config.test.mjs +275 -19
- package/packages/omo-codex/plugin/test/subagent-limit-migration.test.mjs +33 -0
- package/packages/omo-codex/plugin/test/sync-skills-orchestration.test.mjs +4 -2
- package/packages/shared-skills/skills/review-work/SKILL.md +3 -1
- package/packages/shared-skills/skills/start-work/SKILL.md +2 -0
- package/packages/shared-skills/skills/ulw-research/SKILL.md +3 -1
package/dist/cli/index.js
CHANGED
|
@@ -2145,7 +2145,7 @@ var package_default;
|
|
|
2145
2145
|
var init_package = __esm(() => {
|
|
2146
2146
|
package_default = {
|
|
2147
2147
|
name: "oh-my-opencode",
|
|
2148
|
-
version: "4.16.
|
|
2148
|
+
version: "4.16.2",
|
|
2149
2149
|
description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
|
|
2150
2150
|
main: "./dist/index.js",
|
|
2151
2151
|
types: "dist/index.d.ts",
|
|
@@ -2355,18 +2355,18 @@ var init_package = __esm(() => {
|
|
|
2355
2355
|
typescript: "^6.0.3"
|
|
2356
2356
|
},
|
|
2357
2357
|
optionalDependencies: {
|
|
2358
|
-
"oh-my-opencode-darwin-arm64": "4.16.
|
|
2359
|
-
"oh-my-opencode-darwin-x64": "4.16.
|
|
2360
|
-
"oh-my-opencode-darwin-x64-baseline": "4.16.
|
|
2361
|
-
"oh-my-opencode-linux-arm64": "4.16.
|
|
2362
|
-
"oh-my-opencode-linux-arm64-musl": "4.16.
|
|
2363
|
-
"oh-my-opencode-linux-x64": "4.16.
|
|
2364
|
-
"oh-my-opencode-linux-x64-baseline": "4.16.
|
|
2365
|
-
"oh-my-opencode-linux-x64-musl": "4.16.
|
|
2366
|
-
"oh-my-opencode-linux-x64-musl-baseline": "4.16.
|
|
2367
|
-
"oh-my-opencode-windows-arm64": "4.16.
|
|
2368
|
-
"oh-my-opencode-windows-x64": "4.16.
|
|
2369
|
-
"oh-my-opencode-windows-x64-baseline": "4.16.
|
|
2358
|
+
"oh-my-opencode-darwin-arm64": "4.16.2",
|
|
2359
|
+
"oh-my-opencode-darwin-x64": "4.16.2",
|
|
2360
|
+
"oh-my-opencode-darwin-x64-baseline": "4.16.2",
|
|
2361
|
+
"oh-my-opencode-linux-arm64": "4.16.2",
|
|
2362
|
+
"oh-my-opencode-linux-arm64-musl": "4.16.2",
|
|
2363
|
+
"oh-my-opencode-linux-x64": "4.16.2",
|
|
2364
|
+
"oh-my-opencode-linux-x64-baseline": "4.16.2",
|
|
2365
|
+
"oh-my-opencode-linux-x64-musl": "4.16.2",
|
|
2366
|
+
"oh-my-opencode-linux-x64-musl-baseline": "4.16.2",
|
|
2367
|
+
"oh-my-opencode-windows-arm64": "4.16.2",
|
|
2368
|
+
"oh-my-opencode-windows-x64": "4.16.2",
|
|
2369
|
+
"oh-my-opencode-windows-x64-baseline": "4.16.2"
|
|
2370
2370
|
},
|
|
2371
2371
|
overrides: {
|
|
2372
2372
|
"@earendil-works/pi-agent-core": "0.80.3",
|
package/dist/cli-node/index.js
CHANGED
|
@@ -2146,7 +2146,7 @@ var package_default;
|
|
|
2146
2146
|
var init_package = __esm(() => {
|
|
2147
2147
|
package_default = {
|
|
2148
2148
|
name: "oh-my-opencode",
|
|
2149
|
-
version: "4.16.
|
|
2149
|
+
version: "4.16.2",
|
|
2150
2150
|
description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
|
|
2151
2151
|
main: "./dist/index.js",
|
|
2152
2152
|
types: "dist/index.d.ts",
|
|
@@ -2356,18 +2356,18 @@ var init_package = __esm(() => {
|
|
|
2356
2356
|
typescript: "^6.0.3"
|
|
2357
2357
|
},
|
|
2358
2358
|
optionalDependencies: {
|
|
2359
|
-
"oh-my-opencode-darwin-arm64": "4.16.
|
|
2360
|
-
"oh-my-opencode-darwin-x64": "4.16.
|
|
2361
|
-
"oh-my-opencode-darwin-x64-baseline": "4.16.
|
|
2362
|
-
"oh-my-opencode-linux-arm64": "4.16.
|
|
2363
|
-
"oh-my-opencode-linux-arm64-musl": "4.16.
|
|
2364
|
-
"oh-my-opencode-linux-x64": "4.16.
|
|
2365
|
-
"oh-my-opencode-linux-x64-baseline": "4.16.
|
|
2366
|
-
"oh-my-opencode-linux-x64-musl": "4.16.
|
|
2367
|
-
"oh-my-opencode-linux-x64-musl-baseline": "4.16.
|
|
2368
|
-
"oh-my-opencode-windows-arm64": "4.16.
|
|
2369
|
-
"oh-my-opencode-windows-x64": "4.16.
|
|
2370
|
-
"oh-my-opencode-windows-x64-baseline": "4.16.
|
|
2359
|
+
"oh-my-opencode-darwin-arm64": "4.16.2",
|
|
2360
|
+
"oh-my-opencode-darwin-x64": "4.16.2",
|
|
2361
|
+
"oh-my-opencode-darwin-x64-baseline": "4.16.2",
|
|
2362
|
+
"oh-my-opencode-linux-arm64": "4.16.2",
|
|
2363
|
+
"oh-my-opencode-linux-arm64-musl": "4.16.2",
|
|
2364
|
+
"oh-my-opencode-linux-x64": "4.16.2",
|
|
2365
|
+
"oh-my-opencode-linux-x64-baseline": "4.16.2",
|
|
2366
|
+
"oh-my-opencode-linux-x64-musl": "4.16.2",
|
|
2367
|
+
"oh-my-opencode-linux-x64-musl-baseline": "4.16.2",
|
|
2368
|
+
"oh-my-opencode-windows-arm64": "4.16.2",
|
|
2369
|
+
"oh-my-opencode-windows-x64": "4.16.2",
|
|
2370
|
+
"oh-my-opencode-windows-x64-baseline": "4.16.2"
|
|
2371
2371
|
},
|
|
2372
2372
|
overrides: {
|
|
2373
2373
|
"@earendil-works/pi-agent-core": "0.80.3",
|
|
@@ -18,6 +18,8 @@ export declare class ParentWakeFlushRunner {
|
|
|
18
18
|
private dropAdmittedWakeConsumedByParent;
|
|
19
19
|
private sendParentWakePrompt;
|
|
20
20
|
private isSessionActive;
|
|
21
|
+
private shouldForceDispatchAfterActiveDefer;
|
|
22
|
+
private getQueuedAgeMs;
|
|
21
23
|
private hasRecentParentSessionActivity;
|
|
22
24
|
private isUserMessageInProgress;
|
|
23
25
|
private shouldDeferParentWakeForSessionHistory;
|
|
@@ -8,6 +8,7 @@ type ParentWakePromptDispatchInput = {
|
|
|
8
8
|
readonly latestWake: PendingParentWake;
|
|
9
9
|
readonly forceNoReply?: boolean;
|
|
10
10
|
readonly retainPendingWake?: boolean;
|
|
11
|
+
readonly skipPromptGateStatusCheck?: boolean;
|
|
11
12
|
readonly emptyAssistantTurnRetry: boolean;
|
|
12
13
|
readonly toolWaitDecision: ToolWaitDeferralDecision;
|
|
13
14
|
readonly getDispatchedWake: () => PendingParentWake | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const REFACTOR_INTRO_AND_ANALYSIS = "# Intelligent Refactor Command\n\n## Codex Harness Tool Compatibility\n\nThis command includes examples for the OpenCode harness. In Codex, do not call OpenCode-only tools such as `call_omo_agent(...)`, `task(...)`, `background_output(...)`, or `team_*(...)` literally. Translate those examples to Codex native tools:\n\n| OpenCode example | Codex tool to use |\n| --- | --- |\n| `call_omo_agent(subagent_type=\"explore\", ...)` | `spawn_agent(
|
|
1
|
+
export declare const REFACTOR_INTRO_AND_ANALYSIS = "# Intelligent Refactor Command\n\n## Codex Harness Tool Compatibility\n\nThis command includes examples for the OpenCode harness. In Codex, do not call OpenCode-only tools such as `call_omo_agent(...)`, `task(...)`, `background_output(...)`, or `team_*(...)` literally. Translate those examples to Codex native tools:\n\n| OpenCode example | Codex tool to use |\n| --- | --- |\n| `call_omo_agent(subagent_type=\"explore\", ...)` | `multi_agent_v1.spawn_agent({\"message\":\"TASK: act as an explorer. ...\",\"agent_type\":\"explorer\",\"fork_context\":false})` |\n| `call_omo_agent(subagent_type=\"librarian\", ...)` | `multi_agent_v1.spawn_agent({\"message\":\"TASK: act as a librarian. ...\",\"agent_type\":\"librarian\",\"fork_context\":false})` |\n| `task(subagent_type=\"plan\", ...)` | `multi_agent_v1.spawn_agent({\"message\":\"TASK: act as a planning agent. ...\",\"agent_type\":\"plan\",\"fork_context\":false})` |\n| `task(subagent_type=\"oracle\", ...)` | `multi_agent_v1.spawn_agent({\"message\":\"TASK: act as a rigorous reviewer. ...\",\"agent_type\":\"lazycodex-gate-reviewer\",\"fork_context\":false})` |\n| `task(category=\"...\", ...)` | `multi_agent_v1.spawn_agent({\"message\":\"TASK: act as an implementation or QA worker. ...\",\"fork_context\":false})` |\n| `background_output(task_id=\"...\")` | `multi_agent_v1.wait_agent(...)` for mailbox signals |\n| `team_*(...)` | Use Codex native subagents via `multi_agent_v1.spawn_agent`, `multi_agent_v1.send_input`, `multi_agent_v1.wait_agent`, and `multi_agent_v1.close_agent` |\n\nCodex exposes ONE of two subagent tool surfaces per session; check your own tool list and route accordingly. If `multi_agent_v1.*` tools exist, use the table above as written. If instead a flat `spawn_agent` with a required `task_name` exists (`multi_agent_v2`), rewrite every `multi_agent_v1.*` example: `multi_agent_v1.spawn_agent({...,\"fork_context\":false})` becomes `spawn_agent({\"task_name\":\"<lowercase_digits_underscores>\",\"message\":...,\"agent_type\":...,\"fork_turns\":\"none\"})` (`\"all\"` only when full parent history is truly required); `send_input` becomes `send_message`; do not call `close_agent`/`resume_agent` (finished agents end on their own; `followup_task` re-tasks one, `interrupt_agent` stops one); `wait_agent` takes only `timeout_ms` and returns on any child mailbox activity. `agent_type` works the same on both surfaces. If a code block below conflicts with this section, this section wins.\n\nWhen translating `load_skills=[...]`, include the requested skill names in the spawned agent's `message`. If a code block below conflicts with this section, this section wins.\n\n## Usage\n```\n/refactor <refactoring-target> [--scope=<file|module|project>] [--strategy=<safe|aggressive>]\n\nArguments:\n refactoring-target: What to refactor. Can be:\n - File path: src/auth/handler.ts\n - Symbol name: \"AuthService class\"\n - Pattern: \"all functions using deprecated API\"\n - Description: \"extract validation logic into separate module\"\n\nOptions:\n --scope: Refactoring scope (default: module)\n - file: Single file only\n - module: Module/directory scope\n - project: Entire codebase\n\n --strategy: Risk tolerance (default: safe)\n - safe: Conservative, maximum test coverage required\n - aggressive: Allow broader changes with adequate coverage\n```\n\n## What This Command Does\n\nPerforms intelligent, deterministic refactoring with full codebase awareness. Unlike blind search-and-replace, this command:\n\n1. **Understands your intent** - Analyzes what you actually want to achieve\n2. **Maps the codebase** - Builds a definitive codemap before touching anything\n3. **Assesses risk** - Evaluates test coverage and determines verification strategy\n4. **Plans meticulously** - Creates a detailed plan with Plan agent\n5. **Executes precisely** - Step-by-step refactoring with LSP and AST-grep\n6. **Verifies constantly** - Runs tests after each change to ensure zero regression\n\n---\n\n# PHASE 0: INTENT GATE (MANDATORY FIRST STEP)\n\n**BEFORE ANY ACTION, classify and validate the request.**\n\n## Step 0.1: Parse Request Type\n\n| Signal | Classification | Action |\n|--------|----------------|--------|\n| Specific file/symbol | Explicit | Proceed to codebase analysis |\n| \"Refactor X to Y\" | Clear transformation | Proceed to codebase analysis |\n| \"Improve\", \"Clean up\" | Open-ended | **MUST ask**: \"What specific improvement?\" |\n| Ambiguous scope | Uncertain | **MUST ask**: \"Which modules/files?\" |\n| Missing context | Incomplete | **MUST ask**: \"What's the desired outcome?\" |\n\n## Step 0.2: Validate Understanding\n\nBefore proceeding, confirm:\n- [ ] Target is clearly identified\n- [ ] Desired outcome is understood\n- [ ] Scope is defined (file/module/project)\n- [ ] Success criteria can be articulated\n\n**If ANY of above is unclear, ASK CLARIFYING QUESTION:**\n\n```\nI want to make sure I understand the refactoring goal correctly.\n\n**What I understood**: [interpretation]\n**What I'm unsure about**: [specific ambiguity]\n\nOptions I see:\n1. [Option A] - [implications]\n2. [Option B] - [implications]\n\n**My recommendation**: [suggestion with reasoning]\n\nShould I proceed with [recommendation], or would you prefer differently?\n```\n\n## Step 0.3: Create Initial Todos\n\n**IMMEDIATELY after understanding the request, create todos:**\n\n```\nTodoWrite([\n {\"id\": \"phase-1\", \"content\": \"PHASE 1: Codebase Analysis - launch parallel explore agents\", \"status\": \"pending\", \"priority\": \"high\"},\n {\"id\": \"phase-2\", \"content\": \"PHASE 2: Build Codemap - map dependencies and impact zones\", \"status\": \"pending\", \"priority\": \"high\"},\n {\"id\": \"phase-3\", \"content\": \"PHASE 3: Test Assessment - analyze test coverage and verification strategy\", \"status\": \"pending\", \"priority\": \"high\"},\n {\"id\": \"phase-4\", \"content\": \"PHASE 4: Plan Generation - invoke Plan agent for detailed refactoring plan\", \"status\": \"pending\", \"priority\": \"high\"},\n {\"id\": \"phase-5\", \"content\": \"PHASE 5: Execute Refactoring - step-by-step with continuous verification\", \"status\": \"pending\", \"priority\": \"high\"},\n {\"id\": \"phase-6\", \"content\": \"PHASE 6: Final Verification - full test suite and regression check\", \"status\": \"pending\", \"priority\": \"high\"}\n])\n```\n\n---\n\n# PHASE 1: CODEBASE ANALYSIS (PARALLEL EXPLORATION)\n\n**Mark phase-1 as in_progress.**\n\n## 1.1: Launch Parallel Explore Agents (BACKGROUND)\n\nFire ALL of these simultaneously using `call_omo_agent`:\n\n```\n// Agent 1: Find the refactoring target\ncall_omo_agent(\n subagent_type=\"explore\",\n run_in_background=true,\n prompt=\"Find all occurrences and definitions of [TARGET]. \n Report: file paths, line numbers, usage patterns.\"\n)\n\n// Agent 2: Find related code\ncall_omo_agent(\n subagent_type=\"explore\", \n run_in_background=true,\n prompt=\"Find all code that imports, uses, or depends on [TARGET].\n Report: dependency chains, import graphs.\"\n)\n\n// Agent 3: Find similar patterns\ncall_omo_agent(\n subagent_type=\"explore\",\n run_in_background=true,\n prompt=\"Find similar code patterns to [TARGET] in the codebase.\n Report: analogous implementations, established conventions.\"\n)\n\n// Agent 4: Find tests\ncall_omo_agent(\n subagent_type=\"explore\",\n run_in_background=true,\n prompt=\"Find all test files related to [TARGET].\n Report: test file paths, test case names, coverage indicators.\"\n)\n\n// Agent 5: Architecture context\ncall_omo_agent(\n subagent_type=\"explore\",\n run_in_background=true,\n prompt=\"Find architectural patterns and module organization around [TARGET].\n Report: module boundaries, layer structure, design patterns in use.\"\n)\n```\n\n## 1.2: Direct Tool Exploration (WHILE AGENTS RUN)\n\nWhile background agents are running, use direct tools:\n\n### LSP Tools for Precise Analysis:\n\n```typescript\n// Find definition(s)\nLspGotoDefinition(filePath, line, character) // Where is it defined?\n\n// Find ALL usages across workspace\nLspFindReferences(filePath, line, character, includeDeclaration=true)\n\n// Get file structure\nLspDocumentSymbols(filePath) // Hierarchical outline\nLspWorkspaceSymbols(filePath, query=\"[target_symbol]\") // Search by name\n\n// Get current diagnostics\nlsp_diagnostics(filePath) // Errors, warnings before we start\n```\n\n### AST-Grep Skill for Pattern Analysis:\n\n```bash\n// Find structural patterns\npython3 scripts/ast_grep_helper.py search 'function $NAME($$$) { $$$ }' --lang ts src/\n\n# Preview refactoring first\nsg --pattern '[old_pattern]' --rewrite '[new_pattern]' --lang ts src/\n```\n\n### Grep for Text Patterns:\n\n```\ngrep(pattern=\"[search_term]\", path=\"src/\", include=\"*.ts\")\n```\n\n## 1.3: Collect Background Results\n\n```\nbackground_output(task_id=\"[agent_1_id]\")\nbackground_output(task_id=\"[agent_2_id]\")\n...\n```\n\n**Mark phase-1 as completed after all results collected.**\n\n---\n\n";
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const REMOVE_AI_SLOPS_TEMPLATE = "# Remove AI Slops Command\n\n## Codex Harness Tool Compatibility\n\nThis command includes examples for the OpenCode harness. In Codex, do not call OpenCode-only tools such as `call_omo_agent(...)`, `task(...)`, `background_output(...)`, or `team_*(...)` literally. Translate those examples to Codex native tools:\n\n| OpenCode example | Codex tool to use |\n| --- | --- |\n| `call_omo_agent(subagent_type=\"explore\", ...)` | `spawn_agent(
|
|
1
|
+
export declare const REMOVE_AI_SLOPS_TEMPLATE = "# Remove AI Slops Command\n\n## Codex Harness Tool Compatibility\n\nThis command includes examples for the OpenCode harness. In Codex, do not call OpenCode-only tools such as `call_omo_agent(...)`, `task(...)`, `background_output(...)`, or `team_*(...)` literally. Translate those examples to Codex native tools:\n\n| OpenCode example | Codex tool to use |\n| --- | --- |\n| `call_omo_agent(subagent_type=\"explore\", ...)` | `multi_agent_v1.spawn_agent({\"message\":\"TASK: act as an explorer. ...\",\"agent_type\":\"explorer\",\"fork_context\":false})` |\n| `call_omo_agent(subagent_type=\"librarian\", ...)` | `multi_agent_v1.spawn_agent({\"message\":\"TASK: act as a librarian. ...\",\"agent_type\":\"librarian\",\"fork_context\":false})` |\n| `task(subagent_type=\"plan\", ...)` | `multi_agent_v1.spawn_agent({\"message\":\"TASK: act as a planning agent. ...\",\"agent_type\":\"plan\",\"fork_context\":false})` |\n| `task(subagent_type=\"oracle\", ...)` | `multi_agent_v1.spawn_agent({\"message\":\"TASK: act as a rigorous reviewer. ...\",\"agent_type\":\"lazycodex-gate-reviewer\",\"fork_context\":false})` |\n| `task(category=\"...\", ...)` | `multi_agent_v1.spawn_agent({\"message\":\"TASK: act as an implementation or QA worker. ...\",\"fork_context\":false})` |\n| `background_output(task_id=\"...\")` | `multi_agent_v1.wait_agent(...)` for mailbox signals |\n| `team_*(...)` | Use Codex native subagents via `multi_agent_v1.spawn_agent`, `multi_agent_v1.send_input`, `multi_agent_v1.wait_agent`, and `multi_agent_v1.close_agent` |\n\nCodex exposes ONE of two subagent tool surfaces per session; check your own tool list and route accordingly. If `multi_agent_v1.*` tools exist, use the table above as written. If instead a flat `spawn_agent` with a required `task_name` exists (`multi_agent_v2`), rewrite every `multi_agent_v1.*` example: `multi_agent_v1.spawn_agent({...,\"fork_context\":false})` becomes `spawn_agent({\"task_name\":\"<lowercase_digits_underscores>\",\"message\":...,\"agent_type\":...,\"fork_turns\":\"none\"})` (`\"all\"` only when full parent history is truly required); `send_input` becomes `send_message`; do not call `close_agent`/`resume_agent` (finished agents end on their own; `followup_task` re-tasks one, `interrupt_agent` stops one); `wait_agent` takes only `timeout_ms` and returns on any child mailbox activity. `agent_type` works the same on both surfaces. If a code block below conflicts with this section, this section wins.\n\nWhen translating `load_skills=[...]`, include the requested skill names in the spawned agent's `message`. If a code block below conflicts with this section, this section wins.\n\n## What this command does\nAnalyzes all files changed in the current branch (compared to parent commit), removes AI-generated code smells in parallel, then critically reviews the changes to ensure safety and behavior preservation. Fixes any issues found during review.\n\n## Step 0: Task Planning\n\nUse TodoWrite to create the task list:\n1. Get changed files from branch\n2. Run $omo:remove-ai-slops on each file in parallel\n3. Critically review all changes\n4. Fix any issues found\n\n## Role Definition\nYou are a senior code quality engineer specialized in identifying and removing AI-generated code patterns while preserving original functionality. You have deep expertise in code review, refactoring safety, and behavioral preservation.\n\n## Process\n\n### Phase 1: Identify Changed Files\nDetect the repository base branch dynamically, then get all changed files in the current branch:\n```bash\nBASE_BRANCH=$(git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's@^refs/remotes/origin/@@' || echo \"main\")\ngit diff $(git merge-base \"$BASE_BRANCH\" HEAD)..HEAD --name-only\n```\n\nIf `git symbolic-ref refs/remotes/origin/HEAD` is unavailable, detect the base branch at runtime using the repo's configured remote default branch. Only fall back to `main` as a last resort.\n\n### Phase 2: Parallel AI Slop Removal\nFor each changed file, spawn an agent in parallel using the Task tool with the $omo:remove-ai-slops skill:\n\n```\ntask(category=\"quick\", load_skills=[\"remove-ai-slops\"], run_in_background=true, description=\"Remove AI slops from {filename}\", prompt=\"Remove AI slops from: {file_path}\")\n```\n\n**CRITICAL**: Launch ALL agents in a SINGLE message with multiple Task tool calls for maximum parallelism.\n\nBefore running $omo:remove-ai-slops on each file, save a file-specific rollback artifact that captures only the delta introduced by the slop-removal pass. Use a safe pattern such as generating a per-file patch and reverse-applying it if review fails.\n\nDo NOT use `git checkout -- {file_path}` or any rollback that discards pre-existing branch changes in the file.\n\n### Phase 3: Critical Review\nAfter all $omo:remove-ai-slops agents complete, perform a critical review with the following checklist:\n\n**Safety Verification**:\n- [ ] No functional logic was accidentally removed\n- [ ] All error handling is preserved\n- [ ] Type hints remain correct and complete\n- [ ] Import statements are still valid\n- [ ] No breaking changes to public APIs\n\n**Behavior Preservation**:\n- [ ] Return values unchanged\n- [ ] Side effects unchanged\n- [ ] Exception behavior unchanged\n- [ ] Edge case handling preserved\n\n**Code Quality**:\n- [ ] Removed changes are genuinely AI slop (not intentional patterns)\n- [ ] Remaining code follows project conventions\n- [ ] No orphaned code or dead references\n\n### Phase 4: Fix Issues\nIf any issues are found during critical review:\n1. Identify the specific problem\n2. Explain why it's a problem\n3. Revert only the $omo:remove-ai-slops delta using the saved per-file patch or an equivalent reverse-apply workflow\n4. If remaining ai-slops are found after reverting, remove them by editing the file yourself - with parallel tool calls, per-file\n5. Verify the fix doesn't introduce new issues\n\n## Output Format\n\n### Summary Report\n```\n## AI Slop Removal Summary\n\n### Files Processed\n- file1.py: X changes\n- file2.py: Y changes\n\n### Critical Review Results\n- Safety: PASS/FAIL\n- Behavior: PASS/FAIL\n- Quality: PASS/FAIL\n\n### Issues Found & Fixed\n1. [Issue description] -> [Fix applied]\n\n### Final Status\n[CLEAN / ISSUES FIXED / REQUIRES ATTENTION]\n```\n\n## Quality Assurance\n- NEVER remove code that serves a functional purpose\n- ALWAYS verify changes compile/parse correctly\n- ALWAYS preserve test coverage\n- If uncertain about a change, err on the side of keeping the original code";
|
|
2
2
|
export declare const REMOVE_AI_SLOPS_TEAM_MODE_ADDENDUM = "\n---\n\n# Team Mode Protocol (active when team_* tools are present)\n\nTeam mode is enabled for this session. The rules below **override Phase 2-4** of the legacy flow above. Follow this protocol instead of the per-file fire-and-forget `task()` dispatch.\n\n## Phase 2 (team): `slop-squad` setup\n\n**Precondition checks** (fail hard if any step fails):\n\n1. Load the `team-mode` skill via the `skill` tool for lifecycle, message protocol, broadcast rules, 32KB message cap, and 4 parallel worker cap.\n2. Call `team_list` and verify no active run named `slop-squad` exists. If one does, it is an orphan from a crashed prior session \u2014 `team_shutdown_request` + `team_approve_shutdown` + `team_delete` it before proceeding. Do not rename the team or run concurrent sessions under the same name.\n3. If `~/.omo/teams/slop-squad/config.json` is missing, write it using the spec below.\n\n**Team spec** (`~/.omo/teams/slop-squad/config.json`):\n\n```json\n{\n \"name\": \"slop-squad\",\n \"lead\": { \"kind\": \"subagent_type\", \"subagent_type\": \"sisyphus\" },\n \"members\": [\n {\n \"kind\": \"category\",\n \"category\": \"quick\",\n \"prompt\": \"You run $omo:remove-ai-slops on ONE file per task. Load $omo:remove-ai-slops via the skill tool. Read the task description for the file path. Apply the skill's detection criteria verbatim. After edits: run lsp_diagnostics on the file. Report via team_send_message(teamRunId=<id>, to=\"lead\", summary=<change count>, body=<full $omo:remove-ai-slops report>) + team_task_update(status=completed). On ambiguity: send team_send_message(teamRunId=<id>, to=\"lead\", summary=\"UNCLEAR\", body=<reason>) + team_task_update(status=pending). Never git add, never run tests, never touch other files.\"\n },\n { \"kind\": \"category\", \"category\": \"quick\", \"prompt\": \"Same contract as peer quick worker.\" },\n { \"kind\": \"category\", \"category\": \"quick\", \"prompt\": \"Same contract as peer quick worker.\" },\n {\n \"kind\": \"category\",\n \"category\": \"unspecified-low\",\n \"prompt\": \"You are the FIX worker. You claim rework tasks that the lead creates after the external reviewer flags issues. Read the reviewer's per-hunk rollback instructions in the task description, apply the reverse patch, then run $omo:remove-ai-slops ONLY on the non-rolled-back remainder. Same reporting contract as quick peers. Handle UNCLEAR escalations the same way.\"\n }\n ]\n}\n```\n\nRationale for this composition:\n- **4 workers = team mode's parallel cap.** A fifth member just queues.\n- **Reviewer is NOT a team member** \u2014 review demands stronger reasoning than category routing provides (team category members are downcast to sisyphus-junior). The reviewer runs OUTSIDE the team as a `deep` task; see Phase 3.\n- **quick \u00D7 3** absorbs the mass of per-file slop removal. **unspecified-low \u00D7 1** is the rework lane for fixes triggered by reviewer findings.\n\n**Team lifecycle** (create once, reuse until Phase 5 cleanup):\n\n1. `team_create(teamName=\"slop-squad\")`. Record `teamRunId` \u2014 every subsequent team call needs it.\n2. Broadcast the detection criteria ONCE so each task description stays minimal:\n ```\n team_send_message(\n teamRunId=<id>, to=\"*\", kind=\"announcement\",\n summary=\"slop-criteria\",\n body=<the 9 slop categories + KEEP rules; reference the $omo:remove-ai-slops skill content>\n )\n ```\n3. Before spawning tasks, save a per-file rollback artifact that captures only the delta the slop-removal pass will introduce. Do NOT use `git checkout -- <file>` \u2014 that would discard pre-existing branch changes.\n4. For each changed file, `team_task_create(teamRunId=<id>, subject=\"slop: <file>\", description=<file path + rollback artifact path + reporting format>, blockedBy=[])`.\n\n## Phase 3 (team): Incremental reviewer dispatch\n\nWhile any team task is `pending | claimed | in_progress`:\n\n- Wait for `<system-reminder>` or member messages. Do NOT tight-poll `team_status`; the runtime notifies on state changes. A single `team_status` check is acceptable if no notification arrives within roughly 10 seconds of expected completion.\n- On each worker completion report:\n - Log the report to the pending final summary (no blocking).\n - Immediately dispatch an **external reviewer** \u2014 review runs OUTSIDE the team because team-member category routing downcasts to sisyphus-junior:\n ```\n task(\n category=\"deep\",\n load_skills=[],\n run_in_background=true,\n description=\"slop review: <file>\",\n prompt=<file path + full worker report + Safety/Behavior/Quality checklist + instruction to output \"PASS\" or \"FAIL:<per-hunk rollback instructions>\">\n )\n ```\n If `deep` is unavailable in this session, fall back to `category=\"unspecified-high\"`.\n- On a reviewer task returning FAIL:\n - Create a rework team task: `team_task_create(subject=\"rework: <file>\", description=<reverse-patch hunks from reviewer + \"then run $omo:remove-ai-slops on remaining non-rolled-back issues only\">)`. The `unspecified-low` fix member claims it.\n - Create a new reviewer task paired to the rework completion (same incremental pattern).\n- Loop until every file has a PASS from the reviewer AND no team task is outstanding.\n\n## Phase 4 (team): Fix issues\n\nFixes happen incrementally during Phase 3's loop via rework tasks \u2014 this phase is already handled when the loop exits. Any remaining manual fix that neither worker nor fix member could resolve is handled by Lead here, editing files directly.\n\n## Phase 5 (team): Team cleanup\n\nBefore producing the summary report, dismantle the team on EVERY exit path \u2014 success, escalation, abort \u2014 otherwise the next session's Phase 2 precondition check catches the orphan.\n\n1. `team_shutdown_request` for each member, then `team_approve_shutdown` if members do not self-approve within a reasonable window.\n2. `team_delete(teamRunId=<id>)`.\n3. `team_list` to confirm no residual `slop-squad` run.\n\nThe `~/.omo/teams/slop-squad/config.json` declaration file stays on disk; it is reused next session.\n\n## MUST NOT (team mode)\n\n- Lead never edits files directly \u2014 orchestrate only. If editing is needed, it goes into a team task.\n- Do not inline the full slop-criteria into every task description; rely on the Phase 2 broadcast.\n- Do not call `team_create` again mid-session. One team per resolution.\n- Do not put `oracle` / `librarian` into the team spec \u2014 they are team-ineligible; call them via `task()` outside the team when needed.\n";
|
package/dist/index.js
CHANGED
|
@@ -89498,7 +89498,7 @@ function getCachedVersion(options = {}) {
|
|
|
89498
89498
|
// package.json
|
|
89499
89499
|
var package_default = {
|
|
89500
89500
|
name: "oh-my-opencode",
|
|
89501
|
-
version: "4.16.
|
|
89501
|
+
version: "4.16.2",
|
|
89502
89502
|
description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
|
|
89503
89503
|
main: "./dist/index.js",
|
|
89504
89504
|
types: "dist/index.d.ts",
|
|
@@ -89708,18 +89708,18 @@ var package_default = {
|
|
|
89708
89708
|
typescript: "^6.0.3"
|
|
89709
89709
|
},
|
|
89710
89710
|
optionalDependencies: {
|
|
89711
|
-
"oh-my-opencode-darwin-arm64": "4.16.
|
|
89712
|
-
"oh-my-opencode-darwin-x64": "4.16.
|
|
89713
|
-
"oh-my-opencode-darwin-x64-baseline": "4.16.
|
|
89714
|
-
"oh-my-opencode-linux-arm64": "4.16.
|
|
89715
|
-
"oh-my-opencode-linux-arm64-musl": "4.16.
|
|
89716
|
-
"oh-my-opencode-linux-x64": "4.16.
|
|
89717
|
-
"oh-my-opencode-linux-x64-baseline": "4.16.
|
|
89718
|
-
"oh-my-opencode-linux-x64-musl": "4.16.
|
|
89719
|
-
"oh-my-opencode-linux-x64-musl-baseline": "4.16.
|
|
89720
|
-
"oh-my-opencode-windows-arm64": "4.16.
|
|
89721
|
-
"oh-my-opencode-windows-x64": "4.16.
|
|
89722
|
-
"oh-my-opencode-windows-x64-baseline": "4.16.
|
|
89711
|
+
"oh-my-opencode-darwin-arm64": "4.16.2",
|
|
89712
|
+
"oh-my-opencode-darwin-x64": "4.16.2",
|
|
89713
|
+
"oh-my-opencode-darwin-x64-baseline": "4.16.2",
|
|
89714
|
+
"oh-my-opencode-linux-arm64": "4.16.2",
|
|
89715
|
+
"oh-my-opencode-linux-arm64-musl": "4.16.2",
|
|
89716
|
+
"oh-my-opencode-linux-x64": "4.16.2",
|
|
89717
|
+
"oh-my-opencode-linux-x64-baseline": "4.16.2",
|
|
89718
|
+
"oh-my-opencode-linux-x64-musl": "4.16.2",
|
|
89719
|
+
"oh-my-opencode-linux-x64-musl-baseline": "4.16.2",
|
|
89720
|
+
"oh-my-opencode-windows-arm64": "4.16.2",
|
|
89721
|
+
"oh-my-opencode-windows-x64": "4.16.2",
|
|
89722
|
+
"oh-my-opencode-windows-x64-baseline": "4.16.2"
|
|
89723
89723
|
},
|
|
89724
89724
|
overrides: {
|
|
89725
89725
|
"@earendil-works/pi-agent-core": "0.80.3",
|
|
@@ -103679,13 +103679,15 @@ This command includes examples for the OpenCode harness. In Codex, do not call O
|
|
|
103679
103679
|
|
|
103680
103680
|
| OpenCode example | Codex tool to use |
|
|
103681
103681
|
| --- | --- |
|
|
103682
|
-
| \`call_omo_agent(subagent_type="explore", ...)\` | \`spawn_agent(
|
|
103683
|
-
| \`call_omo_agent(subagent_type="librarian", ...)\` | \`spawn_agent(
|
|
103684
|
-
| \`task(subagent_type="plan", ...)\` | \`spawn_agent(
|
|
103682
|
+
| \`call_omo_agent(subagent_type="explore", ...)\` | \`multi_agent_v1.spawn_agent({"message":"TASK: act as an explorer. ...","agent_type":"explorer","fork_context":false})\` |
|
|
103683
|
+
| \`call_omo_agent(subagent_type="librarian", ...)\` | \`multi_agent_v1.spawn_agent({"message":"TASK: act as a librarian. ...","agent_type":"librarian","fork_context":false})\` |
|
|
103684
|
+
| \`task(subagent_type="plan", ...)\` | \`multi_agent_v1.spawn_agent({"message":"TASK: act as a planning agent. ...","agent_type":"plan","fork_context":false})\` |
|
|
103685
103685
|
| \`task(subagent_type="oracle", ...)\` | \`multi_agent_v1.spawn_agent({"message":"TASK: act as a rigorous reviewer. ...","agent_type":"lazycodex-gate-reviewer","fork_context":false})\` |
|
|
103686
|
-
| \`task(category="...", ...)\` | \`spawn_agent(
|
|
103687
|
-
| \`background_output(task_id="...")\` | \`wait_agent(...)\`
|
|
103688
|
-
| \`team_*(...)\` | Use Codex native subagents
|
|
103686
|
+
| \`task(category="...", ...)\` | \`multi_agent_v1.spawn_agent({"message":"TASK: act as an implementation or QA worker. ...","fork_context":false})\` |
|
|
103687
|
+
| \`background_output(task_id="...")\` | \`multi_agent_v1.wait_agent(...)\` for mailbox signals |
|
|
103688
|
+
| \`team_*(...)\` | Use Codex native subagents via \`multi_agent_v1.spawn_agent\`, \`multi_agent_v1.send_input\`, \`multi_agent_v1.wait_agent\`, and \`multi_agent_v1.close_agent\` |
|
|
103689
|
+
|
|
103690
|
+
Codex exposes ONE of two subagent tool surfaces per session; check your own tool list and route accordingly. If \`multi_agent_v1.*\` tools exist, use the table above as written. If instead a flat \`spawn_agent\` with a required \`task_name\` exists (\`multi_agent_v2\`), rewrite every \`multi_agent_v1.*\` example: \`multi_agent_v1.spawn_agent({...,"fork_context":false})\` becomes \`spawn_agent({"task_name":"<lowercase_digits_underscores>","message":...,"agent_type":...,"fork_turns":"none"})\` (\`"all"\` only when full parent history is truly required); \`send_input\` becomes \`send_message\`; do not call \`close_agent\`/\`resume_agent\` (finished agents end on their own; \`followup_task\` re-tasks one, \`interrupt_agent\` stops one); \`wait_agent\` takes only \`timeout_ms\` and returns on any child mailbox activity. \`agent_type\` works the same on both surfaces. If a code block below conflicts with this section, this section wins.
|
|
103689
103691
|
|
|
103690
103692
|
When translating \`load_skills=[...]\`, include the requested skill names in the spawned agent's \`message\`. If a code block below conflicts with this section, this section wins.
|
|
103691
103693
|
|
|
@@ -104649,13 +104651,15 @@ This command includes examples for the OpenCode harness. In Codex, do not call O
|
|
|
104649
104651
|
|
|
104650
104652
|
| OpenCode example | Codex tool to use |
|
|
104651
104653
|
| --- | --- |
|
|
104652
|
-
| \`call_omo_agent(subagent_type="explore", ...)\` | \`spawn_agent(
|
|
104653
|
-
| \`call_omo_agent(subagent_type="librarian", ...)\` | \`spawn_agent(
|
|
104654
|
-
| \`task(subagent_type="plan", ...)\` | \`spawn_agent(
|
|
104654
|
+
| \`call_omo_agent(subagent_type="explore", ...)\` | \`multi_agent_v1.spawn_agent({"message":"TASK: act as an explorer. ...","agent_type":"explorer","fork_context":false})\` |
|
|
104655
|
+
| \`call_omo_agent(subagent_type="librarian", ...)\` | \`multi_agent_v1.spawn_agent({"message":"TASK: act as a librarian. ...","agent_type":"librarian","fork_context":false})\` |
|
|
104656
|
+
| \`task(subagent_type="plan", ...)\` | \`multi_agent_v1.spawn_agent({"message":"TASK: act as a planning agent. ...","agent_type":"plan","fork_context":false})\` |
|
|
104655
104657
|
| \`task(subagent_type="oracle", ...)\` | \`multi_agent_v1.spawn_agent({"message":"TASK: act as a rigorous reviewer. ...","agent_type":"lazycodex-gate-reviewer","fork_context":false})\` |
|
|
104656
|
-
| \`task(category="...", ...)\` | \`spawn_agent(
|
|
104657
|
-
| \`background_output(task_id="...")\` | \`wait_agent(...)\`
|
|
104658
|
-
| \`team_*(...)\` | Use Codex native subagents
|
|
104658
|
+
| \`task(category="...", ...)\` | \`multi_agent_v1.spawn_agent({"message":"TASK: act as an implementation or QA worker. ...","fork_context":false})\` |
|
|
104659
|
+
| \`background_output(task_id="...")\` | \`multi_agent_v1.wait_agent(...)\` for mailbox signals |
|
|
104660
|
+
| \`team_*(...)\` | Use Codex native subagents via \`multi_agent_v1.spawn_agent\`, \`multi_agent_v1.send_input\`, \`multi_agent_v1.wait_agent\`, and \`multi_agent_v1.close_agent\` |
|
|
104661
|
+
|
|
104662
|
+
Codex exposes ONE of two subagent tool surfaces per session; check your own tool list and route accordingly. If \`multi_agent_v1.*\` tools exist, use the table above as written. If instead a flat \`spawn_agent\` with a required \`task_name\` exists (\`multi_agent_v2\`), rewrite every \`multi_agent_v1.*\` example: \`multi_agent_v1.spawn_agent({...,"fork_context":false})\` becomes \`spawn_agent({"task_name":"<lowercase_digits_underscores>","message":...,"agent_type":...,"fork_turns":"none"})\` (\`"all"\` only when full parent history is truly required); \`send_input\` becomes \`send_message\`; do not call \`close_agent\`/\`resume_agent\` (finished agents end on their own; \`followup_task\` re-tasks one, \`interrupt_agent\` stops one); \`wait_agent\` takes only \`timeout_ms\` and returns on any child mailbox activity. \`agent_type\` works the same on both surfaces. If a code block below conflicts with this section, this section wins.
|
|
104659
104663
|
|
|
104660
104664
|
When translating \`load_skills=[...]\`, include the requested skill names in the spawned agent's \`message\`. If a code block below conflicts with this section, this section wins.
|
|
104661
104665
|
|
|
@@ -127737,6 +127741,7 @@ function cloneParentWake(wake) {
|
|
|
127737
127741
|
promptContext,
|
|
127738
127742
|
notifications: [...wake.notifications],
|
|
127739
127743
|
shouldReply: wake.shouldReply,
|
|
127744
|
+
...wake.queuedAt !== undefined ? { queuedAt: wake.queuedAt } : {},
|
|
127740
127745
|
...wake.dispatchedAt !== undefined ? { dispatchedAt: wake.dispatchedAt } : {},
|
|
127741
127746
|
...wake.noReplyAdmittedAt !== undefined ? { noReplyAdmittedAt: wake.noReplyAdmittedAt } : {},
|
|
127742
127747
|
...wake.toolCallDeferralStartedAt !== undefined ? { toolCallDeferralStartedAt: wake.toolCallDeferralStartedAt } : {},
|
|
@@ -128079,7 +128084,7 @@ async function sendParentWakePrompt(input) {
|
|
|
128079
128084
|
...input.emptyAssistantTurnRetry ? { dedupeKey: createEmptyAssistantTurnRetryDedupeKey(input.latestWake) } : {},
|
|
128080
128085
|
settleMs: 0,
|
|
128081
128086
|
queueBehavior: "defer",
|
|
128082
|
-
checkStatus: input.forceNoReply !== true,
|
|
128087
|
+
checkStatus: input.forceNoReply !== true && input.skipPromptGateStatusCheck !== true,
|
|
128083
128088
|
checkToolState: input.forceNoReply !== true && !input.toolWaitDecision.skipPromptGateToolStateCheck,
|
|
128084
128089
|
input: {
|
|
128085
128090
|
path: { id: input.sessionID },
|
|
@@ -128162,6 +128167,8 @@ function createTrackedDispatchedWake(wake, forceNoReply) {
|
|
|
128162
128167
|
}
|
|
128163
128168
|
|
|
128164
128169
|
// packages/omo-opencode/src/features/background-agent/parent-wake-flush-runner.ts
|
|
128170
|
+
var PENDING_PARENT_WAKE_MAX_ACTIVE_DEFER_MS = 60000;
|
|
128171
|
+
|
|
128165
128172
|
class ParentWakeFlushRunner {
|
|
128166
128173
|
deps;
|
|
128167
128174
|
constructor(deps) {
|
|
@@ -128191,14 +128198,16 @@ class ParentWakeFlushRunner {
|
|
|
128191
128198
|
if (await this.dropAdmittedWakeConsumedByParent(sessionID, latestWake)) {
|
|
128192
128199
|
return;
|
|
128193
128200
|
}
|
|
128194
|
-
|
|
128201
|
+
const emptyAssistantTurnRetry = latestWake.allowEmptyAssistantTurnRetry === true;
|
|
128202
|
+
const forceDispatchAfterActiveDefer = sessionActive && this.shouldForceDispatchAfterActiveDefer(latestWake);
|
|
128203
|
+
if (sessionActive && !forceDispatchAfterActiveDefer) {
|
|
128195
128204
|
this.schedulePendingParentWakeFlush(sessionID);
|
|
128196
128205
|
log2("[background-agent] Deferred parent wake because parent session is active:", {
|
|
128197
128206
|
sessionID
|
|
128198
128207
|
});
|
|
128199
128208
|
return;
|
|
128200
128209
|
}
|
|
128201
|
-
if (this.hasRecentParentSessionActivity(sessionID)) {
|
|
128210
|
+
if (!forceDispatchAfterActiveDefer && this.hasRecentParentSessionActivity(sessionID)) {
|
|
128202
128211
|
if (this.deferReplyWakeWhileUnsafe(sessionID, latestWake)) {
|
|
128203
128212
|
return;
|
|
128204
128213
|
}
|
|
@@ -128216,7 +128225,6 @@ class ParentWakeFlushRunner {
|
|
|
128216
128225
|
}
|
|
128217
128226
|
return;
|
|
128218
128227
|
}
|
|
128219
|
-
const emptyAssistantTurnRetry = latestWake.allowEmptyAssistantTurnRetry === true;
|
|
128220
128228
|
const toolWaitDecision = await this.shouldDeferParentWakeForSessionHistory(sessionID, latestWake);
|
|
128221
128229
|
if (toolWaitDecision.defer) {
|
|
128222
128230
|
if (this.deferReplyWakeWhileUnsafe(sessionID, latestWake)) {
|
|
@@ -128269,8 +128277,15 @@ class ParentWakeFlushRunner {
|
|
|
128269
128277
|
}
|
|
128270
128278
|
await this.sendParentWakePrompt(sessionID, latestWake, {
|
|
128271
128279
|
emptyAssistantTurnRetry,
|
|
128272
|
-
toolWaitDecision: finalToolWaitDecision
|
|
128280
|
+
toolWaitDecision: finalToolWaitDecision,
|
|
128281
|
+
...forceDispatchAfterActiveDefer ? { skipPromptGateStatusCheck: true } : {}
|
|
128273
128282
|
});
|
|
128283
|
+
if (forceDispatchAfterActiveDefer) {
|
|
128284
|
+
log2("[background-agent] Sent parent wake after active-session defer ceiling:", {
|
|
128285
|
+
sessionID,
|
|
128286
|
+
queuedAgeMs: this.getQueuedAgeMs(latestWake)
|
|
128287
|
+
});
|
|
128288
|
+
}
|
|
128274
128289
|
}
|
|
128275
128290
|
schedulePendingParentWakeFlush(sessionID, delayMs) {
|
|
128276
128291
|
this.deps.pendingQueue.scheduleFlush(sessionID, async () => {
|
|
@@ -128322,6 +128337,7 @@ class ParentWakeFlushRunner {
|
|
|
128322
128337
|
latestWake,
|
|
128323
128338
|
...options.forceNoReply !== undefined ? { forceNoReply: options.forceNoReply } : {},
|
|
128324
128339
|
...options.retainPendingWake !== undefined ? { retainPendingWake: options.retainPendingWake } : {},
|
|
128340
|
+
...options.skipPromptGateStatusCheck !== undefined ? { skipPromptGateStatusCheck: options.skipPromptGateStatusCheck } : {},
|
|
128325
128341
|
emptyAssistantTurnRetry: options.emptyAssistantTurnRetry,
|
|
128326
128342
|
toolWaitDecision: options.toolWaitDecision,
|
|
128327
128343
|
getDispatchedWake: () => this.deps.dispatchedTracker.getWake(sessionID),
|
|
@@ -128337,6 +128353,12 @@ class ParentWakeFlushRunner {
|
|
|
128337
128353
|
async isSessionActive(sessionID) {
|
|
128338
128354
|
return isSessionActive(this.deps.notifierDeps.client, sessionID);
|
|
128339
128355
|
}
|
|
128356
|
+
shouldForceDispatchAfterActiveDefer(wake) {
|
|
128357
|
+
return wake.shouldReply && this.getQueuedAgeMs(wake) >= PENDING_PARENT_WAKE_MAX_ACTIVE_DEFER_MS;
|
|
128358
|
+
}
|
|
128359
|
+
getQueuedAgeMs(wake) {
|
|
128360
|
+
return Date.now() - (wake.queuedAt ?? Date.now());
|
|
128361
|
+
}
|
|
128340
128362
|
hasRecentParentSessionActivity(sessionID) {
|
|
128341
128363
|
return this.deps.sessionInspector.hasRecentActivity(sessionID);
|
|
128342
128364
|
}
|
|
@@ -128381,9 +128403,11 @@ class ParentWakePendingQueue {
|
|
|
128381
128403
|
this.pendingParentWakes.delete(sessionID);
|
|
128382
128404
|
}
|
|
128383
128405
|
queueWake(sessionID, notification, promptContext, shouldReply) {
|
|
128406
|
+
const now = Date.now();
|
|
128384
128407
|
const resolvedPromptContext = resolveParentWakePromptContext(promptContext);
|
|
128385
128408
|
const pendingWake = this.pendingParentWakes.get(sessionID);
|
|
128386
128409
|
if (pendingWake) {
|
|
128410
|
+
pendingWake.queuedAt ??= now;
|
|
128387
128411
|
const mergedNotifications = mergeParentWakeNotifications(pendingWake.notifications, notification);
|
|
128388
128412
|
const notificationsChanged = mergedNotifications.length !== pendingWake.notifications.length || mergedNotifications.some((merged, index) => merged !== pendingWake.notifications[index]);
|
|
128389
128413
|
pendingWake.notifications = mergedNotifications;
|
|
@@ -128398,12 +128422,17 @@ class ParentWakePendingQueue {
|
|
|
128398
128422
|
this.pendingParentWakes.set(sessionID, {
|
|
128399
128423
|
promptContext: resolvedPromptContext,
|
|
128400
128424
|
notifications: [notification],
|
|
128401
|
-
shouldReply
|
|
128425
|
+
shouldReply,
|
|
128426
|
+
queuedAt: now
|
|
128402
128427
|
});
|
|
128403
128428
|
}
|
|
128404
128429
|
requeueWake(sessionID, latestWake) {
|
|
128430
|
+
const now = Date.now();
|
|
128405
128431
|
const pendingWake = this.pendingParentWakes.get(sessionID);
|
|
128406
128432
|
if (pendingWake) {
|
|
128433
|
+
const existingQueuedAt = pendingWake.queuedAt ?? now;
|
|
128434
|
+
const latestQueuedAt = latestWake.queuedAt ?? now;
|
|
128435
|
+
pendingWake.queuedAt = Math.min(existingQueuedAt, latestQueuedAt);
|
|
128407
128436
|
pendingWake.notifications = pendingWake.notifications.reduce((notifications, notification) => mergeParentWakeNotifications(notifications, notification), [...latestWake.notifications]);
|
|
128408
128437
|
pendingWake.shouldReply = pendingWake.shouldReply || latestWake.shouldReply;
|
|
128409
128438
|
pendingWake.promptContext = latestWake.promptContext;
|
|
@@ -128416,7 +128445,9 @@ class ParentWakePendingQueue {
|
|
|
128416
128445
|
}
|
|
128417
128446
|
return;
|
|
128418
128447
|
}
|
|
128419
|
-
|
|
128448
|
+
const clonedWake = cloneParentWake(latestWake);
|
|
128449
|
+
clonedWake.queuedAt ??= now;
|
|
128450
|
+
this.pendingParentWakes.set(sessionID, clonedWake);
|
|
128420
128451
|
}
|
|
128421
128452
|
scheduleFlush(sessionID, operation, delayMs) {
|
|
128422
128453
|
if (this.pendingParentWakeTimers.has(sessionID)) {
|
|
@@ -16,7 +16,9 @@ This skill may include examples copied from the OpenCode harness. In Codex, do n
|
|
|
16
16
|
| `background_output(task_id="...")` | `multi_agent_v1.wait_agent(...)` for mailbox signals |
|
|
17
17
|
| `team_*(...)` | Use Codex native subagents via `multi_agent_v1.spawn_agent`, `multi_agent_v1.send_input`, `multi_agent_v1.wait_agent`, and `multi_agent_v1.close_agent` |
|
|
18
18
|
|
|
19
|
-
Role-specific behavior must be described in a self-contained `message`. Use `fork_context: false` to start the child with only the initial prompt (no parent history); use `fork_context: true` only when full parent history is truly required. Include any required conversation context, files, diffs, constraints, and requested skill names directly in the spawned agent's `message`. OMO installs these selectable agent roles into `~/.codex/agents/`: `explorer`, `librarian`, `plan`, `momus`, `metis`, `lazycodex-code-reviewer`, `lazycodex-qa-executor`, and `lazycodex-gate-reviewer` — pass the matching name as `agent_type` so the child gets that role's model and instructions.
|
|
19
|
+
Role-specific behavior must be described in a self-contained `message`. Use `fork_context: false` to start the child with only the initial prompt (no parent history); use `fork_context: true` only when full parent history is truly required. Include any required conversation context, files, diffs, constraints, and requested skill names directly in the spawned agent's `message`. OMO installs these selectable agent roles into `~/.codex/agents/`: `explorer`, `librarian`, `plan`, `momus`, `metis`, `lazycodex-code-reviewer`, `lazycodex-qa-executor`, and `lazycodex-gate-reviewer` — pass the matching name as `agent_type` so the child gets that role's model and instructions. If the spawn tool exposes no `agent_type` parameter, omit it and describe the role inside `message`. If a code block below conflicts with this section, this section wins.
|
|
20
|
+
|
|
21
|
+
Codex exposes ONE of two subagent tool surfaces per session; check your own tool list and route accordingly. If `multi_agent_v1.*` tools exist, use the table above as written. If instead a flat `spawn_agent` with a required `task_name` exists (`multi_agent_v2`), rewrite every `multi_agent_v1.*` example: `multi_agent_v1.spawn_agent({...,"fork_context":false})` becomes `spawn_agent({"task_name":"<lowercase_digits_underscores>","message":...,"agent_type":...,"fork_turns":"none"})` (`"all"` only when full parent history is truly required); `send_input` becomes `send_message`; do not call `close_agent`/`resume_agent` (finished agents end on their own; `followup_task` re-tasks one, `interrupt_agent` stops one); `wait_agent` takes only `timeout_ms` and returns on any child mailbox activity. `agent_type` works the same on both surfaces. If a code block below conflicts with this section, this section wins.
|
|
20
22
|
|
|
21
23
|
For work likely to exceed one wait cycle, require the child to send `WORKING: <task> - <current phase>` before long passes and `BLOCKED: <reason>` only when progress stops. A `multi_agent_v1.wait_agent` timeout only means no new mailbox update arrived. Treat a running child as alive. Fallback only when the child is completed without the deliverable, ack-only after followup, explicitly `BLOCKED:`, or no longer running.
|
|
22
24
|
|
|
@@ -20,6 +20,8 @@ Translate any OpenCode-only tool name in an inherited example to its Codex equiv
|
|
|
20
20
|
|
|
21
21
|
When translating `load_skills=[...]`, name the skills inside the spawned agent's `message`. If a code block below conflicts with this section, this section wins.
|
|
22
22
|
|
|
23
|
+
Codex exposes ONE of two subagent tool surfaces per session; check your own tool list and route accordingly. If `multi_agent_v1.*` tools exist, use the table above as written. If instead a flat `spawn_agent` with a required `task_name` exists (`multi_agent_v2`), rewrite every `multi_agent_v1.*` example: `multi_agent_v1.spawn_agent({...,"fork_context":false})` becomes `spawn_agent({"task_name":"<lowercase_digits_underscores>","message":...,"agent_type":...,"fork_turns":"none"})` (`"all"` only when full parent history is truly required); `send_input` becomes `send_message`; do not call `close_agent`/`resume_agent` (finished agents end on their own; `followup_task` re-tasks one, `interrupt_agent` stops one); `wait_agent` takes only `timeout_ms` and returns on any child mailbox activity. `agent_type` works the same on both surfaces. If a code block below conflicts with this section, this section wins.
|
|
24
|
+
|
|
23
25
|
## Codex Subagent Reliability
|
|
24
26
|
|
|
25
27
|
Every `multi_agent_v1.spawn_agent` message is a self-contained executable assignment: `TASK: <imperative assignment>`, then `DELIVERABLE`, `SCOPE`, and `VERIFY`, with role instructions inside `message`. Use `fork_context: false` unless full history is truly required; paste only the context the child needs.
|
|
@@ -17,7 +17,9 @@ This skill may include examples copied from the OpenCode harness. In Codex, do n
|
|
|
17
17
|
| `background_output(task_id="...")` | `multi_agent_v1.wait_agent(...)` for mailbox signals |
|
|
18
18
|
| `team_*(...)` | Use Codex native subagents via `multi_agent_v1.spawn_agent`, `multi_agent_v1.send_input`, `multi_agent_v1.wait_agent`, and `multi_agent_v1.close_agent` |
|
|
19
19
|
|
|
20
|
-
Role-specific behavior must be described in a self-contained `message`. Use `fork_context: false` to start the child with only the initial prompt (no parent history); use `fork_context: true` only when full parent history is truly required. Include any required conversation context, files, diffs, constraints, and requested skill names directly in the spawned agent's `message`. OMO installs these selectable agent roles into `~/.codex/agents/`: `explorer`, `librarian`, `plan`, `momus`, `metis`, `lazycodex-code-reviewer`, `lazycodex-qa-executor`, and `lazycodex-gate-reviewer` — pass the matching name as `agent_type` so the child gets that role's model and instructions.
|
|
20
|
+
Role-specific behavior must be described in a self-contained `message`. Use `fork_context: false` to start the child with only the initial prompt (no parent history); use `fork_context: true` only when full parent history is truly required. Include any required conversation context, files, diffs, constraints, and requested skill names directly in the spawned agent's `message`. OMO installs these selectable agent roles into `~/.codex/agents/`: `explorer`, `librarian`, `plan`, `momus`, `metis`, `lazycodex-code-reviewer`, `lazycodex-qa-executor`, and `lazycodex-gate-reviewer` — pass the matching name as `agent_type` so the child gets that role's model and instructions. If the spawn tool exposes no `agent_type` parameter, omit it and describe the role inside `message`. If a code block below conflicts with this section, this section wins.
|
|
21
|
+
|
|
22
|
+
Codex exposes ONE of two subagent tool surfaces per session; check your own tool list and route accordingly. If `multi_agent_v1.*` tools exist, use the table above as written. If instead a flat `spawn_agent` with a required `task_name` exists (`multi_agent_v2`), rewrite every `multi_agent_v1.*` example: `multi_agent_v1.spawn_agent({...,"fork_context":false})` becomes `spawn_agent({"task_name":"<lowercase_digits_underscores>","message":...,"agent_type":...,"fork_turns":"none"})` (`"all"` only when full parent history is truly required); `send_input` becomes `send_message`; do not call `close_agent`/`resume_agent` (finished agents end on their own; `followup_task` re-tasks one, `interrupt_agent` stops one); `wait_agent` takes only `timeout_ms` and returns on any child mailbox activity. `agent_type` works the same on both surfaces. If a code block below conflicts with this section, this section wins.
|
|
21
23
|
|
|
22
24
|
For work likely to exceed one wait cycle, require the child to send `WORKING: <task> - <current phase>` before long passes and `BLOCKED: <reason>` only when progress stops. A `multi_agent_v1.wait_agent` timeout only means no new mailbox update arrived. Treat a running child as alive. Fallback only when the child is completed without the deliverable, ack-only after followup, explicitly `BLOCKED:`, or no longer running.
|
|
23
25
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "oh-my-opencode",
|
|
3
|
-
"version": "4.16.
|
|
3
|
+
"version": "4.16.2",
|
|
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",
|
|
@@ -210,18 +210,18 @@
|
|
|
210
210
|
"typescript": "^6.0.3"
|
|
211
211
|
},
|
|
212
212
|
"optionalDependencies": {
|
|
213
|
-
"oh-my-opencode-darwin-arm64": "4.16.
|
|
214
|
-
"oh-my-opencode-darwin-x64": "4.16.
|
|
215
|
-
"oh-my-opencode-darwin-x64-baseline": "4.16.
|
|
216
|
-
"oh-my-opencode-linux-arm64": "4.16.
|
|
217
|
-
"oh-my-opencode-linux-arm64-musl": "4.16.
|
|
218
|
-
"oh-my-opencode-linux-x64": "4.16.
|
|
219
|
-
"oh-my-opencode-linux-x64-baseline": "4.16.
|
|
220
|
-
"oh-my-opencode-linux-x64-musl": "4.16.
|
|
221
|
-
"oh-my-opencode-linux-x64-musl-baseline": "4.16.
|
|
222
|
-
"oh-my-opencode-windows-arm64": "4.16.
|
|
223
|
-
"oh-my-opencode-windows-x64": "4.16.
|
|
224
|
-
"oh-my-opencode-windows-x64-baseline": "4.16.
|
|
213
|
+
"oh-my-opencode-darwin-arm64": "4.16.2",
|
|
214
|
+
"oh-my-opencode-darwin-x64": "4.16.2",
|
|
215
|
+
"oh-my-opencode-darwin-x64-baseline": "4.16.2",
|
|
216
|
+
"oh-my-opencode-linux-arm64": "4.16.2",
|
|
217
|
+
"oh-my-opencode-linux-arm64-musl": "4.16.2",
|
|
218
|
+
"oh-my-opencode-linux-x64": "4.16.2",
|
|
219
|
+
"oh-my-opencode-linux-x64-baseline": "4.16.2",
|
|
220
|
+
"oh-my-opencode-linux-x64-musl": "4.16.2",
|
|
221
|
+
"oh-my-opencode-linux-x64-musl-baseline": "4.16.2",
|
|
222
|
+
"oh-my-opencode-windows-arm64": "4.16.2",
|
|
223
|
+
"oh-my-opencode-windows-x64": "4.16.2",
|
|
224
|
+
"oh-my-opencode-windows-x64-baseline": "4.16.2"
|
|
225
225
|
},
|
|
226
226
|
"overrides": {
|
|
227
227
|
"@earendil-works/pi-agent-core": "0.80.3",
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"command": "node \"${PLUGIN_ROOT}/components/bootstrap/dist/cli.js\" hook session-start",
|
|
9
9
|
"commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\bootstrap.ps1\"",
|
|
10
10
|
"timeout": 30,
|
|
11
|
-
"statusMessage": "(OmO 4.16.
|
|
11
|
+
"statusMessage": "(OmO 4.16.2) Checking Bootstrap Provisioning"
|
|
12
12
|
}
|
|
13
13
|
]
|
|
14
14
|
}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"type": "command",
|
|
9
9
|
"command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook pre-tool-use",
|
|
10
10
|
"timeout": 5,
|
|
11
|
-
"statusMessage": "(OmO 4.16.
|
|
11
|
+
"statusMessage": "(OmO 4.16.2) Recommending Git Bash MCP"
|
|
12
12
|
}
|
|
13
13
|
]
|
|
14
14
|
}
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"type": "command",
|
|
21
21
|
"command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-compact",
|
|
22
22
|
"timeout": 5,
|
|
23
|
-
"statusMessage": "(OmO 4.16.
|
|
23
|
+
"statusMessage": "(OmO 4.16.2) Resetting Git Bash MCP Reminder"
|
|
24
24
|
}
|
|
25
25
|
]
|
|
26
26
|
}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"type": "command",
|
|
9
9
|
"command": "node \"${PLUGIN_ROOT}/components/lazycodex-executor-verify/dist/cli.js\" hook subagent-stop",
|
|
10
10
|
"timeout": 10,
|
|
11
|
-
"statusMessage": "(OmO 4.16.
|
|
11
|
+
"statusMessage": "(OmO 4.16.2) Verifying LazyCodex Executor Evidence"
|
|
12
12
|
}
|
|
13
13
|
]
|
|
14
14
|
}
|