oh-my-opencode 4.19.4 → 5.0.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.ja.md +1 -1
- package/README.ko.md +1 -1
- package/README.md +6 -5
- package/README.ru.md +1 -1
- package/README.zh-cn.md +1 -1
- package/bin/oh-my-opencode.js +14 -1
- package/bin/oh-my-opencode.test.ts +21 -0
- package/dist/cli/index.js +1452 -703
- package/dist/cli-node/index.js +1452 -703
- package/dist/config/schema/agent-overrides.d.ts +528 -0
- package/dist/config/schema/oh-my-opencode-config.d.ts +495 -0
- package/dist/features/monitor/batcher.d.ts +3 -1
- package/dist/features/monitor/manager-internals.d.ts +1 -0
- package/dist/features/monitor/output-injector-types.d.ts +2 -0
- package/dist/features/monitor/output-injector.d.ts +6 -0
- package/dist/hooks/todo-continuation-enforcer/types.d.ts +1 -0
- package/dist/hooks/todo-continuation-enforcer/unrecoverable-request-error.d.ts +9 -0
- package/dist/hooks/tool-pair-validator/hook.test-support.d.ts +29 -0
- package/dist/hooks/tool-pair-validator/tool-part-ids.d.ts +14 -5
- package/dist/hooks/tool-pair-validator/tool-result-repair.d.ts +4 -3
- package/dist/hooks/tool-pair-validator/types.d.ts +5 -22
- package/dist/index.js +2776 -2240
- package/dist/mcp/lsp.d.ts +1 -0
- package/dist/oh-my-opencode.schema.json +1466 -131
- package/dist/shared/tmux/constants.d.ts +1 -1
- package/dist/skills/ast-grep/SOURCE +1 -1
- package/dist/skills/ast-grep/install.ps1 +2 -2
- package/dist/skills/ast-grep/install.sh +1 -1
- package/dist/skills/ast-grep/references/install.md +2 -2
- package/dist/skills/ast-grep/tests/smoke.sh +1 -1
- package/dist/skills/start-work/SKILL.md +54 -9
- package/dist/skills/ultimate-browsing/SKILL.md +2 -2
- package/dist/skills/ultimate-browsing/engine/__main__.py +8 -1
- package/dist/skills/ultimate-browsing/engine/bias_check.py +11 -0
- package/dist/skills/ultimate-browsing/engine/fetch_chain.py +90 -52
- package/dist/skills/ultimate-browsing/engine/result_schema.py +10 -1
- package/dist/skills/ultimate-browsing/engine/surrogate.py +214 -0
- package/dist/skills/ultimate-browsing/engine/surrogates.yaml +60 -0
- package/dist/skills/ultimate-browsing/engine/tests/fixtures/amp_redirect_stub.html +7 -0
- package/dist/skills/ultimate-browsing/engine/tests/fixtures/search_interstitial.html +19 -0
- package/dist/skills/ultimate-browsing/engine/tests/fixtures/wayback_available.json +1 -0
- package/dist/skills/ultimate-browsing/engine/tests/fixtures/wayback_snapshot.html +1128 -0
- package/dist/skills/ultimate-browsing/engine/tests/test_surrogate.py +252 -0
- package/dist/skills/ultimate-browsing/engine/tests/test_surrogate_validators.py +78 -0
- package/dist/skills/ultimate-browsing/engine/validators.py +46 -0
- package/dist/skills/ultimate-browsing/engine/waf_detector.py +1 -1
- package/dist/skills/ultimate-browsing/engine/waf_profiles.yaml +10 -5
- package/dist/skills/ultimate-browsing/references/agent-reach/social.md +1 -1
- package/dist/skills/ultimate-browsing/references/chrome-stealth.md +13 -11
- package/dist/skills/ultimate-browsing/references/insane-search/README.md +4 -4
- package/dist/skills/ultimate-browsing/references/insane-search/cache-archive.md +51 -50
- package/dist/skills/ultimate-browsing/references/insane-search/fallback.md +1 -1
- package/dist/skills/ultimate-browsing/references/insane-search/jina.md +8 -2
- package/dist/skills/ultimate-browsing/references/insane-search/naver.md +1 -1
- package/dist/skills/ultimate-browsing/references/insane-search/twitter.md +3 -3
- package/dist/skills/ulw-plan/SKILL.md +1 -1
- package/dist/skills/ulw-plan/references/full-workflow.md +3 -3
- package/dist/skills/ulw-plan/scripts/scaffold-plan.mjs +1 -1
- package/dist/skills/ulw-research/SKILL.md +15 -10
- package/dist/tui.js +307 -28
- package/docs/reference/web-terminal-visual-qa.md +1 -1
- package/package.json +27 -19
- package/packages/lsp-core/src/lsp/connection.ts +1 -1
- package/packages/lsp-daemon/dist/cli.js +27 -13
- package/packages/lsp-daemon/dist/client.js +49 -35
- package/packages/lsp-daemon/dist/ensure-daemon.d.ts +1 -0
- package/packages/lsp-daemon/dist/ensure-daemon.js +18 -5
- package/packages/lsp-daemon/dist/index.js +34 -20
- package/packages/lsp-tools-mcp/dist/cli.js +1 -1
- package/packages/lsp-tools-mcp/dist/lsp/manager.js +1 -1
- package/packages/lsp-tools-mcp/dist/mcp.js +1 -1
- package/packages/lsp-tools-mcp/dist/tools.js +1 -1
- package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
- package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +268 -92
- 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 +7 -7
- package/packages/omo-codex/plugin/components/bootstrap/src/worker.ts +3 -0
- package/packages/omo-codex/plugin/components/codegraph/dist/cli.js +106 -6
- package/packages/omo-codex/plugin/components/codegraph/dist/serve.js +106 -6
- package/packages/omo-codex/plugin/components/codegraph/package.json +1 -1
- package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
- package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
- package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
- package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +3 -3
- package/packages/omo-codex/plugin/components/lsp/dist/cli.js +56 -42
- 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/hooks/hooks.json +4 -4
- package/packages/omo-codex/plugin/components/rules/package.json +1 -1
- package/packages/omo-codex/plugin/components/start-work-continuation/AGENTS.md +1 -0
- package/packages/omo-codex/plugin/components/start-work-continuation/README.md +5 -1
- package/packages/omo-codex/plugin/components/start-work-continuation/directive.md +2 -1
- package/packages/omo-codex/plugin/components/start-work-continuation/dist/cli.js +18 -0
- 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/codex-hook.ts +21 -0
- package/packages/omo-codex/plugin/components/start-work-continuation/test/codex-hook.test.ts +105 -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/CHANGELOG.md +2 -0
- package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-code-reviewer.toml +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-gate-reviewer.toml +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-qa-executor.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-low.toml +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-worker-medium.toml +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/agents/plan.toml +2 -2
- package/packages/omo-codex/plugin/components/ultrawork/directive.md +3 -2
- package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/skills/ultrawork/SKILL.md +3 -2
- package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/SKILL.md +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/full-workflow.md +3 -3
- package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/scripts/scaffold-plan.mjs +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/AGENTS.md +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/CHANGELOG.md +2 -0
- package/packages/omo-codex/plugin/components/ulw-loop/README.md +11 -11
- package/packages/omo-codex/plugin/components/ulw-loop/directive.md +3 -2
- package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-reconciliation.js +1 -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 +9 -9
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-steering.js +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +66 -66
- package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-instruction.js +4 -4
- package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-hook.js +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-crud.js +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-io.js +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/steering.js +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/stop-resume-hook.js +2 -2
- 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/SKILL.md +3 -3
- package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +22 -25
- package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-reconciliation.ts +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/src/cli-output.ts +9 -9
- package/packages/omo-codex/plugin/components/ulw-loop/src/cli-steering.ts +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/src/cli.ts +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-instruction.ts +4 -4
- package/packages/omo-codex/plugin/components/ulw-loop/src/codex-hook.ts +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/src/plan-crud.ts +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/src/plan-io.ts +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/src/steering.ts +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/src/stop-resume-hook.ts +2 -2
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-commands.test.ts +2 -2
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-entrypoint.test.ts +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-helpers.test.ts +2 -2
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-steering-kind-guidance.test.ts +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/test/codex-hook.test.ts +2 -2
- package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/quality-gate-builder.ts +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/test/package-smoke.test.ts +5 -5
- package/packages/omo-codex/plugin/components/ulw-loop/test/plan-io.test.ts +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-roles.test.ts +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/test/steering.test.ts +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/test/stop-resume-hook.test.ts +1 -1
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-codegraph-init-guidance.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
- package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
- package/packages/omo-codex/plugin/hooks/pre-tool-use-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 +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-checking-codegraph-bootstrap.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
- package/packages/omo-codex/plugin/hooks/stop-checking-start-work-continuation.json +1 -1
- package/packages/omo-codex/plugin/hooks/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 +13 -13
- package/packages/omo-codex/plugin/package.json +1 -1
- package/packages/omo-codex/plugin/scripts/sync-skills.mjs +4 -4
- package/packages/omo-codex/plugin/skills/ast-grep/SOURCE +1 -1
- package/packages/omo-codex/plugin/skills/ast-grep/install.ps1 +2 -2
- package/packages/omo-codex/plugin/skills/ast-grep/install.sh +1 -1
- package/packages/omo-codex/plugin/skills/ast-grep/references/install.md +2 -2
- package/packages/omo-codex/plugin/skills/ast-grep/tests/smoke.sh +1 -1
- package/packages/omo-codex/plugin/skills/start-work/SKILL.md +54 -9
- package/packages/omo-codex/plugin/skills/ultimate-browsing/SKILL.md +2 -2
- package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/__main__.py +8 -1
- package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/bias_check.py +11 -0
- package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/fetch_chain.py +90 -52
- package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/result_schema.py +10 -1
- package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/surrogate.py +214 -0
- package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/surrogates.yaml +60 -0
- package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/tests/fixtures/amp_redirect_stub.html +7 -0
- package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/tests/fixtures/search_interstitial.html +19 -0
- package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/tests/fixtures/wayback_available.json +1 -0
- package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/tests/fixtures/wayback_snapshot.html +1128 -0
- package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/tests/test_surrogate.py +252 -0
- package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/tests/test_surrogate_validators.py +78 -0
- package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/validators.py +46 -0
- package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/waf_detector.py +1 -1
- package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/waf_profiles.yaml +10 -5
- package/packages/omo-codex/plugin/skills/ultimate-browsing/references/agent-reach/social.md +1 -1
- package/packages/omo-codex/plugin/skills/ultimate-browsing/references/chrome-stealth.md +13 -11
- package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/README.md +4 -4
- package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/cache-archive.md +51 -50
- package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/fallback.md +1 -1
- package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/jina.md +8 -2
- package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/naver.md +1 -1
- package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/twitter.md +3 -3
- package/packages/omo-codex/plugin/skills/ultrawork/SKILL.md +3 -2
- package/packages/omo-codex/plugin/skills/ulw-loop/SKILL.md +3 -3
- package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +22 -25
- package/packages/omo-codex/plugin/skills/ulw-plan/SKILL.md +1 -1
- package/packages/omo-codex/plugin/skills/ulw-plan/references/full-workflow.md +3 -3
- package/packages/omo-codex/plugin/skills/ulw-plan/scripts/scaffold-plan.mjs +1 -1
- package/packages/omo-codex/plugin/skills/ulw-research/SKILL.md +15 -10
- package/packages/omo-codex/plugin/test/bootstrap-binlinks.test.mjs +12 -12
- package/packages/omo-codex/plugin/test/bootstrap-orchestration.test.mjs +36 -4
- package/packages/omo-codex/plugin/test/sync-skills-orchestration.test.mjs +1 -1
- package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +4 -4
- package/packages/omo-codex/scripts/install-bin-links.test.mjs +56 -2
- package/packages/omo-codex/scripts/install-delegated-command.test.mjs +6 -6
- package/packages/omo-codex/scripts/install-dist/install-local.mjs +115 -61
- package/packages/omo-codex/scripts/install-local-entrypoint.test.mjs +4 -4
- package/packages/omo-codex/scripts/install-local.test.mjs +5 -2
- package/packages/shared-skills/index.mjs +19 -1
- package/packages/shared-skills/skills/ast-grep/SOURCE +1 -1
- package/packages/shared-skills/skills/ast-grep/install.ps1 +2 -2
- package/packages/shared-skills/skills/ast-grep/install.sh +1 -1
- package/packages/shared-skills/skills/ast-grep/references/install.md +2 -2
- package/packages/shared-skills/skills/ast-grep/tests/smoke.sh +1 -1
- package/packages/shared-skills/skills/start-work/SKILL.md +54 -9
- package/packages/shared-skills/skills/ultimate-browsing/SKILL.md +2 -2
- package/packages/shared-skills/skills/ultimate-browsing/engine/__main__.py +8 -1
- package/packages/shared-skills/skills/ultimate-browsing/engine/bias_check.py +11 -0
- package/packages/shared-skills/skills/ultimate-browsing/engine/fetch_chain.py +90 -52
- package/packages/shared-skills/skills/ultimate-browsing/engine/result_schema.py +10 -1
- package/packages/shared-skills/skills/ultimate-browsing/engine/surrogate.py +214 -0
- package/packages/shared-skills/skills/ultimate-browsing/engine/surrogates.yaml +60 -0
- package/packages/shared-skills/skills/ultimate-browsing/engine/tests/fixtures/amp_redirect_stub.html +7 -0
- package/packages/shared-skills/skills/ultimate-browsing/engine/tests/fixtures/search_interstitial.html +19 -0
- package/packages/shared-skills/skills/ultimate-browsing/engine/tests/fixtures/wayback_available.json +1 -0
- package/packages/shared-skills/skills/ultimate-browsing/engine/tests/fixtures/wayback_snapshot.html +1128 -0
- package/packages/shared-skills/skills/ultimate-browsing/engine/tests/test_surrogate.py +252 -0
- package/packages/shared-skills/skills/ultimate-browsing/engine/tests/test_surrogate_validators.py +78 -0
- package/packages/shared-skills/skills/ultimate-browsing/engine/validators.py +46 -0
- package/packages/shared-skills/skills/ultimate-browsing/engine/waf_detector.py +1 -1
- package/packages/shared-skills/skills/ultimate-browsing/engine/waf_profiles.yaml +10 -5
- package/packages/shared-skills/skills/ultimate-browsing/references/agent-reach/social.md +1 -1
- package/packages/shared-skills/skills/ultimate-browsing/references/chrome-stealth.md +13 -11
- package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/README.md +4 -4
- package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/cache-archive.md +51 -50
- package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/fallback.md +1 -1
- package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/jina.md +8 -2
- package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/naver.md +1 -1
- package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/twitter.md +3 -3
- package/packages/shared-skills/skills/ulw-plan/SKILL.md +1 -1
- package/packages/shared-skills/skills/ulw-plan/references/full-workflow.md +3 -3
- package/packages/shared-skills/skills/ulw-plan/scripts/scaffold-plan.mjs +1 -1
- package/packages/shared-skills/skills/ulw-research/SKILL.md +15 -10
- package/postinstall.mjs +6 -0
|
@@ -12,9 +12,9 @@ const { runBootstrapWorker, runWorkerSetup } = await import(CLI_URL.href);
|
|
|
12
12
|
const MARKETPLACE_SOURCE_LINE = 'source = "https://github.com/code-yeongyu/lazycodex.git"';
|
|
13
13
|
const COMPONENT_BIN_NAME = "omo-toolbox";
|
|
14
14
|
const execFileAsync = promisify(execFile);
|
|
15
|
-
const
|
|
16
|
-
component: "omo-
|
|
17
|
-
hint: "use npx lazycodex-ai for the omo CLI",
|
|
15
|
+
const OMO_AGENT_TOOLKIT_DEGRADED_ENTRY = {
|
|
16
|
+
component: "omo-agent-toolkit",
|
|
17
|
+
hint: "use npx lazycodex-ai for the omo-agent-toolkit CLI",
|
|
18
18
|
reason: "marketplace payload has no dist/cli",
|
|
19
19
|
};
|
|
20
20
|
|
|
@@ -205,7 +205,7 @@ test("#given a completed v1 marker #when the worker runs against a v2 root #then
|
|
|
205
205
|
});
|
|
206
206
|
});
|
|
207
207
|
|
|
208
|
-
test("#given platform win32 #when the worker setup links bins #then component bins become .cmd shims and the
|
|
208
|
+
test("#given platform win32 #when the worker setup links bins #then component bins become .cmd shims and the canonical wrapper is omo-agent-toolkit.cmd", async () => {
|
|
209
209
|
await withBinLinkFixture(async (fixture) => {
|
|
210
210
|
const bashPath = "C:\\Tools\\Git\\bin\\bash.exe";
|
|
211
211
|
const pluginRoot = await writeVersionedRoot(fixture.root, "1.0.0", { withRuntimeCli: true });
|
|
@@ -226,19 +226,19 @@ test("#given platform win32 #when the worker setup links bins #then component bi
|
|
|
226
226
|
assert.match(shim, /"%OMO_NODE_BINARY%"/);
|
|
227
227
|
assert.match(shim, new RegExp(`"${escapeRegExp(componentEntrypoint)}" %\\*`));
|
|
228
228
|
assert.doesNotMatch(shim, new RegExp(`node "${escapeRegExp(componentEntrypoint)}" %\\*`));
|
|
229
|
-
const wrapper = await readFile(join(fixture.binDir, "omo.cmd"), "utf8");
|
|
229
|
+
const wrapper = await readFile(join(fixture.binDir, "omo-agent-toolkit.cmd"), "utf8");
|
|
230
230
|
assert.ok(wrapper.includes(join(pluginRoot, "dist", "cli", "index.js")));
|
|
231
231
|
await assert.rejects(() => lstat(join(fixture.binDir, COMPONENT_BIN_NAME)), "win32 must not leave posix symlinks behind");
|
|
232
232
|
});
|
|
233
233
|
});
|
|
234
234
|
|
|
235
|
-
test("#given a legacy payload without root CLI dist #when the worker setup runs #then it records degraded omo-
|
|
235
|
+
test("#given a legacy payload without root CLI dist #when the worker setup runs #then it records degraded omo-agent-toolkit and leaves no broken link", async () => {
|
|
236
236
|
await withBinLinkFixture(async (fixture) => {
|
|
237
237
|
const pluginRoot = await writeVersionedRoot(fixture.root, "1.0.0");
|
|
238
238
|
|
|
239
239
|
const outcome = await runWorkerSetup(setupOptions(fixture, pluginRoot, { now: 7_000, platform: process.platform }));
|
|
240
240
|
|
|
241
|
-
assert.deepEqual(outcome.degraded, [
|
|
241
|
+
assert.deepEqual(outcome.degraded, [OMO_AGENT_TOOLKIT_DEGRADED_ENTRY]);
|
|
242
242
|
await assert.rejects(() => lstat(join(fixture.binDir, "omo")), "no omo wrapper may be written without dist/cli");
|
|
243
243
|
await assert.rejects(() => lstat(join(fixture.binDir, "omo.cmd")), "no Windows omo wrapper may be written without dist/cli");
|
|
244
244
|
await assertNoDanglingEntries(fixture.binDir);
|
|
@@ -246,15 +246,15 @@ test("#given a legacy payload without root CLI dist #when the worker setup runs
|
|
|
246
246
|
const warning = JSON.parse(log)["warning"];
|
|
247
247
|
assert.equal(typeof warning, "string", `bootstrap.log warning must be a string, got: ${log}`);
|
|
248
248
|
assert.ok(
|
|
249
|
-
warning.includes("skipped the omo runtime wrapper because ") &&
|
|
249
|
+
warning.includes("skipped the omo-agent-toolkit runtime wrapper because ") &&
|
|
250
250
|
warning.includes(`${join("dist", "cli", "index.js")} is missing; `) &&
|
|
251
|
-
warning.includes("omo ulw-loop commands will be unavailable until a package shipping dist/cli is installed"),
|
|
251
|
+
warning.includes("omo-agent-toolkit ulw-loop commands will be unavailable until a package shipping dist/cli is installed"),
|
|
252
252
|
`bootstrap.log must carry the install-local warning text, got: ${log}`,
|
|
253
253
|
);
|
|
254
254
|
});
|
|
255
255
|
});
|
|
256
256
|
|
|
257
|
-
test("#given a payload shipping dist/cli #when the worker setup runs with no bin-dir override #then the omo wrapper lands in <codexHome>/bin without a degraded entry", async () => {
|
|
257
|
+
test("#given a payload shipping dist/cli #when the worker setup runs with no bin-dir override #then the omo-agent-toolkit wrapper lands in <codexHome>/bin without a degraded entry", async () => {
|
|
258
258
|
await withBinLinkFixture(async (fixture) => {
|
|
259
259
|
const pluginRoot = await writeVersionedRoot(fixture.root, "1.0.0", { withRuntimeCli: true });
|
|
260
260
|
|
|
@@ -262,12 +262,12 @@ test("#given a payload shipping dist/cli #when the worker setup runs with no bin
|
|
|
262
262
|
|
|
263
263
|
assert.deepEqual(outcome.degraded, []);
|
|
264
264
|
const defaultBinDir = join(fixture.codexHome, "bin");
|
|
265
|
-
const wrapperName = process.platform === "win32" ? "omo.cmd" : "omo";
|
|
265
|
+
const wrapperName = process.platform === "win32" ? "omo-agent-toolkit.cmd" : "omo-agent-toolkit";
|
|
266
266
|
const wrapperPath = join(defaultBinDir, wrapperName);
|
|
267
267
|
const wrapper = await readFile(wrapperPath, "utf8");
|
|
268
268
|
assert.ok(wrapper.includes(join(pluginRoot, "dist", "cli", "index.js")));
|
|
269
269
|
if (process.platform !== "win32") {
|
|
270
|
-
assert.ok((await stat(wrapperPath)).mode & 0o111, "the posix omo wrapper must be executable");
|
|
270
|
+
assert.ok((await stat(wrapperPath)).mode & 0o111, "the posix omo-agent-toolkit wrapper must be executable");
|
|
271
271
|
assert.equal(
|
|
272
272
|
await readlink(join(defaultBinDir, COMPONENT_BIN_NAME)),
|
|
273
273
|
join(pluginRoot, "components", "toolbox", "dist", "cli.js"),
|
|
@@ -321,7 +321,7 @@ test("#given a completed marker #when the worker runs with --once #then the mark
|
|
|
321
321
|
});
|
|
322
322
|
});
|
|
323
323
|
|
|
324
|
-
test("#given --only
|
|
324
|
+
test("#given --only names an injected custom step #when the worker runs #then only the matching step executes", async () => {
|
|
325
325
|
await withFixture(async (fixture) => {
|
|
326
326
|
const ran = [];
|
|
327
327
|
const step = (name) => ({
|
|
@@ -333,13 +333,45 @@ test("#given --only sg #when the worker runs #then only the matching step execut
|
|
|
333
333
|
});
|
|
334
334
|
|
|
335
335
|
const result = await runBootstrapWorker({
|
|
336
|
-
argv: ["--only", "
|
|
336
|
+
argv: ["--only", "custom"],
|
|
337
337
|
env: fixture.env,
|
|
338
|
-
steps: [step("
|
|
338
|
+
steps: [step("other"), step("custom")],
|
|
339
339
|
});
|
|
340
340
|
|
|
341
341
|
assert.equal(result.ran, true);
|
|
342
|
-
assert.deepEqual(ran, ["
|
|
342
|
+
assert.deepEqual(ran, ["custom"]);
|
|
343
|
+
});
|
|
344
|
+
});
|
|
345
|
+
|
|
346
|
+
test("#given an unknown --only value #when the worker starts #then it rejects before steps or bootstrap artifacts", async () => {
|
|
347
|
+
await withFixture(async (fixture) => {
|
|
348
|
+
let stepRuns = 0;
|
|
349
|
+
|
|
350
|
+
await assert.rejects(
|
|
351
|
+
() =>
|
|
352
|
+
runBootstrapWorker({
|
|
353
|
+
argv: ["--only", "bogus"],
|
|
354
|
+
env: fixture.env,
|
|
355
|
+
steps: [
|
|
356
|
+
{
|
|
357
|
+
name: "custom",
|
|
358
|
+
run: async () => {
|
|
359
|
+
stepRuns += 1;
|
|
360
|
+
return { degraded: [] };
|
|
361
|
+
},
|
|
362
|
+
},
|
|
363
|
+
],
|
|
364
|
+
}),
|
|
365
|
+
/unknown --only flag value: bogus/,
|
|
366
|
+
);
|
|
367
|
+
assert.equal(stepRuns, 0);
|
|
368
|
+
await assert.rejects(() => stat(join(fixture.pluginData, "bootstrap")));
|
|
369
|
+
await Promise.all([
|
|
370
|
+
assert.rejects(() => stat(join(fixture.pluginData, "bootstrap", "state.json"))),
|
|
371
|
+
assert.rejects(() => stat(join(fixture.pluginData, "bootstrap", "bootstrap.log"))),
|
|
372
|
+
assert.rejects(() => stat(join(fixture.pluginData, "bootstrap", "state.json.lock"))),
|
|
373
|
+
assert.rejects(() => stat(join(fixture.pluginData, "auto-update.json.lock"))),
|
|
374
|
+
]);
|
|
343
375
|
});
|
|
344
376
|
});
|
|
345
377
|
|
|
@@ -261,7 +261,7 @@ test("#given start-work skill #when synced for Codex #then the difficulty-tier d
|
|
|
261
261
|
const content = await readSkill("start-work");
|
|
262
262
|
|
|
263
263
|
assert.match(content, /lazycodex-worker-medium/);
|
|
264
|
-
assert.match(content, /
|
|
264
|
+
assert.match(content, /Codex tier mapping for the delegation router/);
|
|
265
265
|
assert.match(content, /Global Review and Debugging Gate/);
|
|
266
266
|
assert.match(content, /full commit SHA/);
|
|
267
267
|
assert.match(content, /re-read the ledger record/);
|
|
@@ -90,9 +90,9 @@ const startWorkCodexCompletion = `When all top-level checkboxes in \`## TODOs\`
|
|
|
90
90
|
4. Remove or mark the Boulder work as completed.
|
|
91
91
|
5. Print an \`ORCHESTRATION COMPLETE\` block with the plan path, verification commands, Global Review and Debugging Gate verdict, artifacts, and cleanup receipts.`;
|
|
92
92
|
|
|
93
|
-
const startWorkOriginalHardRule = "- No completion claim while an applicable ultraqa adversarial class was never probed. Each applicable class needs a captured observable result; each skipped class needs a one-line not-applicable reason in the ledger.\n- No PR/branch implementation, review, or merge in the main worktree; use the task-owned git worktree.\n- No unprefixed session ids in Boulder state.
|
|
93
|
+
const startWorkOriginalHardRule = "- No completion claim while an applicable ultraqa adversarial class was never probed. Each applicable class needs a captured observable result; each skipped class needs a one-line not-applicable reason in the ledger.\n- No PR/branch implementation, review, or merge in the main worktree; use the task-owned git worktree.\n- No unprefixed session ids in Boulder state. Sessions are always recorded as `codex:<session_id>`.";
|
|
94
94
|
|
|
95
|
-
const startWorkCodexHardRule = "- No completion claim while an applicable ultraqa adversarial class was never probed. Each applicable class needs a captured observable result; each skipped class needs a one-line not-applicable reason in the ledger.\n- No `ORCHESTRATION COMPLETE`, final response, PR creation, PR handoff, or merge before the Global Review and Debugging Gate passes with recorded evidence.\n- No PR/branch implementation or review in the main worktree; create or use a task-owned git worktree first.\n- No unprefixed session ids in Boulder state.
|
|
95
|
+
const startWorkCodexHardRule = "- No completion claim while an applicable ultraqa adversarial class was never probed. Each applicable class needs a captured observable result; each skipped class needs a one-line not-applicable reason in the ledger.\n- No `ORCHESTRATION COMPLETE`, final response, PR creation, PR handoff, or merge before the Global Review and Debugging Gate passes with recorded evidence.\n- No PR/branch implementation or review in the main worktree; create or use a task-owned git worktree first.\n- No unprefixed session ids in Boulder state. Sessions are always recorded as `codex:<session_id>`.";
|
|
96
96
|
|
|
97
97
|
const reviewWorkCodexGate = `
|
|
98
98
|
When \`review-work\` is used as a final implementation, PR, or \`$start-work\`
|
|
@@ -127,8 +127,8 @@ prefixes when identity is needed.
|
|
|
127
127
|
`;
|
|
128
128
|
const reviewWorkCodexGatePattern = new RegExp(reviewWorkCodexGate.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"));
|
|
129
129
|
|
|
130
|
-
const ulwResearchOriginalDeliveryGates = "### The delivery gates \u2014 every gate must PASS, in order\n\nNothing reaches the user until the gates pass:\n\n1. **Visual QA (always).** Render the produced artifact back to images \u2014 PDF pages to PNG, the HTML in a real browser \u2014 and look at them: missing or broken figures, clipped tables, overflowing CJK text, blank pages,
|
|
131
|
-
const ulwResearchCodexDeliveryGate = "### The delivery gate \u2014 visual QA must PASS\n\nNothing reaches the user until the gate passes:\n\n**Visual QA (always).** Render the produced artifact back to images \u2014 PDF pages to PNG, the HTML in a real browser \u2014 and look at them: missing or broken figures, clipped tables, overflowing CJK text, blank pages,
|
|
130
|
+
const ulwResearchOriginalDeliveryGates = "### The delivery gates \u2014 every gate must PASS, in order\n\nNothing reaches the user until the gates pass:\n\n1. **Visual QA (always).** Render the produced artifact back to images \u2014 PDF pages to PNG, the HTML in a real browser \u2014 and look at them: missing or broken figures, images stretched or spilling their containers, diagram or chart text rendered off the spec's font or palette, clipped tables, overflowing CJK text, blank pages, unlabeled chart values, wrong page breaks. Fix and re-render until the pages are clean. Reading the source markup is not visual QA; inspect the pixels.\n2. **Proofread gate \u2014 `task(category=\"writing\", ...)`.** Hand the final text to a dedicated `writing` worker whose only job is language: grammar, spelling, punctuation, terminology consistency, and whether the prose reads NATIVELY in the report's own language. It returns a defect list; fix every item and re-run the gate on the delta. Deliver only on a clean pass \u2014 this gate runs BEFORE the first delivery, not after the user finds the typo.";
|
|
131
|
+
const ulwResearchCodexDeliveryGate = "### The delivery gate \u2014 visual QA must PASS\n\nNothing reaches the user until the gate passes:\n\n**Visual QA (always).** Render the produced artifact back to images \u2014 PDF pages to PNG, the HTML in a real browser \u2014 and look at them: missing or broken figures, images stretched or spilling their containers, diagram or chart text rendered off the spec's font or palette, clipped tables, overflowing CJK text, blank pages, unlabeled chart values, wrong page breaks. Fix and re-render until the pages are clean. Reading the source markup is not visual QA; inspect the pixels.";
|
|
132
132
|
|
|
133
133
|
export function removeCodexSkillOverlays(skillName, content) {
|
|
134
134
|
if (skillName === "ulw-research") {
|
|
@@ -26,14 +26,61 @@ async function writeRuntimeWrapperFixture({ withNodeCli = false } = {}) {
|
|
|
26
26
|
}
|
|
27
27
|
await mkdir(homeDir, { recursive: true });
|
|
28
28
|
const link = await linkRootRuntimeBin({ binDir, codexHome, repoRoot, platform: "linux" });
|
|
29
|
-
return { homeDir, link, repoRoot };
|
|
29
|
+
return { binDir, codexHome, homeDir, link, repoRoot };
|
|
30
30
|
}
|
|
31
31
|
|
|
32
32
|
function runtimeWrapperEnv(homeDir) {
|
|
33
33
|
return { PATH: `${dirname(process.execPath)}:/usr/bin:/bin`, HOME: homeDir };
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
-
test("#given
|
|
36
|
+
test("#given the generated installer #when linking the root runtime #then writes only the canonical wrapper with marker and edition exports", async () => {
|
|
37
|
+
const { binDir, link } = await writeRuntimeWrapperFixture();
|
|
38
|
+
|
|
39
|
+
assert.equal(link.name, "omo-agent-toolkit");
|
|
40
|
+
assert.equal(link.path, join(binDir, "omo-agent-toolkit"));
|
|
41
|
+
const wrapper = await readFile(link.path, "utf8");
|
|
42
|
+
assert.match(wrapper, /OMO_GENERATED_RUNTIME_WRAPPER/);
|
|
43
|
+
assert.match(wrapper, /export OMO_INVOCATION_NAME=omo-agent-toolkit/);
|
|
44
|
+
assert.match(wrapper, /export OMO_EDITION=codex/);
|
|
45
|
+
await assert.rejects(lstat(join(binDir, "omo")));
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
test("#given a marker-bearing legacy omo #when linking the root runtime #then deletes it", async () => {
|
|
49
|
+
const root = await makeTempDir();
|
|
50
|
+
const repoRoot = join(root, "repo");
|
|
51
|
+
const binDir = join(root, "bin");
|
|
52
|
+
await mkdir(join(repoRoot, "dist", "cli"), { recursive: true });
|
|
53
|
+
await mkdir(binDir, { recursive: true });
|
|
54
|
+
await writeFile(join(repoRoot, "dist", "cli", "index.js"), "");
|
|
55
|
+
await writeFile(join(binDir, "omo"), "#!/bin/sh\n# OMO_GENERATED_RUNTIME_WRAPPER\n");
|
|
56
|
+
|
|
57
|
+
await linkRootRuntimeBin({ binDir, codexHome: join(root, "codex"), repoRoot, platform: "linux" });
|
|
58
|
+
|
|
59
|
+
await assert.rejects(lstat(join(binDir, "omo")));
|
|
60
|
+
assert.match(await readFile(join(binDir, "omo-agent-toolkit"), "utf8"), /OMO_GENERATED_RUNTIME_WRAPPER/);
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
test("#given an unmarked user-owned omo #when linking twice #then preserves it byte-identical and remains idempotent", async () => {
|
|
64
|
+
const root = await makeTempDir();
|
|
65
|
+
const repoRoot = join(root, "repo");
|
|
66
|
+
const binDir = join(root, "bin");
|
|
67
|
+
const legacyPath = join(binDir, "omo");
|
|
68
|
+
const canonicalPath = join(binDir, "omo-agent-toolkit");
|
|
69
|
+
const userContent = Buffer.from("#!/bin/sh\necho user-owned\n");
|
|
70
|
+
await mkdir(join(repoRoot, "dist", "cli"), { recursive: true });
|
|
71
|
+
await mkdir(binDir, { recursive: true });
|
|
72
|
+
await writeFile(join(repoRoot, "dist", "cli", "index.js"), "");
|
|
73
|
+
await writeFile(legacyPath, userContent);
|
|
74
|
+
|
|
75
|
+
await linkRootRuntimeBin({ binDir, codexHome: join(root, "codex"), repoRoot, platform: "linux" });
|
|
76
|
+
const firstCanonical = await readFile(canonicalPath);
|
|
77
|
+
await linkRootRuntimeBin({ binDir, codexHome: join(root, "codex"), repoRoot, platform: "linux" });
|
|
78
|
+
|
|
79
|
+
assert.deepEqual(await readFile(legacyPath), userContent);
|
|
80
|
+
assert.deepEqual(await readFile(canonicalPath), firstCanonical);
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
test("#given bun absent from PATH but present in ~/.bun/bin #when running the omo-agent-toolkit runtime wrapper #then resolves the bun fallback", async (t) => {
|
|
37
84
|
if (process.platform === "win32") return t.skip("posix wrapper execution");
|
|
38
85
|
const { homeDir, link } = await writeRuntimeWrapperFixture();
|
|
39
86
|
await mkdir(join(homeDir, ".bun", "bin"), { recursive: true });
|
|
@@ -114,7 +161,12 @@ test("#given Windows platform #when writing the omo runtime wrapper #then embeds
|
|
|
114
161
|
|
|
115
162
|
const link = await linkRootRuntimeBin({ binDir, codexHome: join(root, "codex"), repoRoot, platform: "win32" });
|
|
116
163
|
|
|
164
|
+
assert.equal(link.name, "omo-agent-toolkit");
|
|
165
|
+
assert.equal(link.path, join(binDir, "omo-agent-toolkit.cmd"));
|
|
117
166
|
const wrapper = await readFile(link.path, "utf8");
|
|
167
|
+
assert.match(wrapper, /OMO_GENERATED_RUNTIME_WRAPPER/);
|
|
168
|
+
assert.match(wrapper, /set "OMO_INVOCATION_NAME=omo-agent-toolkit"/);
|
|
169
|
+
assert.match(wrapper, /set "OMO_EDITION=codex"/);
|
|
118
170
|
assert.match(wrapper, /OMO_RUNTIME/);
|
|
119
171
|
assert.match(wrapper, /dist[\\/]cli-node[\\/]index\.js/);
|
|
120
172
|
assert.ok(wrapper.indexOf("OMO_RUNTIME") < wrapper.indexOf("where bun"), "node override must precede bun discovery");
|
|
@@ -246,6 +298,7 @@ test("#given nested component declares reserved omo bin #when linking bins #then
|
|
|
246
298
|
name: "@example/ulw-loop",
|
|
247
299
|
bin: {
|
|
248
300
|
omo: "./dist/cli.js",
|
|
301
|
+
"omo-agent-toolkit": "./dist/cli.js",
|
|
249
302
|
"omo-ulw-loop": "./dist/cli.js",
|
|
250
303
|
ulw: "./dist/cli.js",
|
|
251
304
|
"ulw-loop": "./dist/cli.js",
|
|
@@ -261,6 +314,7 @@ test("#given nested component declares reserved omo bin #when linking bins #then
|
|
|
261
314
|
{ name: "ulw-loop", path: join(binDir, "ulw-loop"), target: join(componentRoot, "dist", "cli.js") },
|
|
262
315
|
]);
|
|
263
316
|
await assert.rejects(readlink(join(binDir, "omo")));
|
|
317
|
+
await assert.rejects(readlink(join(binDir, "omo-agent-toolkit")));
|
|
264
318
|
assert.equal(await readlink(join(binDir, "omo-ulw-loop")), join(componentRoot, "dist", "cli.js"));
|
|
265
319
|
assert.equal(await readlink(join(binDir, "ulw")), join(componentRoot, "dist", "cli.js"));
|
|
266
320
|
assert.equal(await readlink(join(binDir, "ulw-loop")), join(componentRoot, "dist", "cli.js"));
|
|
@@ -3,7 +3,7 @@ import test from "node:test";
|
|
|
3
3
|
|
|
4
4
|
import { buildDelegatedOmoInvocation, runDelegatedOmoCommand } from "./install-local.mjs";
|
|
5
5
|
|
|
6
|
-
test("#given a lazycodex passthrough command #when delegating to omo #then resets OMO_INVOCATION_NAME so the delegate does not re-enter the lazycodex path", async () => {
|
|
6
|
+
test("#given a lazycodex passthrough command #when delegating to omo-agent-toolkit #then resets OMO_INVOCATION_NAME so the delegate does not re-enter the lazycodex path", async () => {
|
|
7
7
|
// given
|
|
8
8
|
const parsed = { kind: "command", command: "boulder", args: [] };
|
|
9
9
|
let received;
|
|
@@ -25,12 +25,12 @@ test("#given a lazycodex passthrough command #when delegating to omo #then reset
|
|
|
25
25
|
assert.equal(received.runOptions.cwd, "/tmp/project");
|
|
26
26
|
assert.equal(
|
|
27
27
|
received.runOptions.env?.OMO_INVOCATION_NAME,
|
|
28
|
-
"omo",
|
|
29
|
-
"delegated
|
|
28
|
+
"omo-agent-toolkit",
|
|
29
|
+
"delegated command must run with OMO_INVOCATION_NAME=omo-agent-toolkit to avoid infinite recursion",
|
|
30
30
|
);
|
|
31
31
|
});
|
|
32
32
|
|
|
33
|
-
test("#given OMO_INVOCATION_NAME=lazycodex in the parent env #when delegating a cleanup passthrough #then the child env overrides it to omo", async () => {
|
|
33
|
+
test("#given OMO_INVOCATION_NAME=lazycodex in the parent env #when delegating a cleanup passthrough #then the child env overrides it to omo-agent-toolkit", async () => {
|
|
34
34
|
// given
|
|
35
35
|
const previous = process.env.OMO_INVOCATION_NAME;
|
|
36
36
|
process.env.OMO_INVOCATION_NAME = "lazycodex";
|
|
@@ -52,7 +52,7 @@ test("#given OMO_INVOCATION_NAME=lazycodex in the parent env #when delegating a
|
|
|
52
52
|
}
|
|
53
53
|
|
|
54
54
|
// then
|
|
55
|
-
assert.equal(received.env.OMO_INVOCATION_NAME, "omo");
|
|
55
|
+
assert.equal(received.env.OMO_INVOCATION_NAME, "omo-agent-toolkit");
|
|
56
56
|
});
|
|
57
57
|
|
|
58
58
|
test("#given a dry-run doctor #when delegating #then routes to the Codex LazyCodex doctor workflow", async () => {
|
|
@@ -239,5 +239,5 @@ test("#given dry-run args with shell metacharacters #when delegating #then logs
|
|
|
239
239
|
});
|
|
240
240
|
|
|
241
241
|
// then
|
|
242
|
-
assert.equal(logged, "npx --yes --package oh-my-openagent omo cleanup --platform=codex --project '/tmp/lazy codex'\\''s qa'");
|
|
242
|
+
assert.equal(logged, "npx --yes --package oh-my-openagent omo-agent-toolkit cleanup --platform=codex --project '/tmp/lazy codex'\\''s qa'");
|
|
243
243
|
});
|