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-node/index.js
CHANGED
|
@@ -2146,7 +2146,7 @@ var package_default;
|
|
|
2146
2146
|
var init_package = __esm(() => {
|
|
2147
2147
|
package_default = {
|
|
2148
2148
|
name: "oh-my-opencode",
|
|
2149
|
-
version: "4.
|
|
2149
|
+
version: "4.19.1",
|
|
2150
2150
|
description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
|
|
2151
2151
|
main: "./dist/index.js",
|
|
2152
2152
|
types: "dist/index.d.ts",
|
|
@@ -2256,7 +2256,7 @@ var init_package = __esm(() => {
|
|
|
2256
2256
|
"install:codex-dev": "bun run script/build-codex-install.ts && bun run script/install-codex-dev.ts",
|
|
2257
2257
|
"build:codex-plugin": "npm --prefix packages/omo-codex/plugin ci && bun run --cwd packages/omo-codex/plugin build",
|
|
2258
2258
|
"build:senpi-plugin": "bun run build:lsp-daemon && bun run build:senpi-plugin:stage",
|
|
2259
|
-
"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",
|
|
2259
|
+
"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",
|
|
2260
2260
|
"build:materialize-frontend": "node packages/omo-codex/plugin/scripts/materialize-shared-upstreams.mjs --strict",
|
|
2261
2261
|
"build:shared-skills-assets": "bun run build:materialize-frontend && rm -rf dist/skills && cp -R packages/shared-skills/skills dist/skills",
|
|
2262
2262
|
"build:lsp-tools-mcp": "npm --prefix packages/lsp-tools-mcp ci && npm --prefix packages/lsp-tools-mcp run build",
|
|
@@ -2358,18 +2358,18 @@ var init_package = __esm(() => {
|
|
|
2358
2358
|
typescript: "^6.0.3"
|
|
2359
2359
|
},
|
|
2360
2360
|
optionalDependencies: {
|
|
2361
|
-
"oh-my-opencode-darwin-arm64": "4.
|
|
2362
|
-
"oh-my-opencode-darwin-x64": "4.
|
|
2363
|
-
"oh-my-opencode-darwin-x64-baseline": "4.
|
|
2364
|
-
"oh-my-opencode-linux-arm64": "4.
|
|
2365
|
-
"oh-my-opencode-linux-arm64-musl": "4.
|
|
2366
|
-
"oh-my-opencode-linux-x64": "4.
|
|
2367
|
-
"oh-my-opencode-linux-x64-baseline": "4.
|
|
2368
|
-
"oh-my-opencode-linux-x64-musl": "4.
|
|
2369
|
-
"oh-my-opencode-linux-x64-musl-baseline": "4.
|
|
2370
|
-
"oh-my-opencode-windows-arm64": "4.
|
|
2371
|
-
"oh-my-opencode-windows-x64": "4.
|
|
2372
|
-
"oh-my-opencode-windows-x64-baseline": "4.
|
|
2361
|
+
"oh-my-opencode-darwin-arm64": "4.19.1",
|
|
2362
|
+
"oh-my-opencode-darwin-x64": "4.19.1",
|
|
2363
|
+
"oh-my-opencode-darwin-x64-baseline": "4.19.1",
|
|
2364
|
+
"oh-my-opencode-linux-arm64": "4.19.1",
|
|
2365
|
+
"oh-my-opencode-linux-arm64-musl": "4.19.1",
|
|
2366
|
+
"oh-my-opencode-linux-x64": "4.19.1",
|
|
2367
|
+
"oh-my-opencode-linux-x64-baseline": "4.19.1",
|
|
2368
|
+
"oh-my-opencode-linux-x64-musl": "4.19.1",
|
|
2369
|
+
"oh-my-opencode-linux-x64-musl-baseline": "4.19.1",
|
|
2370
|
+
"oh-my-opencode-windows-arm64": "4.19.1",
|
|
2371
|
+
"oh-my-opencode-windows-x64": "4.19.1",
|
|
2372
|
+
"oh-my-opencode-windows-x64-baseline": "4.19.1"
|
|
2373
2373
|
},
|
|
2374
2374
|
overrides: {
|
|
2375
2375
|
"@earendil-works/pi-agent-core": "0.80.3",
|
|
@@ -7427,6 +7427,7 @@ var init_env = __esm(() => {
|
|
|
7427
7427
|
SAFE_CODEGRAPH_RUNTIME_ENV_KEYS = new Set([
|
|
7428
7428
|
"CODEGRAPH_ALLOW_UNSAFE_NODE",
|
|
7429
7429
|
"CODEGRAPH_BIN",
|
|
7430
|
+
"CODEGRAPH_DAEMON_IDLE_TIMEOUT_MS",
|
|
7430
7431
|
"CODEGRAPH_FAKE_LOG",
|
|
7431
7432
|
"CODEGRAPH_NO_DAEMON",
|
|
7432
7433
|
"CODEGRAPH_NODE_BIN",
|
|
@@ -7442,6 +7443,9 @@ var init_workspace = () => {};
|
|
|
7442
7443
|
// packages/utils/src/codegraph/guidance.ts
|
|
7443
7444
|
var init_guidance = () => {};
|
|
7444
7445
|
|
|
7446
|
+
// packages/utils/src/codegraph/manifest.ts
|
|
7447
|
+
var init_manifest = () => {};
|
|
7448
|
+
|
|
7445
7449
|
// packages/utils/src/codegraph/node-support.ts
|
|
7446
7450
|
function evaluateCodegraphNodeSupport(options = {}) {
|
|
7447
7451
|
const nodeVersion = options.nodeVersion ?? process.versions.node;
|
|
@@ -7570,6 +7574,7 @@ var init_resolve2 = __esm(() => {
|
|
|
7570
7574
|
var init_codegraph = __esm(() => {
|
|
7571
7575
|
init_env();
|
|
7572
7576
|
init_guidance();
|
|
7577
|
+
init_manifest();
|
|
7573
7578
|
init_provision();
|
|
7574
7579
|
init_process_sweep();
|
|
7575
7580
|
init_resolve2();
|
|
@@ -7748,7 +7753,7 @@ function migrateModelVersions(configs, appliedMigrations) {
|
|
|
7748
7753
|
var MODEL_VERSION_MAP, CURRENT_USER_SELECTABLE_MODELS;
|
|
7749
7754
|
var init_model_versions = __esm(() => {
|
|
7750
7755
|
MODEL_VERSION_MAP = {
|
|
7751
|
-
"anthropic/claude-opus-4-4": "anthropic/claude-opus-4-
|
|
7756
|
+
"anthropic/claude-opus-4-4": "anthropic/claude-opus-4-8"
|
|
7752
7757
|
};
|
|
7753
7758
|
CURRENT_USER_SELECTABLE_MODELS = new Set([
|
|
7754
7759
|
"anthropic/claude-opus-4-5",
|
|
@@ -9196,25 +9201,25 @@ var init_agent_model_requirements = __esm(() => {
|
|
|
9196
9201
|
fallbackChain: [
|
|
9197
9202
|
{
|
|
9198
9203
|
providers: ["anthropic", "github-copilot", "opencode", "vercel"],
|
|
9199
|
-
model: "claude-opus-4-
|
|
9204
|
+
model: "claude-opus-4-8",
|
|
9200
9205
|
variant: "max"
|
|
9201
9206
|
},
|
|
9202
|
-
{ providers: ["opencode-go", "vercel"], model: "kimi-k2.6" },
|
|
9203
|
-
{ providers: ["kimi-for-coding"], model: "k2p5" },
|
|
9204
9207
|
{
|
|
9205
9208
|
providers: [
|
|
9209
|
+
"opencode-go",
|
|
9210
|
+
"kimi-for-coding",
|
|
9211
|
+
"moonshotai",
|
|
9206
9212
|
"opencode",
|
|
9213
|
+
"vercel",
|
|
9207
9214
|
"bailian-coding-plan",
|
|
9208
|
-
"moonshotai",
|
|
9209
9215
|
"moonshotai-cn",
|
|
9210
9216
|
"firmware",
|
|
9211
9217
|
"ollama-cloud",
|
|
9212
|
-
"aihubmix"
|
|
9213
|
-
"vercel"
|
|
9218
|
+
"aihubmix"
|
|
9214
9219
|
],
|
|
9215
|
-
model: "kimi-
|
|
9220
|
+
model: "kimi-k3"
|
|
9216
9221
|
},
|
|
9217
|
-
{ providers: ["openai", "github-copilot", "opencode", "vercel"], model: "gpt-5.
|
|
9222
|
+
{ providers: ["openai", "github-copilot", "opencode", "vercel"], model: "gpt-5.6-sol", variant: "medium" },
|
|
9218
9223
|
{ providers: ["zai-coding-plan", "opencode", "bailian-coding-plan", "vercel"], model: "glm-5" },
|
|
9219
9224
|
{ providers: ["opencode"], model: "big-pickle" }
|
|
9220
9225
|
],
|
|
@@ -9223,13 +9228,8 @@ var init_agent_model_requirements = __esm(() => {
|
|
|
9223
9228
|
hephaestus: {
|
|
9224
9229
|
fallbackChain: [
|
|
9225
9230
|
{
|
|
9226
|
-
providers: ["openai", "github-copilot", "vercel"],
|
|
9231
|
+
providers: ["openai", "github-copilot", "vercel", "opencode"],
|
|
9227
9232
|
model: "gpt-5.6-sol",
|
|
9228
|
-
variant: "high"
|
|
9229
|
-
},
|
|
9230
|
-
{
|
|
9231
|
-
providers: ["openai", "github-copilot", "opencode", "vercel"],
|
|
9232
|
-
model: "gpt-5.5",
|
|
9233
9233
|
variant: "medium"
|
|
9234
9234
|
}
|
|
9235
9235
|
],
|
|
@@ -9239,8 +9239,13 @@ var init_agent_model_requirements = __esm(() => {
|
|
|
9239
9239
|
oracle: {
|
|
9240
9240
|
fallbackChain: [
|
|
9241
9241
|
{
|
|
9242
|
-
providers: ["openai", "
|
|
9243
|
-
model: "gpt-5.
|
|
9242
|
+
providers: ["openai", "opencode", "vercel"],
|
|
9243
|
+
model: "gpt-5.6-sol",
|
|
9244
|
+
variant: "xhigh"
|
|
9245
|
+
},
|
|
9246
|
+
{
|
|
9247
|
+
providers: ["github-copilot"],
|
|
9248
|
+
model: "gpt-5.6-sol",
|
|
9244
9249
|
variant: "high"
|
|
9245
9250
|
},
|
|
9246
9251
|
{
|
|
@@ -9250,7 +9255,7 @@ var init_agent_model_requirements = __esm(() => {
|
|
|
9250
9255
|
},
|
|
9251
9256
|
{
|
|
9252
9257
|
providers: ["anthropic", "github-copilot", "opencode", "vercel"],
|
|
9253
|
-
model: "claude-opus-4-
|
|
9258
|
+
model: "claude-opus-4-8",
|
|
9254
9259
|
variant: "max"
|
|
9255
9260
|
},
|
|
9256
9261
|
{ providers: ["opencode-go", "vercel"], model: "glm-5.2" }
|
|
@@ -9282,8 +9287,8 @@ var init_agent_model_requirements = __esm(() => {
|
|
|
9282
9287
|
},
|
|
9283
9288
|
"multimodal-looker": {
|
|
9284
9289
|
fallbackChain: [
|
|
9285
|
-
{ providers: ["openai", "opencode", "vercel"], model: "gpt-5.
|
|
9286
|
-
{ providers: ["opencode-go", "vercel"], model: "kimi-
|
|
9290
|
+
{ providers: ["openai", "opencode", "vercel"], model: "gpt-5.6-sol", variant: "low" },
|
|
9291
|
+
{ providers: ["opencode-go", "vercel"], model: "kimi-k3" },
|
|
9287
9292
|
{ providers: ["zai-coding-plan", "vercel"], model: "glm-4.6v" },
|
|
9288
9293
|
{ providers: ["openai", "github-copilot", "opencode", "vercel"], model: "gpt-5-nano" }
|
|
9289
9294
|
]
|
|
@@ -9292,12 +9297,12 @@ var init_agent_model_requirements = __esm(() => {
|
|
|
9292
9297
|
fallbackChain: [
|
|
9293
9298
|
{
|
|
9294
9299
|
providers: ["anthropic", "github-copilot", "opencode", "vercel"],
|
|
9295
|
-
model: "claude-opus-4-
|
|
9300
|
+
model: "claude-opus-4-8",
|
|
9296
9301
|
variant: "max"
|
|
9297
9302
|
},
|
|
9298
9303
|
{
|
|
9299
9304
|
providers: ["openai", "github-copilot", "opencode", "vercel"],
|
|
9300
|
-
model: "gpt-5.
|
|
9305
|
+
model: "gpt-5.6-sol",
|
|
9301
9306
|
variant: "high"
|
|
9302
9307
|
},
|
|
9303
9308
|
{ providers: ["opencode-go", "vercel"], model: "glm-5.2" },
|
|
@@ -9315,38 +9320,43 @@ var init_agent_model_requirements = __esm(() => {
|
|
|
9315
9320
|
},
|
|
9316
9321
|
{
|
|
9317
9322
|
providers: ["anthropic", "github-copilot", "opencode", "vercel"],
|
|
9318
|
-
model: "claude-opus-4-
|
|
9323
|
+
model: "claude-opus-4-8",
|
|
9319
9324
|
variant: "max"
|
|
9320
9325
|
},
|
|
9321
9326
|
{
|
|
9322
9327
|
providers: ["openai", "github-copilot", "opencode", "vercel"],
|
|
9323
|
-
model: "gpt-5.
|
|
9324
|
-
variant: "
|
|
9328
|
+
model: "gpt-5.6-sol",
|
|
9329
|
+
variant: "medium"
|
|
9325
9330
|
},
|
|
9326
9331
|
{ providers: ["opencode-go", "vercel"], model: "glm-5.2" },
|
|
9327
|
-
{ providers: ["kimi-for-coding"], model: "
|
|
9332
|
+
{ providers: ["kimi-for-coding"], model: "kimi-k3" }
|
|
9328
9333
|
]
|
|
9329
9334
|
},
|
|
9330
9335
|
momus: {
|
|
9331
9336
|
fallbackChain: [
|
|
9332
9337
|
{
|
|
9333
9338
|
providers: ["openai", "vercel"],
|
|
9334
|
-
model: "gpt-5.6-
|
|
9335
|
-
variant: "
|
|
9339
|
+
model: "gpt-5.6-terra",
|
|
9340
|
+
variant: "high"
|
|
9336
9341
|
},
|
|
9337
9342
|
{
|
|
9338
9343
|
providers: ["github-copilot"],
|
|
9339
|
-
model: "gpt-5.6-
|
|
9344
|
+
model: "gpt-5.6-terra",
|
|
9340
9345
|
variant: "high"
|
|
9341
9346
|
},
|
|
9342
9347
|
{
|
|
9343
|
-
providers: ["openai", "
|
|
9344
|
-
model: "gpt-5.
|
|
9348
|
+
providers: ["openai", "opencode", "vercel"],
|
|
9349
|
+
model: "gpt-5.6-sol",
|
|
9345
9350
|
variant: "xhigh"
|
|
9346
9351
|
},
|
|
9352
|
+
{
|
|
9353
|
+
providers: ["github-copilot"],
|
|
9354
|
+
model: "gpt-5.6-sol",
|
|
9355
|
+
variant: "high"
|
|
9356
|
+
},
|
|
9347
9357
|
{
|
|
9348
9358
|
providers: ["anthropic", "github-copilot", "opencode", "vercel"],
|
|
9349
|
-
model: "claude-opus-4-
|
|
9359
|
+
model: "claude-opus-4-8",
|
|
9350
9360
|
variant: "max"
|
|
9351
9361
|
},
|
|
9352
9362
|
{
|
|
@@ -9360,10 +9370,10 @@ var init_agent_model_requirements = __esm(() => {
|
|
|
9360
9370
|
atlas: {
|
|
9361
9371
|
fallbackChain: [
|
|
9362
9372
|
{ providers: ["anthropic", "github-copilot", "opencode", "vercel"], model: "claude-sonnet-4-6" },
|
|
9363
|
-
{ providers: ["opencode-go", "vercel"], model: "kimi-
|
|
9373
|
+
{ providers: ["opencode-go", "vercel"], model: "kimi-k3" },
|
|
9364
9374
|
{
|
|
9365
9375
|
providers: ["openai", "github-copilot", "opencode", "vercel"],
|
|
9366
|
-
model: "gpt-5.
|
|
9376
|
+
model: "gpt-5.6-sol",
|
|
9367
9377
|
variant: "medium"
|
|
9368
9378
|
},
|
|
9369
9379
|
{ providers: ["opencode-go", "vercel"], model: "minimax-m3" },
|
|
@@ -9374,10 +9384,10 @@ var init_agent_model_requirements = __esm(() => {
|
|
|
9374
9384
|
"sisyphus-junior": {
|
|
9375
9385
|
fallbackChain: [
|
|
9376
9386
|
{ providers: ["anthropic", "github-copilot", "opencode", "vercel"], model: "claude-sonnet-4-6" },
|
|
9377
|
-
{ providers: ["opencode-go", "vercel"], model: "kimi-
|
|
9387
|
+
{ providers: ["opencode-go", "vercel"], model: "kimi-k3" },
|
|
9378
9388
|
{
|
|
9379
9389
|
providers: ["openai", "github-copilot", "opencode", "vercel"],
|
|
9380
|
-
model: "gpt-5.
|
|
9390
|
+
model: "gpt-5.6-sol",
|
|
9381
9391
|
variant: "medium"
|
|
9382
9392
|
},
|
|
9383
9393
|
{ providers: ["opencode-go", "vercel"], model: "minimax-m3" },
|
|
@@ -9403,11 +9413,11 @@ var init_category_model_requirements = __esm(() => {
|
|
|
9403
9413
|
{ providers: ["zai-coding-plan", "opencode", "bailian-coding-plan", "vercel"], model: "glm-5" },
|
|
9404
9414
|
{
|
|
9405
9415
|
providers: ["anthropic", "github-copilot", "opencode", "vercel"],
|
|
9406
|
-
model: "claude-opus-4-
|
|
9416
|
+
model: "claude-opus-4-8",
|
|
9407
9417
|
variant: "max"
|
|
9408
9418
|
},
|
|
9409
9419
|
{ providers: ["opencode-go", "vercel"], model: "glm-5.2" },
|
|
9410
|
-
{ providers: ["kimi-for-coding"], model: "
|
|
9420
|
+
{ providers: ["kimi-for-coding"], model: "kimi-k3" }
|
|
9411
9421
|
]
|
|
9412
9422
|
},
|
|
9413
9423
|
ultrabrain: {
|
|
@@ -9424,7 +9434,7 @@ var init_category_model_requirements = __esm(() => {
|
|
|
9424
9434
|
},
|
|
9425
9435
|
{
|
|
9426
9436
|
providers: ["openai", "opencode", "vercel"],
|
|
9427
|
-
model: "gpt-5.
|
|
9437
|
+
model: "gpt-5.6-sol",
|
|
9428
9438
|
variant: "xhigh"
|
|
9429
9439
|
},
|
|
9430
9440
|
{
|
|
@@ -9434,7 +9444,7 @@ var init_category_model_requirements = __esm(() => {
|
|
|
9434
9444
|
},
|
|
9435
9445
|
{
|
|
9436
9446
|
providers: ["anthropic", "github-copilot", "opencode", "vercel"],
|
|
9437
|
-
model: "claude-opus-4-
|
|
9447
|
+
model: "claude-opus-4-8",
|
|
9438
9448
|
variant: "max"
|
|
9439
9449
|
},
|
|
9440
9450
|
{ providers: ["opencode-go", "vercel"], model: "glm-5.2" }
|
|
@@ -9459,12 +9469,12 @@ var init_category_model_requirements = __esm(() => {
|
|
|
9459
9469
|
},
|
|
9460
9470
|
{
|
|
9461
9471
|
providers: ["openai", "github-copilot", "opencode", "vercel"],
|
|
9462
|
-
model: "gpt-5.
|
|
9472
|
+
model: "gpt-5.6-sol",
|
|
9463
9473
|
variant: "medium"
|
|
9464
9474
|
},
|
|
9465
9475
|
{
|
|
9466
9476
|
providers: ["anthropic", "github-copilot", "opencode", "vercel"],
|
|
9467
|
-
model: "claude-opus-4-
|
|
9477
|
+
model: "claude-opus-4-8",
|
|
9468
9478
|
variant: "max"
|
|
9469
9479
|
},
|
|
9470
9480
|
{
|
|
@@ -9472,7 +9482,7 @@ var init_category_model_requirements = __esm(() => {
|
|
|
9472
9482
|
model: "gemini-3.1-pro",
|
|
9473
9483
|
variant: "high"
|
|
9474
9484
|
},
|
|
9475
|
-
{ providers: ["opencode-go", "vercel"], model: "kimi-
|
|
9485
|
+
{ providers: ["opencode-go", "vercel"], model: "kimi-k3" },
|
|
9476
9486
|
{ providers: ["opencode-go", "vercel"], model: "glm-5.2" }
|
|
9477
9487
|
]
|
|
9478
9488
|
},
|
|
@@ -9485,11 +9495,11 @@ var init_category_model_requirements = __esm(() => {
|
|
|
9485
9495
|
},
|
|
9486
9496
|
{
|
|
9487
9497
|
providers: ["anthropic", "github-copilot", "opencode", "vercel"],
|
|
9488
|
-
model: "claude-opus-4-
|
|
9498
|
+
model: "claude-opus-4-8",
|
|
9489
9499
|
variant: "max"
|
|
9490
9500
|
},
|
|
9491
|
-
{ providers: ["openai", "github-copilot", "opencode", "vercel"], model: "gpt-5.
|
|
9492
|
-
{ providers: ["opencode-go", "vercel"], model: "kimi-
|
|
9501
|
+
{ providers: ["openai", "github-copilot", "opencode", "vercel"], model: "gpt-5.6-sol", variant: "high" },
|
|
9502
|
+
{ providers: ["opencode-go", "vercel"], model: "kimi-k3" },
|
|
9493
9503
|
{ providers: ["opencode-go", "vercel"], model: "glm-5.2" }
|
|
9494
9504
|
]
|
|
9495
9505
|
},
|
|
@@ -9531,10 +9541,10 @@ var init_category_model_requirements = __esm(() => {
|
|
|
9531
9541
|
},
|
|
9532
9542
|
{
|
|
9533
9543
|
providers: ["openai", "opencode", "vercel"],
|
|
9534
|
-
model: "gpt-5.
|
|
9544
|
+
model: "gpt-5.6-sol",
|
|
9535
9545
|
variant: "medium"
|
|
9536
9546
|
},
|
|
9537
|
-
{ providers: ["opencode-go", "vercel"], model: "kimi-
|
|
9547
|
+
{ providers: ["opencode-go", "vercel"], model: "kimi-k3" },
|
|
9538
9548
|
{
|
|
9539
9549
|
providers: ["google", "github-copilot", "opencode", "vercel"],
|
|
9540
9550
|
model: "gemini-3-flash"
|
|
@@ -9548,30 +9558,29 @@ var init_category_model_requirements = __esm(() => {
|
|
|
9548
9558
|
fallbackChain: [
|
|
9549
9559
|
{
|
|
9550
9560
|
providers: ["anthropic", "github-copilot", "opencode", "vercel"],
|
|
9551
|
-
model: "claude-opus-4-
|
|
9561
|
+
model: "claude-opus-4-8",
|
|
9552
9562
|
variant: "max"
|
|
9553
9563
|
},
|
|
9554
9564
|
{
|
|
9555
9565
|
providers: ["openai", "github-copilot", "opencode", "vercel"],
|
|
9556
|
-
model: "gpt-5.
|
|
9566
|
+
model: "gpt-5.6-sol",
|
|
9557
9567
|
variant: "high"
|
|
9558
9568
|
},
|
|
9559
9569
|
{ providers: ["zai-coding-plan", "opencode", "bailian-coding-plan", "vercel"], model: "glm-5" },
|
|
9560
|
-
{ providers: ["kimi-for-coding"], model: "
|
|
9570
|
+
{ providers: ["kimi-for-coding"], model: "kimi-k3" },
|
|
9561
9571
|
{ providers: ["opencode-go", "vercel"], model: "glm-5.2" },
|
|
9562
|
-
{ providers: ["opencode", "bailian-coding-plan", "vercel"], model: "kimi-k2.5" },
|
|
9563
9572
|
{
|
|
9564
9573
|
providers: [
|
|
9565
9574
|
"opencode",
|
|
9566
9575
|
"bailian-coding-plan",
|
|
9576
|
+
"vercel",
|
|
9567
9577
|
"moonshotai",
|
|
9568
9578
|
"moonshotai-cn",
|
|
9569
9579
|
"firmware",
|
|
9570
9580
|
"ollama-cloud",
|
|
9571
|
-
"aihubmix"
|
|
9572
|
-
"vercel"
|
|
9581
|
+
"aihubmix"
|
|
9573
9582
|
],
|
|
9574
|
-
model: "kimi-
|
|
9583
|
+
model: "kimi-k3"
|
|
9575
9584
|
}
|
|
9576
9585
|
]
|
|
9577
9586
|
},
|
|
@@ -9581,7 +9590,7 @@ var init_category_model_requirements = __esm(() => {
|
|
|
9581
9590
|
providers: ["google", "github-copilot", "opencode", "vercel"],
|
|
9582
9591
|
model: "gemini-3-flash"
|
|
9583
9592
|
},
|
|
9584
|
-
{ providers: ["opencode-go", "vercel"], model: "kimi-
|
|
9593
|
+
{ providers: ["opencode-go", "vercel"], model: "kimi-k3" },
|
|
9585
9594
|
{
|
|
9586
9595
|
providers: ["anthropic", "github-copilot", "opencode", "vercel"],
|
|
9587
9596
|
model: "claude-sonnet-4-6"
|
|
@@ -10006,7 +10015,7 @@ var CLAUDE_VERSION_DOT, GEMINI_31_PRO_PREVIEW, GEMINI_3_FLASH_PREVIEW;
|
|
|
10006
10015
|
var init_provider_model_id_transform = __esm(() => {
|
|
10007
10016
|
CLAUDE_VERSION_DOT = /claude-(\w+)-(\d+)-(\d+)/g;
|
|
10008
10017
|
GEMINI_31_PRO_PREVIEW = /gemini-3\.1-pro(?!-)/g;
|
|
10009
|
-
GEMINI_3_FLASH_PREVIEW = /gemini-3-flash(?!-)/g;
|
|
10018
|
+
GEMINI_3_FLASH_PREVIEW = /(?<!antigravity-)gemini-3-flash(?!-)/g;
|
|
10010
10019
|
});
|
|
10011
10020
|
|
|
10012
10021
|
// packages/model-core/src/known-variants.ts
|
|
@@ -10099,6 +10108,21 @@ var init_runtime_fallback_model = () => {};
|
|
|
10099
10108
|
var SUPPLEMENTAL_MODEL_CAPABILITIES;
|
|
10100
10109
|
var init_supplemental_entries = __esm(() => {
|
|
10101
10110
|
SUPPLEMENTAL_MODEL_CAPABILITIES = {
|
|
10111
|
+
"kimi-k3": {
|
|
10112
|
+
id: "kimi-k3",
|
|
10113
|
+
family: "kimi",
|
|
10114
|
+
reasoning: true,
|
|
10115
|
+
temperature: true,
|
|
10116
|
+
toolCall: true,
|
|
10117
|
+
modalities: {
|
|
10118
|
+
input: ["text", "image", "video"],
|
|
10119
|
+
output: ["text"]
|
|
10120
|
+
},
|
|
10121
|
+
limit: {
|
|
10122
|
+
context: 262144,
|
|
10123
|
+
output: 262144
|
|
10124
|
+
}
|
|
10125
|
+
},
|
|
10102
10126
|
"kimi-k2.6": {
|
|
10103
10127
|
id: "kimi-k2.6",
|
|
10104
10128
|
family: "kimi",
|
|
@@ -10786,7 +10810,7 @@ var init_anthropic_categories = __esm(() => {
|
|
|
10786
10810
|
ANTHROPIC_CATEGORIES = [
|
|
10787
10811
|
{
|
|
10788
10812
|
name: "unspecified-high",
|
|
10789
|
-
config: { model: "anthropic/claude-opus-4-
|
|
10813
|
+
config: { model: "anthropic/claude-opus-4-8", variant: "max" },
|
|
10790
10814
|
description: "Tasks that don't fit other categories, high effort required",
|
|
10791
10815
|
promptAppend: UNSPECIFIED_HIGH_CATEGORY_PROMPT_APPEND
|
|
10792
10816
|
}
|
|
@@ -10944,7 +10968,7 @@ var init_kimi_categories = __esm(() => {
|
|
|
10944
10968
|
KIMI_CATEGORIES = [
|
|
10945
10969
|
{
|
|
10946
10970
|
name: "writing",
|
|
10947
|
-
config: { model: "kimi-for-coding/
|
|
10971
|
+
config: { model: "kimi-for-coding/kimi-k3" },
|
|
10948
10972
|
description: "Documentation, prose, technical writing",
|
|
10949
10973
|
promptAppend: WRITING_CATEGORY_PROMPT_APPEND
|
|
10950
10974
|
}
|
|
@@ -65173,7 +65197,7 @@ var init_claude_model_mapper = __esm(() => {
|
|
|
65173
65197
|
init_model_normalization2();
|
|
65174
65198
|
CLAUDE_CODE_ALIAS_MAP = new Map([
|
|
65175
65199
|
["sonnet", `${ANTHROPIC_PREFIX}claude-sonnet-4-6`],
|
|
65176
|
-
["opus", `${ANTHROPIC_PREFIX}claude-opus-4-
|
|
65200
|
+
["opus", `${ANTHROPIC_PREFIX}claude-opus-4-8`],
|
|
65177
65201
|
["haiku", `${ANTHROPIC_PREFIX}claude-haiku-4-5`]
|
|
65178
65202
|
]);
|
|
65179
65203
|
});
|
|
@@ -65980,10 +66004,10 @@ var init_openai_only_model_catalog = __esm(() => {
|
|
|
65980
66004
|
librarian: { model: "openai/gpt-5.4-mini-fast" }
|
|
65981
66005
|
};
|
|
65982
66006
|
OPENAI_ONLY_CATEGORY_OVERRIDES = {
|
|
65983
|
-
artistry: { model: "openai/gpt-5.
|
|
66007
|
+
artistry: { model: "openai/gpt-5.6-sol", variant: "xhigh" },
|
|
65984
66008
|
quick: { model: "openai/gpt-5.4-mini" },
|
|
65985
|
-
"visual-engineering": { model: "openai/gpt-5.
|
|
65986
|
-
writing: { model: "openai/gpt-5.
|
|
66009
|
+
"visual-engineering": { model: "openai/gpt-5.6-sol", variant: "high" },
|
|
66010
|
+
writing: { model: "openai/gpt-5.6-sol", variant: "medium" }
|
|
65987
66011
|
};
|
|
65988
66012
|
});
|
|
65989
66013
|
|
|
@@ -72697,7 +72721,7 @@ var package_default2;
|
|
|
72697
72721
|
var init_package2 = __esm(() => {
|
|
72698
72722
|
package_default2 = {
|
|
72699
72723
|
name: "@oh-my-opencode/omo-codex",
|
|
72700
|
-
version: "4.
|
|
72724
|
+
version: "4.19.1",
|
|
72701
72725
|
type: "module",
|
|
72702
72726
|
private: true,
|
|
72703
72727
|
description: "Codex harness adapter for oh-my-openagent. Vendored Codex plugin namespace (omo) + TypeScript installer + telemetry.",
|
|
@@ -75085,6 +75109,7 @@ async function rewriteCachedPackageLocalFileDependencies(pluginRoot, sourceRoot)
|
|
|
75085
75109
|
const packageJsonPaths = [];
|
|
75086
75110
|
await collectPackageJsonPaths(pluginRoot, pluginRoot, packageJsonPaths);
|
|
75087
75111
|
const packageLock = await readPackageLock(pluginRoot);
|
|
75112
|
+
let rewroteAnyPackageJson = false;
|
|
75088
75113
|
for (const packageJsonPath of packageJsonPaths) {
|
|
75089
75114
|
const raw = await readFile5(packageJsonPath, "utf8");
|
|
75090
75115
|
const parsed = JSON.parse(raw);
|
|
@@ -75120,13 +75145,16 @@ async function rewriteCachedPackageLocalFileDependencies(pluginRoot, sourceRoot)
|
|
|
75120
75145
|
changed = true;
|
|
75121
75146
|
}
|
|
75122
75147
|
}
|
|
75123
|
-
if (changed)
|
|
75148
|
+
if (changed) {
|
|
75124
75149
|
await writeFile2(packageJsonPath, `${JSON.stringify(parsed, null, "\t")}
|
|
75125
75150
|
`);
|
|
75151
|
+
rewroteAnyPackageJson = true;
|
|
75152
|
+
}
|
|
75126
75153
|
}
|
|
75127
75154
|
if (packageLock.changed)
|
|
75128
75155
|
await writeFile2(packageLock.path, `${JSON.stringify(packageLock.value, null, "\t")}
|
|
75129
75156
|
`);
|
|
75157
|
+
return rewroteAnyPackageJson;
|
|
75130
75158
|
}
|
|
75131
75159
|
async function readPackageLock(pluginRoot) {
|
|
75132
75160
|
const path7 = join30(pluginRoot, "package-lock.json");
|
|
@@ -75432,10 +75460,11 @@ async function installCachedPlugin(input) {
|
|
|
75432
75460
|
await rm4(tempPath, { recursive: true, force: true });
|
|
75433
75461
|
try {
|
|
75434
75462
|
await copyDirectory(input.sourcePath, tempPath);
|
|
75435
|
-
await rewriteCachedPackageLocalFileDependencies(tempPath, input.sourcePath);
|
|
75463
|
+
const rewroteLocalFileDependencies = await rewriteCachedPackageLocalFileDependencies(tempPath, input.sourcePath);
|
|
75436
75464
|
await copyBundledMcpRuntimeDists({ pluginRoot: tempPath, sourceRoot: input.sourcePath });
|
|
75437
75465
|
await copyRootRuntimeDists({ pluginRoot: tempPath, sourcePath: input.sourcePath });
|
|
75438
|
-
|
|
75466
|
+
const installArgs = rewroteLocalFileDependencies ? ["install", "--omit=dev", "--no-audit", "--no-fund"] : ["ci", "--omit=dev"];
|
|
75467
|
+
await maybeRunNpmInstall(tempPath, input.runCommand, npmInstallEnv, installArgs);
|
|
75439
75468
|
await removeCachedManagedNpmBinShims(tempPath);
|
|
75440
75469
|
if (input.buildSource === false)
|
|
75441
75470
|
await maybeRunNpmSyncSkills(tempPath, input.runCommand, env2);
|
|
@@ -75739,9 +75768,16 @@ function findTomlSection(config, header) {
|
|
|
75739
75768
|
const lines = config.match(/[^\n]*\n?|$/g) ?? [];
|
|
75740
75769
|
let offset = 0;
|
|
75741
75770
|
let start = -1;
|
|
75771
|
+
let multilineQuote = null;
|
|
75742
75772
|
for (const line of lines) {
|
|
75743
75773
|
if (line.length === 0)
|
|
75744
75774
|
break;
|
|
75775
|
+
const multilineScan = scanTomlMultilineLine(line, multilineQuote);
|
|
75776
|
+
multilineQuote = multilineScan.nextQuote;
|
|
75777
|
+
if (multilineScan.wasInside) {
|
|
75778
|
+
offset += line.length;
|
|
75779
|
+
continue;
|
|
75780
|
+
}
|
|
75745
75781
|
const trimmed = line.trim();
|
|
75746
75782
|
if (start === -1) {
|
|
75747
75783
|
if (tomlTableHeaderMatches(trimmed, headerLine, targetHeaderPath))
|
|
@@ -75756,8 +75792,37 @@ function findTomlSection(config, header) {
|
|
|
75756
75792
|
return { start, end: config.length, text: config.slice(start) };
|
|
75757
75793
|
}
|
|
75758
75794
|
function replaceOrInsertSetting(config, section, key, value) {
|
|
75759
|
-
const
|
|
75760
|
-
|
|
75795
|
+
const targetPath = parseTomlDottedKey(key);
|
|
75796
|
+
if (!targetPath)
|
|
75797
|
+
return config;
|
|
75798
|
+
const lines = section.text.match(/[^\n]*\n?|$/g) ?? [];
|
|
75799
|
+
let offset = 0;
|
|
75800
|
+
let multilineQuote = null;
|
|
75801
|
+
for (const line of lines) {
|
|
75802
|
+
if (line.length === 0)
|
|
75803
|
+
break;
|
|
75804
|
+
const multilineScan = scanTomlMultilineLine(line, multilineQuote);
|
|
75805
|
+
multilineQuote = multilineScan.nextQuote;
|
|
75806
|
+
if (multilineScan.wasInside) {
|
|
75807
|
+
offset += line.length;
|
|
75808
|
+
continue;
|
|
75809
|
+
}
|
|
75810
|
+
const assignmentIndex = findUnquotedAssignment(line);
|
|
75811
|
+
if (assignmentIndex < 0) {
|
|
75812
|
+
offset += line.length;
|
|
75813
|
+
continue;
|
|
75814
|
+
}
|
|
75815
|
+
const settingPath = parseTomlDottedKey(line.slice(0, assignmentIndex).trim());
|
|
75816
|
+
if (!settingPath || !tomlPathMatches(settingPath, targetPath)) {
|
|
75817
|
+
offset += line.length;
|
|
75818
|
+
continue;
|
|
75819
|
+
}
|
|
75820
|
+
const replacement2 = replaceTomlAssignmentValue(line, assignmentIndex, value);
|
|
75821
|
+
const assignmentEnd = multilineScan.nextQuote ? findTomlMultilineValueEnd(section.text, offset + line.length, multilineScan.nextQuote) : offset + line.length;
|
|
75822
|
+
const sectionReplacement = section.text.slice(0, offset) + replacement2 + section.text.slice(assignmentEnd);
|
|
75823
|
+
return config.slice(0, section.start) + sectionReplacement + config.slice(section.end);
|
|
75824
|
+
}
|
|
75825
|
+
const replacement = insertSetting(section.text, key, value);
|
|
75761
75826
|
return config.slice(0, section.start) + replacement + config.slice(section.end);
|
|
75762
75827
|
}
|
|
75763
75828
|
function removeSetting(config, section, key) {
|
|
@@ -75777,6 +75842,50 @@ function replaceOrInsertRootSetting(config, key, value) {
|
|
|
75777
75842
|
return replacement;
|
|
75778
75843
|
return `${replacement.trimEnd()}
|
|
75779
75844
|
|
|
75845
|
+
${suffix.trimStart()}`;
|
|
75846
|
+
}
|
|
75847
|
+
function replaceOrInsertRootDottedSetting(config, keyPath, value) {
|
|
75848
|
+
const targetPath = parseTomlDottedKey(keyPath);
|
|
75849
|
+
if (!targetPath)
|
|
75850
|
+
return config;
|
|
75851
|
+
const lines = config.match(/[^\n]*\n?|$/g) ?? [];
|
|
75852
|
+
let offset = 0;
|
|
75853
|
+
let multilineQuote = null;
|
|
75854
|
+
for (const line of lines) {
|
|
75855
|
+
if (line.length === 0)
|
|
75856
|
+
break;
|
|
75857
|
+
const multilineScan = scanTomlMultilineLine(line, multilineQuote);
|
|
75858
|
+
multilineQuote = multilineScan.nextQuote;
|
|
75859
|
+
if (multilineScan.wasInside) {
|
|
75860
|
+
offset += line.length;
|
|
75861
|
+
continue;
|
|
75862
|
+
}
|
|
75863
|
+
if (isTomlTableHeaderLine(line))
|
|
75864
|
+
break;
|
|
75865
|
+
const assignmentIndex = findUnquotedAssignment(line);
|
|
75866
|
+
if (assignmentIndex < 0) {
|
|
75867
|
+
offset += line.length;
|
|
75868
|
+
continue;
|
|
75869
|
+
}
|
|
75870
|
+
const settingPath = parseTomlDottedKey(line.slice(0, assignmentIndex).trim());
|
|
75871
|
+
if (!settingPath || !tomlPathMatches(settingPath, targetPath)) {
|
|
75872
|
+
offset += line.length;
|
|
75873
|
+
continue;
|
|
75874
|
+
}
|
|
75875
|
+
const replacement2 = replaceTomlAssignmentValue(line, assignmentIndex, value);
|
|
75876
|
+
const assignmentEnd = multilineScan.nextQuote ? findTomlMultilineValueEnd(config, offset + line.length, multilineScan.nextQuote) : offset + line.length;
|
|
75877
|
+
return config.slice(0, offset) + replacement2 + config.slice(assignmentEnd);
|
|
75878
|
+
}
|
|
75879
|
+
const sectionStart = findFirstTableStart(config);
|
|
75880
|
+
const root = config.slice(0, sectionStart).trimEnd();
|
|
75881
|
+
const suffix = config.slice(sectionStart);
|
|
75882
|
+
const replacement = `${root}${root.length > 0 ? `
|
|
75883
|
+
` : ""}${keyPath} = ${value}
|
|
75884
|
+
`;
|
|
75885
|
+
if (suffix.length === 0)
|
|
75886
|
+
return replacement;
|
|
75887
|
+
return `${replacement.trimEnd()}
|
|
75888
|
+
|
|
75780
75889
|
${suffix.trimStart()}`;
|
|
75781
75890
|
}
|
|
75782
75891
|
function appendBlock(config, block) {
|
|
@@ -75789,9 +75898,16 @@ function appendBlock(config, block) {
|
|
|
75789
75898
|
function findFirstTableStart(config) {
|
|
75790
75899
|
const lines = config.match(/[^\n]*\n?|$/g) ?? [];
|
|
75791
75900
|
let offset = 0;
|
|
75901
|
+
let multilineQuote = null;
|
|
75792
75902
|
for (const line of lines) {
|
|
75793
75903
|
if (line.length === 0)
|
|
75794
75904
|
break;
|
|
75905
|
+
const multilineScan = scanTomlMultilineLine(line, multilineQuote);
|
|
75906
|
+
multilineQuote = multilineScan.nextQuote;
|
|
75907
|
+
if (multilineScan.wasInside) {
|
|
75908
|
+
offset += line.length;
|
|
75909
|
+
continue;
|
|
75910
|
+
}
|
|
75795
75911
|
if (isTomlTableHeaderLine(line))
|
|
75796
75912
|
return offset;
|
|
75797
75913
|
offset += line.length;
|
|
@@ -75829,6 +75945,131 @@ function isTomlTableHeaderLine(line) {
|
|
|
75829
75945
|
const normalizedLine = stripUnquotedInlineComment(line).trim();
|
|
75830
75946
|
return normalizedLine.startsWith("[") && normalizedLine.endsWith("]");
|
|
75831
75947
|
}
|
|
75948
|
+
function scanTomlMultilineLine(line, currentQuote) {
|
|
75949
|
+
if (currentQuote) {
|
|
75950
|
+
return {
|
|
75951
|
+
wasInside: true,
|
|
75952
|
+
nextQuote: findTomlMultilineDelimiter(line, currentQuote, 0) === -1 ? currentQuote : null
|
|
75953
|
+
};
|
|
75954
|
+
}
|
|
75955
|
+
let quote = null;
|
|
75956
|
+
let index = 0;
|
|
75957
|
+
while (index < line.length) {
|
|
75958
|
+
const char = line[index];
|
|
75959
|
+
if (quote === '"') {
|
|
75960
|
+
if (char === "\\") {
|
|
75961
|
+
index += 2;
|
|
75962
|
+
continue;
|
|
75963
|
+
}
|
|
75964
|
+
if (char === '"')
|
|
75965
|
+
quote = null;
|
|
75966
|
+
index += 1;
|
|
75967
|
+
continue;
|
|
75968
|
+
}
|
|
75969
|
+
if (quote === "'") {
|
|
75970
|
+
if (char === "'")
|
|
75971
|
+
quote = null;
|
|
75972
|
+
index += 1;
|
|
75973
|
+
continue;
|
|
75974
|
+
}
|
|
75975
|
+
if (char === "#")
|
|
75976
|
+
break;
|
|
75977
|
+
const delimiter2 = line.startsWith('"""', index) ? '"""' : line.startsWith("'''", index) ? "'''" : null;
|
|
75978
|
+
if (delimiter2) {
|
|
75979
|
+
const closingIndex = findTomlMultilineDelimiter(line, delimiter2, index + delimiter2.length);
|
|
75980
|
+
return { wasInside: false, nextQuote: closingIndex === -1 ? delimiter2 : null };
|
|
75981
|
+
}
|
|
75982
|
+
if (char === '"' || char === "'")
|
|
75983
|
+
quote = char;
|
|
75984
|
+
index += 1;
|
|
75985
|
+
}
|
|
75986
|
+
return { wasInside: false, nextQuote: null };
|
|
75987
|
+
}
|
|
75988
|
+
function findTomlMultilineDelimiter(line, delimiter2, startIndex) {
|
|
75989
|
+
let index = line.indexOf(delimiter2, startIndex);
|
|
75990
|
+
while (index !== -1) {
|
|
75991
|
+
if (delimiter2 === "'''" || countPrecedingBackslashes(line, index) % 2 === 0)
|
|
75992
|
+
return index;
|
|
75993
|
+
index = line.indexOf(delimiter2, index + 1);
|
|
75994
|
+
}
|
|
75995
|
+
return -1;
|
|
75996
|
+
}
|
|
75997
|
+
function countPrecedingBackslashes(line, index) {
|
|
75998
|
+
let count = 0;
|
|
75999
|
+
let cursor = index - 1;
|
|
76000
|
+
while (cursor >= 0 && line[cursor] === "\\") {
|
|
76001
|
+
count += 1;
|
|
76002
|
+
cursor -= 1;
|
|
76003
|
+
}
|
|
76004
|
+
return count;
|
|
76005
|
+
}
|
|
76006
|
+
function findUnquotedAssignment(line) {
|
|
76007
|
+
return findUnquotedCharacter(line, "=", 0);
|
|
76008
|
+
}
|
|
76009
|
+
function findUnquotedComment(line, startIndex) {
|
|
76010
|
+
return findUnquotedCharacter(line, "#", startIndex);
|
|
76011
|
+
}
|
|
76012
|
+
function findUnquotedCharacter(line, target, startIndex) {
|
|
76013
|
+
let quote = null;
|
|
76014
|
+
let index = startIndex;
|
|
76015
|
+
while (index < line.length) {
|
|
76016
|
+
const char = line[index];
|
|
76017
|
+
if (quote === '"') {
|
|
76018
|
+
if (char === "\\") {
|
|
76019
|
+
index += 2;
|
|
76020
|
+
continue;
|
|
76021
|
+
}
|
|
76022
|
+
if (char === '"')
|
|
76023
|
+
quote = null;
|
|
76024
|
+
index += 1;
|
|
76025
|
+
continue;
|
|
76026
|
+
}
|
|
76027
|
+
if (quote === "'") {
|
|
76028
|
+
if (char === "'")
|
|
76029
|
+
quote = null;
|
|
76030
|
+
index += 1;
|
|
76031
|
+
continue;
|
|
76032
|
+
}
|
|
76033
|
+
if (char === '"' || char === "'") {
|
|
76034
|
+
quote = char;
|
|
76035
|
+
index += 1;
|
|
76036
|
+
continue;
|
|
76037
|
+
}
|
|
76038
|
+
if (char === target)
|
|
76039
|
+
return index;
|
|
76040
|
+
if (char === "#")
|
|
76041
|
+
return -1;
|
|
76042
|
+
index += 1;
|
|
76043
|
+
}
|
|
76044
|
+
return -1;
|
|
76045
|
+
}
|
|
76046
|
+
function tomlPathMatches(candidate, target) {
|
|
76047
|
+
return candidate.length === target.length && candidate.every((part, index) => part === target[index]);
|
|
76048
|
+
}
|
|
76049
|
+
function replaceTomlAssignmentValue(line, assignmentIndex, value) {
|
|
76050
|
+
const newline = line.endsWith(`
|
|
76051
|
+
`) ? `
|
|
76052
|
+
` : "";
|
|
76053
|
+
const lineBody = newline ? line.slice(0, -1) : line;
|
|
76054
|
+
const commentIndex = findUnquotedComment(lineBody, assignmentIndex + 1);
|
|
76055
|
+
const comment = commentIndex === -1 ? "" : ` ${lineBody.slice(commentIndex).trimStart()}`;
|
|
76056
|
+
return `${lineBody.slice(0, assignmentIndex + 1)} ${value}${comment}${newline}`;
|
|
76057
|
+
}
|
|
76058
|
+
function findTomlMultilineValueEnd(text, startOffset, quote) {
|
|
76059
|
+
const lines = text.slice(startOffset).match(/[^\n]*\n?|$/g) ?? [];
|
|
76060
|
+
let offset = startOffset;
|
|
76061
|
+
let currentQuote = quote;
|
|
76062
|
+
for (const line of lines) {
|
|
76063
|
+
if (line.length === 0)
|
|
76064
|
+
break;
|
|
76065
|
+
const scan = scanTomlMultilineLine(line, currentQuote);
|
|
76066
|
+
currentQuote = scan.nextQuote;
|
|
76067
|
+
offset += line.length;
|
|
76068
|
+
if (currentQuote === null)
|
|
76069
|
+
return offset;
|
|
76070
|
+
}
|
|
76071
|
+
return text.length;
|
|
76072
|
+
}
|
|
75832
76073
|
function stripUnquotedInlineComment(line) {
|
|
75833
76074
|
let quote = null;
|
|
75834
76075
|
let index = 0;
|
|
@@ -76159,13 +76400,137 @@ function delay(milliseconds) {
|
|
|
76159
76400
|
return new Promise((resolveDelay) => setTimeout(resolveDelay, milliseconds));
|
|
76160
76401
|
}
|
|
76161
76402
|
|
|
76403
|
+
// packages/omo-codex/src/install/toml-setting-reader.ts
|
|
76404
|
+
function hasTomlSetting(config, keyPath) {
|
|
76405
|
+
const targetPath = parseTomlDottedKey(keyPath);
|
|
76406
|
+
if (!targetPath)
|
|
76407
|
+
return false;
|
|
76408
|
+
return hasTomlAssignment(config, (tablePath, settingPath) => {
|
|
76409
|
+
const fullPath = [...tablePath, ...settingPath];
|
|
76410
|
+
return fullPath.length === targetPath.length && fullPath.every((part, index) => part === targetPath[index]);
|
|
76411
|
+
});
|
|
76412
|
+
}
|
|
76413
|
+
function hasTomlRootDottedKeyPrefix(config, rootKey) {
|
|
76414
|
+
return hasTomlAssignment(config, (tablePath, settingPath) => tablePath.length === 0 && settingPath.length > 1 && settingPath[0] === rootKey);
|
|
76415
|
+
}
|
|
76416
|
+
function hasTomlAssignment(config, predicate) {
|
|
76417
|
+
let tablePath = [];
|
|
76418
|
+
let multilineQuote = null;
|
|
76419
|
+
for (const line of config.split(`
|
|
76420
|
+
`)) {
|
|
76421
|
+
const multilineScan = scanTomlMultilineLine(line, multilineQuote);
|
|
76422
|
+
multilineQuote = multilineScan.nextQuote;
|
|
76423
|
+
if (multilineScan.wasInside)
|
|
76424
|
+
continue;
|
|
76425
|
+
const normalizedLine = stripUnquotedInlineComment2(line).trim();
|
|
76426
|
+
if (normalizedLine.length === 0)
|
|
76427
|
+
continue;
|
|
76428
|
+
const headerPath = parseTomlTableHeader2(normalizedLine);
|
|
76429
|
+
if (headerPath) {
|
|
76430
|
+
tablePath = headerPath;
|
|
76431
|
+
continue;
|
|
76432
|
+
}
|
|
76433
|
+
if (isTomlTableHeaderLine2(normalizedLine)) {
|
|
76434
|
+
tablePath = null;
|
|
76435
|
+
continue;
|
|
76436
|
+
}
|
|
76437
|
+
if (!tablePath)
|
|
76438
|
+
continue;
|
|
76439
|
+
const assignmentIndex = findUnquotedAssignment2(normalizedLine);
|
|
76440
|
+
if (assignmentIndex < 0)
|
|
76441
|
+
continue;
|
|
76442
|
+
const settingPath = parseTomlDottedKey(normalizedLine.slice(0, assignmentIndex).trim());
|
|
76443
|
+
if (!settingPath)
|
|
76444
|
+
continue;
|
|
76445
|
+
if (predicate(tablePath, settingPath))
|
|
76446
|
+
return true;
|
|
76447
|
+
}
|
|
76448
|
+
return false;
|
|
76449
|
+
}
|
|
76450
|
+
function parseTomlTableHeader2(line) {
|
|
76451
|
+
if (!line.startsWith("[") || !line.endsWith("]") || line.startsWith("[["))
|
|
76452
|
+
return null;
|
|
76453
|
+
return parseTomlDottedKey(line.slice(1, -1).trim());
|
|
76454
|
+
}
|
|
76455
|
+
function isTomlTableHeaderLine2(line) {
|
|
76456
|
+
return line.startsWith("[") && line.endsWith("]");
|
|
76457
|
+
}
|
|
76458
|
+
function stripUnquotedInlineComment2(line) {
|
|
76459
|
+
let quote = null;
|
|
76460
|
+
let index = 0;
|
|
76461
|
+
while (index < line.length) {
|
|
76462
|
+
const char = line[index];
|
|
76463
|
+
if (quote === '"') {
|
|
76464
|
+
if (char === "\\") {
|
|
76465
|
+
index += 2;
|
|
76466
|
+
continue;
|
|
76467
|
+
}
|
|
76468
|
+
if (char === '"')
|
|
76469
|
+
quote = null;
|
|
76470
|
+
index += 1;
|
|
76471
|
+
continue;
|
|
76472
|
+
}
|
|
76473
|
+
if (quote === "'") {
|
|
76474
|
+
if (char === "'")
|
|
76475
|
+
quote = null;
|
|
76476
|
+
index += 1;
|
|
76477
|
+
continue;
|
|
76478
|
+
}
|
|
76479
|
+
if (char === '"' || char === "'") {
|
|
76480
|
+
quote = char;
|
|
76481
|
+
index += 1;
|
|
76482
|
+
continue;
|
|
76483
|
+
}
|
|
76484
|
+
if (char === "#")
|
|
76485
|
+
return line.slice(0, index);
|
|
76486
|
+
index += 1;
|
|
76487
|
+
}
|
|
76488
|
+
return line;
|
|
76489
|
+
}
|
|
76490
|
+
function findUnquotedAssignment2(line) {
|
|
76491
|
+
let quote = null;
|
|
76492
|
+
let index = 0;
|
|
76493
|
+
while (index < line.length) {
|
|
76494
|
+
const char = line[index];
|
|
76495
|
+
if (quote === '"') {
|
|
76496
|
+
if (char === "\\") {
|
|
76497
|
+
index += 2;
|
|
76498
|
+
continue;
|
|
76499
|
+
}
|
|
76500
|
+
if (char === '"')
|
|
76501
|
+
quote = null;
|
|
76502
|
+
index += 1;
|
|
76503
|
+
continue;
|
|
76504
|
+
}
|
|
76505
|
+
if (quote === "'") {
|
|
76506
|
+
if (char === "'")
|
|
76507
|
+
quote = null;
|
|
76508
|
+
index += 1;
|
|
76509
|
+
continue;
|
|
76510
|
+
}
|
|
76511
|
+
if (char === '"' || char === "'") {
|
|
76512
|
+
quote = char;
|
|
76513
|
+
index += 1;
|
|
76514
|
+
continue;
|
|
76515
|
+
}
|
|
76516
|
+
if (char === "=")
|
|
76517
|
+
return index;
|
|
76518
|
+
index += 1;
|
|
76519
|
+
}
|
|
76520
|
+
return -1;
|
|
76521
|
+
}
|
|
76522
|
+
|
|
76162
76523
|
// packages/omo-codex/src/install/codex-config-features.ts
|
|
76163
76524
|
function ensureFeatureEnabled(config, featureName) {
|
|
76164
76525
|
const section = findTomlSection(config, "features");
|
|
76165
|
-
if (!section)
|
|
76526
|
+
if (!section) {
|
|
76527
|
+
if (hasTomlRootDottedKeyPrefix(config, "features")) {
|
|
76528
|
+
return replaceOrInsertRootDottedSetting(config, `features.${featureName}`, "true");
|
|
76529
|
+
}
|
|
76166
76530
|
return appendBlock(config, `[features]
|
|
76167
76531
|
${featureName} = true
|
|
76168
76532
|
`);
|
|
76533
|
+
}
|
|
76169
76534
|
return replaceOrInsertSetting(config, section, featureName, "true");
|
|
76170
76535
|
}
|
|
76171
76536
|
|
|
@@ -76233,7 +76598,7 @@ function ensureAutonomousPermissions(config) {
|
|
|
76233
76598
|
next = replaceOrInsertRootSetting(next, "sandbox_mode", JSON.stringify("danger-full-access"));
|
|
76234
76599
|
next = replaceOrInsertRootSetting(next, "network_access", JSON.stringify("enabled"));
|
|
76235
76600
|
for (const featureName of AUTONOMOUS_FEATURES) {
|
|
76236
|
-
next =
|
|
76601
|
+
next = ensureFeatureEnabled(next, featureName);
|
|
76237
76602
|
}
|
|
76238
76603
|
next = removeWindowsSandboxSetting(next);
|
|
76239
76604
|
next = ensureNoticeEnabled(next, "hide_full_access_warning");
|
|
@@ -76251,14 +76616,6 @@ function ensureNoticeEnabled(config, key) {
|
|
|
76251
76616
|
return appendNoticeBlock(config, key);
|
|
76252
76617
|
return replaceOrInsertSetting(config, section, key, "true");
|
|
76253
76618
|
}
|
|
76254
|
-
function ensureFeatureEnabled2(config, key) {
|
|
76255
|
-
const section = findTomlSection(config, "features");
|
|
76256
|
-
if (section === null)
|
|
76257
|
-
return appendBlock(config, `[features]
|
|
76258
|
-
${key} = true
|
|
76259
|
-
`);
|
|
76260
|
-
return replaceOrInsertSetting(config, section, key, "true");
|
|
76261
|
-
}
|
|
76262
76619
|
function appendNoticeBlock(config, key) {
|
|
76263
76620
|
return appendBlock(config, `[notice]
|
|
76264
76621
|
${key} = true
|
|
@@ -76330,7 +76687,7 @@ function readStringArraySetting(sectionText, key) {
|
|
|
76330
76687
|
const assignmentIndex = line.indexOf("=");
|
|
76331
76688
|
if (assignmentIndex === -1)
|
|
76332
76689
|
return null;
|
|
76333
|
-
return parseTomlStringArray(
|
|
76690
|
+
return parseTomlStringArray(stripUnquotedInlineComment3(line.slice(assignmentIndex + 1)).trim());
|
|
76334
76691
|
}
|
|
76335
76692
|
return null;
|
|
76336
76693
|
}
|
|
@@ -76374,7 +76731,7 @@ function parseTomlString(input, startIndex) {
|
|
|
76374
76731
|
}
|
|
76375
76732
|
return null;
|
|
76376
76733
|
}
|
|
76377
|
-
function
|
|
76734
|
+
function stripUnquotedInlineComment3(line) {
|
|
76378
76735
|
let quote = null;
|
|
76379
76736
|
let index = 0;
|
|
76380
76737
|
while (index < line.length) {
|
|
@@ -76588,24 +76945,27 @@ import { readFileSync as readFileSync13 } from "node:fs";
|
|
|
76588
76945
|
import { dirname as dirname15, isAbsolute as isAbsolute8, join as join39 } from "node:path";
|
|
76589
76946
|
var CODEX_AGENTS_HEADER = "agents";
|
|
76590
76947
|
var CODEX_MULTI_AGENT_V2_HEADER = "features.multi_agent_v2";
|
|
76948
|
+
var CODEX_MULTI_AGENT_V2_THREAD_LIMIT_KEY = `${CODEX_MULTI_AGENT_V2_HEADER}.max_concurrent_threads_per_session`;
|
|
76591
76949
|
var CODEX_SUBAGENT_THREAD_LIMIT = 1000;
|
|
76950
|
+
var CODEX_MULTI_AGENT_V2_THREAD_LIMIT = 16;
|
|
76592
76951
|
function ensureCodexMultiAgentV2Config(config, options = {}) {
|
|
76593
76952
|
const featureFlag = removeFeatureFlagSetting(config, "multi_agent_v2");
|
|
76594
76953
|
const v2Preferred = options.multiAgentVersion === "v2";
|
|
76595
76954
|
const modelKnown = options.multiAgentVersion != null || readRootModel(featureFlag.config) !== null;
|
|
76596
76955
|
const agentsConfig = v2Preferred ? removeAgentsMaxThreads(featureFlag.config) : modelKnown ? ensureAgentsMaxThreads(featureFlag.config) : raiseExistingAgentsMaxThreads(featureFlag.config);
|
|
76597
|
-
const maxThreadsValue = CODEX_SUBAGENT_THREAD_LIMIT.toString();
|
|
76598
76956
|
const preserveDisable = featureFlag.value === false && !v2Preferred;
|
|
76599
76957
|
const featureConfig = preserveDisable ? setMultiAgentV2Disable(agentsConfig) : v2Preferred ? removeMultiAgentV2Disable(agentsConfig) : agentsConfig;
|
|
76958
|
+
if (hasTomlSetting(featureConfig, CODEX_MULTI_AGENT_V2_THREAD_LIMIT_KEY))
|
|
76959
|
+
return featureConfig;
|
|
76600
76960
|
const section = findTomlSection(featureConfig, CODEX_MULTI_AGENT_V2_HEADER);
|
|
76601
76961
|
if (!section) {
|
|
76602
76962
|
const enabledSetting = preserveDisable ? `enabled = false
|
|
76603
76963
|
` : "";
|
|
76604
76964
|
return appendBlock(featureConfig, `[${CODEX_MULTI_AGENT_V2_HEADER}]
|
|
76605
|
-
${enabledSetting}max_concurrent_threads_per_session = ${
|
|
76965
|
+
${enabledSetting}max_concurrent_threads_per_session = ${CODEX_MULTI_AGENT_V2_THREAD_LIMIT}
|
|
76606
76966
|
`);
|
|
76607
76967
|
}
|
|
76608
|
-
return replaceOrInsertSetting(featureConfig, section, "max_concurrent_threads_per_session",
|
|
76968
|
+
return replaceOrInsertSetting(featureConfig, section, "max_concurrent_threads_per_session", CODEX_MULTI_AGENT_V2_THREAD_LIMIT.toString());
|
|
76609
76969
|
}
|
|
76610
76970
|
function resolveCodexMultiAgentVersion(config, configPath) {
|
|
76611
76971
|
const model = readRootModel(config);
|
|
@@ -76792,11 +77152,11 @@ async function trustedHookStatesForPlugin(input) {
|
|
|
76792
77152
|
const manifestPath = join40(input.pluginRoot, ".codex-plugin", "plugin.json");
|
|
76793
77153
|
if (!await exists(manifestPath))
|
|
76794
77154
|
return [];
|
|
76795
|
-
const
|
|
76796
|
-
if (!isPlainRecord3(
|
|
77155
|
+
const manifest2 = JSON.parse(await readFile12(manifestPath, "utf8"));
|
|
77156
|
+
if (!isPlainRecord3(manifest2))
|
|
76797
77157
|
return [];
|
|
76798
77158
|
const states = [];
|
|
76799
|
-
for (const hookPath of hookManifestPaths2(
|
|
77159
|
+
for (const hookPath of hookManifestPaths2(manifest2.hooks)) {
|
|
76800
77160
|
const hooksPath = join40(input.pluginRoot, hookPath);
|
|
76801
77161
|
if (!await exists(hooksPath))
|
|
76802
77162
|
continue;
|
|
@@ -76964,6 +77324,10 @@ var MANAGED_REASONING_DEFAULT_UPGRADES = new Map([
|
|
|
76964
77324
|
{
|
|
76965
77325
|
previous: { model: "gpt-5.5", effort: "xhigh" },
|
|
76966
77326
|
current: { model: "gpt-5.6-sol", effort: "ultra" }
|
|
77327
|
+
},
|
|
77328
|
+
{
|
|
77329
|
+
previous: { model: "gpt-5.6-sol", effort: "ultra" },
|
|
77330
|
+
current: { model: "gpt-5.6-terra", effort: "high" }
|
|
76967
77331
|
}
|
|
76968
77332
|
]
|
|
76969
77333
|
],
|
|
@@ -76973,6 +77337,10 @@ var MANAGED_REASONING_DEFAULT_UPGRADES = new Map([
|
|
|
76973
77337
|
{
|
|
76974
77338
|
previous: { model: "gpt-5.6-sol", effort: "xhigh" },
|
|
76975
77339
|
current: { model: "gpt-5.6-sol", effort: "max" }
|
|
77340
|
+
},
|
|
77341
|
+
{
|
|
77342
|
+
previous: { model: "gpt-5.6-sol", effort: "max" },
|
|
77343
|
+
current: { model: "gpt-5.6-sol", effort: "high" }
|
|
76976
77344
|
}
|
|
76977
77345
|
]
|
|
76978
77346
|
],
|
|
@@ -76982,6 +77350,37 @@ var MANAGED_REASONING_DEFAULT_UPGRADES = new Map([
|
|
|
76982
77350
|
{
|
|
76983
77351
|
previous: { model: "gpt-5.6-sol", effort: "high" },
|
|
76984
77352
|
current: { model: "gpt-5.6-luna", effort: "max" }
|
|
77353
|
+
},
|
|
77354
|
+
{
|
|
77355
|
+
previous: { model: "gpt-5.6-luna", effort: "max" },
|
|
77356
|
+
current: { model: "gpt-5.6-terra", effort: "high" }
|
|
77357
|
+
}
|
|
77358
|
+
]
|
|
77359
|
+
],
|
|
77360
|
+
[
|
|
77361
|
+
"lazycodex-worker-high",
|
|
77362
|
+
[
|
|
77363
|
+
{
|
|
77364
|
+
previous: { model: "gpt-5.6-sol", effort: "max" },
|
|
77365
|
+
current: { model: "gpt-5.6-sol", effort: "medium" }
|
|
77366
|
+
}
|
|
77367
|
+
]
|
|
77368
|
+
],
|
|
77369
|
+
[
|
|
77370
|
+
"lazycodex-code-reviewer",
|
|
77371
|
+
[
|
|
77372
|
+
{
|
|
77373
|
+
previous: { model: "gpt-5.6-sol", effort: "xhigh" },
|
|
77374
|
+
current: { model: "gpt-5.6-terra", effort: "medium" }
|
|
77375
|
+
}
|
|
77376
|
+
]
|
|
77377
|
+
],
|
|
77378
|
+
[
|
|
77379
|
+
"lazycodex-clone-fidelity-reviewer",
|
|
77380
|
+
[
|
|
77381
|
+
{
|
|
77382
|
+
previous: { model: "gpt-5.6-sol", effort: "xhigh" },
|
|
77383
|
+
current: { model: "gpt-5.6-terra", effort: "high" }
|
|
76985
77384
|
}
|
|
76986
77385
|
]
|
|
76987
77386
|
],
|
|
@@ -77000,6 +77399,10 @@ var MANAGED_REASONING_DEFAULT_UPGRADES = new Map([
|
|
|
77000
77399
|
{
|
|
77001
77400
|
previous: { model: "gpt-5.6-sol", effort: "xhigh" },
|
|
77002
77401
|
current: { model: "gpt-5.6-sol", effort: "high" }
|
|
77402
|
+
},
|
|
77403
|
+
{
|
|
77404
|
+
previous: { model: "gpt-5.6-sol", effort: "high" },
|
|
77405
|
+
current: { model: "gpt-5.6-sol", effort: "low" }
|
|
77003
77406
|
}
|
|
77004
77407
|
]
|
|
77005
77408
|
]
|
|
@@ -77626,7 +78029,7 @@ function normalizeHookStatusVersion(version) {
|
|
|
77626
78029
|
|
|
77627
78030
|
// packages/omo-codex/src/install/codex-process.ts
|
|
77628
78031
|
init_bun_spawn_shim();
|
|
77629
|
-
var WINDOWS_CMD_SHIM_COMMANDS = new Set(["npm", "npx"]);
|
|
78032
|
+
var WINDOWS_CMD_SHIM_COMMANDS = new Set(["codex", "npm", "npx"]);
|
|
77630
78033
|
function resolveRunCommandInvocation(command, args, platform = process.platform) {
|
|
77631
78034
|
if (platform !== "win32" || !WINDOWS_CMD_SHIM_COMMANDS.has(command.toLowerCase())) {
|
|
77632
78035
|
return { command, args: [...args] };
|
|
@@ -78331,12 +78734,12 @@ async function runCodexInstaller(options = {}) {
|
|
|
78331
78734
|
const agentConfigs = new Map;
|
|
78332
78735
|
for (const entry of marketplace.plugins) {
|
|
78333
78736
|
const sourcePath = resolvePluginSource(codexPackageRoot, entry, { pathOverride: "./plugin" });
|
|
78334
|
-
const
|
|
78335
|
-
if (
|
|
78336
|
-
throw new Error(`plugin manifest name ${JSON.stringify(
|
|
78737
|
+
const manifest2 = await readPluginManifest(sourcePath);
|
|
78738
|
+
if (manifest2.name !== entry.name) {
|
|
78739
|
+
throw new Error(`plugin manifest name ${JSON.stringify(manifest2.name)} does not match marketplace name ${JSON.stringify(entry.name)}`);
|
|
78337
78740
|
}
|
|
78338
78741
|
const version2 = resolveLazyCodexPluginVersion({
|
|
78339
|
-
manifestVersion:
|
|
78742
|
+
manifestVersion: manifest2.version,
|
|
78340
78743
|
marketplaceName: marketplace.name,
|
|
78341
78744
|
pluginName: entry.name,
|
|
78342
78745
|
distributionManifest,
|
|
@@ -79026,8 +79429,24 @@ import { promisify as promisify2 } from "node:util";
|
|
|
79026
79429
|
var execFileAsync2 = promisify2(execFile4);
|
|
79027
79430
|
var REQUIRED_PLUGIN_ARTIFACTS = [
|
|
79028
79431
|
join58("extensions", "omo.js"),
|
|
79432
|
+
join58("skills", "ast-grep", "SKILL.md"),
|
|
79433
|
+
join58("skills", "coding-agent-sessions", "SKILL.md"),
|
|
79434
|
+
join58("skills", "debugging", "SKILL.md"),
|
|
79435
|
+
join58("skills", "frontend", "SKILL.md"),
|
|
79436
|
+
join58("skills", "git-master", "SKILL.md"),
|
|
79437
|
+
join58("skills", "init-deep", "SKILL.md"),
|
|
79438
|
+
join58("skills", "lsp-setup", "SKILL.md"),
|
|
79439
|
+
join58("skills", "programming", "SKILL.md"),
|
|
79440
|
+
join58("skills", "refactor", "SKILL.md"),
|
|
79441
|
+
join58("skills", "remove-ai-slops", "SKILL.md"),
|
|
79442
|
+
join58("skills", "review-work", "SKILL.md"),
|
|
79443
|
+
join58("skills", "start-work", "SKILL.md"),
|
|
79444
|
+
join58("skills", "ultimate-browsing", "SKILL.md"),
|
|
79029
79445
|
join58("skills", "ultrawork", "SKILL.md"),
|
|
79030
79446
|
join58("skills", "ulw-loop", "SKILL.md"),
|
|
79447
|
+
join58("skills", "ulw-plan", "SKILL.md"),
|
|
79448
|
+
join58("skills", "ulw-research", "SKILL.md"),
|
|
79449
|
+
join58("skills", "visual-qa", "SKILL.md"),
|
|
79031
79450
|
join58("runtime", "lsp-daemon", "dist", "cli.js"),
|
|
79032
79451
|
join58("runtime", "lsp-daemon", "dist", "index.js"),
|
|
79033
79452
|
join58("runtime", "lsp-daemon", "dist", "index.d.ts"),
|
|
@@ -79081,6 +79500,7 @@ async function ensurePluginArtifacts(context) {
|
|
|
79081
79500
|
throw new Error(`Packed omo-senpi plugin is missing required runtime artifacts at ${context.pluginPath}`);
|
|
79082
79501
|
}
|
|
79083
79502
|
await context.runCommand("node", [join58(context.pluginPath, "scripts", "build-extension.mjs")], { cwd: context.repoRoot });
|
|
79503
|
+
await context.runCommand("node", [join58("packages", "omo-codex", "plugin", "scripts", "materialize-shared-upstreams.mjs")], { cwd: context.repoRoot });
|
|
79084
79504
|
await context.runCommand("node", [join58(context.pluginPath, "scripts", "sync-skills.mjs")], { cwd: context.repoRoot });
|
|
79085
79505
|
await context.runCommand("node", [join58(context.pluginPath, "scripts", "build-install.mjs")], { cwd: context.repoRoot });
|
|
79086
79506
|
await context.runCommand("node", [join58(context.pluginPath, "scripts", "stage-lsp-daemon-runtime.mjs")], { cwd: context.repoRoot });
|
|
@@ -96710,7 +97130,8 @@ var BrowserAutomationProviderSchema = exports_external.enum([
|
|
|
96710
97130
|
"playwright-cli"
|
|
96711
97131
|
]);
|
|
96712
97132
|
var BrowserAutomationConfigSchema = exports_external.object({
|
|
96713
|
-
provider: BrowserAutomationProviderSchema.default("playwright")
|
|
97133
|
+
provider: BrowserAutomationProviderSchema.default("playwright"),
|
|
97134
|
+
playwright_mcp_args: exports_external.array(exports_external.string()).optional()
|
|
96714
97135
|
});
|
|
96715
97136
|
// packages/omo-opencode/src/config/schema/categories.ts
|
|
96716
97137
|
var CategoryConfigSchema = exports_external.object({
|
|
@@ -96761,7 +97182,9 @@ var ClaudeCodeConfigSchema = exports_external.object({
|
|
|
96761
97182
|
var CodegraphConfigSchema = exports_external.object({
|
|
96762
97183
|
auto_init: exports_external.boolean().default(true),
|
|
96763
97184
|
auto_provision: exports_external.boolean().default(true),
|
|
97185
|
+
daemon: exports_external.boolean().default(false),
|
|
96764
97186
|
enabled: exports_external.boolean().default(true),
|
|
97187
|
+
excluded_roots: exports_external.array(exports_external.string()).optional(),
|
|
96765
97188
|
install_dir: exports_external.string().optional(),
|
|
96766
97189
|
telemetry: exports_external.boolean().optional(),
|
|
96767
97190
|
watch_debounce_ms: exports_external.number().nonnegative().optional()
|
|
@@ -96772,9 +97195,7 @@ var CommentCheckerConfigSchema = exports_external.object({
|
|
|
96772
97195
|
});
|
|
96773
97196
|
// packages/omo-opencode/src/config/schema/commands.ts
|
|
96774
97197
|
var BuiltinCommandNameSchema = exports_external.enum([
|
|
96775
|
-
"
|
|
96776
|
-
"ulw-loop",
|
|
96777
|
-
"cancel-ralph",
|
|
97198
|
+
"goal",
|
|
96778
97199
|
"refactor",
|
|
96779
97200
|
"start-work",
|
|
96780
97201
|
"stop-continuation",
|
|
@@ -96784,7 +97205,7 @@ var BuiltinCommandNameSchema = exports_external.enum([
|
|
|
96784
97205
|
// packages/omo-opencode/src/config/schema/default-mode.ts
|
|
96785
97206
|
var DefaultModeConfigSchema = exports_external.object({
|
|
96786
97207
|
ultrawork: exports_external.boolean().default(false),
|
|
96787
|
-
|
|
97208
|
+
goal: exports_external.boolean().default(false)
|
|
96788
97209
|
});
|
|
96789
97210
|
// packages/omo-opencode/src/config/schema/dynamic-context-pruning.ts
|
|
96790
97211
|
var DynamicContextPruningConfigSchema = exports_external.object({
|
|
@@ -96832,6 +97253,12 @@ var ExperimentalConfigSchema = exports_external.object({
|
|
|
96832
97253
|
max_tools: exports_external.number().int().min(1).optional(),
|
|
96833
97254
|
disable_live_parent_wake_routing: exports_external.boolean().optional()
|
|
96834
97255
|
});
|
|
97256
|
+
// packages/omo-opencode/src/config/schema/goal.ts
|
|
97257
|
+
var GoalConfigSchema = exports_external.object({
|
|
97258
|
+
enabled: exports_external.boolean().default(false),
|
|
97259
|
+
auto_start: exports_external.boolean().default(false),
|
|
97260
|
+
default_max_iterations: exports_external.number().min(1).max(1000).default(100)
|
|
97261
|
+
});
|
|
96835
97262
|
// packages/skills-loader-core/src/config/git-env-prefix.ts
|
|
96836
97263
|
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_-]*)*$/;
|
|
96837
97264
|
var GIT_ENV_PREFIX_VALIDATION_MESSAGE = 'git_env_prefix must be empty or use shell-safe env assignments like "GIT_MASTER=1"';
|
|
@@ -96874,7 +97301,7 @@ var HookNameSchema = exports_external.enum([
|
|
|
96874
97301
|
"interactive-bash-session",
|
|
96875
97302
|
"tool-pair-validator",
|
|
96876
97303
|
"monitor-status-injector",
|
|
96877
|
-
"
|
|
97304
|
+
"goal",
|
|
96878
97305
|
"category-skill-reminder",
|
|
96879
97306
|
"compaction-context-injector",
|
|
96880
97307
|
"compaction-todo-preserver",
|
|
@@ -96984,14 +97411,6 @@ var MonitorConfigSchema = exports_external.object({
|
|
|
96984
97411
|
pattern_max_length: exports_external.number().int().min(1).default(512)
|
|
96985
97412
|
});
|
|
96986
97413
|
|
|
96987
|
-
// packages/omo-opencode/src/config/schema/ralph-loop.ts
|
|
96988
|
-
var RalphLoopConfigSchema = exports_external.object({
|
|
96989
|
-
enabled: exports_external.boolean().default(false),
|
|
96990
|
-
default_max_iterations: exports_external.number().min(1).max(1000).default(100),
|
|
96991
|
-
state_dir: exports_external.string().optional(),
|
|
96992
|
-
default_strategy: exports_external.enum(["reset", "continue"]).default("continue")
|
|
96993
|
-
});
|
|
96994
|
-
|
|
96995
97414
|
// packages/omo-opencode/src/config/schema/runtime-fallback.ts
|
|
96996
97415
|
var RuntimeFallbackConfigSchema = exports_external.object({
|
|
96997
97416
|
enabled: exports_external.boolean().optional(),
|
|
@@ -97127,7 +97546,8 @@ var OhMyOpenCodeConfigSchema = exports_external.object({
|
|
|
97127
97546
|
experimental: ExperimentalConfigSchema.optional(),
|
|
97128
97547
|
auto_update: exports_external.boolean().optional(),
|
|
97129
97548
|
skills: SkillsConfigSchema.optional(),
|
|
97130
|
-
|
|
97549
|
+
goal: GoalConfigSchema.optional(),
|
|
97550
|
+
ralph_loop: exports_external.record(exports_external.string(), exports_external.unknown()).optional(),
|
|
97131
97551
|
runtime_fallback: exports_external.union([exports_external.boolean(), RuntimeFallbackConfigSchema]).optional(),
|
|
97132
97552
|
background_task: BackgroundTaskConfigSchema.optional(),
|
|
97133
97553
|
notification: NotificationConfigSchema.optional(),
|
|
@@ -97510,6 +97930,7 @@ function loadPluginConfig(directory, ctx) {
|
|
|
97510
97930
|
}
|
|
97511
97931
|
}
|
|
97512
97932
|
const userMcpEnvAllowlist = config3.mcp_env_allowlist ?? [];
|
|
97933
|
+
const userPlaywrightMcpArgs = config3.browser_automation_engine?.playwright_mcp_args;
|
|
97513
97934
|
const canonicalAncestorPathsFarthestFirst = [...canonicalAncestorPathsNearestFirst].reverse();
|
|
97514
97935
|
const defaultGitMaster = OhMyOpenCodeConfigSchema.parse({}).git_master;
|
|
97515
97936
|
const ancestorGitMasterOverridesFarthestFirst = [];
|
|
@@ -97542,6 +97963,16 @@ function loadPluginConfig(directory, ctx) {
|
|
|
97542
97963
|
...config3,
|
|
97543
97964
|
mcp_env_allowlist: userMcpEnvAllowlist
|
|
97544
97965
|
};
|
|
97966
|
+
if (config3.browser_automation_engine) {
|
|
97967
|
+
const {
|
|
97968
|
+
playwright_mcp_args: _ancestorPlaywrightMcpArgs,
|
|
97969
|
+
...browserAutomationEngine
|
|
97970
|
+
} = config3.browser_automation_engine;
|
|
97971
|
+
config3 = {
|
|
97972
|
+
...config3,
|
|
97973
|
+
browser_automation_engine: userPlaywrightMcpArgs !== undefined ? { ...browserAutomationEngine, playwright_mcp_args: userPlaywrightMcpArgs } : browserAutomationEngine
|
|
97974
|
+
};
|
|
97975
|
+
}
|
|
97545
97976
|
applyDisabledProviders(config3);
|
|
97546
97977
|
log2("Final merged config", {
|
|
97547
97978
|
agents: config3.agents,
|
|
@@ -98013,22 +98444,170 @@ var BOULDER_FILE = "boulder.json";
|
|
|
98013
98444
|
var BOULDER_STATE_PATH = `${BOULDER_DIR}/${BOULDER_FILE}`;
|
|
98014
98445
|
var NOTEPAD_DIR = "notepads";
|
|
98015
98446
|
var NOTEPAD_BASE_PATH = `${BOULDER_DIR}/${NOTEPAD_DIR}`;
|
|
98016
|
-
// packages/boulder-state/src/
|
|
98017
|
-
|
|
98018
|
-
var TODO_HEADING_PATTERN =
|
|
98019
|
-
var FINAL_VERIFICATION_HEADING_PATTERN =
|
|
98020
|
-
var
|
|
98021
|
-
var
|
|
98022
|
-
var
|
|
98023
|
-
var
|
|
98024
|
-
function
|
|
98025
|
-
const
|
|
98026
|
-
|
|
98027
|
-
|
|
98447
|
+
// packages/boulder-state/src/plan-checklist.ts
|
|
98448
|
+
var SIMPLE_CHECKBOX_PATTERN = /^[-*][ \t]*\[[ \t]*([xX]?)[ \t]*\][ \t]+(.+)$/;
|
|
98449
|
+
var TODO_HEADING_PATTERN = /^##[ \t]+TODOs(?:[ \t]+#+)?[ \t]*$/i;
|
|
98450
|
+
var FINAL_VERIFICATION_HEADING_PATTERN = /^##[ \t]+Final Verification Wave(?:[ \t]+#+)?[ \t]*$/i;
|
|
98451
|
+
var SECTION_BOUNDARY_HEADING_PATTERN = /^#{1,2}(?:[ \t]+|$)/;
|
|
98452
|
+
var FENCE_PATTERN = /^[ \t]{0,3}(`{3,}|~{3,})(.*)$/;
|
|
98453
|
+
var TODO_CHECKBOX_PATTERN = /^- \[([ xX])\] ([1-9]\d*\. .+)$/;
|
|
98454
|
+
var FINAL_WAVE_CHECKBOX_PATTERN = /^- \[([ xX])\] (F[1-9]\d*\. .+)$/i;
|
|
98455
|
+
function parsePlanChecklist(markdown) {
|
|
98456
|
+
const lines = markdown.split(/\r?\n/);
|
|
98457
|
+
if (!hasStructuredSection(lines)) {
|
|
98458
|
+
return parseSimpleChecklist(lines);
|
|
98459
|
+
}
|
|
98460
|
+
return parseStructuredPlan(lines).checklist;
|
|
98461
|
+
}
|
|
98462
|
+
function parseCurrentTopLevelTask(markdown) {
|
|
98463
|
+
const lines = markdown.split(/\r?\n/);
|
|
98464
|
+
if (!hasStructuredSection(lines)) {
|
|
98465
|
+
return null;
|
|
98466
|
+
}
|
|
98467
|
+
return parseStructuredPlan(lines).nextTask;
|
|
98468
|
+
}
|
|
98469
|
+
function parseStructuredPlan(lines) {
|
|
98470
|
+
let remaining = 0;
|
|
98471
|
+
let total = 0;
|
|
98472
|
+
let nextTaskLabel = null;
|
|
98473
|
+
let nextTask = null;
|
|
98474
|
+
let section = "other";
|
|
98475
|
+
let fence = null;
|
|
98476
|
+
for (const line of lines) {
|
|
98477
|
+
if (fence !== null) {
|
|
98478
|
+
if (isClosingFence(line, fence)) {
|
|
98479
|
+
fence = null;
|
|
98480
|
+
}
|
|
98481
|
+
continue;
|
|
98482
|
+
}
|
|
98483
|
+
const openingFence = parseOpeningFence(line);
|
|
98484
|
+
if (openingFence !== null) {
|
|
98485
|
+
fence = openingFence;
|
|
98486
|
+
continue;
|
|
98487
|
+
}
|
|
98488
|
+
if (SECTION_BOUNDARY_HEADING_PATTERN.test(line)) {
|
|
98489
|
+
section = parseStructuredSectionHeading(line);
|
|
98490
|
+
continue;
|
|
98491
|
+
}
|
|
98492
|
+
if (section === "other") {
|
|
98493
|
+
continue;
|
|
98494
|
+
}
|
|
98495
|
+
const checkbox = parseStructuredTopLevelCheckbox(line, section);
|
|
98496
|
+
if (checkbox === null) {
|
|
98497
|
+
continue;
|
|
98498
|
+
}
|
|
98499
|
+
total += 1;
|
|
98500
|
+
if (checkbox.checked) {
|
|
98501
|
+
continue;
|
|
98502
|
+
}
|
|
98503
|
+
remaining += 1;
|
|
98504
|
+
if (nextTaskLabel === null) {
|
|
98505
|
+
nextTaskLabel = checkbox.label;
|
|
98506
|
+
nextTask = checkbox.task;
|
|
98507
|
+
}
|
|
98508
|
+
}
|
|
98509
|
+
return {
|
|
98510
|
+
checklist: {
|
|
98511
|
+
completed: total - remaining,
|
|
98512
|
+
remaining,
|
|
98513
|
+
total,
|
|
98514
|
+
nextTaskLabel
|
|
98515
|
+
},
|
|
98516
|
+
nextTask
|
|
98517
|
+
};
|
|
98518
|
+
}
|
|
98519
|
+
function parseSimpleChecklist(lines) {
|
|
98520
|
+
let remaining = 0;
|
|
98521
|
+
let total = 0;
|
|
98522
|
+
let nextTaskLabel = null;
|
|
98523
|
+
let fence = null;
|
|
98524
|
+
for (const line of lines) {
|
|
98525
|
+
if (fence !== null) {
|
|
98526
|
+
if (isClosingFence(line, fence)) {
|
|
98527
|
+
fence = null;
|
|
98528
|
+
}
|
|
98529
|
+
continue;
|
|
98530
|
+
}
|
|
98531
|
+
const openingFence = parseOpeningFence(line);
|
|
98532
|
+
if (openingFence !== null) {
|
|
98533
|
+
fence = openingFence;
|
|
98534
|
+
continue;
|
|
98535
|
+
}
|
|
98536
|
+
const checkbox = parseSimpleTopLevelCheckbox(line);
|
|
98537
|
+
if (checkbox === null) {
|
|
98538
|
+
continue;
|
|
98539
|
+
}
|
|
98540
|
+
total += 1;
|
|
98541
|
+
if (checkbox.checked) {
|
|
98542
|
+
continue;
|
|
98543
|
+
}
|
|
98544
|
+
remaining += 1;
|
|
98545
|
+
if (nextTaskLabel === null) {
|
|
98546
|
+
nextTaskLabel = checkbox.label;
|
|
98547
|
+
}
|
|
98548
|
+
}
|
|
98549
|
+
return { completed: total - remaining, remaining, total, nextTaskLabel };
|
|
98550
|
+
}
|
|
98551
|
+
function parseSimpleTopLevelCheckbox(line) {
|
|
98552
|
+
const match = line.match(SIMPLE_CHECKBOX_PATTERN);
|
|
98553
|
+
const marker = match?.[1];
|
|
98554
|
+
const label = match?.[2];
|
|
98555
|
+
if (marker === undefined || label === undefined) {
|
|
98556
|
+
return null;
|
|
98557
|
+
}
|
|
98558
|
+
return { checked: marker.toLowerCase() === "x", label };
|
|
98559
|
+
}
|
|
98560
|
+
function hasStructuredSection(lines) {
|
|
98561
|
+
let fence = null;
|
|
98562
|
+
for (const line of lines) {
|
|
98563
|
+
if (fence !== null) {
|
|
98564
|
+
if (isClosingFence(line, fence)) {
|
|
98565
|
+
fence = null;
|
|
98566
|
+
}
|
|
98567
|
+
continue;
|
|
98568
|
+
}
|
|
98569
|
+
const openingFence = parseOpeningFence(line);
|
|
98570
|
+
if (openingFence !== null) {
|
|
98571
|
+
fence = openingFence;
|
|
98572
|
+
continue;
|
|
98573
|
+
}
|
|
98574
|
+
if (parseStructuredSectionHeading(line) !== "other") {
|
|
98575
|
+
return true;
|
|
98576
|
+
}
|
|
98577
|
+
}
|
|
98578
|
+
return false;
|
|
98579
|
+
}
|
|
98580
|
+
function parseStructuredSectionHeading(line) {
|
|
98581
|
+
if (TODO_HEADING_PATTERN.test(line)) {
|
|
98582
|
+
return "todo";
|
|
98583
|
+
}
|
|
98584
|
+
if (FINAL_VERIFICATION_HEADING_PATTERN.test(line)) {
|
|
98585
|
+
return "final-wave";
|
|
98586
|
+
}
|
|
98587
|
+
return "other";
|
|
98588
|
+
}
|
|
98589
|
+
function parseStructuredTopLevelCheckbox(line, section) {
|
|
98590
|
+
const pattern = section === "todo" ? TODO_CHECKBOX_PATTERN : FINAL_WAVE_CHECKBOX_PATTERN;
|
|
98591
|
+
const match = line.match(pattern);
|
|
98592
|
+
const marker = match?.[1];
|
|
98593
|
+
const label = match?.[2];
|
|
98594
|
+
if (marker === undefined || label === undefined) {
|
|
98595
|
+
return null;
|
|
98596
|
+
}
|
|
98597
|
+
const task = buildTaskRef(section, label);
|
|
98598
|
+
if (task === null) {
|
|
98599
|
+
return null;
|
|
98600
|
+
}
|
|
98601
|
+
return { checked: marker.toLowerCase() === "x", label, task };
|
|
98602
|
+
}
|
|
98603
|
+
function buildTaskRef(section, label) {
|
|
98604
|
+
const pattern = section === "todo" ? /^([1-9]\d*)\. (.+)$/ : /^(F[1-9]\d*)\. (.+)$/i;
|
|
98605
|
+
const match = label.match(pattern);
|
|
98606
|
+
const rawLabel = match?.[1];
|
|
98607
|
+
const title = match?.[2];
|
|
98608
|
+
if (rawLabel === undefined || title === undefined) {
|
|
98028
98609
|
return null;
|
|
98029
98610
|
}
|
|
98030
|
-
const rawLabel = match[1];
|
|
98031
|
-
const title = match[2].trim();
|
|
98032
98611
|
return {
|
|
98033
98612
|
key: `${section}:${rawLabel.toLowerCase()}`,
|
|
98034
98613
|
section,
|
|
@@ -98036,31 +98615,29 @@ function buildTaskRef(section, taskLabel) {
|
|
|
98036
98615
|
title
|
|
98037
98616
|
};
|
|
98038
98617
|
}
|
|
98618
|
+
function parseOpeningFence(line) {
|
|
98619
|
+
const match = line.match(FENCE_PATTERN);
|
|
98620
|
+
const run = match?.[1];
|
|
98621
|
+
const info = match?.[2];
|
|
98622
|
+
const marker = run?.charAt(0);
|
|
98623
|
+
if (run === undefined || info === undefined || marker !== "`" && marker !== "~" || marker === "`" && info.includes("`")) {
|
|
98624
|
+
return null;
|
|
98625
|
+
}
|
|
98626
|
+
return { marker, length: run.length };
|
|
98627
|
+
}
|
|
98628
|
+
function isClosingFence(line, fence) {
|
|
98629
|
+
const run = line.match(/^[ \t]{0,3}(`{3,}|~{3,})[ \t]*$/)?.[1];
|
|
98630
|
+
return run?.charAt(0) === fence.marker && run.length >= fence.length;
|
|
98631
|
+
}
|
|
98632
|
+
// packages/boulder-state/src/top-level-task.ts
|
|
98633
|
+
import { existsSync as existsSync37, readFileSync as readFileSync19 } from "node:fs";
|
|
98039
98634
|
function readCurrentTopLevelTask(planPath) {
|
|
98040
98635
|
if (!existsSync37(planPath)) {
|
|
98041
98636
|
return null;
|
|
98042
98637
|
}
|
|
98043
98638
|
try {
|
|
98044
98639
|
const content = readFileSync19(planPath, "utf-8");
|
|
98045
|
-
|
|
98046
|
-
let section = "other";
|
|
98047
|
-
for (const line of lines) {
|
|
98048
|
-
if (SECOND_LEVEL_HEADING_PATTERN.test(line)) {
|
|
98049
|
-
section = TODO_HEADING_PATTERN.test(line) ? "todo" : FINAL_VERIFICATION_HEADING_PATTERN.test(line) ? "final-wave" : "other";
|
|
98050
|
-
}
|
|
98051
|
-
const uncheckedTaskMatch = line.match(UNCHECKED_CHECKBOX_PATTERN);
|
|
98052
|
-
if (!uncheckedTaskMatch || uncheckedTaskMatch[1].length > 0) {
|
|
98053
|
-
continue;
|
|
98054
|
-
}
|
|
98055
|
-
if (section !== "todo" && section !== "final-wave") {
|
|
98056
|
-
continue;
|
|
98057
|
-
}
|
|
98058
|
-
const taskRef = buildTaskRef(section, uncheckedTaskMatch[2].trim());
|
|
98059
|
-
if (taskRef) {
|
|
98060
|
-
return taskRef;
|
|
98061
|
-
}
|
|
98062
|
-
}
|
|
98063
|
-
return null;
|
|
98640
|
+
return parseCurrentTopLevelTask(content);
|
|
98064
98641
|
} catch {
|
|
98065
98642
|
return null;
|
|
98066
98643
|
}
|
|
@@ -98094,69 +98671,25 @@ function resolveBoulderPlanPathForWork(directory, work) {
|
|
|
98094
98671
|
}
|
|
98095
98672
|
// packages/boulder-state/src/storage/plan-progress.ts
|
|
98096
98673
|
import { existsSync as existsSync39, readFileSync as readFileSync20, readdirSync as readdirSync5, statSync as statSync5 } from "node:fs";
|
|
98097
|
-
var TODO_HEADING_PATTERN2 = /^##\s+TODOs\b/i;
|
|
98098
|
-
var FINAL_VERIFICATION_HEADING_PATTERN2 = /^##\s+Final Verification Wave\b/i;
|
|
98099
|
-
var SECOND_LEVEL_HEADING_PATTERN2 = /^##\s+/;
|
|
98100
|
-
var UNCHECKED_CHECKBOX_PATTERN2 = /^(\s*)[-*]\s*\[\s*\]\s*(.+)$/;
|
|
98101
|
-
var CHECKED_CHECKBOX_PATTERN = /^(\s*)[-*]\s*\[[xX]\]\s*(.+)$/;
|
|
98102
|
-
var TODO_TASK_PATTERN2 = /^\d+\.\s+/;
|
|
98103
|
-
var FINAL_WAVE_TASK_PATTERN2 = /^F\d+\.\s+/i;
|
|
98104
98674
|
function getPlanProgress(planPath) {
|
|
98105
98675
|
if (!existsSync39(planPath)) {
|
|
98106
98676
|
return { total: 0, completed: 0, isComplete: false };
|
|
98107
98677
|
}
|
|
98108
98678
|
try {
|
|
98109
98679
|
const content = readFileSync20(planPath, "utf-8");
|
|
98110
|
-
const
|
|
98111
|
-
|
|
98112
|
-
|
|
98113
|
-
|
|
98114
|
-
|
|
98115
|
-
|
|
98680
|
+
const checklist = parsePlanChecklist(content);
|
|
98681
|
+
return {
|
|
98682
|
+
total: checklist.total,
|
|
98683
|
+
completed: checklist.completed,
|
|
98684
|
+
isComplete: checklist.total > 0 && checklist.remaining === 0
|
|
98685
|
+
};
|
|
98116
98686
|
} catch {
|
|
98117
98687
|
return { total: 0, completed: 0, isComplete: false };
|
|
98118
98688
|
}
|
|
98119
98689
|
}
|
|
98120
|
-
function getStructuredPlanProgress(lines) {
|
|
98121
|
-
let section = "other";
|
|
98122
|
-
let total = 0;
|
|
98123
|
-
let completed = 0;
|
|
98124
|
-
for (const line of lines) {
|
|
98125
|
-
if (SECOND_LEVEL_HEADING_PATTERN2.test(line)) {
|
|
98126
|
-
section = TODO_HEADING_PATTERN2.test(line) ? "todo" : FINAL_VERIFICATION_HEADING_PATTERN2.test(line) ? "final-wave" : "other";
|
|
98127
|
-
continue;
|
|
98128
|
-
}
|
|
98129
|
-
if (section !== "todo" && section !== "final-wave") {
|
|
98130
|
-
continue;
|
|
98131
|
-
}
|
|
98132
|
-
const checkedMatch = line.match(CHECKED_CHECKBOX_PATTERN);
|
|
98133
|
-
const uncheckedMatch = checkedMatch ? null : line.match(UNCHECKED_CHECKBOX_PATTERN2);
|
|
98134
|
-
const match = checkedMatch ?? uncheckedMatch;
|
|
98135
|
-
if (!match || match[1].length > 0) {
|
|
98136
|
-
continue;
|
|
98137
|
-
}
|
|
98138
|
-
const taskBody = match[2].trim();
|
|
98139
|
-
const labelPattern = section === "todo" ? TODO_TASK_PATTERN2 : FINAL_WAVE_TASK_PATTERN2;
|
|
98140
|
-
if (!labelPattern.test(taskBody)) {
|
|
98141
|
-
continue;
|
|
98142
|
-
}
|
|
98143
|
-
total += 1;
|
|
98144
|
-
if (checkedMatch) {
|
|
98145
|
-
completed += 1;
|
|
98146
|
-
}
|
|
98147
|
-
}
|
|
98148
|
-
return { total, completed, isComplete: total > 0 && completed === total };
|
|
98149
|
-
}
|
|
98150
|
-
function getSimplePlanProgress(content) {
|
|
98151
|
-
const uncheckedMatches = content.match(/^[-*]\s*\[\s*\]/gm) ?? [];
|
|
98152
|
-
const checkedMatches = content.match(/^[-*]\s*\[[xX]\]/gm) ?? [];
|
|
98153
|
-
const total = uncheckedMatches.length + checkedMatches.length;
|
|
98154
|
-
const completed = checkedMatches.length;
|
|
98155
|
-
return { total, completed, isComplete: total > 0 && completed === total };
|
|
98156
|
-
}
|
|
98157
98690
|
// packages/boulder-state/src/storage/shared.ts
|
|
98158
98691
|
var RESERVED_KEYS = new Set(["__proto__", "prototype", "constructor"]);
|
|
98159
|
-
var SESSION_ID_PREFIX_PATTERN = /^(codex|opencode):/;
|
|
98692
|
+
var SESSION_ID_PREFIX_PATTERN = /^(codex|opencode|senpi):/;
|
|
98160
98693
|
function normalizeSessionId(sessionId, platform = "opencode") {
|
|
98161
98694
|
if (SESSION_ID_PREFIX_PATTERN.test(sessionId)) {
|
|
98162
98695
|
return sessionId;
|
|
@@ -98231,7 +98764,7 @@ function readBoulderState(directory) {
|
|
|
98231
98764
|
try {
|
|
98232
98765
|
const content = readFileSync21(filePath, "utf-8");
|
|
98233
98766
|
const parsed = JSON.parse(content);
|
|
98234
|
-
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
98767
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed) || Object.keys(parsed).length === 0) {
|
|
98235
98768
|
return null;
|
|
98236
98769
|
}
|
|
98237
98770
|
normalizeState(parsed);
|
|
@@ -100188,6 +100721,7 @@ import { readFileSync as readFileSync35 } from "node:fs";
|
|
|
100188
100721
|
import { homedir as homedir16 } from "node:os";
|
|
100189
100722
|
import { dirname as dirname29, relative as relative9 } from "node:path";
|
|
100190
100723
|
init_shared();
|
|
100724
|
+
init_logger2();
|
|
100191
100725
|
init_plugin_identity();
|
|
100192
100726
|
function resolveHomeDirectory2() {
|
|
100193
100727
|
return process.env.HOME ?? process.env.USERPROFILE ?? homedir16();
|
|
@@ -100276,13 +100810,45 @@ function mergeLoadedConfig(userLayersNearestFirst, projectLayersNearestFirst) {
|
|
|
100276
100810
|
config3 = mergeConfigs2(config3, layer.config);
|
|
100277
100811
|
}
|
|
100278
100812
|
const userMcpEnvAllowlist = config3.mcp_env_allowlist ?? [];
|
|
100813
|
+
const userPlaywrightMcpArgs = config3.browser_automation_engine?.playwright_mcp_args;
|
|
100279
100814
|
for (const layer of [...projectLayersNearestFirst].reverse()) {
|
|
100280
100815
|
if (layer.config)
|
|
100281
100816
|
config3 = mergeConfigs2(config3, layer.config);
|
|
100282
100817
|
}
|
|
100283
100818
|
config3 = { ...config3, mcp_env_allowlist: userMcpEnvAllowlist };
|
|
100819
|
+
if (config3.browser_automation_engine) {
|
|
100820
|
+
const {
|
|
100821
|
+
playwright_mcp_args: _projectPlaywrightMcpArgs,
|
|
100822
|
+
...browserAutomationEngine
|
|
100823
|
+
} = config3.browser_automation_engine;
|
|
100824
|
+
config3 = {
|
|
100825
|
+
...config3,
|
|
100826
|
+
browser_automation_engine: userPlaywrightMcpArgs !== undefined ? { ...browserAutomationEngine, playwright_mcp_args: userPlaywrightMcpArgs } : browserAutomationEngine
|
|
100827
|
+
};
|
|
100828
|
+
}
|
|
100284
100829
|
return applyDisabledProviders(config3);
|
|
100285
100830
|
}
|
|
100831
|
+
function migrateRalphLoopConfig(config3) {
|
|
100832
|
+
const legacy = config3.ralph_loop;
|
|
100833
|
+
if (legacy === undefined) {
|
|
100834
|
+
return config3;
|
|
100835
|
+
}
|
|
100836
|
+
const enabled = typeof legacy.enabled === "boolean" ? legacy.enabled : undefined;
|
|
100837
|
+
const defaultMaxIterations = typeof legacy.default_max_iterations === "number" ? legacy.default_max_iterations : undefined;
|
|
100838
|
+
if (enabled === undefined && defaultMaxIterations === undefined) {
|
|
100839
|
+
return config3;
|
|
100840
|
+
}
|
|
100841
|
+
log2("[config] ralph_loop is deprecated and will be removed in a future release. Use goal instead.");
|
|
100842
|
+
const existingGoal = config3.goal;
|
|
100843
|
+
return {
|
|
100844
|
+
...config3,
|
|
100845
|
+
goal: {
|
|
100846
|
+
enabled: existingGoal?.enabled ?? enabled ?? false,
|
|
100847
|
+
auto_start: existingGoal?.auto_start ?? false,
|
|
100848
|
+
default_max_iterations: existingGoal?.default_max_iterations ?? defaultMaxIterations ?? 100
|
|
100849
|
+
}
|
|
100850
|
+
};
|
|
100851
|
+
}
|
|
100286
100852
|
function validatePluginConfig(directory) {
|
|
100287
100853
|
const userLayersNearestFirst = discoverUserLayers().map((layer) => parseLayerConfig(layer.path));
|
|
100288
100854
|
const projectLayersNearestFirst = discoverProjectLayersNearestFirst(directory).map((layer) => parseLayerConfig(layer.path));
|
|
@@ -100292,7 +100858,7 @@ function validatePluginConfig(directory) {
|
|
|
100292
100858
|
valid: messages.length === 0,
|
|
100293
100859
|
messages,
|
|
100294
100860
|
path: firstFailingPath(layers) ?? firstPath(layers),
|
|
100295
|
-
config: mergeLoadedConfig(userLayersNearestFirst, projectLayersNearestFirst)
|
|
100861
|
+
config: migrateRalphLoopConfig(mergeLoadedConfig(userLayersNearestFirst, projectLayersNearestFirst))
|
|
100296
100862
|
};
|
|
100297
100863
|
}
|
|
100298
100864
|
|
|
@@ -101603,10 +102169,10 @@ async function gatherCodexSummary(deps = {}) {
|
|
|
101603
102169
|
const binDir = resolveCodexInstallerBinDir({ binDir: deps.binDir, codexHome, env: process.env });
|
|
101604
102170
|
const detection = await (deps.detectCodexInstallation ?? detectCodexInstallation)();
|
|
101605
102171
|
const pluginRoot = await resolveInstalledPluginRoot(codexHome);
|
|
101606
|
-
const
|
|
102172
|
+
const manifest2 = pluginRoot === null ? null : await readJson(join82(pluginRoot, ".codex-plugin", "plugin.json"));
|
|
101607
102173
|
const installSnapshot = pluginRoot === null ? null : await readJson(join82(pluginRoot, "lazycodex-install.json"));
|
|
101608
102174
|
const configPath = join82(codexHome, "config.toml");
|
|
101609
|
-
const pluginVersion = stringField(
|
|
102175
|
+
const pluginVersion = stringField(manifest2, "version");
|
|
101610
102176
|
return {
|
|
101611
102177
|
codexPath: detection.found && "path" in detection ? detection.path : null,
|
|
101612
102178
|
codexSource: detection.found ? detection.source : null,
|
|
@@ -101953,12 +102519,12 @@ async function auditBundleTargets(pluginRoot) {
|
|
|
101953
102519
|
const broken = [];
|
|
101954
102520
|
let referencedCount = 0;
|
|
101955
102521
|
for (const manifestPath of await findManifestPaths(pluginRoot, ".mcp.json")) {
|
|
101956
|
-
const
|
|
101957
|
-
if (
|
|
102522
|
+
const manifest2 = await readJson2(manifestPath);
|
|
102523
|
+
if (manifest2 === null || !isRecord6(manifest2["mcpServers"]))
|
|
101958
102524
|
continue;
|
|
101959
102525
|
const manifestRoot = dirname32(manifestPath);
|
|
101960
102526
|
const isRootManifest = resolve23(manifestRoot) === resolve23(pluginRoot);
|
|
101961
|
-
for (const server2 of Object.values(
|
|
102527
|
+
for (const server2 of Object.values(manifest2["mcpServers"])) {
|
|
101962
102528
|
if (!isRecord6(server2) || !Array.isArray(server2["args"]))
|
|
101963
102529
|
continue;
|
|
101964
102530
|
for (const arg of server2["args"]) {
|
|
@@ -101972,11 +102538,11 @@ async function auditBundleTargets(pluginRoot) {
|
|
|
101972
102538
|
}
|
|
101973
102539
|
}
|
|
101974
102540
|
for (const hookManifestPath of await findHookManifestPaths(pluginRoot)) {
|
|
101975
|
-
const
|
|
101976
|
-
if (
|
|
102541
|
+
const manifest2 = await readJson2(hookManifestPath);
|
|
102542
|
+
if (manifest2 === null)
|
|
101977
102543
|
continue;
|
|
101978
102544
|
const commands2 = [];
|
|
101979
|
-
collectHookCommands(
|
|
102545
|
+
collectHookCommands(manifest2, commands2);
|
|
101980
102546
|
const hookPluginRoot = dirname32(dirname32(hookManifestPath));
|
|
101981
102547
|
for (const command of commands2) {
|
|
101982
102548
|
for (const relativePath of extractPluginRootPaths(command)) {
|