oh-my-opencode 4.18.2 → 4.19.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/command/omomomo.md +1 -1
- package/.agents/skills/omomomo/SKILL.md +1 -1
- package/.opencode/command/omomomo.md +1 -1
- package/README.ja.md +6 -6
- package/README.ko.md +6 -6
- package/README.md +8 -8
- package/README.ru.md +6 -6
- package/README.zh-cn.md +6 -6
- package/dist/agents/atlas/agent.d.ts +7 -6
- package/dist/agents/gpt-prompt-identity.d.ts +3 -0
- package/dist/agents/sisyphus/gpt-5-5.d.ts +1 -1
- package/dist/agents/sisyphus/gpt-task-system-guide.d.ts +1 -0
- package/dist/agents/sisyphus/index.d.ts +5 -0
- package/dist/agents/sisyphus/kimi-k3.d.ts +19 -0
- package/dist/agents/sisyphus-agent-factory.d.ts +1 -1
- package/dist/agents/sisyphus-junior/agent.d.ts +8 -4
- package/dist/agents/sisyphus-junior/gpt-5-5.d.ts +2 -2
- package/dist/agents/sisyphus-junior/index.d.ts +2 -0
- package/dist/agents/sisyphus-junior/kimi-k3.d.ts +12 -0
- package/dist/agents/types.d.ts +2 -2
- package/dist/cli/index.js +781 -215
- package/dist/cli-node/index.js +781 -215
- package/dist/config/index.d.ts +1 -1
- package/dist/config/schema/agent-overrides.d.ts +48 -48
- package/dist/config/schema/browser-automation.d.ts +1 -0
- package/dist/config/schema/categories.d.ts +6 -6
- package/dist/config/schema/codegraph.d.ts +2 -0
- package/dist/config/schema/commands.d.ts +1 -3
- package/dist/config/schema/default-mode.d.ts +1 -1
- package/dist/config/schema/fallback-models.d.ts +5 -5
- package/dist/config/schema/goal.d.ts +7 -0
- package/dist/config/schema/hooks.d.ts +1 -1
- package/dist/config/schema/oh-my-opencode-config.d.ts +56 -58
- package/dist/config/schema/ralph-loop.d.ts +1 -1
- package/dist/config/schema.d.ts +1 -1
- package/dist/create-hooks.d.ts +1 -1
- package/dist/features/builtin-commands/templates/goal.d.ts +1 -0
- package/dist/features/builtin-commands/templates/stop-continuation.d.ts +1 -1
- package/dist/features/builtin-commands/types.d.ts +1 -1
- package/dist/hooks/auto-slash-command/executor.d.ts +1 -0
- package/dist/hooks/codegraph-bootstrap/hook.d.ts +3 -2
- package/dist/hooks/goal/command-arguments.d.ts +13 -0
- package/dist/hooks/goal/controller.d.ts +26 -0
- package/dist/hooks/goal/index.d.ts +23 -0
- package/dist/hooks/goal/prompt.d.ts +3 -0
- package/dist/hooks/goal/store.d.ts +8 -0
- package/dist/hooks/goal/tools.d.ts +10 -0
- package/dist/hooks/goal/types.d.ts +93 -0
- package/dist/hooks/goal/validation.d.ts +4 -0
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/keyword-detector/hook.d.ts +1 -2
- package/dist/hooks/ralph-loop/types.d.ts +1 -1
- package/dist/hooks/sisyphus-junior-notepad/constants.d.ts +1 -1
- package/dist/hooks/start-work/notepad-scaffold.d.ts +10 -0
- package/dist/index.js +5398 -5109
- package/dist/oh-my-opencode.schema.json +34 -19
- package/dist/plugin/chat-message/loop-commands.d.ts +1 -1
- package/dist/plugin/chat-message/types.d.ts +23 -10
- package/dist/plugin/hooks/create-core-hooks.d.ts +1 -1
- package/dist/plugin/hooks/create-session-hooks.d.ts +3 -2
- package/dist/plugin/hooks/create-transform-hooks.d.ts +0 -2
- package/dist/plugin/stop-continuation.d.ts +2 -2
- package/dist/shared/omo-process-sweep.d.ts +18 -0
- package/dist/shared/system-directive.d.ts +0 -1
- package/dist/skills/programming/scripts/typescript/check-no-excuse-rules.test.ts +87 -0
- package/dist/skills/programming/scripts/typescript/check-no-excuse-rules.ts +35 -5
- package/dist/skills/ulw-plan/SKILL.md +31 -8
- package/dist/skills/ulw-plan/references/full-workflow.md +117 -6
- package/dist/skills/ulw-plan/scripts/scaffold-plan.mjs +46 -10
- package/dist/skills/ulw-research/SKILL.md +3 -3
- package/dist/testing/create-plugin-module.d.ts +1 -0
- package/dist/tools/delegate-task/types.d.ts +0 -1
- package/dist/tui.js +138 -80
- package/package.json +14 -14
- package/packages/git-bash-mcp/dist/cli.js +54 -8
- package/packages/lsp-core/src/lsp/client-diagnostics-freshness.integration.test.ts +60 -0
- package/packages/lsp-core/src/lsp/client.ts +14 -1
- package/packages/lsp-core/src/lsp/fixtures/diagnostics-freshness-contract-probe.ts +2 -2
- package/packages/lsp-core/src/mcp.ts +9 -0
- package/packages/lsp-daemon/dist/cli.js +319 -51
- package/packages/lsp-daemon/dist/client.js +136 -48
- package/packages/lsp-daemon/dist/daemon-client.d.ts +0 -10
- package/packages/lsp-daemon/dist/daemon-client.js +4 -34
- package/packages/lsp-daemon/dist/daemon-failure-result.d.ts +3 -0
- package/packages/lsp-daemon/dist/daemon-failure-result.js +38 -0
- package/packages/lsp-daemon/dist/daemon-request-error.d.ts +14 -0
- package/packages/lsp-daemon/dist/daemon-request-error.js +26 -0
- package/packages/lsp-daemon/dist/daemon-server.js +5 -1
- package/packages/lsp-daemon/dist/index.js +137 -48
- package/packages/lsp-daemon/dist/proxy.d.ts +2 -0
- package/packages/lsp-daemon/dist/proxy.js +1 -0
- package/packages/lsp-daemon/dist/version-reap.d.ts +26 -0
- package/packages/lsp-daemon/dist/version-reap.js +182 -0
- package/packages/lsp-tools-mcp/dist/cli.js +61 -10
- package/packages/lsp-tools-mcp/dist/lsp/manager.js +6 -1
- package/packages/lsp-tools-mcp/dist/mcp.js +61 -10
- package/packages/lsp-tools-mcp/dist/tools.js +6 -1
- package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
- package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +416 -25
- 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/bootstrap/src/setup.ts +22 -2
- package/packages/omo-codex/plugin/components/codegraph/AGENTS.md +7 -6
- package/packages/omo-codex/plugin/components/codegraph/dist/cli.js +638 -267
- package/packages/omo-codex/plugin/components/codegraph/dist/serve.js +178 -89
- package/packages/omo-codex/plugin/components/codegraph/package.json +2 -2
- package/packages/omo-codex/plugin/components/codegraph/src/hook-types.ts +3 -1
- package/packages/omo-codex/plugin/components/codegraph/src/hook.ts +3 -1
- package/packages/omo-codex/plugin/components/codegraph/src/mcp-bridge.ts +98 -32
- package/packages/omo-codex/plugin/components/codegraph/src/mcp-unavailable.ts +5 -0
- package/packages/omo-codex/plugin/components/codegraph/src/serve.ts +15 -6
- package/packages/omo-codex/plugin/components/codegraph/src/session-start-worker.ts +6 -2
- package/packages/omo-codex/plugin/components/codegraph/src/sweep-cli.ts +1 -0
- package/packages/omo-codex/plugin/components/codegraph/test/hook-exclusion.test.ts +1 -1
- package/packages/omo-codex/plugin/components/codegraph/test/hook-store-upgrade.test.ts +148 -0
- package/packages/omo-codex/plugin/components/codegraph/test/mcp-bridge-fixtures.ts +31 -2
- package/packages/omo-codex/plugin/components/codegraph/test/package-runtime.test.ts +1 -1
- package/packages/omo-codex/plugin/components/codegraph/test/serve-mcp-bridge-lifecycle.test.ts +65 -1
- package/packages/omo-codex/plugin/components/codegraph/test/serve-mcp-bridge.test.ts +3 -7
- package/packages/omo-codex/plugin/components/codegraph/test/serve-mcp-facade.test.ts +1 -1
- package/packages/omo-codex/plugin/components/codegraph/test/serve-provision.test.ts +57 -3
- package/packages/omo-codex/plugin/components/codegraph/test/serve-unavailable.test.ts +41 -0
- package/packages/omo-codex/plugin/components/codegraph/test/serve.test.ts +109 -8
- package/packages/omo-codex/plugin/components/codegraph/test/session-start-node-support.test.ts +2 -2
- package/packages/omo-codex/plugin/components/codegraph/test/session-start-worker-flow.test.ts +43 -0
- 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/AGENTS.md +1 -0
- package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +3 -3
- package/packages/omo-codex/plugin/components/lsp/dist/cli.js +80 -40
- 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/dist/cli.js +11 -0
- 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/rules/src/post-compact-budget.ts +11 -0
- package/packages/omo-codex/plugin/components/rules/test/post-compact-budget.test.ts +60 -0
- package/packages/omo-codex/plugin/components/start-work-continuation/AGENTS.md +8 -0
- package/packages/omo-codex/plugin/components/start-work-continuation/dist/cli.js +147 -60
- 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/src/boulder-reader.ts +3 -71
- package/packages/omo-codex/plugin/components/start-work-continuation/src/plan-checklist.ts +171 -0
- package/packages/omo-codex/plugin/components/start-work-continuation/test/boulder-reader.test.ts +198 -23
- package/packages/omo-codex/plugin/components/start-work-continuation/test/cli.test.ts +4 -3
- package/packages/omo-codex/plugin/components/start-work-continuation/test/codex-hook.test.ts +6 -5
- package/packages/omo-codex/plugin/components/start-work-continuation/test/fixtures/plan-scaffold.md +15 -0
- 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/telemetry/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/AGENTS.md +10 -10
- package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-clone-fidelity-reviewer.toml +2 -2
- package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-code-reviewer.toml +2 -2
- package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-gate-reviewer.toml +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-worker-high.toml +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-worker-medium.toml +2 -2
- package/packages/omo-codex/plugin/components/ultrawork/agents/momus.toml +3 -3
- package/packages/omo-codex/plugin/components/ultrawork/agents/plan.toml +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/dist/cli.js +1 -1
- 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/ulw-plan/SKILL.md +31 -8
- package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/full-workflow.md +117 -6
- package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/scripts/scaffold-plan.mjs +46 -10
- package/packages/omo-codex/plugin/components/ultrawork/src/codex-hook.ts +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/test/codex-hook-trigger-policy.test.ts +42 -0
- package/packages/omo-codex/plugin/components/ulw-loop/README.md +6 -4
- package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-continuation.d.ts +21 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-continuation.js +64 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint.js +15 -2
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-arg-parser.js +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-commands.js +2 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-output.d.ts +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-output.js +3 -3
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-steering.d.ts +3 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-steering.js +85 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-subcommands.d.ts +0 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-subcommands.js +13 -33
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +998 -593
- package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-instruction.js +1 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/constants.d.ts +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/constants.js +2 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/domain-types.d.ts +6 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/goal-status.d.ts +1 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/goal-status.js +3 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-crud.d.ts +1 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-crud.js +4 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-io.d.ts +1 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-io.js +10 -2
- package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-verdicts.js +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/steering-batch.d.ts +15 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/steering-batch.js +84 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/steering-mutations.d.ts +5 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/steering-mutations.js +81 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/steering.js +7 -59
- package/packages/omo-codex/plugin/components/ulw-loop/dist/stop-resume-hook.js +12 -4
- package/packages/omo-codex/plugin/components/ulw-loop/dist/validation-batch.d.ts +9 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/validation-batch.js +122 -0
- package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +4 -4
- package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +8 -6
- package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-continuation.ts +84 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint.ts +13 -2
- package/packages/omo-codex/plugin/components/ulw-loop/src/cli-arg-parser.ts +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/src/cli-commands.ts +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/src/cli-output.ts +3 -3
- package/packages/omo-codex/plugin/components/ulw-loop/src/cli-steering.ts +49 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/cli-subcommands.ts +13 -45
- package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-instruction.ts +1 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/constants.ts +2 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/domain-types.ts +7 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/goal-status.ts +4 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/plan-crud.ts +4 -1
- package/packages/omo-codex/plugin/components/ulw-loop/src/plan-io.ts +20 -2
- package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-verdicts.ts +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/src/steering-batch.ts +125 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/steering-mutations.ts +59 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/steering.ts +6 -58
- package/packages/omo-codex/plugin/components/ulw-loop/src/stop-resume-hook.ts +12 -4
- package/packages/omo-codex/plugin/components/ulw-loop/src/validation-batch.ts +122 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint-continuation.test.ts +76 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-checkpoint-continuation.test.ts +111 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-steering-batch.test.ts +67 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-validation-batch.test.ts +57 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/paths.test.ts +1 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/steering-batch.test.ts +152 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/stop-resume-hook.test.ts +29 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/validation-batch-checkpoint.test.ts +147 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/validation-batch.test.ts +73 -0
- 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-guarding-ulw-loop-spawns.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 +2 -2
- 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 +2 -2
- 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 +2 -2
- package/packages/omo-codex/plugin/hooks/stop-checking-start-work-continuation.json +1 -1
- package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.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-lock.json +41 -41
- package/packages/omo-codex/plugin/package.json +1 -1
- package/packages/omo-codex/plugin/scripts/migrate-codex-config/multi-agent-v2-guard.mjs +32 -28
- package/packages/omo-codex/plugin/scripts/migrate-codex-config/subagent-limit-guard.mjs +17 -45
- package/packages/omo-codex/plugin/scripts/migrate-codex-config/toml-section-editor.mjs +455 -0
- package/packages/omo-codex/plugin/scripts/sync-skills.mjs +3 -18
- package/packages/omo-codex/plugin/shared/test/config-loader.test.ts +43 -0
- package/packages/omo-codex/plugin/skills/programming/scripts/typescript/check-no-excuse-rules.ts +35 -5
- package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +8 -6
- package/packages/omo-codex/plugin/skills/ulw-plan/SKILL.md +31 -8
- package/packages/omo-codex/plugin/skills/ulw-plan/references/full-workflow.md +117 -6
- package/packages/omo-codex/plugin/skills/ulw-plan/scripts/scaffold-plan.mjs +46 -10
- package/packages/omo-codex/plugin/test/aggregate-agents.test.mjs +11 -11
- package/packages/omo-codex/plugin/test/aggregate-hooks.test.mjs +26 -0
- package/packages/omo-codex/plugin/test/bootstrap-setup.test.mjs +41 -0
- package/packages/omo-codex/plugin/test/lcx-bug-skills.test.mjs +2 -2
- package/packages/omo-codex/plugin/test/migrate-codex-config.test.mjs +6 -6
- package/packages/omo-codex/plugin/test/multi-agent-v2-regression.test.mjs +3 -3
- package/packages/omo-codex/plugin/test/scaffold-plan.test.mjs +62 -0
- package/packages/omo-codex/plugin/test/subagent-limit-migration.test.mjs +271 -14
- package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +3 -18
- package/packages/omo-codex/plugin/test/sync-skills.test.mjs +0 -5
- package/packages/omo-codex/plugin/test/ulw-plan-review-state-contract.test.mjs +293 -0
- package/packages/omo-codex/scripts/install-config.test.mjs +10 -10
- package/packages/omo-codex/scripts/install-dist/install-local.mjs +401 -22
- package/packages/omo-codex/scripts/install-generated-bundle.test.mjs +39 -2
- package/packages/omo-codex/scripts/install-marketplace-cache.test.mjs +4 -1
- package/packages/shared-skills/skills/programming/scripts/typescript/check-no-excuse-rules.test.ts +87 -0
- package/packages/shared-skills/skills/programming/scripts/typescript/check-no-excuse-rules.ts +35 -5
- package/packages/shared-skills/skills/ulw-plan/SKILL.md +31 -8
- package/packages/shared-skills/skills/ulw-plan/references/full-workflow.md +117 -6
- package/packages/shared-skills/skills/ulw-plan/scripts/scaffold-plan.mjs +46 -10
- package/packages/shared-skills/skills/ulw-research/SKILL.md +3 -3
- package/dist/features/builtin-commands/templates/ralph-loop.d.ts +0 -3
- package/dist/skills/ultraresearch/SKILL.md +0 -10
- package/packages/shared-skills/skills/lcx-contribute-bug-fix/SKILL.md +0 -273
- package/packages/shared-skills/skills/lcx-contribute-bug-fix/agents/openai.yaml +0 -12
- package/packages/shared-skills/skills/lcx-contribute-bug-fix/scripts/create-pr-body.mjs +0 -107
- package/packages/shared-skills/skills/lcx-doctor/SKILL.md +0 -128
- package/packages/shared-skills/skills/lcx-doctor/agents/openai.yaml +0 -11
- package/packages/shared-skills/skills/lcx-report-bug/SKILL.md +0 -268
- package/packages/shared-skills/skills/lcx-report-bug/agents/openai.yaml +0 -11
- package/packages/shared-skills/skills/ultraresearch/SKILL.md +0 -10
- /package/{dist → packages/omo-codex/plugin/components/lcx}/skills/lcx-contribute-bug-fix/SKILL.md +0 -0
- /package/{dist → packages/omo-codex/plugin/components/lcx}/skills/lcx-contribute-bug-fix/agents/openai.yaml +0 -0
- /package/{dist → packages/omo-codex/plugin/components/lcx}/skills/lcx-contribute-bug-fix/scripts/create-pr-body.mjs +0 -0
- /package/{dist → packages/omo-codex/plugin/components/lcx}/skills/lcx-doctor/SKILL.md +0 -0
- /package/{dist → packages/omo-codex/plugin/components/lcx}/skills/lcx-doctor/agents/openai.yaml +0 -0
- /package/{dist → packages/omo-codex/plugin/components/lcx}/skills/lcx-report-bug/SKILL.md +0 -0
- /package/{dist → packages/omo-codex/plugin/components/lcx}/skills/lcx-report-bug/agents/openai.yaml +0 -0
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.
|
|
2148
|
+
version: "4.19.1",
|
|
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",
|
|
@@ -2255,7 +2255,7 @@ var init_package = __esm(() => {
|
|
|
2255
2255
|
"install:codex-dev": "bun run script/build-codex-install.ts && bun run script/install-codex-dev.ts",
|
|
2256
2256
|
"build:codex-plugin": "npm --prefix packages/omo-codex/plugin ci && bun run --cwd packages/omo-codex/plugin build",
|
|
2257
2257
|
"build:senpi-plugin": "bun run build:lsp-daemon && bun run build:senpi-plugin:stage",
|
|
2258
|
-
"build:senpi-plugin:stage": "node packages/omo-senpi/plugin/scripts/stage-lsp-daemon-runtime.mjs && node packages/omo-senpi/plugin/scripts/build-extension.mjs && node packages/omo-senpi/plugin/scripts/sync-skills.mjs && node packages/omo-senpi/plugin/scripts/embed-directive.mjs --check && node packages/omo-senpi/plugin/scripts/build-install.mjs",
|
|
2258
|
+
"build:senpi-plugin:stage": "bun run build:materialize-frontend && node packages/omo-senpi/plugin/scripts/stage-lsp-daemon-runtime.mjs && node packages/omo-senpi/plugin/scripts/build-extension.mjs && node packages/omo-senpi/plugin/scripts/sync-skills.mjs && node packages/omo-senpi/plugin/scripts/embed-directive.mjs --check && node packages/omo-senpi/plugin/scripts/build-install.mjs",
|
|
2259
2259
|
"build:materialize-frontend": "node packages/omo-codex/plugin/scripts/materialize-shared-upstreams.mjs --strict",
|
|
2260
2260
|
"build:shared-skills-assets": "bun run build:materialize-frontend && rm -rf dist/skills && cp -R packages/shared-skills/skills dist/skills",
|
|
2261
2261
|
"build:lsp-tools-mcp": "npm --prefix packages/lsp-tools-mcp ci && npm --prefix packages/lsp-tools-mcp run build",
|
|
@@ -2357,18 +2357,18 @@ var init_package = __esm(() => {
|
|
|
2357
2357
|
typescript: "^6.0.3"
|
|
2358
2358
|
},
|
|
2359
2359
|
optionalDependencies: {
|
|
2360
|
-
"oh-my-opencode-darwin-arm64": "4.
|
|
2361
|
-
"oh-my-opencode-darwin-x64": "4.
|
|
2362
|
-
"oh-my-opencode-darwin-x64-baseline": "4.
|
|
2363
|
-
"oh-my-opencode-linux-arm64": "4.
|
|
2364
|
-
"oh-my-opencode-linux-arm64-musl": "4.
|
|
2365
|
-
"oh-my-opencode-linux-x64": "4.
|
|
2366
|
-
"oh-my-opencode-linux-x64-baseline": "4.
|
|
2367
|
-
"oh-my-opencode-linux-x64-musl": "4.
|
|
2368
|
-
"oh-my-opencode-linux-x64-musl-baseline": "4.
|
|
2369
|
-
"oh-my-opencode-windows-arm64": "4.
|
|
2370
|
-
"oh-my-opencode-windows-x64": "4.
|
|
2371
|
-
"oh-my-opencode-windows-x64-baseline": "4.
|
|
2360
|
+
"oh-my-opencode-darwin-arm64": "4.19.1",
|
|
2361
|
+
"oh-my-opencode-darwin-x64": "4.19.1",
|
|
2362
|
+
"oh-my-opencode-darwin-x64-baseline": "4.19.1",
|
|
2363
|
+
"oh-my-opencode-linux-arm64": "4.19.1",
|
|
2364
|
+
"oh-my-opencode-linux-arm64-musl": "4.19.1",
|
|
2365
|
+
"oh-my-opencode-linux-x64": "4.19.1",
|
|
2366
|
+
"oh-my-opencode-linux-x64-baseline": "4.19.1",
|
|
2367
|
+
"oh-my-opencode-linux-x64-musl": "4.19.1",
|
|
2368
|
+
"oh-my-opencode-linux-x64-musl-baseline": "4.19.1",
|
|
2369
|
+
"oh-my-opencode-windows-arm64": "4.19.1",
|
|
2370
|
+
"oh-my-opencode-windows-x64": "4.19.1",
|
|
2371
|
+
"oh-my-opencode-windows-x64-baseline": "4.19.1"
|
|
2372
2372
|
},
|
|
2373
2373
|
overrides: {
|
|
2374
2374
|
"@earendil-works/pi-agent-core": "0.80.3",
|
|
@@ -7426,6 +7426,7 @@ var init_env = __esm(() => {
|
|
|
7426
7426
|
SAFE_CODEGRAPH_RUNTIME_ENV_KEYS = new Set([
|
|
7427
7427
|
"CODEGRAPH_ALLOW_UNSAFE_NODE",
|
|
7428
7428
|
"CODEGRAPH_BIN",
|
|
7429
|
+
"CODEGRAPH_DAEMON_IDLE_TIMEOUT_MS",
|
|
7429
7430
|
"CODEGRAPH_FAKE_LOG",
|
|
7430
7431
|
"CODEGRAPH_NO_DAEMON",
|
|
7431
7432
|
"CODEGRAPH_NODE_BIN",
|
|
@@ -7441,6 +7442,9 @@ var init_workspace = () => {};
|
|
|
7441
7442
|
// packages/utils/src/codegraph/guidance.ts
|
|
7442
7443
|
var init_guidance = () => {};
|
|
7443
7444
|
|
|
7445
|
+
// packages/utils/src/codegraph/manifest.ts
|
|
7446
|
+
var init_manifest = () => {};
|
|
7447
|
+
|
|
7444
7448
|
// packages/utils/src/codegraph/node-support.ts
|
|
7445
7449
|
function evaluateCodegraphNodeSupport(options = {}) {
|
|
7446
7450
|
const nodeVersion = options.nodeVersion ?? process.versions.node;
|
|
@@ -7569,6 +7573,7 @@ var init_resolve2 = __esm(() => {
|
|
|
7569
7573
|
var init_codegraph = __esm(() => {
|
|
7570
7574
|
init_env();
|
|
7571
7575
|
init_guidance();
|
|
7576
|
+
init_manifest();
|
|
7572
7577
|
init_provision();
|
|
7573
7578
|
init_process_sweep();
|
|
7574
7579
|
init_resolve2();
|
|
@@ -7747,7 +7752,7 @@ function migrateModelVersions(configs, appliedMigrations) {
|
|
|
7747
7752
|
var MODEL_VERSION_MAP, CURRENT_USER_SELECTABLE_MODELS;
|
|
7748
7753
|
var init_model_versions = __esm(() => {
|
|
7749
7754
|
MODEL_VERSION_MAP = {
|
|
7750
|
-
"anthropic/claude-opus-4-4": "anthropic/claude-opus-4-
|
|
7755
|
+
"anthropic/claude-opus-4-4": "anthropic/claude-opus-4-8"
|
|
7751
7756
|
};
|
|
7752
7757
|
CURRENT_USER_SELECTABLE_MODELS = new Set([
|
|
7753
7758
|
"anthropic/claude-opus-4-5",
|
|
@@ -9195,25 +9200,25 @@ var init_agent_model_requirements = __esm(() => {
|
|
|
9195
9200
|
fallbackChain: [
|
|
9196
9201
|
{
|
|
9197
9202
|
providers: ["anthropic", "github-copilot", "opencode", "vercel"],
|
|
9198
|
-
model: "claude-opus-4-
|
|
9203
|
+
model: "claude-opus-4-8",
|
|
9199
9204
|
variant: "max"
|
|
9200
9205
|
},
|
|
9201
|
-
{ providers: ["opencode-go", "vercel"], model: "kimi-k2.6" },
|
|
9202
|
-
{ providers: ["kimi-for-coding"], model: "k2p5" },
|
|
9203
9206
|
{
|
|
9204
9207
|
providers: [
|
|
9208
|
+
"opencode-go",
|
|
9209
|
+
"kimi-for-coding",
|
|
9210
|
+
"moonshotai",
|
|
9205
9211
|
"opencode",
|
|
9212
|
+
"vercel",
|
|
9206
9213
|
"bailian-coding-plan",
|
|
9207
|
-
"moonshotai",
|
|
9208
9214
|
"moonshotai-cn",
|
|
9209
9215
|
"firmware",
|
|
9210
9216
|
"ollama-cloud",
|
|
9211
|
-
"aihubmix"
|
|
9212
|
-
"vercel"
|
|
9217
|
+
"aihubmix"
|
|
9213
9218
|
],
|
|
9214
|
-
model: "kimi-
|
|
9219
|
+
model: "kimi-k3"
|
|
9215
9220
|
},
|
|
9216
|
-
{ providers: ["openai", "github-copilot", "opencode", "vercel"], model: "gpt-5.
|
|
9221
|
+
{ providers: ["openai", "github-copilot", "opencode", "vercel"], model: "gpt-5.6-sol", variant: "medium" },
|
|
9217
9222
|
{ providers: ["zai-coding-plan", "opencode", "bailian-coding-plan", "vercel"], model: "glm-5" },
|
|
9218
9223
|
{ providers: ["opencode"], model: "big-pickle" }
|
|
9219
9224
|
],
|
|
@@ -9222,13 +9227,8 @@ var init_agent_model_requirements = __esm(() => {
|
|
|
9222
9227
|
hephaestus: {
|
|
9223
9228
|
fallbackChain: [
|
|
9224
9229
|
{
|
|
9225
|
-
providers: ["openai", "github-copilot", "vercel"],
|
|
9230
|
+
providers: ["openai", "github-copilot", "vercel", "opencode"],
|
|
9226
9231
|
model: "gpt-5.6-sol",
|
|
9227
|
-
variant: "high"
|
|
9228
|
-
},
|
|
9229
|
-
{
|
|
9230
|
-
providers: ["openai", "github-copilot", "opencode", "vercel"],
|
|
9231
|
-
model: "gpt-5.5",
|
|
9232
9232
|
variant: "medium"
|
|
9233
9233
|
}
|
|
9234
9234
|
],
|
|
@@ -9238,8 +9238,13 @@ var init_agent_model_requirements = __esm(() => {
|
|
|
9238
9238
|
oracle: {
|
|
9239
9239
|
fallbackChain: [
|
|
9240
9240
|
{
|
|
9241
|
-
providers: ["openai", "
|
|
9242
|
-
model: "gpt-5.
|
|
9241
|
+
providers: ["openai", "opencode", "vercel"],
|
|
9242
|
+
model: "gpt-5.6-sol",
|
|
9243
|
+
variant: "xhigh"
|
|
9244
|
+
},
|
|
9245
|
+
{
|
|
9246
|
+
providers: ["github-copilot"],
|
|
9247
|
+
model: "gpt-5.6-sol",
|
|
9243
9248
|
variant: "high"
|
|
9244
9249
|
},
|
|
9245
9250
|
{
|
|
@@ -9249,7 +9254,7 @@ var init_agent_model_requirements = __esm(() => {
|
|
|
9249
9254
|
},
|
|
9250
9255
|
{
|
|
9251
9256
|
providers: ["anthropic", "github-copilot", "opencode", "vercel"],
|
|
9252
|
-
model: "claude-opus-4-
|
|
9257
|
+
model: "claude-opus-4-8",
|
|
9253
9258
|
variant: "max"
|
|
9254
9259
|
},
|
|
9255
9260
|
{ providers: ["opencode-go", "vercel"], model: "glm-5.2" }
|
|
@@ -9281,8 +9286,8 @@ var init_agent_model_requirements = __esm(() => {
|
|
|
9281
9286
|
},
|
|
9282
9287
|
"multimodal-looker": {
|
|
9283
9288
|
fallbackChain: [
|
|
9284
|
-
{ providers: ["openai", "opencode", "vercel"], model: "gpt-5.
|
|
9285
|
-
{ providers: ["opencode-go", "vercel"], model: "kimi-
|
|
9289
|
+
{ providers: ["openai", "opencode", "vercel"], model: "gpt-5.6-sol", variant: "low" },
|
|
9290
|
+
{ providers: ["opencode-go", "vercel"], model: "kimi-k3" },
|
|
9286
9291
|
{ providers: ["zai-coding-plan", "vercel"], model: "glm-4.6v" },
|
|
9287
9292
|
{ providers: ["openai", "github-copilot", "opencode", "vercel"], model: "gpt-5-nano" }
|
|
9288
9293
|
]
|
|
@@ -9291,12 +9296,12 @@ var init_agent_model_requirements = __esm(() => {
|
|
|
9291
9296
|
fallbackChain: [
|
|
9292
9297
|
{
|
|
9293
9298
|
providers: ["anthropic", "github-copilot", "opencode", "vercel"],
|
|
9294
|
-
model: "claude-opus-4-
|
|
9299
|
+
model: "claude-opus-4-8",
|
|
9295
9300
|
variant: "max"
|
|
9296
9301
|
},
|
|
9297
9302
|
{
|
|
9298
9303
|
providers: ["openai", "github-copilot", "opencode", "vercel"],
|
|
9299
|
-
model: "gpt-5.
|
|
9304
|
+
model: "gpt-5.6-sol",
|
|
9300
9305
|
variant: "high"
|
|
9301
9306
|
},
|
|
9302
9307
|
{ providers: ["opencode-go", "vercel"], model: "glm-5.2" },
|
|
@@ -9314,38 +9319,43 @@ var init_agent_model_requirements = __esm(() => {
|
|
|
9314
9319
|
},
|
|
9315
9320
|
{
|
|
9316
9321
|
providers: ["anthropic", "github-copilot", "opencode", "vercel"],
|
|
9317
|
-
model: "claude-opus-4-
|
|
9322
|
+
model: "claude-opus-4-8",
|
|
9318
9323
|
variant: "max"
|
|
9319
9324
|
},
|
|
9320
9325
|
{
|
|
9321
9326
|
providers: ["openai", "github-copilot", "opencode", "vercel"],
|
|
9322
|
-
model: "gpt-5.
|
|
9323
|
-
variant: "
|
|
9327
|
+
model: "gpt-5.6-sol",
|
|
9328
|
+
variant: "medium"
|
|
9324
9329
|
},
|
|
9325
9330
|
{ providers: ["opencode-go", "vercel"], model: "glm-5.2" },
|
|
9326
|
-
{ providers: ["kimi-for-coding"], model: "
|
|
9331
|
+
{ providers: ["kimi-for-coding"], model: "kimi-k3" }
|
|
9327
9332
|
]
|
|
9328
9333
|
},
|
|
9329
9334
|
momus: {
|
|
9330
9335
|
fallbackChain: [
|
|
9331
9336
|
{
|
|
9332
9337
|
providers: ["openai", "vercel"],
|
|
9333
|
-
model: "gpt-5.6-
|
|
9334
|
-
variant: "
|
|
9338
|
+
model: "gpt-5.6-terra",
|
|
9339
|
+
variant: "high"
|
|
9335
9340
|
},
|
|
9336
9341
|
{
|
|
9337
9342
|
providers: ["github-copilot"],
|
|
9338
|
-
model: "gpt-5.6-
|
|
9343
|
+
model: "gpt-5.6-terra",
|
|
9339
9344
|
variant: "high"
|
|
9340
9345
|
},
|
|
9341
9346
|
{
|
|
9342
|
-
providers: ["openai", "
|
|
9343
|
-
model: "gpt-5.
|
|
9347
|
+
providers: ["openai", "opencode", "vercel"],
|
|
9348
|
+
model: "gpt-5.6-sol",
|
|
9344
9349
|
variant: "xhigh"
|
|
9345
9350
|
},
|
|
9351
|
+
{
|
|
9352
|
+
providers: ["github-copilot"],
|
|
9353
|
+
model: "gpt-5.6-sol",
|
|
9354
|
+
variant: "high"
|
|
9355
|
+
},
|
|
9346
9356
|
{
|
|
9347
9357
|
providers: ["anthropic", "github-copilot", "opencode", "vercel"],
|
|
9348
|
-
model: "claude-opus-4-
|
|
9358
|
+
model: "claude-opus-4-8",
|
|
9349
9359
|
variant: "max"
|
|
9350
9360
|
},
|
|
9351
9361
|
{
|
|
@@ -9359,10 +9369,10 @@ var init_agent_model_requirements = __esm(() => {
|
|
|
9359
9369
|
atlas: {
|
|
9360
9370
|
fallbackChain: [
|
|
9361
9371
|
{ providers: ["anthropic", "github-copilot", "opencode", "vercel"], model: "claude-sonnet-4-6" },
|
|
9362
|
-
{ providers: ["opencode-go", "vercel"], model: "kimi-
|
|
9372
|
+
{ providers: ["opencode-go", "vercel"], model: "kimi-k3" },
|
|
9363
9373
|
{
|
|
9364
9374
|
providers: ["openai", "github-copilot", "opencode", "vercel"],
|
|
9365
|
-
model: "gpt-5.
|
|
9375
|
+
model: "gpt-5.6-sol",
|
|
9366
9376
|
variant: "medium"
|
|
9367
9377
|
},
|
|
9368
9378
|
{ providers: ["opencode-go", "vercel"], model: "minimax-m3" },
|
|
@@ -9373,10 +9383,10 @@ var init_agent_model_requirements = __esm(() => {
|
|
|
9373
9383
|
"sisyphus-junior": {
|
|
9374
9384
|
fallbackChain: [
|
|
9375
9385
|
{ providers: ["anthropic", "github-copilot", "opencode", "vercel"], model: "claude-sonnet-4-6" },
|
|
9376
|
-
{ providers: ["opencode-go", "vercel"], model: "kimi-
|
|
9386
|
+
{ providers: ["opencode-go", "vercel"], model: "kimi-k3" },
|
|
9377
9387
|
{
|
|
9378
9388
|
providers: ["openai", "github-copilot", "opencode", "vercel"],
|
|
9379
|
-
model: "gpt-5.
|
|
9389
|
+
model: "gpt-5.6-sol",
|
|
9380
9390
|
variant: "medium"
|
|
9381
9391
|
},
|
|
9382
9392
|
{ providers: ["opencode-go", "vercel"], model: "minimax-m3" },
|
|
@@ -9402,11 +9412,11 @@ var init_category_model_requirements = __esm(() => {
|
|
|
9402
9412
|
{ providers: ["zai-coding-plan", "opencode", "bailian-coding-plan", "vercel"], model: "glm-5" },
|
|
9403
9413
|
{
|
|
9404
9414
|
providers: ["anthropic", "github-copilot", "opencode", "vercel"],
|
|
9405
|
-
model: "claude-opus-4-
|
|
9415
|
+
model: "claude-opus-4-8",
|
|
9406
9416
|
variant: "max"
|
|
9407
9417
|
},
|
|
9408
9418
|
{ providers: ["opencode-go", "vercel"], model: "glm-5.2" },
|
|
9409
|
-
{ providers: ["kimi-for-coding"], model: "
|
|
9419
|
+
{ providers: ["kimi-for-coding"], model: "kimi-k3" }
|
|
9410
9420
|
]
|
|
9411
9421
|
},
|
|
9412
9422
|
ultrabrain: {
|
|
@@ -9423,7 +9433,7 @@ var init_category_model_requirements = __esm(() => {
|
|
|
9423
9433
|
},
|
|
9424
9434
|
{
|
|
9425
9435
|
providers: ["openai", "opencode", "vercel"],
|
|
9426
|
-
model: "gpt-5.
|
|
9436
|
+
model: "gpt-5.6-sol",
|
|
9427
9437
|
variant: "xhigh"
|
|
9428
9438
|
},
|
|
9429
9439
|
{
|
|
@@ -9433,7 +9443,7 @@ var init_category_model_requirements = __esm(() => {
|
|
|
9433
9443
|
},
|
|
9434
9444
|
{
|
|
9435
9445
|
providers: ["anthropic", "github-copilot", "opencode", "vercel"],
|
|
9436
|
-
model: "claude-opus-4-
|
|
9446
|
+
model: "claude-opus-4-8",
|
|
9437
9447
|
variant: "max"
|
|
9438
9448
|
},
|
|
9439
9449
|
{ providers: ["opencode-go", "vercel"], model: "glm-5.2" }
|
|
@@ -9458,12 +9468,12 @@ var init_category_model_requirements = __esm(() => {
|
|
|
9458
9468
|
},
|
|
9459
9469
|
{
|
|
9460
9470
|
providers: ["openai", "github-copilot", "opencode", "vercel"],
|
|
9461
|
-
model: "gpt-5.
|
|
9471
|
+
model: "gpt-5.6-sol",
|
|
9462
9472
|
variant: "medium"
|
|
9463
9473
|
},
|
|
9464
9474
|
{
|
|
9465
9475
|
providers: ["anthropic", "github-copilot", "opencode", "vercel"],
|
|
9466
|
-
model: "claude-opus-4-
|
|
9476
|
+
model: "claude-opus-4-8",
|
|
9467
9477
|
variant: "max"
|
|
9468
9478
|
},
|
|
9469
9479
|
{
|
|
@@ -9471,7 +9481,7 @@ var init_category_model_requirements = __esm(() => {
|
|
|
9471
9481
|
model: "gemini-3.1-pro",
|
|
9472
9482
|
variant: "high"
|
|
9473
9483
|
},
|
|
9474
|
-
{ providers: ["opencode-go", "vercel"], model: "kimi-
|
|
9484
|
+
{ providers: ["opencode-go", "vercel"], model: "kimi-k3" },
|
|
9475
9485
|
{ providers: ["opencode-go", "vercel"], model: "glm-5.2" }
|
|
9476
9486
|
]
|
|
9477
9487
|
},
|
|
@@ -9484,11 +9494,11 @@ var init_category_model_requirements = __esm(() => {
|
|
|
9484
9494
|
},
|
|
9485
9495
|
{
|
|
9486
9496
|
providers: ["anthropic", "github-copilot", "opencode", "vercel"],
|
|
9487
|
-
model: "claude-opus-4-
|
|
9497
|
+
model: "claude-opus-4-8",
|
|
9488
9498
|
variant: "max"
|
|
9489
9499
|
},
|
|
9490
|
-
{ providers: ["openai", "github-copilot", "opencode", "vercel"], model: "gpt-5.
|
|
9491
|
-
{ providers: ["opencode-go", "vercel"], model: "kimi-
|
|
9500
|
+
{ providers: ["openai", "github-copilot", "opencode", "vercel"], model: "gpt-5.6-sol", variant: "high" },
|
|
9501
|
+
{ providers: ["opencode-go", "vercel"], model: "kimi-k3" },
|
|
9492
9502
|
{ providers: ["opencode-go", "vercel"], model: "glm-5.2" }
|
|
9493
9503
|
]
|
|
9494
9504
|
},
|
|
@@ -9530,10 +9540,10 @@ var init_category_model_requirements = __esm(() => {
|
|
|
9530
9540
|
},
|
|
9531
9541
|
{
|
|
9532
9542
|
providers: ["openai", "opencode", "vercel"],
|
|
9533
|
-
model: "gpt-5.
|
|
9543
|
+
model: "gpt-5.6-sol",
|
|
9534
9544
|
variant: "medium"
|
|
9535
9545
|
},
|
|
9536
|
-
{ providers: ["opencode-go", "vercel"], model: "kimi-
|
|
9546
|
+
{ providers: ["opencode-go", "vercel"], model: "kimi-k3" },
|
|
9537
9547
|
{
|
|
9538
9548
|
providers: ["google", "github-copilot", "opencode", "vercel"],
|
|
9539
9549
|
model: "gemini-3-flash"
|
|
@@ -9547,30 +9557,29 @@ var init_category_model_requirements = __esm(() => {
|
|
|
9547
9557
|
fallbackChain: [
|
|
9548
9558
|
{
|
|
9549
9559
|
providers: ["anthropic", "github-copilot", "opencode", "vercel"],
|
|
9550
|
-
model: "claude-opus-4-
|
|
9560
|
+
model: "claude-opus-4-8",
|
|
9551
9561
|
variant: "max"
|
|
9552
9562
|
},
|
|
9553
9563
|
{
|
|
9554
9564
|
providers: ["openai", "github-copilot", "opencode", "vercel"],
|
|
9555
|
-
model: "gpt-5.
|
|
9565
|
+
model: "gpt-5.6-sol",
|
|
9556
9566
|
variant: "high"
|
|
9557
9567
|
},
|
|
9558
9568
|
{ providers: ["zai-coding-plan", "opencode", "bailian-coding-plan", "vercel"], model: "glm-5" },
|
|
9559
|
-
{ providers: ["kimi-for-coding"], model: "
|
|
9569
|
+
{ providers: ["kimi-for-coding"], model: "kimi-k3" },
|
|
9560
9570
|
{ providers: ["opencode-go", "vercel"], model: "glm-5.2" },
|
|
9561
|
-
{ providers: ["opencode", "bailian-coding-plan", "vercel"], model: "kimi-k2.5" },
|
|
9562
9571
|
{
|
|
9563
9572
|
providers: [
|
|
9564
9573
|
"opencode",
|
|
9565
9574
|
"bailian-coding-plan",
|
|
9575
|
+
"vercel",
|
|
9566
9576
|
"moonshotai",
|
|
9567
9577
|
"moonshotai-cn",
|
|
9568
9578
|
"firmware",
|
|
9569
9579
|
"ollama-cloud",
|
|
9570
|
-
"aihubmix"
|
|
9571
|
-
"vercel"
|
|
9580
|
+
"aihubmix"
|
|
9572
9581
|
],
|
|
9573
|
-
model: "kimi-
|
|
9582
|
+
model: "kimi-k3"
|
|
9574
9583
|
}
|
|
9575
9584
|
]
|
|
9576
9585
|
},
|
|
@@ -9580,7 +9589,7 @@ var init_category_model_requirements = __esm(() => {
|
|
|
9580
9589
|
providers: ["google", "github-copilot", "opencode", "vercel"],
|
|
9581
9590
|
model: "gemini-3-flash"
|
|
9582
9591
|
},
|
|
9583
|
-
{ providers: ["opencode-go", "vercel"], model: "kimi-
|
|
9592
|
+
{ providers: ["opencode-go", "vercel"], model: "kimi-k3" },
|
|
9584
9593
|
{
|
|
9585
9594
|
providers: ["anthropic", "github-copilot", "opencode", "vercel"],
|
|
9586
9595
|
model: "claude-sonnet-4-6"
|
|
@@ -10005,7 +10014,7 @@ var CLAUDE_VERSION_DOT, GEMINI_31_PRO_PREVIEW, GEMINI_3_FLASH_PREVIEW;
|
|
|
10005
10014
|
var init_provider_model_id_transform = __esm(() => {
|
|
10006
10015
|
CLAUDE_VERSION_DOT = /claude-(\w+)-(\d+)-(\d+)/g;
|
|
10007
10016
|
GEMINI_31_PRO_PREVIEW = /gemini-3\.1-pro(?!-)/g;
|
|
10008
|
-
GEMINI_3_FLASH_PREVIEW = /gemini-3-flash(?!-)/g;
|
|
10017
|
+
GEMINI_3_FLASH_PREVIEW = /(?<!antigravity-)gemini-3-flash(?!-)/g;
|
|
10009
10018
|
});
|
|
10010
10019
|
|
|
10011
10020
|
// packages/model-core/src/known-variants.ts
|
|
@@ -10098,6 +10107,21 @@ var init_runtime_fallback_model = () => {};
|
|
|
10098
10107
|
var SUPPLEMENTAL_MODEL_CAPABILITIES;
|
|
10099
10108
|
var init_supplemental_entries = __esm(() => {
|
|
10100
10109
|
SUPPLEMENTAL_MODEL_CAPABILITIES = {
|
|
10110
|
+
"kimi-k3": {
|
|
10111
|
+
id: "kimi-k3",
|
|
10112
|
+
family: "kimi",
|
|
10113
|
+
reasoning: true,
|
|
10114
|
+
temperature: true,
|
|
10115
|
+
toolCall: true,
|
|
10116
|
+
modalities: {
|
|
10117
|
+
input: ["text", "image", "video"],
|
|
10118
|
+
output: ["text"]
|
|
10119
|
+
},
|
|
10120
|
+
limit: {
|
|
10121
|
+
context: 262144,
|
|
10122
|
+
output: 262144
|
|
10123
|
+
}
|
|
10124
|
+
},
|
|
10101
10125
|
"kimi-k2.6": {
|
|
10102
10126
|
id: "kimi-k2.6",
|
|
10103
10127
|
family: "kimi",
|
|
@@ -10785,7 +10809,7 @@ var init_anthropic_categories = __esm(() => {
|
|
|
10785
10809
|
ANTHROPIC_CATEGORIES = [
|
|
10786
10810
|
{
|
|
10787
10811
|
name: "unspecified-high",
|
|
10788
|
-
config: { model: "anthropic/claude-opus-4-
|
|
10812
|
+
config: { model: "anthropic/claude-opus-4-8", variant: "max" },
|
|
10789
10813
|
description: "Tasks that don't fit other categories, high effort required",
|
|
10790
10814
|
promptAppend: UNSPECIFIED_HIGH_CATEGORY_PROMPT_APPEND
|
|
10791
10815
|
}
|
|
@@ -10943,7 +10967,7 @@ var init_kimi_categories = __esm(() => {
|
|
|
10943
10967
|
KIMI_CATEGORIES = [
|
|
10944
10968
|
{
|
|
10945
10969
|
name: "writing",
|
|
10946
|
-
config: { model: "kimi-for-coding/
|
|
10970
|
+
config: { model: "kimi-for-coding/kimi-k3" },
|
|
10947
10971
|
description: "Documentation, prose, technical writing",
|
|
10948
10972
|
promptAppend: WRITING_CATEGORY_PROMPT_APPEND
|
|
10949
10973
|
}
|
|
@@ -65172,7 +65196,7 @@ var init_claude_model_mapper = __esm(() => {
|
|
|
65172
65196
|
init_model_normalization2();
|
|
65173
65197
|
CLAUDE_CODE_ALIAS_MAP = new Map([
|
|
65174
65198
|
["sonnet", `${ANTHROPIC_PREFIX}claude-sonnet-4-6`],
|
|
65175
|
-
["opus", `${ANTHROPIC_PREFIX}claude-opus-4-
|
|
65199
|
+
["opus", `${ANTHROPIC_PREFIX}claude-opus-4-8`],
|
|
65176
65200
|
["haiku", `${ANTHROPIC_PREFIX}claude-haiku-4-5`]
|
|
65177
65201
|
]);
|
|
65178
65202
|
});
|
|
@@ -65924,10 +65948,10 @@ var init_openai_only_model_catalog = __esm(() => {
|
|
|
65924
65948
|
librarian: { model: "openai/gpt-5.4-mini-fast" }
|
|
65925
65949
|
};
|
|
65926
65950
|
OPENAI_ONLY_CATEGORY_OVERRIDES = {
|
|
65927
|
-
artistry: { model: "openai/gpt-5.
|
|
65951
|
+
artistry: { model: "openai/gpt-5.6-sol", variant: "xhigh" },
|
|
65928
65952
|
quick: { model: "openai/gpt-5.4-mini" },
|
|
65929
|
-
"visual-engineering": { model: "openai/gpt-5.
|
|
65930
|
-
writing: { model: "openai/gpt-5.
|
|
65953
|
+
"visual-engineering": { model: "openai/gpt-5.6-sol", variant: "high" },
|
|
65954
|
+
writing: { model: "openai/gpt-5.6-sol", variant: "medium" }
|
|
65931
65955
|
};
|
|
65932
65956
|
});
|
|
65933
65957
|
|
|
@@ -72641,7 +72665,7 @@ var package_default2;
|
|
|
72641
72665
|
var init_package2 = __esm(() => {
|
|
72642
72666
|
package_default2 = {
|
|
72643
72667
|
name: "@oh-my-opencode/omo-codex",
|
|
72644
|
-
version: "4.
|
|
72668
|
+
version: "4.19.1",
|
|
72645
72669
|
type: "module",
|
|
72646
72670
|
private: true,
|
|
72647
72671
|
description: "Codex harness adapter for oh-my-openagent. Vendored Codex plugin namespace (omo) + TypeScript installer + telemetry.",
|
|
@@ -75029,6 +75053,7 @@ async function rewriteCachedPackageLocalFileDependencies(pluginRoot, sourceRoot)
|
|
|
75029
75053
|
const packageJsonPaths = [];
|
|
75030
75054
|
await collectPackageJsonPaths(pluginRoot, pluginRoot, packageJsonPaths);
|
|
75031
75055
|
const packageLock = await readPackageLock(pluginRoot);
|
|
75056
|
+
let rewroteAnyPackageJson = false;
|
|
75032
75057
|
for (const packageJsonPath of packageJsonPaths) {
|
|
75033
75058
|
const raw = await readFile5(packageJsonPath, "utf8");
|
|
75034
75059
|
const parsed = JSON.parse(raw);
|
|
@@ -75064,13 +75089,16 @@ async function rewriteCachedPackageLocalFileDependencies(pluginRoot, sourceRoot)
|
|
|
75064
75089
|
changed = true;
|
|
75065
75090
|
}
|
|
75066
75091
|
}
|
|
75067
|
-
if (changed)
|
|
75092
|
+
if (changed) {
|
|
75068
75093
|
await writeFile2(packageJsonPath, `${JSON.stringify(parsed, null, "\t")}
|
|
75069
75094
|
`);
|
|
75095
|
+
rewroteAnyPackageJson = true;
|
|
75096
|
+
}
|
|
75070
75097
|
}
|
|
75071
75098
|
if (packageLock.changed)
|
|
75072
75099
|
await writeFile2(packageLock.path, `${JSON.stringify(packageLock.value, null, "\t")}
|
|
75073
75100
|
`);
|
|
75101
|
+
return rewroteAnyPackageJson;
|
|
75074
75102
|
}
|
|
75075
75103
|
async function readPackageLock(pluginRoot) {
|
|
75076
75104
|
const path7 = join30(pluginRoot, "package-lock.json");
|
|
@@ -75376,10 +75404,11 @@ async function installCachedPlugin(input) {
|
|
|
75376
75404
|
await rm4(tempPath, { recursive: true, force: true });
|
|
75377
75405
|
try {
|
|
75378
75406
|
await copyDirectory(input.sourcePath, tempPath);
|
|
75379
|
-
await rewriteCachedPackageLocalFileDependencies(tempPath, input.sourcePath);
|
|
75407
|
+
const rewroteLocalFileDependencies = await rewriteCachedPackageLocalFileDependencies(tempPath, input.sourcePath);
|
|
75380
75408
|
await copyBundledMcpRuntimeDists({ pluginRoot: tempPath, sourceRoot: input.sourcePath });
|
|
75381
75409
|
await copyRootRuntimeDists({ pluginRoot: tempPath, sourcePath: input.sourcePath });
|
|
75382
|
-
|
|
75410
|
+
const installArgs = rewroteLocalFileDependencies ? ["install", "--omit=dev", "--no-audit", "--no-fund"] : ["ci", "--omit=dev"];
|
|
75411
|
+
await maybeRunNpmInstall(tempPath, input.runCommand, npmInstallEnv, installArgs);
|
|
75383
75412
|
await removeCachedManagedNpmBinShims(tempPath);
|
|
75384
75413
|
if (input.buildSource === false)
|
|
75385
75414
|
await maybeRunNpmSyncSkills(tempPath, input.runCommand, env2);
|
|
@@ -75683,9 +75712,16 @@ function findTomlSection(config, header) {
|
|
|
75683
75712
|
const lines = config.match(/[^\n]*\n?|$/g) ?? [];
|
|
75684
75713
|
let offset = 0;
|
|
75685
75714
|
let start = -1;
|
|
75715
|
+
let multilineQuote = null;
|
|
75686
75716
|
for (const line of lines) {
|
|
75687
75717
|
if (line.length === 0)
|
|
75688
75718
|
break;
|
|
75719
|
+
const multilineScan = scanTomlMultilineLine(line, multilineQuote);
|
|
75720
|
+
multilineQuote = multilineScan.nextQuote;
|
|
75721
|
+
if (multilineScan.wasInside) {
|
|
75722
|
+
offset += line.length;
|
|
75723
|
+
continue;
|
|
75724
|
+
}
|
|
75689
75725
|
const trimmed = line.trim();
|
|
75690
75726
|
if (start === -1) {
|
|
75691
75727
|
if (tomlTableHeaderMatches(trimmed, headerLine, targetHeaderPath))
|
|
@@ -75700,8 +75736,37 @@ function findTomlSection(config, header) {
|
|
|
75700
75736
|
return { start, end: config.length, text: config.slice(start) };
|
|
75701
75737
|
}
|
|
75702
75738
|
function replaceOrInsertSetting(config, section, key, value) {
|
|
75703
|
-
const
|
|
75704
|
-
|
|
75739
|
+
const targetPath = parseTomlDottedKey(key);
|
|
75740
|
+
if (!targetPath)
|
|
75741
|
+
return config;
|
|
75742
|
+
const lines = section.text.match(/[^\n]*\n?|$/g) ?? [];
|
|
75743
|
+
let offset = 0;
|
|
75744
|
+
let multilineQuote = null;
|
|
75745
|
+
for (const line of lines) {
|
|
75746
|
+
if (line.length === 0)
|
|
75747
|
+
break;
|
|
75748
|
+
const multilineScan = scanTomlMultilineLine(line, multilineQuote);
|
|
75749
|
+
multilineQuote = multilineScan.nextQuote;
|
|
75750
|
+
if (multilineScan.wasInside) {
|
|
75751
|
+
offset += line.length;
|
|
75752
|
+
continue;
|
|
75753
|
+
}
|
|
75754
|
+
const assignmentIndex = findUnquotedAssignment(line);
|
|
75755
|
+
if (assignmentIndex < 0) {
|
|
75756
|
+
offset += line.length;
|
|
75757
|
+
continue;
|
|
75758
|
+
}
|
|
75759
|
+
const settingPath = parseTomlDottedKey(line.slice(0, assignmentIndex).trim());
|
|
75760
|
+
if (!settingPath || !tomlPathMatches(settingPath, targetPath)) {
|
|
75761
|
+
offset += line.length;
|
|
75762
|
+
continue;
|
|
75763
|
+
}
|
|
75764
|
+
const replacement2 = replaceTomlAssignmentValue(line, assignmentIndex, value);
|
|
75765
|
+
const assignmentEnd = multilineScan.nextQuote ? findTomlMultilineValueEnd(section.text, offset + line.length, multilineScan.nextQuote) : offset + line.length;
|
|
75766
|
+
const sectionReplacement = section.text.slice(0, offset) + replacement2 + section.text.slice(assignmentEnd);
|
|
75767
|
+
return config.slice(0, section.start) + sectionReplacement + config.slice(section.end);
|
|
75768
|
+
}
|
|
75769
|
+
const replacement = insertSetting(section.text, key, value);
|
|
75705
75770
|
return config.slice(0, section.start) + replacement + config.slice(section.end);
|
|
75706
75771
|
}
|
|
75707
75772
|
function removeSetting(config, section, key) {
|
|
@@ -75721,6 +75786,50 @@ function replaceOrInsertRootSetting(config, key, value) {
|
|
|
75721
75786
|
return replacement;
|
|
75722
75787
|
return `${replacement.trimEnd()}
|
|
75723
75788
|
|
|
75789
|
+
${suffix.trimStart()}`;
|
|
75790
|
+
}
|
|
75791
|
+
function replaceOrInsertRootDottedSetting(config, keyPath, value) {
|
|
75792
|
+
const targetPath = parseTomlDottedKey(keyPath);
|
|
75793
|
+
if (!targetPath)
|
|
75794
|
+
return config;
|
|
75795
|
+
const lines = config.match(/[^\n]*\n?|$/g) ?? [];
|
|
75796
|
+
let offset = 0;
|
|
75797
|
+
let multilineQuote = null;
|
|
75798
|
+
for (const line of lines) {
|
|
75799
|
+
if (line.length === 0)
|
|
75800
|
+
break;
|
|
75801
|
+
const multilineScan = scanTomlMultilineLine(line, multilineQuote);
|
|
75802
|
+
multilineQuote = multilineScan.nextQuote;
|
|
75803
|
+
if (multilineScan.wasInside) {
|
|
75804
|
+
offset += line.length;
|
|
75805
|
+
continue;
|
|
75806
|
+
}
|
|
75807
|
+
if (isTomlTableHeaderLine(line))
|
|
75808
|
+
break;
|
|
75809
|
+
const assignmentIndex = findUnquotedAssignment(line);
|
|
75810
|
+
if (assignmentIndex < 0) {
|
|
75811
|
+
offset += line.length;
|
|
75812
|
+
continue;
|
|
75813
|
+
}
|
|
75814
|
+
const settingPath = parseTomlDottedKey(line.slice(0, assignmentIndex).trim());
|
|
75815
|
+
if (!settingPath || !tomlPathMatches(settingPath, targetPath)) {
|
|
75816
|
+
offset += line.length;
|
|
75817
|
+
continue;
|
|
75818
|
+
}
|
|
75819
|
+
const replacement2 = replaceTomlAssignmentValue(line, assignmentIndex, value);
|
|
75820
|
+
const assignmentEnd = multilineScan.nextQuote ? findTomlMultilineValueEnd(config, offset + line.length, multilineScan.nextQuote) : offset + line.length;
|
|
75821
|
+
return config.slice(0, offset) + replacement2 + config.slice(assignmentEnd);
|
|
75822
|
+
}
|
|
75823
|
+
const sectionStart = findFirstTableStart(config);
|
|
75824
|
+
const root = config.slice(0, sectionStart).trimEnd();
|
|
75825
|
+
const suffix = config.slice(sectionStart);
|
|
75826
|
+
const replacement = `${root}${root.length > 0 ? `
|
|
75827
|
+
` : ""}${keyPath} = ${value}
|
|
75828
|
+
`;
|
|
75829
|
+
if (suffix.length === 0)
|
|
75830
|
+
return replacement;
|
|
75831
|
+
return `${replacement.trimEnd()}
|
|
75832
|
+
|
|
75724
75833
|
${suffix.trimStart()}`;
|
|
75725
75834
|
}
|
|
75726
75835
|
function appendBlock(config, block) {
|
|
@@ -75733,9 +75842,16 @@ function appendBlock(config, block) {
|
|
|
75733
75842
|
function findFirstTableStart(config) {
|
|
75734
75843
|
const lines = config.match(/[^\n]*\n?|$/g) ?? [];
|
|
75735
75844
|
let offset = 0;
|
|
75845
|
+
let multilineQuote = null;
|
|
75736
75846
|
for (const line of lines) {
|
|
75737
75847
|
if (line.length === 0)
|
|
75738
75848
|
break;
|
|
75849
|
+
const multilineScan = scanTomlMultilineLine(line, multilineQuote);
|
|
75850
|
+
multilineQuote = multilineScan.nextQuote;
|
|
75851
|
+
if (multilineScan.wasInside) {
|
|
75852
|
+
offset += line.length;
|
|
75853
|
+
continue;
|
|
75854
|
+
}
|
|
75739
75855
|
if (isTomlTableHeaderLine(line))
|
|
75740
75856
|
return offset;
|
|
75741
75857
|
offset += line.length;
|
|
@@ -75773,6 +75889,131 @@ function isTomlTableHeaderLine(line) {
|
|
|
75773
75889
|
const normalizedLine = stripUnquotedInlineComment(line).trim();
|
|
75774
75890
|
return normalizedLine.startsWith("[") && normalizedLine.endsWith("]");
|
|
75775
75891
|
}
|
|
75892
|
+
function scanTomlMultilineLine(line, currentQuote) {
|
|
75893
|
+
if (currentQuote) {
|
|
75894
|
+
return {
|
|
75895
|
+
wasInside: true,
|
|
75896
|
+
nextQuote: findTomlMultilineDelimiter(line, currentQuote, 0) === -1 ? currentQuote : null
|
|
75897
|
+
};
|
|
75898
|
+
}
|
|
75899
|
+
let quote = null;
|
|
75900
|
+
let index = 0;
|
|
75901
|
+
while (index < line.length) {
|
|
75902
|
+
const char = line[index];
|
|
75903
|
+
if (quote === '"') {
|
|
75904
|
+
if (char === "\\") {
|
|
75905
|
+
index += 2;
|
|
75906
|
+
continue;
|
|
75907
|
+
}
|
|
75908
|
+
if (char === '"')
|
|
75909
|
+
quote = null;
|
|
75910
|
+
index += 1;
|
|
75911
|
+
continue;
|
|
75912
|
+
}
|
|
75913
|
+
if (quote === "'") {
|
|
75914
|
+
if (char === "'")
|
|
75915
|
+
quote = null;
|
|
75916
|
+
index += 1;
|
|
75917
|
+
continue;
|
|
75918
|
+
}
|
|
75919
|
+
if (char === "#")
|
|
75920
|
+
break;
|
|
75921
|
+
const delimiter2 = line.startsWith('"""', index) ? '"""' : line.startsWith("'''", index) ? "'''" : null;
|
|
75922
|
+
if (delimiter2) {
|
|
75923
|
+
const closingIndex = findTomlMultilineDelimiter(line, delimiter2, index + delimiter2.length);
|
|
75924
|
+
return { wasInside: false, nextQuote: closingIndex === -1 ? delimiter2 : null };
|
|
75925
|
+
}
|
|
75926
|
+
if (char === '"' || char === "'")
|
|
75927
|
+
quote = char;
|
|
75928
|
+
index += 1;
|
|
75929
|
+
}
|
|
75930
|
+
return { wasInside: false, nextQuote: null };
|
|
75931
|
+
}
|
|
75932
|
+
function findTomlMultilineDelimiter(line, delimiter2, startIndex) {
|
|
75933
|
+
let index = line.indexOf(delimiter2, startIndex);
|
|
75934
|
+
while (index !== -1) {
|
|
75935
|
+
if (delimiter2 === "'''" || countPrecedingBackslashes(line, index) % 2 === 0)
|
|
75936
|
+
return index;
|
|
75937
|
+
index = line.indexOf(delimiter2, index + 1);
|
|
75938
|
+
}
|
|
75939
|
+
return -1;
|
|
75940
|
+
}
|
|
75941
|
+
function countPrecedingBackslashes(line, index) {
|
|
75942
|
+
let count = 0;
|
|
75943
|
+
let cursor = index - 1;
|
|
75944
|
+
while (cursor >= 0 && line[cursor] === "\\") {
|
|
75945
|
+
count += 1;
|
|
75946
|
+
cursor -= 1;
|
|
75947
|
+
}
|
|
75948
|
+
return count;
|
|
75949
|
+
}
|
|
75950
|
+
function findUnquotedAssignment(line) {
|
|
75951
|
+
return findUnquotedCharacter(line, "=", 0);
|
|
75952
|
+
}
|
|
75953
|
+
function findUnquotedComment(line, startIndex) {
|
|
75954
|
+
return findUnquotedCharacter(line, "#", startIndex);
|
|
75955
|
+
}
|
|
75956
|
+
function findUnquotedCharacter(line, target, startIndex) {
|
|
75957
|
+
let quote = null;
|
|
75958
|
+
let index = startIndex;
|
|
75959
|
+
while (index < line.length) {
|
|
75960
|
+
const char = line[index];
|
|
75961
|
+
if (quote === '"') {
|
|
75962
|
+
if (char === "\\") {
|
|
75963
|
+
index += 2;
|
|
75964
|
+
continue;
|
|
75965
|
+
}
|
|
75966
|
+
if (char === '"')
|
|
75967
|
+
quote = null;
|
|
75968
|
+
index += 1;
|
|
75969
|
+
continue;
|
|
75970
|
+
}
|
|
75971
|
+
if (quote === "'") {
|
|
75972
|
+
if (char === "'")
|
|
75973
|
+
quote = null;
|
|
75974
|
+
index += 1;
|
|
75975
|
+
continue;
|
|
75976
|
+
}
|
|
75977
|
+
if (char === '"' || char === "'") {
|
|
75978
|
+
quote = char;
|
|
75979
|
+
index += 1;
|
|
75980
|
+
continue;
|
|
75981
|
+
}
|
|
75982
|
+
if (char === target)
|
|
75983
|
+
return index;
|
|
75984
|
+
if (char === "#")
|
|
75985
|
+
return -1;
|
|
75986
|
+
index += 1;
|
|
75987
|
+
}
|
|
75988
|
+
return -1;
|
|
75989
|
+
}
|
|
75990
|
+
function tomlPathMatches(candidate, target) {
|
|
75991
|
+
return candidate.length === target.length && candidate.every((part, index) => part === target[index]);
|
|
75992
|
+
}
|
|
75993
|
+
function replaceTomlAssignmentValue(line, assignmentIndex, value) {
|
|
75994
|
+
const newline = line.endsWith(`
|
|
75995
|
+
`) ? `
|
|
75996
|
+
` : "";
|
|
75997
|
+
const lineBody = newline ? line.slice(0, -1) : line;
|
|
75998
|
+
const commentIndex = findUnquotedComment(lineBody, assignmentIndex + 1);
|
|
75999
|
+
const comment = commentIndex === -1 ? "" : ` ${lineBody.slice(commentIndex).trimStart()}`;
|
|
76000
|
+
return `${lineBody.slice(0, assignmentIndex + 1)} ${value}${comment}${newline}`;
|
|
76001
|
+
}
|
|
76002
|
+
function findTomlMultilineValueEnd(text, startOffset, quote) {
|
|
76003
|
+
const lines = text.slice(startOffset).match(/[^\n]*\n?|$/g) ?? [];
|
|
76004
|
+
let offset = startOffset;
|
|
76005
|
+
let currentQuote = quote;
|
|
76006
|
+
for (const line of lines) {
|
|
76007
|
+
if (line.length === 0)
|
|
76008
|
+
break;
|
|
76009
|
+
const scan = scanTomlMultilineLine(line, currentQuote);
|
|
76010
|
+
currentQuote = scan.nextQuote;
|
|
76011
|
+
offset += line.length;
|
|
76012
|
+
if (currentQuote === null)
|
|
76013
|
+
return offset;
|
|
76014
|
+
}
|
|
76015
|
+
return text.length;
|
|
76016
|
+
}
|
|
75776
76017
|
function stripUnquotedInlineComment(line) {
|
|
75777
76018
|
let quote = null;
|
|
75778
76019
|
let index = 0;
|
|
@@ -76103,13 +76344,137 @@ function delay(milliseconds) {
|
|
|
76103
76344
|
return new Promise((resolveDelay) => setTimeout(resolveDelay, milliseconds));
|
|
76104
76345
|
}
|
|
76105
76346
|
|
|
76347
|
+
// packages/omo-codex/src/install/toml-setting-reader.ts
|
|
76348
|
+
function hasTomlSetting(config, keyPath) {
|
|
76349
|
+
const targetPath = parseTomlDottedKey(keyPath);
|
|
76350
|
+
if (!targetPath)
|
|
76351
|
+
return false;
|
|
76352
|
+
return hasTomlAssignment(config, (tablePath, settingPath) => {
|
|
76353
|
+
const fullPath = [...tablePath, ...settingPath];
|
|
76354
|
+
return fullPath.length === targetPath.length && fullPath.every((part, index) => part === targetPath[index]);
|
|
76355
|
+
});
|
|
76356
|
+
}
|
|
76357
|
+
function hasTomlRootDottedKeyPrefix(config, rootKey) {
|
|
76358
|
+
return hasTomlAssignment(config, (tablePath, settingPath) => tablePath.length === 0 && settingPath.length > 1 && settingPath[0] === rootKey);
|
|
76359
|
+
}
|
|
76360
|
+
function hasTomlAssignment(config, predicate) {
|
|
76361
|
+
let tablePath = [];
|
|
76362
|
+
let multilineQuote = null;
|
|
76363
|
+
for (const line of config.split(`
|
|
76364
|
+
`)) {
|
|
76365
|
+
const multilineScan = scanTomlMultilineLine(line, multilineQuote);
|
|
76366
|
+
multilineQuote = multilineScan.nextQuote;
|
|
76367
|
+
if (multilineScan.wasInside)
|
|
76368
|
+
continue;
|
|
76369
|
+
const normalizedLine = stripUnquotedInlineComment2(line).trim();
|
|
76370
|
+
if (normalizedLine.length === 0)
|
|
76371
|
+
continue;
|
|
76372
|
+
const headerPath = parseTomlTableHeader2(normalizedLine);
|
|
76373
|
+
if (headerPath) {
|
|
76374
|
+
tablePath = headerPath;
|
|
76375
|
+
continue;
|
|
76376
|
+
}
|
|
76377
|
+
if (isTomlTableHeaderLine2(normalizedLine)) {
|
|
76378
|
+
tablePath = null;
|
|
76379
|
+
continue;
|
|
76380
|
+
}
|
|
76381
|
+
if (!tablePath)
|
|
76382
|
+
continue;
|
|
76383
|
+
const assignmentIndex = findUnquotedAssignment2(normalizedLine);
|
|
76384
|
+
if (assignmentIndex < 0)
|
|
76385
|
+
continue;
|
|
76386
|
+
const settingPath = parseTomlDottedKey(normalizedLine.slice(0, assignmentIndex).trim());
|
|
76387
|
+
if (!settingPath)
|
|
76388
|
+
continue;
|
|
76389
|
+
if (predicate(tablePath, settingPath))
|
|
76390
|
+
return true;
|
|
76391
|
+
}
|
|
76392
|
+
return false;
|
|
76393
|
+
}
|
|
76394
|
+
function parseTomlTableHeader2(line) {
|
|
76395
|
+
if (!line.startsWith("[") || !line.endsWith("]") || line.startsWith("[["))
|
|
76396
|
+
return null;
|
|
76397
|
+
return parseTomlDottedKey(line.slice(1, -1).trim());
|
|
76398
|
+
}
|
|
76399
|
+
function isTomlTableHeaderLine2(line) {
|
|
76400
|
+
return line.startsWith("[") && line.endsWith("]");
|
|
76401
|
+
}
|
|
76402
|
+
function stripUnquotedInlineComment2(line) {
|
|
76403
|
+
let quote = null;
|
|
76404
|
+
let index = 0;
|
|
76405
|
+
while (index < line.length) {
|
|
76406
|
+
const char = line[index];
|
|
76407
|
+
if (quote === '"') {
|
|
76408
|
+
if (char === "\\") {
|
|
76409
|
+
index += 2;
|
|
76410
|
+
continue;
|
|
76411
|
+
}
|
|
76412
|
+
if (char === '"')
|
|
76413
|
+
quote = null;
|
|
76414
|
+
index += 1;
|
|
76415
|
+
continue;
|
|
76416
|
+
}
|
|
76417
|
+
if (quote === "'") {
|
|
76418
|
+
if (char === "'")
|
|
76419
|
+
quote = null;
|
|
76420
|
+
index += 1;
|
|
76421
|
+
continue;
|
|
76422
|
+
}
|
|
76423
|
+
if (char === '"' || char === "'") {
|
|
76424
|
+
quote = char;
|
|
76425
|
+
index += 1;
|
|
76426
|
+
continue;
|
|
76427
|
+
}
|
|
76428
|
+
if (char === "#")
|
|
76429
|
+
return line.slice(0, index);
|
|
76430
|
+
index += 1;
|
|
76431
|
+
}
|
|
76432
|
+
return line;
|
|
76433
|
+
}
|
|
76434
|
+
function findUnquotedAssignment2(line) {
|
|
76435
|
+
let quote = null;
|
|
76436
|
+
let index = 0;
|
|
76437
|
+
while (index < line.length) {
|
|
76438
|
+
const char = line[index];
|
|
76439
|
+
if (quote === '"') {
|
|
76440
|
+
if (char === "\\") {
|
|
76441
|
+
index += 2;
|
|
76442
|
+
continue;
|
|
76443
|
+
}
|
|
76444
|
+
if (char === '"')
|
|
76445
|
+
quote = null;
|
|
76446
|
+
index += 1;
|
|
76447
|
+
continue;
|
|
76448
|
+
}
|
|
76449
|
+
if (quote === "'") {
|
|
76450
|
+
if (char === "'")
|
|
76451
|
+
quote = null;
|
|
76452
|
+
index += 1;
|
|
76453
|
+
continue;
|
|
76454
|
+
}
|
|
76455
|
+
if (char === '"' || char === "'") {
|
|
76456
|
+
quote = char;
|
|
76457
|
+
index += 1;
|
|
76458
|
+
continue;
|
|
76459
|
+
}
|
|
76460
|
+
if (char === "=")
|
|
76461
|
+
return index;
|
|
76462
|
+
index += 1;
|
|
76463
|
+
}
|
|
76464
|
+
return -1;
|
|
76465
|
+
}
|
|
76466
|
+
|
|
76106
76467
|
// packages/omo-codex/src/install/codex-config-features.ts
|
|
76107
76468
|
function ensureFeatureEnabled(config, featureName) {
|
|
76108
76469
|
const section = findTomlSection(config, "features");
|
|
76109
|
-
if (!section)
|
|
76470
|
+
if (!section) {
|
|
76471
|
+
if (hasTomlRootDottedKeyPrefix(config, "features")) {
|
|
76472
|
+
return replaceOrInsertRootDottedSetting(config, `features.${featureName}`, "true");
|
|
76473
|
+
}
|
|
76110
76474
|
return appendBlock(config, `[features]
|
|
76111
76475
|
${featureName} = true
|
|
76112
76476
|
`);
|
|
76477
|
+
}
|
|
76113
76478
|
return replaceOrInsertSetting(config, section, featureName, "true");
|
|
76114
76479
|
}
|
|
76115
76480
|
|
|
@@ -76177,7 +76542,7 @@ function ensureAutonomousPermissions(config) {
|
|
|
76177
76542
|
next = replaceOrInsertRootSetting(next, "sandbox_mode", JSON.stringify("danger-full-access"));
|
|
76178
76543
|
next = replaceOrInsertRootSetting(next, "network_access", JSON.stringify("enabled"));
|
|
76179
76544
|
for (const featureName of AUTONOMOUS_FEATURES) {
|
|
76180
|
-
next =
|
|
76545
|
+
next = ensureFeatureEnabled(next, featureName);
|
|
76181
76546
|
}
|
|
76182
76547
|
next = removeWindowsSandboxSetting(next);
|
|
76183
76548
|
next = ensureNoticeEnabled(next, "hide_full_access_warning");
|
|
@@ -76195,14 +76560,6 @@ function ensureNoticeEnabled(config, key) {
|
|
|
76195
76560
|
return appendNoticeBlock(config, key);
|
|
76196
76561
|
return replaceOrInsertSetting(config, section, key, "true");
|
|
76197
76562
|
}
|
|
76198
|
-
function ensureFeatureEnabled2(config, key) {
|
|
76199
|
-
const section = findTomlSection(config, "features");
|
|
76200
|
-
if (section === null)
|
|
76201
|
-
return appendBlock(config, `[features]
|
|
76202
|
-
${key} = true
|
|
76203
|
-
`);
|
|
76204
|
-
return replaceOrInsertSetting(config, section, key, "true");
|
|
76205
|
-
}
|
|
76206
76563
|
function appendNoticeBlock(config, key) {
|
|
76207
76564
|
return appendBlock(config, `[notice]
|
|
76208
76565
|
${key} = true
|
|
@@ -76274,7 +76631,7 @@ function readStringArraySetting(sectionText, key) {
|
|
|
76274
76631
|
const assignmentIndex = line.indexOf("=");
|
|
76275
76632
|
if (assignmentIndex === -1)
|
|
76276
76633
|
return null;
|
|
76277
|
-
return parseTomlStringArray(
|
|
76634
|
+
return parseTomlStringArray(stripUnquotedInlineComment3(line.slice(assignmentIndex + 1)).trim());
|
|
76278
76635
|
}
|
|
76279
76636
|
return null;
|
|
76280
76637
|
}
|
|
@@ -76318,7 +76675,7 @@ function parseTomlString(input, startIndex) {
|
|
|
76318
76675
|
}
|
|
76319
76676
|
return null;
|
|
76320
76677
|
}
|
|
76321
|
-
function
|
|
76678
|
+
function stripUnquotedInlineComment3(line) {
|
|
76322
76679
|
let quote = null;
|
|
76323
76680
|
let index = 0;
|
|
76324
76681
|
while (index < line.length) {
|
|
@@ -76532,24 +76889,27 @@ import { readFileSync as readFileSync13 } from "fs";
|
|
|
76532
76889
|
import { dirname as dirname15, isAbsolute as isAbsolute8, join as join39 } from "path";
|
|
76533
76890
|
var CODEX_AGENTS_HEADER = "agents";
|
|
76534
76891
|
var CODEX_MULTI_AGENT_V2_HEADER = "features.multi_agent_v2";
|
|
76892
|
+
var CODEX_MULTI_AGENT_V2_THREAD_LIMIT_KEY = `${CODEX_MULTI_AGENT_V2_HEADER}.max_concurrent_threads_per_session`;
|
|
76535
76893
|
var CODEX_SUBAGENT_THREAD_LIMIT = 1000;
|
|
76894
|
+
var CODEX_MULTI_AGENT_V2_THREAD_LIMIT = 16;
|
|
76536
76895
|
function ensureCodexMultiAgentV2Config(config, options = {}) {
|
|
76537
76896
|
const featureFlag = removeFeatureFlagSetting(config, "multi_agent_v2");
|
|
76538
76897
|
const v2Preferred = options.multiAgentVersion === "v2";
|
|
76539
76898
|
const modelKnown = options.multiAgentVersion != null || readRootModel(featureFlag.config) !== null;
|
|
76540
76899
|
const agentsConfig = v2Preferred ? removeAgentsMaxThreads(featureFlag.config) : modelKnown ? ensureAgentsMaxThreads(featureFlag.config) : raiseExistingAgentsMaxThreads(featureFlag.config);
|
|
76541
|
-
const maxThreadsValue = CODEX_SUBAGENT_THREAD_LIMIT.toString();
|
|
76542
76900
|
const preserveDisable = featureFlag.value === false && !v2Preferred;
|
|
76543
76901
|
const featureConfig = preserveDisable ? setMultiAgentV2Disable(agentsConfig) : v2Preferred ? removeMultiAgentV2Disable(agentsConfig) : agentsConfig;
|
|
76902
|
+
if (hasTomlSetting(featureConfig, CODEX_MULTI_AGENT_V2_THREAD_LIMIT_KEY))
|
|
76903
|
+
return featureConfig;
|
|
76544
76904
|
const section = findTomlSection(featureConfig, CODEX_MULTI_AGENT_V2_HEADER);
|
|
76545
76905
|
if (!section) {
|
|
76546
76906
|
const enabledSetting = preserveDisable ? `enabled = false
|
|
76547
76907
|
` : "";
|
|
76548
76908
|
return appendBlock(featureConfig, `[${CODEX_MULTI_AGENT_V2_HEADER}]
|
|
76549
|
-
${enabledSetting}max_concurrent_threads_per_session = ${
|
|
76909
|
+
${enabledSetting}max_concurrent_threads_per_session = ${CODEX_MULTI_AGENT_V2_THREAD_LIMIT}
|
|
76550
76910
|
`);
|
|
76551
76911
|
}
|
|
76552
|
-
return replaceOrInsertSetting(featureConfig, section, "max_concurrent_threads_per_session",
|
|
76912
|
+
return replaceOrInsertSetting(featureConfig, section, "max_concurrent_threads_per_session", CODEX_MULTI_AGENT_V2_THREAD_LIMIT.toString());
|
|
76553
76913
|
}
|
|
76554
76914
|
function resolveCodexMultiAgentVersion(config, configPath) {
|
|
76555
76915
|
const model = readRootModel(config);
|
|
@@ -76736,11 +77096,11 @@ async function trustedHookStatesForPlugin(input) {
|
|
|
76736
77096
|
const manifestPath = join40(input.pluginRoot, ".codex-plugin", "plugin.json");
|
|
76737
77097
|
if (!await exists(manifestPath))
|
|
76738
77098
|
return [];
|
|
76739
|
-
const
|
|
76740
|
-
if (!isPlainRecord3(
|
|
77099
|
+
const manifest2 = JSON.parse(await readFile12(manifestPath, "utf8"));
|
|
77100
|
+
if (!isPlainRecord3(manifest2))
|
|
76741
77101
|
return [];
|
|
76742
77102
|
const states = [];
|
|
76743
|
-
for (const hookPath of hookManifestPaths2(
|
|
77103
|
+
for (const hookPath of hookManifestPaths2(manifest2.hooks)) {
|
|
76744
77104
|
const hooksPath = join40(input.pluginRoot, hookPath);
|
|
76745
77105
|
if (!await exists(hooksPath))
|
|
76746
77106
|
continue;
|
|
@@ -76908,6 +77268,10 @@ var MANAGED_REASONING_DEFAULT_UPGRADES = new Map([
|
|
|
76908
77268
|
{
|
|
76909
77269
|
previous: { model: "gpt-5.5", effort: "xhigh" },
|
|
76910
77270
|
current: { model: "gpt-5.6-sol", effort: "ultra" }
|
|
77271
|
+
},
|
|
77272
|
+
{
|
|
77273
|
+
previous: { model: "gpt-5.6-sol", effort: "ultra" },
|
|
77274
|
+
current: { model: "gpt-5.6-terra", effort: "high" }
|
|
76911
77275
|
}
|
|
76912
77276
|
]
|
|
76913
77277
|
],
|
|
@@ -76917,6 +77281,10 @@ var MANAGED_REASONING_DEFAULT_UPGRADES = new Map([
|
|
|
76917
77281
|
{
|
|
76918
77282
|
previous: { model: "gpt-5.6-sol", effort: "xhigh" },
|
|
76919
77283
|
current: { model: "gpt-5.6-sol", effort: "max" }
|
|
77284
|
+
},
|
|
77285
|
+
{
|
|
77286
|
+
previous: { model: "gpt-5.6-sol", effort: "max" },
|
|
77287
|
+
current: { model: "gpt-5.6-sol", effort: "high" }
|
|
76920
77288
|
}
|
|
76921
77289
|
]
|
|
76922
77290
|
],
|
|
@@ -76926,6 +77294,37 @@ var MANAGED_REASONING_DEFAULT_UPGRADES = new Map([
|
|
|
76926
77294
|
{
|
|
76927
77295
|
previous: { model: "gpt-5.6-sol", effort: "high" },
|
|
76928
77296
|
current: { model: "gpt-5.6-luna", effort: "max" }
|
|
77297
|
+
},
|
|
77298
|
+
{
|
|
77299
|
+
previous: { model: "gpt-5.6-luna", effort: "max" },
|
|
77300
|
+
current: { model: "gpt-5.6-terra", effort: "high" }
|
|
77301
|
+
}
|
|
77302
|
+
]
|
|
77303
|
+
],
|
|
77304
|
+
[
|
|
77305
|
+
"lazycodex-worker-high",
|
|
77306
|
+
[
|
|
77307
|
+
{
|
|
77308
|
+
previous: { model: "gpt-5.6-sol", effort: "max" },
|
|
77309
|
+
current: { model: "gpt-5.6-sol", effort: "medium" }
|
|
77310
|
+
}
|
|
77311
|
+
]
|
|
77312
|
+
],
|
|
77313
|
+
[
|
|
77314
|
+
"lazycodex-code-reviewer",
|
|
77315
|
+
[
|
|
77316
|
+
{
|
|
77317
|
+
previous: { model: "gpt-5.6-sol", effort: "xhigh" },
|
|
77318
|
+
current: { model: "gpt-5.6-terra", effort: "medium" }
|
|
77319
|
+
}
|
|
77320
|
+
]
|
|
77321
|
+
],
|
|
77322
|
+
[
|
|
77323
|
+
"lazycodex-clone-fidelity-reviewer",
|
|
77324
|
+
[
|
|
77325
|
+
{
|
|
77326
|
+
previous: { model: "gpt-5.6-sol", effort: "xhigh" },
|
|
77327
|
+
current: { model: "gpt-5.6-terra", effort: "high" }
|
|
76929
77328
|
}
|
|
76930
77329
|
]
|
|
76931
77330
|
],
|
|
@@ -76944,6 +77343,10 @@ var MANAGED_REASONING_DEFAULT_UPGRADES = new Map([
|
|
|
76944
77343
|
{
|
|
76945
77344
|
previous: { model: "gpt-5.6-sol", effort: "xhigh" },
|
|
76946
77345
|
current: { model: "gpt-5.6-sol", effort: "high" }
|
|
77346
|
+
},
|
|
77347
|
+
{
|
|
77348
|
+
previous: { model: "gpt-5.6-sol", effort: "high" },
|
|
77349
|
+
current: { model: "gpt-5.6-sol", effort: "low" }
|
|
76947
77350
|
}
|
|
76948
77351
|
]
|
|
76949
77352
|
]
|
|
@@ -77570,7 +77973,7 @@ function normalizeHookStatusVersion(version) {
|
|
|
77570
77973
|
|
|
77571
77974
|
// packages/omo-codex/src/install/codex-process.ts
|
|
77572
77975
|
init_bun_spawn_shim();
|
|
77573
|
-
var WINDOWS_CMD_SHIM_COMMANDS = new Set(["npm", "npx"]);
|
|
77976
|
+
var WINDOWS_CMD_SHIM_COMMANDS = new Set(["codex", "npm", "npx"]);
|
|
77574
77977
|
function resolveRunCommandInvocation(command, args, platform = process.platform) {
|
|
77575
77978
|
if (platform !== "win32" || !WINDOWS_CMD_SHIM_COMMANDS.has(command.toLowerCase())) {
|
|
77576
77979
|
return { command, args: [...args] };
|
|
@@ -78275,12 +78678,12 @@ async function runCodexInstaller(options = {}) {
|
|
|
78275
78678
|
const agentConfigs = new Map;
|
|
78276
78679
|
for (const entry of marketplace.plugins) {
|
|
78277
78680
|
const sourcePath = resolvePluginSource(codexPackageRoot, entry, { pathOverride: "./plugin" });
|
|
78278
|
-
const
|
|
78279
|
-
if (
|
|
78280
|
-
throw new Error(`plugin manifest name ${JSON.stringify(
|
|
78681
|
+
const manifest2 = await readPluginManifest(sourcePath);
|
|
78682
|
+
if (manifest2.name !== entry.name) {
|
|
78683
|
+
throw new Error(`plugin manifest name ${JSON.stringify(manifest2.name)} does not match marketplace name ${JSON.stringify(entry.name)}`);
|
|
78281
78684
|
}
|
|
78282
78685
|
const version2 = resolveLazyCodexPluginVersion({
|
|
78283
|
-
manifestVersion:
|
|
78686
|
+
manifestVersion: manifest2.version,
|
|
78284
78687
|
marketplaceName: marketplace.name,
|
|
78285
78688
|
pluginName: entry.name,
|
|
78286
78689
|
distributionManifest,
|
|
@@ -78970,8 +79373,24 @@ import { promisify as promisify2 } from "util";
|
|
|
78970
79373
|
var execFileAsync2 = promisify2(execFile4);
|
|
78971
79374
|
var REQUIRED_PLUGIN_ARTIFACTS = [
|
|
78972
79375
|
join58("extensions", "omo.js"),
|
|
79376
|
+
join58("skills", "ast-grep", "SKILL.md"),
|
|
79377
|
+
join58("skills", "coding-agent-sessions", "SKILL.md"),
|
|
79378
|
+
join58("skills", "debugging", "SKILL.md"),
|
|
79379
|
+
join58("skills", "frontend", "SKILL.md"),
|
|
79380
|
+
join58("skills", "git-master", "SKILL.md"),
|
|
79381
|
+
join58("skills", "init-deep", "SKILL.md"),
|
|
79382
|
+
join58("skills", "lsp-setup", "SKILL.md"),
|
|
79383
|
+
join58("skills", "programming", "SKILL.md"),
|
|
79384
|
+
join58("skills", "refactor", "SKILL.md"),
|
|
79385
|
+
join58("skills", "remove-ai-slops", "SKILL.md"),
|
|
79386
|
+
join58("skills", "review-work", "SKILL.md"),
|
|
79387
|
+
join58("skills", "start-work", "SKILL.md"),
|
|
79388
|
+
join58("skills", "ultimate-browsing", "SKILL.md"),
|
|
78973
79389
|
join58("skills", "ultrawork", "SKILL.md"),
|
|
78974
79390
|
join58("skills", "ulw-loop", "SKILL.md"),
|
|
79391
|
+
join58("skills", "ulw-plan", "SKILL.md"),
|
|
79392
|
+
join58("skills", "ulw-research", "SKILL.md"),
|
|
79393
|
+
join58("skills", "visual-qa", "SKILL.md"),
|
|
78975
79394
|
join58("runtime", "lsp-daemon", "dist", "cli.js"),
|
|
78976
79395
|
join58("runtime", "lsp-daemon", "dist", "index.js"),
|
|
78977
79396
|
join58("runtime", "lsp-daemon", "dist", "index.d.ts"),
|
|
@@ -79025,6 +79444,7 @@ async function ensurePluginArtifacts(context) {
|
|
|
79025
79444
|
throw new Error(`Packed omo-senpi plugin is missing required runtime artifacts at ${context.pluginPath}`);
|
|
79026
79445
|
}
|
|
79027
79446
|
await context.runCommand("node", [join58(context.pluginPath, "scripts", "build-extension.mjs")], { cwd: context.repoRoot });
|
|
79447
|
+
await context.runCommand("node", [join58("packages", "omo-codex", "plugin", "scripts", "materialize-shared-upstreams.mjs")], { cwd: context.repoRoot });
|
|
79028
79448
|
await context.runCommand("node", [join58(context.pluginPath, "scripts", "sync-skills.mjs")], { cwd: context.repoRoot });
|
|
79029
79449
|
await context.runCommand("node", [join58(context.pluginPath, "scripts", "build-install.mjs")], { cwd: context.repoRoot });
|
|
79030
79450
|
await context.runCommand("node", [join58(context.pluginPath, "scripts", "stage-lsp-daemon-runtime.mjs")], { cwd: context.repoRoot });
|
|
@@ -96654,7 +97074,8 @@ var BrowserAutomationProviderSchema = exports_external.enum([
|
|
|
96654
97074
|
"playwright-cli"
|
|
96655
97075
|
]);
|
|
96656
97076
|
var BrowserAutomationConfigSchema = exports_external.object({
|
|
96657
|
-
provider: BrowserAutomationProviderSchema.default("playwright")
|
|
97077
|
+
provider: BrowserAutomationProviderSchema.default("playwright"),
|
|
97078
|
+
playwright_mcp_args: exports_external.array(exports_external.string()).optional()
|
|
96658
97079
|
});
|
|
96659
97080
|
// packages/omo-opencode/src/config/schema/categories.ts
|
|
96660
97081
|
var CategoryConfigSchema = exports_external.object({
|
|
@@ -96705,7 +97126,9 @@ var ClaudeCodeConfigSchema = exports_external.object({
|
|
|
96705
97126
|
var CodegraphConfigSchema = exports_external.object({
|
|
96706
97127
|
auto_init: exports_external.boolean().default(true),
|
|
96707
97128
|
auto_provision: exports_external.boolean().default(true),
|
|
97129
|
+
daemon: exports_external.boolean().default(false),
|
|
96708
97130
|
enabled: exports_external.boolean().default(true),
|
|
97131
|
+
excluded_roots: exports_external.array(exports_external.string()).optional(),
|
|
96709
97132
|
install_dir: exports_external.string().optional(),
|
|
96710
97133
|
telemetry: exports_external.boolean().optional(),
|
|
96711
97134
|
watch_debounce_ms: exports_external.number().nonnegative().optional()
|
|
@@ -96716,9 +97139,7 @@ var CommentCheckerConfigSchema = exports_external.object({
|
|
|
96716
97139
|
});
|
|
96717
97140
|
// packages/omo-opencode/src/config/schema/commands.ts
|
|
96718
97141
|
var BuiltinCommandNameSchema = exports_external.enum([
|
|
96719
|
-
"
|
|
96720
|
-
"ulw-loop",
|
|
96721
|
-
"cancel-ralph",
|
|
97142
|
+
"goal",
|
|
96722
97143
|
"refactor",
|
|
96723
97144
|
"start-work",
|
|
96724
97145
|
"stop-continuation",
|
|
@@ -96728,7 +97149,7 @@ var BuiltinCommandNameSchema = exports_external.enum([
|
|
|
96728
97149
|
// packages/omo-opencode/src/config/schema/default-mode.ts
|
|
96729
97150
|
var DefaultModeConfigSchema = exports_external.object({
|
|
96730
97151
|
ultrawork: exports_external.boolean().default(false),
|
|
96731
|
-
|
|
97152
|
+
goal: exports_external.boolean().default(false)
|
|
96732
97153
|
});
|
|
96733
97154
|
// packages/omo-opencode/src/config/schema/dynamic-context-pruning.ts
|
|
96734
97155
|
var DynamicContextPruningConfigSchema = exports_external.object({
|
|
@@ -96776,6 +97197,12 @@ var ExperimentalConfigSchema = exports_external.object({
|
|
|
96776
97197
|
max_tools: exports_external.number().int().min(1).optional(),
|
|
96777
97198
|
disable_live_parent_wake_routing: exports_external.boolean().optional()
|
|
96778
97199
|
});
|
|
97200
|
+
// packages/omo-opencode/src/config/schema/goal.ts
|
|
97201
|
+
var GoalConfigSchema = exports_external.object({
|
|
97202
|
+
enabled: exports_external.boolean().default(false),
|
|
97203
|
+
auto_start: exports_external.boolean().default(false),
|
|
97204
|
+
default_max_iterations: exports_external.number().min(1).max(1000).default(100)
|
|
97205
|
+
});
|
|
96779
97206
|
// packages/skills-loader-core/src/config/git-env-prefix.ts
|
|
96780
97207
|
var GIT_ENV_ASSIGNMENT_PATTERN = /^(?:[A-Za-z_][A-Za-z0-9_]*=[A-Za-z0-9_-]*)(?: [A-Za-z_][A-Za-z0-9_]*=[A-Za-z0-9_-]*)*$/;
|
|
96781
97208
|
var GIT_ENV_PREFIX_VALIDATION_MESSAGE = 'git_env_prefix must be empty or use shell-safe env assignments like "GIT_MASTER=1"';
|
|
@@ -96818,7 +97245,7 @@ var HookNameSchema = exports_external.enum([
|
|
|
96818
97245
|
"interactive-bash-session",
|
|
96819
97246
|
"tool-pair-validator",
|
|
96820
97247
|
"monitor-status-injector",
|
|
96821
|
-
"
|
|
97248
|
+
"goal",
|
|
96822
97249
|
"category-skill-reminder",
|
|
96823
97250
|
"compaction-context-injector",
|
|
96824
97251
|
"compaction-todo-preserver",
|
|
@@ -96928,14 +97355,6 @@ var MonitorConfigSchema = exports_external.object({
|
|
|
96928
97355
|
pattern_max_length: exports_external.number().int().min(1).default(512)
|
|
96929
97356
|
});
|
|
96930
97357
|
|
|
96931
|
-
// packages/omo-opencode/src/config/schema/ralph-loop.ts
|
|
96932
|
-
var RalphLoopConfigSchema = exports_external.object({
|
|
96933
|
-
enabled: exports_external.boolean().default(false),
|
|
96934
|
-
default_max_iterations: exports_external.number().min(1).max(1000).default(100),
|
|
96935
|
-
state_dir: exports_external.string().optional(),
|
|
96936
|
-
default_strategy: exports_external.enum(["reset", "continue"]).default("continue")
|
|
96937
|
-
});
|
|
96938
|
-
|
|
96939
97358
|
// packages/omo-opencode/src/config/schema/runtime-fallback.ts
|
|
96940
97359
|
var RuntimeFallbackConfigSchema = exports_external.object({
|
|
96941
97360
|
enabled: exports_external.boolean().optional(),
|
|
@@ -97071,7 +97490,8 @@ var OhMyOpenCodeConfigSchema = exports_external.object({
|
|
|
97071
97490
|
experimental: ExperimentalConfigSchema.optional(),
|
|
97072
97491
|
auto_update: exports_external.boolean().optional(),
|
|
97073
97492
|
skills: SkillsConfigSchema.optional(),
|
|
97074
|
-
|
|
97493
|
+
goal: GoalConfigSchema.optional(),
|
|
97494
|
+
ralph_loop: exports_external.record(exports_external.string(), exports_external.unknown()).optional(),
|
|
97075
97495
|
runtime_fallback: exports_external.union([exports_external.boolean(), RuntimeFallbackConfigSchema]).optional(),
|
|
97076
97496
|
background_task: BackgroundTaskConfigSchema.optional(),
|
|
97077
97497
|
notification: NotificationConfigSchema.optional(),
|
|
@@ -97454,6 +97874,7 @@ function loadPluginConfig(directory, ctx) {
|
|
|
97454
97874
|
}
|
|
97455
97875
|
}
|
|
97456
97876
|
const userMcpEnvAllowlist = config3.mcp_env_allowlist ?? [];
|
|
97877
|
+
const userPlaywrightMcpArgs = config3.browser_automation_engine?.playwright_mcp_args;
|
|
97457
97878
|
const canonicalAncestorPathsFarthestFirst = [...canonicalAncestorPathsNearestFirst].reverse();
|
|
97458
97879
|
const defaultGitMaster = OhMyOpenCodeConfigSchema.parse({}).git_master;
|
|
97459
97880
|
const ancestorGitMasterOverridesFarthestFirst = [];
|
|
@@ -97486,6 +97907,16 @@ function loadPluginConfig(directory, ctx) {
|
|
|
97486
97907
|
...config3,
|
|
97487
97908
|
mcp_env_allowlist: userMcpEnvAllowlist
|
|
97488
97909
|
};
|
|
97910
|
+
if (config3.browser_automation_engine) {
|
|
97911
|
+
const {
|
|
97912
|
+
playwright_mcp_args: _ancestorPlaywrightMcpArgs,
|
|
97913
|
+
...browserAutomationEngine
|
|
97914
|
+
} = config3.browser_automation_engine;
|
|
97915
|
+
config3 = {
|
|
97916
|
+
...config3,
|
|
97917
|
+
browser_automation_engine: userPlaywrightMcpArgs !== undefined ? { ...browserAutomationEngine, playwright_mcp_args: userPlaywrightMcpArgs } : browserAutomationEngine
|
|
97918
|
+
};
|
|
97919
|
+
}
|
|
97489
97920
|
applyDisabledProviders(config3);
|
|
97490
97921
|
log2("Final merged config", {
|
|
97491
97922
|
agents: config3.agents,
|
|
@@ -97957,22 +98388,170 @@ var BOULDER_FILE = "boulder.json";
|
|
|
97957
98388
|
var BOULDER_STATE_PATH = `${BOULDER_DIR}/${BOULDER_FILE}`;
|
|
97958
98389
|
var NOTEPAD_DIR = "notepads";
|
|
97959
98390
|
var NOTEPAD_BASE_PATH = `${BOULDER_DIR}/${NOTEPAD_DIR}`;
|
|
97960
|
-
// packages/boulder-state/src/
|
|
97961
|
-
|
|
97962
|
-
var TODO_HEADING_PATTERN =
|
|
97963
|
-
var FINAL_VERIFICATION_HEADING_PATTERN =
|
|
97964
|
-
var
|
|
97965
|
-
var
|
|
97966
|
-
var
|
|
97967
|
-
var
|
|
97968
|
-
function
|
|
97969
|
-
const
|
|
97970
|
-
|
|
97971
|
-
|
|
98391
|
+
// packages/boulder-state/src/plan-checklist.ts
|
|
98392
|
+
var SIMPLE_CHECKBOX_PATTERN = /^[-*][ \t]*\[[ \t]*([xX]?)[ \t]*\][ \t]+(.+)$/;
|
|
98393
|
+
var TODO_HEADING_PATTERN = /^##[ \t]+TODOs(?:[ \t]+#+)?[ \t]*$/i;
|
|
98394
|
+
var FINAL_VERIFICATION_HEADING_PATTERN = /^##[ \t]+Final Verification Wave(?:[ \t]+#+)?[ \t]*$/i;
|
|
98395
|
+
var SECTION_BOUNDARY_HEADING_PATTERN = /^#{1,2}(?:[ \t]+|$)/;
|
|
98396
|
+
var FENCE_PATTERN = /^[ \t]{0,3}(`{3,}|~{3,})(.*)$/;
|
|
98397
|
+
var TODO_CHECKBOX_PATTERN = /^- \[([ xX])\] ([1-9]\d*\. .+)$/;
|
|
98398
|
+
var FINAL_WAVE_CHECKBOX_PATTERN = /^- \[([ xX])\] (F[1-9]\d*\. .+)$/i;
|
|
98399
|
+
function parsePlanChecklist(markdown) {
|
|
98400
|
+
const lines = markdown.split(/\r?\n/);
|
|
98401
|
+
if (!hasStructuredSection(lines)) {
|
|
98402
|
+
return parseSimpleChecklist(lines);
|
|
98403
|
+
}
|
|
98404
|
+
return parseStructuredPlan(lines).checklist;
|
|
98405
|
+
}
|
|
98406
|
+
function parseCurrentTopLevelTask(markdown) {
|
|
98407
|
+
const lines = markdown.split(/\r?\n/);
|
|
98408
|
+
if (!hasStructuredSection(lines)) {
|
|
98409
|
+
return null;
|
|
98410
|
+
}
|
|
98411
|
+
return parseStructuredPlan(lines).nextTask;
|
|
98412
|
+
}
|
|
98413
|
+
function parseStructuredPlan(lines) {
|
|
98414
|
+
let remaining = 0;
|
|
98415
|
+
let total = 0;
|
|
98416
|
+
let nextTaskLabel = null;
|
|
98417
|
+
let nextTask = null;
|
|
98418
|
+
let section = "other";
|
|
98419
|
+
let fence = null;
|
|
98420
|
+
for (const line of lines) {
|
|
98421
|
+
if (fence !== null) {
|
|
98422
|
+
if (isClosingFence(line, fence)) {
|
|
98423
|
+
fence = null;
|
|
98424
|
+
}
|
|
98425
|
+
continue;
|
|
98426
|
+
}
|
|
98427
|
+
const openingFence = parseOpeningFence(line);
|
|
98428
|
+
if (openingFence !== null) {
|
|
98429
|
+
fence = openingFence;
|
|
98430
|
+
continue;
|
|
98431
|
+
}
|
|
98432
|
+
if (SECTION_BOUNDARY_HEADING_PATTERN.test(line)) {
|
|
98433
|
+
section = parseStructuredSectionHeading(line);
|
|
98434
|
+
continue;
|
|
98435
|
+
}
|
|
98436
|
+
if (section === "other") {
|
|
98437
|
+
continue;
|
|
98438
|
+
}
|
|
98439
|
+
const checkbox = parseStructuredTopLevelCheckbox(line, section);
|
|
98440
|
+
if (checkbox === null) {
|
|
98441
|
+
continue;
|
|
98442
|
+
}
|
|
98443
|
+
total += 1;
|
|
98444
|
+
if (checkbox.checked) {
|
|
98445
|
+
continue;
|
|
98446
|
+
}
|
|
98447
|
+
remaining += 1;
|
|
98448
|
+
if (nextTaskLabel === null) {
|
|
98449
|
+
nextTaskLabel = checkbox.label;
|
|
98450
|
+
nextTask = checkbox.task;
|
|
98451
|
+
}
|
|
98452
|
+
}
|
|
98453
|
+
return {
|
|
98454
|
+
checklist: {
|
|
98455
|
+
completed: total - remaining,
|
|
98456
|
+
remaining,
|
|
98457
|
+
total,
|
|
98458
|
+
nextTaskLabel
|
|
98459
|
+
},
|
|
98460
|
+
nextTask
|
|
98461
|
+
};
|
|
98462
|
+
}
|
|
98463
|
+
function parseSimpleChecklist(lines) {
|
|
98464
|
+
let remaining = 0;
|
|
98465
|
+
let total = 0;
|
|
98466
|
+
let nextTaskLabel = null;
|
|
98467
|
+
let fence = null;
|
|
98468
|
+
for (const line of lines) {
|
|
98469
|
+
if (fence !== null) {
|
|
98470
|
+
if (isClosingFence(line, fence)) {
|
|
98471
|
+
fence = null;
|
|
98472
|
+
}
|
|
98473
|
+
continue;
|
|
98474
|
+
}
|
|
98475
|
+
const openingFence = parseOpeningFence(line);
|
|
98476
|
+
if (openingFence !== null) {
|
|
98477
|
+
fence = openingFence;
|
|
98478
|
+
continue;
|
|
98479
|
+
}
|
|
98480
|
+
const checkbox = parseSimpleTopLevelCheckbox(line);
|
|
98481
|
+
if (checkbox === null) {
|
|
98482
|
+
continue;
|
|
98483
|
+
}
|
|
98484
|
+
total += 1;
|
|
98485
|
+
if (checkbox.checked) {
|
|
98486
|
+
continue;
|
|
98487
|
+
}
|
|
98488
|
+
remaining += 1;
|
|
98489
|
+
if (nextTaskLabel === null) {
|
|
98490
|
+
nextTaskLabel = checkbox.label;
|
|
98491
|
+
}
|
|
98492
|
+
}
|
|
98493
|
+
return { completed: total - remaining, remaining, total, nextTaskLabel };
|
|
98494
|
+
}
|
|
98495
|
+
function parseSimpleTopLevelCheckbox(line) {
|
|
98496
|
+
const match = line.match(SIMPLE_CHECKBOX_PATTERN);
|
|
98497
|
+
const marker = match?.[1];
|
|
98498
|
+
const label = match?.[2];
|
|
98499
|
+
if (marker === undefined || label === undefined) {
|
|
98500
|
+
return null;
|
|
98501
|
+
}
|
|
98502
|
+
return { checked: marker.toLowerCase() === "x", label };
|
|
98503
|
+
}
|
|
98504
|
+
function hasStructuredSection(lines) {
|
|
98505
|
+
let fence = null;
|
|
98506
|
+
for (const line of lines) {
|
|
98507
|
+
if (fence !== null) {
|
|
98508
|
+
if (isClosingFence(line, fence)) {
|
|
98509
|
+
fence = null;
|
|
98510
|
+
}
|
|
98511
|
+
continue;
|
|
98512
|
+
}
|
|
98513
|
+
const openingFence = parseOpeningFence(line);
|
|
98514
|
+
if (openingFence !== null) {
|
|
98515
|
+
fence = openingFence;
|
|
98516
|
+
continue;
|
|
98517
|
+
}
|
|
98518
|
+
if (parseStructuredSectionHeading(line) !== "other") {
|
|
98519
|
+
return true;
|
|
98520
|
+
}
|
|
98521
|
+
}
|
|
98522
|
+
return false;
|
|
98523
|
+
}
|
|
98524
|
+
function parseStructuredSectionHeading(line) {
|
|
98525
|
+
if (TODO_HEADING_PATTERN.test(line)) {
|
|
98526
|
+
return "todo";
|
|
98527
|
+
}
|
|
98528
|
+
if (FINAL_VERIFICATION_HEADING_PATTERN.test(line)) {
|
|
98529
|
+
return "final-wave";
|
|
98530
|
+
}
|
|
98531
|
+
return "other";
|
|
98532
|
+
}
|
|
98533
|
+
function parseStructuredTopLevelCheckbox(line, section) {
|
|
98534
|
+
const pattern = section === "todo" ? TODO_CHECKBOX_PATTERN : FINAL_WAVE_CHECKBOX_PATTERN;
|
|
98535
|
+
const match = line.match(pattern);
|
|
98536
|
+
const marker = match?.[1];
|
|
98537
|
+
const label = match?.[2];
|
|
98538
|
+
if (marker === undefined || label === undefined) {
|
|
98539
|
+
return null;
|
|
98540
|
+
}
|
|
98541
|
+
const task = buildTaskRef(section, label);
|
|
98542
|
+
if (task === null) {
|
|
98543
|
+
return null;
|
|
98544
|
+
}
|
|
98545
|
+
return { checked: marker.toLowerCase() === "x", label, task };
|
|
98546
|
+
}
|
|
98547
|
+
function buildTaskRef(section, label) {
|
|
98548
|
+
const pattern = section === "todo" ? /^([1-9]\d*)\. (.+)$/ : /^(F[1-9]\d*)\. (.+)$/i;
|
|
98549
|
+
const match = label.match(pattern);
|
|
98550
|
+
const rawLabel = match?.[1];
|
|
98551
|
+
const title = match?.[2];
|
|
98552
|
+
if (rawLabel === undefined || title === undefined) {
|
|
97972
98553
|
return null;
|
|
97973
98554
|
}
|
|
97974
|
-
const rawLabel = match[1];
|
|
97975
|
-
const title = match[2].trim();
|
|
97976
98555
|
return {
|
|
97977
98556
|
key: `${section}:${rawLabel.toLowerCase()}`,
|
|
97978
98557
|
section,
|
|
@@ -97980,31 +98559,29 @@ function buildTaskRef(section, taskLabel) {
|
|
|
97980
98559
|
title
|
|
97981
98560
|
};
|
|
97982
98561
|
}
|
|
98562
|
+
function parseOpeningFence(line) {
|
|
98563
|
+
const match = line.match(FENCE_PATTERN);
|
|
98564
|
+
const run = match?.[1];
|
|
98565
|
+
const info = match?.[2];
|
|
98566
|
+
const marker = run?.charAt(0);
|
|
98567
|
+
if (run === undefined || info === undefined || marker !== "`" && marker !== "~" || marker === "`" && info.includes("`")) {
|
|
98568
|
+
return null;
|
|
98569
|
+
}
|
|
98570
|
+
return { marker, length: run.length };
|
|
98571
|
+
}
|
|
98572
|
+
function isClosingFence(line, fence) {
|
|
98573
|
+
const run = line.match(/^[ \t]{0,3}(`{3,}|~{3,})[ \t]*$/)?.[1];
|
|
98574
|
+
return run?.charAt(0) === fence.marker && run.length >= fence.length;
|
|
98575
|
+
}
|
|
98576
|
+
// packages/boulder-state/src/top-level-task.ts
|
|
98577
|
+
import { existsSync as existsSync37, readFileSync as readFileSync19 } from "fs";
|
|
97983
98578
|
function readCurrentTopLevelTask(planPath) {
|
|
97984
98579
|
if (!existsSync37(planPath)) {
|
|
97985
98580
|
return null;
|
|
97986
98581
|
}
|
|
97987
98582
|
try {
|
|
97988
98583
|
const content = readFileSync19(planPath, "utf-8");
|
|
97989
|
-
|
|
97990
|
-
let section = "other";
|
|
97991
|
-
for (const line of lines) {
|
|
97992
|
-
if (SECOND_LEVEL_HEADING_PATTERN.test(line)) {
|
|
97993
|
-
section = TODO_HEADING_PATTERN.test(line) ? "todo" : FINAL_VERIFICATION_HEADING_PATTERN.test(line) ? "final-wave" : "other";
|
|
97994
|
-
}
|
|
97995
|
-
const uncheckedTaskMatch = line.match(UNCHECKED_CHECKBOX_PATTERN);
|
|
97996
|
-
if (!uncheckedTaskMatch || uncheckedTaskMatch[1].length > 0) {
|
|
97997
|
-
continue;
|
|
97998
|
-
}
|
|
97999
|
-
if (section !== "todo" && section !== "final-wave") {
|
|
98000
|
-
continue;
|
|
98001
|
-
}
|
|
98002
|
-
const taskRef = buildTaskRef(section, uncheckedTaskMatch[2].trim());
|
|
98003
|
-
if (taskRef) {
|
|
98004
|
-
return taskRef;
|
|
98005
|
-
}
|
|
98006
|
-
}
|
|
98007
|
-
return null;
|
|
98584
|
+
return parseCurrentTopLevelTask(content);
|
|
98008
98585
|
} catch {
|
|
98009
98586
|
return null;
|
|
98010
98587
|
}
|
|
@@ -98038,69 +98615,25 @@ function resolveBoulderPlanPathForWork(directory, work) {
|
|
|
98038
98615
|
}
|
|
98039
98616
|
// packages/boulder-state/src/storage/plan-progress.ts
|
|
98040
98617
|
import { existsSync as existsSync39, readFileSync as readFileSync20, readdirSync as readdirSync5, statSync as statSync5 } from "fs";
|
|
98041
|
-
var TODO_HEADING_PATTERN2 = /^##\s+TODOs\b/i;
|
|
98042
|
-
var FINAL_VERIFICATION_HEADING_PATTERN2 = /^##\s+Final Verification Wave\b/i;
|
|
98043
|
-
var SECOND_LEVEL_HEADING_PATTERN2 = /^##\s+/;
|
|
98044
|
-
var UNCHECKED_CHECKBOX_PATTERN2 = /^(\s*)[-*]\s*\[\s*\]\s*(.+)$/;
|
|
98045
|
-
var CHECKED_CHECKBOX_PATTERN = /^(\s*)[-*]\s*\[[xX]\]\s*(.+)$/;
|
|
98046
|
-
var TODO_TASK_PATTERN2 = /^\d+\.\s+/;
|
|
98047
|
-
var FINAL_WAVE_TASK_PATTERN2 = /^F\d+\.\s+/i;
|
|
98048
98618
|
function getPlanProgress(planPath) {
|
|
98049
98619
|
if (!existsSync39(planPath)) {
|
|
98050
98620
|
return { total: 0, completed: 0, isComplete: false };
|
|
98051
98621
|
}
|
|
98052
98622
|
try {
|
|
98053
98623
|
const content = readFileSync20(planPath, "utf-8");
|
|
98054
|
-
const
|
|
98055
|
-
|
|
98056
|
-
|
|
98057
|
-
|
|
98058
|
-
|
|
98059
|
-
|
|
98624
|
+
const checklist = parsePlanChecklist(content);
|
|
98625
|
+
return {
|
|
98626
|
+
total: checklist.total,
|
|
98627
|
+
completed: checklist.completed,
|
|
98628
|
+
isComplete: checklist.total > 0 && checklist.remaining === 0
|
|
98629
|
+
};
|
|
98060
98630
|
} catch {
|
|
98061
98631
|
return { total: 0, completed: 0, isComplete: false };
|
|
98062
98632
|
}
|
|
98063
98633
|
}
|
|
98064
|
-
function getStructuredPlanProgress(lines) {
|
|
98065
|
-
let section = "other";
|
|
98066
|
-
let total = 0;
|
|
98067
|
-
let completed = 0;
|
|
98068
|
-
for (const line of lines) {
|
|
98069
|
-
if (SECOND_LEVEL_HEADING_PATTERN2.test(line)) {
|
|
98070
|
-
section = TODO_HEADING_PATTERN2.test(line) ? "todo" : FINAL_VERIFICATION_HEADING_PATTERN2.test(line) ? "final-wave" : "other";
|
|
98071
|
-
continue;
|
|
98072
|
-
}
|
|
98073
|
-
if (section !== "todo" && section !== "final-wave") {
|
|
98074
|
-
continue;
|
|
98075
|
-
}
|
|
98076
|
-
const checkedMatch = line.match(CHECKED_CHECKBOX_PATTERN);
|
|
98077
|
-
const uncheckedMatch = checkedMatch ? null : line.match(UNCHECKED_CHECKBOX_PATTERN2);
|
|
98078
|
-
const match = checkedMatch ?? uncheckedMatch;
|
|
98079
|
-
if (!match || match[1].length > 0) {
|
|
98080
|
-
continue;
|
|
98081
|
-
}
|
|
98082
|
-
const taskBody = match[2].trim();
|
|
98083
|
-
const labelPattern = section === "todo" ? TODO_TASK_PATTERN2 : FINAL_WAVE_TASK_PATTERN2;
|
|
98084
|
-
if (!labelPattern.test(taskBody)) {
|
|
98085
|
-
continue;
|
|
98086
|
-
}
|
|
98087
|
-
total += 1;
|
|
98088
|
-
if (checkedMatch) {
|
|
98089
|
-
completed += 1;
|
|
98090
|
-
}
|
|
98091
|
-
}
|
|
98092
|
-
return { total, completed, isComplete: total > 0 && completed === total };
|
|
98093
|
-
}
|
|
98094
|
-
function getSimplePlanProgress(content) {
|
|
98095
|
-
const uncheckedMatches = content.match(/^[-*]\s*\[\s*\]/gm) ?? [];
|
|
98096
|
-
const checkedMatches = content.match(/^[-*]\s*\[[xX]\]/gm) ?? [];
|
|
98097
|
-
const total = uncheckedMatches.length + checkedMatches.length;
|
|
98098
|
-
const completed = checkedMatches.length;
|
|
98099
|
-
return { total, completed, isComplete: total > 0 && completed === total };
|
|
98100
|
-
}
|
|
98101
98634
|
// packages/boulder-state/src/storage/shared.ts
|
|
98102
98635
|
var RESERVED_KEYS = new Set(["__proto__", "prototype", "constructor"]);
|
|
98103
|
-
var SESSION_ID_PREFIX_PATTERN = /^(codex|opencode):/;
|
|
98636
|
+
var SESSION_ID_PREFIX_PATTERN = /^(codex|opencode|senpi):/;
|
|
98104
98637
|
function normalizeSessionId(sessionId, platform = "opencode") {
|
|
98105
98638
|
if (SESSION_ID_PREFIX_PATTERN.test(sessionId)) {
|
|
98106
98639
|
return sessionId;
|
|
@@ -98175,7 +98708,7 @@ function readBoulderState(directory) {
|
|
|
98175
98708
|
try {
|
|
98176
98709
|
const content = readFileSync21(filePath, "utf-8");
|
|
98177
98710
|
const parsed = JSON.parse(content);
|
|
98178
|
-
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
98711
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed) || Object.keys(parsed).length === 0) {
|
|
98179
98712
|
return null;
|
|
98180
98713
|
}
|
|
98181
98714
|
normalizeState(parsed);
|
|
@@ -100132,6 +100665,7 @@ import { readFileSync as readFileSync35 } from "fs";
|
|
|
100132
100665
|
import { homedir as homedir16 } from "os";
|
|
100133
100666
|
import { dirname as dirname29, relative as relative9 } from "path";
|
|
100134
100667
|
init_shared();
|
|
100668
|
+
init_logger2();
|
|
100135
100669
|
init_plugin_identity();
|
|
100136
100670
|
function resolveHomeDirectory2() {
|
|
100137
100671
|
return process.env.HOME ?? process.env.USERPROFILE ?? homedir16();
|
|
@@ -100220,13 +100754,45 @@ function mergeLoadedConfig(userLayersNearestFirst, projectLayersNearestFirst) {
|
|
|
100220
100754
|
config3 = mergeConfigs2(config3, layer.config);
|
|
100221
100755
|
}
|
|
100222
100756
|
const userMcpEnvAllowlist = config3.mcp_env_allowlist ?? [];
|
|
100757
|
+
const userPlaywrightMcpArgs = config3.browser_automation_engine?.playwright_mcp_args;
|
|
100223
100758
|
for (const layer of [...projectLayersNearestFirst].reverse()) {
|
|
100224
100759
|
if (layer.config)
|
|
100225
100760
|
config3 = mergeConfigs2(config3, layer.config);
|
|
100226
100761
|
}
|
|
100227
100762
|
config3 = { ...config3, mcp_env_allowlist: userMcpEnvAllowlist };
|
|
100763
|
+
if (config3.browser_automation_engine) {
|
|
100764
|
+
const {
|
|
100765
|
+
playwright_mcp_args: _projectPlaywrightMcpArgs,
|
|
100766
|
+
...browserAutomationEngine
|
|
100767
|
+
} = config3.browser_automation_engine;
|
|
100768
|
+
config3 = {
|
|
100769
|
+
...config3,
|
|
100770
|
+
browser_automation_engine: userPlaywrightMcpArgs !== undefined ? { ...browserAutomationEngine, playwright_mcp_args: userPlaywrightMcpArgs } : browserAutomationEngine
|
|
100771
|
+
};
|
|
100772
|
+
}
|
|
100228
100773
|
return applyDisabledProviders(config3);
|
|
100229
100774
|
}
|
|
100775
|
+
function migrateRalphLoopConfig(config3) {
|
|
100776
|
+
const legacy = config3.ralph_loop;
|
|
100777
|
+
if (legacy === undefined) {
|
|
100778
|
+
return config3;
|
|
100779
|
+
}
|
|
100780
|
+
const enabled = typeof legacy.enabled === "boolean" ? legacy.enabled : undefined;
|
|
100781
|
+
const defaultMaxIterations = typeof legacy.default_max_iterations === "number" ? legacy.default_max_iterations : undefined;
|
|
100782
|
+
if (enabled === undefined && defaultMaxIterations === undefined) {
|
|
100783
|
+
return config3;
|
|
100784
|
+
}
|
|
100785
|
+
log2("[config] ralph_loop is deprecated and will be removed in a future release. Use goal instead.");
|
|
100786
|
+
const existingGoal = config3.goal;
|
|
100787
|
+
return {
|
|
100788
|
+
...config3,
|
|
100789
|
+
goal: {
|
|
100790
|
+
enabled: existingGoal?.enabled ?? enabled ?? false,
|
|
100791
|
+
auto_start: existingGoal?.auto_start ?? false,
|
|
100792
|
+
default_max_iterations: existingGoal?.default_max_iterations ?? defaultMaxIterations ?? 100
|
|
100793
|
+
}
|
|
100794
|
+
};
|
|
100795
|
+
}
|
|
100230
100796
|
function validatePluginConfig(directory) {
|
|
100231
100797
|
const userLayersNearestFirst = discoverUserLayers().map((layer) => parseLayerConfig(layer.path));
|
|
100232
100798
|
const projectLayersNearestFirst = discoverProjectLayersNearestFirst(directory).map((layer) => parseLayerConfig(layer.path));
|
|
@@ -100236,7 +100802,7 @@ function validatePluginConfig(directory) {
|
|
|
100236
100802
|
valid: messages.length === 0,
|
|
100237
100803
|
messages,
|
|
100238
100804
|
path: firstFailingPath(layers) ?? firstPath(layers),
|
|
100239
|
-
config: mergeLoadedConfig(userLayersNearestFirst, projectLayersNearestFirst)
|
|
100805
|
+
config: migrateRalphLoopConfig(mergeLoadedConfig(userLayersNearestFirst, projectLayersNearestFirst))
|
|
100240
100806
|
};
|
|
100241
100807
|
}
|
|
100242
100808
|
|
|
@@ -101547,10 +102113,10 @@ async function gatherCodexSummary(deps = {}) {
|
|
|
101547
102113
|
const binDir = resolveCodexInstallerBinDir({ binDir: deps.binDir, codexHome, env: process.env });
|
|
101548
102114
|
const detection = await (deps.detectCodexInstallation ?? detectCodexInstallation)();
|
|
101549
102115
|
const pluginRoot = await resolveInstalledPluginRoot(codexHome);
|
|
101550
|
-
const
|
|
102116
|
+
const manifest2 = pluginRoot === null ? null : await readJson(join82(pluginRoot, ".codex-plugin", "plugin.json"));
|
|
101551
102117
|
const installSnapshot = pluginRoot === null ? null : await readJson(join82(pluginRoot, "lazycodex-install.json"));
|
|
101552
102118
|
const configPath = join82(codexHome, "config.toml");
|
|
101553
|
-
const pluginVersion = stringField(
|
|
102119
|
+
const pluginVersion = stringField(manifest2, "version");
|
|
101554
102120
|
return {
|
|
101555
102121
|
codexPath: detection.found && "path" in detection ? detection.path : null,
|
|
101556
102122
|
codexSource: detection.found ? detection.source : null,
|
|
@@ -101897,12 +102463,12 @@ async function auditBundleTargets(pluginRoot) {
|
|
|
101897
102463
|
const broken = [];
|
|
101898
102464
|
let referencedCount = 0;
|
|
101899
102465
|
for (const manifestPath of await findManifestPaths(pluginRoot, ".mcp.json")) {
|
|
101900
|
-
const
|
|
101901
|
-
if (
|
|
102466
|
+
const manifest2 = await readJson2(manifestPath);
|
|
102467
|
+
if (manifest2 === null || !isRecord6(manifest2["mcpServers"]))
|
|
101902
102468
|
continue;
|
|
101903
102469
|
const manifestRoot = dirname32(manifestPath);
|
|
101904
102470
|
const isRootManifest = resolve23(manifestRoot) === resolve23(pluginRoot);
|
|
101905
|
-
for (const server2 of Object.values(
|
|
102471
|
+
for (const server2 of Object.values(manifest2["mcpServers"])) {
|
|
101906
102472
|
if (!isRecord6(server2) || !Array.isArray(server2["args"]))
|
|
101907
102473
|
continue;
|
|
101908
102474
|
for (const arg of server2["args"]) {
|
|
@@ -101916,11 +102482,11 @@ async function auditBundleTargets(pluginRoot) {
|
|
|
101916
102482
|
}
|
|
101917
102483
|
}
|
|
101918
102484
|
for (const hookManifestPath of await findHookManifestPaths(pluginRoot)) {
|
|
101919
|
-
const
|
|
101920
|
-
if (
|
|
102485
|
+
const manifest2 = await readJson2(hookManifestPath);
|
|
102486
|
+
if (manifest2 === null)
|
|
101921
102487
|
continue;
|
|
101922
102488
|
const commands2 = [];
|
|
101923
|
-
collectHookCommands(
|
|
102489
|
+
collectHookCommands(manifest2, commands2);
|
|
101924
102490
|
const hookPluginRoot = dirname32(dirname32(hookManifestPath));
|
|
101925
102491
|
for (const command of commands2) {
|
|
101926
102492
|
for (const relativePath of extractPluginRootPaths(command)) {
|