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
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
// omo-codex-install:7bc4b0f020f0a1b4448cc75385a7e3c60042e3b270e304d4c1a43a859e81a4c2:4c93b95fbe888175c5755a1acb72a046e2ca6abc572d7a53842a6d756711634c
|
|
2
3
|
var __defProp = Object.defineProperty;
|
|
3
4
|
var __returnValue = (v) => v;
|
|
4
5
|
function __exportSetter(name, newValue) {
|
|
@@ -96,20 +97,20 @@ var init_atomic_write = __esm(() => {
|
|
|
96
97
|
|
|
97
98
|
// packages/telemetry-core/src/activity-state.ts
|
|
98
99
|
import { existsSync as existsSync5, mkdirSync as mkdirSync2, readFileSync as readFileSync2 } from "node:fs";
|
|
99
|
-
import { basename as basename7, join as
|
|
100
|
+
import { basename as basename7, join as join34 } from "node:path";
|
|
100
101
|
function resolveTelemetryStateDir(product, options = {}) {
|
|
101
102
|
const dataDir = resolveXdgDataDir(product.cacheDirName, {
|
|
102
103
|
env: options.env,
|
|
103
104
|
osProvider: options.osProvider
|
|
104
105
|
});
|
|
105
|
-
const xdgStateDir = options.env?.XDG_DATA_HOME === undefined ? undefined :
|
|
106
|
+
const xdgStateDir = options.env?.XDG_DATA_HOME === undefined ? undefined : join34(options.env.XDG_DATA_HOME, product.cacheDirName);
|
|
106
107
|
if (dataDir === xdgStateDir || xdgStateDir === undefined && basename7(dataDir) === product.cacheDirName) {
|
|
107
108
|
return dataDir;
|
|
108
109
|
}
|
|
109
|
-
return
|
|
110
|
+
return join34(dataDir, product.cacheDirName);
|
|
110
111
|
}
|
|
111
112
|
function getTelemetryActivityStateFilePath(stateDir) {
|
|
112
|
-
return
|
|
113
|
+
return join34(stateDir, POSTHOG_ACTIVITY_STATE_FILE);
|
|
113
114
|
}
|
|
114
115
|
function getDailyActiveCaptureState(input) {
|
|
115
116
|
const state = readPostHogActivityState(input.stateDir, input.diagnostics);
|
|
@@ -180,9 +181,9 @@ var DEFAULT_POSTHOG_HOST = "https://us.i.posthog.com", DEFAULT_POSTHOG_API_KEY =
|
|
|
180
181
|
|
|
181
182
|
// packages/telemetry-core/src/diagnostics.ts
|
|
182
183
|
import { appendFileSync, existsSync as existsSync6, mkdirSync as mkdirSync3, readFileSync as readFileSync3 } from "node:fs";
|
|
183
|
-
import { join as
|
|
184
|
+
import { join as join35 } from "node:path";
|
|
184
185
|
function getTelemetryDiagnosticsFilePath(diagnosticsDir) {
|
|
185
|
-
return
|
|
186
|
+
return join35(diagnosticsDir, DIAGNOSTICS_FILE_NAME);
|
|
186
187
|
}
|
|
187
188
|
function writeTelemetryDiagnostic(input, options) {
|
|
188
189
|
const now = options.now ?? new Date;
|
|
@@ -5903,7 +5904,7 @@ var package_default;
|
|
|
5903
5904
|
var init_package = __esm(() => {
|
|
5904
5905
|
package_default = {
|
|
5905
5906
|
name: "@oh-my-opencode/omo-codex",
|
|
5906
|
-
version: "
|
|
5907
|
+
version: "5.0.0-beta.2",
|
|
5907
5908
|
type: "module",
|
|
5908
5909
|
private: true,
|
|
5909
5910
|
description: "Codex harness adapter for oh-my-openagent. Vendored Codex plugin namespace (omo) + TypeScript installer + telemetry.",
|
|
@@ -6122,8 +6123,8 @@ var init_telemetry = __esm(() => {
|
|
|
6122
6123
|
});
|
|
6123
6124
|
|
|
6124
6125
|
// packages/omo-codex/src/install/install-local-cli.ts
|
|
6125
|
-
import { readFile as
|
|
6126
|
-
import { dirname as dirname12, join as
|
|
6126
|
+
import { readFile as readFile23 } from "node:fs/promises";
|
|
6127
|
+
import { dirname as dirname12, join as join40, resolve as resolve10 } from "node:path";
|
|
6127
6128
|
import { fileURLToPath as fileURLToPath2 } from "node:url";
|
|
6128
6129
|
|
|
6129
6130
|
// packages/utils/src/runtime/spawn.ts
|
|
@@ -6456,7 +6457,7 @@ var defaultRunCommand = async (command, args, options) => {
|
|
|
6456
6457
|
};
|
|
6457
6458
|
|
|
6458
6459
|
// packages/omo-codex/src/install/install-codex.ts
|
|
6459
|
-
import { join as
|
|
6460
|
+
import { join as join36, resolve as resolve9 } from "node:path";
|
|
6460
6461
|
import { existsSync as existsSync7 } from "node:fs";
|
|
6461
6462
|
import { homedir as homedir2 } from "node:os";
|
|
6462
6463
|
|
|
@@ -6627,6 +6628,7 @@ var LEGACY_CODEX_COMPONENT_BINS = [
|
|
|
6627
6628
|
{ name: "codex-telemetry", component: "telemetry" },
|
|
6628
6629
|
{ name: "codex-ultrawork", component: "ultrawork" }
|
|
6629
6630
|
];
|
|
6631
|
+
var LEGACY_CODEX_COMPONENT_BIN_NAMES = LEGACY_CODEX_COMPONENT_BINS.map((entry) => entry.name);
|
|
6630
6632
|
async function removeLegacyCodexComponentBins(binDir, platform) {
|
|
6631
6633
|
for (const entry of LEGACY_CODEX_COMPONENT_BINS) {
|
|
6632
6634
|
const linkPath = join3(binDir, platform === "win32" ? `${entry.name}.cmd` : entry.name);
|
|
@@ -6682,7 +6684,7 @@ function isNodeErrorWithCode2(error) {
|
|
|
6682
6684
|
// packages/omo-codex/src/install/codex-cache-runtime-wrapper.ts
|
|
6683
6685
|
import { join as join4 } from "node:path";
|
|
6684
6686
|
var RUNTIME_WRAPPER_MARKER = "OMO_GENERATED_RUNTIME_WRAPPER";
|
|
6685
|
-
function posixRuntimeWrapper(cliPath, codexHome, binDir, nodeCliPath) {
|
|
6687
|
+
function posixRuntimeWrapper(binName, cliPath, codexHome, binDir, nodeCliPath) {
|
|
6686
6688
|
const ulwLoopBin = toPosixPath(join4(binDir, "omo-ulw-loop"));
|
|
6687
6689
|
const nodeCli = escapePosixDoubleQuoted(toPosixPath(nodeCliPath));
|
|
6688
6690
|
const escapedCliPath = escapePosixDoubleQuoted(toPosixPath(cliPath));
|
|
@@ -6692,6 +6694,8 @@ function posixRuntimeWrapper(cliPath, codexHome, binDir, nodeCliPath) {
|
|
|
6692
6694
|
"#!/bin/sh",
|
|
6693
6695
|
`# ${RUNTIME_WRAPPER_MARKER}`,
|
|
6694
6696
|
`export CODEX_HOME="\${CODEX_HOME:-${escapedCodexHome}}"`,
|
|
6697
|
+
`export OMO_INVOCATION_NAME=${binName}`,
|
|
6698
|
+
"export OMO_EDITION=codex",
|
|
6695
6699
|
'if [ "$1" = "ulw-loop" ] && [ -x "' + escapedUlwLoopBin + '" ]; then',
|
|
6696
6700
|
" shift",
|
|
6697
6701
|
' exec "' + escapedUlwLoopBin + '" ulw-loop "$@"',
|
|
@@ -6715,11 +6719,11 @@ function posixRuntimeWrapper(cliPath, codexHome, binDir, nodeCliPath) {
|
|
|
6715
6719
|
` if [ -f "${nodeCli}" ] && command -v node >/dev/null 2>&1; then`,
|
|
6716
6720
|
` exec node "${nodeCli}" "$@"`,
|
|
6717
6721
|
" fi",
|
|
6718
|
-
` echo "
|
|
6722
|
+
` echo "${binName}: bun runtime not found (checked PATH, ~/.bun/bin, /opt/homebrew/bin, /usr/local/bin) and the node fallback CLI is missing at ${nodeCli}; install bun from https://bun.sh, or reinstall ${binName} and force the fallback with OMO_RUNTIME=node" >&2`,
|
|
6719
6723
|
" exit 127",
|
|
6720
6724
|
"fi",
|
|
6721
6725
|
`if [ ! -f "${escapedCliPath}" ]; then`,
|
|
6722
|
-
` echo "
|
|
6726
|
+
` echo "${binName}: runtime target missing at ${escapedCliPath}; reinstall with: npx --yes lazycodex-ai@latest install --no-tui" >&2`,
|
|
6723
6727
|
" exit 1",
|
|
6724
6728
|
"fi",
|
|
6725
6729
|
`exec "$BUN_BINARY" "${escapedCliPath}" "$@"`,
|
|
@@ -6727,12 +6731,14 @@ function posixRuntimeWrapper(cliPath, codexHome, binDir, nodeCliPath) {
|
|
|
6727
6731
|
].join(`
|
|
6728
6732
|
`);
|
|
6729
6733
|
}
|
|
6730
|
-
function windowsRuntimeWrapper(cliPath, codexHome, binDir, nodeCliPath) {
|
|
6734
|
+
function windowsRuntimeWrapper(binName, cliPath, codexHome, binDir, nodeCliPath) {
|
|
6731
6735
|
const ulwLoopBin = join4(binDir, "omo-ulw-loop.cmd");
|
|
6732
6736
|
return [
|
|
6733
6737
|
"@echo off",
|
|
6734
6738
|
`rem ${RUNTIME_WRAPPER_MARKER}`,
|
|
6735
6739
|
`if not defined CODEX_HOME set "CODEX_HOME=${codexHome}"`,
|
|
6740
|
+
`set "OMO_INVOCATION_NAME=${binName}"`,
|
|
6741
|
+
'set "OMO_EDITION=codex"',
|
|
6736
6742
|
...windowsNodeDiscoveryLines(),
|
|
6737
6743
|
`if "%~1"=="ulw-loop" if exist "${ulwLoopBin}" (`,
|
|
6738
6744
|
" shift /1",
|
|
@@ -6750,11 +6756,11 @@ function windowsRuntimeWrapper(cliPath, codexHome, binDir, nodeCliPath) {
|
|
|
6750
6756
|
` "%OMO_NODE_BINARY%" "${nodeCliPath}" %*`,
|
|
6751
6757
|
" exit /b %ERRORLEVEL%",
|
|
6752
6758
|
" )",
|
|
6753
|
-
` echo
|
|
6759
|
+
` echo ${binName}: bun runtime not found, no Node runtime was discovered from NODE_REPL_NODE_PATH or PATH, or the node fallback CLI is missing at ${nodeCliPath}; install bun from https://bun.sh or rerun LazyCodex install from Codex Desktop 1>&2`,
|
|
6754
6760
|
" exit /b 127",
|
|
6755
6761
|
")",
|
|
6756
6762
|
`if not exist "${cliPath}" (`,
|
|
6757
|
-
` echo
|
|
6763
|
+
` echo ${binName}: runtime target missing at ${cliPath}; reinstall with: npx --yes lazycodex-ai@latest install --no-tui 1>&2`,
|
|
6758
6764
|
" exit /b 1",
|
|
6759
6765
|
")",
|
|
6760
6766
|
`"%BUN_BINARY%" "${cliPath}" %*`,
|
|
@@ -6770,7 +6776,14 @@ function escapePosixDoubleQuoted(value) {
|
|
|
6770
6776
|
}
|
|
6771
6777
|
|
|
6772
6778
|
// packages/omo-codex/src/install/codex-cache-bins.ts
|
|
6773
|
-
var RESERVED_NESTED_BIN_NAMES = new Set([
|
|
6779
|
+
var RESERVED_NESTED_BIN_NAMES = new Set([
|
|
6780
|
+
"omo",
|
|
6781
|
+
"omo-agent-toolkit",
|
|
6782
|
+
"lazycodex",
|
|
6783
|
+
"lazycodex-ai",
|
|
6784
|
+
"oh-my-opencode",
|
|
6785
|
+
"oh-my-openagent"
|
|
6786
|
+
]);
|
|
6774
6787
|
async function linkCachedPluginBins(input) {
|
|
6775
6788
|
const binLinks = await discoverPackageBins(input.pluginRoot);
|
|
6776
6789
|
const platform = input.platform ?? process.platform;
|
|
@@ -6800,20 +6813,26 @@ async function removeCachedManagedNpmBinShims(pluginRoot) {
|
|
|
6800
6813
|
}
|
|
6801
6814
|
async function linkRootRuntimeBin(input) {
|
|
6802
6815
|
const cliPath = join5(input.repoRoot, "dist", "cli", "index.js");
|
|
6803
|
-
|
|
6816
|
+
const platform = input.platform ?? process.platform;
|
|
6817
|
+
const legacyPath = join5(input.binDir, platform === "win32" ? "omo.cmd" : "omo");
|
|
6818
|
+
if (!await isFile(cliPath)) {
|
|
6819
|
+
await removeGeneratedRuntimeWrapper(legacyPath);
|
|
6804
6820
|
return null;
|
|
6821
|
+
}
|
|
6822
|
+
const binName = "omo-agent-toolkit";
|
|
6805
6823
|
const nodeCliPath = join5(input.repoRoot, "dist", "cli-node", "index.js");
|
|
6806
|
-
const platform = input.platform ?? process.platform;
|
|
6807
6824
|
await mkdir(input.binDir, { recursive: true });
|
|
6808
6825
|
if (platform === "win32") {
|
|
6809
|
-
const linkPath2 = join5(input.binDir,
|
|
6810
|
-
await replaceRuntimeWrapper(linkPath2, windowsRuntimeWrapper(cliPath, input.codexHome, input.binDir, nodeCliPath));
|
|
6811
|
-
|
|
6826
|
+
const linkPath2 = join5(input.binDir, `${binName}.cmd`);
|
|
6827
|
+
await replaceRuntimeWrapper(linkPath2, windowsRuntimeWrapper(binName, cliPath, input.codexHome, input.binDir, nodeCliPath));
|
|
6828
|
+
await removeGeneratedRuntimeWrapper(legacyPath);
|
|
6829
|
+
return { name: binName, path: linkPath2, target: cliPath };
|
|
6812
6830
|
}
|
|
6813
|
-
const linkPath = join5(input.binDir,
|
|
6814
|
-
await replaceRuntimeWrapper(linkPath, posixRuntimeWrapper(cliPath, input.codexHome, input.binDir, nodeCliPath));
|
|
6831
|
+
const linkPath = join5(input.binDir, binName);
|
|
6832
|
+
await replaceRuntimeWrapper(linkPath, posixRuntimeWrapper(binName, cliPath, input.codexHome, input.binDir, nodeCliPath));
|
|
6815
6833
|
await chmod(linkPath, 493);
|
|
6816
|
-
|
|
6834
|
+
await removeGeneratedRuntimeWrapper(legacyPath);
|
|
6835
|
+
return { name: binName, path: linkPath, target: cliPath };
|
|
6817
6836
|
}
|
|
6818
6837
|
async function linkCachedPluginBin(binDir, link, platform) {
|
|
6819
6838
|
if (platform === "win32") {
|
|
@@ -6926,6 +6945,29 @@ async function replaceRuntimeWrapper(linkPath, content) {
|
|
|
6926
6945
|
await rm3(linkPath, { force: true });
|
|
6927
6946
|
await writeFile(linkPath, content);
|
|
6928
6947
|
}
|
|
6948
|
+
async function removeGeneratedRuntimeWrapper(path) {
|
|
6949
|
+
try {
|
|
6950
|
+
const entry = await lstat4(path);
|
|
6951
|
+
if (!entry.isFile() && !entry.isSymbolicLink())
|
|
6952
|
+
return;
|
|
6953
|
+
const content = await readGeneratedWrapperContent(path);
|
|
6954
|
+
if (content.includes(RUNTIME_WRAPPER_MARKER))
|
|
6955
|
+
await rm3(path, { force: true });
|
|
6956
|
+
} catch (error) {
|
|
6957
|
+
if (isNodeErrorWithCode(error) && error.code === "ENOENT")
|
|
6958
|
+
return;
|
|
6959
|
+
throw error;
|
|
6960
|
+
}
|
|
6961
|
+
}
|
|
6962
|
+
async function readGeneratedWrapperContent(path) {
|
|
6963
|
+
try {
|
|
6964
|
+
return await readFile3(path, "utf8");
|
|
6965
|
+
} catch (error) {
|
|
6966
|
+
if (isNodeErrorWithCode(error) && (error.code === "ENOENT" || error.code === "EISDIR"))
|
|
6967
|
+
return "";
|
|
6968
|
+
throw error;
|
|
6969
|
+
}
|
|
6970
|
+
}
|
|
6929
6971
|
async function existingNonRuntimeWrapper(path) {
|
|
6930
6972
|
try {
|
|
6931
6973
|
const stat3 = await lstat4(path);
|
|
@@ -10682,9 +10724,18 @@ function resolveCodexInstallerBinDir(input) {
|
|
|
10682
10724
|
return resolve8(homeDir, ".local", "bin");
|
|
10683
10725
|
}
|
|
10684
10726
|
|
|
10685
|
-
// packages/omo-codex/src/install/codex-
|
|
10686
|
-
import { readFile as readFile20, writeFile as writeFile11 } from "node:fs/promises";
|
|
10727
|
+
// packages/omo-codex/src/install/codex-installed-bin-dir.ts
|
|
10728
|
+
import { readFile as readFile20, readdir as readdir11, writeFile as writeFile11 } from "node:fs/promises";
|
|
10687
10729
|
import { join as join29 } from "node:path";
|
|
10730
|
+
var INSTALLED_BIN_DIR_MANIFEST = ".installed-bin-dir.json";
|
|
10731
|
+
async function writeInstalledCodexBinDir(input) {
|
|
10732
|
+
await writeFile11(join29(input.pluginRoot, INSTALLED_BIN_DIR_MANIFEST), `${JSON.stringify({ binDir: input.binDir }, null, 2)}
|
|
10733
|
+
`);
|
|
10734
|
+
}
|
|
10735
|
+
|
|
10736
|
+
// packages/omo-codex/src/install/codex-git-bash-hooks.ts
|
|
10737
|
+
import { readFile as readFile21, writeFile as writeFile12 } from "node:fs/promises";
|
|
10738
|
+
import { join as join30 } from "node:path";
|
|
10688
10739
|
var WINDOWS_ONLY_GIT_BASH_HOOKS = new Set([
|
|
10689
10740
|
"./hooks/pre-tool-use-recommending-git-bash-mcp.json",
|
|
10690
10741
|
"./hooks/post-compact-resetting-git-bash-mcp-reminder.json"
|
|
@@ -10692,22 +10743,22 @@ var WINDOWS_ONLY_GIT_BASH_HOOKS = new Set([
|
|
|
10692
10743
|
async function removeGitBashHooksOffWindows(input) {
|
|
10693
10744
|
if (input.platform === "win32")
|
|
10694
10745
|
return;
|
|
10695
|
-
const manifestPath =
|
|
10696
|
-
const parsed = JSON.parse(await
|
|
10746
|
+
const manifestPath = join30(input.pluginRoot, ".codex-plugin", "plugin.json");
|
|
10747
|
+
const parsed = JSON.parse(await readFile21(manifestPath, "utf8"));
|
|
10697
10748
|
if (!isPlainRecord(parsed) || !Array.isArray(parsed.hooks))
|
|
10698
10749
|
return;
|
|
10699
10750
|
const hooks = parsed.hooks.filter((hook) => typeof hook !== "string" || !WINDOWS_ONLY_GIT_BASH_HOOKS.has(hook));
|
|
10700
10751
|
if (hooks.length === parsed.hooks.length)
|
|
10701
10752
|
return;
|
|
10702
|
-
await
|
|
10753
|
+
await writeFile12(manifestPath, `${JSON.stringify({ ...parsed, hooks }, null, "\t")}
|
|
10703
10754
|
`);
|
|
10704
10755
|
}
|
|
10705
10756
|
|
|
10706
10757
|
// packages/omo-codex/src/install/omo-sot-migration.ts
|
|
10707
|
-
import { join as
|
|
10758
|
+
import { join as join31 } from "node:path";
|
|
10708
10759
|
async function seedAndMigrateOmoSot(input) {
|
|
10709
10760
|
const commandEnv = { ...input.env };
|
|
10710
|
-
const scriptPath =
|
|
10761
|
+
const scriptPath = join31(input.repoRoot, "packages", "omo-codex", "plugin", "scripts", "migrate-omo-sot.mjs");
|
|
10711
10762
|
try {
|
|
10712
10763
|
await input.runCommand(process.execPath, [scriptPath, "--seed"], {
|
|
10713
10764
|
cwd: input.repoRoot,
|
|
@@ -10721,6 +10772,11 @@ async function seedAndMigrateOmoSot(input) {
|
|
|
10721
10772
|
}
|
|
10722
10773
|
|
|
10723
10774
|
// packages/omo-codex/src/install/install-ast-grep-sg.ts
|
|
10775
|
+
import { join as join33 } from "node:path";
|
|
10776
|
+
|
|
10777
|
+
// packages/utils/src/ast-grep/install-script.ts
|
|
10778
|
+
import { spawn as spawn2 } from "node:child_process";
|
|
10779
|
+
import { existsSync as existsSync4 } from "node:fs";
|
|
10724
10780
|
import { join as join32 } from "node:path";
|
|
10725
10781
|
|
|
10726
10782
|
// packages/utils/src/ast-grep/sg-manifest.ts
|
|
@@ -10739,13 +10795,10 @@ function runtimeSlug(platform = process.platform, arch = process.arch) {
|
|
|
10739
10795
|
}
|
|
10740
10796
|
|
|
10741
10797
|
// packages/utils/src/ast-grep/install-script.ts
|
|
10742
|
-
import { spawn as spawn2 } from "node:child_process";
|
|
10743
|
-
import { existsSync as existsSync4 } from "node:fs";
|
|
10744
|
-
import { join as join31 } from "node:path";
|
|
10745
10798
|
var AST_GREP_BIN_DIR_ENV_KEY = "OMO_AST_GREP_BIN_DIR";
|
|
10746
10799
|
var AST_GREP_INSTALL_TIMEOUT_MS = 30000;
|
|
10747
10800
|
function astGrepRuntimeDir(baseDir, platform = process.platform, arch = process.arch) {
|
|
10748
|
-
return
|
|
10801
|
+
return join32(baseDir, "runtime", "ast-grep", runtimeSlug(platform, arch));
|
|
10749
10802
|
}
|
|
10750
10803
|
function isMissingExecutable(error) {
|
|
10751
10804
|
if (!("code" in error))
|
|
@@ -10783,7 +10836,7 @@ function defaultSpawnProcess(command, args, options) {
|
|
|
10783
10836
|
};
|
|
10784
10837
|
}
|
|
10785
10838
|
function scriptPathForPlatform(skillDir, platform) {
|
|
10786
|
-
return
|
|
10839
|
+
return join32(skillDir, platform === "win32" ? "install.ps1" : "install.sh");
|
|
10787
10840
|
}
|
|
10788
10841
|
function invocationsForPlatform(scriptPath, platform) {
|
|
10789
10842
|
if (platform !== "win32")
|
|
@@ -10855,7 +10908,7 @@ async function installAstGrepForCodex(options) {
|
|
|
10855
10908
|
return;
|
|
10856
10909
|
const platform = options.platform ?? process.platform;
|
|
10857
10910
|
const targetDir = astGrepRuntimeDir(options.codexHome, platform, options.arch ?? process.arch);
|
|
10858
|
-
const skillDir =
|
|
10911
|
+
const skillDir = join33(plugin.path, "skills", "ast-grep");
|
|
10859
10912
|
const installer = options.installer ?? runAstGrepSkillInstall;
|
|
10860
10913
|
try {
|
|
10861
10914
|
const result = await installer({ platform, skillDir, targetDir });
|
|
@@ -10888,7 +10941,7 @@ async function runCodexInstaller(options = {}) {
|
|
|
10888
10941
|
const env2 = options.env ?? process.env;
|
|
10889
10942
|
const platform = options.platform ?? process.platform;
|
|
10890
10943
|
const repoRoot = resolve9(options.repoRoot ?? findRepoRoot({ importerDir: import.meta.dir, env: env2 }));
|
|
10891
|
-
const codexHome = resolve9(options.codexHome ?? env2.CODEX_HOME ??
|
|
10944
|
+
const codexHome = resolve9(options.codexHome ?? env2.CODEX_HOME ?? join36(homedir2(), ".codex"));
|
|
10892
10945
|
const projectDirectory = resolve9(options.projectDirectory ?? env2.OMO_CODEX_PROJECT ?? process.cwd());
|
|
10893
10946
|
const binDir = resolveCodexInstallerBinDir({ binDir: options.binDir, codexHome, env: env2 });
|
|
10894
10947
|
const runCommand = options.runCommand ?? defaultRunCommand;
|
|
@@ -10905,9 +10958,9 @@ async function runCodexInstaller(options = {}) {
|
|
|
10905
10958
|
if (!gitBashResolution.found) {
|
|
10906
10959
|
throw new Error(gitBashResolution.installHint);
|
|
10907
10960
|
}
|
|
10908
|
-
const codexPackageRoot =
|
|
10961
|
+
const codexPackageRoot = join36(repoRoot, "packages", "omo-codex");
|
|
10909
10962
|
const marketplace = await readMarketplace(repoRoot, {
|
|
10910
|
-
marketplacePath:
|
|
10963
|
+
marketplacePath: join36(codexPackageRoot, "marketplace.json")
|
|
10911
10964
|
});
|
|
10912
10965
|
const distributionManifest = await readDistributionManifest(repoRoot);
|
|
10913
10966
|
const installed = [];
|
|
@@ -10941,6 +10994,7 @@ async function runCodexInstaller(options = {}) {
|
|
|
10941
10994
|
if (marketplace.name === "sisyphuslabs" && plugin.name === "omo") {
|
|
10942
10995
|
await stampLazyCodexPluginVersion({ pluginRoot: plugin.path, version: version2 });
|
|
10943
10996
|
await writeLazyCodexInstallSnapshot({ pluginRoot: plugin.path, distributionManifest });
|
|
10997
|
+
await writeInstalledCodexBinDir({ pluginRoot: plugin.path, binDir });
|
|
10944
10998
|
await removeGitBashHooksOffWindows({ platform, pluginRoot: plugin.path });
|
|
10945
10999
|
}
|
|
10946
11000
|
const links = await linkCachedPluginBins({ binDir, pluginRoot: plugin.path, platform });
|
|
@@ -10952,7 +11006,7 @@ async function runCodexInstaller(options = {}) {
|
|
|
10952
11006
|
if (runtimeLink !== null)
|
|
10953
11007
|
log(`Linked ${runtimeLink.name} -> ${runtimeLink.target}`);
|
|
10954
11008
|
else
|
|
10955
|
-
log(`Warning: skipped the omo runtime wrapper because ${
|
|
11009
|
+
log(`Warning: skipped the omo-agent-toolkit runtime wrapper because ${join36(repoRoot, "dist", "cli", "index.js")} is missing; omo-agent-toolkit ulw-loop commands will be unavailable until a package shipping dist/cli is installed`);
|
|
10956
11010
|
}
|
|
10957
11011
|
pluginSources.push({ name: entry.name, sourcePath });
|
|
10958
11012
|
installed.push(plugin);
|
|
@@ -11015,13 +11069,13 @@ async function runCodexInstaller(options = {}) {
|
|
|
11015
11069
|
continue;
|
|
11016
11070
|
log(`Warning: deferred legacy Codex LSP daemon cleanup for v${cleanup.version}: ${cleanup.reason}`);
|
|
11017
11071
|
}
|
|
11018
|
-
const marketplaceRoot =
|
|
11072
|
+
const marketplaceRoot = join36(codexHome, "plugins", "cache", marketplace.name);
|
|
11019
11073
|
await writeCachedMarketplaceManifest({
|
|
11020
11074
|
marketplaceName: marketplace.name,
|
|
11021
11075
|
marketplaceRoot,
|
|
11022
11076
|
plugins: installed
|
|
11023
11077
|
});
|
|
11024
|
-
const configPath =
|
|
11078
|
+
const configPath = join36(codexHome, "config.toml");
|
|
11025
11079
|
await updateCodexConfig({
|
|
11026
11080
|
configPath,
|
|
11027
11081
|
repoRoot: codexPackageRoot,
|
|
@@ -11082,7 +11136,7 @@ function findRepoRootFromImporter(importerDir) {
|
|
|
11082
11136
|
for (let depth = 0;depth <= 7; depth += 1) {
|
|
11083
11137
|
if (isRepoRootWithCodexPlugin(current))
|
|
11084
11138
|
return current;
|
|
11085
|
-
for (const wrapperPackageRoot of [
|
|
11139
|
+
for (const wrapperPackageRoot of [join36(current, "node_modules", "oh-my-openagent"), join36(current, "oh-my-openagent")]) {
|
|
11086
11140
|
if (isRepoRootWithCodexPlugin(wrapperPackageRoot))
|
|
11087
11141
|
return wrapperPackageRoot;
|
|
11088
11142
|
}
|
|
@@ -11100,7 +11154,7 @@ function findRepoRoot(input) {
|
|
|
11100
11154
|
return findRepoRootFromImporter(input.importerDir);
|
|
11101
11155
|
}
|
|
11102
11156
|
function isRepoRootWithCodexPlugin(repoRoot) {
|
|
11103
|
-
return existsSync7(
|
|
11157
|
+
return existsSync7(join36(repoRoot, "packages", "omo-codex", "plugin", ".codex-plugin", "plugin.json"));
|
|
11104
11158
|
}
|
|
11105
11159
|
function codexMarketplaceSource(marketplaceRoot) {
|
|
11106
11160
|
return { sourceType: "local", source: marketplaceRoot };
|
|
@@ -11287,7 +11341,7 @@ async function runDelegatedOmoCommand(parsed, options) {
|
|
|
11287
11341
|
options.log(formatShellCommand(invocation.command, invocation.args));
|
|
11288
11342
|
return;
|
|
11289
11343
|
}
|
|
11290
|
-
const env2 = invocation.delegatesToOmo ? { ...process.env, OMO_INVOCATION_NAME: "omo", ...invocation.env } : { ...process.env, ...invocation.env };
|
|
11344
|
+
const env2 = invocation.delegatesToOmo ? { ...process.env, OMO_INVOCATION_NAME: "omo-agent-toolkit", ...invocation.env } : { ...process.env, ...invocation.env };
|
|
11291
11345
|
await options.runCommand(invocation.command, invocation.args, { cwd: options.cwd, env: env2 });
|
|
11292
11346
|
}
|
|
11293
11347
|
function buildDelegatedOmoInvocation(parsed) {
|
|
@@ -11307,7 +11361,7 @@ function buildDelegatedOmoInvocation(parsed) {
|
|
|
11307
11361
|
args2.push(`--repo-root=${parsed.repoRoot}`);
|
|
11308
11362
|
return { command: "npx", args: args2, delegatesToOmo: true };
|
|
11309
11363
|
}
|
|
11310
|
-
const args = ["--yes", "--package", "oh-my-openagent", "omo", parsed.command];
|
|
11364
|
+
const args = ["--yes", "--package", "oh-my-openagent", "omo-agent-toolkit", parsed.command];
|
|
11311
11365
|
if (parsed.command === "cleanup") {
|
|
11312
11366
|
args.push("--platform=codex", ...parsed.args);
|
|
11313
11367
|
} else {
|
|
@@ -11413,12 +11467,12 @@ function shellQuote(value) {
|
|
|
11413
11467
|
// packages/omo-codex/src/install/lazycodex-manual-update.ts
|
|
11414
11468
|
import { spawn as spawn3, spawnSync as spawnSync3 } from "node:child_process";
|
|
11415
11469
|
import { readFileSync as readFileSync4 } from "node:fs";
|
|
11416
|
-
import { dirname as dirname11, join as
|
|
11470
|
+
import { dirname as dirname11, join as join38 } from "node:path";
|
|
11417
11471
|
import { createInterface as createInterface2 } from "node:readline/promises";
|
|
11418
11472
|
import { fileURLToPath } from "node:url";
|
|
11419
11473
|
|
|
11420
11474
|
// packages/omo-codex/src/install/lazycodex-bun-global-paths.ts
|
|
11421
|
-
import { join as
|
|
11475
|
+
import { join as join37 } from "node:path";
|
|
11422
11476
|
function isBunGlobalEntrypointPath(invokedPath, env2) {
|
|
11423
11477
|
if (typeof invokedPath !== "string" || invokedPath.trim().length === 0)
|
|
11424
11478
|
return false;
|
|
@@ -11429,8 +11483,8 @@ function resolveBunGlobalRoots(env2) {
|
|
|
11429
11483
|
const bunInstallRoot = env2.BUN_INSTALL?.trim();
|
|
11430
11484
|
const homeRoot = env2.HOME?.trim();
|
|
11431
11485
|
return [
|
|
11432
|
-
...bunInstallRoot ? [
|
|
11433
|
-
...homeRoot ? [
|
|
11486
|
+
...bunInstallRoot ? [join37(bunInstallRoot, "bin"), join37(bunInstallRoot, "install", "global", "node_modules")] : [],
|
|
11487
|
+
...homeRoot ? [join37(homeRoot, ".bun", "bin"), join37(homeRoot, ".bun", "install", "global", "node_modules")] : []
|
|
11434
11488
|
].map(normalizePathForPrefix);
|
|
11435
11489
|
}
|
|
11436
11490
|
function normalizePathForPrefix(path2) {
|
|
@@ -11523,7 +11577,7 @@ function resolveCurrentVersion(env2) {
|
|
|
11523
11577
|
if (env2.LAZYCODEX_CURRENT_VERSION?.trim())
|
|
11524
11578
|
return env2.LAZYCODEX_CURRENT_VERSION.trim();
|
|
11525
11579
|
const pluginRoot = dirname11(dirname11(fileURLToPath(import.meta.url)));
|
|
11526
|
-
return readVersionManifest(resolveInstalledVersionPath(env2, pluginRoot)) ?? readVersionManifest(
|
|
11580
|
+
return readVersionManifest(resolveInstalledVersionPath(env2, pluginRoot)) ?? readVersionManifest(join38(pluginRoot, "..", "..", "..", "package.json")) ?? readVersionManifest(join38(pluginRoot, ".codex-plugin", "plugin.json"));
|
|
11527
11581
|
}
|
|
11528
11582
|
function resolveLatestVersion(env2) {
|
|
11529
11583
|
if (env2.LAZYCODEX_LATEST_VERSION?.trim())
|
|
@@ -11639,7 +11693,7 @@ function compareVersions(left, right) {
|
|
|
11639
11693
|
function resolveInstalledVersionPath(env2, pluginRoot) {
|
|
11640
11694
|
if (env2.LAZYCODEX_INSTALLED_VERSION_FILE?.trim())
|
|
11641
11695
|
return env2.LAZYCODEX_INSTALLED_VERSION_FILE.trim();
|
|
11642
|
-
return
|
|
11696
|
+
return join38(pluginRoot, INSTALLED_VERSION_FILE);
|
|
11643
11697
|
}
|
|
11644
11698
|
function readVersionManifest(path2) {
|
|
11645
11699
|
try {
|
|
@@ -11655,15 +11709,15 @@ function readVersionManifest(path2) {
|
|
|
11655
11709
|
}
|
|
11656
11710
|
}
|
|
11657
11711
|
// packages/omo-codex/src/install/codex-git-bash-mcp-env.ts
|
|
11658
|
-
import { readFile as
|
|
11659
|
-
import { join as
|
|
11712
|
+
import { readFile as readFile22, writeFile as writeFile13 } from "node:fs/promises";
|
|
11713
|
+
import { join as join39 } from "node:path";
|
|
11660
11714
|
var GIT_BASH_ENV_KEY2 = "OMO_CODEX_GIT_BASH_PATH";
|
|
11661
11715
|
var CODEGRAPH_RELATIVE_ARGS2 = new Set(["components/codegraph/dist/serve.js", "./components/codegraph/dist/serve.js"]);
|
|
11662
11716
|
async function stampGitBashMcpEnv(input) {
|
|
11663
|
-
const manifestPath =
|
|
11717
|
+
const manifestPath = join39(input.pluginRoot, ".mcp.json");
|
|
11664
11718
|
if (!await fileExistsStrict(manifestPath))
|
|
11665
11719
|
return false;
|
|
11666
|
-
const parsed = JSON.parse(await
|
|
11720
|
+
const parsed = JSON.parse(await readFile22(manifestPath, "utf8"));
|
|
11667
11721
|
if (!isPlainRecord(parsed) || !isPlainRecord(parsed["mcpServers"]))
|
|
11668
11722
|
return false;
|
|
11669
11723
|
let changed = stampCodegraphMcpPath(parsed["mcpServers"], input.pluginRoot);
|
|
@@ -11681,7 +11735,7 @@ async function stampGitBashMcpEnv(input) {
|
|
|
11681
11735
|
}
|
|
11682
11736
|
if (!changed)
|
|
11683
11737
|
return false;
|
|
11684
|
-
await
|
|
11738
|
+
await writeFile13(manifestPath, `${JSON.stringify(parsed, null, "\t")}
|
|
11685
11739
|
`);
|
|
11686
11740
|
return true;
|
|
11687
11741
|
}
|
|
@@ -11693,7 +11747,7 @@ function stampCodegraphMcpPath(mcpServers, pluginRoot) {
|
|
|
11693
11747
|
const entrypoint = args[0];
|
|
11694
11748
|
if (typeof entrypoint !== "string" || !CODEGRAPH_RELATIVE_ARGS2.has(entrypoint))
|
|
11695
11749
|
return false;
|
|
11696
|
-
codegraphServer["args"] = [
|
|
11750
|
+
codegraphServer["args"] = [join39(pluginRoot, "components", "codegraph", "dist", "serve.js"), ...args.slice(1)];
|
|
11697
11751
|
return true;
|
|
11698
11752
|
}
|
|
11699
11753
|
|
|
@@ -11718,7 +11772,7 @@ async function runLazyCodexInstallLocalCli(input) {
|
|
|
11718
11772
|
return 0;
|
|
11719
11773
|
}
|
|
11720
11774
|
if (parsed.kind === "version") {
|
|
11721
|
-
const packageJson = JSON.parse(await
|
|
11775
|
+
const packageJson = JSON.parse(await readFile23(join40(input.defaultRepoRoot, "package.json"), "utf8"));
|
|
11722
11776
|
const version2 = typeof packageJson.version === "string" ? packageJson.version : "unknown";
|
|
11723
11777
|
input.log(`lazycodex-ai ${version2}`);
|
|
11724
11778
|
return 0;
|
|
@@ -153,7 +153,7 @@ test("#given dry-run cleanup path needs quoting #when running the Node installer
|
|
|
153
153
|
).trim();
|
|
154
154
|
|
|
155
155
|
// then
|
|
156
|
-
assert.equal(output, "npx --yes --package oh-my-openagent omo cleanup --platform=codex --project '/tmp/lazy codex'\\''s qa'");
|
|
156
|
+
assert.equal(output, "npx --yes --package oh-my-openagent omo-agent-toolkit cleanup --platform=codex --project '/tmp/lazy codex'\\''s qa'");
|
|
157
157
|
});
|
|
158
158
|
|
|
159
159
|
test("#given dry-run cleanup #when running the Node installer entrypoint #then prints delegated codex cleanup command", () => {
|
|
@@ -168,7 +168,7 @@ test("#given dry-run cleanup #when running the Node installer entrypoint #then p
|
|
|
168
168
|
).trim();
|
|
169
169
|
|
|
170
170
|
// then
|
|
171
|
-
assert.equal(output, "npx --yes --package oh-my-openagent omo cleanup --platform=codex --project /tmp/lazycodex-qa");
|
|
171
|
+
assert.equal(output, "npx --yes --package oh-my-openagent omo-agent-toolkit cleanup --platform=codex --project /tmp/lazycodex-qa");
|
|
172
172
|
});
|
|
173
173
|
|
|
174
174
|
test("#given dry-run uninstall #when running the Node installer entrypoint #then prints delegated codex cleanup command", () => {
|
|
@@ -183,7 +183,7 @@ test("#given dry-run uninstall #when running the Node installer entrypoint #then
|
|
|
183
183
|
).trim();
|
|
184
184
|
|
|
185
185
|
// then
|
|
186
|
-
assert.equal(output, "npx --yes --package oh-my-openagent omo cleanup --platform=codex --project /tmp/lazycodex-qa");
|
|
186
|
+
assert.equal(output, "npx --yes --package oh-my-openagent omo-agent-toolkit cleanup --platform=codex --project /tmp/lazycodex-qa");
|
|
187
187
|
});
|
|
188
188
|
|
|
189
189
|
test("#given stale lazycodex version #when running update dry-run #then prints the latest installer command", () => {
|
|
@@ -340,7 +340,7 @@ test("#given dry-run ulw-loop #when running the Node installer entrypoint #then
|
|
|
340
340
|
}).trim();
|
|
341
341
|
|
|
342
342
|
// then
|
|
343
|
-
assert.equal(output, "npx --yes --package oh-my-openagent omo ulw-loop help");
|
|
343
|
+
assert.equal(output, "npx --yes --package oh-my-openagent omo-agent-toolkit ulw-loop help");
|
|
344
344
|
});
|
|
345
345
|
|
|
346
346
|
test("#given the invoking argv path disappears #when importing the Node installer module #then the entrypoint guard does not throw", () => {
|
|
@@ -62,8 +62,10 @@ test("#given custom CODEX_HOME and PATH without omo #when installing locally wit
|
|
|
62
62
|
});
|
|
63
63
|
|
|
64
64
|
assert.equal(result.installed.length, 1);
|
|
65
|
-
const wrapper = await readFile(join(codexHome, "bin", "omo"), "utf8");
|
|
65
|
+
const wrapper = await readFile(join(codexHome, "bin", "omo-agent-toolkit"), "utf8");
|
|
66
66
|
assert.match(wrapper, /OMO_GENERATED_RUNTIME_WRAPPER/);
|
|
67
|
+
assert.match(wrapper, /export OMO_INVOCATION_NAME=omo-agent-toolkit/);
|
|
68
|
+
assert.match(wrapper, /export OMO_EDITION=codex/);
|
|
67
69
|
assert.match(
|
|
68
70
|
wrapper,
|
|
69
71
|
new RegExp(escapeRegExp(escapePosixDoubleQuoted(toPosixPath(join(repoRoot, "dist", "cli", "index.js"))))),
|
|
@@ -98,9 +100,10 @@ test("#given repoRoot without root CLI dist #when installing locally #then warns
|
|
|
98
100
|
|
|
99
101
|
const cliPath = join(repoRoot, "dist", "cli", "index.js");
|
|
100
102
|
assert.ok(
|
|
101
|
-
logs.some((line) => line.includes("omo runtime wrapper") && line.includes(cliPath)),
|
|
103
|
+
logs.some((line) => line.includes("omo-agent-toolkit runtime wrapper") && line.includes(cliPath)),
|
|
102
104
|
`expected a warning naming the missing ${cliPath}; got:\n${logs.join("\n")}`,
|
|
103
105
|
);
|
|
106
|
+
await assert.rejects(readFile(join(codexHome, "bin", "omo-agent-toolkit"), "utf8"));
|
|
104
107
|
await assert.rejects(readFile(join(codexHome, "bin", "omo"), "utf8"));
|
|
105
108
|
});
|
|
106
109
|
|
|
@@ -1,5 +1,23 @@
|
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
1
2
|
import { fileURLToPath } from "node:url";
|
|
2
3
|
|
|
4
|
+
// Bundlers inline this module, so import.meta.url points at the consuming bundle, and the
|
|
5
|
+
// distance to the skills directory depends on where that bundle landed:
|
|
6
|
+
// dist/index.js -> dist/skills (sibling)
|
|
7
|
+
// dist/cli/index.js -> dist/skills (parent)
|
|
8
|
+
// dist/cli-node/index.js -> dist/skills (parent)
|
|
9
|
+
// plugins/omo/dist/cli/ -> plugins/omo/skills (grandparent; the Codex marketplace
|
|
10
|
+
// layout, where `plugin/` is copied to
|
|
11
|
+
// `plugins/omo/` and the root CLI
|
|
12
|
+
// runtimes are bundled into
|
|
13
|
+
// `plugins/omo/dist/cli`)
|
|
14
|
+
// Probes run nearest-first so a closer skills directory always wins, and the sibling path is
|
|
15
|
+
// returned unchanged when nothing matches, keeping the previous not-found behavior.
|
|
16
|
+
const SKILLS_PROBE_SPECIFIERS = ["./skills/", "../skills/", "../../skills/"];
|
|
17
|
+
|
|
3
18
|
export function sharedSkillsRootPath() {
|
|
4
|
-
|
|
19
|
+
const candidates = SKILLS_PROBE_SPECIFIERS.map((specifier) =>
|
|
20
|
+
fileURLToPath(new URL(specifier, import.meta.url)),
|
|
21
|
+
);
|
|
22
|
+
return candidates.find((candidate) => existsSync(candidate)) ?? candidates[0];
|
|
5
23
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
upstream: https://github.com/code-yeongyu/ast-grep-skill @ 3148c69 (ast-grep 0.
|
|
1
|
+
upstream: https://github.com/code-yeongyu/ast-grep-skill @ 3148c69 (ast-grep 0.45.0). Vendored as a sync; do not fork-drift.
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
Force one method: scoop | winget | choco | npm | cargo | pip | github
|
|
22
22
|
|
|
23
23
|
.PARAMETER Version
|
|
24
|
-
Pin a specific version when downloading from GitHub. Default: 0.
|
|
24
|
+
Pin a specific version when downloading from GitHub. Default: 0.45.0
|
|
25
25
|
|
|
26
26
|
.PARAMETER NoFallback
|
|
27
27
|
Don't fall back to GitHub zip; fail if all package managers miss
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
|
|
38
38
|
param(
|
|
39
39
|
[string]$Method = "",
|
|
40
|
-
[string]$Version = "0.
|
|
40
|
+
[string]$Version = "0.45.0",
|
|
41
41
|
[switch]$NoFallback,
|
|
42
42
|
[switch]$Quiet
|
|
43
43
|
)
|
|
@@ -94,7 +94,7 @@ If every package manager fails:
|
|
|
94
94
|
# app-aarch64-pc-windows-msvc.zip Windows ARM64
|
|
95
95
|
|
|
96
96
|
# 2. Download and extract:
|
|
97
|
-
VERSION=0.
|
|
97
|
+
VERSION=0.45.0
|
|
98
98
|
TRIPLE=aarch64-apple-darwin
|
|
99
99
|
curl -fsSL "https://github.com/ast-grep/ast-grep/releases/download/${VERSION}/app-${TRIPLE}.zip" -o /tmp/ast-grep.zip
|
|
100
100
|
unzip /tmp/ast-grep.zip -d /tmp/ast-grep
|
|
@@ -125,7 +125,7 @@ Requires Rust 1.74+. Slowest path; only useful when you need a specific commit o
|
|
|
125
125
|
|
|
126
126
|
```bash
|
|
127
127
|
ast-grep --version # or `sg --version`
|
|
128
|
-
# ast-grep 0.
|
|
128
|
+
# ast-grep 0.45.0
|
|
129
129
|
```
|
|
130
130
|
|
|
131
131
|
Then sanity-check a real query:
|