lazycodex-ai 5.1.44 → 5.1.46
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.de.md +0 -5
- package/README.es.md +0 -5
- package/README.fr.md +0 -5
- package/README.it.md +0 -5
- package/README.ja.md +0 -5
- package/README.ko.md +0 -5
- package/README.md +4 -5
- package/README.pt-br.md +0 -5
- package/README.ru.md +0 -6
- package/README.zh-cn.md +0 -5
- package/dist/cli/index.js +865 -413
- package/dist/cli/service-auth/keystore.d.ts +4 -2
- package/dist/cli-node/index.js +865 -413
- package/docs/reference/web-terminal-visual-qa.md +8 -0
- package/package.json +1 -1
- package/packages/lsp-daemon/dist/cli.js +7 -7
- package/packages/lsp-daemon/dist/client.js +7 -7
- package/packages/lsp-daemon/dist/index.js +7 -7
- package/packages/lsp-daemon/package.json +3 -3
- package/packages/lsp-tools-mcp/dist/cli.js +7 -7
- package/packages/lsp-tools-mcp/dist/mcp.js +7 -7
- package/packages/lsp-tools-mcp/dist/tools.js +4 -4
- package/packages/lsp-tools-mcp/package.json +3 -3
- package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
- package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +77 -26
- 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/hook.ts +1 -1
- package/packages/omo-codex/plugin/components/comment-checker/biome.json +1 -21
- package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/comment-checker/package.json +4 -4
- 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/biome.json +1 -21
- 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 +4 -4
- package/packages/omo-codex/plugin/components/lsp/biome.json +1 -21
- package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +3 -3
- package/packages/omo-codex/plugin/components/lsp/dist/cli.js +4 -4
- package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
- package/packages/omo-codex/plugin/components/lsp/package.json +4 -4
- package/packages/omo-codex/plugin/components/lsp/scripts/build-runtime.mjs +0 -1
- package/packages/omo-codex/plugin/components/lsp/test/codex-hook-not-installed.test.ts +1 -1
- package/packages/omo-codex/plugin/components/rules/biome.json +1 -21
- package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
- package/packages/omo-codex/plugin/components/rules/package.json +4 -4
- 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/biome.json +1 -21
- package/packages/omo-codex/plugin/components/telemetry/dist/cli.js +90 -1
- package/packages/omo-codex/plugin/components/telemetry/dist/posthog.js +91 -1
- package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/telemetry/package.json +4 -4
- package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-gate-reviewer.toml +2 -2
- package/packages/omo-codex/plugin/components/ultrawork/biome.json +1 -21
- package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/package.json +4 -4
- package/packages/omo-codex/plugin/components/ulw-execute-continuation/biome.json +1 -21
- package/packages/omo-codex/plugin/components/ulw-execute-continuation/directive.md +1 -1
- package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/ulw-execute-continuation/package.json +4 -4
- package/packages/omo-codex/plugin/components/ulw-loop/biome.json +1 -21
- package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint.js +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +7 -7
- package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-instruction.js +5 -5
- package/packages/omo-codex/plugin/components/ulw-loop/dist/stop-resume-hook.js +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +5 -5
- package/packages/omo-codex/plugin/components/ulw-loop/package.json +4 -4
- package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint.ts +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-instruction.ts +5 -5
- package/packages/omo-codex/plugin/components/ulw-loop/src/stop-resume-hook.ts +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/commit-mutations.mjs +2 -0
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-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/post-tool-use-recording-spawn-admission.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-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-ulw-execute-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-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 +12 -12
- package/packages/omo-codex/plugin/package.json +1 -1
- package/packages/omo-codex/plugin/scripts/sync-skills.mjs +14 -9
- package/packages/omo-codex/plugin/skills/ast-grep/AGENTS.md +1 -1
- package/packages/omo-codex/plugin/skills/browser/SKILL.md +21 -22
- package/packages/omo-codex/plugin/skills/browser/references/commands.md +2 -9
- package/packages/omo-codex/plugin/skills/browser/references/install.md +1 -2
- package/packages/omo-codex/plugin/skills/browser/runtime/omowright/manifest.json +1 -1
- package/packages/omo-codex/plugin/skills/browser/scripts/browser-doctor.mjs +2 -2
- package/packages/omo-codex/plugin/skills/browser/scripts/browser-engine-guard.mjs +63 -487
- package/packages/omo-codex/plugin/skills/browser/scripts/browser-install.mjs +1 -1
- package/packages/omo-codex/plugin/skills/browser/scripts/omowright.mjs +1 -10
- package/packages/omo-codex/plugin/skills/frontend/ATTRIBUTION.md +2 -2
- package/packages/omo-codex/plugin/skills/frontend/SKILL.md +79 -118
- package/packages/omo-codex/plugin/skills/frontend/references/design/README.md +75 -224
- package/packages/omo-codex/plugin/skills/frontend/references/design/stylegallery.md +32 -27
- package/packages/omo-codex/plugin/skills/frontend/references/perfection/README.md +2 -2
- package/packages/omo-codex/plugin/skills/frontend/scripts/perfection/check-accent-stripes.ts +8 -24
- package/packages/omo-codex/plugin/skills/frontend/scripts/perfection/check-draft-guard.ts +40 -0
- package/packages/omo-codex/plugin/skills/frontend/scripts/perfection/collect-files.ts +53 -0
- package/packages/omo-codex/plugin/skills/frontend/scripts/perfection/draft-guard/findings.ts +16 -0
- package/packages/omo-codex/plugin/skills/frontend/scripts/perfection/draft-guard/lint.ts +38 -0
- package/packages/omo-codex/plugin/skills/frontend/scripts/perfection/draft-guard/rules.ts +69 -0
- package/packages/omo-codex/plugin/skills/frontend/scripts/perfection/draft-guard/text-nodes.ts +121 -0
- package/packages/omo-codex/plugin/skills/frontend/scripts/perfection/fixtures/draft-guard/negative/attr-lookalikes.tsx +10 -0
- package/packages/omo-codex/plugin/skills/frontend/scripts/perfection/fixtures/draft-guard/negative/bound-values.tsx +12 -0
- package/packages/omo-codex/plugin/skills/frontend/scripts/perfection/fixtures/draft-guard/negative/const-generics.tsx +3 -0
- package/packages/omo-codex/plugin/skills/frontend/scripts/perfection/fixtures/draft-guard/negative/generics.tsx +7 -0
- package/packages/omo-codex/plugin/skills/frontend/scripts/perfection/fixtures/draft-guard/negative/measured-stats.html +6 -0
- package/packages/omo-codex/plugin/skills/frontend/scripts/perfection/fixtures/draft-guard/negative/plain-copy.html +9 -0
- package/packages/omo-codex/plugin/skills/frontend/scripts/perfection/fixtures/draft-guard/negative/state-copy.html +11 -0
- package/packages/omo-codex/plugin/skills/frontend/scripts/perfection/fixtures/draft-guard/positive/attribute-edges.html +7 -0
- package/packages/omo-codex/plugin/skills/frontend/scripts/perfection/fixtures/draft-guard/positive/components.tsx +16 -0
- package/packages/omo-codex/plugin/skills/frontend/scripts/perfection/fixtures/draft-guard/positive/decorative-badge.vue +7 -0
- package/packages/omo-codex/plugin/skills/frontend/scripts/perfection/fixtures/draft-guard/positive/emoji-icons.tsx +9 -0
- package/packages/omo-codex/plugin/skills/frontend/scripts/perfection/fixtures/draft-guard/positive/jsx-edges.tsx +1 -0
- package/packages/omo-codex/plugin/skills/frontend/scripts/perfection/fixtures/draft-guard/positive/promo-copy.html +6 -0
- package/packages/omo-codex/plugin/skills/frontend/scripts/perfection/fixtures/draft-guard/positive/promo-copy.tsx +8 -0
- package/packages/omo-codex/plugin/skills/frontend/scripts/perfection/fixtures/draft-guard/positive/vanity-stats.html +5 -0
- package/packages/omo-codex/plugin/skills/init-deep/SKILL.md +1 -1
- package/packages/omo-codex/plugin/skills/programming/SKILL.md +10 -7
- package/packages/omo-codex/plugin/skills/programming/references/typescript/README.md +10 -7
- package/packages/omo-codex/plugin/skills/programming/references/typescript/bootstrap.md +9 -23
- package/packages/omo-codex/plugin/skills/programming/references/typescript/oxc-lint.md +130 -0
- package/packages/omo-codex/plugin/skills/programming/references/typescript/tsconfig-strict.md +6 -62
- package/packages/omo-codex/plugin/skills/programming/scripts/typescript/check-no-excuse-rules.ts +12 -12
- package/packages/omo-codex/plugin/skills/programming/scripts/typescript/new-project.ts +20 -81
- package/packages/omo-codex/plugin/skills/programming/scripts/typescript/oxc/.oxfmtrc.json +9 -0
- package/packages/omo-codex/plugin/skills/programming/scripts/typescript/oxc/.oxlintrc.json +46 -0
- package/packages/omo-codex/plugin/skills/programming/scripts/typescript/oxc/lint/oxlint-plugin/LICENSE +21 -0
- package/packages/omo-codex/plugin/skills/programming/scripts/typescript/oxc/lint/oxlint-plugin/index.js +10 -0
- package/packages/omo-codex/plugin/skills/programming/scripts/typescript/oxc/lint/oxlint-plugin/no-em-dash-copy.js +28 -0
- package/packages/omo-codex/plugin/skills/programming/scripts/typescript/oxc/lint/oxlint-plugin/require-suppression-reason.js +62 -0
- package/packages/omo-codex/plugin/skills/programming/scripts/typescript/oxc/tsconfig.json +29 -0
- package/packages/omo-codex/plugin/skills/refactor/SKILL.md +14 -14
- package/packages/omo-codex/plugin/skills/remove-ai-slops/SKILL.md +1 -1
- package/packages/omo-codex/plugin/skills/review-work/SKILL.md +2 -2
- package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/AGENTS.md +1 -1
- package/packages/omo-codex/plugin/skills/ulw-execute/SKILL.md +2 -2
- package/packages/omo-codex/plugin/skills/ulw-loop/SKILL.md +1 -1
- package/packages/omo-codex/plugin/skills/ulw-research/AGENTS.md +21 -3
- package/packages/omo-codex/plugin/skills/ulw-research/SKILL.md +37 -12
- package/packages/omo-codex/plugin/skills/ulw-research/references/deliverable-phase.md +77 -16
- package/packages/omo-codex/plugin/skills/ulw-research/references/fact-ledger-grammar.md +134 -0
- package/packages/omo-codex/plugin/skills/ulw-research/references/fact-ledger.md +95 -0
- package/packages/omo-codex/plugin/skills/ulw-research/references/fidelity-claim-kinds.md +19 -0
- package/packages/omo-codex/plugin/skills/ulw-research/references/report-gates.md +68 -3
- package/packages/omo-codex/plugin/skills/ulw-research/references/report-visualization.md +2 -0
- package/packages/omo-codex/plugin/skills/ulw-research/references/unit-rules.md +157 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/claim-kinds.mjs +116 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/claims-index.mjs +125 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/cli-support.mjs +19 -5
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/contracts.mjs +89 -3
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/fact-commands-meaning.mjs +191 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/fact-commands-verify.mjs +164 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/fact-commands.mjs +239 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/fact-derive.mjs +66 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/fact-expr.mjs +108 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/fact-fill.mjs +194 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/fact-ledger-kinds.mjs +250 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/fact-ledger-schema.mjs +221 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/fact-ledger.mjs +123 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/fact-locate.mjs +231 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/fact-pairs.mjs +187 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/fact-recompute.mjs +89 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/fidelity-binding.mjs +130 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/fidelity-brief.mjs +150 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/fidelity-claims.mjs +89 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/fidelity-lexicon.mjs +145 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/fidelity-records.mjs +163 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/fidelity-state.mjs +64 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/fidelity-trace.mjs +85 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/fidelity-values.mjs +229 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/gates-fidelity.mjs +113 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/gates-static.mjs +29 -9
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/gates-structure.mjs +1 -1
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/gates-text.mjs +1 -27
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/html-lite.mjs +2 -2
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/html-markup.mjs +182 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/lexicon.mjs +47 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/md-lite.mjs +193 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/meaning-check.mjs +196 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/numerals.mjs +226 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/outcome.mjs +8 -8
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/particles-ko.mjs +108 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/placeholder.mjs +184 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/polish-apply.mjs +115 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/polish-diff.mjs +31 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/polish-project.mjs +125 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/polish-rules.mjs +170 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/rational.mjs +139 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/report-tools-commands.mjs +21 -10
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/report-tools.mjs +15 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/sentence-split.mjs +77 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/source-commands.mjs +140 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/source-snapshot.mjs +176 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/text-normalize.mjs +82 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/text-similarity.mjs +28 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/unit-algebra.mjs +101 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/unit-errors.mjs +23 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/unit-metadata.mjs +31 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/unit-pairs.mjs +72 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/unit-precision.mjs +44 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/unit-rules-shapes.mjs +64 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/unit-rules.mjs +173 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/units.mjs +105 -0
- package/packages/omo-codex/plugin/skills/visual-qa/SKILL.md +71 -64
- package/packages/omo-codex/plugin/test/component-bundled-cli.test.mjs +4 -1
- package/packages/omo-codex/plugin/test/sync-skills-codex-compatibility.test.mjs +19 -0
- package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +12 -8
- package/packages/omo-codex/scripts/install-dist/install-local.mjs +169 -30
- package/packages/shared-skills/skills/ast-grep/AGENTS.md +1 -1
- package/packages/shared-skills/skills/browser/SKILL.md +21 -22
- package/packages/shared-skills/skills/browser/references/commands.md +2 -9
- package/packages/shared-skills/skills/browser/references/install.md +1 -2
- package/packages/shared-skills/skills/browser/runtime/omowright/manifest.json +1 -1
- package/packages/shared-skills/skills/browser/scripts/browser-doctor.mjs +2 -2
- package/packages/shared-skills/skills/browser/scripts/browser-engine-guard.mjs +63 -487
- package/packages/shared-skills/skills/browser/scripts/browser-install.mjs +1 -1
- package/packages/shared-skills/skills/browser/scripts/omowright.mjs +1 -10
- package/packages/shared-skills/skills/frontend/ATTRIBUTION.md +2 -2
- package/packages/shared-skills/skills/frontend/SKILL.md +79 -118
- package/packages/shared-skills/skills/frontend/references/design/README.md +75 -224
- package/packages/shared-skills/skills/frontend/references/design/stylegallery.md +32 -27
- package/packages/shared-skills/skills/frontend/references/perfection/README.md +2 -2
- package/packages/shared-skills/skills/frontend/scripts/perfection/check-accent-stripes.ts +8 -24
- package/packages/shared-skills/skills/frontend/scripts/perfection/check-draft-guard.test.ts +101 -0
- package/packages/shared-skills/skills/frontend/scripts/perfection/check-draft-guard.ts +40 -0
- package/packages/shared-skills/skills/frontend/scripts/perfection/collect-files.test.ts +50 -0
- package/packages/shared-skills/skills/frontend/scripts/perfection/collect-files.ts +53 -0
- package/packages/shared-skills/skills/frontend/scripts/perfection/draft-guard/findings.ts +16 -0
- package/packages/shared-skills/skills/frontend/scripts/perfection/draft-guard/lint.ts +38 -0
- package/packages/shared-skills/skills/frontend/scripts/perfection/draft-guard/rules.ts +69 -0
- package/packages/shared-skills/skills/frontend/scripts/perfection/draft-guard/text-nodes.ts +121 -0
- package/packages/shared-skills/skills/frontend/scripts/perfection/fixtures/draft-guard/negative/attr-lookalikes.tsx +10 -0
- package/packages/shared-skills/skills/frontend/scripts/perfection/fixtures/draft-guard/negative/bound-values.tsx +12 -0
- package/packages/shared-skills/skills/frontend/scripts/perfection/fixtures/draft-guard/negative/const-generics.tsx +3 -0
- package/packages/shared-skills/skills/frontend/scripts/perfection/fixtures/draft-guard/negative/generics.tsx +7 -0
- package/packages/shared-skills/skills/frontend/scripts/perfection/fixtures/draft-guard/negative/measured-stats.html +6 -0
- package/packages/shared-skills/skills/frontend/scripts/perfection/fixtures/draft-guard/negative/plain-copy.html +9 -0
- package/packages/shared-skills/skills/frontend/scripts/perfection/fixtures/draft-guard/negative/state-copy.html +11 -0
- package/packages/shared-skills/skills/frontend/scripts/perfection/fixtures/draft-guard/positive/attribute-edges.html +7 -0
- package/packages/shared-skills/skills/frontend/scripts/perfection/fixtures/draft-guard/positive/components.tsx +16 -0
- package/packages/shared-skills/skills/frontend/scripts/perfection/fixtures/draft-guard/positive/decorative-badge.vue +7 -0
- package/packages/shared-skills/skills/frontend/scripts/perfection/fixtures/draft-guard/positive/emoji-icons.tsx +9 -0
- package/packages/shared-skills/skills/frontend/scripts/perfection/fixtures/draft-guard/positive/jsx-edges.tsx +1 -0
- package/packages/shared-skills/skills/frontend/scripts/perfection/fixtures/draft-guard/positive/promo-copy.html +6 -0
- package/packages/shared-skills/skills/frontend/scripts/perfection/fixtures/draft-guard/positive/promo-copy.tsx +8 -0
- package/packages/shared-skills/skills/frontend/scripts/perfection/fixtures/draft-guard/positive/vanity-stats.html +5 -0
- package/packages/shared-skills/skills/programming/SKILL.md +10 -7
- package/packages/shared-skills/skills/programming/references/typescript/README.md +10 -7
- package/packages/shared-skills/skills/programming/references/typescript/bootstrap.md +9 -23
- package/packages/shared-skills/skills/programming/references/typescript/oxc-lint.md +130 -0
- package/packages/shared-skills/skills/programming/references/typescript/tsconfig-strict.md +6 -62
- package/packages/shared-skills/skills/programming/scripts/typescript/check-no-excuse-rules.ts +12 -12
- package/packages/shared-skills/skills/programming/scripts/typescript/new-project.test.ts +162 -0
- package/packages/shared-skills/skills/programming/scripts/typescript/new-project.ts +20 -81
- package/packages/shared-skills/skills/programming/scripts/typescript/oxc/.oxfmtrc.json +9 -0
- package/packages/shared-skills/skills/programming/scripts/typescript/oxc/.oxlintrc.json +46 -0
- package/packages/shared-skills/skills/programming/scripts/typescript/oxc/lint/oxlint-plugin/LICENSE +21 -0
- package/packages/shared-skills/skills/programming/scripts/typescript/oxc/lint/oxlint-plugin/index.js +10 -0
- package/packages/shared-skills/skills/programming/scripts/typescript/oxc/lint/oxlint-plugin/no-em-dash-copy.js +28 -0
- package/packages/shared-skills/skills/programming/scripts/typescript/oxc/lint/oxlint-plugin/require-suppression-reason.js +62 -0
- package/packages/shared-skills/skills/programming/scripts/typescript/oxc/tsconfig.json +29 -0
- package/packages/shared-skills/skills/refactor/SKILL.md +13 -13
- package/packages/shared-skills/skills/ultimate-browsing/engine/AGENTS.md +1 -1
- package/packages/shared-skills/skills/ulw-execute/SKILL.md +1 -1
- package/packages/shared-skills/skills/ulw-research/AGENTS.md +21 -3
- package/packages/shared-skills/skills/ulw-research/SKILL.md +37 -12
- package/packages/shared-skills/skills/ulw-research/references/deliverable-phase.md +77 -16
- package/packages/shared-skills/skills/ulw-research/references/fact-ledger-grammar.md +134 -0
- package/packages/shared-skills/skills/ulw-research/references/fact-ledger.md +95 -0
- package/packages/shared-skills/skills/ulw-research/references/fidelity-claim-kinds.md +19 -0
- package/packages/shared-skills/skills/ulw-research/references/report-gates.md +68 -3
- package/packages/shared-skills/skills/ulw-research/references/report-visualization.md +2 -0
- package/packages/shared-skills/skills/ulw-research/references/unit-rules.md +157 -0
- package/packages/shared-skills/skills/ulw-research/scripts/claim-kinds.mjs +116 -0
- package/packages/shared-skills/skills/ulw-research/scripts/claim-kinds.test.ts +193 -0
- package/packages/shared-skills/skills/ulw-research/scripts/claims-index.mjs +125 -0
- package/packages/shared-skills/skills/ulw-research/scripts/claims-index.test.ts +149 -0
- package/packages/shared-skills/skills/ulw-research/scripts/cli-support.mjs +19 -5
- package/packages/shared-skills/skills/ulw-research/scripts/cli-support.test.ts +13 -2
- package/packages/shared-skills/skills/ulw-research/scripts/contracts.mjs +89 -3
- package/packages/shared-skills/skills/ulw-research/scripts/contracts.test.ts +100 -12
- package/packages/shared-skills/skills/ulw-research/scripts/copy-returns.test.ts +183 -0
- package/packages/shared-skills/skills/ulw-research/scripts/delivery-barrier.test.ts +245 -0
- package/packages/shared-skills/skills/ulw-research/scripts/fact-commands-meaning.mjs +191 -0
- package/packages/shared-skills/skills/ulw-research/scripts/fact-commands-verify.mjs +164 -0
- package/packages/shared-skills/skills/ulw-research/scripts/fact-commands.mjs +239 -0
- package/packages/shared-skills/skills/ulw-research/scripts/fact-derive.mjs +66 -0
- package/packages/shared-skills/skills/ulw-research/scripts/fact-derive.test.ts +375 -0
- package/packages/shared-skills/skills/ulw-research/scripts/fact-expr.mjs +108 -0
- package/packages/shared-skills/skills/ulw-research/scripts/fact-fill.mjs +194 -0
- package/packages/shared-skills/skills/ulw-research/scripts/fact-fill.test.ts +221 -0
- package/packages/shared-skills/skills/ulw-research/scripts/fact-ledger-grammar.test.ts +197 -0
- package/packages/shared-skills/skills/ulw-research/scripts/fact-ledger-kinds.mjs +250 -0
- package/packages/shared-skills/skills/ulw-research/scripts/fact-ledger-kinds.test.ts +156 -0
- package/packages/shared-skills/skills/ulw-research/scripts/fact-ledger-legacy.test.ts +160 -0
- package/packages/shared-skills/skills/ulw-research/scripts/fact-ledger-schema.mjs +221 -0
- package/packages/shared-skills/skills/ulw-research/scripts/fact-ledger-schema.test.ts +43 -0
- package/packages/shared-skills/skills/ulw-research/scripts/fact-ledger.mjs +123 -0
- package/packages/shared-skills/skills/ulw-research/scripts/fact-ledger.test.ts +254 -0
- package/packages/shared-skills/skills/ulw-research/scripts/fact-locate.mjs +231 -0
- package/packages/shared-skills/skills/ulw-research/scripts/fact-locate.test.ts +118 -0
- package/packages/shared-skills/skills/ulw-research/scripts/fact-pairs.mjs +187 -0
- package/packages/shared-skills/skills/ulw-research/scripts/fact-pairs.test.ts +167 -0
- package/packages/shared-skills/skills/ulw-research/scripts/fact-recompute.mjs +89 -0
- package/packages/shared-skills/skills/ulw-research/scripts/fact-unit-dimensions.test.ts +409 -0
- package/packages/shared-skills/skills/ulw-research/scripts/fact-unit-rules.test.ts +388 -0
- package/packages/shared-skills/skills/ulw-research/scripts/fidelity-binding.mjs +130 -0
- package/packages/shared-skills/skills/ulw-research/scripts/fidelity-binding.test.ts +81 -0
- package/packages/shared-skills/skills/ulw-research/scripts/fidelity-brief.mjs +150 -0
- package/packages/shared-skills/skills/ulw-research/scripts/fidelity-brief.test.ts +179 -0
- package/packages/shared-skills/skills/ulw-research/scripts/fidelity-claims.mjs +89 -0
- package/packages/shared-skills/skills/ulw-research/scripts/fidelity-lexicon.mjs +145 -0
- package/packages/shared-skills/skills/ulw-research/scripts/fidelity-lexicon.test.ts +117 -0
- package/packages/shared-skills/skills/ulw-research/scripts/fidelity-records.mjs +163 -0
- package/packages/shared-skills/skills/ulw-research/scripts/fidelity-state.mjs +64 -0
- package/packages/shared-skills/skills/ulw-research/scripts/fidelity-state.test.ts +46 -0
- package/packages/shared-skills/skills/ulw-research/scripts/fidelity-trace.mjs +85 -0
- package/packages/shared-skills/skills/ulw-research/scripts/fidelity-trace.test.ts +58 -0
- package/packages/shared-skills/skills/ulw-research/scripts/fidelity-values.mjs +229 -0
- package/packages/shared-skills/skills/ulw-research/scripts/fidelity-values.test.ts +270 -0
- package/packages/shared-skills/skills/ulw-research/scripts/gates-context.test.ts +64 -0
- package/packages/shared-skills/skills/ulw-research/scripts/gates-fidelity.mjs +113 -0
- package/packages/shared-skills/skills/ulw-research/scripts/gates-fidelity.test.ts +73 -0
- package/packages/shared-skills/skills/ulw-research/scripts/gates-static.mjs +29 -9
- package/packages/shared-skills/skills/ulw-research/scripts/gates-structure.mjs +1 -1
- package/packages/shared-skills/skills/ulw-research/scripts/gates-text.mjs +1 -27
- package/packages/shared-skills/skills/ulw-research/scripts/html-lite.mjs +2 -2
- package/packages/shared-skills/skills/ulw-research/scripts/html-markup.mjs +182 -0
- package/packages/shared-skills/skills/ulw-research/scripts/lexicon.mjs +47 -0
- package/packages/shared-skills/skills/ulw-research/scripts/lexicon.test.ts +57 -0
- package/packages/shared-skills/skills/ulw-research/scripts/md-lite.mjs +193 -0
- package/packages/shared-skills/skills/ulw-research/scripts/md-lite.test.ts +271 -0
- package/packages/shared-skills/skills/ulw-research/scripts/meaning-check.mjs +196 -0
- package/packages/shared-skills/skills/ulw-research/scripts/meaning-check.test.ts +228 -0
- package/packages/shared-skills/skills/ulw-research/scripts/numerals.mjs +226 -0
- package/packages/shared-skills/skills/ulw-research/scripts/numerals.test.ts +120 -0
- package/packages/shared-skills/skills/ulw-research/scripts/outcome.mjs +8 -8
- package/packages/shared-skills/skills/ulw-research/scripts/outcome.test.ts +29 -0
- package/packages/shared-skills/skills/ulw-research/scripts/particles-ko.mjs +108 -0
- package/packages/shared-skills/skills/ulw-research/scripts/particles-ko.test.ts +86 -0
- package/packages/shared-skills/skills/ulw-research/scripts/placeholder.mjs +184 -0
- package/packages/shared-skills/skills/ulw-research/scripts/placeholder.test.ts +77 -0
- package/packages/shared-skills/skills/ulw-research/scripts/polish-apply.mjs +115 -0
- package/packages/shared-skills/skills/ulw-research/scripts/polish-apply.test.ts +363 -0
- package/packages/shared-skills/skills/ulw-research/scripts/polish-diff.mjs +31 -0
- package/packages/shared-skills/skills/ulw-research/scripts/polish-diff.test.ts +168 -0
- package/packages/shared-skills/skills/ulw-research/scripts/polish-markup.test.ts +187 -0
- package/packages/shared-skills/skills/ulw-research/scripts/polish-project.mjs +125 -0
- package/packages/shared-skills/skills/ulw-research/scripts/polish-rules.mjs +170 -0
- package/packages/shared-skills/skills/ulw-research/scripts/rational.mjs +139 -0
- package/packages/shared-skills/skills/ulw-research/scripts/rational.test.ts +46 -0
- package/packages/shared-skills/skills/ulw-research/scripts/report-tools-commands.mjs +21 -10
- package/packages/shared-skills/skills/ulw-research/scripts/report-tools.mjs +15 -0
- package/packages/shared-skills/skills/ulw-research/scripts/report-tools.test.ts +458 -2
- package/packages/shared-skills/skills/ulw-research/scripts/sentence-split.mjs +77 -0
- package/packages/shared-skills/skills/ulw-research/scripts/sentence-split.test.ts +109 -0
- package/packages/shared-skills/skills/ulw-research/scripts/source-commands.mjs +140 -0
- package/packages/shared-skills/skills/ulw-research/scripts/source-snapshot.mjs +176 -0
- package/packages/shared-skills/skills/ulw-research/scripts/source-snapshot.test.ts +113 -0
- package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/fidelity/assets/share.csv +3 -0
- package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/fidelity/claim-graph.md +13 -0
- package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/fidelity/gen-legacy-dev.mjs +89 -0
- package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/fidelity/ledger-basic.json +223 -0
- package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/fidelity/ledger-legacy-dev.json +859 -0
- package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/fidelity/ledger-verify.json +420 -0
- package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/fidelity/report-bad.html +19 -0
- package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/fidelity/report-good.html +39 -0
- package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/fidelity/sources/S4/acronyms.json +3 -0
- package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/fidelity/sources/S4/meta.json +9 -0
- package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/fidelity/sources/S4/sentences.jsonl +7 -0
- package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/fidelity/sources/S4/text.txt +7 -0
- package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/fidelity/sources/S4.html +19 -0
- package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/fidelity/sources/S5/acronyms.json +1 -0
- package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/fidelity/sources/S5/meta.json +9 -0
- package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/fidelity/sources/S5/sentences.jsonl +1 -0
- package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/fidelity/sources/S5/text.txt +1 -0
- package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/fidelity/sources/S9.txt +1 -0
- package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/fidelity-brief-locked.md +17 -0
- package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/fidelity-brief-pending.md +17 -0
- package/packages/shared-skills/skills/ulw-research/scripts/text-normalize.mjs +82 -0
- package/packages/shared-skills/skills/ulw-research/scripts/text-normalize.test.ts +73 -0
- package/packages/shared-skills/skills/ulw-research/scripts/text-similarity.mjs +28 -0
- package/packages/shared-skills/skills/ulw-research/scripts/text-similarity.test.ts +38 -0
- package/packages/shared-skills/skills/ulw-research/scripts/unit-algebra.mjs +101 -0
- package/packages/shared-skills/skills/ulw-research/scripts/unit-errors.mjs +23 -0
- package/packages/shared-skills/skills/ulw-research/scripts/unit-metadata.mjs +31 -0
- package/packages/shared-skills/skills/ulw-research/scripts/unit-pairs.mjs +72 -0
- package/packages/shared-skills/skills/ulw-research/scripts/unit-precision.mjs +44 -0
- package/packages/shared-skills/skills/ulw-research/scripts/unit-rules-shapes.mjs +64 -0
- package/packages/shared-skills/skills/ulw-research/scripts/unit-rules.mjs +173 -0
- package/packages/shared-skills/skills/ulw-research/scripts/units.mjs +105 -0
- package/packages/shared-skills/skills/ulw-research/scripts/units.test.ts +83 -0
- package/packages/shared-skills/skills/visual-qa/SKILL.md +70 -63
- package/packages/shared-skills/skills/visual-qa/scripts/skill-doc-fields.test.ts +34 -0
- package/script/qa/web-terminal-visual-qa.mjs +6 -2
- package/script/qa/xterm-live-terminal.mjs +26 -3
package/dist/cli-node/index.js
CHANGED
|
@@ -2133,7 +2133,7 @@ var package_default;
|
|
|
2133
2133
|
var init_package = __esm(() => {
|
|
2134
2134
|
package_default = {
|
|
2135
2135
|
name: "oh-my-opencode",
|
|
2136
|
-
version: "5.1.
|
|
2136
|
+
version: "5.1.46",
|
|
2137
2137
|
description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
|
|
2138
2138
|
main: "./dist/index.js",
|
|
2139
2139
|
types: "dist/index.d.ts",
|
|
@@ -2253,6 +2253,8 @@ var init_package = __esm(() => {
|
|
|
2253
2253
|
"build:senpi-plugin": "bun run build:lsp-daemon && bun run build:ast-grep-mcp && bun run build:senpi-plugin:stage",
|
|
2254
2254
|
"build:senpi-plugin:native": "node packages/omo-senpi/plugin/scripts/stage-lsp-daemon-runtime.mjs && node packages/omo-senpi/plugin/scripts/stage-ast-grep-mcp-runtime.mjs && node packages/omo-senpi/plugin/scripts/stage-x-search-skill.mjs && node packages/omo-senpi/plugin/scripts/build-extension.mjs && node packages/omo-senpi/plugin/scripts/build-daemon-launch-spec.mjs && node packages/omo-senpi/plugin/scripts/sync-skills.mjs && node packages/omo-senpi/plugin/scripts/embed-directive.mjs --check && node packages/omo-senpi/plugin/scripts/build-install.mjs",
|
|
2255
2255
|
"build:senpi-plugin:stage": "bun run build:materialize-frontend && node packages/omo-senpi/plugin/scripts/stage-lsp-daemon-runtime.mjs && node packages/omo-senpi/plugin/scripts/stage-ast-grep-mcp-runtime.mjs && node packages/omo-senpi/plugin/scripts/stage-x-search-skill.mjs && node packages/omo-senpi/plugin/scripts/build-extension.mjs && node packages/omo-senpi/plugin/scripts/build-daemon-launch-spec.mjs && node packages/omo-senpi/plugin/scripts/sync-skills.mjs && node packages/omo-senpi/plugin/scripts/embed-directive.mjs --check && node packages/omo-senpi/plugin/scripts/build-install.mjs",
|
|
2256
|
+
"bundle-inputs": "node packages/omo-senpi/plugin/scripts/bundle-inputs.mjs",
|
|
2257
|
+
"bundle-inputs:check": "node packages/omo-senpi/plugin/scripts/bundle-inputs.mjs --check",
|
|
2256
2258
|
"build:materialize-frontend": "node packages/omo-codex/plugin/scripts/materialize-shared-upstreams.mjs --strict",
|
|
2257
2259
|
"build:shared-skills-assets": "bun run build:materialize-frontend && rm -rf dist/skills && cp -R packages/shared-skills/skills dist/skills",
|
|
2258
2260
|
"build:lsp-tools-mcp": "npm --prefix packages/lsp-tools-mcp ci && npm --prefix packages/lsp-tools-mcp run build",
|
|
@@ -2271,7 +2273,8 @@ var init_package = __esm(() => {
|
|
|
2271
2273
|
postinstall: "node postinstall.mjs",
|
|
2272
2274
|
prepublishOnly: "bun run clean && bun run build:lsp-tools-mcp && bun run build:lsp-daemon && bun run build",
|
|
2273
2275
|
"test:model-capabilities": "bun test --timeout 20000 packages/model-core/src/model-capability-aliases.test.ts packages/model-core/src/model-capability-guardrails.test.ts packages/model-core/src/model-capabilities.test.ts packages/omo-opencode/src/cli/doctor/checks/model-resolution.test.ts --bail",
|
|
2274
|
-
|
|
2276
|
+
"check:copy": "bun script/check-copy.ts",
|
|
2277
|
+
typecheck: "bun run check:copy && tsgo --noEmit && bun run typecheck:script && bun run typecheck:packages",
|
|
2275
2278
|
"typecheck:packages": "tsgo --noEmit -p packages/rules-engine/tsconfig.json && tsgo --noEmit -p packages/delegate-core/tsconfig.json && tsgo --noEmit -p packages/mcp-stdio-core/tsconfig.json && tsgo --noEmit -p packages/mcp-client-core/tsconfig.json && tsgo --noEmit -p packages/git-bash-mcp/tsconfig.json && tsgo --noEmit -p packages/ast-grep-mcp/tsconfig.json && tsgo --noEmit -p packages/lsp-core/tsconfig.json && tsgo --noEmit -p packages/utils/tsconfig.json && tsgo --noEmit -p packages/model-core/tsconfig.json && tsgo --noEmit -p packages/omo-config-core/tsconfig.json && tsgo --noEmit -p packages/prompts-core/tsconfig.json && tsgo --noEmit -p packages/comment-checker-core/tsconfig.json && tsgo --noEmit -p packages/hashline-core/tsconfig.json && tsgo --noEmit -p packages/tmux-core/tsconfig.json && tsgo --noEmit -p packages/team-core/tsconfig.json && tsgo --noEmit -p packages/openclaw-core/tsconfig.json && tsgo --noEmit -p packages/boulder-state/tsconfig.json && tsgo --noEmit -p packages/isolation-core/tsconfig.json && tsgo --noEmit -p packages/memory-core/tsconfig.json && tsgo --noEmit -p packages/telemetry-core/tsconfig.json && tsgo --noEmit -p packages/claude-code-compat-core/tsconfig.json && tsgo --noEmit -p packages/skills-loader-core/tsconfig.json && tsgo --noEmit -p packages/agents-md-core/tsconfig.json && tsgo --noEmit -p packages/omo-codex/plugin/shared/tsconfig.json && tsgo --noEmit -p packages/omo-codex/tsconfig.json && tsgo --noEmit -p packages/omo-senpi/tsconfig.json && tsgo --noEmit -p packages/senpi-task/tsconfig.json && tsgo --noEmit -p packages/omo-opencode/tsconfig.json && tsgo --noEmit -p packages/omo-native/tsconfig.json && tsgo --noEmit -p packages/senpi-desktop-protocol/tsconfig.json && tsgo --noEmit -p packages/senpi-desktop-engine/tsconfig.json && tsgo --noEmit -p packages/senpi-desktop-prelude/tsconfig.json && tsgo --noEmit -p packages/senpi-desktop-service/tsconfig.json && tsgo --noEmit -p packages/senpi-desktop-tool/tsconfig.json",
|
|
2276
2279
|
"typecheck:script": "tsgo --noEmit -p script/tsconfig.json",
|
|
2277
2280
|
test: "bun test --timeout 20000",
|
|
@@ -2282,7 +2285,10 @@ var init_package = __esm(() => {
|
|
|
2282
2285
|
"test:windows-codex": "bun run test:codex",
|
|
2283
2286
|
"build:git-bash-mcp": "bun run --cwd packages/git-bash-mcp build",
|
|
2284
2287
|
"build:ast-grep-mcp": "bun run --cwd packages/ast-grep-mcp build",
|
|
2285
|
-
"test:desktop": "bun script/check-cargo-pinned-deps.mjs && bun run --cwd packages/senpi-desktop-protocol test && bun run --cwd packages/senpi-desktop-engine test && bun run --cwd packages/senpi-desktop-prelude test && bun run --cwd packages/senpi-desktop-service test && bun run --cwd packages/senpi-desktop-tool test"
|
|
2288
|
+
"test:desktop": "bun script/check-cargo-pinned-deps.mjs && bun run --cwd packages/senpi-desktop-protocol test && bun run --cwd packages/senpi-desktop-engine test && bun run --cwd packages/senpi-desktop-prelude test && bun run --cwd packages/senpi-desktop-service test && bun run --cwd packages/senpi-desktop-tool test",
|
|
2289
|
+
"lint:ratchet": "bun script/lint-ratchet.ts",
|
|
2290
|
+
"lint:ratchet:update": "bun script/lint-ratchet.ts --update",
|
|
2291
|
+
lint: "bun run check:copy && oxlint packages/lsp-tools-mcp packages/lsp-daemon packages/web packages/omo-codex/plugin/components/comment-checker packages/omo-codex/plugin/components/lazycodex-executor-verify packages/omo-codex/plugin/components/lsp packages/omo-codex/plugin/components/rules packages/omo-codex/plugin/components/telemetry packages/omo-codex/plugin/components/ultrawork packages/omo-codex/plugin/components/ulw-execute-continuation packages/omo-codex/plugin/components/ulw-loop"
|
|
2286
2292
|
},
|
|
2287
2293
|
keywords: [
|
|
2288
2294
|
"opencode",
|
|
@@ -2310,7 +2316,7 @@ var init_package = __esm(() => {
|
|
|
2310
2316
|
},
|
|
2311
2317
|
devDependencies: {
|
|
2312
2318
|
"@clack/prompts": "^1.8.1",
|
|
2313
|
-
"@code-yeongyu/senpi": "2026.10.
|
|
2319
|
+
"@code-yeongyu/senpi": "2026.10.23-1",
|
|
2314
2320
|
"@modelcontextprotocol/sdk": "^1.30.0",
|
|
2315
2321
|
"@oh-my-opencode/agents-md-core": "workspace:*",
|
|
2316
2322
|
"@oh-my-opencode/ast-grep-mcp": "workspace:*",
|
|
@@ -2364,6 +2370,8 @@ var init_package = __esm(() => {
|
|
|
2364
2370
|
"jsonc-parser": "^3.3.1",
|
|
2365
2371
|
"node-pty": "^1.1.0",
|
|
2366
2372
|
omowright: "github:code-yeongyu/omowright#f87ef4d63fe7b56fe117dbab246c8ad88dd8a780",
|
|
2373
|
+
"oxc-parser": "0.148.0",
|
|
2374
|
+
oxlint: "1.89.0",
|
|
2367
2375
|
picocolors: "^1.1.1",
|
|
2368
2376
|
picomatch: "^4.0.7",
|
|
2369
2377
|
"posthog-node": "^5.52.4",
|
|
@@ -2371,18 +2379,18 @@ var init_package = __esm(() => {
|
|
|
2371
2379
|
typescript: "^7.0.2"
|
|
2372
2380
|
},
|
|
2373
2381
|
optionalDependencies: {
|
|
2374
|
-
"oh-my-opencode-darwin-arm64": "5.1.
|
|
2375
|
-
"oh-my-opencode-darwin-x64": "5.1.
|
|
2376
|
-
"oh-my-opencode-darwin-x64-baseline": "5.1.
|
|
2377
|
-
"oh-my-opencode-linux-arm64": "5.1.
|
|
2378
|
-
"oh-my-opencode-linux-arm64-musl": "5.1.
|
|
2379
|
-
"oh-my-opencode-linux-x64": "5.1.
|
|
2380
|
-
"oh-my-opencode-linux-x64-baseline": "5.1.
|
|
2381
|
-
"oh-my-opencode-linux-x64-musl": "5.1.
|
|
2382
|
-
"oh-my-opencode-linux-x64-musl-baseline": "5.1.
|
|
2383
|
-
"oh-my-opencode-windows-arm64": "5.1.
|
|
2384
|
-
"oh-my-opencode-windows-x64": "5.1.
|
|
2385
|
-
"oh-my-opencode-windows-x64-baseline": "5.1.
|
|
2382
|
+
"oh-my-opencode-darwin-arm64": "5.1.46",
|
|
2383
|
+
"oh-my-opencode-darwin-x64": "5.1.46",
|
|
2384
|
+
"oh-my-opencode-darwin-x64-baseline": "5.1.46",
|
|
2385
|
+
"oh-my-opencode-linux-arm64": "5.1.46",
|
|
2386
|
+
"oh-my-opencode-linux-arm64-musl": "5.1.46",
|
|
2387
|
+
"oh-my-opencode-linux-x64": "5.1.46",
|
|
2388
|
+
"oh-my-opencode-linux-x64-baseline": "5.1.46",
|
|
2389
|
+
"oh-my-opencode-linux-x64-musl": "5.1.46",
|
|
2390
|
+
"oh-my-opencode-linux-x64-musl-baseline": "5.1.46",
|
|
2391
|
+
"oh-my-opencode-windows-arm64": "5.1.46",
|
|
2392
|
+
"oh-my-opencode-windows-x64": "5.1.46",
|
|
2393
|
+
"oh-my-opencode-windows-x64-baseline": "5.1.46"
|
|
2386
2394
|
},
|
|
2387
2395
|
overrides: {
|
|
2388
2396
|
hono: "^4.13.8",
|
|
@@ -7544,6 +7552,20 @@ var init_logger = __esm(() => {
|
|
|
7544
7552
|
DEFAULT_MAX_LOG_FILE_SIZE_BYTES = 50 * 1024 * 1024;
|
|
7545
7553
|
});
|
|
7546
7554
|
|
|
7555
|
+
// packages/utils/src/logging/product-identity.ts
|
|
7556
|
+
function createProductIdentity(input) {
|
|
7557
|
+
return {
|
|
7558
|
+
pluginName: input.pluginName,
|
|
7559
|
+
legacyPluginName: input.legacyPluginName,
|
|
7560
|
+
publishedPackageName: input.publishedPackageName,
|
|
7561
|
+
acceptedPackageNames: input.acceptedPackageNames ?? [input.publishedPackageName, input.pluginName],
|
|
7562
|
+
configBasename: input.configBasename,
|
|
7563
|
+
legacyConfigBasename: input.legacyConfigBasename,
|
|
7564
|
+
logFileName: input.logFileName,
|
|
7565
|
+
cacheDirName: input.cacheDirName
|
|
7566
|
+
};
|
|
7567
|
+
}
|
|
7568
|
+
|
|
7547
7569
|
// packages/utils/src/logging/index.ts
|
|
7548
7570
|
var init_logging = __esm(() => {
|
|
7549
7571
|
init_logger();
|
|
@@ -7964,8 +7986,17 @@ function classifyPathEnvironment(absolutePath) {
|
|
|
7964
7986
|
}
|
|
7965
7987
|
var init_classify_path_environment = () => {};
|
|
7966
7988
|
|
|
7989
|
+
// packages/utils/src/command-executor/home-directory.ts
|
|
7990
|
+
import { homedir as homedir3 } from "node:os";
|
|
7991
|
+
function getHomeDirectory() {
|
|
7992
|
+
return process.env.HOME || process.env.USERPROFILE || homedir3();
|
|
7993
|
+
}
|
|
7994
|
+
var init_home_directory = () => {};
|
|
7995
|
+
|
|
7967
7996
|
// packages/utils/src/command-executor.ts
|
|
7968
|
-
var init_command_executor = () => {
|
|
7997
|
+
var init_command_executor = __esm(() => {
|
|
7998
|
+
init_home_directory();
|
|
7999
|
+
});
|
|
7969
8000
|
|
|
7970
8001
|
// packages/utils/src/git-worktree/index.ts
|
|
7971
8002
|
var init_git_worktree = () => {};
|
|
@@ -8008,6 +8039,25 @@ var init_internal_initiator_marker = __esm(() => {
|
|
|
8008
8039
|
INTERNAL_NOREPLY_MARKER_DETECT_PATTERN = /<!--\s*OMO_INTERNAL_NOREPLY\s*-->/;
|
|
8009
8040
|
});
|
|
8010
8041
|
|
|
8042
|
+
// packages/model-core/src/latest-models.ts
|
|
8043
|
+
var LATEST_MODEL_BY_FAMILY;
|
|
8044
|
+
var init_latest_models = __esm(() => {
|
|
8045
|
+
LATEST_MODEL_BY_FAMILY = {
|
|
8046
|
+
claudeOpus: "claude-opus-5-5",
|
|
8047
|
+
claudeSonnet: "claude-sonnet-5-5",
|
|
8048
|
+
claudeHaiku: "claude-haiku-5-5",
|
|
8049
|
+
claudeFable: "claude-fable-5-1",
|
|
8050
|
+
gptAstra: "gpt-6-astra",
|
|
8051
|
+
gptSol: "gpt-6.1-sol",
|
|
8052
|
+
gptSolFast: "gpt-6.1-sol-fast",
|
|
8053
|
+
gptLunaFast: "gpt-6-luna-fast",
|
|
8054
|
+
glm: "glm-5.3",
|
|
8055
|
+
glmFlash: "glm-5.3-flash",
|
|
8056
|
+
kimi: "kimi-k3",
|
|
8057
|
+
geminiPro: "gemini-4-argon"
|
|
8058
|
+
};
|
|
8059
|
+
});
|
|
8060
|
+
|
|
8011
8061
|
// packages/utils/src/migration/agent-category.ts
|
|
8012
8062
|
function configureMigrationCategoryDefaults(defaults) {
|
|
8013
8063
|
categoryDefaults = defaults ?? {};
|
|
@@ -9264,17 +9314,18 @@ var init_file_reference_resolver = __esm(() => {
|
|
|
9264
9314
|
// packages/model-core/src/agent-model-requirements.ts
|
|
9265
9315
|
var AGENT_MODEL_REQUIREMENTS;
|
|
9266
9316
|
var init_agent_model_requirements = __esm(() => {
|
|
9317
|
+
init_latest_models();
|
|
9267
9318
|
AGENT_MODEL_REQUIREMENTS = {
|
|
9268
9319
|
sisyphus: {
|
|
9269
9320
|
fallbackChain: [
|
|
9270
9321
|
{
|
|
9271
9322
|
providers: ["anthropic", "github-copilot", "opencode"],
|
|
9272
|
-
model:
|
|
9323
|
+
model: LATEST_MODEL_BY_FAMILY.claudeOpus,
|
|
9273
9324
|
variant: "max"
|
|
9274
9325
|
},
|
|
9275
9326
|
{
|
|
9276
9327
|
providers: ["opencode-go", "kimi-for-coding", "moonshotai", "opencode", "bailian-coding-plan", "moonshotai-cn", "firmware", "ollama-cloud", "aihubmix"],
|
|
9277
|
-
model:
|
|
9328
|
+
model: LATEST_MODEL_BY_FAMILY.kimi
|
|
9278
9329
|
},
|
|
9279
9330
|
{
|
|
9280
9331
|
providers: ["openai", "chatgpt-subscription", "github-copilot", "opencode"],
|
|
@@ -9308,7 +9359,7 @@ var init_agent_model_requirements = __esm(() => {
|
|
|
9308
9359
|
{ providers: ["github-copilot"], model: "gpt-5.6-sol", variant: "high" },
|
|
9309
9360
|
{
|
|
9310
9361
|
providers: ["google", "google-vertex", "opencode"],
|
|
9311
|
-
model:
|
|
9362
|
+
model: LATEST_MODEL_BY_FAMILY.geminiPro,
|
|
9312
9363
|
variant: "high"
|
|
9313
9364
|
},
|
|
9314
9365
|
{
|
|
@@ -9318,7 +9369,7 @@ var init_agent_model_requirements = __esm(() => {
|
|
|
9318
9369
|
},
|
|
9319
9370
|
{
|
|
9320
9371
|
providers: ["anthropic", "github-copilot", "opencode"],
|
|
9321
|
-
model:
|
|
9372
|
+
model: LATEST_MODEL_BY_FAMILY.claudeOpus,
|
|
9322
9373
|
variant: "max"
|
|
9323
9374
|
},
|
|
9324
9375
|
{ providers: ["opencode-go"], model: "glm-5.2" }
|
|
@@ -9327,8 +9378,8 @@ var init_agent_model_requirements = __esm(() => {
|
|
|
9327
9378
|
librarian: {
|
|
9328
9379
|
fallbackChain: [
|
|
9329
9380
|
{ providers: ["kimi-for-coding"], model: "kimi-for-coding-highspeed", variant: "off" },
|
|
9330
|
-
{ providers: ["openai", "chatgpt-subscription"], model:
|
|
9331
|
-
{ providers: ["anthropic", "github-copilot"], model:
|
|
9381
|
+
{ providers: ["openai", "chatgpt-subscription"], model: LATEST_MODEL_BY_FAMILY.gptLunaFast, variant: "low" },
|
|
9382
|
+
{ providers: ["anthropic", "github-copilot"], model: LATEST_MODEL_BY_FAMILY.claudeHaiku, variant: "medium" },
|
|
9332
9383
|
{ providers: ["deepseek"], model: "deepseek-flash", variant: "max" },
|
|
9333
9384
|
{ providers: ["opencode-go", "bailian-coding-plan"], model: "qwen3.7-plus" },
|
|
9334
9385
|
{ providers: ["opencode-go"], model: "minimax-m2.7" }
|
|
@@ -9337,8 +9388,8 @@ var init_agent_model_requirements = __esm(() => {
|
|
|
9337
9388
|
explore: {
|
|
9338
9389
|
fallbackChain: [
|
|
9339
9390
|
{ providers: ["kimi-for-coding"], model: "kimi-for-coding-highspeed", variant: "off" },
|
|
9340
|
-
{ providers: ["openai", "chatgpt-subscription"], model:
|
|
9341
|
-
{ providers: ["anthropic", "github-copilot"], model:
|
|
9391
|
+
{ providers: ["openai", "chatgpt-subscription"], model: LATEST_MODEL_BY_FAMILY.gptLunaFast, variant: "low" },
|
|
9392
|
+
{ providers: ["anthropic", "github-copilot"], model: LATEST_MODEL_BY_FAMILY.claudeHaiku, variant: "medium" },
|
|
9342
9393
|
{ providers: ["deepseek"], model: "deepseek-flash", variant: "max" },
|
|
9343
9394
|
{ providers: ["opencode-go", "bailian-coding-plan"], model: "qwen3.7-plus" },
|
|
9344
9395
|
{ providers: ["opencode-go"], model: "minimax-m2.7" }
|
|
@@ -9347,7 +9398,7 @@ var init_agent_model_requirements = __esm(() => {
|
|
|
9347
9398
|
"multimodal-looker": {
|
|
9348
9399
|
fallbackChain: [
|
|
9349
9400
|
{ providers: ["openai", "chatgpt-subscription", "opencode"], model: "gpt-5.6-sol", variant: "low" },
|
|
9350
|
-
{ providers: ["opencode-go"], model:
|
|
9401
|
+
{ providers: ["opencode-go"], model: LATEST_MODEL_BY_FAMILY.kimi },
|
|
9351
9402
|
{ providers: ["zai-coding-plan"], model: "glm-4.6v" },
|
|
9352
9403
|
{ providers: ["openai", "chatgpt-subscription", "github-copilot", "opencode"], model: "gpt-5-nano" }
|
|
9353
9404
|
]
|
|
@@ -9356,17 +9407,17 @@ var init_agent_model_requirements = __esm(() => {
|
|
|
9356
9407
|
fallbackChain: [
|
|
9357
9408
|
{
|
|
9358
9409
|
providers: ["anthropic", "github-copilot", "opencode"],
|
|
9359
|
-
model:
|
|
9410
|
+
model: LATEST_MODEL_BY_FAMILY.claudeFable,
|
|
9360
9411
|
variant: "xhigh"
|
|
9361
9412
|
},
|
|
9362
9413
|
{
|
|
9363
9414
|
providers: ["anthropic", "github-copilot", "opencode"],
|
|
9364
|
-
model:
|
|
9415
|
+
model: LATEST_MODEL_BY_FAMILY.claudeOpus,
|
|
9365
9416
|
variant: "max"
|
|
9366
9417
|
},
|
|
9367
9418
|
{
|
|
9368
9419
|
providers: ["opencode-go", "kimi-for-coding", "moonshotai", "opencode"],
|
|
9369
|
-
model:
|
|
9420
|
+
model: LATEST_MODEL_BY_FAMILY.kimi,
|
|
9370
9421
|
variant: "max"
|
|
9371
9422
|
}
|
|
9372
9423
|
]
|
|
@@ -9375,34 +9426,34 @@ var init_agent_model_requirements = __esm(() => {
|
|
|
9375
9426
|
fallbackChain: [
|
|
9376
9427
|
{
|
|
9377
9428
|
providers: ["anthropic", "github-copilot", "opencode"],
|
|
9378
|
-
model:
|
|
9429
|
+
model: LATEST_MODEL_BY_FAMILY.claudeFable,
|
|
9379
9430
|
variant: "max"
|
|
9380
9431
|
},
|
|
9381
9432
|
{
|
|
9382
9433
|
providers: ["anthropic", "github-copilot", "opencode"],
|
|
9383
|
-
model:
|
|
9434
|
+
model: LATEST_MODEL_BY_FAMILY.claudeOpus,
|
|
9384
9435
|
variant: "max"
|
|
9385
9436
|
},
|
|
9386
9437
|
{
|
|
9387
9438
|
providers: ["opencode-go", "kimi-for-coding", "moonshotai", "opencode"],
|
|
9388
|
-
model:
|
|
9439
|
+
model: LATEST_MODEL_BY_FAMILY.kimi,
|
|
9389
9440
|
variant: "max"
|
|
9390
9441
|
}
|
|
9391
9442
|
]
|
|
9392
9443
|
},
|
|
9393
9444
|
momus: {
|
|
9394
9445
|
fallbackChain: [
|
|
9395
|
-
{ providers: ["openai", "chatgpt-subscription"], model:
|
|
9396
|
-
{ providers: ["github-copilot"], model:
|
|
9397
|
-
{ providers: ["openai", "chatgpt-subscription", "opencode"], model:
|
|
9446
|
+
{ providers: ["openai", "chatgpt-subscription"], model: LATEST_MODEL_BY_FAMILY.gptAstra, variant: "xhigh" },
|
|
9447
|
+
{ providers: ["github-copilot"], model: LATEST_MODEL_BY_FAMILY.gptAstra, variant: "high" },
|
|
9448
|
+
{ providers: ["openai", "chatgpt-subscription", "opencode"], model: LATEST_MODEL_BY_FAMILY.gptAstra, variant: "high" },
|
|
9398
9449
|
{
|
|
9399
9450
|
providers: ["anthropic", "github-copilot", "opencode"],
|
|
9400
|
-
model:
|
|
9451
|
+
model: LATEST_MODEL_BY_FAMILY.claudeOpus,
|
|
9401
9452
|
variant: "max"
|
|
9402
9453
|
},
|
|
9403
9454
|
{
|
|
9404
9455
|
providers: ["google", "google-vertex", "opencode"],
|
|
9405
|
-
model:
|
|
9456
|
+
model: LATEST_MODEL_BY_FAMILY.geminiPro,
|
|
9406
9457
|
variant: "high"
|
|
9407
9458
|
},
|
|
9408
9459
|
{
|
|
@@ -9416,7 +9467,7 @@ var init_agent_model_requirements = __esm(() => {
|
|
|
9416
9467
|
atlas: {
|
|
9417
9468
|
fallbackChain: [
|
|
9418
9469
|
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-sonnet-5" },
|
|
9419
|
-
{ providers: ["opencode-go"], model:
|
|
9470
|
+
{ providers: ["opencode-go"], model: LATEST_MODEL_BY_FAMILY.kimi },
|
|
9420
9471
|
{
|
|
9421
9472
|
providers: ["openai", "chatgpt-subscription", "github-copilot", "opencode"],
|
|
9422
9473
|
model: "gpt-5.6-sol",
|
|
@@ -9430,7 +9481,7 @@ var init_agent_model_requirements = __esm(() => {
|
|
|
9430
9481
|
"sisyphus-junior": {
|
|
9431
9482
|
fallbackChain: [
|
|
9432
9483
|
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-sonnet-5" },
|
|
9433
|
-
{ providers: ["opencode-go"], model:
|
|
9484
|
+
{ providers: ["opencode-go"], model: LATEST_MODEL_BY_FAMILY.kimi },
|
|
9434
9485
|
{
|
|
9435
9486
|
providers: ["openai", "chatgpt-subscription", "github-copilot", "opencode"],
|
|
9436
9487
|
model: "gpt-5.6-sol",
|
|
@@ -9448,32 +9499,33 @@ var init_agent_model_requirements = __esm(() => {
|
|
|
9448
9499
|
// packages/model-core/src/category-model-requirements.ts
|
|
9449
9500
|
var CATEGORY_MODEL_REQUIREMENTS;
|
|
9450
9501
|
var init_category_model_requirements = __esm(() => {
|
|
9502
|
+
init_latest_models();
|
|
9451
9503
|
CATEGORY_MODEL_REQUIREMENTS = {
|
|
9452
9504
|
"visual-engineering": {
|
|
9453
9505
|
fallbackChain: [
|
|
9454
|
-
{ providers: ["google", "google-vertex", "opencode"], model:
|
|
9506
|
+
{ providers: ["google", "google-vertex", "opencode"], model: LATEST_MODEL_BY_FAMILY.geminiPro, variant: "low" },
|
|
9455
9507
|
{
|
|
9456
9508
|
providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
|
|
9457
|
-
model:
|
|
9509
|
+
model: LATEST_MODEL_BY_FAMILY.claudeFable,
|
|
9458
9510
|
variant: "max"
|
|
9459
9511
|
},
|
|
9460
9512
|
{
|
|
9461
9513
|
providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
|
|
9462
|
-
model:
|
|
9514
|
+
model: LATEST_MODEL_BY_FAMILY.claudeOpus,
|
|
9463
9515
|
variant: "max"
|
|
9464
9516
|
},
|
|
9465
9517
|
{
|
|
9466
9518
|
providers: ["kimi-for-coding", "moonshotai", "opencode-go", "opencode"],
|
|
9467
|
-
model:
|
|
9519
|
+
model: LATEST_MODEL_BY_FAMILY.kimi,
|
|
9468
9520
|
variant: "max"
|
|
9469
9521
|
}
|
|
9470
9522
|
]
|
|
9471
9523
|
},
|
|
9472
9524
|
ultrabrain: {
|
|
9473
9525
|
fallbackChain: [
|
|
9474
|
-
{ providers: ["openai", "chatgpt-subscription"], model:
|
|
9475
|
-
{ providers: ["github-copilot"], model:
|
|
9476
|
-
{ providers: ["openai", "chatgpt-subscription", "opencode"], model:
|
|
9526
|
+
{ providers: ["openai", "chatgpt-subscription"], model: LATEST_MODEL_BY_FAMILY.gptAstra, variant: "max" },
|
|
9527
|
+
{ providers: ["github-copilot"], model: LATEST_MODEL_BY_FAMILY.gptAstra, variant: "max" },
|
|
9528
|
+
{ providers: ["openai", "chatgpt-subscription", "opencode"], model: LATEST_MODEL_BY_FAMILY.gptAstra, variant: "max" },
|
|
9477
9529
|
{ providers: ["openai", "chatgpt-subscription"], model: "gpt-5.6-sol", variant: "max" },
|
|
9478
9530
|
{ providers: ["github-copilot"], model: "gpt-5.6-sol", variant: "max" },
|
|
9479
9531
|
{ providers: ["openai", "chatgpt-subscription", "opencode"], model: "gpt-5.6-sol", variant: "max" }
|
|
@@ -9481,8 +9533,8 @@ var init_category_model_requirements = __esm(() => {
|
|
|
9481
9533
|
},
|
|
9482
9534
|
"deep-low": {
|
|
9483
9535
|
fallbackChain: [
|
|
9484
|
-
{ providers: ["openai", "chatgpt-subscription"], model:
|
|
9485
|
-
{ providers: ["openai", "chatgpt-subscription"], model:
|
|
9536
|
+
{ providers: ["openai", "chatgpt-subscription"], model: LATEST_MODEL_BY_FAMILY.gptSol, variant: "medium" },
|
|
9537
|
+
{ providers: ["openai", "chatgpt-subscription"], model: LATEST_MODEL_BY_FAMILY.gptSolFast, variant: "medium" },
|
|
9486
9538
|
{
|
|
9487
9539
|
providers: ["openai", "chatgpt-subscription", "github-copilot", "opencode"],
|
|
9488
9540
|
model: "gpt-5.6-sol",
|
|
@@ -9495,7 +9547,7 @@ var init_category_model_requirements = __esm(() => {
|
|
|
9495
9547
|
fallbackChain: [
|
|
9496
9548
|
{
|
|
9497
9549
|
providers: ["openai", "chatgpt-subscription", "github-copilot", "opencode"],
|
|
9498
|
-
model:
|
|
9550
|
+
model: LATEST_MODEL_BY_FAMILY.gptAstra,
|
|
9499
9551
|
variant: "high"
|
|
9500
9552
|
}
|
|
9501
9553
|
]
|
|
@@ -9504,27 +9556,27 @@ var init_category_model_requirements = __esm(() => {
|
|
|
9504
9556
|
fallbackChain: [
|
|
9505
9557
|
{
|
|
9506
9558
|
providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
|
|
9507
|
-
model:
|
|
9559
|
+
model: LATEST_MODEL_BY_FAMILY.claudeFable,
|
|
9508
9560
|
variant: "max"
|
|
9509
9561
|
},
|
|
9510
9562
|
{
|
|
9511
9563
|
providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
|
|
9512
|
-
model:
|
|
9564
|
+
model: LATEST_MODEL_BY_FAMILY.claudeOpus,
|
|
9513
9565
|
variant: "max"
|
|
9514
9566
|
},
|
|
9515
9567
|
{
|
|
9516
9568
|
providers: ["kimi-for-coding", "moonshotai", "opencode-go", "opencode"],
|
|
9517
|
-
model:
|
|
9569
|
+
model: LATEST_MODEL_BY_FAMILY.kimi,
|
|
9518
9570
|
variant: "max"
|
|
9519
9571
|
}
|
|
9520
9572
|
]
|
|
9521
9573
|
},
|
|
9522
9574
|
quick: {
|
|
9523
9575
|
fallbackChain: [
|
|
9524
|
-
{ providers: ["openai", "chatgpt-subscription"], model:
|
|
9576
|
+
{ providers: ["openai", "chatgpt-subscription"], model: LATEST_MODEL_BY_FAMILY.gptLunaFast, variant: "low" },
|
|
9525
9577
|
{
|
|
9526
9578
|
providers: ["anthropic", "anthropic-api", "github-copilot"],
|
|
9527
|
-
model:
|
|
9579
|
+
model: LATEST_MODEL_BY_FAMILY.claudeHaiku,
|
|
9528
9580
|
variant: "medium"
|
|
9529
9581
|
},
|
|
9530
9582
|
{ providers: ["deepseek"], model: "deepseek-flash", variant: "off" },
|
|
@@ -9536,7 +9588,7 @@ var init_category_model_requirements = __esm(() => {
|
|
|
9536
9588
|
{ providers: ["opencode-go"], model: "minimax-m3", variant: "max" },
|
|
9537
9589
|
{ providers: ["opencode-go"], model: "minimax-m2.7", variant: "max" },
|
|
9538
9590
|
{ providers: ["xai"], model: "grok-4.20-0309-non-reasoning" },
|
|
9539
|
-
{ providers: ["zai-coding-plan"], model:
|
|
9591
|
+
{ providers: ["zai-coding-plan"], model: LATEST_MODEL_BY_FAMILY.glmFlash, variant: "low" },
|
|
9540
9592
|
{ providers: ["xiaomi"], model: "mimo-v2.6-flash", variant: "low" }
|
|
9541
9593
|
]
|
|
9542
9594
|
},
|
|
@@ -9544,13 +9596,13 @@ var init_category_model_requirements = __esm(() => {
|
|
|
9544
9596
|
fallbackChain: [
|
|
9545
9597
|
{
|
|
9546
9598
|
providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
|
|
9547
|
-
model:
|
|
9599
|
+
model: LATEST_MODEL_BY_FAMILY.claudeSonnet,
|
|
9548
9600
|
variant: "medium"
|
|
9549
9601
|
},
|
|
9550
9602
|
{ providers: ["xiaomi", "opencode-go"], model: "mimo-v2.6-pro", variant: "max" },
|
|
9551
9603
|
{ providers: ["xai", "github-copilot", "opencode-go"], model: "grok-4.7", variant: "xhigh" },
|
|
9552
|
-
{ providers: ["zai-coding-plan", "opencode-go"], model:
|
|
9553
|
-
{ providers: ["openai", "chatgpt-subscription"], model:
|
|
9604
|
+
{ providers: ["zai-coding-plan", "opencode-go"], model: LATEST_MODEL_BY_FAMILY.glm, variant: "high" },
|
|
9605
|
+
{ providers: ["openai", "chatgpt-subscription"], model: LATEST_MODEL_BY_FAMILY.gptSol, variant: "medium" },
|
|
9554
9606
|
{
|
|
9555
9607
|
providers: ["openai", "chatgpt-subscription", "github-copilot", "opencode"],
|
|
9556
9608
|
model: "gpt-5.6-sol",
|
|
@@ -9574,13 +9626,13 @@ var init_category_model_requirements = __esm(() => {
|
|
|
9574
9626
|
fallbackChain: [
|
|
9575
9627
|
{
|
|
9576
9628
|
providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
|
|
9577
|
-
model:
|
|
9629
|
+
model: LATEST_MODEL_BY_FAMILY.claudeOpus,
|
|
9578
9630
|
variant: "medium"
|
|
9579
9631
|
},
|
|
9580
|
-
{ providers: ["zai-coding-plan", "opencode-go"], model:
|
|
9632
|
+
{ providers: ["zai-coding-plan", "opencode-go"], model: LATEST_MODEL_BY_FAMILY.glm, variant: "max" },
|
|
9581
9633
|
{
|
|
9582
9634
|
providers: ["kimi-for-coding", "moonshotai", "opencode-go", "opencode"],
|
|
9583
|
-
model:
|
|
9635
|
+
model: LATEST_MODEL_BY_FAMILY.kimi,
|
|
9584
9636
|
variant: "max"
|
|
9585
9637
|
}
|
|
9586
9638
|
]
|
|
@@ -9588,10 +9640,10 @@ var init_category_model_requirements = __esm(() => {
|
|
|
9588
9640
|
writing: {
|
|
9589
9641
|
requiresAnyModel: true,
|
|
9590
9642
|
fallbackChain: [
|
|
9591
|
-
{ providers: ["google", "google-vertex", "opencode"], model:
|
|
9643
|
+
{ providers: ["google", "google-vertex", "opencode"], model: LATEST_MODEL_BY_FAMILY.geminiPro, variant: "low" },
|
|
9592
9644
|
{
|
|
9593
9645
|
providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
|
|
9594
|
-
model:
|
|
9646
|
+
model: LATEST_MODEL_BY_FAMILY.claudeOpus,
|
|
9595
9647
|
variant: "low"
|
|
9596
9648
|
},
|
|
9597
9649
|
{
|
|
@@ -11083,6 +11135,7 @@ var init_src2 = __esm(() => {
|
|
|
11083
11135
|
init_model_resolver();
|
|
11084
11136
|
init_provider_model_id_transform();
|
|
11085
11137
|
init_model_requirements();
|
|
11138
|
+
init_latest_models();
|
|
11086
11139
|
init_model_family_detectors();
|
|
11087
11140
|
init_model_capability_aliases();
|
|
11088
11141
|
init_model_capability_heuristics();
|
|
@@ -11404,16 +11457,17 @@ Approach:
|
|
|
11404
11457
|
- This is for tasks requiring exceptional creativity
|
|
11405
11458
|
</Category_Context>`, GOOGLE_CATEGORIES;
|
|
11406
11459
|
var init_google_categories = __esm(() => {
|
|
11460
|
+
init_latest_models();
|
|
11407
11461
|
GOOGLE_CATEGORIES = [
|
|
11408
11462
|
{
|
|
11409
11463
|
name: "visual-engineering",
|
|
11410
|
-
config: { model:
|
|
11464
|
+
config: { model: `google/${LATEST_MODEL_BY_FAMILY.geminiPro}`, variant: "low" },
|
|
11411
11465
|
description: "Visual design, UI/UX, frontend, styling, animation, and design systems",
|
|
11412
11466
|
promptAppend: VISUAL_CATEGORY_PROMPT_APPEND
|
|
11413
11467
|
},
|
|
11414
11468
|
{
|
|
11415
11469
|
name: "artistry",
|
|
11416
|
-
config: { model:
|
|
11470
|
+
config: { model: `anthropic/${LATEST_MODEL_BY_FAMILY.claudeFable}`, variant: "max" },
|
|
11417
11471
|
description: "Complex problem-solving with unconventional, creative approaches - beyond standard patterns",
|
|
11418
11472
|
promptAppend: ARTISTRY_CATEGORY_PROMPT_APPEND
|
|
11419
11473
|
}
|
|
@@ -11447,10 +11501,11 @@ ANTI-AI-SLOP RULES (NON-NEGOTIABLE):
|
|
|
11447
11501
|
- Write like a human, not a corporate template.
|
|
11448
11502
|
</Category_Context>`, KIMI_CATEGORIES;
|
|
11449
11503
|
var init_kimi_categories = __esm(() => {
|
|
11504
|
+
init_latest_models();
|
|
11450
11505
|
KIMI_CATEGORIES = [
|
|
11451
11506
|
{
|
|
11452
11507
|
name: "writing",
|
|
11453
|
-
config: { model:
|
|
11508
|
+
config: { model: `google/${LATEST_MODEL_BY_FAMILY.geminiPro}`, variant: "low" },
|
|
11454
11509
|
description: "Documentation, prose, technical writing",
|
|
11455
11510
|
promptAppend: WRITING_CATEGORY_PROMPT_APPEND
|
|
11456
11511
|
}
|
|
@@ -11585,21 +11640,23 @@ You are working on tasks that don't fit specific categories but require moderate
|
|
|
11585
11640
|
</Category_Context>`, UNSPECIFIED_LOW_CATEGORY_CALLER_GUIDANCE = `<Selection_Gate>Use only when no specialist category fits, effort is moderate, and scope stays within a few files/modules. Prefer any matching specialist category.</Selection_Gate>
|
|
11586
11641
|
<Caller_Warning>Provide explicit must-do steps, forbidden scope, and concrete success criteria.</Caller_Warning>`, UNSPECIFIED_HIGH_CATEGORY_PROMPT_APPEND = `<Category_Context>
|
|
11587
11642
|
You are working on tasks that don't fit specific categories but require substantial effort.
|
|
11588
|
-
</Category_Context>`, UNSPECIFIED_HIGH_CATEGORY_CALLER_GUIDANCE = `<Selection_Gate>Use only when no specialist category fits and substantial effort spans systems/modules with broad impact. Use unspecified-low for contained moderate work.</Selection_Gate>`, DEEP_LOW_CATEGORY_CALLER_GUIDANCE = `<Selection_Gate>Of the two deep lanes this is the default: the child settles its decisions from what it reads. When unsure, choose deep-low; a misrouted child returns \`ESCALATE: deep-high\` after one cheap attempt, and you re-spawn the same brief as deep-high with its findings.</Selection_Gate>`, DEEP_HIGH_CATEGORY_CALLER_GUIDANCE = `<Selection_Gate>Route here only when you can name the decision evidence cannot settle: a trade-off with no single right answer, a contract change crossing a package or process boundary, a mechanism with no in-repo pattern to copy, or correctness argued from invariants rather than observed in a test. Wide scope with easy decisions is deep-low or unspecified-high; reasoning as the deliverable is ultrabrain.</Selection_Gate>`, DEEP_LOW_GATE_MODELS, DEEP_HIGH_GATE_MODEL
|
|
11643
|
+
</Category_Context>`, UNSPECIFIED_HIGH_CATEGORY_CALLER_GUIDANCE = `<Selection_Gate>Use only when no specialist category fits and substantial effort spans systems/modules with broad impact. Use unspecified-low for contained moderate work.</Selection_Gate>`, DEEP_LOW_CATEGORY_CALLER_GUIDANCE = `<Selection_Gate>Of the two deep lanes this is the default: the child settles its decisions from what it reads. When unsure, choose deep-low; a misrouted child returns \`ESCALATE: deep-high\` after one cheap attempt, and you re-spawn the same brief as deep-high with its findings.</Selection_Gate>`, DEEP_HIGH_CATEGORY_CALLER_GUIDANCE = `<Selection_Gate>Route here only when you can name the decision evidence cannot settle: a trade-off with no single right answer, a contract change crossing a package or process boundary, a mechanism with no in-repo pattern to copy, or correctness argued from invariants rather than observed in a test. Wide scope with easy decisions is deep-low or unspecified-high; reasoning as the deliverable is ultrabrain.</Selection_Gate>`, DEEP_LOW_GATE_MODELS, DEEP_HIGH_GATE_MODEL, OPENAI_CATEGORIES;
|
|
11589
11644
|
var init_openai_categories = __esm(() => {
|
|
11590
11645
|
init_types();
|
|
11591
|
-
|
|
11646
|
+
init_latest_models();
|
|
11647
|
+
DEEP_LOW_GATE_MODELS = [LATEST_MODEL_BY_FAMILY.gptSol, LATEST_MODEL_BY_FAMILY.gptSolFast, "gpt-5.6-sol-fast", "gpt-5.6-sol"];
|
|
11648
|
+
DEEP_HIGH_GATE_MODEL = LATEST_MODEL_BY_FAMILY.gptAstra;
|
|
11592
11649
|
OPENAI_CATEGORIES = [
|
|
11593
11650
|
{
|
|
11594
11651
|
name: "ultrabrain",
|
|
11595
|
-
config: { model:
|
|
11652
|
+
config: { model: `openai/${LATEST_MODEL_BY_FAMILY.gptAstra}`, variant: "max" },
|
|
11596
11653
|
description: "Use ONLY for genuinely hard, logic-heavy tasks. Give clear goals only, not step-by-step instructions.",
|
|
11597
11654
|
promptAppend: ULTRABRAIN_CATEGORY_PROMPT_APPEND,
|
|
11598
11655
|
resolvePromptAppend: resolveUltrabrainCategoryPromptAppend
|
|
11599
11656
|
},
|
|
11600
11657
|
{
|
|
11601
11658
|
name: "deep-low",
|
|
11602
|
-
config: { model:
|
|
11659
|
+
config: { model: `openai/${LATEST_MODEL_BY_FAMILY.gptSol}`, variant: "medium" },
|
|
11603
11660
|
description: "Default deep lane: one goal, one deliverable, decisions the child can settle from what it reads; preferred over deep-high for 3D graphics, computer/browser use, CAPTCHA, multimodal, backend, logic, and algorithm work. Multiple goals fan out as parallel calls.",
|
|
11604
11661
|
callerGuidance: DEEP_LOW_CATEGORY_CALLER_GUIDANCE,
|
|
11605
11662
|
promptAppend: DEEP_LOW_CATEGORY_PROMPT_APPEND,
|
|
@@ -11608,7 +11665,7 @@ var init_openai_categories = __esm(() => {
|
|
|
11608
11665
|
},
|
|
11609
11666
|
{
|
|
11610
11667
|
name: "deep-high",
|
|
11611
|
-
config: { model:
|
|
11668
|
+
config: { model: `openai/${LATEST_MODEL_BY_FAMILY.gptAstra}`, variant: "high" },
|
|
11612
11669
|
description: "Escalation deep lane: a goal whose central decision cannot be settled from evidence alone. Same one-goal, one-deliverable contract as deep-low.",
|
|
11613
11670
|
callerGuidance: DEEP_HIGH_CATEGORY_CALLER_GUIDANCE,
|
|
11614
11671
|
promptAppend: DEEP_HIGH_CATEGORY_PROMPT_APPEND,
|
|
@@ -11617,21 +11674,21 @@ var init_openai_categories = __esm(() => {
|
|
|
11617
11674
|
},
|
|
11618
11675
|
{
|
|
11619
11676
|
name: "quick",
|
|
11620
|
-
config: { model:
|
|
11677
|
+
config: { model: `openai/${LATEST_MODEL_BY_FAMILY.gptLunaFast}`, variant: "low" },
|
|
11621
11678
|
description: "Trivial tasks - single file changes, typo fixes, simple modifications",
|
|
11622
11679
|
callerGuidance: QUICK_CATEGORY_CALLER_GUIDANCE,
|
|
11623
11680
|
promptAppend: QUICK_CATEGORY_PROMPT_APPEND
|
|
11624
11681
|
},
|
|
11625
11682
|
{
|
|
11626
11683
|
name: "unspecified-low",
|
|
11627
|
-
config: { model:
|
|
11684
|
+
config: { model: `anthropic/${LATEST_MODEL_BY_FAMILY.claudeSonnet}`, variant: "medium" },
|
|
11628
11685
|
description: "Tasks that don't fit other categories, low effort required",
|
|
11629
11686
|
callerGuidance: UNSPECIFIED_LOW_CATEGORY_CALLER_GUIDANCE,
|
|
11630
11687
|
promptAppend: UNSPECIFIED_LOW_CATEGORY_PROMPT_APPEND
|
|
11631
11688
|
},
|
|
11632
11689
|
{
|
|
11633
11690
|
name: "unspecified-high",
|
|
11634
|
-
config: { model:
|
|
11691
|
+
config: { model: `anthropic/${LATEST_MODEL_BY_FAMILY.claudeOpus}`, variant: "medium" },
|
|
11635
11692
|
description: "Tasks that don't fit other categories, high effort required",
|
|
11636
11693
|
callerGuidance: UNSPECIFIED_HIGH_CATEGORY_CALLER_GUIDANCE,
|
|
11637
11694
|
promptAppend: UNSPECIFIED_HIGH_CATEGORY_PROMPT_APPEND,
|
|
@@ -11680,7 +11737,7 @@ var init_migration2 = __esm(() => {
|
|
|
11680
11737
|
|
|
11681
11738
|
// packages/omo-opencode/src/shared/opencode-config-dir.ts
|
|
11682
11739
|
import { existsSync as existsSync5, realpathSync as realpathSync2 } from "node:fs";
|
|
11683
|
-
import { homedir as
|
|
11740
|
+
import { homedir as homedir5 } from "node:os";
|
|
11684
11741
|
import { join as join6, posix, resolve, win32 } from "node:path";
|
|
11685
11742
|
function isDevBuild(version) {
|
|
11686
11743
|
if (!version)
|
|
@@ -11691,14 +11748,14 @@ function getTauriConfigDir(identifier) {
|
|
|
11691
11748
|
const platform = process.platform;
|
|
11692
11749
|
switch (platform) {
|
|
11693
11750
|
case "darwin":
|
|
11694
|
-
return join6(
|
|
11751
|
+
return join6(homedir5(), "Library", "Application Support", identifier);
|
|
11695
11752
|
case "win32": {
|
|
11696
|
-
const appData = process.env.APPDATA || join6(
|
|
11753
|
+
const appData = process.env.APPDATA || join6(homedir5(), "AppData", "Roaming");
|
|
11697
11754
|
return win32.join(appData, identifier);
|
|
11698
11755
|
}
|
|
11699
11756
|
case "linux":
|
|
11700
11757
|
default: {
|
|
11701
|
-
const xdgConfig = process.env.XDG_CONFIG_HOME || join6(
|
|
11758
|
+
const xdgConfig = process.env.XDG_CONFIG_HOME || join6(homedir5(), ".config");
|
|
11702
11759
|
return join6(xdgConfig, identifier);
|
|
11703
11760
|
}
|
|
11704
11761
|
}
|
|
@@ -11742,7 +11799,7 @@ function getWslLinuxHomeDir(windowsConfigRoot) {
|
|
|
11742
11799
|
function getCliDefaultConfigDir() {
|
|
11743
11800
|
const envXdgConfig = process.env.XDG_CONFIG_HOME?.trim();
|
|
11744
11801
|
const shouldIgnoreWindowsXdg = envXdgConfig !== undefined && envXdgConfig.length > 0 && isWslEnvironment() && isWindowsUserConfigRoot(envXdgConfig);
|
|
11745
|
-
const xdgConfig = shouldIgnoreWindowsXdg ? posix.join(getWslLinuxHomeDir(envXdgConfig) ?? "/home", ".config") : envXdgConfig || join6(
|
|
11802
|
+
const xdgConfig = shouldIgnoreWindowsXdg ? posix.join(getWslLinuxHomeDir(envXdgConfig) ?? "/home", ".config") : envXdgConfig || join6(homedir5(), ".config");
|
|
11746
11803
|
const configDir = isWslEnvironment() ? posix.join(xdgConfig, "opencode") : join6(xdgConfig, "opencode");
|
|
11747
11804
|
return resolveConfigPath(configDir);
|
|
11748
11805
|
}
|
|
@@ -70389,10 +70446,11 @@ var ANTHROPIC_PREFIX = "anthropic/", CLAUDE_CODE_ALIAS_MAP;
|
|
|
70389
70446
|
var init_claude_model_mapper = __esm(() => {
|
|
70390
70447
|
init_model_format_normalizer();
|
|
70391
70448
|
init_model_normalization2();
|
|
70449
|
+
init_latest_models();
|
|
70392
70450
|
CLAUDE_CODE_ALIAS_MAP = new Map([
|
|
70393
|
-
["sonnet", `${ANTHROPIC_PREFIX}
|
|
70394
|
-
["opus", `${ANTHROPIC_PREFIX}
|
|
70395
|
-
["haiku", `${ANTHROPIC_PREFIX}
|
|
70451
|
+
["sonnet", `${ANTHROPIC_PREFIX}${LATEST_MODEL_BY_FAMILY.claudeSonnet}`],
|
|
70452
|
+
["opus", `${ANTHROPIC_PREFIX}${LATEST_MODEL_BY_FAMILY.claudeOpus}`],
|
|
70453
|
+
["haiku", `${ANTHROPIC_PREFIX}${LATEST_MODEL_BY_FAMILY.claudeHaiku}`]
|
|
70396
70454
|
]);
|
|
70397
70455
|
});
|
|
70398
70456
|
|
|
@@ -76875,7 +76933,7 @@ var init_git_master = __esm(() => {
|
|
|
76875
76933
|
OmoGitMasterSettingsLayerSchema = object(OmoGitMasterSettingsShape).partial().strict();
|
|
76876
76934
|
OmoGitMasterSettingsSchema = OmoGitMasterSettingsLayerSchema.extend({
|
|
76877
76935
|
commit_footer: union([boolean2(), string2()]).default(false),
|
|
76878
|
-
include_co_authored_by: boolean2().default(
|
|
76936
|
+
include_co_authored_by: boolean2().default(true),
|
|
76879
76937
|
git_env_prefix: GitEnvPrefixSchema.default("GIT_MASTER=1")
|
|
76880
76938
|
}).strict();
|
|
76881
76939
|
});
|
|
@@ -76909,7 +76967,7 @@ var init_memory_agreements = __esm(() => {
|
|
|
76909
76967
|
});
|
|
76910
76968
|
|
|
76911
76969
|
// packages/omo-config-core/src/schema/memory.ts
|
|
76912
|
-
var OmoMemoryReflectionTriggerSchema, OmoMemoryReflectionSchema, OmoMemorySyncSchema, OmoMemorySearchSchema, OmoMemoryRecallEventCapsSchema, OmoMemoryRecallSchema, OmoMemoryNudgeSchema, OmoMemoryFactsSchema, OmoMemoryDreamSchema, OmoMemoryPeopleSchema, OmoMemorySoulSchema, OmoMemoryWriteNoticeSchema, OmoMemoryReflectionTriggerLayerSchema, OmoMemoryReflectionLayerSchema, OmoMemorySyncLayerSchema, OmoMemorySearchLayerSchema, OmoMemoryRecallEventCapsLayerSchema, OmoMemoryRecallLayerSchema, OmoMemoryNudgeLayerSchema, OmoMemoryFactsLayerSchema, OmoMemoryDreamLayerSchema, OmoMemoryPeopleLayerSchema, OmoMemorySoulLayerSchema, OmoMemoryWriteNoticeLayerSchema, OmoMemoryProjectionSchema, OmoMemoryProjectionLayerSchema, OmoMemoryAgentOverridesSchema, OmoMemoryAutoIdentitySchema, OmoMemorySettingsSchema, OmoMemorySettingsLayerSchema;
|
|
76970
|
+
var OmoMemoryReflectionTriggerSchema, OmoMemoryReflectionSchema, OmoMemorySyncSchema, OmoMemorySearchSchema, OmoMemoryRecallEventCapsSchema, OmoMemoryRecallSchema, OmoMemoryProjectScopeSchema, OmoMemoryProjectScopeLayerSchema, OmoMemoryNudgeSchema, OmoMemoryFactsSchema, OmoMemoryDreamSchema, OmoMemoryPeopleSchema, OmoMemorySoulSchema, OmoMemoryWriteNoticeSchema, OmoMemoryReflectionTriggerLayerSchema, OmoMemoryReflectionLayerSchema, OmoMemorySyncLayerSchema, OmoMemorySearchLayerSchema, OmoMemoryRecallEventCapsLayerSchema, OmoMemoryRecallLayerSchema, OmoMemoryNudgeLayerSchema, OmoMemoryFactsLayerSchema, OmoMemoryDreamLayerSchema, OmoMemoryPeopleLayerSchema, OmoMemorySoulLayerSchema, OmoMemoryWriteNoticeLayerSchema, OmoMemoryProjectionSchema, OmoMemoryProjectionLayerSchema, OmoMemoryAgentOverridesSchema, OmoMemoryAutoIdentitySchema, OmoMemorySettingsSchema, OmoMemorySettingsLayerSchema;
|
|
76913
76971
|
var init_memory = __esm(() => {
|
|
76914
76972
|
init_zod();
|
|
76915
76973
|
init_memory_agreements();
|
|
@@ -76924,6 +76982,7 @@ var init_memory = __esm(() => {
|
|
|
76924
76982
|
merge: _enum(["auto", "integration"]).default("auto"),
|
|
76925
76983
|
category: string2().min(1).default("quick"),
|
|
76926
76984
|
timeout_minutes: number2().int().positive().default(15),
|
|
76985
|
+
max_concurrent_runs: number2().int().positive().default(1),
|
|
76927
76986
|
sandbox: _enum(["auto", "required", "off"]).default("auto")
|
|
76928
76987
|
}).strict();
|
|
76929
76988
|
OmoMemorySyncSchema = object({
|
|
@@ -76949,6 +77008,14 @@ var init_memory = __esm(() => {
|
|
|
76949
77008
|
tool_budget: number2().int().positive().default(8),
|
|
76950
77009
|
query_expansion: boolean2().default(false)
|
|
76951
77010
|
}).strict();
|
|
77011
|
+
OmoMemoryProjectScopeSchema = object({
|
|
77012
|
+
nudge: boolean2().default(true),
|
|
77013
|
+
recall: boolean2().default(true)
|
|
77014
|
+
}).strict();
|
|
77015
|
+
OmoMemoryProjectScopeLayerSchema = object({
|
|
77016
|
+
nudge: boolean2().optional(),
|
|
77017
|
+
recall: boolean2().optional()
|
|
77018
|
+
}).strict();
|
|
76952
77019
|
OmoMemoryNudgeSchema = object({
|
|
76953
77020
|
enabled: boolean2().default(true),
|
|
76954
77021
|
every_user_turns: number2().int().min(1).default(10)
|
|
@@ -76987,6 +77054,7 @@ var init_memory = __esm(() => {
|
|
|
76987
77054
|
merge: _enum(["auto", "integration"]).optional(),
|
|
76988
77055
|
category: string2().min(1).optional(),
|
|
76989
77056
|
timeout_minutes: number2().int().positive().optional(),
|
|
77057
|
+
max_concurrent_runs: number2().int().positive().optional(),
|
|
76990
77058
|
sandbox: _enum(["auto", "required", "off"]).optional()
|
|
76991
77059
|
}).strict();
|
|
76992
77060
|
OmoMemorySyncLayerSchema = object({
|
|
@@ -77051,7 +77119,7 @@ var init_memory = __esm(() => {
|
|
|
77051
77119
|
OmoMemoryAgentOverridesSchema = object({
|
|
77052
77120
|
enabled: boolean2().optional(),
|
|
77053
77121
|
agent: string2().min(1).optional(),
|
|
77054
|
-
reflection: OmoMemoryReflectionLayerSchema.optional(),
|
|
77122
|
+
reflection: OmoMemoryReflectionLayerSchema.omit({ max_concurrent_runs: true }).optional(),
|
|
77055
77123
|
nudge: OmoMemoryNudgeLayerSchema.optional(),
|
|
77056
77124
|
facts: OmoMemoryFactsLayerSchema.optional(),
|
|
77057
77125
|
dream: OmoMemoryDreamLayerSchema.optional(),
|
|
@@ -77076,6 +77144,7 @@ var init_memory = __esm(() => {
|
|
|
77076
77144
|
merge: "auto",
|
|
77077
77145
|
category: "quick",
|
|
77078
77146
|
timeout_minutes: 15,
|
|
77147
|
+
max_concurrent_runs: 1,
|
|
77079
77148
|
sandbox: "auto"
|
|
77080
77149
|
}),
|
|
77081
77150
|
nudge: OmoMemoryNudgeSchema.default({ enabled: true, every_user_turns: 10 }),
|
|
@@ -77104,6 +77173,7 @@ var init_memory = __esm(() => {
|
|
|
77104
77173
|
tool_budget: 8,
|
|
77105
77174
|
query_expansion: false
|
|
77106
77175
|
}),
|
|
77176
|
+
project_scope: OmoMemoryProjectScopeSchema.default({ nudge: true, recall: true }),
|
|
77107
77177
|
projection: OmoMemoryProjectionSchema.default({ max_entries_per_directory: 40, max_bytes: 24576 }),
|
|
77108
77178
|
compile_warn_tokens: number2().int().positive().default(30000),
|
|
77109
77179
|
agents: record(string2(), OmoMemoryAgentOverridesSchema).default({})
|
|
@@ -77123,6 +77193,7 @@ var init_memory = __esm(() => {
|
|
|
77123
77193
|
sync: OmoMemorySyncLayerSchema.optional(),
|
|
77124
77194
|
search: OmoMemorySearchLayerSchema.optional(),
|
|
77125
77195
|
recall: OmoMemoryRecallLayerSchema.optional(),
|
|
77196
|
+
project_scope: OmoMemoryProjectScopeLayerSchema.optional(),
|
|
77126
77197
|
projection: OmoMemoryProjectionLayerSchema.optional(),
|
|
77127
77198
|
compile_warn_tokens: number2().int().positive().optional(),
|
|
77128
77199
|
agents: record(string2(), OmoMemoryAgentOverridesSchema).optional()
|
|
@@ -77420,7 +77491,8 @@ var OmoTelemetrySettingsShape, OmoTelemetrySettingsLayerSchema, OmoTelemetrySett
|
|
|
77420
77491
|
var init_telemetry = __esm(() => {
|
|
77421
77492
|
init_zod();
|
|
77422
77493
|
OmoTelemetrySettingsShape = {
|
|
77423
|
-
enabled: boolean2()
|
|
77494
|
+
enabled: boolean2(),
|
|
77495
|
+
rawTurnSampleRate: number2().min(0).max(1)
|
|
77424
77496
|
};
|
|
77425
77497
|
OmoTelemetrySettingsLayerSchema = object(OmoTelemetrySettingsShape).partial().strict();
|
|
77426
77498
|
OmoTelemetrySettingsSchema = OmoTelemetrySettingsLayerSchema.extend({
|
|
@@ -77447,11 +77519,17 @@ var init_format_on_mutation = __esm(() => {
|
|
|
77447
77519
|
}).strict();
|
|
77448
77520
|
});
|
|
77449
77521
|
|
|
77450
|
-
// packages/omo-config-core/src/schema/
|
|
77451
|
-
var
|
|
77452
|
-
var
|
|
77522
|
+
// packages/omo-config-core/src/schema/provenance.ts
|
|
77523
|
+
var OmoProvenanceSettingsSchema;
|
|
77524
|
+
var init_provenance = __esm(() => {
|
|
77453
77525
|
init_zod();
|
|
77454
|
-
|
|
77526
|
+
OmoProvenanceSettingsSchema = object({
|
|
77527
|
+
workspaces: array(object({
|
|
77528
|
+
name: string2().trim().min(1).regex(/\S/),
|
|
77529
|
+
git_owners: array(string2().trim().min(1).regex(/\S/)).optional(),
|
|
77530
|
+
paths: array(string2().trim().min(1).regex(/\S/)).optional()
|
|
77531
|
+
}).strict()).optional()
|
|
77532
|
+
}).strict();
|
|
77455
77533
|
});
|
|
77456
77534
|
|
|
77457
77535
|
// packages/omo-config-core/src/schema/config.ts
|
|
@@ -77470,13 +77548,13 @@ var init_config = __esm(() => {
|
|
|
77470
77548
|
init_team();
|
|
77471
77549
|
init_telemetry();
|
|
77472
77550
|
init_format_on_mutation();
|
|
77473
|
-
|
|
77551
|
+
init_provenance();
|
|
77474
77552
|
OmoOpenCodeHarnessConfigSchema = record(string2(), unknown());
|
|
77475
77553
|
OmoDisabledSkillsSchema = array(string2());
|
|
77476
77554
|
OmoExcludedModelsSchema = array(string2());
|
|
77477
77555
|
OmoTypedHarnessConfigSchema = object({
|
|
77556
|
+
provenance: OmoProvenanceSettingsSchema.optional(),
|
|
77478
77557
|
formatOnMutation: OmoFormatOnMutationLayerSchema.optional(),
|
|
77479
|
-
gateway: OmoGatewaySectionSchema.optional(),
|
|
77480
77558
|
categories: OmoCategoriesConfigSchema.optional(),
|
|
77481
77559
|
agents: OmoAgentsConfigSchema.optional(),
|
|
77482
77560
|
git_master: OmoGitMasterSettingsLayerSchema.optional(),
|
|
@@ -77493,6 +77571,7 @@ var init_config = __esm(() => {
|
|
|
77493
77571
|
exclude_models: OmoExcludedModelsSchema.optional()
|
|
77494
77572
|
}).strict();
|
|
77495
77573
|
OmoConfigProfileSchema = object({
|
|
77574
|
+
provenance: OmoProvenanceSettingsSchema.optional(),
|
|
77496
77575
|
formatOnMutation: OmoFormatOnMutationLayerSchema.optional(),
|
|
77497
77576
|
categories: OmoCategoriesConfigSchema.optional(),
|
|
77498
77577
|
agents: OmoAgentsConfigSchema.optional(),
|
|
@@ -77514,8 +77593,8 @@ var init_config = __esm(() => {
|
|
|
77514
77593
|
"[codex]": OmoTypedHarnessConfigSchema.optional()
|
|
77515
77594
|
}).strict();
|
|
77516
77595
|
OmoConfigSchema = object({
|
|
77596
|
+
provenance: OmoProvenanceSettingsSchema.optional(),
|
|
77517
77597
|
formatOnMutation: OmoFormatOnMutationSchema.optional(),
|
|
77518
|
-
gateway: OmoGatewaySectionSchema.optional(),
|
|
77519
77598
|
$schema: string2().optional(),
|
|
77520
77599
|
categories: OmoCategoriesConfigSchema.optional(),
|
|
77521
77600
|
agents: OmoAgentsConfigSchema.optional(),
|
|
@@ -77540,8 +77619,8 @@ var init_config = __esm(() => {
|
|
|
77540
77619
|
legacy_migrations: record(string2(), unknown()).optional()
|
|
77541
77620
|
}).strict();
|
|
77542
77621
|
OmoConfigLayerSchema = object({
|
|
77622
|
+
provenance: OmoProvenanceSettingsSchema.optional(),
|
|
77543
77623
|
formatOnMutation: OmoFormatOnMutationLayerSchema.optional(),
|
|
77544
|
-
gateway: OmoGatewaySectionSchema.optional(),
|
|
77545
77624
|
$schema: string2().optional(),
|
|
77546
77625
|
categories: OmoCategoriesConfigSchema.optional(),
|
|
77547
77626
|
agents: OmoAgentsConfigSchema.optional(),
|
|
@@ -77690,7 +77769,6 @@ var init_schema = __esm(() => {
|
|
|
77690
77769
|
init_config();
|
|
77691
77770
|
init_fallback_models();
|
|
77692
77771
|
init_format_on_mutation();
|
|
77693
|
-
init_gateway();
|
|
77694
77772
|
init_git_master();
|
|
77695
77773
|
init_harness();
|
|
77696
77774
|
init_legacy_category_names();
|
|
@@ -77699,6 +77777,7 @@ var init_schema = __esm(() => {
|
|
|
77699
77777
|
init_model_catalog();
|
|
77700
77778
|
init_model_profile();
|
|
77701
77779
|
init_model_ref();
|
|
77780
|
+
init_provenance();
|
|
77702
77781
|
init_side_panel();
|
|
77703
77782
|
init_task();
|
|
77704
77783
|
init_team();
|
|
@@ -77964,6 +78043,7 @@ function pruneInvalidConfigPaths(config, issues, validate, maxPasses = MAX_PRUNE
|
|
|
77964
78043
|
var MAX_PRUNE_PASSES = 32;
|
|
77965
78044
|
|
|
77966
78045
|
// packages/omo-config-core/src/loader/layer-validation.ts
|
|
78046
|
+
import { createHash as createHash2 } from "node:crypto";
|
|
77967
78047
|
function validationDiagnostic(path, issues) {
|
|
77968
78048
|
const issuePaths = issues.map((issue) => issue.path.map((segment) => String(segment)).join("."));
|
|
77969
78049
|
return {
|
|
@@ -77987,6 +78067,9 @@ function unrecognizedKeyIssues(issues) {
|
|
|
77987
78067
|
function isRecord11(value) {
|
|
77988
78068
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
77989
78069
|
}
|
|
78070
|
+
function isRetiredSection(key) {
|
|
78071
|
+
return RETIRED_SECTION_DIGESTS.has(createHash2("sha256").update(key.toLowerCase()).digest("hex"));
|
|
78072
|
+
}
|
|
77990
78073
|
function sanitizeUnsafeKeys(value, path = []) {
|
|
77991
78074
|
if (Array.isArray(value)) {
|
|
77992
78075
|
const issues = [];
|
|
@@ -78005,6 +78088,9 @@ function sanitizeUnsafeKeys(value, path = []) {
|
|
|
78005
78088
|
}
|
|
78006
78089
|
const sanitized = {};
|
|
78007
78090
|
for (const [key, entry] of Object.entries(value)) {
|
|
78091
|
+
const isConfigContainer = path.length === 0 || path.length === 1 && HARNESS_BLOCKS.has(path[0] ?? "") || path.length === 2 && path[0] === "profiles" || path.length === 3 && path[0] === "profiles" && HARNESS_BLOCKS.has(path[2] ?? "");
|
|
78092
|
+
if (isConfigContainer && isRetiredSection(key))
|
|
78093
|
+
continue;
|
|
78008
78094
|
if (isUnsafeObjectKey2(key)) {
|
|
78009
78095
|
issues.push({ keys: [key], path });
|
|
78010
78096
|
continue;
|
|
@@ -78091,13 +78177,18 @@ function validateConfigLayer(path, data) {
|
|
|
78091
78177
|
return rejected;
|
|
78092
78178
|
return { loaded: true, diagnostics: [...diagnostics, ...invalidValueDiagnostics(path, pruned.dropped)], value: pruned.config };
|
|
78093
78179
|
}
|
|
78094
|
-
var validateLayerRecord = (record) => {
|
|
78180
|
+
var RETIRED_SECTION_DIGESTS, HARNESS_BLOCKS, validateLayerRecord = (record) => {
|
|
78095
78181
|
const parsed = OmoConfigLayerSchema.safeParse(record);
|
|
78096
78182
|
return parsed.success ? { success: true } : { success: false, issues: parsed.error.issues };
|
|
78097
78183
|
};
|
|
78098
78184
|
var init_layer_validation = __esm(() => {
|
|
78099
78185
|
init_schema();
|
|
78100
78186
|
init_merge();
|
|
78187
|
+
RETIRED_SECTION_DIGESTS = new Set([
|
|
78188
|
+
"447f75a8ebdbdb79a57f0b8cebbfba183820cf54a8119ac01449b30499e5ef0e",
|
|
78189
|
+
"4ea5ee68fea05586106890ded5733820bb77d919cda27bc4b8139b7cd33b8889"
|
|
78190
|
+
]);
|
|
78191
|
+
HARNESS_BLOCKS = new Set(["[opencode]", "[native]", "[senpi]", "[codex]"]);
|
|
78101
78192
|
});
|
|
78102
78193
|
|
|
78103
78194
|
// packages/omo-config-core/src/internal/posix-path.ts
|
|
@@ -80498,13 +80589,14 @@ function applyOpenAiOnlyModelCatalog(config) {
|
|
|
80498
80589
|
}
|
|
80499
80590
|
var OPENAI_ONLY_AGENT_OVERRIDES, OPENAI_ONLY_CATEGORY_OVERRIDES;
|
|
80500
80591
|
var init_openai_only_model_catalog = __esm(() => {
|
|
80592
|
+
init_latest_models();
|
|
80501
80593
|
OPENAI_ONLY_AGENT_OVERRIDES = {
|
|
80502
|
-
explore: { model:
|
|
80503
|
-
librarian: { model:
|
|
80594
|
+
explore: { model: `openai/${LATEST_MODEL_BY_FAMILY.gptLunaFast}`, variant: "low" },
|
|
80595
|
+
librarian: { model: `openai/${LATEST_MODEL_BY_FAMILY.gptLunaFast}`, variant: "low" }
|
|
80504
80596
|
};
|
|
80505
80597
|
OPENAI_ONLY_CATEGORY_OVERRIDES = {
|
|
80506
80598
|
artistry: { model: "openai/gpt-5.6-sol", variant: "xhigh" },
|
|
80507
|
-
quick: { model:
|
|
80599
|
+
quick: { model: `openai/${LATEST_MODEL_BY_FAMILY.gptLunaFast}` },
|
|
80508
80600
|
"visual-engineering": { model: "openai/gpt-5.6-sol", variant: "high" }
|
|
80509
80601
|
};
|
|
80510
80602
|
});
|
|
@@ -80713,9 +80805,9 @@ function generateModelConfig(config) {
|
|
|
80713
80805
|
if (role === "explore") {
|
|
80714
80806
|
let agentConfig;
|
|
80715
80807
|
if (avail.native.openai) {
|
|
80716
|
-
agentConfig = { model:
|
|
80808
|
+
agentConfig = { model: `openai/${LATEST_MODEL_BY_FAMILY.gptLunaFast}`, variant: "low" };
|
|
80717
80809
|
} else if (avail.native.claude) {
|
|
80718
|
-
agentConfig = { model:
|
|
80810
|
+
agentConfig = { model: `anthropic/${LATEST_MODEL_BY_FAMILY.claudeHaiku}`, variant: "medium" };
|
|
80719
80811
|
} else if (avail.opencodeZen) {
|
|
80720
80812
|
agentConfig = { model: "opencode/gpt-5-nano" };
|
|
80721
80813
|
} else if (avail.opencodeGo) {
|
|
@@ -80798,6 +80890,7 @@ var init_model_fallback = __esm(() => {
|
|
|
80798
80890
|
init_fallback_chain_resolution();
|
|
80799
80891
|
init_provider_model_id_transform2();
|
|
80800
80892
|
init_fallback_lane_policy();
|
|
80893
|
+
init_latest_models();
|
|
80801
80894
|
});
|
|
80802
80895
|
|
|
80803
80896
|
// packages/omo-opencode/src/cli/config-manager/generate-omo-config.ts
|
|
@@ -82696,13 +82789,13 @@ var init_event_id = __esm(() => {
|
|
|
82696
82789
|
});
|
|
82697
82790
|
|
|
82698
82791
|
// packages/telemetry-core/src/machine-id.ts
|
|
82699
|
-
import { createHash as
|
|
82792
|
+
import { createHash as createHash6 } from "node:crypto";
|
|
82700
82793
|
import os4 from "node:os";
|
|
82701
82794
|
function getDefaultTelemetryOsProvider() {
|
|
82702
82795
|
return os4;
|
|
82703
82796
|
}
|
|
82704
82797
|
function getTelemetryDistinctId(machineIdPrefix, osProvider = getDefaultTelemetryOsProvider()) {
|
|
82705
|
-
return
|
|
82798
|
+
return createHash6("sha256").update(`${machineIdPrefix}${osProvider.hostname()}`).digest("hex");
|
|
82706
82799
|
}
|
|
82707
82800
|
var init_machine_id = () => {};
|
|
82708
82801
|
|
|
@@ -92225,20 +92318,98 @@ var init_index_node = __esm(() => {
|
|
|
92225
92318
|
};
|
|
92226
92319
|
});
|
|
92227
92320
|
|
|
92321
|
+
// packages/telemetry-core/src/telemetry-delivery-error.ts
|
|
92322
|
+
var PERMANENT_STATUSES, TelemetryDeliveryError;
|
|
92323
|
+
var init_telemetry_delivery_error = __esm(() => {
|
|
92324
|
+
PERMANENT_STATUSES = new Set([400, 413]);
|
|
92325
|
+
TelemetryDeliveryError = class TelemetryDeliveryError extends Error {
|
|
92326
|
+
permanent;
|
|
92327
|
+
status;
|
|
92328
|
+
constructor(status, cause) {
|
|
92329
|
+
super(status === undefined ? "telemetry event was not delivered (no response)" : `telemetry event was rejected with HTTP ${status}`, { cause });
|
|
92330
|
+
this.name = "TelemetryDeliveryError";
|
|
92331
|
+
this.status = status;
|
|
92332
|
+
this.permanent = status !== undefined && PERMANENT_STATUSES.has(status);
|
|
92333
|
+
}
|
|
92334
|
+
};
|
|
92335
|
+
});
|
|
92336
|
+
|
|
92337
|
+
// packages/telemetry-core/src/posthog-immediate-send.ts
|
|
92338
|
+
function createImmediateSender(apiKey, options, PostHogClient) {
|
|
92339
|
+
const baseFetch = options.fetch ?? ((url, init) => fetch(url, init));
|
|
92340
|
+
let current;
|
|
92341
|
+
const trackedFetch = async (url, init) => {
|
|
92342
|
+
const attempt = current;
|
|
92343
|
+
try {
|
|
92344
|
+
const response = await baseFetch(url, init);
|
|
92345
|
+
if (attempt !== undefined)
|
|
92346
|
+
attempt.status = response.status;
|
|
92347
|
+
return response;
|
|
92348
|
+
} catch (error) {
|
|
92349
|
+
if (attempt !== undefined)
|
|
92350
|
+
attempt.error = error;
|
|
92351
|
+
throw error;
|
|
92352
|
+
}
|
|
92353
|
+
};
|
|
92354
|
+
const client = new PostHogClient(apiKey, { ...options, fetch: trackedFetch, fetchRetryCount: 0 });
|
|
92355
|
+
let queue = Promise.resolve();
|
|
92356
|
+
const sendOne = async (message) => {
|
|
92357
|
+
const attempt = {};
|
|
92358
|
+
current = attempt;
|
|
92359
|
+
try {
|
|
92360
|
+
await client.captureImmediate(message);
|
|
92361
|
+
} finally {
|
|
92362
|
+
current = undefined;
|
|
92363
|
+
}
|
|
92364
|
+
const { status } = attempt;
|
|
92365
|
+
if (status === undefined || status < 200 || status >= 300)
|
|
92366
|
+
throw new TelemetryDeliveryError(status, attempt.error);
|
|
92367
|
+
};
|
|
92368
|
+
return {
|
|
92369
|
+
send(message) {
|
|
92370
|
+
const result = queue.then(() => sendOne(message));
|
|
92371
|
+
queue = result.catch(() => {
|
|
92372
|
+
return;
|
|
92373
|
+
});
|
|
92374
|
+
return result;
|
|
92375
|
+
},
|
|
92376
|
+
async shutdown() {
|
|
92377
|
+
await client.shutdown();
|
|
92378
|
+
}
|
|
92379
|
+
};
|
|
92380
|
+
}
|
|
92381
|
+
var init_posthog_immediate_send = __esm(() => {
|
|
92382
|
+
init_telemetry_delivery_error();
|
|
92383
|
+
});
|
|
92384
|
+
|
|
92228
92385
|
// packages/telemetry-core/src/posthog-transport.ts
|
|
92229
92386
|
class PostHogTelemetryTransport {
|
|
92230
92387
|
#client;
|
|
92388
|
+
#apiKey;
|
|
92389
|
+
#options;
|
|
92390
|
+
#immediate;
|
|
92231
92391
|
constructor(apiKey, options) {
|
|
92232
92392
|
this.#client = new PostHog(apiKey, options);
|
|
92393
|
+
this.#apiKey = apiKey;
|
|
92394
|
+
this.#options = options;
|
|
92233
92395
|
}
|
|
92234
92396
|
capture(message) {
|
|
92235
92397
|
this.#client.capture(message);
|
|
92236
92398
|
}
|
|
92399
|
+
captureImmediate(message) {
|
|
92400
|
+
this.#immediate ??= Promise.resolve().then(() => (init_posthog_immediate_send(), {})).then(({}) => createImmediateSender(this.#apiKey, this.#options, PostHog)).catch((error) => {
|
|
92401
|
+
this.#immediate = undefined;
|
|
92402
|
+
throw error;
|
|
92403
|
+
});
|
|
92404
|
+
return this.#immediate.then((sender) => sender.send(message));
|
|
92405
|
+
}
|
|
92237
92406
|
async flush() {
|
|
92238
92407
|
await this.#client.flush();
|
|
92239
92408
|
}
|
|
92240
92409
|
async shutdown() {
|
|
92241
|
-
await this.#client.shutdown()
|
|
92410
|
+
await Promise.all([this.#client.shutdown(), this.#immediate?.then((sender) => sender.shutdown(), () => {
|
|
92411
|
+
return;
|
|
92412
|
+
})]);
|
|
92242
92413
|
}
|
|
92243
92414
|
}
|
|
92244
92415
|
function createDefaultPostHogTransport(apiKey, options) {
|
|
@@ -92264,6 +92435,12 @@ var init_posthog_client = __esm(() => {
|
|
|
92264
92435
|
// packages/telemetry-core/src/record-daily-active.ts
|
|
92265
92436
|
var init_record_daily_active = () => {};
|
|
92266
92437
|
|
|
92438
|
+
// packages/telemetry-core/src/turn-trace-bridge.ts
|
|
92439
|
+
var REGISTRY;
|
|
92440
|
+
var init_turn_trace_bridge = __esm(() => {
|
|
92441
|
+
REGISTRY = Symbol.for("omo.telemetry.turn-traceparent.v1");
|
|
92442
|
+
});
|
|
92443
|
+
|
|
92267
92444
|
// packages/telemetry-core/src/index.ts
|
|
92268
92445
|
var init_src5 = __esm(() => {
|
|
92269
92446
|
init_activity_state();
|
|
@@ -92275,6 +92452,7 @@ var init_src5 = __esm(() => {
|
|
|
92275
92452
|
init_machine_id();
|
|
92276
92453
|
init_posthog_client();
|
|
92277
92454
|
init_record_daily_active();
|
|
92455
|
+
init_turn_trace_bridge();
|
|
92278
92456
|
});
|
|
92279
92457
|
|
|
92280
92458
|
// packages/omo-codex/package.json
|
|
@@ -92282,7 +92460,7 @@ var package_default2;
|
|
|
92282
92460
|
var init_package2 = __esm(() => {
|
|
92283
92461
|
package_default2 = {
|
|
92284
92462
|
name: "@oh-my-opencode/omo-codex",
|
|
92285
|
-
version: "5.1.
|
|
92463
|
+
version: "5.1.46",
|
|
92286
92464
|
type: "module",
|
|
92287
92465
|
private: true,
|
|
92288
92466
|
description: "Codex harness adapter for oh-my-openagent. Vendored Codex plugin namespace (omo) + TypeScript installer + telemetry.",
|
|
@@ -92313,6 +92491,7 @@ var init_package2 = __esm(() => {
|
|
|
92313
92491
|
"sync:skills": "node plugin/scripts/sync-skills.mjs"
|
|
92314
92492
|
},
|
|
92315
92493
|
dependencies: {
|
|
92494
|
+
"@oh-my-opencode/model-core": "workspace:*",
|
|
92316
92495
|
"@oh-my-opencode/shared-skills": "workspace:*",
|
|
92317
92496
|
"@oh-my-opencode/utils": "workspace:*"
|
|
92318
92497
|
},
|
|
@@ -93253,20 +93432,20 @@ var init_update_toasts = __esm(() => {
|
|
|
93253
93432
|
});
|
|
93254
93433
|
|
|
93255
93434
|
// packages/omo-opencode/src/hooks/auto-update-checker/hook/background-update-check.ts
|
|
93256
|
-
import { existsSync as
|
|
93257
|
-
import { dirname as
|
|
93435
|
+
import { existsSync as existsSync50 } from "node:fs";
|
|
93436
|
+
import { dirname as dirname35, join as join84 } from "node:path";
|
|
93258
93437
|
import { fileURLToPath as fileURLToPath5 } from "node:url";
|
|
93259
93438
|
function defaultGetModuleHostingWorkspace() {
|
|
93260
93439
|
try {
|
|
93261
|
-
const currentDir =
|
|
93440
|
+
const currentDir = dirname35(fileURLToPath5(import.meta.url));
|
|
93262
93441
|
const pkgJsonPath = findPackageJsonUp(currentDir);
|
|
93263
93442
|
if (!pkgJsonPath)
|
|
93264
93443
|
return null;
|
|
93265
|
-
const pkgDir =
|
|
93266
|
-
const nodeModulesDir =
|
|
93444
|
+
const pkgDir = dirname35(pkgJsonPath);
|
|
93445
|
+
const nodeModulesDir = dirname35(pkgDir);
|
|
93267
93446
|
if (nodeModulesDir.split(/[\\/]/).pop() !== "node_modules")
|
|
93268
93447
|
return null;
|
|
93269
|
-
return
|
|
93448
|
+
return dirname35(nodeModulesDir);
|
|
93270
93449
|
} catch (error) {
|
|
93271
93450
|
if (error instanceof Error) {
|
|
93272
93451
|
return null;
|
|
@@ -93413,8 +93592,8 @@ var init_background_update_check = __esm(() => {
|
|
|
93413
93592
|
init_semver_compare();
|
|
93414
93593
|
init_update_toasts();
|
|
93415
93594
|
defaultDeps4 = {
|
|
93416
|
-
existsSync:
|
|
93417
|
-
join:
|
|
93595
|
+
existsSync: existsSync50,
|
|
93596
|
+
join: join84,
|
|
93418
93597
|
runBunInstallWithDetails,
|
|
93419
93598
|
log: log2,
|
|
93420
93599
|
getOpenCodeCacheDir,
|
|
@@ -93831,7 +94010,7 @@ function getUnsupportedOpenCodeVersionMessage(openCodeVersion) {
|
|
|
93831
94010
|
// packages/omo-codex/src/install/install-codex.ts
|
|
93832
94011
|
import { join as join56, resolve as resolve13 } from "node:path";
|
|
93833
94012
|
import { existsSync as existsSync27 } from "node:fs";
|
|
93834
|
-
import { homedir as
|
|
94013
|
+
import { homedir as homedir7 } from "node:os";
|
|
93835
94014
|
|
|
93836
94015
|
// packages/omo-codex/src/install/codex-cache-bins.ts
|
|
93837
94016
|
import { chmod, lstat as lstat4, mkdir, readFile as readFile3, readdir as readdir2, readlink as readlink3, rm as rm3, stat as stat2, symlink, writeFile } from "node:fs/promises";
|
|
@@ -96290,11 +96469,12 @@ function isRootSetting(line, key) {
|
|
|
96290
96469
|
}
|
|
96291
96470
|
|
|
96292
96471
|
// packages/omo-codex/src/install/codex-model-catalog.ts
|
|
96472
|
+
init_latest_models();
|
|
96293
96473
|
import { readFile as readFile10 } from "node:fs/promises";
|
|
96294
96474
|
import { join as join36 } from "node:path";
|
|
96295
96475
|
var FALLBACK_CODEX_MODEL_CATALOG = {
|
|
96296
96476
|
current: {
|
|
96297
|
-
model:
|
|
96477
|
+
model: LATEST_MODEL_BY_FAMILY.gptAstra,
|
|
96298
96478
|
modelContextWindow: 600000,
|
|
96299
96479
|
modelReasoningEffort: "high",
|
|
96300
96480
|
planModeReasoningEffort: "xhigh"
|
|
@@ -96596,7 +96776,7 @@ function isMissingFileError(error) {
|
|
|
96596
96776
|
}
|
|
96597
96777
|
|
|
96598
96778
|
// packages/omo-codex/src/install/codex-hook-trust.ts
|
|
96599
|
-
import { createHash as
|
|
96779
|
+
import { createHash as createHash3 } from "node:crypto";
|
|
96600
96780
|
import { readFile as readFile12 } from "node:fs/promises";
|
|
96601
96781
|
import { join as join38 } from "node:path";
|
|
96602
96782
|
var EVENT_LABELS = new Map([
|
|
@@ -96688,7 +96868,7 @@ function commandHookHash(eventName, matcher, handler, command) {
|
|
|
96688
96868
|
if (typeof matcher === "string")
|
|
96689
96869
|
identity.matcher = matcher;
|
|
96690
96870
|
const canonical = JSON.stringify(canonicalJson(identity));
|
|
96691
|
-
return `sha256:${
|
|
96871
|
+
return `sha256:${createHash3("sha256").update(canonical).digest("hex")}`;
|
|
96692
96872
|
}
|
|
96693
96873
|
function canonicalJson(value) {
|
|
96694
96874
|
if (Array.isArray(value))
|
|
@@ -96867,6 +97047,7 @@ import { lstat as lstat7, readFile as readFile13, readdir as readdir6, writeFile
|
|
|
96867
97047
|
import { join as join40 } from "node:path";
|
|
96868
97048
|
|
|
96869
97049
|
// packages/omo-codex/src/install/managed-agent-reasoning-defaults.ts
|
|
97050
|
+
init_latest_models();
|
|
96870
97051
|
var MANAGED_REASONING_DEFAULT_UPGRADES = new Map([
|
|
96871
97052
|
[
|
|
96872
97053
|
"explorer",
|
|
@@ -96881,7 +97062,7 @@ var MANAGED_REASONING_DEFAULT_UPGRADES = new Map([
|
|
|
96881
97062
|
},
|
|
96882
97063
|
{
|
|
96883
97064
|
previous: { model: "gpt-5.6-luna", effort: "low" },
|
|
96884
|
-
current: { model:
|
|
97065
|
+
current: { model: LATEST_MODEL_BY_FAMILY.gptAstra, effort: "low" }
|
|
96885
97066
|
}
|
|
96886
97067
|
]
|
|
96887
97068
|
],
|
|
@@ -96898,7 +97079,7 @@ var MANAGED_REASONING_DEFAULT_UPGRADES = new Map([
|
|
|
96898
97079
|
},
|
|
96899
97080
|
{
|
|
96900
97081
|
previous: { model: "gpt-5.6-luna", effort: "low" },
|
|
96901
|
-
current: { model:
|
|
97082
|
+
current: { model: LATEST_MODEL_BY_FAMILY.gptAstra, effort: "low" }
|
|
96902
97083
|
}
|
|
96903
97084
|
]
|
|
96904
97085
|
],
|
|
@@ -96907,7 +97088,7 @@ var MANAGED_REASONING_DEFAULT_UPGRADES = new Map([
|
|
|
96907
97088
|
[
|
|
96908
97089
|
{
|
|
96909
97090
|
previous: { model: "gpt-5.6-sol", effort: "high" },
|
|
96910
|
-
current: { model:
|
|
97091
|
+
current: { model: LATEST_MODEL_BY_FAMILY.gptAstra, effort: "high" }
|
|
96911
97092
|
}
|
|
96912
97093
|
]
|
|
96913
97094
|
],
|
|
@@ -96916,7 +97097,7 @@ var MANAGED_REASONING_DEFAULT_UPGRADES = new Map([
|
|
|
96916
97097
|
[
|
|
96917
97098
|
{
|
|
96918
97099
|
previous: { model: "gpt-5.6-luna", effort: "high" },
|
|
96919
|
-
current: { model:
|
|
97100
|
+
current: { model: LATEST_MODEL_BY_FAMILY.gptAstra, effort: "high" }
|
|
96920
97101
|
}
|
|
96921
97102
|
]
|
|
96922
97103
|
],
|
|
@@ -96933,7 +97114,7 @@ var MANAGED_REASONING_DEFAULT_UPGRADES = new Map([
|
|
|
96933
97114
|
},
|
|
96934
97115
|
{
|
|
96935
97116
|
previous: { model: "gpt-5.6-terra", effort: "high" },
|
|
96936
|
-
current: { model:
|
|
97117
|
+
current: { model: LATEST_MODEL_BY_FAMILY.gptAstra, effort: "high" }
|
|
96937
97118
|
}
|
|
96938
97119
|
]
|
|
96939
97120
|
],
|
|
@@ -96950,7 +97131,7 @@ var MANAGED_REASONING_DEFAULT_UPGRADES = new Map([
|
|
|
96950
97131
|
},
|
|
96951
97132
|
{
|
|
96952
97133
|
previous: { model: "gpt-5.6-sol", effort: "high" },
|
|
96953
|
-
current: { model:
|
|
97134
|
+
current: { model: LATEST_MODEL_BY_FAMILY.gptAstra, effort: "high" }
|
|
96954
97135
|
}
|
|
96955
97136
|
]
|
|
96956
97137
|
],
|
|
@@ -96967,7 +97148,7 @@ var MANAGED_REASONING_DEFAULT_UPGRADES = new Map([
|
|
|
96967
97148
|
},
|
|
96968
97149
|
{
|
|
96969
97150
|
previous: { model: "gpt-5.6-terra", effort: "high" },
|
|
96970
|
-
current: { model:
|
|
97151
|
+
current: { model: LATEST_MODEL_BY_FAMILY.gptAstra, effort: "high" }
|
|
96971
97152
|
}
|
|
96972
97153
|
]
|
|
96973
97154
|
],
|
|
@@ -96980,7 +97161,7 @@ var MANAGED_REASONING_DEFAULT_UPGRADES = new Map([
|
|
|
96980
97161
|
},
|
|
96981
97162
|
{
|
|
96982
97163
|
previous: { model: "gpt-5.6-sol", effort: "medium" },
|
|
96983
|
-
current: { model:
|
|
97164
|
+
current: { model: LATEST_MODEL_BY_FAMILY.gptAstra, effort: "medium" }
|
|
96984
97165
|
}
|
|
96985
97166
|
]
|
|
96986
97167
|
],
|
|
@@ -96993,7 +97174,7 @@ var MANAGED_REASONING_DEFAULT_UPGRADES = new Map([
|
|
|
96993
97174
|
},
|
|
96994
97175
|
{
|
|
96995
97176
|
previous: { model: "gpt-5.6-terra", effort: "medium" },
|
|
96996
|
-
current: { model:
|
|
97177
|
+
current: { model: LATEST_MODEL_BY_FAMILY.gptAstra, effort: "medium" }
|
|
96997
97178
|
}
|
|
96998
97179
|
]
|
|
96999
97180
|
],
|
|
@@ -97006,7 +97187,7 @@ var MANAGED_REASONING_DEFAULT_UPGRADES = new Map([
|
|
|
97006
97187
|
},
|
|
97007
97188
|
{
|
|
97008
97189
|
previous: { model: "gpt-5.6-terra", effort: "high" },
|
|
97009
|
-
current: { model:
|
|
97190
|
+
current: { model: LATEST_MODEL_BY_FAMILY.gptAstra, effort: "high" }
|
|
97010
97191
|
}
|
|
97011
97192
|
]
|
|
97012
97193
|
],
|
|
@@ -97019,7 +97200,7 @@ var MANAGED_REASONING_DEFAULT_UPGRADES = new Map([
|
|
|
97019
97200
|
},
|
|
97020
97201
|
{
|
|
97021
97202
|
previous: { model: "gpt-5.6-luna", effort: "high" },
|
|
97022
|
-
current: { model:
|
|
97203
|
+
current: { model: LATEST_MODEL_BY_FAMILY.gptAstra, effort: "high" }
|
|
97023
97204
|
}
|
|
97024
97205
|
]
|
|
97025
97206
|
],
|
|
@@ -97036,7 +97217,7 @@ var MANAGED_REASONING_DEFAULT_UPGRADES = new Map([
|
|
|
97036
97217
|
},
|
|
97037
97218
|
{
|
|
97038
97219
|
previous: { model: "gpt-5.6-sol", effort: "low" },
|
|
97039
|
-
current: { model:
|
|
97220
|
+
current: { model: LATEST_MODEL_BY_FAMILY.gptAstra, effort: "low" }
|
|
97040
97221
|
}
|
|
97041
97222
|
]
|
|
97042
97223
|
]
|
|
@@ -97366,7 +97547,7 @@ function nodeErrorCode2(error) {
|
|
|
97366
97547
|
}
|
|
97367
97548
|
|
|
97368
97549
|
// packages/omo-codex/src/install/default-agent-role.ts
|
|
97369
|
-
import { createHash as
|
|
97550
|
+
import { createHash as createHash4 } from "node:crypto";
|
|
97370
97551
|
import { lstat as lstat9, readFile as readFile16, rm as rm10 } from "node:fs/promises";
|
|
97371
97552
|
import { join as join43 } from "node:path";
|
|
97372
97553
|
var REGISTRATION = { name: "default", configFile: "./agents/default.toml" };
|
|
@@ -97422,7 +97603,7 @@ async function readIfPresent(path) {
|
|
|
97422
97603
|
}
|
|
97423
97604
|
}
|
|
97424
97605
|
function hash(content) {
|
|
97425
|
-
return
|
|
97606
|
+
return createHash4("sha256").update(content).digest("hex");
|
|
97426
97607
|
}
|
|
97427
97608
|
|
|
97428
97609
|
// packages/omo-codex/src/install/link-cached-plugin-agents.ts
|
|
@@ -98087,7 +98268,7 @@ function formatUnknownError(error) {
|
|
|
98087
98268
|
}
|
|
98088
98269
|
|
|
98089
98270
|
// packages/omo-codex/src/install/lsp-daemon-reaper.ts
|
|
98090
|
-
import { createHash as
|
|
98271
|
+
import { createHash as createHash5 } from "node:crypto";
|
|
98091
98272
|
import { lstat as lstat12, readFile as readFile22, readdir as readdir10, rm as rm12 } from "node:fs/promises";
|
|
98092
98273
|
import { tmpdir as tmpdir3 } from "node:os";
|
|
98093
98274
|
import { join as join48, posix as posix6 } from "node:path";
|
|
@@ -98365,7 +98546,7 @@ async function readRegularTrimmedFile(path) {
|
|
|
98365
98546
|
return content.length > 0 ? content : null;
|
|
98366
98547
|
}
|
|
98367
98548
|
function shortDigest(value) {
|
|
98368
|
-
return
|
|
98549
|
+
return createHash5("sha256").update(value).digest("hex").slice(0, 16);
|
|
98369
98550
|
}
|
|
98370
98551
|
async function removeVersionDir(path) {
|
|
98371
98552
|
await rm12(path, { recursive: true, force: true });
|
|
@@ -98407,13 +98588,13 @@ function processIsRunning(pid) {
|
|
|
98407
98588
|
}
|
|
98408
98589
|
|
|
98409
98590
|
// packages/omo-codex/src/install/codex-installer-bin-dir.ts
|
|
98410
|
-
import { homedir as
|
|
98591
|
+
import { homedir as homedir6 } from "node:os";
|
|
98411
98592
|
import { join as join49, resolve as resolve12 } from "node:path";
|
|
98412
98593
|
function resolveCodexInstallerBinDir(input) {
|
|
98413
98594
|
const explicitBinDir = input.binDir ?? input.env?.CODEX_LOCAL_BIN_DIR;
|
|
98414
98595
|
if (explicitBinDir !== undefined && explicitBinDir.trim().length > 0)
|
|
98415
98596
|
return resolve12(explicitBinDir.trim());
|
|
98416
|
-
const homeDir = input.homeDir ??
|
|
98597
|
+
const homeDir = input.homeDir ?? homedir6();
|
|
98417
98598
|
const defaultCodexHome = resolve12(homeDir, ".codex");
|
|
98418
98599
|
const resolvedCodexHome = resolve12(input.codexHome);
|
|
98419
98600
|
if (resolvedCodexHome !== defaultCodexHome)
|
|
@@ -98539,7 +98720,7 @@ async function runCodexInstaller(options = {}) {
|
|
|
98539
98720
|
const env = options.env ?? process.env;
|
|
98540
98721
|
const platform = options.platform ?? process.platform;
|
|
98541
98722
|
const repoRoot = resolve13(options.repoRoot ?? findRepoRoot({ importerDir: import.meta.dir, env }));
|
|
98542
|
-
const codexHome = resolve13(options.codexHome ?? env.CODEX_HOME ?? join56(
|
|
98723
|
+
const codexHome = resolve13(options.codexHome ?? env.CODEX_HOME ?? join56(homedir7(), ".codex"));
|
|
98543
98724
|
const projectDirectory = resolve13(options.projectDirectory ?? env.OMO_CODEX_PROJECT ?? process.cwd());
|
|
98544
98725
|
const binDir = resolveCodexInstallerBinDir({ binDir: options.binDir, codexHome, env });
|
|
98545
98726
|
const runCommand = options.runCommand ?? defaultRunCommand;
|
|
@@ -98731,7 +98912,7 @@ function codexMarketplaceSource(marketplaceRoot) {
|
|
|
98731
98912
|
init_bun_which_shim();
|
|
98732
98913
|
import { execFile as execFile2 } from "node:child_process";
|
|
98733
98914
|
import { existsSync as existsSync28 } from "node:fs";
|
|
98734
|
-
import { homedir as
|
|
98915
|
+
import { homedir as homedir8 } from "node:os";
|
|
98735
98916
|
import { posix as posix8, win32 as win324 } from "node:path";
|
|
98736
98917
|
var CODEX_PATH_CHECK_LABEL = "codex (PATH)";
|
|
98737
98918
|
var WINDOWS_START_APPS_ARGS = [
|
|
@@ -98742,7 +98923,7 @@ var WINDOWS_START_APPS_ARGS = [
|
|
|
98742
98923
|
async function detectCodexInstallation(input = {}) {
|
|
98743
98924
|
const platform = input.platform ?? process.platform;
|
|
98744
98925
|
const env = input.env ?? process.env;
|
|
98745
|
-
const homeDir = input.homeDir ??
|
|
98926
|
+
const homeDir = input.homeDir ?? homedir8();
|
|
98746
98927
|
const exists = input.exists ?? existsSync28;
|
|
98747
98928
|
const which = input.which ?? bunWhich;
|
|
98748
98929
|
const checkedPaths = [CODEX_PATH_CHECK_LABEL];
|
|
@@ -98858,7 +99039,7 @@ function defaultRunCommand2(command, args) {
|
|
|
98858
99039
|
}
|
|
98859
99040
|
// packages/omo-codex/src/install/codex-cleanup.ts
|
|
98860
99041
|
import { lstat as lstat15, readFile as readFile27, readdir as readdir13, rm as rm14, rmdir } from "node:fs/promises";
|
|
98861
|
-
import { homedir as
|
|
99042
|
+
import { homedir as homedir9 } from "node:os";
|
|
98862
99043
|
import { isAbsolute as isAbsolute11, join as join59, relative as relative6, resolve as resolve16 } from "node:path";
|
|
98863
99044
|
|
|
98864
99045
|
// packages/omo-codex/src/install/codex-cleanup-bins.ts
|
|
@@ -99097,7 +99278,7 @@ function skipped(path, reason) {
|
|
|
99097
99278
|
var INSTALLED_AGENTS_MANIFEST = ".installed-agents.json";
|
|
99098
99279
|
async function cleanupCodexLight(input = {}) {
|
|
99099
99280
|
const env = input.env ?? process.env;
|
|
99100
|
-
const codexHome = resolve16(input.codexHome ?? env.CODEX_HOME ?? join59(
|
|
99281
|
+
const codexHome = resolve16(input.codexHome ?? env.CODEX_HOME ?? join59(homedir9(), ".codex"));
|
|
99101
99282
|
const configPath = join59(codexHome, "config.toml");
|
|
99102
99283
|
const installedBinDir = await readInstalledCodexBinDir(codexHome);
|
|
99103
99284
|
const agentPaths = await collectInstalledAgentPaths(codexHome, configPath);
|
|
@@ -99309,14 +99490,14 @@ function nodeErrorCode6(error) {
|
|
|
99309
99490
|
// packages/omo-senpi/src/install/install-senpi.ts
|
|
99310
99491
|
import { execFile as execFile3 } from "node:child_process";
|
|
99311
99492
|
import { existsSync as existsSync31 } from "node:fs";
|
|
99312
|
-
import { homedir as
|
|
99493
|
+
import { homedir as homedir12 } from "node:os";
|
|
99313
99494
|
import { dirname as dirname25, join as join64, resolve as resolve20 } from "node:path";
|
|
99314
99495
|
import { fileURLToPath } from "node:url";
|
|
99315
99496
|
import { promisify as promisify2 } from "node:util";
|
|
99316
99497
|
|
|
99317
|
-
// packages/
|
|
99498
|
+
// packages/senpi-task/src/agent-home.ts
|
|
99318
99499
|
import { existsSync as existsSync29 } from "node:fs";
|
|
99319
|
-
import { homedir as
|
|
99500
|
+
import { homedir as homedir10 } from "node:os";
|
|
99320
99501
|
import { join as join60, resolve as resolve17 } from "node:path";
|
|
99321
99502
|
var AGENT_DIR_ENV_NAMES = [
|
|
99322
99503
|
"OMO_CODING_AGENT_DIR",
|
|
@@ -99325,7 +99506,7 @@ var AGENT_DIR_ENV_NAMES = [
|
|
|
99325
99506
|
];
|
|
99326
99507
|
var AGENT_HOME_SENTINEL = "settings.json";
|
|
99327
99508
|
function resolveAgentHome(options) {
|
|
99328
|
-
const { env, homeDir =
|
|
99509
|
+
const { env, homeDir = homedir10(), exists = existsSync29 } = options;
|
|
99329
99510
|
for (const name of AGENT_DIR_ENV_NAMES) {
|
|
99330
99511
|
const configured = env[name]?.trim();
|
|
99331
99512
|
if (configured)
|
|
@@ -99339,16 +99520,15 @@ function resolveAgentHome(options) {
|
|
|
99339
99520
|
return brandedHome;
|
|
99340
99521
|
return join60(homeDir, ".senpi", "agent");
|
|
99341
99522
|
}
|
|
99342
|
-
|
|
99343
99523
|
// packages/omo-senpi/src/install/local-launcher.ts
|
|
99344
99524
|
import { chmodSync as chmodSync3, existsSync as existsSync30, mkdirSync as mkdirSync12, readFileSync as readFileSync14, rmSync as rmSync4, writeFileSync as writeFileSync7 } from "node:fs";
|
|
99345
|
-
import { homedir as
|
|
99525
|
+
import { homedir as homedir11 } from "node:os";
|
|
99346
99526
|
import { dirname as dirname22, join as join61, resolve as resolve18 } from "node:path";
|
|
99347
99527
|
var MARKER = "omo-local-launcher";
|
|
99348
|
-
function localLauncherPath(homeDir =
|
|
99528
|
+
function localLauncherPath(homeDir = homedir11()) {
|
|
99349
99529
|
return join61(homeDir, ".local", "bin", "omo");
|
|
99350
99530
|
}
|
|
99351
|
-
function localLauncherCmdPath(homeDir =
|
|
99531
|
+
function localLauncherCmdPath(homeDir = homedir11()) {
|
|
99352
99532
|
return join61(homeDir, ".local", "bin", "omo.cmd");
|
|
99353
99533
|
}
|
|
99354
99534
|
function releaseChannel(version) {
|
|
@@ -99437,7 +99617,7 @@ node "%~dp0omo" %*\r
|
|
|
99437
99617
|
}
|
|
99438
99618
|
|
|
99439
99619
|
// packages/omo-senpi/src/install/plugin-artifacts.ts
|
|
99440
|
-
import { createHash as
|
|
99620
|
+
import { createHash as createHash7 } from "node:crypto";
|
|
99441
99621
|
import { constants as constants9 } from "node:fs";
|
|
99442
99622
|
import { access as access2, readFile as readFile29, stat as stat6 } from "node:fs/promises";
|
|
99443
99623
|
import { dirname as dirname24, join as join63 } from "node:path";
|
|
@@ -99581,6 +99761,8 @@ var REQUIRED_PLUGIN_ARTIFACTS = [
|
|
|
99581
99761
|
join63("extensions", "omo-memory-doctor.js"),
|
|
99582
99762
|
join63("extensions", "omo-memory-memfs.js"),
|
|
99583
99763
|
join63("extensions", "omo-memory-palace.js"),
|
|
99764
|
+
join63("extensions", "omo-device-account.js"),
|
|
99765
|
+
join63("extensions", "omo-memory-commands.js"),
|
|
99584
99766
|
join63("extensions", "omo-session-history.js"),
|
|
99585
99767
|
join63("extensions", "omo-recall-store.js"),
|
|
99586
99768
|
join63("extensions", "omo-telemetry-posthog.js"),
|
|
@@ -99588,6 +99770,7 @@ var REQUIRED_PLUGIN_ARTIFACTS = [
|
|
|
99588
99770
|
join63("extensions", "loro_wasm_bg.wasm"),
|
|
99589
99771
|
join63("extensions", "CaseFolding.txt"),
|
|
99590
99772
|
join63("extensions", "omo-thread-client.js"),
|
|
99773
|
+
join63("extensions", "omo-telemetry-recovery.js"),
|
|
99591
99774
|
join63("extensions", "omo-feedback.js"),
|
|
99592
99775
|
join63("extensions", "omo-claim-receipt.js"),
|
|
99593
99776
|
join63("extensions", "assets.generated.json"),
|
|
@@ -99678,7 +99861,7 @@ async function verifyAstGrepRuntimeIntegrity(pluginPath, platform) {
|
|
|
99678
99861
|
}
|
|
99679
99862
|
let actualSha256;
|
|
99680
99863
|
try {
|
|
99681
|
-
actualSha256 =
|
|
99864
|
+
actualSha256 = createHash7("sha256").update(await readFile29(runtimeEntry)).digest("hex");
|
|
99682
99865
|
} catch (error) {
|
|
99683
99866
|
throw astGrepIntegrityError(runtimeEntry, `runtime hash could not be computed: ${messageOf(error)}`);
|
|
99684
99867
|
}
|
|
@@ -99747,7 +99930,7 @@ function resolveInstallContext(options) {
|
|
|
99747
99930
|
const env = options.env ?? process.env;
|
|
99748
99931
|
const allowBuild = options.pluginPath === undefined;
|
|
99749
99932
|
const repoRoot = resolve20(options.repoRoot ?? (allowBuild ? findRepoRoot2(dirname25(fileURLToPath(import.meta.url))) : dirname25(resolve20(options.pluginPath))));
|
|
99750
|
-
const homeDir = options.homeDir ?? env.HOME ??
|
|
99933
|
+
const homeDir = options.homeDir ?? env.HOME ?? homedir12();
|
|
99751
99934
|
const agentDir = resolve20(options.agentDir ?? resolveAgentHome({ env, homeDir }));
|
|
99752
99935
|
const pluginPath = resolve20(options.pluginPath ?? join64(repoRoot, "packages", "omo-senpi", "plugin"));
|
|
99753
99936
|
return {
|
|
@@ -100043,7 +100226,7 @@ function shadowWarning(resolved, native, isWindows) {
|
|
|
100043
100226
|
// packages/omo-opencode/src/cli/install-native/run-native-install.ts
|
|
100044
100227
|
init_bun_which_shim();
|
|
100045
100228
|
init_spawn_with_windows_hide();
|
|
100046
|
-
import { homedir as
|
|
100229
|
+
import { homedir as homedir13 } from "node:os";
|
|
100047
100230
|
function describeExit(plan, result) {
|
|
100048
100231
|
const stderr = result.stderr?.trim();
|
|
100049
100232
|
const head = `${plan.packageManager} exited with code ${result.exitCode}`;
|
|
@@ -100107,7 +100290,7 @@ function nativeInstallFailureLines(failure) {
|
|
|
100107
100290
|
function defaultNativeInstallDependencies() {
|
|
100108
100291
|
return {
|
|
100109
100292
|
isBunAvailable: () => bunWhich("bun") !== null,
|
|
100110
|
-
environment: resolveOmoBinEnvironment({ env: process.env, platform: process.platform, homeDir:
|
|
100293
|
+
environment: resolveOmoBinEnvironment({ env: process.env, platform: process.platform, homeDir: homedir13() }),
|
|
100111
100294
|
spawn: async (command, args) => {
|
|
100112
100295
|
const proc = spawnWithWindowsHide([command, ...args], {
|
|
100113
100296
|
env: process.env,
|
|
@@ -100509,7 +100692,7 @@ async function checkTuiPluginConfig() {
|
|
|
100509
100692
|
if (!server.registered && tui.registered) {
|
|
100510
100693
|
issues.push({
|
|
100511
100694
|
title: "Server plugin entry missing from opencode.json",
|
|
100512
|
-
description: `The TUI plugin entry ("${PLUGIN_NAME}") is registered in tui.json, ` + "but the server plugin (oh-my-openagent) is missing from opencode.json. " + "The plugin cannot function correctly without both halves
|
|
100695
|
+
description: `The TUI plugin entry ("${PLUGIN_NAME}") is registered in tui.json, ` + "but the server plugin (oh-my-openagent) is missing from opencode.json. " + "The plugin cannot function correctly without both halves: the server side " + "handles tool dispatch, hook execution, and SDK integration.",
|
|
100513
100696
|
fix: "Re-run the installer (`npx oh-my-openagent install`) to auto-write opencode.json, " + `or add "${PLUGIN_NAME}" to the "plugin" array in ${server.configPath ?? "opencode.json"}.`,
|
|
100514
100697
|
affects: ["tool dispatch", "hook execution", "SDK integration"],
|
|
100515
100698
|
severity: "warning"
|
|
@@ -100678,7 +100861,7 @@ function refreshOpenCodePluginSandboxes(options = {}) {
|
|
|
100678
100861
|
}
|
|
100679
100862
|
|
|
100680
100863
|
// packages/omo-opencode/src/cli/install-ast-grep-sg.ts
|
|
100681
|
-
import { homedir as
|
|
100864
|
+
import { homedir as homedir14 } from "node:os";
|
|
100682
100865
|
import { join as join69 } from "node:path";
|
|
100683
100866
|
|
|
100684
100867
|
// packages/shared-skills/index.mjs
|
|
@@ -100701,7 +100884,7 @@ function describeResult2(result) {
|
|
|
100701
100884
|
}
|
|
100702
100885
|
async function installAstGrepForOpenCode(options = {}) {
|
|
100703
100886
|
const platform = options.platform ?? process.platform;
|
|
100704
|
-
const baseDir = join69(options.homeDir ??
|
|
100887
|
+
const baseDir = join69(options.homeDir ?? homedir14(), ".omo");
|
|
100705
100888
|
const targetDir = astGrepRuntimeDir(baseDir, platform, options.arch ?? process.arch);
|
|
100706
100889
|
const skillDir = join69(options.sharedSkillsRoot ?? sharedSkillsRootPath(), "ast-grep");
|
|
100707
100890
|
const installer = options.installer ?? runAstGrepSkillInstall;
|
|
@@ -103275,9 +103458,250 @@ async function processEvents(ctx, stream, state) {
|
|
|
103275
103458
|
}
|
|
103276
103459
|
}
|
|
103277
103460
|
}
|
|
103461
|
+
// packages/omo-opencode/src/config/validate.ts
|
|
103462
|
+
import { dirname as dirname29, isAbsolute as isAbsolute13, join as join74, relative as relative7 } from "node:path";
|
|
103463
|
+
|
|
103464
|
+
// packages/skills-loader-core/src/shared/skill-path-resolver.ts
|
|
103465
|
+
init_skill_path_resolver();
|
|
103466
|
+
|
|
103467
|
+
// packages/skills-loader-core/src/features/opencode-skill-loader/skill-mcp-config.ts
|
|
103468
|
+
init_js_yaml();
|
|
103469
|
+
|
|
103470
|
+
// packages/skills-loader-core/src/features/opencode-skill-loader/skill-provenance.ts
|
|
103471
|
+
import { basename as basename11, dirname as dirname28, join as join73, resolve as resolve23, sep as sep9 } from "node:path";
|
|
103472
|
+
import { homedir as homedir16 } from "node:os";
|
|
103473
|
+
|
|
103474
|
+
// packages/skills-loader-core/src/shared/claude-config-dir.ts
|
|
103475
|
+
init_src();
|
|
103476
|
+
import { join as join70 } from "node:path";
|
|
103477
|
+
function getClaudeConfigDir() {
|
|
103478
|
+
const envConfigDir = process.env.CLAUDE_CONFIG_DIR;
|
|
103479
|
+
if (envConfigDir) {
|
|
103480
|
+
return envConfigDir;
|
|
103481
|
+
}
|
|
103482
|
+
return join70(getHomeDirectory(), ".claude");
|
|
103483
|
+
}
|
|
103484
|
+
// packages/skills-loader-core/src/shared/opencode-config-dir.ts
|
|
103485
|
+
import { existsSync as existsSync36, realpathSync as realpathSync9 } from "node:fs";
|
|
103486
|
+
import { homedir as homedir15 } from "node:os";
|
|
103487
|
+
import { join as join71, posix as posix10, resolve as resolve21, win32 as win326 } from "node:path";
|
|
103488
|
+
|
|
103489
|
+
// packages/skills-loader-core/src/shared/plugin-identity.ts
|
|
103490
|
+
init_src();
|
|
103491
|
+
var PRODUCT_IDENTITY = createProductIdentity({
|
|
103492
|
+
pluginName: "oh-my-openagent",
|
|
103493
|
+
legacyPluginName: "oh-my-opencode",
|
|
103494
|
+
publishedPackageName: "oh-my-opencode",
|
|
103495
|
+
configBasename: "oh-my-openagent",
|
|
103496
|
+
legacyConfigBasename: "oh-my-opencode",
|
|
103497
|
+
logFileName: "oh-my-opencode.log",
|
|
103498
|
+
cacheDirName: "oh-my-opencode"
|
|
103499
|
+
});
|
|
103500
|
+
var PLUGIN_NAME2 = PRODUCT_IDENTITY.pluginName;
|
|
103501
|
+
var LEGACY_PLUGIN_NAME2 = PRODUCT_IDENTITY.legacyPluginName;
|
|
103502
|
+
var PUBLISHED_PACKAGE_NAME2 = PRODUCT_IDENTITY.publishedPackageName;
|
|
103503
|
+
var CONFIG_BASENAME = PRODUCT_IDENTITY.configBasename;
|
|
103504
|
+
var LEGACY_CONFIG_BASENAME = PRODUCT_IDENTITY.legacyConfigBasename;
|
|
103505
|
+
var LOG_FILENAME3 = PRODUCT_IDENTITY.logFileName;
|
|
103506
|
+
var CACHE_DIR_NAME3 = PRODUCT_IDENTITY.cacheDirName;
|
|
103507
|
+
|
|
103508
|
+
// packages/skills-loader-core/src/shared/opencode-config-dir.ts
|
|
103509
|
+
var TAURI_APP_IDENTIFIER2 = "ai.opencode.desktop";
|
|
103510
|
+
var TAURI_APP_IDENTIFIER_DEV2 = "ai.opencode.desktop.dev";
|
|
103511
|
+
function isDevBuild2(version) {
|
|
103512
|
+
if (!version)
|
|
103513
|
+
return false;
|
|
103514
|
+
return version.includes("-dev") || version.includes(".dev");
|
|
103515
|
+
}
|
|
103516
|
+
function getTauriConfigDir2(identifier) {
|
|
103517
|
+
const platform = process.platform;
|
|
103518
|
+
switch (platform) {
|
|
103519
|
+
case "darwin":
|
|
103520
|
+
return join71(homedir15(), "Library", "Application Support", identifier);
|
|
103521
|
+
case "win32": {
|
|
103522
|
+
const appData = process.env.APPDATA || join71(homedir15(), "AppData", "Roaming");
|
|
103523
|
+
return win326.join(appData, identifier);
|
|
103524
|
+
}
|
|
103525
|
+
case "linux":
|
|
103526
|
+
default: {
|
|
103527
|
+
const xdgConfig = process.env.XDG_CONFIG_HOME || join71(homedir15(), ".config");
|
|
103528
|
+
return join71(xdgConfig, identifier);
|
|
103529
|
+
}
|
|
103530
|
+
}
|
|
103531
|
+
}
|
|
103532
|
+
function resolveConfigPath2(pathValue) {
|
|
103533
|
+
if (isWslEnvironment2() && pathValue.startsWith("/")) {
|
|
103534
|
+
return posix10.normalize(pathValue);
|
|
103535
|
+
}
|
|
103536
|
+
const resolvedPath = resolve21(pathValue);
|
|
103537
|
+
if (!existsSync36(resolvedPath))
|
|
103538
|
+
return resolvedPath;
|
|
103539
|
+
try {
|
|
103540
|
+
return realpathSync9(resolvedPath);
|
|
103541
|
+
} catch (error) {
|
|
103542
|
+
if (error instanceof Error) {
|
|
103543
|
+
return resolvedPath;
|
|
103544
|
+
}
|
|
103545
|
+
return resolvedPath;
|
|
103546
|
+
}
|
|
103547
|
+
}
|
|
103548
|
+
function isWslEnvironment2() {
|
|
103549
|
+
return process.platform === "linux" && (Boolean(process.env.WSL_DISTRO_NAME?.trim()) || Boolean(process.env.WSL_INTEROP?.trim()));
|
|
103550
|
+
}
|
|
103551
|
+
function isWindowsUserConfigRoot2(pathValue) {
|
|
103552
|
+
const normalizedPath = pathValue.replaceAll("\\", "/").toLowerCase();
|
|
103553
|
+
return /^[a-z]:\/users\//.test(normalizedPath) || /^\/mnt\/[a-z]\/users\//.test(normalizedPath);
|
|
103554
|
+
}
|
|
103555
|
+
function getWindowsUserFromConfigRoot2(pathValue) {
|
|
103556
|
+
const normalizedPath = pathValue.replaceAll("\\", "/");
|
|
103557
|
+
const match = /^(?:[a-z]:|\/mnt\/[a-z])\/Users\/([^/]+)/i.exec(normalizedPath);
|
|
103558
|
+
return match?.[1] ?? null;
|
|
103559
|
+
}
|
|
103560
|
+
function getWslLinuxHomeDir2(windowsConfigRoot) {
|
|
103561
|
+
const envHome = process.env.HOME?.trim();
|
|
103562
|
+
if (envHome && envHome.startsWith("/") && !isWindowsUserConfigRoot2(envHome)) {
|
|
103563
|
+
return envHome;
|
|
103564
|
+
}
|
|
103565
|
+
const user = process.env.USER?.trim() || process.env.LOGNAME?.trim() || process.env.SUDO_USER?.trim() || (windowsConfigRoot ? getWindowsUserFromConfigRoot2(windowsConfigRoot) : undefined);
|
|
103566
|
+
return user ? posix10.join("/home", user) : null;
|
|
103567
|
+
}
|
|
103568
|
+
function getCliDefaultConfigDir2() {
|
|
103569
|
+
const envXdgConfig = process.env.XDG_CONFIG_HOME?.trim();
|
|
103570
|
+
const shouldIgnoreWindowsXdg = envXdgConfig !== undefined && envXdgConfig.length > 0 && isWslEnvironment2() && isWindowsUserConfigRoot2(envXdgConfig);
|
|
103571
|
+
const xdgConfig = shouldIgnoreWindowsXdg ? posix10.join(getWslLinuxHomeDir2(envXdgConfig) ?? "/home", ".config") : envXdgConfig || join71(homedir15(), ".config");
|
|
103572
|
+
const configDir = isWslEnvironment2() ? posix10.join(xdgConfig, "opencode") : join71(xdgConfig, "opencode");
|
|
103573
|
+
return resolveConfigPath2(configDir);
|
|
103574
|
+
}
|
|
103575
|
+
function getCliCustomConfigDir2() {
|
|
103576
|
+
const envConfigDir = process.env.OPENCODE_CONFIG_DIR?.trim();
|
|
103577
|
+
if (!envConfigDir) {
|
|
103578
|
+
return null;
|
|
103579
|
+
}
|
|
103580
|
+
return resolveConfigPath2(envConfigDir);
|
|
103581
|
+
}
|
|
103582
|
+
function getCliConfigDir2() {
|
|
103583
|
+
return getCliCustomConfigDir2() ?? getCliDefaultConfigDir2();
|
|
103584
|
+
}
|
|
103585
|
+
function getOpenCodeConfigDirs2(options) {
|
|
103586
|
+
if (options.binary !== "opencode") {
|
|
103587
|
+
return [getOpenCodeConfigDir2(options)];
|
|
103588
|
+
}
|
|
103589
|
+
const customConfigDir = getCliCustomConfigDir2();
|
|
103590
|
+
return Array.from(new Set([
|
|
103591
|
+
...customConfigDir ? [customConfigDir] : [],
|
|
103592
|
+
getCliDefaultConfigDir2()
|
|
103593
|
+
]));
|
|
103594
|
+
}
|
|
103595
|
+
function getOpenCodeConfigDir2(options) {
|
|
103596
|
+
const { binary, version, checkExisting = true } = options;
|
|
103597
|
+
if (binary === "opencode") {
|
|
103598
|
+
return getCliConfigDir2();
|
|
103599
|
+
}
|
|
103600
|
+
const identifier = isDevBuild2(version) ? TAURI_APP_IDENTIFIER_DEV2 : TAURI_APP_IDENTIFIER2;
|
|
103601
|
+
const tauriDirBase = getTauriConfigDir2(identifier);
|
|
103602
|
+
const tauriDir = process.platform === "win32" ? win326.isAbsolute(tauriDirBase) ? win326.normalize(tauriDirBase) : win326.resolve(tauriDirBase) : resolveConfigPath2(tauriDirBase);
|
|
103603
|
+
if (checkExisting) {
|
|
103604
|
+
const legacyDir = getCliConfigDir2();
|
|
103605
|
+
const legacyConfig = join71(legacyDir, "opencode.json");
|
|
103606
|
+
const legacyConfigC = join71(legacyDir, "opencode.jsonc");
|
|
103607
|
+
if (existsSync36(legacyConfig) || existsSync36(legacyConfigC)) {
|
|
103608
|
+
return legacyDir;
|
|
103609
|
+
}
|
|
103610
|
+
}
|
|
103611
|
+
return tauriDir;
|
|
103612
|
+
}
|
|
103613
|
+
// packages/skills-loader-core/src/shared/project-discovery-dirs.ts
|
|
103614
|
+
import { execFileSync as execFileSync3 } from "node:child_process";
|
|
103615
|
+
import { existsSync as existsSync37, realpathSync as realpathSync10 } from "node:fs";
|
|
103616
|
+
import { dirname as dirname27, join as join72, resolve as resolve22, win32 as win327 } from "node:path";
|
|
103617
|
+
var worktreePathCache2 = new Map;
|
|
103618
|
+
function normalizePath(path) {
|
|
103619
|
+
const resolvedPath = process.platform !== "win32" && win327.isAbsolute(path) ? path : resolve22(path);
|
|
103620
|
+
if (!existsSync37(resolvedPath)) {
|
|
103621
|
+
return resolvedPath;
|
|
103622
|
+
}
|
|
103623
|
+
try {
|
|
103624
|
+
return realpathSync10.native(resolvedPath);
|
|
103625
|
+
} catch (error) {
|
|
103626
|
+
if (!(error instanceof Error)) {
|
|
103627
|
+
throw error;
|
|
103628
|
+
}
|
|
103629
|
+
try {
|
|
103630
|
+
return realpathSync10(resolvedPath);
|
|
103631
|
+
} catch (fallbackError) {
|
|
103632
|
+
if (!(fallbackError instanceof Error)) {
|
|
103633
|
+
throw fallbackError;
|
|
103634
|
+
}
|
|
103635
|
+
return resolvedPath;
|
|
103636
|
+
}
|
|
103637
|
+
}
|
|
103638
|
+
}
|
|
103639
|
+
function pathKey2(path) {
|
|
103640
|
+
const normalized = path.replace(/\\/g, "/");
|
|
103641
|
+
return process.platform === "win32" ? normalized.toLowerCase() : normalized;
|
|
103642
|
+
}
|
|
103643
|
+
function detectWorktreePath(directory) {
|
|
103644
|
+
const resolvedDirectory = resolve22(directory);
|
|
103645
|
+
const cacheKey = pathKey2(normalizePath(resolvedDirectory));
|
|
103646
|
+
if (worktreePathCache2.has(cacheKey)) {
|
|
103647
|
+
return worktreePathCache2.get(cacheKey);
|
|
103648
|
+
}
|
|
103649
|
+
let ancestor = normalizePath(resolvedDirectory);
|
|
103650
|
+
while (true) {
|
|
103651
|
+
if (existsSync37(join72(ancestor, ".git"))) {
|
|
103652
|
+
worktreePathCache2.set(cacheKey, ancestor);
|
|
103653
|
+
return ancestor;
|
|
103654
|
+
}
|
|
103655
|
+
const parent = dirname27(ancestor);
|
|
103656
|
+
if (parent === ancestor)
|
|
103657
|
+
break;
|
|
103658
|
+
ancestor = parent;
|
|
103659
|
+
}
|
|
103660
|
+
try {
|
|
103661
|
+
const worktreePath = execFileSync3("git", ["rev-parse", "--show-toplevel"], {
|
|
103662
|
+
cwd: resolvedDirectory,
|
|
103663
|
+
encoding: "utf-8",
|
|
103664
|
+
timeout: 5000,
|
|
103665
|
+
stdio: ["pipe", "pipe", "pipe"]
|
|
103666
|
+
}).trim();
|
|
103667
|
+
const normalizedWorktreePath = normalizePath(worktreePath);
|
|
103668
|
+
worktreePathCache2.set(cacheKey, normalizedWorktreePath);
|
|
103669
|
+
return normalizedWorktreePath;
|
|
103670
|
+
} catch (error) {
|
|
103671
|
+
if (!(error instanceof Error)) {
|
|
103672
|
+
throw error;
|
|
103673
|
+
}
|
|
103674
|
+
worktreePathCache2.set(cacheKey, undefined);
|
|
103675
|
+
return;
|
|
103676
|
+
}
|
|
103677
|
+
}
|
|
103678
|
+
// packages/skills-loader-core/src/shared/internal-initiator-marker.ts
|
|
103679
|
+
init_internal_initiator_marker();
|
|
103680
|
+
// packages/skills-loader-core/src/features/opencode-skill-loader/skill-provenance.ts
|
|
103681
|
+
var observers = new Set;
|
|
103682
|
+
function knownUserSkillRoots() {
|
|
103683
|
+
const home = homedir16();
|
|
103684
|
+
return [
|
|
103685
|
+
join73(getClaudeConfigDir(), "skills"),
|
|
103686
|
+
join73(home, ".agents", "skills"),
|
|
103687
|
+
join73(home, ".omo", "agent", "skills"),
|
|
103688
|
+
join73(home, ".senpi", "agent", "skills"),
|
|
103689
|
+
sharedSkillsRootPath(),
|
|
103690
|
+
...getOpenCodeConfigDirs2({ binary: "opencode" }).flatMap((dir) => [
|
|
103691
|
+
join73(dir, "skills"),
|
|
103692
|
+
join73(dir, "skill")
|
|
103693
|
+
])
|
|
103694
|
+
];
|
|
103695
|
+
}
|
|
103696
|
+
|
|
103697
|
+
// packages/skills-loader-core/src/features/opencode-skill-loader/config-source-discovery.ts
|
|
103698
|
+
var sourceOrigins = new WeakMap;
|
|
103699
|
+
function setSkillSourceProvenance(config, provenance) {
|
|
103700
|
+
sourceOrigins.set(config, provenance);
|
|
103701
|
+
}
|
|
103702
|
+
|
|
103278
103703
|
// packages/omo-opencode/src/config/validate.ts
|
|
103279
103704
|
init_src4();
|
|
103280
|
-
import { relative as relative7 } from "node:path";
|
|
103281
103705
|
|
|
103282
103706
|
// packages/omo-opencode/src/shared/disabled-providers.ts
|
|
103283
103707
|
init_config_errors();
|
|
@@ -103401,7 +103825,7 @@ function appendViews(views, layers, select, keyPrefix) {
|
|
|
103401
103825
|
for (const layer of layers) {
|
|
103402
103826
|
const config = select(layer.config);
|
|
103403
103827
|
if (Object.keys(config).length > 0)
|
|
103404
|
-
views.push({ config, keyPrefix, path: layer.source.path });
|
|
103828
|
+
views.push({ config, keyPrefix, path: layer.source.path, scope: layer.source.scope });
|
|
103405
103829
|
}
|
|
103406
103830
|
}
|
|
103407
103831
|
function recordFields(value, fields) {
|
|
@@ -103931,7 +104355,7 @@ var GitEnvPrefixSchema2 = string2().refine(isValidGitEnvPrefix, { message: GIT_E
|
|
|
103931
104355
|
init_zod();
|
|
103932
104356
|
var GitMasterConfigSchema = object({
|
|
103933
104357
|
commit_footer: union([boolean2(), string2()]).default(false),
|
|
103934
|
-
include_co_authored_by: boolean2().default(
|
|
104358
|
+
include_co_authored_by: boolean2().default(true),
|
|
103935
104359
|
git_env_prefix: GitEnvPrefixSchema2
|
|
103936
104360
|
});
|
|
103937
104361
|
// packages/omo-opencode/src/config/schema/hooks.ts
|
|
@@ -104240,7 +104664,7 @@ var OhMyOpenCodeConfigSchema = object({
|
|
|
104240
104664
|
babysitting: BabysittingConfigSchema.optional(),
|
|
104241
104665
|
git_master: GitMasterConfigSchema.default({
|
|
104242
104666
|
commit_footer: false,
|
|
104243
|
-
include_co_authored_by:
|
|
104667
|
+
include_co_authored_by: true,
|
|
104244
104668
|
git_env_prefix: "GIT_MASTER=1"
|
|
104245
104669
|
}),
|
|
104246
104670
|
browser_automation_engine: BrowserAutomationConfigSchema.optional(),
|
|
@@ -104411,6 +104835,28 @@ function validatePluginConfig(directory, environment = process.env) {
|
|
|
104411
104835
|
const userConfig = parseConfig(prunePluginView({ config: chain.protectedUserView, homeDir, keyPrefix: "", path: "" }).config);
|
|
104412
104836
|
const config = applyDisabledProviders(materializeAgentModelChains(protectUserFields(mergeViews(views), userConfig)));
|
|
104413
104837
|
warnLegacyUlwExecuteKey(chain.views);
|
|
104838
|
+
if (config.skills) {
|
|
104839
|
+
const owner = chain.views.findLast((view) => Object.hasOwn(view.config, "skills"));
|
|
104840
|
+
const userRoots = [...knownUserSkillRoots()];
|
|
104841
|
+
for (const view of chain.views.filter((candidate) => candidate.scope === "user")) {
|
|
104842
|
+
const settings = OhMyOpenCodeConfigSchema.safeParse({ skills: view.config.skills });
|
|
104843
|
+
const skills = settings.success ? settings.data.skills : undefined;
|
|
104844
|
+
if (!skills || Array.isArray(skills))
|
|
104845
|
+
continue;
|
|
104846
|
+
for (const source of skills.sources ?? []) {
|
|
104847
|
+
const path = typeof source === "string" ? source : source.path;
|
|
104848
|
+
if (/^https?:\/\//.test(path))
|
|
104849
|
+
continue;
|
|
104850
|
+
userRoots.push(path.startsWith("~/") ? join74(homeDir ?? "", path.slice(2)) : isAbsolute13(path) ? path : join74(dirname29(view.path), path));
|
|
104851
|
+
}
|
|
104852
|
+
}
|
|
104853
|
+
setSkillSourceProvenance(config.skills, {
|
|
104854
|
+
kind: owner?.scope === "user" ? "user" : "project-auto",
|
|
104855
|
+
selectedRoot: owner ? dirname29(owner.path) : directory,
|
|
104856
|
+
projectRoot: detectWorktreePath(directory) ?? directory,
|
|
104857
|
+
userRoots
|
|
104858
|
+
});
|
|
104859
|
+
}
|
|
104414
104860
|
return {
|
|
104415
104861
|
valid: messages.length === 0,
|
|
104416
104862
|
messages,
|
|
@@ -104434,7 +104880,7 @@ var import_picocolors11 = __toESM(require_picocolors(), 1);
|
|
|
104434
104880
|
// packages/omo-opencode/src/cli/run/opencode-binary-resolver.ts
|
|
104435
104881
|
init_bun_which_shim();
|
|
104436
104882
|
init_spawn_with_windows_hide();
|
|
104437
|
-
import { delimiter as delimiter2, dirname as
|
|
104883
|
+
import { delimiter as delimiter2, dirname as dirname30, posix as posix11, win32 as win328 } from "node:path";
|
|
104438
104884
|
var OPENCODE_COMMANDS = ["opencode", "opencode-desktop"];
|
|
104439
104885
|
var WINDOWS_SUFFIXES = ["", ".exe", ".cmd", ".bat", ".ps1"];
|
|
104440
104886
|
function getCommandCandidates(platform) {
|
|
@@ -104444,8 +104890,8 @@ function getCommandCandidates(platform) {
|
|
|
104444
104890
|
}
|
|
104445
104891
|
function getPathTools(platform) {
|
|
104446
104892
|
if (platform === "win32")
|
|
104447
|
-
return
|
|
104448
|
-
return
|
|
104893
|
+
return win328;
|
|
104894
|
+
return posix11;
|
|
104449
104895
|
}
|
|
104450
104896
|
function collectCandidateBinaryPaths(pathEnv, which = bunWhich, platform = process.platform) {
|
|
104451
104897
|
const seen = new Set;
|
|
@@ -104492,7 +104938,7 @@ async function findWorkingOpencodeBinary(pathEnv = process.env.PATH, probe = can
|
|
|
104492
104938
|
return null;
|
|
104493
104939
|
}
|
|
104494
104940
|
function buildPathWithBinaryFirst(pathEnv, binaryPath) {
|
|
104495
|
-
const preferredDir =
|
|
104941
|
+
const preferredDir = dirname30(binaryPath);
|
|
104496
104942
|
const existing = (pathEnv ?? "").split(delimiter2).filter((entry) => entry.length > 0 && entry !== preferredDir);
|
|
104497
104943
|
return [preferredDir, ...existing].join(delimiter2);
|
|
104498
104944
|
}
|
|
@@ -105099,9 +105545,9 @@ function buildTaskRef(section, label) {
|
|
|
105099
105545
|
};
|
|
105100
105546
|
}
|
|
105101
105547
|
// packages/boulder-state/src/top-level-task.ts
|
|
105102
|
-
import { existsSync as
|
|
105548
|
+
import { existsSync as existsSync38, readFileSync as readFileSync19 } from "node:fs";
|
|
105103
105549
|
function readCurrentTopLevelTask(planPath) {
|
|
105104
|
-
if (!
|
|
105550
|
+
if (!existsSync38(planPath)) {
|
|
105105
105551
|
return null;
|
|
105106
105552
|
}
|
|
105107
105553
|
try {
|
|
@@ -105112,13 +105558,13 @@ function readCurrentTopLevelTask(planPath) {
|
|
|
105112
105558
|
}
|
|
105113
105559
|
}
|
|
105114
105560
|
// packages/boulder-state/src/storage/path.ts
|
|
105115
|
-
import { existsSync as
|
|
105116
|
-
import { isAbsolute as
|
|
105561
|
+
import { existsSync as existsSync39 } from "node:fs";
|
|
105562
|
+
import { isAbsolute as isAbsolute14, join as join75, relative as relative8, resolve as resolve24 } from "node:path";
|
|
105117
105563
|
function getBoulderFilePath(directory) {
|
|
105118
|
-
return
|
|
105564
|
+
return join75(directory, BOULDER_DIR, BOULDER_FILE);
|
|
105119
105565
|
}
|
|
105120
105566
|
function resolveTrackedPath(baseDirectory, trackedPath) {
|
|
105121
|
-
return
|
|
105567
|
+
return isAbsolute14(trackedPath) ? resolve24(trackedPath) : resolve24(baseDirectory, trackedPath);
|
|
105122
105568
|
}
|
|
105123
105569
|
function resolveBoulderPlanPath(directory, state) {
|
|
105124
105570
|
const absolutePlanPath = resolveTrackedPath(directory, state.active_plan);
|
|
@@ -105126,22 +105572,22 @@ function resolveBoulderPlanPath(directory, state) {
|
|
|
105126
105572
|
if (!worktreePath) {
|
|
105127
105573
|
return absolutePlanPath;
|
|
105128
105574
|
}
|
|
105129
|
-
const absoluteDirectory =
|
|
105575
|
+
const absoluteDirectory = resolve24(directory);
|
|
105130
105576
|
const relativePlanPath = relative8(absoluteDirectory, absolutePlanPath);
|
|
105131
|
-
if (relativePlanPath.length === 0 || relativePlanPath.startsWith("..") ||
|
|
105577
|
+
if (relativePlanPath.length === 0 || relativePlanPath.startsWith("..") || isAbsolute14(relativePlanPath)) {
|
|
105132
105578
|
return absolutePlanPath;
|
|
105133
105579
|
}
|
|
105134
105580
|
const absoluteWorktreePath = resolveTrackedPath(directory, worktreePath);
|
|
105135
|
-
const worktreePlanPath =
|
|
105136
|
-
return
|
|
105581
|
+
const worktreePlanPath = resolve24(absoluteWorktreePath, relativePlanPath);
|
|
105582
|
+
return existsSync39(worktreePlanPath) ? worktreePlanPath : absolutePlanPath;
|
|
105137
105583
|
}
|
|
105138
105584
|
function resolveBoulderPlanPathForWork(directory, work) {
|
|
105139
105585
|
return resolveBoulderPlanPath(directory, work);
|
|
105140
105586
|
}
|
|
105141
105587
|
// packages/boulder-state/src/storage/plan-progress.ts
|
|
105142
|
-
import { existsSync as
|
|
105588
|
+
import { existsSync as existsSync40, readFileSync as readFileSync20, readdirSync as readdirSync9, statSync as statSync5 } from "node:fs";
|
|
105143
105589
|
function getPlanProgress(planPath) {
|
|
105144
|
-
if (!
|
|
105590
|
+
if (!existsSync40(planPath)) {
|
|
105145
105591
|
return { total: 0, completed: 0, isComplete: false };
|
|
105146
105592
|
}
|
|
105147
105593
|
try {
|
|
@@ -105224,10 +105670,10 @@ function selectMirrorWork(state) {
|
|
|
105224
105670
|
return sorted[0] ?? null;
|
|
105225
105671
|
}
|
|
105226
105672
|
// packages/boulder-state/src/storage/read-state.ts
|
|
105227
|
-
import { existsSync as
|
|
105673
|
+
import { existsSync as existsSync41, readFileSync as readFileSync21 } from "node:fs";
|
|
105228
105674
|
function readBoulderState(directory) {
|
|
105229
105675
|
const filePath = getBoulderFilePath(directory);
|
|
105230
|
-
if (!
|
|
105676
|
+
if (!existsSync41(filePath)) {
|
|
105231
105677
|
return null;
|
|
105232
105678
|
}
|
|
105233
105679
|
try {
|
|
@@ -105299,14 +105745,14 @@ init_state();
|
|
|
105299
105745
|
// packages/omo-opencode/src/features/run-continuation-state/constants.ts
|
|
105300
105746
|
var CONTINUATION_MARKER_DIR = ".omo/run-continuation";
|
|
105301
105747
|
// packages/omo-opencode/src/features/run-continuation-state/storage.ts
|
|
105302
|
-
import { existsSync as
|
|
105303
|
-
import { join as
|
|
105748
|
+
import { existsSync as existsSync42, mkdirSync as mkdirSync14, readFileSync as readFileSync22, rmSync as rmSync6, writeFileSync as writeFileSync8 } from "node:fs";
|
|
105749
|
+
import { join as join76 } from "node:path";
|
|
105304
105750
|
function getMarkerPath(directory, sessionID) {
|
|
105305
|
-
return
|
|
105751
|
+
return join76(directory, CONTINUATION_MARKER_DIR, `${sessionID}.json`);
|
|
105306
105752
|
}
|
|
105307
105753
|
function readContinuationMarker(directory, sessionID) {
|
|
105308
105754
|
const markerPath = getMarkerPath(directory, sessionID);
|
|
105309
|
-
if (!
|
|
105755
|
+
if (!existsSync42(markerPath))
|
|
105310
105756
|
return null;
|
|
105311
105757
|
try {
|
|
105312
105758
|
const raw = readFileSync22(markerPath, "utf-8");
|
|
@@ -105375,7 +105821,7 @@ async function isSessionInBoulderLineage(input) {
|
|
|
105375
105821
|
init_shared();
|
|
105376
105822
|
init_compaction_marker();
|
|
105377
105823
|
import { readFileSync as readFileSync23, readdirSync as readdirSync10 } from "node:fs";
|
|
105378
|
-
import { join as
|
|
105824
|
+
import { join as join77 } from "node:path";
|
|
105379
105825
|
var defaultSessionLastAgentDeps = {
|
|
105380
105826
|
getMessageDir,
|
|
105381
105827
|
isSqliteBackend,
|
|
@@ -105435,7 +105881,7 @@ async function getLastAgentFromSession(sessionID, client, deps = {}) {
|
|
|
105435
105881
|
try {
|
|
105436
105882
|
const messages = readdirSync10(messageDir).filter((fileName) => fileName.endsWith(".json")).map((fileName) => {
|
|
105437
105883
|
try {
|
|
105438
|
-
const content = readFileSync23(
|
|
105884
|
+
const content = readFileSync23(join77(messageDir, fileName), "utf-8");
|
|
105439
105885
|
const parsed = JSON.parse(content);
|
|
105440
105886
|
return {
|
|
105441
105887
|
fileName,
|
|
@@ -105478,8 +105924,8 @@ init_agent_display_names();
|
|
|
105478
105924
|
|
|
105479
105925
|
// packages/omo-opencode/src/hooks/ralph-loop/storage.ts
|
|
105480
105926
|
init_frontmatter2();
|
|
105481
|
-
import { existsSync as
|
|
105482
|
-
import { dirname as
|
|
105927
|
+
import { existsSync as existsSync43, readFileSync as readFileSync24, writeFileSync as writeFileSync9, unlinkSync as unlinkSync6, mkdirSync as mkdirSync15 } from "node:fs";
|
|
105928
|
+
import { dirname as dirname31, join as join78 } from "node:path";
|
|
105483
105929
|
|
|
105484
105930
|
// packages/omo-opencode/src/hooks/ralph-loop/constants.ts
|
|
105485
105931
|
var DEFAULT_STATE_FILE = ".omo/ralph-loop.local.md";
|
|
@@ -105488,11 +105934,11 @@ var DEFAULT_COMPLETION_PROMISE = "DONE";
|
|
|
105488
105934
|
|
|
105489
105935
|
// packages/omo-opencode/src/hooks/ralph-loop/storage.ts
|
|
105490
105936
|
function getStateFilePath(directory, customPath) {
|
|
105491
|
-
return customPath ?
|
|
105937
|
+
return customPath ? join78(directory, customPath) : join78(directory, DEFAULT_STATE_FILE);
|
|
105492
105938
|
}
|
|
105493
105939
|
function readState(directory, customPath) {
|
|
105494
105940
|
const filePath = getStateFilePath(directory, customPath);
|
|
105495
|
-
if (!
|
|
105941
|
+
if (!existsSync43(filePath)) {
|
|
105496
105942
|
return null;
|
|
105497
105943
|
}
|
|
105498
105944
|
try {
|
|
@@ -106630,14 +107076,14 @@ async function getLocalVersion(options = {}) {
|
|
|
106630
107076
|
}
|
|
106631
107077
|
}
|
|
106632
107078
|
// packages/omo-opencode/src/cli/doctor/checks/system.ts
|
|
106633
|
-
import { existsSync as
|
|
107079
|
+
import { existsSync as existsSync54, readFileSync as readFileSync34 } from "node:fs";
|
|
106634
107080
|
|
|
106635
107081
|
// packages/omo-opencode/src/cli/doctor/checks/system-binary.ts
|
|
106636
107082
|
init_extract_semver();
|
|
106637
107083
|
init_bun_which_shim();
|
|
106638
|
-
import { existsSync as
|
|
106639
|
-
import { homedir as
|
|
106640
|
-
import { join as
|
|
107084
|
+
import { existsSync as existsSync51, accessSync as accessSync4, constants as constants12 } from "node:fs";
|
|
107085
|
+
import { homedir as homedir19 } from "node:os";
|
|
107086
|
+
import { join as join85 } from "node:path";
|
|
106641
107087
|
|
|
106642
107088
|
// packages/omo-opencode/src/cli/doctor/framework/spawn-with-timeout.ts
|
|
106643
107089
|
init_spawn_with_windows_hide();
|
|
@@ -106724,22 +107170,22 @@ function isExecutable2(path) {
|
|
|
106724
107170
|
}
|
|
106725
107171
|
}
|
|
106726
107172
|
function getDesktopAppPaths(platform) {
|
|
106727
|
-
const home =
|
|
107173
|
+
const home = homedir19();
|
|
106728
107174
|
switch (platform) {
|
|
106729
107175
|
case "darwin":
|
|
106730
107176
|
return [
|
|
106731
107177
|
"/Applications/OpenCode.app/Contents/MacOS/OpenCode",
|
|
106732
|
-
|
|
107178
|
+
join85(home, "Applications", "OpenCode.app", "Contents", "MacOS", "OpenCode")
|
|
106733
107179
|
];
|
|
106734
107180
|
case "win32": {
|
|
106735
107181
|
const programFiles = process.env.ProgramFiles;
|
|
106736
107182
|
const localAppData = process.env.LOCALAPPDATA;
|
|
106737
107183
|
const paths = [];
|
|
106738
107184
|
if (programFiles) {
|
|
106739
|
-
paths.push(
|
|
107185
|
+
paths.push(join85(programFiles, "OpenCode", "OpenCode.exe"));
|
|
106740
107186
|
}
|
|
106741
107187
|
if (localAppData) {
|
|
106742
|
-
paths.push(
|
|
107188
|
+
paths.push(join85(localAppData, "OpenCode", "OpenCode.exe"));
|
|
106743
107189
|
}
|
|
106744
107190
|
return paths;
|
|
106745
107191
|
}
|
|
@@ -106747,8 +107193,8 @@ function getDesktopAppPaths(platform) {
|
|
|
106747
107193
|
return [
|
|
106748
107194
|
"/usr/bin/opencode",
|
|
106749
107195
|
"/usr/lib/opencode/opencode",
|
|
106750
|
-
|
|
106751
|
-
|
|
107196
|
+
join85(home, "Applications", "opencode-desktop-linux-x86_64.AppImage"),
|
|
107197
|
+
join85(home, "Applications", "opencode-desktop-linux-aarch64.AppImage")
|
|
106752
107198
|
];
|
|
106753
107199
|
default:
|
|
106754
107200
|
return [];
|
|
@@ -106760,7 +107206,7 @@ function buildVersionCommand(binaryPath, platform) {
|
|
|
106760
107206
|
}
|
|
106761
107207
|
return [binaryPath, "--version"];
|
|
106762
107208
|
}
|
|
106763
|
-
function findDesktopBinary(platform = process.platform, checkExists =
|
|
107209
|
+
function findDesktopBinary(platform = process.platform, checkExists = existsSync51) {
|
|
106764
107210
|
for (const desktopPath of getDesktopAppPaths(platform)) {
|
|
106765
107211
|
if (checkExists(desktopPath)) {
|
|
106766
107212
|
return { binary: "opencode", path: desktopPath };
|
|
@@ -106768,7 +107214,7 @@ function findDesktopBinary(platform = process.platform, checkExists = existsSync
|
|
|
106768
107214
|
}
|
|
106769
107215
|
return null;
|
|
106770
107216
|
}
|
|
106771
|
-
async function findOpenCodeBinary(platform = process.platform, checkExists =
|
|
107217
|
+
async function findOpenCodeBinary(platform = process.platform, checkExists = existsSync51) {
|
|
106772
107218
|
for (const binary of OPENCODE_BINARIES2) {
|
|
106773
107219
|
const path = bunWhich(binary);
|
|
106774
107220
|
if (path && checkExists(path)) {
|
|
@@ -106780,7 +107226,7 @@ async function findOpenCodeBinary(platform = process.platform, checkExists = exi
|
|
|
106780
107226
|
const candidates = getCommandCandidates2(platform);
|
|
106781
107227
|
for (const entry of pathEnv.split(delimiter).filter(Boolean)) {
|
|
106782
107228
|
for (const command of candidates) {
|
|
106783
|
-
const fullPath =
|
|
107229
|
+
const fullPath = join85(entry, command);
|
|
106784
107230
|
if (checkExists(fullPath) && isExecutable2(fullPath)) {
|
|
106785
107231
|
return { binary: command, path: fullPath };
|
|
106786
107232
|
}
|
|
@@ -106826,12 +107272,12 @@ function compareVersions3(current, minimum) {
|
|
|
106826
107272
|
|
|
106827
107273
|
// packages/omo-opencode/src/cli/doctor/checks/system-plugin.ts
|
|
106828
107274
|
init_shared();
|
|
106829
|
-
import { existsSync as
|
|
107275
|
+
import { existsSync as existsSync52, readFileSync as readFileSync32 } from "node:fs";
|
|
106830
107276
|
function detectConfigPath() {
|
|
106831
107277
|
const paths = getOpenCodeConfigPaths({ binary: "opencode", version: null });
|
|
106832
|
-
if (
|
|
107278
|
+
if (existsSync52(paths.configJsonc))
|
|
106833
107279
|
return paths.configJsonc;
|
|
106834
|
-
if (
|
|
107280
|
+
if (existsSync52(paths.configJson))
|
|
106835
107281
|
return paths.configJson;
|
|
106836
107282
|
return null;
|
|
106837
107283
|
}
|
|
@@ -106921,36 +107367,36 @@ init_file_utils2();
|
|
|
106921
107367
|
init_checker();
|
|
106922
107368
|
init_auto_update_checker();
|
|
106923
107369
|
init_package_json_locator();
|
|
106924
|
-
import { existsSync as
|
|
107370
|
+
import { existsSync as existsSync53, readFileSync as readFileSync33, readdirSync as readdirSync12 } from "node:fs";
|
|
106925
107371
|
import { createRequire as createRequire2 } from "node:module";
|
|
106926
|
-
import { homedir as
|
|
106927
|
-
import { join as
|
|
107372
|
+
import { homedir as homedir20 } from "node:os";
|
|
107373
|
+
import { join as join86 } from "node:path";
|
|
106928
107374
|
import { fileURLToPath as fileURLToPath6 } from "node:url";
|
|
106929
107375
|
init_shared();
|
|
106930
107376
|
function getPlatformDefaultCacheDir(platform = process.platform) {
|
|
106931
107377
|
if (platform === "darwin")
|
|
106932
|
-
return
|
|
107378
|
+
return join86(homedir20(), "Library", "Caches");
|
|
106933
107379
|
if (platform === "win32")
|
|
106934
|
-
return process.env.LOCALAPPDATA ??
|
|
106935
|
-
return
|
|
107380
|
+
return process.env.LOCALAPPDATA ?? join86(homedir20(), "AppData", "Local");
|
|
107381
|
+
return join86(homedir20(), ".cache");
|
|
106936
107382
|
}
|
|
106937
107383
|
function resolveOpenCodeCacheDir() {
|
|
106938
107384
|
const xdgCacheHome = process.env.XDG_CACHE_HOME;
|
|
106939
107385
|
if (xdgCacheHome)
|
|
106940
|
-
return
|
|
107386
|
+
return join86(xdgCacheHome, "opencode");
|
|
106941
107387
|
const fromShared = getOpenCodeCacheDir();
|
|
106942
|
-
const platformDefault =
|
|
106943
|
-
if (
|
|
107388
|
+
const platformDefault = join86(getPlatformDefaultCacheDir(), "opencode");
|
|
107389
|
+
if (existsSync53(fromShared) || !existsSync53(platformDefault))
|
|
106944
107390
|
return fromShared;
|
|
106945
107391
|
return platformDefault;
|
|
106946
107392
|
}
|
|
106947
107393
|
function resolveExistingDir(dirPath) {
|
|
106948
|
-
if (!
|
|
107394
|
+
if (!existsSync53(dirPath))
|
|
106949
107395
|
return dirPath;
|
|
106950
107396
|
return resolveSymlink(dirPath);
|
|
106951
107397
|
}
|
|
106952
107398
|
function readPackageJson(filePath) {
|
|
106953
|
-
if (!
|
|
107399
|
+
if (!existsSync53(filePath))
|
|
106954
107400
|
return null;
|
|
106955
107401
|
try {
|
|
106956
107402
|
const content = readFileSync33(filePath, "utf-8");
|
|
@@ -106971,26 +107417,26 @@ function normalizeVersion(value) {
|
|
|
106971
107417
|
function createPackageCandidates(rootDir) {
|
|
106972
107418
|
return ACCEPTED_PACKAGE_NAMES.map((packageName) => ({
|
|
106973
107419
|
packageName,
|
|
106974
|
-
installedPackagePath:
|
|
107420
|
+
installedPackagePath: join86(rootDir, "node_modules", packageName, "package.json")
|
|
106975
107421
|
}));
|
|
106976
107422
|
}
|
|
106977
107423
|
function createTaggedInstallCandidates(rootDir) {
|
|
106978
|
-
const packagesDir =
|
|
106979
|
-
if (!
|
|
107424
|
+
const packagesDir = join86(rootDir, "packages");
|
|
107425
|
+
if (!existsSync53(packagesDir))
|
|
106980
107426
|
return [];
|
|
106981
107427
|
const candidates = [];
|
|
106982
107428
|
for (const entryName of readdirSync12(packagesDir).sort()) {
|
|
106983
107429
|
const packageName = ACCEPTED_PACKAGE_NAMES.find((name) => entryName.startsWith(`${name}@`));
|
|
106984
107430
|
if (packageName === undefined)
|
|
106985
107431
|
continue;
|
|
106986
|
-
const installDir =
|
|
107432
|
+
const installDir = join86(packagesDir, entryName);
|
|
106987
107433
|
candidates.push({
|
|
106988
107434
|
cacheDir: installDir,
|
|
106989
|
-
cachePackagePath:
|
|
107435
|
+
cachePackagePath: join86(installDir, "package.json"),
|
|
106990
107436
|
packageCandidates: [
|
|
106991
107437
|
{
|
|
106992
107438
|
packageName,
|
|
106993
|
-
installedPackagePath:
|
|
107439
|
+
installedPackagePath: join86(installDir, "node_modules", packageName, "package.json")
|
|
106994
107440
|
}
|
|
106995
107441
|
]
|
|
106996
107442
|
});
|
|
@@ -106998,7 +107444,7 @@ function createTaggedInstallCandidates(rootDir) {
|
|
|
106998
107444
|
return candidates;
|
|
106999
107445
|
}
|
|
107000
107446
|
function selectInstalledPackage(candidate) {
|
|
107001
|
-
return candidate.packageCandidates.find((packageCandidate) =>
|
|
107447
|
+
return candidate.packageCandidates.find((packageCandidate) => existsSync53(packageCandidate.installedPackagePath)) ?? candidate.packageCandidates[0];
|
|
107002
107448
|
}
|
|
107003
107449
|
function getExpectedVersion(cachePackage, packageName) {
|
|
107004
107450
|
return normalizeVersion(cachePackage?.dependencies?.[packageName]) ?? normalizeVersion(cachePackage?.dependencies?.[PACKAGE_NAME]);
|
|
@@ -107009,7 +107455,7 @@ function resolveInstalledPackageJsonPath() {
|
|
|
107009
107455
|
for (const packageName of ACCEPTED_PACKAGE_NAMES) {
|
|
107010
107456
|
try {
|
|
107011
107457
|
const packageJsonPath = require2.resolve(`${packageName}/package.json`);
|
|
107012
|
-
if (
|
|
107458
|
+
if (existsSync53(packageJsonPath)) {
|
|
107013
107459
|
return { packageName, packageJsonPath };
|
|
107014
107460
|
}
|
|
107015
107461
|
} catch {
|
|
@@ -107035,22 +107481,22 @@ function getLoadedPluginVersion() {
|
|
|
107035
107481
|
const candidates = [
|
|
107036
107482
|
{
|
|
107037
107483
|
cacheDir: configDir,
|
|
107038
|
-
cachePackagePath:
|
|
107484
|
+
cachePackagePath: join86(configDir, "package.json"),
|
|
107039
107485
|
packageCandidates: createPackageCandidates(configDir)
|
|
107040
107486
|
},
|
|
107041
107487
|
...createTaggedInstallCandidates(configDir),
|
|
107042
107488
|
{
|
|
107043
107489
|
cacheDir,
|
|
107044
|
-
cachePackagePath:
|
|
107490
|
+
cachePackagePath: join86(cacheDir, "package.json"),
|
|
107045
107491
|
packageCandidates: createPackageCandidates(cacheDir)
|
|
107046
107492
|
},
|
|
107047
107493
|
...createTaggedInstallCandidates(cacheDir)
|
|
107048
107494
|
];
|
|
107049
|
-
const selectedCandidate = candidates.find((candidate) => candidate.packageCandidates.some((packageCandidate) =>
|
|
107495
|
+
const selectedCandidate = candidates.find((candidate) => candidate.packageCandidates.some((packageCandidate) => existsSync53(packageCandidate.installedPackagePath))) ?? candidates[0];
|
|
107050
107496
|
const { cacheDir: selectedDir, cachePackagePath } = selectedCandidate;
|
|
107051
107497
|
const selectedPackage = selectInstalledPackage(selectedCandidate);
|
|
107052
107498
|
const candidateInstalledPath = selectedPackage.installedPackagePath;
|
|
107053
|
-
const candidateExists =
|
|
107499
|
+
const candidateExists = existsSync53(candidateInstalledPath);
|
|
107054
107500
|
const resolvedFallback = candidateExists ? null : resolveInstalledPackageJsonPath();
|
|
107055
107501
|
const installedPackagePath = resolvedFallback?.packageJsonPath ?? candidateInstalledPath;
|
|
107056
107502
|
const resolvedPackageName = resolvedFallback?.packageName ?? selectedPackage.packageName;
|
|
@@ -107086,7 +107532,7 @@ var defaultDeps5 = {
|
|
|
107086
107532
|
getLoadedPluginVersion,
|
|
107087
107533
|
getLatestPluginVersion,
|
|
107088
107534
|
getSuggestedInstallTag,
|
|
107089
|
-
configExists:
|
|
107535
|
+
configExists: existsSync54,
|
|
107090
107536
|
readConfigFile: (path) => readFileSync34(path, "utf-8"),
|
|
107091
107537
|
parseConfigContent: (content) => parseJsonc(content)
|
|
107092
107538
|
};
|
|
@@ -107232,23 +107678,23 @@ async function checkSystem(deps = defaultDeps5) {
|
|
|
107232
107678
|
|
|
107233
107679
|
// packages/omo-opencode/src/cli/doctor/checks/model-resolution-cache.ts
|
|
107234
107680
|
init_shared();
|
|
107235
|
-
import { existsSync as
|
|
107236
|
-
import { homedir as
|
|
107237
|
-
import { join as
|
|
107681
|
+
import { existsSync as existsSync55, readFileSync as readFileSync35 } from "node:fs";
|
|
107682
|
+
import { homedir as homedir21 } from "node:os";
|
|
107683
|
+
import { join as join87 } from "node:path";
|
|
107238
107684
|
function getUserConfigDir2() {
|
|
107239
107685
|
const xdgConfig = process.env.XDG_CONFIG_HOME;
|
|
107240
107686
|
if (xdgConfig)
|
|
107241
|
-
return
|
|
107242
|
-
return
|
|
107687
|
+
return join87(xdgConfig, "opencode");
|
|
107688
|
+
return join87(homedir21(), ".config", "opencode");
|
|
107243
107689
|
}
|
|
107244
107690
|
function loadCustomProviderNames() {
|
|
107245
107691
|
const configDir = getUserConfigDir2();
|
|
107246
107692
|
const candidatePaths = [
|
|
107247
|
-
|
|
107248
|
-
|
|
107693
|
+
join87(configDir, "opencode.json"),
|
|
107694
|
+
join87(configDir, "opencode.jsonc")
|
|
107249
107695
|
];
|
|
107250
107696
|
for (const configPath of candidatePaths) {
|
|
107251
|
-
if (!
|
|
107697
|
+
if (!existsSync55(configPath))
|
|
107252
107698
|
continue;
|
|
107253
107699
|
try {
|
|
107254
107700
|
const content = readFileSync35(configPath, "utf-8");
|
|
@@ -107266,9 +107712,9 @@ function loadCustomProviderNames() {
|
|
|
107266
107712
|
return [];
|
|
107267
107713
|
}
|
|
107268
107714
|
function loadAvailableModelsFromCache() {
|
|
107269
|
-
const cacheFile =
|
|
107715
|
+
const cacheFile = join87(getOpenCodeCacheDir(), "models.json");
|
|
107270
107716
|
const customProviders = loadCustomProviderNames();
|
|
107271
|
-
if (!
|
|
107717
|
+
if (!existsSync55(cacheFile)) {
|
|
107272
107718
|
if (customProviders.length > 0) {
|
|
107273
107719
|
return { providers: customProviders, modelCount: 0, cacheExists: true };
|
|
107274
107720
|
}
|
|
@@ -107328,7 +107774,7 @@ function loadOmoConfig2() {
|
|
|
107328
107774
|
|
|
107329
107775
|
// packages/omo-opencode/src/cli/doctor/checks/model-resolution-details.ts
|
|
107330
107776
|
init_shared();
|
|
107331
|
-
import { join as
|
|
107777
|
+
import { join as join88 } from "node:path";
|
|
107332
107778
|
|
|
107333
107779
|
// packages/omo-opencode/src/cli/doctor/checks/model-resolution-variant.ts
|
|
107334
107780
|
function formatModelWithVariant(model, variant) {
|
|
@@ -107370,7 +107816,7 @@ function formatCapabilityResolutionLabel(mode) {
|
|
|
107370
107816
|
}
|
|
107371
107817
|
function buildModelResolutionDetails(options) {
|
|
107372
107818
|
const details = [];
|
|
107373
|
-
const cacheFile =
|
|
107819
|
+
const cacheFile = join88(getOpenCodeCacheDir(), "models.json");
|
|
107374
107820
|
details.push("═══ Available Models (from cache) ═══");
|
|
107375
107821
|
details.push("");
|
|
107376
107822
|
if (options.available.cacheExists) {
|
|
@@ -107526,9 +107972,9 @@ async function checkModels() {
|
|
|
107526
107972
|
|
|
107527
107973
|
// packages/omo-opencode/src/cli/doctor/checks/legacy-config-leftovers.ts
|
|
107528
107974
|
init_config_migration();
|
|
107529
|
-
import { posix as
|
|
107975
|
+
import { posix as posix12, win32 as win329 } from "node:path";
|
|
107530
107976
|
function findLegacyConfigLeftovers(options) {
|
|
107531
|
-
const pathOperations = options.pathOperations ?? (process.platform === "win32" ?
|
|
107977
|
+
const pathOperations = options.pathOperations ?? (process.platform === "win32" ? win329 : posix12);
|
|
107532
107978
|
const paths = createLegacyConfigMigrationPlans({
|
|
107533
107979
|
cwd: options.cwd,
|
|
107534
107980
|
environment: options.environment ?? process.env,
|
|
@@ -107717,8 +108163,8 @@ async function checkBrowserProvider() {
|
|
|
107717
108163
|
init_src4();
|
|
107718
108164
|
init_main();
|
|
107719
108165
|
init_config_migration();
|
|
107720
|
-
import { existsSync as
|
|
107721
|
-
import { join as
|
|
108166
|
+
import { existsSync as existsSync56, readFileSync as readFileSync36 } from "node:fs";
|
|
108167
|
+
import { join as join89 } from "node:path";
|
|
107722
108168
|
var CANONICAL_REPLACEMENT = new Map([
|
|
107723
108169
|
["variant", "reasoning"],
|
|
107724
108170
|
["reasoningEffort", "reasoning"],
|
|
@@ -107779,13 +108225,13 @@ function userConfigPaths() {
|
|
|
107779
108225
|
const home = process.env.HOME ?? process.env.USERPROFILE;
|
|
107780
108226
|
if (home === undefined || home.length === 0)
|
|
107781
108227
|
return [];
|
|
107782
|
-
return [
|
|
108228
|
+
return [join89(home, ".omo", "omo.jsonc"), join89(home, ".omo", "omo.json")];
|
|
107783
108229
|
}
|
|
107784
108230
|
async function checkDeprecatedReasoningKeys() {
|
|
107785
108231
|
const issues = [];
|
|
107786
108232
|
const scanned = [];
|
|
107787
108233
|
for (const configPath of userConfigPaths()) {
|
|
107788
|
-
if (!
|
|
108234
|
+
if (!existsSync56(configPath))
|
|
107789
108235
|
continue;
|
|
107790
108236
|
scanned.push(configPath);
|
|
107791
108237
|
const parsed = parse2(readFileSync36(configPath, "utf-8"));
|
|
@@ -107801,12 +108247,12 @@ async function checkDeprecatedReasoningKeys() {
|
|
|
107801
108247
|
}
|
|
107802
108248
|
|
|
107803
108249
|
// packages/omo-opencode/src/cli/doctor/checks/dependencies.ts
|
|
107804
|
-
import { existsSync as
|
|
108250
|
+
import { existsSync as existsSync57 } from "node:fs";
|
|
107805
108251
|
import { createRequire as createRequire4 } from "node:module";
|
|
107806
|
-
import { homedir as
|
|
107807
|
-
import { join as
|
|
108252
|
+
import { homedir as homedir23 } from "node:os";
|
|
108253
|
+
import { join as join94 } from "node:path";
|
|
107808
108254
|
// packages/comment-checker-core/src/release.ts
|
|
107809
|
-
import { join as
|
|
108255
|
+
import { join as join90 } from "node:path";
|
|
107810
108256
|
var COMMENT_CHECKER_RELEASE_VERSION = "0.8.0";
|
|
107811
108257
|
function commentCheckerBinaryName(platform) {
|
|
107812
108258
|
return platform === "win32" ? "comment-checker.exe" : "comment-checker";
|
|
@@ -107814,26 +108260,26 @@ function commentCheckerBinaryName(platform) {
|
|
|
107814
108260
|
function commentCheckerCacheDir(input) {
|
|
107815
108261
|
if (input.platform === "win32") {
|
|
107816
108262
|
const localAppData = input.env.LOCALAPPDATA || input.env.APPDATA;
|
|
107817
|
-
const base = localAppData ||
|
|
107818
|
-
return
|
|
108263
|
+
const base = localAppData || join90(input.homedir, "AppData", "Local");
|
|
108264
|
+
return join90(base, input.cacheDirName, "bin");
|
|
107819
108265
|
}
|
|
107820
|
-
const base = input.env.XDG_CACHE_HOME ||
|
|
107821
|
-
return
|
|
108266
|
+
const base = input.env.XDG_CACHE_HOME || join90(input.homedir, ".cache");
|
|
108267
|
+
return join90(base, input.cacheDirName, "bin");
|
|
107822
108268
|
}
|
|
107823
108269
|
// packages/comment-checker-core/src/cached-release.ts
|
|
107824
108270
|
import { readFileSync as readFileSync37, writeFileSync as writeFileSync12 } from "node:fs";
|
|
107825
|
-
import { join as
|
|
108271
|
+
import { join as join91 } from "node:path";
|
|
107826
108272
|
var COMMENT_CHECKER_VERSION_MARKER = "comment-checker.version";
|
|
107827
108273
|
function isCachedCommentCheckerCurrent(cacheDir, readFile = (path) => readFileSync37(path, "utf-8")) {
|
|
107828
108274
|
try {
|
|
107829
|
-
return readFile(
|
|
108275
|
+
return readFile(join91(cacheDir, COMMENT_CHECKER_VERSION_MARKER)).trim() === COMMENT_CHECKER_RELEASE_VERSION;
|
|
107830
108276
|
} catch {
|
|
107831
108277
|
return false;
|
|
107832
108278
|
}
|
|
107833
108279
|
}
|
|
107834
108280
|
// packages/comment-checker-core/src/package-binary.ts
|
|
107835
108281
|
import { createRequire as createRequire3 } from "node:module";
|
|
107836
|
-
import { dirname as
|
|
108282
|
+
import { dirname as dirname36, join as join92 } from "node:path";
|
|
107837
108283
|
var COMMENT_CHECKER_PACKAGE_NAME = "@code-yeongyu/comment-checker";
|
|
107838
108284
|
function isModuleResolutionMiss(error) {
|
|
107839
108285
|
return error instanceof Error || typeof error === "object" && error !== null && "name" in error && error.name === "ResolveMessage";
|
|
@@ -107841,18 +108287,18 @@ function isModuleResolutionMiss(error) {
|
|
|
107841
108287
|
function findCommentCheckerPackageBinary(input) {
|
|
107842
108288
|
const packageName = input.packageName ?? COMMENT_CHECKER_PACKAGE_NAME;
|
|
107843
108289
|
const platformKey = `${input.platform ?? process.platform}-${input.arch ?? process.arch}`;
|
|
107844
|
-
const packageDir =
|
|
108290
|
+
const packageDir = dirname36(input.packageJsonPath);
|
|
107845
108291
|
const candidates = [
|
|
107846
108292
|
resolvePlatformPackageBinary(input.packageJsonPath, `${packageName}-${platformKey}`, input.binaryName),
|
|
107847
|
-
|
|
107848
|
-
|
|
108293
|
+
join92(packageDir, "vendor", platformKey, input.binaryName),
|
|
108294
|
+
join92(packageDir, "bin", input.binaryName)
|
|
107849
108295
|
];
|
|
107850
108296
|
return candidates.find((candidate) => candidate !== null && input.existsSync(candidate)) ?? null;
|
|
107851
108297
|
}
|
|
107852
108298
|
function resolvePlatformPackageBinary(packageJsonPath, platformPackageName, binaryName) {
|
|
107853
108299
|
try {
|
|
107854
108300
|
const manifestPath = createRequire3(packageJsonPath).resolve(`${platformPackageName}/package.json`);
|
|
107855
|
-
return
|
|
108301
|
+
return join92(dirname36(manifestPath), "bin", binaryName);
|
|
107856
108302
|
} catch (error) {
|
|
107857
108303
|
if (isModuleResolutionMiss(error))
|
|
107858
108304
|
return null;
|
|
@@ -107863,18 +108309,18 @@ function resolvePlatformPackageBinary(packageJsonPath, platformPackageName, bina
|
|
|
107863
108309
|
init_src();
|
|
107864
108310
|
|
|
107865
108311
|
// packages/omo-opencode/src/hooks/comment-checker/downloader.ts
|
|
107866
|
-
import { join as
|
|
107867
|
-
import { homedir as
|
|
108312
|
+
import { join as join93 } from "path";
|
|
108313
|
+
import { homedir as homedir22, tmpdir as tmpdir4 } from "os";
|
|
107868
108314
|
init_binary_downloader();
|
|
107869
108315
|
init_logger2();
|
|
107870
108316
|
init_plugin_identity();
|
|
107871
108317
|
var DEBUG = process.env.COMMENT_CHECKER_DEBUG === "1";
|
|
107872
|
-
var DEBUG_FILE =
|
|
108318
|
+
var DEBUG_FILE = join93(tmpdir4(), "comment-checker-debug.log");
|
|
107873
108319
|
function getCacheDir2() {
|
|
107874
108320
|
return commentCheckerCacheDir({
|
|
107875
108321
|
platform: process.platform,
|
|
107876
108322
|
env: process.env,
|
|
107877
|
-
homedir:
|
|
108323
|
+
homedir: homedir22(),
|
|
107878
108324
|
cacheDirName: CACHE_DIR_NAME
|
|
107879
108325
|
});
|
|
107880
108326
|
}
|
|
@@ -107928,7 +108374,7 @@ async function getBinaryVersion(binary) {
|
|
|
107928
108374
|
}
|
|
107929
108375
|
}
|
|
107930
108376
|
async function checkAstGrepCli() {
|
|
107931
|
-
const runtimeDir = astGrepRuntimeDir(
|
|
108377
|
+
const runtimeDir = astGrepRuntimeDir(join94(homedir23(), ".omo"));
|
|
107932
108378
|
const sgPath = findSgBinarySync({ runtimeDir });
|
|
107933
108379
|
if (sgPath === null) {
|
|
107934
108380
|
return {
|
|
@@ -107956,8 +108402,8 @@ function resolveCommentCheckerPackageJson() {
|
|
|
107956
108402
|
function findCommentCheckerPackageBinary2(baseDirOverride, resolvePackageJsonPath = resolveCommentCheckerPackageJson) {
|
|
107957
108403
|
const binaryName = process.platform === "win32" ? "comment-checker.exe" : "comment-checker";
|
|
107958
108404
|
try {
|
|
107959
|
-
const packageJsonPath = baseDirOverride === undefined ? resolvePackageJsonPath() :
|
|
107960
|
-
return findCommentCheckerPackageBinary({ packageJsonPath, binaryName, existsSync:
|
|
108405
|
+
const packageJsonPath = baseDirOverride === undefined ? resolvePackageJsonPath() : join94(baseDirOverride, "package.json");
|
|
108406
|
+
return findCommentCheckerPackageBinary({ packageJsonPath, binaryName, existsSync: existsSync57 });
|
|
107961
108407
|
} catch (error) {
|
|
107962
108408
|
if (!(error instanceof Error) && !isModuleResolutionFailure(error))
|
|
107963
108409
|
throw error;
|
|
@@ -108102,8 +108548,8 @@ async function getGhCliInfo(dependencies = {}) {
|
|
|
108102
108548
|
// packages/omo-opencode/src/mcp/lsp.ts
|
|
108103
108549
|
init_zod();
|
|
108104
108550
|
init_opencode_config_dir();
|
|
108105
|
-
import { existsSync as
|
|
108106
|
-
import { delimiter as delimiter3, dirname as
|
|
108551
|
+
import { existsSync as existsSync58, readFileSync as readFileSync38 } from "node:fs";
|
|
108552
|
+
import { delimiter as delimiter3, dirname as dirname38, resolve as resolve26 } from "node:path";
|
|
108107
108553
|
import { fileURLToPath as fileURLToPath7 } from "node:url";
|
|
108108
108554
|
|
|
108109
108555
|
// packages/omo-opencode/src/mcp/cli-suffix.ts
|
|
@@ -108116,7 +108562,7 @@ function hasCliSuffix(candidatePath, suffix) {
|
|
|
108116
108562
|
|
|
108117
108563
|
// packages/omo-opencode/src/mcp/runtime-executable.ts
|
|
108118
108564
|
init_bun_which_shim();
|
|
108119
|
-
import { basename as
|
|
108565
|
+
import { basename as basename12 } from "node:path";
|
|
108120
108566
|
var NODE_EXECUTABLE_NAMES = new Set(["node", "node.exe"]);
|
|
108121
108567
|
function isUnsafeCommandName2(commandName) {
|
|
108122
108568
|
if (commandName.length === 0)
|
|
@@ -108132,7 +108578,7 @@ function isUnsafeCommandName2(commandName) {
|
|
|
108132
108578
|
return false;
|
|
108133
108579
|
}
|
|
108134
108580
|
function isNodeExecPath(execPath) {
|
|
108135
|
-
return NODE_EXECUTABLE_NAMES.has(
|
|
108581
|
+
return NODE_EXECUTABLE_NAMES.has(basename12(execPath).toLowerCase());
|
|
108136
108582
|
}
|
|
108137
108583
|
function resolveRuntimeExecutable(commandName, options = {}) {
|
|
108138
108584
|
if (isUnsafeCommandName2(commandName)) {
|
|
@@ -108150,7 +108596,7 @@ function resolveRuntimeExecutable(commandName, options = {}) {
|
|
|
108150
108596
|
}
|
|
108151
108597
|
|
|
108152
108598
|
// packages/omo-opencode/src/mcp/shared/ancestor-cli-resolver.ts
|
|
108153
|
-
import { resolve as
|
|
108599
|
+
import { resolve as resolve25 } from "node:path";
|
|
108154
108600
|
function resolveJavaScriptRuntime(resolveExecutable) {
|
|
108155
108601
|
const node = resolveExecutable("node");
|
|
108156
108602
|
return node.available ? node : resolveExecutable("bun");
|
|
@@ -108158,9 +108604,9 @@ function resolveJavaScriptRuntime(resolveExecutable) {
|
|
|
108158
108604
|
function createAncestorCliCandidates(options) {
|
|
108159
108605
|
const candidates = [];
|
|
108160
108606
|
const seenPaths = new Set;
|
|
108161
|
-
let currentDirectory =
|
|
108607
|
+
let currentDirectory = resolve25(options.startDirectory);
|
|
108162
108608
|
while (true) {
|
|
108163
|
-
const distCliPath =
|
|
108609
|
+
const distCliPath = resolve25(currentDirectory, options.packageRel, options.distCliRel);
|
|
108164
108610
|
if (!seenPaths.has(distCliPath)) {
|
|
108165
108611
|
const runtime = resolveJavaScriptRuntime(options.resolveExecutable);
|
|
108166
108612
|
seenPaths.add(distCliPath);
|
|
@@ -108172,7 +108618,7 @@ function createAncestorCliCandidates(options) {
|
|
|
108172
108618
|
runtimeAvailable: runtime.available
|
|
108173
108619
|
});
|
|
108174
108620
|
}
|
|
108175
|
-
const sourceCliPath =
|
|
108621
|
+
const sourceCliPath = resolve25(currentDirectory, options.packageRel, options.sourceCliRel);
|
|
108176
108622
|
if (!seenPaths.has(sourceCliPath)) {
|
|
108177
108623
|
const runtime = options.resolveExecutable("bun");
|
|
108178
108624
|
const sourceCandidateAvailable = options.isSourceCandidateAvailable?.({
|
|
@@ -108189,7 +108635,7 @@ function createAncestorCliCandidates(options) {
|
|
|
108189
108635
|
runtimeAvailable: runtime.available
|
|
108190
108636
|
});
|
|
108191
108637
|
}
|
|
108192
|
-
const parentDirectory =
|
|
108638
|
+
const parentDirectory = resolve25(currentDirectory, "..");
|
|
108193
108639
|
if (parentDirectory === currentDirectory)
|
|
108194
108640
|
return candidates;
|
|
108195
108641
|
currentDirectory = parentDirectory;
|
|
@@ -108234,7 +108680,7 @@ var LSP_BOOTSTRAP_SCRIPT = [
|
|
|
108234
108680
|
].join(";");
|
|
108235
108681
|
function getModuleDirectory(moduleUrl) {
|
|
108236
108682
|
try {
|
|
108237
|
-
return
|
|
108683
|
+
return dirname38(fileURLToPath7(moduleUrl));
|
|
108238
108684
|
} catch (error) {
|
|
108239
108685
|
if (!(error instanceof Error))
|
|
108240
108686
|
throw error;
|
|
@@ -108242,11 +108688,11 @@ function getModuleDirectory(moduleUrl) {
|
|
|
108242
108688
|
}
|
|
108243
108689
|
}
|
|
108244
108690
|
function findBootstrapRoot(candidates, pathExists) {
|
|
108245
|
-
return candidates.find((candidate) => pathExists(
|
|
108691
|
+
return candidates.find((candidate) => pathExists(resolve26(candidate.root, "package.json")))?.root ?? process.cwd();
|
|
108246
108692
|
}
|
|
108247
108693
|
function readDaemonPackageVersion(root) {
|
|
108248
108694
|
try {
|
|
108249
|
-
const packageJson = JSON.parse(readFileSync38(
|
|
108695
|
+
const packageJson = JSON.parse(readFileSync38(resolve26(root, PACKAGE_REL, "package.json"), "utf-8"));
|
|
108250
108696
|
return DaemonPackageSchema.parse(packageJson).version;
|
|
108251
108697
|
} catch (error) {
|
|
108252
108698
|
if (!(error instanceof Error))
|
|
@@ -108258,17 +108704,17 @@ function createBootstrapCandidate(root, pathExists, resolveExecutable) {
|
|
|
108258
108704
|
const runtime = resolveJavaScriptRuntime(resolveExecutable);
|
|
108259
108705
|
const bun = resolveExecutable("bun");
|
|
108260
108706
|
const npm = resolveExecutable("npm");
|
|
108261
|
-
const packageManifestPath =
|
|
108707
|
+
const packageManifestPath = resolve26(root, PACKAGE_REL, "package.json");
|
|
108262
108708
|
return {
|
|
108263
108709
|
command: [runtime.command, "-e", LSP_BOOTSTRAP_SCRIPT, root, npm.command, bun.command],
|
|
108264
108710
|
root,
|
|
108265
|
-
path:
|
|
108711
|
+
path: resolve26(root, PACKAGE_REL, DIST_CLI_REL),
|
|
108266
108712
|
exists: runtime.available && npm.available && pathExists(packageManifestPath),
|
|
108267
108713
|
runtimeAvailable: runtime.available
|
|
108268
108714
|
};
|
|
108269
108715
|
}
|
|
108270
108716
|
function resolveLspCommand(options = {}) {
|
|
108271
|
-
const pathExists = options.exists ??
|
|
108717
|
+
const pathExists = options.exists ?? existsSync58;
|
|
108272
108718
|
const resolveExecutable = options.resolveExecutable ?? resolveRuntimeExecutable;
|
|
108273
108719
|
const moduleDirectory = getModuleDirectory(options.moduleUrl ?? import.meta.url);
|
|
108274
108720
|
const candidates = moduleDirectory ? createAncestorCliCandidates({
|
|
@@ -108278,7 +108724,7 @@ function resolveLspCommand(options = {}) {
|
|
|
108278
108724
|
sourceCliRel: SOURCE_CLI_REL,
|
|
108279
108725
|
pathExists,
|
|
108280
108726
|
resolveExecutable,
|
|
108281
|
-
isSourceCandidateAvailable: ({ root }) => pathExists(
|
|
108727
|
+
isSourceCandidateAvailable: ({ root }) => pathExists(resolve26(root, LSP_TOOLS_PACKAGE_REL, DIST_CLI_REL)) && readDaemonPackageVersion(root) !== null
|
|
108282
108728
|
}) : [];
|
|
108283
108729
|
const distCandidate = candidates.find((candidate) => hasCliSuffix(candidate.path, DIST_CLI_REL) && candidate.exists);
|
|
108284
108730
|
if (distCandidate) {
|
|
@@ -108292,7 +108738,7 @@ function resolveLspCommand(options = {}) {
|
|
|
108292
108738
|
}
|
|
108293
108739
|
function createLspMcpConfig(options = {}) {
|
|
108294
108740
|
const resolvedCommand = resolveLspCommand(options);
|
|
108295
|
-
const cwd =
|
|
108741
|
+
const cwd = resolve26(options.cwd ?? process.cwd());
|
|
108296
108742
|
const configDir = getOpenCodeConfigDir({ binary: "opencode" });
|
|
108297
108743
|
const sourceVersion = hasCliSuffix(resolvedCommand.path, SOURCE_CLI_REL) ? readDaemonPackageVersion(resolvedCommand.root) : null;
|
|
108298
108744
|
return {
|
|
@@ -108302,9 +108748,9 @@ function createLspMcpConfig(options = {}) {
|
|
|
108302
108748
|
cwd,
|
|
108303
108749
|
environment: {
|
|
108304
108750
|
LSP_TOOLS_MCP_CWD: cwd,
|
|
108305
|
-
LSP_TOOLS_MCP_PROJECT_CONFIG: PROJECT_LSP_CONFIGS.map((configPath) =>
|
|
108306
|
-
LSP_TOOLS_MCP_USER_CONFIG:
|
|
108307
|
-
LSP_TOOLS_MCP_INSTALL_DECISIONS:
|
|
108751
|
+
LSP_TOOLS_MCP_PROJECT_CONFIG: PROJECT_LSP_CONFIGS.map((configPath) => resolve26(cwd, configPath)).join(delimiter3),
|
|
108752
|
+
LSP_TOOLS_MCP_USER_CONFIG: resolve26(configDir, "lsp.json"),
|
|
108753
|
+
LSP_TOOLS_MCP_INSTALL_DECISIONS: resolve26(configDir, "lsp-install-decisions.json"),
|
|
108308
108754
|
...sourceVersion ? {
|
|
108309
108755
|
[OMO_LSP_DAEMON_CLI]: resolvedCommand.path,
|
|
108310
108756
|
[OMO_LSP_DAEMON_VERSION]: sourceVersion
|
|
@@ -108329,21 +108775,21 @@ function getInstalledLspServers(options = {}) {
|
|
|
108329
108775
|
|
|
108330
108776
|
// packages/omo-opencode/src/cli/doctor/checks/tools-mcp.ts
|
|
108331
108777
|
init_shared();
|
|
108332
|
-
import { existsSync as
|
|
108333
|
-
import { homedir as
|
|
108334
|
-
import { join as
|
|
108778
|
+
import { existsSync as existsSync59, readFileSync as readFileSync39 } from "node:fs";
|
|
108779
|
+
import { homedir as homedir24 } from "node:os";
|
|
108780
|
+
import { join as join95 } from "node:path";
|
|
108335
108781
|
var BUILTIN_MCP_SERVERS = ["websearch", "context7", "grep_app", "lsp"];
|
|
108336
108782
|
function getMcpConfigPaths() {
|
|
108337
108783
|
return [
|
|
108338
|
-
|
|
108339
|
-
|
|
108340
|
-
|
|
108784
|
+
join95(homedir24(), ".claude", ".mcp.json"),
|
|
108785
|
+
join95(process.cwd(), ".mcp.json"),
|
|
108786
|
+
join95(process.cwd(), ".claude", ".mcp.json")
|
|
108341
108787
|
];
|
|
108342
108788
|
}
|
|
108343
108789
|
function loadUserMcpConfig() {
|
|
108344
108790
|
const servers = {};
|
|
108345
108791
|
for (const configPath of getMcpConfigPaths()) {
|
|
108346
|
-
if (!
|
|
108792
|
+
if (!existsSync59(configPath))
|
|
108347
108793
|
continue;
|
|
108348
108794
|
try {
|
|
108349
108795
|
const content = readFileSync39(configPath, "utf-8");
|
|
@@ -108481,12 +108927,12 @@ async function checkTools() {
|
|
|
108481
108927
|
|
|
108482
108928
|
// packages/omo-opencode/src/cli/doctor/checks/telemetry.ts
|
|
108483
108929
|
init_src5();
|
|
108484
|
-
import { existsSync as
|
|
108930
|
+
import { existsSync as existsSync60, readFileSync as readFileSync40 } from "node:fs";
|
|
108485
108931
|
function isTelemetryState(value) {
|
|
108486
108932
|
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
108487
108933
|
}
|
|
108488
108934
|
function readLastActiveDay(stateFilePath) {
|
|
108489
|
-
if (!
|
|
108935
|
+
if (!existsSync60(stateFilePath)) {
|
|
108490
108936
|
return "never";
|
|
108491
108937
|
}
|
|
108492
108938
|
let parsed;
|
|
@@ -108549,17 +108995,17 @@ async function probeBinary(cmd, args, spawnImpl) {
|
|
|
108549
108995
|
}
|
|
108550
108996
|
|
|
108551
108997
|
// packages/team-core/src/team-registry/paths.ts
|
|
108552
|
-
import { homedir as
|
|
108998
|
+
import { homedir as homedir25 } from "node:os";
|
|
108553
108999
|
import path13 from "node:path";
|
|
108554
109000
|
function resolveBaseDir(config) {
|
|
108555
|
-
return expandHomeDirectory(config.base_dir ?? path13.join(
|
|
109001
|
+
return expandHomeDirectory(config.base_dir ?? path13.join(homedir25(), ".omo"));
|
|
108556
109002
|
}
|
|
108557
109003
|
function expandHomeDirectory(directoryPath) {
|
|
108558
109004
|
if (directoryPath === "~") {
|
|
108559
|
-
return
|
|
109005
|
+
return homedir25();
|
|
108560
109006
|
}
|
|
108561
109007
|
if (directoryPath.startsWith("~/") || directoryPath.startsWith("~\\")) {
|
|
108562
|
-
return path13.join(
|
|
109008
|
+
return path13.join(homedir25(), directoryPath.slice(2));
|
|
108563
109009
|
}
|
|
108564
109010
|
return directoryPath;
|
|
108565
109011
|
}
|
|
@@ -108616,10 +109062,10 @@ async function pathExists2(dir) {
|
|
|
108616
109062
|
|
|
108617
109063
|
// packages/omo-opencode/src/cli/doctor/checks/codex.ts
|
|
108618
109064
|
init_src();
|
|
108619
|
-
import { existsSync as
|
|
109065
|
+
import { existsSync as existsSync61 } from "node:fs";
|
|
108620
109066
|
import { lstat as lstat16, readdir as readdir14, readFile as readFile30 } from "node:fs/promises";
|
|
108621
|
-
import { homedir as
|
|
108622
|
-
import { basename as
|
|
109067
|
+
import { homedir as homedir26 } from "node:os";
|
|
109068
|
+
import { basename as basename13, join as join96, resolve as resolve27 } from "node:path";
|
|
108623
109069
|
// packages/omo-opencode/package.json
|
|
108624
109070
|
var package_default3 = {
|
|
108625
109071
|
name: "@oh-my-opencode/omo-opencode",
|
|
@@ -108678,7 +109124,7 @@ var package_default3 = {
|
|
|
108678
109124
|
|
|
108679
109125
|
// packages/omo-opencode/src/cli/doctor/checks/codex.ts
|
|
108680
109126
|
var MARKETPLACE_NAME = "sisyphuslabs";
|
|
108681
|
-
var
|
|
109127
|
+
var PLUGIN_NAME3 = "omo";
|
|
108682
109128
|
var COMPANION_PLUGIN_KEY = "codex@openai-codex";
|
|
108683
109129
|
var DEFAULT_PLUGIN_VERSION = "0.1.0";
|
|
108684
109130
|
var COMPANION_LIFECYCLE_EVENTS = new Set(["session_start", "stop"]);
|
|
@@ -108693,20 +109139,20 @@ var CODEX_BIN_NAMES = [
|
|
|
108693
109139
|
"omo-git-bash-hook"
|
|
108694
109140
|
];
|
|
108695
109141
|
async function gatherCodexSummary(deps = {}) {
|
|
108696
|
-
const codexHome =
|
|
109142
|
+
const codexHome = resolve27(deps.codexHome ?? process.env.CODEX_HOME ?? join96(homedir26(), ".codex"));
|
|
108697
109143
|
const binDir = resolveCodexInstallerBinDir({ binDir: deps.binDir, codexHome, env: process.env });
|
|
108698
109144
|
const detection = await (deps.detectCodexInstallation ?? detectCodexInstallation)();
|
|
108699
109145
|
const pluginRoot = await resolveInstalledPluginRoot(codexHome);
|
|
108700
|
-
const manifest = pluginRoot === null ? null : await readJson(
|
|
108701
|
-
const installSnapshot = pluginRoot === null ? null : await readJson(
|
|
108702
|
-
const configPath =
|
|
109146
|
+
const manifest = pluginRoot === null ? null : await readJson(join96(pluginRoot, ".codex-plugin", "plugin.json"));
|
|
109147
|
+
const installSnapshot = pluginRoot === null ? null : await readJson(join96(pluginRoot, "lazycodex-install.json"));
|
|
109148
|
+
const configPath = join96(codexHome, "config.toml");
|
|
108703
109149
|
const pluginVersion = stringField(manifest, "version");
|
|
108704
109150
|
return {
|
|
108705
109151
|
codexPath: detection.found && "path" in detection ? detection.path : null,
|
|
108706
109152
|
codexSource: detection.found ? detection.source : null,
|
|
108707
109153
|
codexAppId: detection.found && "appId" in detection ? detection.appId : null,
|
|
108708
109154
|
marketplaceName: MARKETPLACE_NAME,
|
|
108709
|
-
pluginName:
|
|
109155
|
+
pluginName: PLUGIN_NAME3,
|
|
108710
109156
|
pluginVersion,
|
|
108711
109157
|
pluginVersionStamped: pluginVersion !== null && pluginVersion !== DEFAULT_PLUGIN_VERSION,
|
|
108712
109158
|
installerVersion: deps.installerVersion ?? package_default3.version,
|
|
@@ -108756,7 +109202,7 @@ function buildCodexIssues(summary) {
|
|
|
108756
109202
|
if (summary.pluginRoot === null) {
|
|
108757
109203
|
issues.push({
|
|
108758
109204
|
title: "OMO Codex plugin is not installed",
|
|
108759
|
-
description: `Expected cached plugin at ${
|
|
109205
|
+
description: `Expected cached plugin at ${join96("plugins", "cache", MARKETPLACE_NAME, PLUGIN_NAME3, DEFAULT_PLUGIN_VERSION)} under CODEX_HOME.`,
|
|
108760
109206
|
fix: "Run: npx lazycodex-ai install",
|
|
108761
109207
|
severity: "error",
|
|
108762
109208
|
affects: ["plugin loading"]
|
|
@@ -108821,15 +109267,15 @@ function buildCodexIssues(summary) {
|
|
|
108821
109267
|
return issues;
|
|
108822
109268
|
}
|
|
108823
109269
|
async function resolveInstalledPluginRoot(codexHome) {
|
|
108824
|
-
const pluginRoot =
|
|
108825
|
-
if (!
|
|
109270
|
+
const pluginRoot = join96(codexHome, "plugins", "cache", MARKETPLACE_NAME, PLUGIN_NAME3);
|
|
109271
|
+
if (!existsSync61(pluginRoot))
|
|
108826
109272
|
return null;
|
|
108827
109273
|
const versions = await readdir14(pluginRoot, { withFileTypes: true });
|
|
108828
109274
|
const candidates = versions.filter((entry) => entry.isDirectory()).map((entry) => entry.name).sort(compareVersionsDescending);
|
|
108829
|
-
return candidates.length === 0 ? null :
|
|
109275
|
+
return candidates.length === 0 ? null : join96(pluginRoot, candidates[0] ?? DEFAULT_PLUGIN_VERSION);
|
|
108830
109276
|
}
|
|
108831
109277
|
async function readCodexConfigSummary(configPath) {
|
|
108832
|
-
if (!
|
|
109278
|
+
if (!existsSync61(configPath)) {
|
|
108833
109279
|
return {
|
|
108834
109280
|
exists: false,
|
|
108835
109281
|
marketplaceConfigured: false,
|
|
@@ -108854,17 +109300,17 @@ async function readCodexConfigSummary(configPath) {
|
|
|
108854
109300
|
async function readLinkedBins(binDir) {
|
|
108855
109301
|
const linked = [];
|
|
108856
109302
|
for (const name of CODEX_BIN_NAMES) {
|
|
108857
|
-
if (await pathExists3(
|
|
109303
|
+
if (await pathExists3(join96(binDir, process.platform === "win32" ? `${name}.cmd` : name)))
|
|
108858
109304
|
linked.push(name);
|
|
108859
109305
|
}
|
|
108860
109306
|
return linked;
|
|
108861
109307
|
}
|
|
108862
109308
|
async function readLinkedAgents(codexHome) {
|
|
108863
|
-
const agentsDir =
|
|
108864
|
-
if (!
|
|
109309
|
+
const agentsDir = join96(codexHome, "agents");
|
|
109310
|
+
if (!existsSync61(agentsDir))
|
|
108865
109311
|
return [];
|
|
108866
109312
|
const entries = await readdir14(agentsDir, { withFileTypes: true });
|
|
108867
|
-
return entries.filter((entry) => entry.isFile() || entry.isSymbolicLink()).map((entry) =>
|
|
109313
|
+
return entries.filter((entry) => entry.isFile() || entry.isSymbolicLink()).map((entry) => basename13(entry.name, ".toml")).sort();
|
|
108868
109314
|
}
|
|
108869
109315
|
async function readJson(path) {
|
|
108870
109316
|
try {
|
|
@@ -108993,24 +109439,24 @@ function resolveLatestVersion(input) {
|
|
|
108993
109439
|
// packages/omo-opencode/src/cli/doctor/checks/codex-components.ts
|
|
108994
109440
|
init_src();
|
|
108995
109441
|
import { readdir as readdir15, readFile as readFile31, stat as stat7 } from "node:fs/promises";
|
|
108996
|
-
import { homedir as
|
|
108997
|
-
import { dirname as
|
|
109442
|
+
import { homedir as homedir27 } from "node:os";
|
|
109443
|
+
import { dirname as dirname39, isAbsolute as isAbsolute15, join as join97, relative as relative9, resolve as resolve28, sep as sep10 } from "node:path";
|
|
108998
109444
|
var CODEX_COMPONENTS_CHECK_ID = "codex-components";
|
|
108999
109445
|
var CODEX_COMPONENTS_CHECK_NAME = "codex-components";
|
|
109000
109446
|
var PLUGIN_DATA_DIR_NAME = "omo-sisyphuslabs";
|
|
109001
|
-
var BOOTSTRAP_PENDING_MESSAGE = "bootstrap pending
|
|
109447
|
+
var BOOTSTRAP_PENDING_MESSAGE = "bootstrap pending: start a Codex session";
|
|
109002
109448
|
var REINSTALL_FIX = "Reinstall: npx lazycodex-ai install (or upgrade: codex plugin marketplace upgrade sisyphuslabs)";
|
|
109003
109449
|
async function checkCodexComponents(deps = {}) {
|
|
109004
109450
|
const env = deps.env ?? process.env;
|
|
109005
109451
|
const platform = deps.platform ?? process.platform;
|
|
109006
109452
|
const arch = deps.arch ?? process.arch;
|
|
109007
|
-
const codexHome =
|
|
109453
|
+
const codexHome = resolve28(deps.codexHome ?? env["CODEX_HOME"] ?? join97(homedir27(), ".codex"));
|
|
109008
109454
|
const summary = await gatherCodexSummary({ ...deps, codexHome });
|
|
109009
109455
|
if (summary.pluginRoot === null) {
|
|
109010
109456
|
return {
|
|
109011
109457
|
name: CODEX_COMPONENTS_CHECK_NAME,
|
|
109012
109458
|
status: "skip",
|
|
109013
|
-
message: "OMO Codex plugin is not installed
|
|
109459
|
+
message: "OMO Codex plugin is not installed: skipping component checks",
|
|
109014
109460
|
details: [`plugin root: not installed under ${codexHome}`],
|
|
109015
109461
|
issues: []
|
|
109016
109462
|
};
|
|
@@ -109029,7 +109475,7 @@ async function checkCodexComponents(deps = {}) {
|
|
|
109029
109475
|
});
|
|
109030
109476
|
}
|
|
109031
109477
|
const runtimeSgDir = runtimeSgDirectory(codexHome, platform, arch);
|
|
109032
|
-
const runtimeSgPath =
|
|
109478
|
+
const runtimeSgPath = join97(runtimeSgDir, sgBinaryName(platform));
|
|
109033
109479
|
const sg = findSgBinarySync({
|
|
109034
109480
|
arch,
|
|
109035
109481
|
env,
|
|
@@ -109068,8 +109514,8 @@ async function auditBundleTargets(pluginRoot) {
|
|
|
109068
109514
|
const manifest = await readJson2(manifestPath);
|
|
109069
109515
|
if (manifest === null || !isRecord18(manifest["mcpServers"]))
|
|
109070
109516
|
continue;
|
|
109071
|
-
const manifestRoot =
|
|
109072
|
-
const isRootManifest =
|
|
109517
|
+
const manifestRoot = dirname39(manifestPath);
|
|
109518
|
+
const isRootManifest = resolve28(manifestRoot) === resolve28(pluginRoot);
|
|
109073
109519
|
for (const server of Object.values(manifest["mcpServers"])) {
|
|
109074
109520
|
if (!isRecord18(server) || !Array.isArray(server["args"]))
|
|
109075
109521
|
continue;
|
|
@@ -109089,7 +109535,7 @@ async function auditBundleTargets(pluginRoot) {
|
|
|
109089
109535
|
continue;
|
|
109090
109536
|
const commands = [];
|
|
109091
109537
|
collectHookCommands(manifest, commands);
|
|
109092
|
-
const hookPluginRoot =
|
|
109538
|
+
const hookPluginRoot = dirname39(dirname39(hookManifestPath));
|
|
109093
109539
|
for (const command of commands) {
|
|
109094
109540
|
for (const relativePath of extractPluginRootPaths(command)) {
|
|
109095
109541
|
referencedCount += 1;
|
|
@@ -109111,9 +109557,9 @@ function recordBrokenTarget(broken, classified, origin) {
|
|
|
109111
109557
|
broken.push(entry);
|
|
109112
109558
|
}
|
|
109113
109559
|
async function classifyBundleTarget(bundleRoot, baseRoot, relativePath, allowEscape) {
|
|
109114
|
-
const targetPath =
|
|
109115
|
-
const bundleRootPath =
|
|
109116
|
-
const bundleRootPrefix = bundleRootPath.endsWith(
|
|
109560
|
+
const targetPath = resolve28(baseRoot, relativePath);
|
|
109561
|
+
const bundleRootPath = resolve28(bundleRoot);
|
|
109562
|
+
const bundleRootPrefix = bundleRootPath.endsWith(sep10) ? bundleRootPath : `${bundleRootPath}${sep10}`;
|
|
109117
109563
|
if (targetPath !== bundleRootPath && !targetPath.startsWith(bundleRootPrefix)) {
|
|
109118
109564
|
if (allowEscape)
|
|
109119
109565
|
return null;
|
|
@@ -109128,7 +109574,7 @@ async function classifyBundleTarget(bundleRoot, baseRoot, relativePath, allowEsc
|
|
|
109128
109574
|
}
|
|
109129
109575
|
async function findHookManifestPaths(root) {
|
|
109130
109576
|
const paths = await findManifestPaths(root, "hooks.json");
|
|
109131
|
-
return paths.filter((path) =>
|
|
109577
|
+
return paths.filter((path) => dirname39(path).endsWith(`${sep10}hooks`));
|
|
109132
109578
|
}
|
|
109133
109579
|
async function findManifestPaths(root, manifestName) {
|
|
109134
109580
|
let entries;
|
|
@@ -109141,7 +109587,7 @@ async function findManifestPaths(root, manifestName) {
|
|
|
109141
109587
|
for (const entry of entries) {
|
|
109142
109588
|
if (entry.name === "node_modules" || entry.name === ".git")
|
|
109143
109589
|
continue;
|
|
109144
|
-
const entryPath =
|
|
109590
|
+
const entryPath = join97(root, entry.name);
|
|
109145
109591
|
if (entry.isDirectory()) {
|
|
109146
109592
|
paths.push(...await findManifestPaths(entryPath, manifestName));
|
|
109147
109593
|
continue;
|
|
@@ -109182,21 +109628,21 @@ function extractPluginRootPaths(command) {
|
|
|
109182
109628
|
}
|
|
109183
109629
|
function isPluginRuntimePathArg(arg) {
|
|
109184
109630
|
const normalized = normalizePathSeparators(arg);
|
|
109185
|
-
return normalized.endsWith(".js") && normalized.includes("/dist/") && (normalized.startsWith("./") || normalized.startsWith("../") || normalized.startsWith("components/") || normalized.startsWith("/") ||
|
|
109631
|
+
return normalized.endsWith(".js") && normalized.includes("/dist/") && (normalized.startsWith("./") || normalized.startsWith("../") || normalized.startsWith("components/") || normalized.startsWith("/") || isAbsolute15(arg));
|
|
109186
109632
|
}
|
|
109187
109633
|
function runtimeSgDirectory(codexHome, platform, arch) {
|
|
109188
|
-
return
|
|
109634
|
+
return join97(codexHome, "runtime", "ast-grep", runtimeSlug(platform, arch));
|
|
109189
109635
|
}
|
|
109190
109636
|
function describeSgSource(sgPath, env, runtimeSgDir, platform) {
|
|
109191
109637
|
const override = env[SG_PATH_ENV_KEY]?.trim();
|
|
109192
109638
|
if (override !== undefined && override.length > 0 && sgPath === override)
|
|
109193
109639
|
return `env override ${SG_PATH_ENV_KEY}`;
|
|
109194
|
-
if (sgPath ===
|
|
109640
|
+
if (sgPath === join97(runtimeSgDir, sgBinaryName(platform)))
|
|
109195
109641
|
return "runtime dir";
|
|
109196
109642
|
return "PATH";
|
|
109197
109643
|
}
|
|
109198
109644
|
async function readBootstrapStateSummary(codexHome) {
|
|
109199
|
-
const statePath =
|
|
109645
|
+
const statePath = join97(codexHome, "plugins", "data", PLUGIN_DATA_DIR_NAME, "bootstrap", "state.json");
|
|
109200
109646
|
const raw = await readJson2(statePath);
|
|
109201
109647
|
if (raw === null)
|
|
109202
109648
|
return null;
|
|
@@ -109272,24 +109718,24 @@ function isRecord18(value) {
|
|
|
109272
109718
|
}
|
|
109273
109719
|
|
|
109274
109720
|
// packages/omo-opencode/src/cli/doctor/checks/codex-runtime-wrapper.ts
|
|
109275
|
-
import { existsSync as
|
|
109721
|
+
import { existsSync as existsSync62 } from "node:fs";
|
|
109276
109722
|
import { readFile as readFile32 } from "node:fs/promises";
|
|
109277
|
-
import { homedir as
|
|
109278
|
-
import { join as
|
|
109723
|
+
import { homedir as homedir28 } from "node:os";
|
|
109724
|
+
import { join as join98, resolve as resolve29 } from "node:path";
|
|
109279
109725
|
var RUNTIME_WRAPPER_MARKER2 = "OMO_GENERATED_RUNTIME_WRAPPER";
|
|
109280
109726
|
var CHECK_NAME = "codex-runtime-wrapper";
|
|
109281
109727
|
var REINSTALL_COMMAND = "npx --yes lazycodex-ai@latest install --no-tui";
|
|
109282
109728
|
async function checkCodexRuntimeWrapper(deps = {}) {
|
|
109283
|
-
const codexHome =
|
|
109729
|
+
const codexHome = resolve29(deps.codexHome ?? process.env.CODEX_HOME ?? join98(homedir28(), ".codex"));
|
|
109284
109730
|
const binDir = resolveCodexInstallerBinDir({ binDir: deps.binDir, codexHome, env: process.env });
|
|
109285
109731
|
const platform = deps.platform ?? process.platform;
|
|
109286
|
-
const wrapperPath =
|
|
109287
|
-
const legacyWrapperPath =
|
|
109732
|
+
const wrapperPath = join98(binDir, platform === "win32" ? "omo-agent-toolkit.cmd" : "omo-agent-toolkit");
|
|
109733
|
+
const legacyWrapperPath = join98(binDir, platform === "win32" ? "omo.cmd" : "omo");
|
|
109288
109734
|
const [wrapper, legacyWrapper] = await Promise.all([readRuntimeWrapper(wrapperPath), readRuntimeWrapper(legacyWrapperPath)]);
|
|
109289
109735
|
const issues = [];
|
|
109290
109736
|
if (wrapper?.includes(RUNTIME_WRAPPER_MARKER2) === true) {
|
|
109291
109737
|
const targetPath = parseRuntimeTargetPath(wrapper);
|
|
109292
|
-
if (targetPath !== null && !
|
|
109738
|
+
if (targetPath !== null && !existsSync62(targetPath)) {
|
|
109293
109739
|
issues.push({
|
|
109294
109740
|
title: "omo-agent-toolkit runtime wrapper target is missing",
|
|
109295
109741
|
description: `Generated omo-agent-toolkit runtime wrapper at ${wrapperPath} points to missing target ${targetPath}.`,
|
|
@@ -109812,10 +110258,10 @@ Doctor failed unexpectedly: ${message}`];
|
|
|
109812
110258
|
init_commander();
|
|
109813
110259
|
|
|
109814
110260
|
// packages/mcp-client-core/src/mcp-oauth/storage.ts
|
|
109815
|
-
import { createHash as
|
|
110261
|
+
import { createHash as createHash8 } from "node:crypto";
|
|
109816
110262
|
import {
|
|
109817
110263
|
chmodSync as chmodSync5,
|
|
109818
|
-
existsSync as
|
|
110264
|
+
existsSync as existsSync65,
|
|
109819
110265
|
mkdirSync as mkdirSync17,
|
|
109820
110266
|
readdirSync as readdirSync13,
|
|
109821
110267
|
readFileSync as readFileSync42,
|
|
@@ -109823,18 +110269,18 @@ import {
|
|
|
109823
110269
|
unlinkSync as unlinkSync9,
|
|
109824
110270
|
writeFileSync as writeFileSync14
|
|
109825
110271
|
} from "node:fs";
|
|
109826
|
-
import { basename as
|
|
110272
|
+
import { basename as basename14, dirname as dirname40, join as join101 } from "node:path";
|
|
109827
110273
|
|
|
109828
110274
|
// packages/mcp-client-core/src/config-dir.ts
|
|
109829
|
-
import { existsSync as
|
|
109830
|
-
import { homedir as
|
|
109831
|
-
import { join as
|
|
109832
|
-
function
|
|
109833
|
-
const resolvedPath =
|
|
109834
|
-
if (!
|
|
110275
|
+
import { existsSync as existsSync63, realpathSync as realpathSync12 } from "node:fs";
|
|
110276
|
+
import { homedir as homedir29 } from "node:os";
|
|
110277
|
+
import { join as join99, resolve as resolve30 } from "node:path";
|
|
110278
|
+
function resolveConfigPath3(pathValue) {
|
|
110279
|
+
const resolvedPath = resolve30(pathValue);
|
|
110280
|
+
if (!existsSync63(resolvedPath))
|
|
109835
110281
|
return resolvedPath;
|
|
109836
110282
|
try {
|
|
109837
|
-
return
|
|
110283
|
+
return realpathSync12(resolvedPath);
|
|
109838
110284
|
} catch (error) {
|
|
109839
110285
|
if (!(error instanceof Error))
|
|
109840
110286
|
throw error;
|
|
@@ -109844,15 +110290,15 @@ function resolveConfigPath2(pathValue) {
|
|
|
109844
110290
|
function getOpenCodeCliConfigDir(env = process.env) {
|
|
109845
110291
|
const customConfigDir = env["OPENCODE_CONFIG_DIR"]?.trim();
|
|
109846
110292
|
if (customConfigDir) {
|
|
109847
|
-
return
|
|
110293
|
+
return resolveConfigPath3(customConfigDir);
|
|
109848
110294
|
}
|
|
109849
|
-
const xdgConfigDir = env["XDG_CONFIG_HOME"]?.trim() ||
|
|
109850
|
-
return
|
|
110295
|
+
const xdgConfigDir = env["XDG_CONFIG_HOME"]?.trim() || join99(homedir29(), ".config");
|
|
110296
|
+
return resolveConfigPath3(join99(xdgConfigDir, "opencode"));
|
|
109851
110297
|
}
|
|
109852
110298
|
|
|
109853
110299
|
// packages/mcp-client-core/src/mcp-oauth/storage-index.ts
|
|
109854
|
-
import { chmodSync as chmodSync4, existsSync as
|
|
109855
|
-
import { join as
|
|
110300
|
+
import { chmodSync as chmodSync4, existsSync as existsSync64, readFileSync as readFileSync41, renameSync as renameSync7, writeFileSync as writeFileSync13 } from "node:fs";
|
|
110301
|
+
import { join as join100 } from "node:path";
|
|
109856
110302
|
var INDEX_FILE_NAME = "index.json";
|
|
109857
110303
|
function isTokenIndex(value) {
|
|
109858
110304
|
if (typeof value !== "object" || value === null || Array.isArray(value))
|
|
@@ -109860,11 +110306,11 @@ function isTokenIndex(value) {
|
|
|
109860
110306
|
return Object.values(value).every((entry) => typeof entry === "string");
|
|
109861
110307
|
}
|
|
109862
110308
|
function getIndexPath(storageDir) {
|
|
109863
|
-
return
|
|
110309
|
+
return join100(storageDir, INDEX_FILE_NAME);
|
|
109864
110310
|
}
|
|
109865
110311
|
function readTokenIndex(storageDir) {
|
|
109866
110312
|
const indexPath = getIndexPath(storageDir);
|
|
109867
|
-
if (!
|
|
110313
|
+
if (!existsSync64(indexPath))
|
|
109868
110314
|
return {};
|
|
109869
110315
|
try {
|
|
109870
110316
|
const parsed = JSON.parse(readFileSync41(indexPath, "utf-8"));
|
|
@@ -109904,16 +110350,16 @@ function deleteTokenIndexEntry(storageDir, hash) {
|
|
|
109904
110350
|
var STORAGE_DIR_NAME = "mcp-oauth";
|
|
109905
110351
|
var LEGACY_STORAGE_FILE_NAME = "mcp-oauth.json";
|
|
109906
110352
|
function getMcpOauthStorageDir() {
|
|
109907
|
-
return
|
|
110353
|
+
return join101(getOpenCodeCliConfigDir(), STORAGE_DIR_NAME);
|
|
109908
110354
|
}
|
|
109909
110355
|
function getMcpOauthServerHash(serverHost, resource) {
|
|
109910
|
-
return
|
|
110356
|
+
return createHash8("sha256").update(buildKey(serverHost, resource)).digest("hex").slice(0, 32);
|
|
109911
110357
|
}
|
|
109912
110358
|
function getMcpOauthStoragePath(serverHost, resource) {
|
|
109913
|
-
return
|
|
110359
|
+
return join101(getMcpOauthStorageDir(), `${getMcpOauthServerHash(serverHost, resource)}.json`);
|
|
109914
110360
|
}
|
|
109915
110361
|
function getLegacyStoragePath() {
|
|
109916
|
-
return
|
|
110362
|
+
return join101(getOpenCodeCliConfigDir(), LEGACY_STORAGE_FILE_NAME);
|
|
109917
110363
|
}
|
|
109918
110364
|
function normalizeHost2(serverHost) {
|
|
109919
110365
|
let host = serverHost.trim();
|
|
@@ -109974,7 +110420,7 @@ function isOAuthTokenData(value) {
|
|
|
109974
110420
|
return clientSecret === undefined || typeof clientSecret === "string";
|
|
109975
110421
|
}
|
|
109976
110422
|
function readTokenFile(filePath) {
|
|
109977
|
-
if (!
|
|
110423
|
+
if (!existsSync65(filePath))
|
|
109978
110424
|
return null;
|
|
109979
110425
|
try {
|
|
109980
110426
|
const parsed = JSON.parse(readFileSync42(filePath, "utf-8"));
|
|
@@ -109987,7 +110433,7 @@ function readTokenFile(filePath) {
|
|
|
109987
110433
|
}
|
|
109988
110434
|
function readLegacyStore() {
|
|
109989
110435
|
const filePath = getLegacyStoragePath();
|
|
109990
|
-
if (!
|
|
110436
|
+
if (!existsSync65(filePath))
|
|
109991
110437
|
return null;
|
|
109992
110438
|
try {
|
|
109993
110439
|
const parsed = JSON.parse(readFileSync42(filePath, "utf-8"));
|
|
@@ -110007,8 +110453,8 @@ function readLegacyStore() {
|
|
|
110007
110453
|
}
|
|
110008
110454
|
function writeTokenFile(filePath, token) {
|
|
110009
110455
|
try {
|
|
110010
|
-
const dir =
|
|
110011
|
-
if (!
|
|
110456
|
+
const dir = dirname40(filePath);
|
|
110457
|
+
if (!existsSync65(dir)) {
|
|
110012
110458
|
mkdirSync17(dir, { recursive: true });
|
|
110013
110459
|
}
|
|
110014
110460
|
const tempPath = `${filePath}.tmp.${Date.now()}`;
|
|
@@ -110032,7 +110478,7 @@ function saveToken(serverHost, resource, token) {
|
|
|
110032
110478
|
}
|
|
110033
110479
|
function deleteToken(serverHost, resource) {
|
|
110034
110480
|
const filePath = getMcpOauthStoragePath(serverHost, resource);
|
|
110035
|
-
if (!
|
|
110481
|
+
if (!existsSync65(filePath))
|
|
110036
110482
|
return deleteLegacyToken(serverHost, resource);
|
|
110037
110483
|
try {
|
|
110038
110484
|
unlinkSync9(filePath);
|
|
@@ -110054,7 +110500,7 @@ function deleteLegacyToken(serverHost, resource) {
|
|
|
110054
110500
|
if (Object.keys(store).length === 0) {
|
|
110055
110501
|
try {
|
|
110056
110502
|
const filePath = getLegacyStoragePath();
|
|
110057
|
-
if (
|
|
110503
|
+
if (existsSync65(filePath))
|
|
110058
110504
|
unlinkSync9(filePath);
|
|
110059
110505
|
return true;
|
|
110060
110506
|
} catch (deleteError) {
|
|
@@ -110092,7 +110538,7 @@ function listTokensByHost(serverHost) {
|
|
|
110092
110538
|
for (const [hash, indexedKey] of Object.entries(index)) {
|
|
110093
110539
|
if (!indexedKey.startsWith(prefix))
|
|
110094
110540
|
continue;
|
|
110095
|
-
const indexedToken = readTokenFile(
|
|
110541
|
+
const indexedToken = readTokenFile(join101(getMcpOauthStorageDir(), `${hash}.json`));
|
|
110096
110542
|
if (indexedToken)
|
|
110097
110543
|
result[indexedKey] = indexedToken;
|
|
110098
110544
|
}
|
|
@@ -110101,14 +110547,14 @@ function listTokensByHost(serverHost) {
|
|
|
110101
110547
|
function listAllTokens() {
|
|
110102
110548
|
const result = { ...readLegacyStore() ?? {} };
|
|
110103
110549
|
const dir = getMcpOauthStorageDir();
|
|
110104
|
-
if (!
|
|
110550
|
+
if (!existsSync65(dir))
|
|
110105
110551
|
return result;
|
|
110106
110552
|
const index = readTokenIndex(dir);
|
|
110107
110553
|
for (const entry of readdirSync13(dir, { withFileTypes: true })) {
|
|
110108
110554
|
if (!entry.isFile() || !entry.name.endsWith(".json") || entry.name === "index.json")
|
|
110109
110555
|
continue;
|
|
110110
|
-
const token = readTokenFile(
|
|
110111
|
-
const hash =
|
|
110556
|
+
const token = readTokenFile(join101(dir, entry.name));
|
|
110557
|
+
const hash = basename14(entry.name, ".json");
|
|
110112
110558
|
if (token)
|
|
110113
110559
|
result[index[hash] ?? hash] = token;
|
|
110114
110560
|
}
|
|
@@ -110116,7 +110562,7 @@ function listAllTokens() {
|
|
|
110116
110562
|
}
|
|
110117
110563
|
|
|
110118
110564
|
// packages/mcp-client-core/src/plugin-identity.ts
|
|
110119
|
-
var
|
|
110565
|
+
var PLUGIN_NAME4 = "oh-my-openagent";
|
|
110120
110566
|
|
|
110121
110567
|
// packages/mcp-client-core/src/mcp-oauth/discovery.ts
|
|
110122
110568
|
var discoveryCache = new Map;
|
|
@@ -110281,13 +110727,13 @@ async function findAvailablePort2(startPort = DEFAULT_PORT) {
|
|
|
110281
110727
|
|
|
110282
110728
|
// packages/mcp-client-core/src/mcp-oauth/oauth-authorization-flow.ts
|
|
110283
110729
|
import { spawn as spawn4 } from "node:child_process";
|
|
110284
|
-
import { createHash as
|
|
110730
|
+
import { createHash as createHash9, randomBytes as randomBytes2 } from "node:crypto";
|
|
110285
110731
|
import { createServer as createServer2 } from "node:http";
|
|
110286
110732
|
function generateCodeVerifier() {
|
|
110287
110733
|
return randomBytes2(32).toString("base64url");
|
|
110288
110734
|
}
|
|
110289
110735
|
function generateCodeChallenge(verifier) {
|
|
110290
|
-
return
|
|
110736
|
+
return createHash9("sha256").update(verifier).digest("base64url");
|
|
110291
110737
|
}
|
|
110292
110738
|
function buildAuthorizationUrl(authorizationEndpoint, options) {
|
|
110293
110739
|
const url = new URL(authorizationEndpoint);
|
|
@@ -110493,7 +110939,7 @@ class McpOAuthProvider {
|
|
|
110493
110939
|
const clientInfo = await getOrRegisterClient({
|
|
110494
110940
|
...metadata.registrationEndpoint ? { registrationEndpoint: metadata.registrationEndpoint } : {},
|
|
110495
110941
|
serverIdentifier: this.serverUrl,
|
|
110496
|
-
clientName:
|
|
110942
|
+
clientName: PLUGIN_NAME4,
|
|
110497
110943
|
redirectUris: [this.redirectUrl()],
|
|
110498
110944
|
tokenEndpointAuthMethod: "none",
|
|
110499
110945
|
...this.configClientId ? { clientId: this.configClientId } : {},
|
|
@@ -111179,8 +111625,8 @@ async function loadDeviceKeyring(store) {
|
|
|
111179
111625
|
|
|
111180
111626
|
// packages/omo-opencode/src/cli/account-keys/keystore.ts
|
|
111181
111627
|
import { execFile as execFile5 } from "node:child_process";
|
|
111182
|
-
import { homedir as
|
|
111183
|
-
import { join as
|
|
111628
|
+
import { homedir as homedir30 } from "node:os";
|
|
111629
|
+
import { join as join102 } from "node:path";
|
|
111184
111630
|
var DEFAULT_SERVICE = "omo-cli";
|
|
111185
111631
|
function defaultRun(argv, input) {
|
|
111186
111632
|
const [file, ...args] = argv;
|
|
@@ -111288,8 +111734,8 @@ function createLibsecretKeyStore(name, run) {
|
|
|
111288
111734
|
}
|
|
111289
111735
|
function createDpapiKeyStore(name, run) {
|
|
111290
111736
|
const safeName = name.replace(/[^A-Za-z0-9._-]/g, "-");
|
|
111291
|
-
const directory =
|
|
111292
|
-
const file =
|
|
111737
|
+
const directory = join102(process.env.LOCALAPPDATA ?? join102(homedir30(), "AppData", "Local"), "omo");
|
|
111738
|
+
const file = join102(directory, `device-keys-${safeName}.bin`);
|
|
111293
111739
|
const ps = (literal) => `'${literal.replace(/'/g, "''")}'`;
|
|
111294
111740
|
const prelude = "Add-Type -AssemblyName System.Security; ";
|
|
111295
111741
|
const fail = () => new Error("omo account keys: Windows DPAPI is unavailable. Sign in with your Windows account (DPAPI needs the account credential) and try again. " + "Private keys are only ever stored through DPAPI (a per-user encrypted blob).");
|
|
@@ -111453,6 +111899,7 @@ class ApiRefusal extends SignInError {
|
|
|
111453
111899
|
"account_deleted",
|
|
111454
111900
|
"reauth_required",
|
|
111455
111901
|
"invalid_grant",
|
|
111902
|
+
"device_revoked",
|
|
111456
111903
|
"entitlement_required",
|
|
111457
111904
|
"authorization_pending",
|
|
111458
111905
|
"slow_down",
|
|
@@ -111648,7 +112095,7 @@ async function loginDevice(session, options) {
|
|
|
111648
112095
|
}
|
|
111649
112096
|
|
|
111650
112097
|
// packages/omo-opencode/src/cli/service-auth/keystore.ts
|
|
111651
|
-
import { createHash as
|
|
112098
|
+
import { createHash as createHash10 } from "node:crypto";
|
|
111652
112099
|
|
|
111653
112100
|
// packages/omo-opencode/src/cli/service-auth/secret-service-lock.ts
|
|
111654
112101
|
import { spawn as spawn5 } from "node:child_process";
|
|
@@ -111692,7 +112139,10 @@ var probeSecretServiceLock = () => new Promise((resolve) => {
|
|
|
111692
112139
|
});
|
|
111693
112140
|
|
|
111694
112141
|
// packages/omo-opencode/src/cli/service-auth/keystore.ts
|
|
111695
|
-
class
|
|
112142
|
+
class CredentialStoreError extends SignInError {
|
|
112143
|
+
}
|
|
112144
|
+
|
|
112145
|
+
class KeychainLockedError extends CredentialStoreError {
|
|
111696
112146
|
}
|
|
111697
112147
|
var LOCKED = /-25308|errSecInteractionNotAllowed|interaction is not allowed|locked collection/i;
|
|
111698
112148
|
var UNLOCKED_REUSE_MS = 30000;
|
|
@@ -111706,7 +112156,7 @@ var stderrNoticeOncePerProcess = (message) => {
|
|
|
111706
112156
|
};
|
|
111707
112157
|
var isLocked = (error) => error instanceof Error && (LOCKED.test(error.message) || LOCKED.test(String(error.code ?? "")));
|
|
111708
112158
|
function credentialId(api) {
|
|
111709
|
-
return
|
|
112159
|
+
return createHash10("sha256").update(serviceOrigin(api)).digest("hex");
|
|
111710
112160
|
}
|
|
111711
112161
|
function createCredentialStore(api, secrets = typeof Bun === "undefined" ? null : Bun.secrets, platform = process.platform, lockProbe = probeSecretServiceLock, notice = stderrNoticeOncePerProcess) {
|
|
111712
112162
|
if (!secrets)
|
|
@@ -111715,7 +112165,7 @@ function createCredentialStore(api, secrets = typeof Bun === "undefined" ? null
|
|
|
111715
112165
|
if (platformName === null)
|
|
111716
112166
|
throw new SignInError("This platform has no supported OS credential store.");
|
|
111717
112167
|
const key = { service: "omo-cli", name: credentialId(api) };
|
|
111718
|
-
const unavailable = (error) => isLocked(error) ? new KeychainLockedError(`${platformName} is locked. Unlock it, then try again. Credentials are never saved to a file.`) : new
|
|
112168
|
+
const unavailable = (error) => isLocked(error) ? new KeychainLockedError(`${platformName} is locked. Unlock it, then try again. Credentials are never saved to a file.`) : new CredentialStoreError(`Cannot access ${platformName}. Unlock or enable the OS credential store and try again. Credentials are never saved to a file.`);
|
|
111719
112169
|
let unlockedUntil = 0;
|
|
111720
112170
|
let noticed = false;
|
|
111721
112171
|
const assertUsable = async () => {
|
|
@@ -111770,7 +112220,7 @@ function createCredentialStore(api, secrets = typeof Bun === "undefined" ? null
|
|
|
111770
112220
|
}
|
|
111771
112221
|
|
|
111772
112222
|
// packages/omo-opencode/src/cli/service-auth/loopback.ts
|
|
111773
|
-
import { createHash as
|
|
112223
|
+
import { createHash as createHash11, randomBytes as randomBytes3, timingSafeEqual } from "node:crypto";
|
|
111774
112224
|
import { createServer as createServer3 } from "node:http";
|
|
111775
112225
|
class BrowserUnavailable extends SignInError {
|
|
111776
112226
|
}
|
|
@@ -111816,7 +112266,7 @@ async function authorize(options) {
|
|
|
111816
112266
|
const url = new URL(serviceOrigin(options.accounts));
|
|
111817
112267
|
url.search = new URLSearchParams({
|
|
111818
112268
|
redirect_uri: `${origin}/callback`,
|
|
111819
|
-
code_challenge:
|
|
112269
|
+
code_challenge: createHash11("sha256").update(verifier).digest("base64url"),
|
|
111820
112270
|
code_challenge_method: "S256",
|
|
111821
112271
|
state
|
|
111822
112272
|
}).toString();
|
|
@@ -111870,12 +112320,12 @@ async function loginLoopback(session, options) {
|
|
|
111870
112320
|
|
|
111871
112321
|
// packages/omo-opencode/src/cli/service-auth/session.ts
|
|
111872
112322
|
import { mkdir as mkdir10 } from "node:fs/promises";
|
|
111873
|
-
import { homedir as
|
|
111874
|
-
import { join as
|
|
112323
|
+
import { homedir as homedir31 } from "node:os";
|
|
112324
|
+
import { join as join103 } from "node:path";
|
|
111875
112325
|
|
|
111876
112326
|
// packages/team-core/src/team-state-store/lock-publish.ts
|
|
111877
112327
|
import { access as access3, open as open2, unlink as unlink2 } from "node:fs/promises";
|
|
111878
|
-
import { dirname as
|
|
112328
|
+
import { dirname as dirname41 } from "node:path";
|
|
111879
112329
|
|
|
111880
112330
|
// packages/team-core/src/team-state-store/lock-record.ts
|
|
111881
112331
|
import { randomUUID as randomUUID5 } from "node:crypto";
|
|
@@ -111975,7 +112425,7 @@ async function assertRetryableLockOpenError(lockPath, error, deps) {
|
|
|
111975
112425
|
if (code === "EPERM") {
|
|
111976
112426
|
if (await pathMayExist(lockPath, deps))
|
|
111977
112427
|
return;
|
|
111978
|
-
if ((deps?.platform ?? process.platform) === "win32" && await pathMayExist(
|
|
112428
|
+
if ((deps?.platform ?? process.platform) === "win32" && await pathMayExist(dirname41(lockPath), deps))
|
|
111979
112429
|
return;
|
|
111980
112430
|
}
|
|
111981
112431
|
throw error;
|
|
@@ -112005,7 +112455,7 @@ async function publishLockRecord(lockPath, record) {
|
|
|
112005
112455
|
}
|
|
112006
112456
|
|
|
112007
112457
|
// packages/team-core/src/team-state-store/lock-reclaim.ts
|
|
112008
|
-
import { createHash as
|
|
112458
|
+
import { createHash as createHash12 } from "node:crypto";
|
|
112009
112459
|
import { unlink as unlink3 } from "node:fs/promises";
|
|
112010
112460
|
var RECLAIM_UNLINK_ATTEMPTS = 3;
|
|
112011
112461
|
var RECLAIM_UNLINK_RETRY_MS = 25;
|
|
@@ -112015,7 +112465,7 @@ function delay2(ms) {
|
|
|
112015
112465
|
});
|
|
112016
112466
|
}
|
|
112017
112467
|
function reclaimGuardPath(lockPath, record) {
|
|
112018
|
-
return `${lockPath}.reclaim-${
|
|
112468
|
+
return `${lockPath}.reclaim-${createHash12("sha256").update(record).digest("hex").slice(0, 16)}`;
|
|
112019
112469
|
}
|
|
112020
112470
|
async function unlinkWithRetry(path, deps) {
|
|
112021
112471
|
const wait = deps.delay ?? delay2;
|
|
@@ -112114,12 +112564,12 @@ class SessionEnded extends SignInError {
|
|
|
112114
112564
|
this.code = code;
|
|
112115
112565
|
}
|
|
112116
112566
|
}
|
|
112117
|
-
var DEVICE_REVOKING_REFUSALS = new Set(["account_deleted", "reauth_required"]);
|
|
112567
|
+
var DEVICE_REVOKING_REFUSALS = new Set(["account_deleted", "reauth_required", "device_revoked"]);
|
|
112118
112568
|
function createSession(options) {
|
|
112119
112569
|
const api = serviceOrigin(options.api);
|
|
112120
112570
|
const { store, signal } = options;
|
|
112121
|
-
const directory =
|
|
112122
|
-
const lockPath =
|
|
112571
|
+
const directory = join103(options.home ?? homedir31(), ".omo", "session-locks");
|
|
112572
|
+
const lockPath = join103(directory, `${credentialId(api)}.lock`);
|
|
112123
112573
|
async function locked(action) {
|
|
112124
112574
|
await mkdir10(directory, { recursive: true, mode: 448 });
|
|
112125
112575
|
signal?.throwIfAborted();
|
|
@@ -112141,7 +112591,9 @@ function createSession(options) {
|
|
|
112141
112591
|
await store.write({ ...current, ...tokens });
|
|
112142
112592
|
return tokens.accessToken;
|
|
112143
112593
|
} catch (error) {
|
|
112144
|
-
if (error instanceof
|
|
112594
|
+
if (error instanceof CredentialStoreError)
|
|
112595
|
+
throw error;
|
|
112596
|
+
if (error instanceof ApiRefusal && error.status < 500 && ["unauthorized", "account_deleted", "reauth_required", "invalid_grant", "device_revoked"].includes(error.code)) {
|
|
112145
112597
|
await store.clear();
|
|
112146
112598
|
throw new SessionEnded(error.code === "reauth_required" ? "This session was ended because its refresh token was reused. Sign in again with omo login." : "Sign in again with omo login.", DEVICE_REVOKING_REFUSALS.has(error.code), error.code);
|
|
112147
112599
|
}
|
|
@@ -112370,7 +112822,7 @@ function resolveInstallArgs(options, invocationName = process.env.OMO_INVOCATION
|
|
|
112370
112822
|
init_commander();
|
|
112371
112823
|
|
|
112372
112824
|
// packages/omo-opencode/src/cli/boulder/boulder.ts
|
|
112373
|
-
import { existsSync as
|
|
112825
|
+
import { existsSync as existsSync66 } from "node:fs";
|
|
112374
112826
|
|
|
112375
112827
|
// packages/omo-opencode/src/cli/boulder/formatter.ts
|
|
112376
112828
|
var import_picocolors22 = __toESM(require_picocolors(), 1);
|
|
@@ -112507,10 +112959,10 @@ async function boulder(options) {
|
|
|
112507
112959
|
const boulderFilePath = getBoulderFilePath(directory);
|
|
112508
112960
|
const state = readBoulderState(directory);
|
|
112509
112961
|
if (!state) {
|
|
112510
|
-
const message =
|
|
112962
|
+
const message = existsSync66(boulderFilePath) ? formatReadErrorMessage(options.json) : formatNoBoulderMessage(options.json);
|
|
112511
112963
|
process.stderr.write(`${message}
|
|
112512
112964
|
`);
|
|
112513
|
-
return
|
|
112965
|
+
return existsSync66(boulderFilePath) ? 2 : 1;
|
|
112514
112966
|
}
|
|
112515
112967
|
const works = getBoulderWorks(state);
|
|
112516
112968
|
const filteredWorks = options.workId ? works.filter((work) => work.work_id === options.workId) : works;
|
|
@@ -112528,12 +112980,12 @@ async function boulder(options) {
|
|
|
112528
112980
|
}
|
|
112529
112981
|
// packages/omo-opencode/src/cli/codex-ulw-loop.ts
|
|
112530
112982
|
import { spawn as spawn6 } from "node:child_process";
|
|
112531
|
-
import { existsSync as
|
|
112532
|
-
import { homedir as
|
|
112983
|
+
import { existsSync as existsSync67, readFileSync as readFileSync43, realpathSync as realpathSync13 } from "node:fs";
|
|
112984
|
+
import { homedir as homedir32 } from "node:os";
|
|
112533
112985
|
var ULW_LOOP_DELEGATION_SENTINEL = "OMO_ULW_LOOP_DELEGATED";
|
|
112534
112986
|
function resolveCodexUlwLoopCommand(input = {}) {
|
|
112535
112987
|
const env = input.env ?? process.env;
|
|
112536
|
-
const homeDir = input.homeDir ??
|
|
112988
|
+
const homeDir = input.homeDir ?? homedir32();
|
|
112537
112989
|
const localComponentBin = resolveLocalUlwLoopBin(env, homeDir);
|
|
112538
112990
|
if (localComponentBin !== null)
|
|
112539
112991
|
return { executable: localComponentBin, argsPrefix: [] };
|
|
@@ -112570,11 +113022,11 @@ async function codexUlwLoop(args) {
|
|
|
112570
113022
|
}
|
|
112571
113023
|
function resolveLocalUlwLoopBin(env, homeDir) {
|
|
112572
113024
|
const candidates = resolveCodexComponentBinCandidates({ executableName: "omo-ulw-loop", env, homeDir });
|
|
112573
|
-
return candidates.find((candidate) =>
|
|
113025
|
+
return candidates.find((candidate) => existsSync67(candidate)) ?? null;
|
|
112574
113026
|
}
|
|
112575
113027
|
function resolveLegacyLocalOmoBin(env, homeDir, currentExecutablePaths) {
|
|
112576
113028
|
const candidates = resolveCodexComponentBinCandidates({ executableName: "omo", env, homeDir });
|
|
112577
|
-
return candidates.find((candidate) =>
|
|
113029
|
+
return candidates.find((candidate) => existsSync67(candidate) && !isCurrentExecutable(candidate, currentExecutablePaths) && !isGeneratedRuntimeWrapper(candidate)) ?? null;
|
|
112578
113030
|
}
|
|
112579
113031
|
function isGeneratedRuntimeWrapper(candidate) {
|
|
112580
113032
|
try {
|
|
@@ -112591,7 +113043,7 @@ function isCurrentExecutable(candidate, currentExecutablePaths) {
|
|
|
112591
113043
|
}
|
|
112592
113044
|
function realpathOrSelf2(path) {
|
|
112593
113045
|
try {
|
|
112594
|
-
return
|
|
113046
|
+
return realpathSync13(path);
|
|
112595
113047
|
} catch (error) {
|
|
112596
113048
|
if (error instanceof Error)
|
|
112597
113049
|
return path;
|
|
@@ -112775,7 +113227,7 @@ function linkedWorktrees(records) {
|
|
|
112775
113227
|
return records.slice(1);
|
|
112776
113228
|
}
|
|
112777
113229
|
// packages/omo-opencode/src/cli/worktree-sweep/sweep.ts
|
|
112778
|
-
import { existsSync as
|
|
113230
|
+
import { existsSync as existsSync68 } from "node:fs";
|
|
112779
113231
|
import { stat as stat9 } from "node:fs/promises";
|
|
112780
113232
|
import os7 from "node:os";
|
|
112781
113233
|
import { normalize as normalize2 } from "node:path";
|
|
@@ -112866,7 +113318,7 @@ async function isOlderThan(worktreePath, days, now) {
|
|
|
112866
113318
|
}
|
|
112867
113319
|
}
|
|
112868
113320
|
async function classifyRecord(repo, record, defaultBranch, options) {
|
|
112869
|
-
const pathExists =
|
|
113321
|
+
const pathExists = existsSync68(record.path);
|
|
112870
113322
|
const external = isExcludedPath(record.path, options.excludePrefixes, options.home);
|
|
112871
113323
|
const current = options.currentWorktree !== undefined && record.path === options.currentWorktree;
|
|
112872
113324
|
if (record.locked || !pathExists || external || current) {
|
|
@@ -112895,7 +113347,7 @@ async function sweepRepo(repo, options) {
|
|
|
112895
113347
|
const records = linkedWorktrees(allRecords);
|
|
112896
113348
|
const startedInLinked = records.some((record) => record.path === toplevel);
|
|
112897
113349
|
const mainWorktree = allRecords[0]?.path;
|
|
112898
|
-
const root = startedInLinked && mainWorktree !== undefined &&
|
|
113350
|
+
const root = startedInLinked && mainWorktree !== undefined && existsSync68(mainWorktree) ? mainWorktree : toplevel;
|
|
112899
113351
|
const currentWorktree = startedInLinked ? toplevel : undefined;
|
|
112900
113352
|
const classifications = [];
|
|
112901
113353
|
for (const record of records) {
|
|
@@ -113024,7 +113476,7 @@ prunes.
|
|
|
113024
113476
|
|
|
113025
113477
|
// packages/omo-opencode/src/cli/config-migrate.ts
|
|
113026
113478
|
init_startup_migration();
|
|
113027
|
-
import { posix as
|
|
113479
|
+
import { posix as posix13 } from "node:path";
|
|
113028
113480
|
function reports(result) {
|
|
113029
113481
|
return result.results.map((entry) => ({
|
|
113030
113482
|
diagnostics: entry.diagnostics,
|
|
@@ -113058,7 +113510,7 @@ function runConfigMigrate(options = {}) {
|
|
|
113058
113510
|
dryRun: options.dryRun ?? false,
|
|
113059
113511
|
environment,
|
|
113060
113512
|
...homeDir === undefined ? {} : { env: { HOME: homeDir }, homeDir },
|
|
113061
|
-
pathOperations:
|
|
113513
|
+
pathOperations: posix13
|
|
113062
113514
|
});
|
|
113063
113515
|
const report = reports(result);
|
|
113064
113516
|
const response = {
|