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/index.js
CHANGED
|
@@ -2132,7 +2132,7 @@ var package_default;
|
|
|
2132
2132
|
var init_package = __esm(() => {
|
|
2133
2133
|
package_default = {
|
|
2134
2134
|
name: "oh-my-opencode",
|
|
2135
|
-
version: "5.1.
|
|
2135
|
+
version: "5.1.46",
|
|
2136
2136
|
description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
|
|
2137
2137
|
main: "./dist/index.js",
|
|
2138
2138
|
types: "dist/index.d.ts",
|
|
@@ -2252,6 +2252,8 @@ var init_package = __esm(() => {
|
|
|
2252
2252
|
"build:senpi-plugin": "bun run build:lsp-daemon && bun run build:ast-grep-mcp && bun run build:senpi-plugin:stage",
|
|
2253
2253
|
"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",
|
|
2254
2254
|
"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",
|
|
2255
|
+
"bundle-inputs": "node packages/omo-senpi/plugin/scripts/bundle-inputs.mjs",
|
|
2256
|
+
"bundle-inputs:check": "node packages/omo-senpi/plugin/scripts/bundle-inputs.mjs --check",
|
|
2255
2257
|
"build:materialize-frontend": "node packages/omo-codex/plugin/scripts/materialize-shared-upstreams.mjs --strict",
|
|
2256
2258
|
"build:shared-skills-assets": "bun run build:materialize-frontend && rm -rf dist/skills && cp -R packages/shared-skills/skills dist/skills",
|
|
2257
2259
|
"build:lsp-tools-mcp": "npm --prefix packages/lsp-tools-mcp ci && npm --prefix packages/lsp-tools-mcp run build",
|
|
@@ -2270,7 +2272,8 @@ var init_package = __esm(() => {
|
|
|
2270
2272
|
postinstall: "node postinstall.mjs",
|
|
2271
2273
|
prepublishOnly: "bun run clean && bun run build:lsp-tools-mcp && bun run build:lsp-daemon && bun run build",
|
|
2272
2274
|
"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",
|
|
2273
|
-
|
|
2275
|
+
"check:copy": "bun script/check-copy.ts",
|
|
2276
|
+
typecheck: "bun run check:copy && tsgo --noEmit && bun run typecheck:script && bun run typecheck:packages",
|
|
2274
2277
|
"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",
|
|
2275
2278
|
"typecheck:script": "tsgo --noEmit -p script/tsconfig.json",
|
|
2276
2279
|
test: "bun test --timeout 20000",
|
|
@@ -2281,7 +2284,10 @@ var init_package = __esm(() => {
|
|
|
2281
2284
|
"test:windows-codex": "bun run test:codex",
|
|
2282
2285
|
"build:git-bash-mcp": "bun run --cwd packages/git-bash-mcp build",
|
|
2283
2286
|
"build:ast-grep-mcp": "bun run --cwd packages/ast-grep-mcp build",
|
|
2284
|
-
"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"
|
|
2287
|
+
"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
|
+
"lint:ratchet": "bun script/lint-ratchet.ts",
|
|
2289
|
+
"lint:ratchet:update": "bun script/lint-ratchet.ts --update",
|
|
2290
|
+
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"
|
|
2285
2291
|
},
|
|
2286
2292
|
keywords: [
|
|
2287
2293
|
"opencode",
|
|
@@ -2309,7 +2315,7 @@ var init_package = __esm(() => {
|
|
|
2309
2315
|
},
|
|
2310
2316
|
devDependencies: {
|
|
2311
2317
|
"@clack/prompts": "^1.8.1",
|
|
2312
|
-
"@code-yeongyu/senpi": "2026.10.
|
|
2318
|
+
"@code-yeongyu/senpi": "2026.10.23-1",
|
|
2313
2319
|
"@modelcontextprotocol/sdk": "^1.30.0",
|
|
2314
2320
|
"@oh-my-opencode/agents-md-core": "workspace:*",
|
|
2315
2321
|
"@oh-my-opencode/ast-grep-mcp": "workspace:*",
|
|
@@ -2363,6 +2369,8 @@ var init_package = __esm(() => {
|
|
|
2363
2369
|
"jsonc-parser": "^3.3.1",
|
|
2364
2370
|
"node-pty": "^1.1.0",
|
|
2365
2371
|
omowright: "github:code-yeongyu/omowright#f87ef4d63fe7b56fe117dbab246c8ad88dd8a780",
|
|
2372
|
+
"oxc-parser": "0.148.0",
|
|
2373
|
+
oxlint: "1.89.0",
|
|
2366
2374
|
picocolors: "^1.1.1",
|
|
2367
2375
|
picomatch: "^4.0.7",
|
|
2368
2376
|
"posthog-node": "^5.52.4",
|
|
@@ -2370,18 +2378,18 @@ var init_package = __esm(() => {
|
|
|
2370
2378
|
typescript: "^7.0.2"
|
|
2371
2379
|
},
|
|
2372
2380
|
optionalDependencies: {
|
|
2373
|
-
"oh-my-opencode-darwin-arm64": "5.1.
|
|
2374
|
-
"oh-my-opencode-darwin-x64": "5.1.
|
|
2375
|
-
"oh-my-opencode-darwin-x64-baseline": "5.1.
|
|
2376
|
-
"oh-my-opencode-linux-arm64": "5.1.
|
|
2377
|
-
"oh-my-opencode-linux-arm64-musl": "5.1.
|
|
2378
|
-
"oh-my-opencode-linux-x64": "5.1.
|
|
2379
|
-
"oh-my-opencode-linux-x64-baseline": "5.1.
|
|
2380
|
-
"oh-my-opencode-linux-x64-musl": "5.1.
|
|
2381
|
-
"oh-my-opencode-linux-x64-musl-baseline": "5.1.
|
|
2382
|
-
"oh-my-opencode-windows-arm64": "5.1.
|
|
2383
|
-
"oh-my-opencode-windows-x64": "5.1.
|
|
2384
|
-
"oh-my-opencode-windows-x64-baseline": "5.1.
|
|
2381
|
+
"oh-my-opencode-darwin-arm64": "5.1.46",
|
|
2382
|
+
"oh-my-opencode-darwin-x64": "5.1.46",
|
|
2383
|
+
"oh-my-opencode-darwin-x64-baseline": "5.1.46",
|
|
2384
|
+
"oh-my-opencode-linux-arm64": "5.1.46",
|
|
2385
|
+
"oh-my-opencode-linux-arm64-musl": "5.1.46",
|
|
2386
|
+
"oh-my-opencode-linux-x64": "5.1.46",
|
|
2387
|
+
"oh-my-opencode-linux-x64-baseline": "5.1.46",
|
|
2388
|
+
"oh-my-opencode-linux-x64-musl": "5.1.46",
|
|
2389
|
+
"oh-my-opencode-linux-x64-musl-baseline": "5.1.46",
|
|
2390
|
+
"oh-my-opencode-windows-arm64": "5.1.46",
|
|
2391
|
+
"oh-my-opencode-windows-x64": "5.1.46",
|
|
2392
|
+
"oh-my-opencode-windows-x64-baseline": "5.1.46"
|
|
2385
2393
|
},
|
|
2386
2394
|
overrides: {
|
|
2387
2395
|
hono: "^4.13.8",
|
|
@@ -7543,6 +7551,20 @@ var init_logger = __esm(() => {
|
|
|
7543
7551
|
DEFAULT_MAX_LOG_FILE_SIZE_BYTES = 50 * 1024 * 1024;
|
|
7544
7552
|
});
|
|
7545
7553
|
|
|
7554
|
+
// packages/utils/src/logging/product-identity.ts
|
|
7555
|
+
function createProductIdentity(input) {
|
|
7556
|
+
return {
|
|
7557
|
+
pluginName: input.pluginName,
|
|
7558
|
+
legacyPluginName: input.legacyPluginName,
|
|
7559
|
+
publishedPackageName: input.publishedPackageName,
|
|
7560
|
+
acceptedPackageNames: input.acceptedPackageNames ?? [input.publishedPackageName, input.pluginName],
|
|
7561
|
+
configBasename: input.configBasename,
|
|
7562
|
+
legacyConfigBasename: input.legacyConfigBasename,
|
|
7563
|
+
logFileName: input.logFileName,
|
|
7564
|
+
cacheDirName: input.cacheDirName
|
|
7565
|
+
};
|
|
7566
|
+
}
|
|
7567
|
+
|
|
7546
7568
|
// packages/utils/src/logging/index.ts
|
|
7547
7569
|
var init_logging = __esm(() => {
|
|
7548
7570
|
init_logger();
|
|
@@ -7963,8 +7985,17 @@ function classifyPathEnvironment(absolutePath) {
|
|
|
7963
7985
|
}
|
|
7964
7986
|
var init_classify_path_environment = () => {};
|
|
7965
7987
|
|
|
7988
|
+
// packages/utils/src/command-executor/home-directory.ts
|
|
7989
|
+
import { homedir as homedir3 } from "os";
|
|
7990
|
+
function getHomeDirectory() {
|
|
7991
|
+
return process.env.HOME || process.env.USERPROFILE || homedir3();
|
|
7992
|
+
}
|
|
7993
|
+
var init_home_directory = () => {};
|
|
7994
|
+
|
|
7966
7995
|
// packages/utils/src/command-executor.ts
|
|
7967
|
-
var init_command_executor = () => {
|
|
7996
|
+
var init_command_executor = __esm(() => {
|
|
7997
|
+
init_home_directory();
|
|
7998
|
+
});
|
|
7968
7999
|
|
|
7969
8000
|
// packages/utils/src/git-worktree/index.ts
|
|
7970
8001
|
var init_git_worktree = () => {};
|
|
@@ -8007,6 +8038,25 @@ var init_internal_initiator_marker = __esm(() => {
|
|
|
8007
8038
|
INTERNAL_NOREPLY_MARKER_DETECT_PATTERN = /<!--\s*OMO_INTERNAL_NOREPLY\s*-->/;
|
|
8008
8039
|
});
|
|
8009
8040
|
|
|
8041
|
+
// packages/model-core/src/latest-models.ts
|
|
8042
|
+
var LATEST_MODEL_BY_FAMILY;
|
|
8043
|
+
var init_latest_models = __esm(() => {
|
|
8044
|
+
LATEST_MODEL_BY_FAMILY = {
|
|
8045
|
+
claudeOpus: "claude-opus-5-5",
|
|
8046
|
+
claudeSonnet: "claude-sonnet-5-5",
|
|
8047
|
+
claudeHaiku: "claude-haiku-5-5",
|
|
8048
|
+
claudeFable: "claude-fable-5-1",
|
|
8049
|
+
gptAstra: "gpt-6-astra",
|
|
8050
|
+
gptSol: "gpt-6.1-sol",
|
|
8051
|
+
gptSolFast: "gpt-6.1-sol-fast",
|
|
8052
|
+
gptLunaFast: "gpt-6-luna-fast",
|
|
8053
|
+
glm: "glm-5.3",
|
|
8054
|
+
glmFlash: "glm-5.3-flash",
|
|
8055
|
+
kimi: "kimi-k3",
|
|
8056
|
+
geminiPro: "gemini-4-argon"
|
|
8057
|
+
};
|
|
8058
|
+
});
|
|
8059
|
+
|
|
8010
8060
|
// packages/utils/src/migration/agent-category.ts
|
|
8011
8061
|
function configureMigrationCategoryDefaults(defaults) {
|
|
8012
8062
|
categoryDefaults = defaults ?? {};
|
|
@@ -9263,17 +9313,18 @@ var init_file_reference_resolver = __esm(() => {
|
|
|
9263
9313
|
// packages/model-core/src/agent-model-requirements.ts
|
|
9264
9314
|
var AGENT_MODEL_REQUIREMENTS;
|
|
9265
9315
|
var init_agent_model_requirements = __esm(() => {
|
|
9316
|
+
init_latest_models();
|
|
9266
9317
|
AGENT_MODEL_REQUIREMENTS = {
|
|
9267
9318
|
sisyphus: {
|
|
9268
9319
|
fallbackChain: [
|
|
9269
9320
|
{
|
|
9270
9321
|
providers: ["anthropic", "github-copilot", "opencode"],
|
|
9271
|
-
model:
|
|
9322
|
+
model: LATEST_MODEL_BY_FAMILY.claudeOpus,
|
|
9272
9323
|
variant: "max"
|
|
9273
9324
|
},
|
|
9274
9325
|
{
|
|
9275
9326
|
providers: ["opencode-go", "kimi-for-coding", "moonshotai", "opencode", "bailian-coding-plan", "moonshotai-cn", "firmware", "ollama-cloud", "aihubmix"],
|
|
9276
|
-
model:
|
|
9327
|
+
model: LATEST_MODEL_BY_FAMILY.kimi
|
|
9277
9328
|
},
|
|
9278
9329
|
{
|
|
9279
9330
|
providers: ["openai", "chatgpt-subscription", "github-copilot", "opencode"],
|
|
@@ -9307,7 +9358,7 @@ var init_agent_model_requirements = __esm(() => {
|
|
|
9307
9358
|
{ providers: ["github-copilot"], model: "gpt-5.6-sol", variant: "high" },
|
|
9308
9359
|
{
|
|
9309
9360
|
providers: ["google", "google-vertex", "opencode"],
|
|
9310
|
-
model:
|
|
9361
|
+
model: LATEST_MODEL_BY_FAMILY.geminiPro,
|
|
9311
9362
|
variant: "high"
|
|
9312
9363
|
},
|
|
9313
9364
|
{
|
|
@@ -9317,7 +9368,7 @@ var init_agent_model_requirements = __esm(() => {
|
|
|
9317
9368
|
},
|
|
9318
9369
|
{
|
|
9319
9370
|
providers: ["anthropic", "github-copilot", "opencode"],
|
|
9320
|
-
model:
|
|
9371
|
+
model: LATEST_MODEL_BY_FAMILY.claudeOpus,
|
|
9321
9372
|
variant: "max"
|
|
9322
9373
|
},
|
|
9323
9374
|
{ providers: ["opencode-go"], model: "glm-5.2" }
|
|
@@ -9326,8 +9377,8 @@ var init_agent_model_requirements = __esm(() => {
|
|
|
9326
9377
|
librarian: {
|
|
9327
9378
|
fallbackChain: [
|
|
9328
9379
|
{ providers: ["kimi-for-coding"], model: "kimi-for-coding-highspeed", variant: "off" },
|
|
9329
|
-
{ providers: ["openai", "chatgpt-subscription"], model:
|
|
9330
|
-
{ providers: ["anthropic", "github-copilot"], model:
|
|
9380
|
+
{ providers: ["openai", "chatgpt-subscription"], model: LATEST_MODEL_BY_FAMILY.gptLunaFast, variant: "low" },
|
|
9381
|
+
{ providers: ["anthropic", "github-copilot"], model: LATEST_MODEL_BY_FAMILY.claudeHaiku, variant: "medium" },
|
|
9331
9382
|
{ providers: ["deepseek"], model: "deepseek-flash", variant: "max" },
|
|
9332
9383
|
{ providers: ["opencode-go", "bailian-coding-plan"], model: "qwen3.7-plus" },
|
|
9333
9384
|
{ providers: ["opencode-go"], model: "minimax-m2.7" }
|
|
@@ -9336,8 +9387,8 @@ var init_agent_model_requirements = __esm(() => {
|
|
|
9336
9387
|
explore: {
|
|
9337
9388
|
fallbackChain: [
|
|
9338
9389
|
{ providers: ["kimi-for-coding"], model: "kimi-for-coding-highspeed", variant: "off" },
|
|
9339
|
-
{ providers: ["openai", "chatgpt-subscription"], model:
|
|
9340
|
-
{ providers: ["anthropic", "github-copilot"], model:
|
|
9390
|
+
{ providers: ["openai", "chatgpt-subscription"], model: LATEST_MODEL_BY_FAMILY.gptLunaFast, variant: "low" },
|
|
9391
|
+
{ providers: ["anthropic", "github-copilot"], model: LATEST_MODEL_BY_FAMILY.claudeHaiku, variant: "medium" },
|
|
9341
9392
|
{ providers: ["deepseek"], model: "deepseek-flash", variant: "max" },
|
|
9342
9393
|
{ providers: ["opencode-go", "bailian-coding-plan"], model: "qwen3.7-plus" },
|
|
9343
9394
|
{ providers: ["opencode-go"], model: "minimax-m2.7" }
|
|
@@ -9346,7 +9397,7 @@ var init_agent_model_requirements = __esm(() => {
|
|
|
9346
9397
|
"multimodal-looker": {
|
|
9347
9398
|
fallbackChain: [
|
|
9348
9399
|
{ providers: ["openai", "chatgpt-subscription", "opencode"], model: "gpt-5.6-sol", variant: "low" },
|
|
9349
|
-
{ providers: ["opencode-go"], model:
|
|
9400
|
+
{ providers: ["opencode-go"], model: LATEST_MODEL_BY_FAMILY.kimi },
|
|
9350
9401
|
{ providers: ["zai-coding-plan"], model: "glm-4.6v" },
|
|
9351
9402
|
{ providers: ["openai", "chatgpt-subscription", "github-copilot", "opencode"], model: "gpt-5-nano" }
|
|
9352
9403
|
]
|
|
@@ -9355,17 +9406,17 @@ var init_agent_model_requirements = __esm(() => {
|
|
|
9355
9406
|
fallbackChain: [
|
|
9356
9407
|
{
|
|
9357
9408
|
providers: ["anthropic", "github-copilot", "opencode"],
|
|
9358
|
-
model:
|
|
9409
|
+
model: LATEST_MODEL_BY_FAMILY.claudeFable,
|
|
9359
9410
|
variant: "xhigh"
|
|
9360
9411
|
},
|
|
9361
9412
|
{
|
|
9362
9413
|
providers: ["anthropic", "github-copilot", "opencode"],
|
|
9363
|
-
model:
|
|
9414
|
+
model: LATEST_MODEL_BY_FAMILY.claudeOpus,
|
|
9364
9415
|
variant: "max"
|
|
9365
9416
|
},
|
|
9366
9417
|
{
|
|
9367
9418
|
providers: ["opencode-go", "kimi-for-coding", "moonshotai", "opencode"],
|
|
9368
|
-
model:
|
|
9419
|
+
model: LATEST_MODEL_BY_FAMILY.kimi,
|
|
9369
9420
|
variant: "max"
|
|
9370
9421
|
}
|
|
9371
9422
|
]
|
|
@@ -9374,34 +9425,34 @@ var init_agent_model_requirements = __esm(() => {
|
|
|
9374
9425
|
fallbackChain: [
|
|
9375
9426
|
{
|
|
9376
9427
|
providers: ["anthropic", "github-copilot", "opencode"],
|
|
9377
|
-
model:
|
|
9428
|
+
model: LATEST_MODEL_BY_FAMILY.claudeFable,
|
|
9378
9429
|
variant: "max"
|
|
9379
9430
|
},
|
|
9380
9431
|
{
|
|
9381
9432
|
providers: ["anthropic", "github-copilot", "opencode"],
|
|
9382
|
-
model:
|
|
9433
|
+
model: LATEST_MODEL_BY_FAMILY.claudeOpus,
|
|
9383
9434
|
variant: "max"
|
|
9384
9435
|
},
|
|
9385
9436
|
{
|
|
9386
9437
|
providers: ["opencode-go", "kimi-for-coding", "moonshotai", "opencode"],
|
|
9387
|
-
model:
|
|
9438
|
+
model: LATEST_MODEL_BY_FAMILY.kimi,
|
|
9388
9439
|
variant: "max"
|
|
9389
9440
|
}
|
|
9390
9441
|
]
|
|
9391
9442
|
},
|
|
9392
9443
|
momus: {
|
|
9393
9444
|
fallbackChain: [
|
|
9394
|
-
{ providers: ["openai", "chatgpt-subscription"], model:
|
|
9395
|
-
{ providers: ["github-copilot"], model:
|
|
9396
|
-
{ providers: ["openai", "chatgpt-subscription", "opencode"], model:
|
|
9445
|
+
{ providers: ["openai", "chatgpt-subscription"], model: LATEST_MODEL_BY_FAMILY.gptAstra, variant: "xhigh" },
|
|
9446
|
+
{ providers: ["github-copilot"], model: LATEST_MODEL_BY_FAMILY.gptAstra, variant: "high" },
|
|
9447
|
+
{ providers: ["openai", "chatgpt-subscription", "opencode"], model: LATEST_MODEL_BY_FAMILY.gptAstra, variant: "high" },
|
|
9397
9448
|
{
|
|
9398
9449
|
providers: ["anthropic", "github-copilot", "opencode"],
|
|
9399
|
-
model:
|
|
9450
|
+
model: LATEST_MODEL_BY_FAMILY.claudeOpus,
|
|
9400
9451
|
variant: "max"
|
|
9401
9452
|
},
|
|
9402
9453
|
{
|
|
9403
9454
|
providers: ["google", "google-vertex", "opencode"],
|
|
9404
|
-
model:
|
|
9455
|
+
model: LATEST_MODEL_BY_FAMILY.geminiPro,
|
|
9405
9456
|
variant: "high"
|
|
9406
9457
|
},
|
|
9407
9458
|
{
|
|
@@ -9415,7 +9466,7 @@ var init_agent_model_requirements = __esm(() => {
|
|
|
9415
9466
|
atlas: {
|
|
9416
9467
|
fallbackChain: [
|
|
9417
9468
|
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-sonnet-5" },
|
|
9418
|
-
{ providers: ["opencode-go"], model:
|
|
9469
|
+
{ providers: ["opencode-go"], model: LATEST_MODEL_BY_FAMILY.kimi },
|
|
9419
9470
|
{
|
|
9420
9471
|
providers: ["openai", "chatgpt-subscription", "github-copilot", "opencode"],
|
|
9421
9472
|
model: "gpt-5.6-sol",
|
|
@@ -9429,7 +9480,7 @@ var init_agent_model_requirements = __esm(() => {
|
|
|
9429
9480
|
"sisyphus-junior": {
|
|
9430
9481
|
fallbackChain: [
|
|
9431
9482
|
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-sonnet-5" },
|
|
9432
|
-
{ providers: ["opencode-go"], model:
|
|
9483
|
+
{ providers: ["opencode-go"], model: LATEST_MODEL_BY_FAMILY.kimi },
|
|
9433
9484
|
{
|
|
9434
9485
|
providers: ["openai", "chatgpt-subscription", "github-copilot", "opencode"],
|
|
9435
9486
|
model: "gpt-5.6-sol",
|
|
@@ -9447,32 +9498,33 @@ var init_agent_model_requirements = __esm(() => {
|
|
|
9447
9498
|
// packages/model-core/src/category-model-requirements.ts
|
|
9448
9499
|
var CATEGORY_MODEL_REQUIREMENTS;
|
|
9449
9500
|
var init_category_model_requirements = __esm(() => {
|
|
9501
|
+
init_latest_models();
|
|
9450
9502
|
CATEGORY_MODEL_REQUIREMENTS = {
|
|
9451
9503
|
"visual-engineering": {
|
|
9452
9504
|
fallbackChain: [
|
|
9453
|
-
{ providers: ["google", "google-vertex", "opencode"], model:
|
|
9505
|
+
{ providers: ["google", "google-vertex", "opencode"], model: LATEST_MODEL_BY_FAMILY.geminiPro, variant: "low" },
|
|
9454
9506
|
{
|
|
9455
9507
|
providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
|
|
9456
|
-
model:
|
|
9508
|
+
model: LATEST_MODEL_BY_FAMILY.claudeFable,
|
|
9457
9509
|
variant: "max"
|
|
9458
9510
|
},
|
|
9459
9511
|
{
|
|
9460
9512
|
providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
|
|
9461
|
-
model:
|
|
9513
|
+
model: LATEST_MODEL_BY_FAMILY.claudeOpus,
|
|
9462
9514
|
variant: "max"
|
|
9463
9515
|
},
|
|
9464
9516
|
{
|
|
9465
9517
|
providers: ["kimi-for-coding", "moonshotai", "opencode-go", "opencode"],
|
|
9466
|
-
model:
|
|
9518
|
+
model: LATEST_MODEL_BY_FAMILY.kimi,
|
|
9467
9519
|
variant: "max"
|
|
9468
9520
|
}
|
|
9469
9521
|
]
|
|
9470
9522
|
},
|
|
9471
9523
|
ultrabrain: {
|
|
9472
9524
|
fallbackChain: [
|
|
9473
|
-
{ providers: ["openai", "chatgpt-subscription"], model:
|
|
9474
|
-
{ providers: ["github-copilot"], model:
|
|
9475
|
-
{ providers: ["openai", "chatgpt-subscription", "opencode"], model:
|
|
9525
|
+
{ providers: ["openai", "chatgpt-subscription"], model: LATEST_MODEL_BY_FAMILY.gptAstra, variant: "max" },
|
|
9526
|
+
{ providers: ["github-copilot"], model: LATEST_MODEL_BY_FAMILY.gptAstra, variant: "max" },
|
|
9527
|
+
{ providers: ["openai", "chatgpt-subscription", "opencode"], model: LATEST_MODEL_BY_FAMILY.gptAstra, variant: "max" },
|
|
9476
9528
|
{ providers: ["openai", "chatgpt-subscription"], model: "gpt-5.6-sol", variant: "max" },
|
|
9477
9529
|
{ providers: ["github-copilot"], model: "gpt-5.6-sol", variant: "max" },
|
|
9478
9530
|
{ providers: ["openai", "chatgpt-subscription", "opencode"], model: "gpt-5.6-sol", variant: "max" }
|
|
@@ -9480,8 +9532,8 @@ var init_category_model_requirements = __esm(() => {
|
|
|
9480
9532
|
},
|
|
9481
9533
|
"deep-low": {
|
|
9482
9534
|
fallbackChain: [
|
|
9483
|
-
{ providers: ["openai", "chatgpt-subscription"], model:
|
|
9484
|
-
{ providers: ["openai", "chatgpt-subscription"], model:
|
|
9535
|
+
{ providers: ["openai", "chatgpt-subscription"], model: LATEST_MODEL_BY_FAMILY.gptSol, variant: "medium" },
|
|
9536
|
+
{ providers: ["openai", "chatgpt-subscription"], model: LATEST_MODEL_BY_FAMILY.gptSolFast, variant: "medium" },
|
|
9485
9537
|
{
|
|
9486
9538
|
providers: ["openai", "chatgpt-subscription", "github-copilot", "opencode"],
|
|
9487
9539
|
model: "gpt-5.6-sol",
|
|
@@ -9494,7 +9546,7 @@ var init_category_model_requirements = __esm(() => {
|
|
|
9494
9546
|
fallbackChain: [
|
|
9495
9547
|
{
|
|
9496
9548
|
providers: ["openai", "chatgpt-subscription", "github-copilot", "opencode"],
|
|
9497
|
-
model:
|
|
9549
|
+
model: LATEST_MODEL_BY_FAMILY.gptAstra,
|
|
9498
9550
|
variant: "high"
|
|
9499
9551
|
}
|
|
9500
9552
|
]
|
|
@@ -9503,27 +9555,27 @@ var init_category_model_requirements = __esm(() => {
|
|
|
9503
9555
|
fallbackChain: [
|
|
9504
9556
|
{
|
|
9505
9557
|
providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
|
|
9506
|
-
model:
|
|
9558
|
+
model: LATEST_MODEL_BY_FAMILY.claudeFable,
|
|
9507
9559
|
variant: "max"
|
|
9508
9560
|
},
|
|
9509
9561
|
{
|
|
9510
9562
|
providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
|
|
9511
|
-
model:
|
|
9563
|
+
model: LATEST_MODEL_BY_FAMILY.claudeOpus,
|
|
9512
9564
|
variant: "max"
|
|
9513
9565
|
},
|
|
9514
9566
|
{
|
|
9515
9567
|
providers: ["kimi-for-coding", "moonshotai", "opencode-go", "opencode"],
|
|
9516
|
-
model:
|
|
9568
|
+
model: LATEST_MODEL_BY_FAMILY.kimi,
|
|
9517
9569
|
variant: "max"
|
|
9518
9570
|
}
|
|
9519
9571
|
]
|
|
9520
9572
|
},
|
|
9521
9573
|
quick: {
|
|
9522
9574
|
fallbackChain: [
|
|
9523
|
-
{ providers: ["openai", "chatgpt-subscription"], model:
|
|
9575
|
+
{ providers: ["openai", "chatgpt-subscription"], model: LATEST_MODEL_BY_FAMILY.gptLunaFast, variant: "low" },
|
|
9524
9576
|
{
|
|
9525
9577
|
providers: ["anthropic", "anthropic-api", "github-copilot"],
|
|
9526
|
-
model:
|
|
9578
|
+
model: LATEST_MODEL_BY_FAMILY.claudeHaiku,
|
|
9527
9579
|
variant: "medium"
|
|
9528
9580
|
},
|
|
9529
9581
|
{ providers: ["deepseek"], model: "deepseek-flash", variant: "off" },
|
|
@@ -9535,7 +9587,7 @@ var init_category_model_requirements = __esm(() => {
|
|
|
9535
9587
|
{ providers: ["opencode-go"], model: "minimax-m3", variant: "max" },
|
|
9536
9588
|
{ providers: ["opencode-go"], model: "minimax-m2.7", variant: "max" },
|
|
9537
9589
|
{ providers: ["xai"], model: "grok-4.20-0309-non-reasoning" },
|
|
9538
|
-
{ providers: ["zai-coding-plan"], model:
|
|
9590
|
+
{ providers: ["zai-coding-plan"], model: LATEST_MODEL_BY_FAMILY.glmFlash, variant: "low" },
|
|
9539
9591
|
{ providers: ["xiaomi"], model: "mimo-v2.6-flash", variant: "low" }
|
|
9540
9592
|
]
|
|
9541
9593
|
},
|
|
@@ -9543,13 +9595,13 @@ var init_category_model_requirements = __esm(() => {
|
|
|
9543
9595
|
fallbackChain: [
|
|
9544
9596
|
{
|
|
9545
9597
|
providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
|
|
9546
|
-
model:
|
|
9598
|
+
model: LATEST_MODEL_BY_FAMILY.claudeSonnet,
|
|
9547
9599
|
variant: "medium"
|
|
9548
9600
|
},
|
|
9549
9601
|
{ providers: ["xiaomi", "opencode-go"], model: "mimo-v2.6-pro", variant: "max" },
|
|
9550
9602
|
{ providers: ["xai", "github-copilot", "opencode-go"], model: "grok-4.7", variant: "xhigh" },
|
|
9551
|
-
{ providers: ["zai-coding-plan", "opencode-go"], model:
|
|
9552
|
-
{ providers: ["openai", "chatgpt-subscription"], model:
|
|
9603
|
+
{ providers: ["zai-coding-plan", "opencode-go"], model: LATEST_MODEL_BY_FAMILY.glm, variant: "high" },
|
|
9604
|
+
{ providers: ["openai", "chatgpt-subscription"], model: LATEST_MODEL_BY_FAMILY.gptSol, variant: "medium" },
|
|
9553
9605
|
{
|
|
9554
9606
|
providers: ["openai", "chatgpt-subscription", "github-copilot", "opencode"],
|
|
9555
9607
|
model: "gpt-5.6-sol",
|
|
@@ -9573,13 +9625,13 @@ var init_category_model_requirements = __esm(() => {
|
|
|
9573
9625
|
fallbackChain: [
|
|
9574
9626
|
{
|
|
9575
9627
|
providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
|
|
9576
|
-
model:
|
|
9628
|
+
model: LATEST_MODEL_BY_FAMILY.claudeOpus,
|
|
9577
9629
|
variant: "medium"
|
|
9578
9630
|
},
|
|
9579
|
-
{ providers: ["zai-coding-plan", "opencode-go"], model:
|
|
9631
|
+
{ providers: ["zai-coding-plan", "opencode-go"], model: LATEST_MODEL_BY_FAMILY.glm, variant: "max" },
|
|
9580
9632
|
{
|
|
9581
9633
|
providers: ["kimi-for-coding", "moonshotai", "opencode-go", "opencode"],
|
|
9582
|
-
model:
|
|
9634
|
+
model: LATEST_MODEL_BY_FAMILY.kimi,
|
|
9583
9635
|
variant: "max"
|
|
9584
9636
|
}
|
|
9585
9637
|
]
|
|
@@ -9587,10 +9639,10 @@ var init_category_model_requirements = __esm(() => {
|
|
|
9587
9639
|
writing: {
|
|
9588
9640
|
requiresAnyModel: true,
|
|
9589
9641
|
fallbackChain: [
|
|
9590
|
-
{ providers: ["google", "google-vertex", "opencode"], model:
|
|
9642
|
+
{ providers: ["google", "google-vertex", "opencode"], model: LATEST_MODEL_BY_FAMILY.geminiPro, variant: "low" },
|
|
9591
9643
|
{
|
|
9592
9644
|
providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
|
|
9593
|
-
model:
|
|
9645
|
+
model: LATEST_MODEL_BY_FAMILY.claudeOpus,
|
|
9594
9646
|
variant: "low"
|
|
9595
9647
|
},
|
|
9596
9648
|
{
|
|
@@ -11082,6 +11134,7 @@ var init_src2 = __esm(() => {
|
|
|
11082
11134
|
init_model_resolver();
|
|
11083
11135
|
init_provider_model_id_transform();
|
|
11084
11136
|
init_model_requirements();
|
|
11137
|
+
init_latest_models();
|
|
11085
11138
|
init_model_family_detectors();
|
|
11086
11139
|
init_model_capability_aliases();
|
|
11087
11140
|
init_model_capability_heuristics();
|
|
@@ -11403,16 +11456,17 @@ Approach:
|
|
|
11403
11456
|
- This is for tasks requiring exceptional creativity
|
|
11404
11457
|
</Category_Context>`, GOOGLE_CATEGORIES;
|
|
11405
11458
|
var init_google_categories = __esm(() => {
|
|
11459
|
+
init_latest_models();
|
|
11406
11460
|
GOOGLE_CATEGORIES = [
|
|
11407
11461
|
{
|
|
11408
11462
|
name: "visual-engineering",
|
|
11409
|
-
config: { model:
|
|
11463
|
+
config: { model: `google/${LATEST_MODEL_BY_FAMILY.geminiPro}`, variant: "low" },
|
|
11410
11464
|
description: "Visual design, UI/UX, frontend, styling, animation, and design systems",
|
|
11411
11465
|
promptAppend: VISUAL_CATEGORY_PROMPT_APPEND
|
|
11412
11466
|
},
|
|
11413
11467
|
{
|
|
11414
11468
|
name: "artistry",
|
|
11415
|
-
config: { model:
|
|
11469
|
+
config: { model: `anthropic/${LATEST_MODEL_BY_FAMILY.claudeFable}`, variant: "max" },
|
|
11416
11470
|
description: "Complex problem-solving with unconventional, creative approaches - beyond standard patterns",
|
|
11417
11471
|
promptAppend: ARTISTRY_CATEGORY_PROMPT_APPEND
|
|
11418
11472
|
}
|
|
@@ -11446,10 +11500,11 @@ ANTI-AI-SLOP RULES (NON-NEGOTIABLE):
|
|
|
11446
11500
|
- Write like a human, not a corporate template.
|
|
11447
11501
|
</Category_Context>`, KIMI_CATEGORIES;
|
|
11448
11502
|
var init_kimi_categories = __esm(() => {
|
|
11503
|
+
init_latest_models();
|
|
11449
11504
|
KIMI_CATEGORIES = [
|
|
11450
11505
|
{
|
|
11451
11506
|
name: "writing",
|
|
11452
|
-
config: { model:
|
|
11507
|
+
config: { model: `google/${LATEST_MODEL_BY_FAMILY.geminiPro}`, variant: "low" },
|
|
11453
11508
|
description: "Documentation, prose, technical writing",
|
|
11454
11509
|
promptAppend: WRITING_CATEGORY_PROMPT_APPEND
|
|
11455
11510
|
}
|
|
@@ -11584,21 +11639,23 @@ You are working on tasks that don't fit specific categories but require moderate
|
|
|
11584
11639
|
</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>
|
|
11585
11640
|
<Caller_Warning>Provide explicit must-do steps, forbidden scope, and concrete success criteria.</Caller_Warning>`, UNSPECIFIED_HIGH_CATEGORY_PROMPT_APPEND = `<Category_Context>
|
|
11586
11641
|
You are working on tasks that don't fit specific categories but require substantial effort.
|
|
11587
|
-
</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
|
|
11642
|
+
</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;
|
|
11588
11643
|
var init_openai_categories = __esm(() => {
|
|
11589
11644
|
init_types();
|
|
11590
|
-
|
|
11645
|
+
init_latest_models();
|
|
11646
|
+
DEEP_LOW_GATE_MODELS = [LATEST_MODEL_BY_FAMILY.gptSol, LATEST_MODEL_BY_FAMILY.gptSolFast, "gpt-5.6-sol-fast", "gpt-5.6-sol"];
|
|
11647
|
+
DEEP_HIGH_GATE_MODEL = LATEST_MODEL_BY_FAMILY.gptAstra;
|
|
11591
11648
|
OPENAI_CATEGORIES = [
|
|
11592
11649
|
{
|
|
11593
11650
|
name: "ultrabrain",
|
|
11594
|
-
config: { model:
|
|
11651
|
+
config: { model: `openai/${LATEST_MODEL_BY_FAMILY.gptAstra}`, variant: "max" },
|
|
11595
11652
|
description: "Use ONLY for genuinely hard, logic-heavy tasks. Give clear goals only, not step-by-step instructions.",
|
|
11596
11653
|
promptAppend: ULTRABRAIN_CATEGORY_PROMPT_APPEND,
|
|
11597
11654
|
resolvePromptAppend: resolveUltrabrainCategoryPromptAppend
|
|
11598
11655
|
},
|
|
11599
11656
|
{
|
|
11600
11657
|
name: "deep-low",
|
|
11601
|
-
config: { model:
|
|
11658
|
+
config: { model: `openai/${LATEST_MODEL_BY_FAMILY.gptSol}`, variant: "medium" },
|
|
11602
11659
|
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.",
|
|
11603
11660
|
callerGuidance: DEEP_LOW_CATEGORY_CALLER_GUIDANCE,
|
|
11604
11661
|
promptAppend: DEEP_LOW_CATEGORY_PROMPT_APPEND,
|
|
@@ -11607,7 +11664,7 @@ var init_openai_categories = __esm(() => {
|
|
|
11607
11664
|
},
|
|
11608
11665
|
{
|
|
11609
11666
|
name: "deep-high",
|
|
11610
|
-
config: { model:
|
|
11667
|
+
config: { model: `openai/${LATEST_MODEL_BY_FAMILY.gptAstra}`, variant: "high" },
|
|
11611
11668
|
description: "Escalation deep lane: a goal whose central decision cannot be settled from evidence alone. Same one-goal, one-deliverable contract as deep-low.",
|
|
11612
11669
|
callerGuidance: DEEP_HIGH_CATEGORY_CALLER_GUIDANCE,
|
|
11613
11670
|
promptAppend: DEEP_HIGH_CATEGORY_PROMPT_APPEND,
|
|
@@ -11616,21 +11673,21 @@ var init_openai_categories = __esm(() => {
|
|
|
11616
11673
|
},
|
|
11617
11674
|
{
|
|
11618
11675
|
name: "quick",
|
|
11619
|
-
config: { model:
|
|
11676
|
+
config: { model: `openai/${LATEST_MODEL_BY_FAMILY.gptLunaFast}`, variant: "low" },
|
|
11620
11677
|
description: "Trivial tasks - single file changes, typo fixes, simple modifications",
|
|
11621
11678
|
callerGuidance: QUICK_CATEGORY_CALLER_GUIDANCE,
|
|
11622
11679
|
promptAppend: QUICK_CATEGORY_PROMPT_APPEND
|
|
11623
11680
|
},
|
|
11624
11681
|
{
|
|
11625
11682
|
name: "unspecified-low",
|
|
11626
|
-
config: { model:
|
|
11683
|
+
config: { model: `anthropic/${LATEST_MODEL_BY_FAMILY.claudeSonnet}`, variant: "medium" },
|
|
11627
11684
|
description: "Tasks that don't fit other categories, low effort required",
|
|
11628
11685
|
callerGuidance: UNSPECIFIED_LOW_CATEGORY_CALLER_GUIDANCE,
|
|
11629
11686
|
promptAppend: UNSPECIFIED_LOW_CATEGORY_PROMPT_APPEND
|
|
11630
11687
|
},
|
|
11631
11688
|
{
|
|
11632
11689
|
name: "unspecified-high",
|
|
11633
|
-
config: { model:
|
|
11690
|
+
config: { model: `anthropic/${LATEST_MODEL_BY_FAMILY.claudeOpus}`, variant: "medium" },
|
|
11634
11691
|
description: "Tasks that don't fit other categories, high effort required",
|
|
11635
11692
|
callerGuidance: UNSPECIFIED_HIGH_CATEGORY_CALLER_GUIDANCE,
|
|
11636
11693
|
promptAppend: UNSPECIFIED_HIGH_CATEGORY_PROMPT_APPEND,
|
|
@@ -11679,7 +11736,7 @@ var init_migration2 = __esm(() => {
|
|
|
11679
11736
|
|
|
11680
11737
|
// packages/omo-opencode/src/shared/opencode-config-dir.ts
|
|
11681
11738
|
import { existsSync as existsSync5, realpathSync as realpathSync2 } from "fs";
|
|
11682
|
-
import { homedir as
|
|
11739
|
+
import { homedir as homedir5 } from "os";
|
|
11683
11740
|
import { join as join6, posix, resolve, win32 } from "path";
|
|
11684
11741
|
function isDevBuild(version) {
|
|
11685
11742
|
if (!version)
|
|
@@ -11690,14 +11747,14 @@ function getTauriConfigDir(identifier) {
|
|
|
11690
11747
|
const platform = process.platform;
|
|
11691
11748
|
switch (platform) {
|
|
11692
11749
|
case "darwin":
|
|
11693
|
-
return join6(
|
|
11750
|
+
return join6(homedir5(), "Library", "Application Support", identifier);
|
|
11694
11751
|
case "win32": {
|
|
11695
|
-
const appData = process.env.APPDATA || join6(
|
|
11752
|
+
const appData = process.env.APPDATA || join6(homedir5(), "AppData", "Roaming");
|
|
11696
11753
|
return win32.join(appData, identifier);
|
|
11697
11754
|
}
|
|
11698
11755
|
case "linux":
|
|
11699
11756
|
default: {
|
|
11700
|
-
const xdgConfig = process.env.XDG_CONFIG_HOME || join6(
|
|
11757
|
+
const xdgConfig = process.env.XDG_CONFIG_HOME || join6(homedir5(), ".config");
|
|
11701
11758
|
return join6(xdgConfig, identifier);
|
|
11702
11759
|
}
|
|
11703
11760
|
}
|
|
@@ -11741,7 +11798,7 @@ function getWslLinuxHomeDir(windowsConfigRoot) {
|
|
|
11741
11798
|
function getCliDefaultConfigDir() {
|
|
11742
11799
|
const envXdgConfig = process.env.XDG_CONFIG_HOME?.trim();
|
|
11743
11800
|
const shouldIgnoreWindowsXdg = envXdgConfig !== undefined && envXdgConfig.length > 0 && isWslEnvironment() && isWindowsUserConfigRoot(envXdgConfig);
|
|
11744
|
-
const xdgConfig = shouldIgnoreWindowsXdg ? posix.join(getWslLinuxHomeDir(envXdgConfig) ?? "/home", ".config") : envXdgConfig || join6(
|
|
11801
|
+
const xdgConfig = shouldIgnoreWindowsXdg ? posix.join(getWslLinuxHomeDir(envXdgConfig) ?? "/home", ".config") : envXdgConfig || join6(homedir5(), ".config");
|
|
11745
11802
|
const configDir = isWslEnvironment() ? posix.join(xdgConfig, "opencode") : join6(xdgConfig, "opencode");
|
|
11746
11803
|
return resolveConfigPath(configDir);
|
|
11747
11804
|
}
|
|
@@ -70388,10 +70445,11 @@ var ANTHROPIC_PREFIX = "anthropic/", CLAUDE_CODE_ALIAS_MAP;
|
|
|
70388
70445
|
var init_claude_model_mapper = __esm(() => {
|
|
70389
70446
|
init_model_format_normalizer();
|
|
70390
70447
|
init_model_normalization2();
|
|
70448
|
+
init_latest_models();
|
|
70391
70449
|
CLAUDE_CODE_ALIAS_MAP = new Map([
|
|
70392
|
-
["sonnet", `${ANTHROPIC_PREFIX}
|
|
70393
|
-
["opus", `${ANTHROPIC_PREFIX}
|
|
70394
|
-
["haiku", `${ANTHROPIC_PREFIX}
|
|
70450
|
+
["sonnet", `${ANTHROPIC_PREFIX}${LATEST_MODEL_BY_FAMILY.claudeSonnet}`],
|
|
70451
|
+
["opus", `${ANTHROPIC_PREFIX}${LATEST_MODEL_BY_FAMILY.claudeOpus}`],
|
|
70452
|
+
["haiku", `${ANTHROPIC_PREFIX}${LATEST_MODEL_BY_FAMILY.claudeHaiku}`]
|
|
70395
70453
|
]);
|
|
70396
70454
|
});
|
|
70397
70455
|
|
|
@@ -76796,7 +76854,7 @@ var init_git_master = __esm(() => {
|
|
|
76796
76854
|
OmoGitMasterSettingsLayerSchema = object(OmoGitMasterSettingsShape).partial().strict();
|
|
76797
76855
|
OmoGitMasterSettingsSchema = OmoGitMasterSettingsLayerSchema.extend({
|
|
76798
76856
|
commit_footer: union([boolean2(), string2()]).default(false),
|
|
76799
|
-
include_co_authored_by: boolean2().default(
|
|
76857
|
+
include_co_authored_by: boolean2().default(true),
|
|
76800
76858
|
git_env_prefix: GitEnvPrefixSchema.default("GIT_MASTER=1")
|
|
76801
76859
|
}).strict();
|
|
76802
76860
|
});
|
|
@@ -76830,7 +76888,7 @@ var init_memory_agreements = __esm(() => {
|
|
|
76830
76888
|
});
|
|
76831
76889
|
|
|
76832
76890
|
// packages/omo-config-core/src/schema/memory.ts
|
|
76833
|
-
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;
|
|
76891
|
+
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;
|
|
76834
76892
|
var init_memory = __esm(() => {
|
|
76835
76893
|
init_zod();
|
|
76836
76894
|
init_memory_agreements();
|
|
@@ -76845,6 +76903,7 @@ var init_memory = __esm(() => {
|
|
|
76845
76903
|
merge: _enum(["auto", "integration"]).default("auto"),
|
|
76846
76904
|
category: string2().min(1).default("quick"),
|
|
76847
76905
|
timeout_minutes: number2().int().positive().default(15),
|
|
76906
|
+
max_concurrent_runs: number2().int().positive().default(1),
|
|
76848
76907
|
sandbox: _enum(["auto", "required", "off"]).default("auto")
|
|
76849
76908
|
}).strict();
|
|
76850
76909
|
OmoMemorySyncSchema = object({
|
|
@@ -76870,6 +76929,14 @@ var init_memory = __esm(() => {
|
|
|
76870
76929
|
tool_budget: number2().int().positive().default(8),
|
|
76871
76930
|
query_expansion: boolean2().default(false)
|
|
76872
76931
|
}).strict();
|
|
76932
|
+
OmoMemoryProjectScopeSchema = object({
|
|
76933
|
+
nudge: boolean2().default(true),
|
|
76934
|
+
recall: boolean2().default(true)
|
|
76935
|
+
}).strict();
|
|
76936
|
+
OmoMemoryProjectScopeLayerSchema = object({
|
|
76937
|
+
nudge: boolean2().optional(),
|
|
76938
|
+
recall: boolean2().optional()
|
|
76939
|
+
}).strict();
|
|
76873
76940
|
OmoMemoryNudgeSchema = object({
|
|
76874
76941
|
enabled: boolean2().default(true),
|
|
76875
76942
|
every_user_turns: number2().int().min(1).default(10)
|
|
@@ -76908,6 +76975,7 @@ var init_memory = __esm(() => {
|
|
|
76908
76975
|
merge: _enum(["auto", "integration"]).optional(),
|
|
76909
76976
|
category: string2().min(1).optional(),
|
|
76910
76977
|
timeout_minutes: number2().int().positive().optional(),
|
|
76978
|
+
max_concurrent_runs: number2().int().positive().optional(),
|
|
76911
76979
|
sandbox: _enum(["auto", "required", "off"]).optional()
|
|
76912
76980
|
}).strict();
|
|
76913
76981
|
OmoMemorySyncLayerSchema = object({
|
|
@@ -76972,7 +77040,7 @@ var init_memory = __esm(() => {
|
|
|
76972
77040
|
OmoMemoryAgentOverridesSchema = object({
|
|
76973
77041
|
enabled: boolean2().optional(),
|
|
76974
77042
|
agent: string2().min(1).optional(),
|
|
76975
|
-
reflection: OmoMemoryReflectionLayerSchema.optional(),
|
|
77043
|
+
reflection: OmoMemoryReflectionLayerSchema.omit({ max_concurrent_runs: true }).optional(),
|
|
76976
77044
|
nudge: OmoMemoryNudgeLayerSchema.optional(),
|
|
76977
77045
|
facts: OmoMemoryFactsLayerSchema.optional(),
|
|
76978
77046
|
dream: OmoMemoryDreamLayerSchema.optional(),
|
|
@@ -76997,6 +77065,7 @@ var init_memory = __esm(() => {
|
|
|
76997
77065
|
merge: "auto",
|
|
76998
77066
|
category: "quick",
|
|
76999
77067
|
timeout_minutes: 15,
|
|
77068
|
+
max_concurrent_runs: 1,
|
|
77000
77069
|
sandbox: "auto"
|
|
77001
77070
|
}),
|
|
77002
77071
|
nudge: OmoMemoryNudgeSchema.default({ enabled: true, every_user_turns: 10 }),
|
|
@@ -77025,6 +77094,7 @@ var init_memory = __esm(() => {
|
|
|
77025
77094
|
tool_budget: 8,
|
|
77026
77095
|
query_expansion: false
|
|
77027
77096
|
}),
|
|
77097
|
+
project_scope: OmoMemoryProjectScopeSchema.default({ nudge: true, recall: true }),
|
|
77028
77098
|
projection: OmoMemoryProjectionSchema.default({ max_entries_per_directory: 40, max_bytes: 24576 }),
|
|
77029
77099
|
compile_warn_tokens: number2().int().positive().default(30000),
|
|
77030
77100
|
agents: record(string2(), OmoMemoryAgentOverridesSchema).default({})
|
|
@@ -77044,6 +77114,7 @@ var init_memory = __esm(() => {
|
|
|
77044
77114
|
sync: OmoMemorySyncLayerSchema.optional(),
|
|
77045
77115
|
search: OmoMemorySearchLayerSchema.optional(),
|
|
77046
77116
|
recall: OmoMemoryRecallLayerSchema.optional(),
|
|
77117
|
+
project_scope: OmoMemoryProjectScopeLayerSchema.optional(),
|
|
77047
77118
|
projection: OmoMemoryProjectionLayerSchema.optional(),
|
|
77048
77119
|
compile_warn_tokens: number2().int().positive().optional(),
|
|
77049
77120
|
agents: record(string2(), OmoMemoryAgentOverridesSchema).optional()
|
|
@@ -77341,7 +77412,8 @@ var OmoTelemetrySettingsShape, OmoTelemetrySettingsLayerSchema, OmoTelemetrySett
|
|
|
77341
77412
|
var init_telemetry = __esm(() => {
|
|
77342
77413
|
init_zod();
|
|
77343
77414
|
OmoTelemetrySettingsShape = {
|
|
77344
|
-
enabled: boolean2()
|
|
77415
|
+
enabled: boolean2(),
|
|
77416
|
+
rawTurnSampleRate: number2().min(0).max(1)
|
|
77345
77417
|
};
|
|
77346
77418
|
OmoTelemetrySettingsLayerSchema = object(OmoTelemetrySettingsShape).partial().strict();
|
|
77347
77419
|
OmoTelemetrySettingsSchema = OmoTelemetrySettingsLayerSchema.extend({
|
|
@@ -77368,11 +77440,17 @@ var init_format_on_mutation = __esm(() => {
|
|
|
77368
77440
|
}).strict();
|
|
77369
77441
|
});
|
|
77370
77442
|
|
|
77371
|
-
// packages/omo-config-core/src/schema/
|
|
77372
|
-
var
|
|
77373
|
-
var
|
|
77443
|
+
// packages/omo-config-core/src/schema/provenance.ts
|
|
77444
|
+
var OmoProvenanceSettingsSchema;
|
|
77445
|
+
var init_provenance = __esm(() => {
|
|
77374
77446
|
init_zod();
|
|
77375
|
-
|
|
77447
|
+
OmoProvenanceSettingsSchema = object({
|
|
77448
|
+
workspaces: array(object({
|
|
77449
|
+
name: string2().trim().min(1).regex(/\S/),
|
|
77450
|
+
git_owners: array(string2().trim().min(1).regex(/\S/)).optional(),
|
|
77451
|
+
paths: array(string2().trim().min(1).regex(/\S/)).optional()
|
|
77452
|
+
}).strict()).optional()
|
|
77453
|
+
}).strict();
|
|
77376
77454
|
});
|
|
77377
77455
|
|
|
77378
77456
|
// packages/omo-config-core/src/schema/config.ts
|
|
@@ -77391,13 +77469,13 @@ var init_config = __esm(() => {
|
|
|
77391
77469
|
init_team();
|
|
77392
77470
|
init_telemetry();
|
|
77393
77471
|
init_format_on_mutation();
|
|
77394
|
-
|
|
77472
|
+
init_provenance();
|
|
77395
77473
|
OmoOpenCodeHarnessConfigSchema = record(string2(), unknown());
|
|
77396
77474
|
OmoDisabledSkillsSchema = array(string2());
|
|
77397
77475
|
OmoExcludedModelsSchema = array(string2());
|
|
77398
77476
|
OmoTypedHarnessConfigSchema = object({
|
|
77477
|
+
provenance: OmoProvenanceSettingsSchema.optional(),
|
|
77399
77478
|
formatOnMutation: OmoFormatOnMutationLayerSchema.optional(),
|
|
77400
|
-
gateway: OmoGatewaySectionSchema.optional(),
|
|
77401
77479
|
categories: OmoCategoriesConfigSchema.optional(),
|
|
77402
77480
|
agents: OmoAgentsConfigSchema.optional(),
|
|
77403
77481
|
git_master: OmoGitMasterSettingsLayerSchema.optional(),
|
|
@@ -77414,6 +77492,7 @@ var init_config = __esm(() => {
|
|
|
77414
77492
|
exclude_models: OmoExcludedModelsSchema.optional()
|
|
77415
77493
|
}).strict();
|
|
77416
77494
|
OmoConfigProfileSchema = object({
|
|
77495
|
+
provenance: OmoProvenanceSettingsSchema.optional(),
|
|
77417
77496
|
formatOnMutation: OmoFormatOnMutationLayerSchema.optional(),
|
|
77418
77497
|
categories: OmoCategoriesConfigSchema.optional(),
|
|
77419
77498
|
agents: OmoAgentsConfigSchema.optional(),
|
|
@@ -77435,8 +77514,8 @@ var init_config = __esm(() => {
|
|
|
77435
77514
|
"[codex]": OmoTypedHarnessConfigSchema.optional()
|
|
77436
77515
|
}).strict();
|
|
77437
77516
|
OmoConfigSchema = object({
|
|
77517
|
+
provenance: OmoProvenanceSettingsSchema.optional(),
|
|
77438
77518
|
formatOnMutation: OmoFormatOnMutationSchema.optional(),
|
|
77439
|
-
gateway: OmoGatewaySectionSchema.optional(),
|
|
77440
77519
|
$schema: string2().optional(),
|
|
77441
77520
|
categories: OmoCategoriesConfigSchema.optional(),
|
|
77442
77521
|
agents: OmoAgentsConfigSchema.optional(),
|
|
@@ -77461,8 +77540,8 @@ var init_config = __esm(() => {
|
|
|
77461
77540
|
legacy_migrations: record(string2(), unknown()).optional()
|
|
77462
77541
|
}).strict();
|
|
77463
77542
|
OmoConfigLayerSchema = object({
|
|
77543
|
+
provenance: OmoProvenanceSettingsSchema.optional(),
|
|
77464
77544
|
formatOnMutation: OmoFormatOnMutationLayerSchema.optional(),
|
|
77465
|
-
gateway: OmoGatewaySectionSchema.optional(),
|
|
77466
77545
|
$schema: string2().optional(),
|
|
77467
77546
|
categories: OmoCategoriesConfigSchema.optional(),
|
|
77468
77547
|
agents: OmoAgentsConfigSchema.optional(),
|
|
@@ -77611,7 +77690,6 @@ var init_schema = __esm(() => {
|
|
|
77611
77690
|
init_config();
|
|
77612
77691
|
init_fallback_models();
|
|
77613
77692
|
init_format_on_mutation();
|
|
77614
|
-
init_gateway();
|
|
77615
77693
|
init_git_master();
|
|
77616
77694
|
init_harness();
|
|
77617
77695
|
init_legacy_category_names();
|
|
@@ -77620,6 +77698,7 @@ var init_schema = __esm(() => {
|
|
|
77620
77698
|
init_model_catalog();
|
|
77621
77699
|
init_model_profile();
|
|
77622
77700
|
init_model_ref();
|
|
77701
|
+
init_provenance();
|
|
77623
77702
|
init_side_panel();
|
|
77624
77703
|
init_task();
|
|
77625
77704
|
init_team();
|
|
@@ -77885,6 +77964,7 @@ function pruneInvalidConfigPaths(config, issues, validate, maxPasses = MAX_PRUNE
|
|
|
77885
77964
|
var MAX_PRUNE_PASSES = 32;
|
|
77886
77965
|
|
|
77887
77966
|
// packages/omo-config-core/src/loader/layer-validation.ts
|
|
77967
|
+
import { createHash as createHash2 } from "crypto";
|
|
77888
77968
|
function validationDiagnostic(path, issues) {
|
|
77889
77969
|
const issuePaths = issues.map((issue) => issue.path.map((segment) => String(segment)).join("."));
|
|
77890
77970
|
return {
|
|
@@ -77908,6 +77988,9 @@ function unrecognizedKeyIssues(issues) {
|
|
|
77908
77988
|
function isRecord11(value) {
|
|
77909
77989
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
77910
77990
|
}
|
|
77991
|
+
function isRetiredSection(key) {
|
|
77992
|
+
return RETIRED_SECTION_DIGESTS.has(createHash2("sha256").update(key.toLowerCase()).digest("hex"));
|
|
77993
|
+
}
|
|
77911
77994
|
function sanitizeUnsafeKeys(value, path = []) {
|
|
77912
77995
|
if (Array.isArray(value)) {
|
|
77913
77996
|
const issues = [];
|
|
@@ -77926,6 +78009,9 @@ function sanitizeUnsafeKeys(value, path = []) {
|
|
|
77926
78009
|
}
|
|
77927
78010
|
const sanitized = {};
|
|
77928
78011
|
for (const [key, entry] of Object.entries(value)) {
|
|
78012
|
+
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] ?? "");
|
|
78013
|
+
if (isConfigContainer && isRetiredSection(key))
|
|
78014
|
+
continue;
|
|
77929
78015
|
if (isUnsafeObjectKey2(key)) {
|
|
77930
78016
|
issues.push({ keys: [key], path });
|
|
77931
78017
|
continue;
|
|
@@ -78012,13 +78098,18 @@ function validateConfigLayer(path, data) {
|
|
|
78012
78098
|
return rejected;
|
|
78013
78099
|
return { loaded: true, diagnostics: [...diagnostics, ...invalidValueDiagnostics(path, pruned.dropped)], value: pruned.config };
|
|
78014
78100
|
}
|
|
78015
|
-
var validateLayerRecord = (record) => {
|
|
78101
|
+
var RETIRED_SECTION_DIGESTS, HARNESS_BLOCKS, validateLayerRecord = (record) => {
|
|
78016
78102
|
const parsed = OmoConfigLayerSchema.safeParse(record);
|
|
78017
78103
|
return parsed.success ? { success: true } : { success: false, issues: parsed.error.issues };
|
|
78018
78104
|
};
|
|
78019
78105
|
var init_layer_validation = __esm(() => {
|
|
78020
78106
|
init_schema();
|
|
78021
78107
|
init_merge();
|
|
78108
|
+
RETIRED_SECTION_DIGESTS = new Set([
|
|
78109
|
+
"447f75a8ebdbdb79a57f0b8cebbfba183820cf54a8119ac01449b30499e5ef0e",
|
|
78110
|
+
"4ea5ee68fea05586106890ded5733820bb77d919cda27bc4b8139b7cd33b8889"
|
|
78111
|
+
]);
|
|
78112
|
+
HARNESS_BLOCKS = new Set(["[opencode]", "[native]", "[senpi]", "[codex]"]);
|
|
78022
78113
|
});
|
|
78023
78114
|
|
|
78024
78115
|
// packages/omo-config-core/src/internal/posix-path.ts
|
|
@@ -80419,13 +80510,14 @@ function applyOpenAiOnlyModelCatalog(config) {
|
|
|
80419
80510
|
}
|
|
80420
80511
|
var OPENAI_ONLY_AGENT_OVERRIDES, OPENAI_ONLY_CATEGORY_OVERRIDES;
|
|
80421
80512
|
var init_openai_only_model_catalog = __esm(() => {
|
|
80513
|
+
init_latest_models();
|
|
80422
80514
|
OPENAI_ONLY_AGENT_OVERRIDES = {
|
|
80423
|
-
explore: { model:
|
|
80424
|
-
librarian: { model:
|
|
80515
|
+
explore: { model: `openai/${LATEST_MODEL_BY_FAMILY.gptLunaFast}`, variant: "low" },
|
|
80516
|
+
librarian: { model: `openai/${LATEST_MODEL_BY_FAMILY.gptLunaFast}`, variant: "low" }
|
|
80425
80517
|
};
|
|
80426
80518
|
OPENAI_ONLY_CATEGORY_OVERRIDES = {
|
|
80427
80519
|
artistry: { model: "openai/gpt-5.6-sol", variant: "xhigh" },
|
|
80428
|
-
quick: { model:
|
|
80520
|
+
quick: { model: `openai/${LATEST_MODEL_BY_FAMILY.gptLunaFast}` },
|
|
80429
80521
|
"visual-engineering": { model: "openai/gpt-5.6-sol", variant: "high" }
|
|
80430
80522
|
};
|
|
80431
80523
|
});
|
|
@@ -80634,9 +80726,9 @@ function generateModelConfig(config) {
|
|
|
80634
80726
|
if (role === "explore") {
|
|
80635
80727
|
let agentConfig;
|
|
80636
80728
|
if (avail.native.openai) {
|
|
80637
|
-
agentConfig = { model:
|
|
80729
|
+
agentConfig = { model: `openai/${LATEST_MODEL_BY_FAMILY.gptLunaFast}`, variant: "low" };
|
|
80638
80730
|
} else if (avail.native.claude) {
|
|
80639
|
-
agentConfig = { model:
|
|
80731
|
+
agentConfig = { model: `anthropic/${LATEST_MODEL_BY_FAMILY.claudeHaiku}`, variant: "medium" };
|
|
80640
80732
|
} else if (avail.opencodeZen) {
|
|
80641
80733
|
agentConfig = { model: "opencode/gpt-5-nano" };
|
|
80642
80734
|
} else if (avail.opencodeGo) {
|
|
@@ -80719,6 +80811,7 @@ var init_model_fallback = __esm(() => {
|
|
|
80719
80811
|
init_fallback_chain_resolution();
|
|
80720
80812
|
init_provider_model_id_transform2();
|
|
80721
80813
|
init_fallback_lane_policy();
|
|
80814
|
+
init_latest_models();
|
|
80722
80815
|
});
|
|
80723
80816
|
|
|
80724
80817
|
// packages/omo-opencode/src/cli/config-manager/generate-omo-config.ts
|
|
@@ -82617,13 +82710,13 @@ var init_event_id = __esm(() => {
|
|
|
82617
82710
|
});
|
|
82618
82711
|
|
|
82619
82712
|
// packages/telemetry-core/src/machine-id.ts
|
|
82620
|
-
import { createHash as
|
|
82713
|
+
import { createHash as createHash6 } from "crypto";
|
|
82621
82714
|
import os4 from "os";
|
|
82622
82715
|
function getDefaultTelemetryOsProvider() {
|
|
82623
82716
|
return os4;
|
|
82624
82717
|
}
|
|
82625
82718
|
function getTelemetryDistinctId(machineIdPrefix, osProvider = getDefaultTelemetryOsProvider()) {
|
|
82626
|
-
return
|
|
82719
|
+
return createHash6("sha256").update(`${machineIdPrefix}${osProvider.hostname()}`).digest("hex");
|
|
82627
82720
|
}
|
|
82628
82721
|
var init_machine_id = () => {};
|
|
82629
82722
|
|
|
@@ -92146,20 +92239,98 @@ var init_index_node = __esm(() => {
|
|
|
92146
92239
|
};
|
|
92147
92240
|
});
|
|
92148
92241
|
|
|
92242
|
+
// packages/telemetry-core/src/telemetry-delivery-error.ts
|
|
92243
|
+
var PERMANENT_STATUSES, TelemetryDeliveryError;
|
|
92244
|
+
var init_telemetry_delivery_error = __esm(() => {
|
|
92245
|
+
PERMANENT_STATUSES = new Set([400, 413]);
|
|
92246
|
+
TelemetryDeliveryError = class TelemetryDeliveryError extends Error {
|
|
92247
|
+
permanent;
|
|
92248
|
+
status;
|
|
92249
|
+
constructor(status, cause) {
|
|
92250
|
+
super(status === undefined ? "telemetry event was not delivered (no response)" : `telemetry event was rejected with HTTP ${status}`, { cause });
|
|
92251
|
+
this.name = "TelemetryDeliveryError";
|
|
92252
|
+
this.status = status;
|
|
92253
|
+
this.permanent = status !== undefined && PERMANENT_STATUSES.has(status);
|
|
92254
|
+
}
|
|
92255
|
+
};
|
|
92256
|
+
});
|
|
92257
|
+
|
|
92258
|
+
// packages/telemetry-core/src/posthog-immediate-send.ts
|
|
92259
|
+
function createImmediateSender(apiKey, options, PostHogClient) {
|
|
92260
|
+
const baseFetch = options.fetch ?? ((url, init) => fetch(url, init));
|
|
92261
|
+
let current;
|
|
92262
|
+
const trackedFetch = async (url, init) => {
|
|
92263
|
+
const attempt = current;
|
|
92264
|
+
try {
|
|
92265
|
+
const response = await baseFetch(url, init);
|
|
92266
|
+
if (attempt !== undefined)
|
|
92267
|
+
attempt.status = response.status;
|
|
92268
|
+
return response;
|
|
92269
|
+
} catch (error) {
|
|
92270
|
+
if (attempt !== undefined)
|
|
92271
|
+
attempt.error = error;
|
|
92272
|
+
throw error;
|
|
92273
|
+
}
|
|
92274
|
+
};
|
|
92275
|
+
const client = new PostHogClient(apiKey, { ...options, fetch: trackedFetch, fetchRetryCount: 0 });
|
|
92276
|
+
let queue = Promise.resolve();
|
|
92277
|
+
const sendOne = async (message) => {
|
|
92278
|
+
const attempt = {};
|
|
92279
|
+
current = attempt;
|
|
92280
|
+
try {
|
|
92281
|
+
await client.captureImmediate(message);
|
|
92282
|
+
} finally {
|
|
92283
|
+
current = undefined;
|
|
92284
|
+
}
|
|
92285
|
+
const { status } = attempt;
|
|
92286
|
+
if (status === undefined || status < 200 || status >= 300)
|
|
92287
|
+
throw new TelemetryDeliveryError(status, attempt.error);
|
|
92288
|
+
};
|
|
92289
|
+
return {
|
|
92290
|
+
send(message) {
|
|
92291
|
+
const result = queue.then(() => sendOne(message));
|
|
92292
|
+
queue = result.catch(() => {
|
|
92293
|
+
return;
|
|
92294
|
+
});
|
|
92295
|
+
return result;
|
|
92296
|
+
},
|
|
92297
|
+
async shutdown() {
|
|
92298
|
+
await client.shutdown();
|
|
92299
|
+
}
|
|
92300
|
+
};
|
|
92301
|
+
}
|
|
92302
|
+
var init_posthog_immediate_send = __esm(() => {
|
|
92303
|
+
init_telemetry_delivery_error();
|
|
92304
|
+
});
|
|
92305
|
+
|
|
92149
92306
|
// packages/telemetry-core/src/posthog-transport.ts
|
|
92150
92307
|
class PostHogTelemetryTransport {
|
|
92151
92308
|
#client;
|
|
92309
|
+
#apiKey;
|
|
92310
|
+
#options;
|
|
92311
|
+
#immediate;
|
|
92152
92312
|
constructor(apiKey, options) {
|
|
92153
92313
|
this.#client = new PostHog(apiKey, options);
|
|
92314
|
+
this.#apiKey = apiKey;
|
|
92315
|
+
this.#options = options;
|
|
92154
92316
|
}
|
|
92155
92317
|
capture(message) {
|
|
92156
92318
|
this.#client.capture(message);
|
|
92157
92319
|
}
|
|
92320
|
+
captureImmediate(message) {
|
|
92321
|
+
this.#immediate ??= Promise.resolve().then(() => (init_posthog_immediate_send(), {})).then(({}) => createImmediateSender(this.#apiKey, this.#options, PostHog)).catch((error) => {
|
|
92322
|
+
this.#immediate = undefined;
|
|
92323
|
+
throw error;
|
|
92324
|
+
});
|
|
92325
|
+
return this.#immediate.then((sender) => sender.send(message));
|
|
92326
|
+
}
|
|
92158
92327
|
async flush() {
|
|
92159
92328
|
await this.#client.flush();
|
|
92160
92329
|
}
|
|
92161
92330
|
async shutdown() {
|
|
92162
|
-
await this.#client.shutdown()
|
|
92331
|
+
await Promise.all([this.#client.shutdown(), this.#immediate?.then((sender) => sender.shutdown(), () => {
|
|
92332
|
+
return;
|
|
92333
|
+
})]);
|
|
92163
92334
|
}
|
|
92164
92335
|
}
|
|
92165
92336
|
function createDefaultPostHogTransport(apiKey, options) {
|
|
@@ -92185,6 +92356,12 @@ var init_posthog_client = __esm(() => {
|
|
|
92185
92356
|
// packages/telemetry-core/src/record-daily-active.ts
|
|
92186
92357
|
var init_record_daily_active = () => {};
|
|
92187
92358
|
|
|
92359
|
+
// packages/telemetry-core/src/turn-trace-bridge.ts
|
|
92360
|
+
var REGISTRY;
|
|
92361
|
+
var init_turn_trace_bridge = __esm(() => {
|
|
92362
|
+
REGISTRY = Symbol.for("omo.telemetry.turn-traceparent.v1");
|
|
92363
|
+
});
|
|
92364
|
+
|
|
92188
92365
|
// packages/telemetry-core/src/index.ts
|
|
92189
92366
|
var init_src5 = __esm(() => {
|
|
92190
92367
|
init_activity_state();
|
|
@@ -92196,6 +92373,7 @@ var init_src5 = __esm(() => {
|
|
|
92196
92373
|
init_machine_id();
|
|
92197
92374
|
init_posthog_client();
|
|
92198
92375
|
init_record_daily_active();
|
|
92376
|
+
init_turn_trace_bridge();
|
|
92199
92377
|
});
|
|
92200
92378
|
|
|
92201
92379
|
// packages/omo-codex/package.json
|
|
@@ -92203,7 +92381,7 @@ var package_default2;
|
|
|
92203
92381
|
var init_package2 = __esm(() => {
|
|
92204
92382
|
package_default2 = {
|
|
92205
92383
|
name: "@oh-my-opencode/omo-codex",
|
|
92206
|
-
version: "5.1.
|
|
92384
|
+
version: "5.1.46",
|
|
92207
92385
|
type: "module",
|
|
92208
92386
|
private: true,
|
|
92209
92387
|
description: "Codex harness adapter for oh-my-openagent. Vendored Codex plugin namespace (omo) + TypeScript installer + telemetry.",
|
|
@@ -92234,6 +92412,7 @@ var init_package2 = __esm(() => {
|
|
|
92234
92412
|
"sync:skills": "node plugin/scripts/sync-skills.mjs"
|
|
92235
92413
|
},
|
|
92236
92414
|
dependencies: {
|
|
92415
|
+
"@oh-my-opencode/model-core": "workspace:*",
|
|
92237
92416
|
"@oh-my-opencode/shared-skills": "workspace:*",
|
|
92238
92417
|
"@oh-my-opencode/utils": "workspace:*"
|
|
92239
92418
|
},
|
|
@@ -93174,20 +93353,20 @@ var init_update_toasts = __esm(() => {
|
|
|
93174
93353
|
});
|
|
93175
93354
|
|
|
93176
93355
|
// packages/omo-opencode/src/hooks/auto-update-checker/hook/background-update-check.ts
|
|
93177
|
-
import { existsSync as
|
|
93178
|
-
import { dirname as
|
|
93356
|
+
import { existsSync as existsSync50 } from "fs";
|
|
93357
|
+
import { dirname as dirname35, join as join84 } from "path";
|
|
93179
93358
|
import { fileURLToPath as fileURLToPath5 } from "url";
|
|
93180
93359
|
function defaultGetModuleHostingWorkspace() {
|
|
93181
93360
|
try {
|
|
93182
|
-
const currentDir =
|
|
93361
|
+
const currentDir = dirname35(fileURLToPath5(import.meta.url));
|
|
93183
93362
|
const pkgJsonPath = findPackageJsonUp(currentDir);
|
|
93184
93363
|
if (!pkgJsonPath)
|
|
93185
93364
|
return null;
|
|
93186
|
-
const pkgDir =
|
|
93187
|
-
const nodeModulesDir =
|
|
93365
|
+
const pkgDir = dirname35(pkgJsonPath);
|
|
93366
|
+
const nodeModulesDir = dirname35(pkgDir);
|
|
93188
93367
|
if (nodeModulesDir.split(/[\\/]/).pop() !== "node_modules")
|
|
93189
93368
|
return null;
|
|
93190
|
-
return
|
|
93369
|
+
return dirname35(nodeModulesDir);
|
|
93191
93370
|
} catch (error) {
|
|
93192
93371
|
if (error instanceof Error) {
|
|
93193
93372
|
return null;
|
|
@@ -93334,8 +93513,8 @@ var init_background_update_check = __esm(() => {
|
|
|
93334
93513
|
init_semver_compare();
|
|
93335
93514
|
init_update_toasts();
|
|
93336
93515
|
defaultDeps4 = {
|
|
93337
|
-
existsSync:
|
|
93338
|
-
join:
|
|
93516
|
+
existsSync: existsSync50,
|
|
93517
|
+
join: join84,
|
|
93339
93518
|
runBunInstallWithDetails,
|
|
93340
93519
|
log: log2,
|
|
93341
93520
|
getOpenCodeCacheDir,
|
|
@@ -93752,7 +93931,7 @@ function getUnsupportedOpenCodeVersionMessage(openCodeVersion) {
|
|
|
93752
93931
|
// packages/omo-codex/src/install/install-codex.ts
|
|
93753
93932
|
import { join as join56, resolve as resolve13 } from "path";
|
|
93754
93933
|
import { existsSync as existsSync27 } from "fs";
|
|
93755
|
-
import { homedir as
|
|
93934
|
+
import { homedir as homedir7 } from "os";
|
|
93756
93935
|
|
|
93757
93936
|
// packages/omo-codex/src/install/codex-cache-bins.ts
|
|
93758
93937
|
import { chmod, lstat as lstat4, mkdir, readFile as readFile3, readdir as readdir2, readlink as readlink3, rm as rm3, stat as stat2, symlink, writeFile } from "fs/promises";
|
|
@@ -96211,11 +96390,12 @@ function isRootSetting(line, key) {
|
|
|
96211
96390
|
}
|
|
96212
96391
|
|
|
96213
96392
|
// packages/omo-codex/src/install/codex-model-catalog.ts
|
|
96393
|
+
init_latest_models();
|
|
96214
96394
|
import { readFile as readFile10 } from "fs/promises";
|
|
96215
96395
|
import { join as join36 } from "path";
|
|
96216
96396
|
var FALLBACK_CODEX_MODEL_CATALOG = {
|
|
96217
96397
|
current: {
|
|
96218
|
-
model:
|
|
96398
|
+
model: LATEST_MODEL_BY_FAMILY.gptAstra,
|
|
96219
96399
|
modelContextWindow: 600000,
|
|
96220
96400
|
modelReasoningEffort: "high",
|
|
96221
96401
|
planModeReasoningEffort: "xhigh"
|
|
@@ -96517,7 +96697,7 @@ function isMissingFileError(error) {
|
|
|
96517
96697
|
}
|
|
96518
96698
|
|
|
96519
96699
|
// packages/omo-codex/src/install/codex-hook-trust.ts
|
|
96520
|
-
import { createHash as
|
|
96700
|
+
import { createHash as createHash3 } from "crypto";
|
|
96521
96701
|
import { readFile as readFile12 } from "fs/promises";
|
|
96522
96702
|
import { join as join38 } from "path";
|
|
96523
96703
|
var EVENT_LABELS = new Map([
|
|
@@ -96609,7 +96789,7 @@ function commandHookHash(eventName, matcher, handler, command) {
|
|
|
96609
96789
|
if (typeof matcher === "string")
|
|
96610
96790
|
identity.matcher = matcher;
|
|
96611
96791
|
const canonical = JSON.stringify(canonicalJson(identity));
|
|
96612
|
-
return `sha256:${
|
|
96792
|
+
return `sha256:${createHash3("sha256").update(canonical).digest("hex")}`;
|
|
96613
96793
|
}
|
|
96614
96794
|
function canonicalJson(value) {
|
|
96615
96795
|
if (Array.isArray(value))
|
|
@@ -96788,6 +96968,7 @@ import { lstat as lstat7, readFile as readFile13, readdir as readdir6, writeFile
|
|
|
96788
96968
|
import { join as join40 } from "path";
|
|
96789
96969
|
|
|
96790
96970
|
// packages/omo-codex/src/install/managed-agent-reasoning-defaults.ts
|
|
96971
|
+
init_latest_models();
|
|
96791
96972
|
var MANAGED_REASONING_DEFAULT_UPGRADES = new Map([
|
|
96792
96973
|
[
|
|
96793
96974
|
"explorer",
|
|
@@ -96802,7 +96983,7 @@ var MANAGED_REASONING_DEFAULT_UPGRADES = new Map([
|
|
|
96802
96983
|
},
|
|
96803
96984
|
{
|
|
96804
96985
|
previous: { model: "gpt-5.6-luna", effort: "low" },
|
|
96805
|
-
current: { model:
|
|
96986
|
+
current: { model: LATEST_MODEL_BY_FAMILY.gptAstra, effort: "low" }
|
|
96806
96987
|
}
|
|
96807
96988
|
]
|
|
96808
96989
|
],
|
|
@@ -96819,7 +97000,7 @@ var MANAGED_REASONING_DEFAULT_UPGRADES = new Map([
|
|
|
96819
97000
|
},
|
|
96820
97001
|
{
|
|
96821
97002
|
previous: { model: "gpt-5.6-luna", effort: "low" },
|
|
96822
|
-
current: { model:
|
|
97003
|
+
current: { model: LATEST_MODEL_BY_FAMILY.gptAstra, effort: "low" }
|
|
96823
97004
|
}
|
|
96824
97005
|
]
|
|
96825
97006
|
],
|
|
@@ -96828,7 +97009,7 @@ var MANAGED_REASONING_DEFAULT_UPGRADES = new Map([
|
|
|
96828
97009
|
[
|
|
96829
97010
|
{
|
|
96830
97011
|
previous: { model: "gpt-5.6-sol", effort: "high" },
|
|
96831
|
-
current: { model:
|
|
97012
|
+
current: { model: LATEST_MODEL_BY_FAMILY.gptAstra, effort: "high" }
|
|
96832
97013
|
}
|
|
96833
97014
|
]
|
|
96834
97015
|
],
|
|
@@ -96837,7 +97018,7 @@ var MANAGED_REASONING_DEFAULT_UPGRADES = new Map([
|
|
|
96837
97018
|
[
|
|
96838
97019
|
{
|
|
96839
97020
|
previous: { model: "gpt-5.6-luna", effort: "high" },
|
|
96840
|
-
current: { model:
|
|
97021
|
+
current: { model: LATEST_MODEL_BY_FAMILY.gptAstra, effort: "high" }
|
|
96841
97022
|
}
|
|
96842
97023
|
]
|
|
96843
97024
|
],
|
|
@@ -96854,7 +97035,7 @@ var MANAGED_REASONING_DEFAULT_UPGRADES = new Map([
|
|
|
96854
97035
|
},
|
|
96855
97036
|
{
|
|
96856
97037
|
previous: { model: "gpt-5.6-terra", effort: "high" },
|
|
96857
|
-
current: { model:
|
|
97038
|
+
current: { model: LATEST_MODEL_BY_FAMILY.gptAstra, effort: "high" }
|
|
96858
97039
|
}
|
|
96859
97040
|
]
|
|
96860
97041
|
],
|
|
@@ -96871,7 +97052,7 @@ var MANAGED_REASONING_DEFAULT_UPGRADES = new Map([
|
|
|
96871
97052
|
},
|
|
96872
97053
|
{
|
|
96873
97054
|
previous: { model: "gpt-5.6-sol", effort: "high" },
|
|
96874
|
-
current: { model:
|
|
97055
|
+
current: { model: LATEST_MODEL_BY_FAMILY.gptAstra, effort: "high" }
|
|
96875
97056
|
}
|
|
96876
97057
|
]
|
|
96877
97058
|
],
|
|
@@ -96888,7 +97069,7 @@ var MANAGED_REASONING_DEFAULT_UPGRADES = new Map([
|
|
|
96888
97069
|
},
|
|
96889
97070
|
{
|
|
96890
97071
|
previous: { model: "gpt-5.6-terra", effort: "high" },
|
|
96891
|
-
current: { model:
|
|
97072
|
+
current: { model: LATEST_MODEL_BY_FAMILY.gptAstra, effort: "high" }
|
|
96892
97073
|
}
|
|
96893
97074
|
]
|
|
96894
97075
|
],
|
|
@@ -96901,7 +97082,7 @@ var MANAGED_REASONING_DEFAULT_UPGRADES = new Map([
|
|
|
96901
97082
|
},
|
|
96902
97083
|
{
|
|
96903
97084
|
previous: { model: "gpt-5.6-sol", effort: "medium" },
|
|
96904
|
-
current: { model:
|
|
97085
|
+
current: { model: LATEST_MODEL_BY_FAMILY.gptAstra, effort: "medium" }
|
|
96905
97086
|
}
|
|
96906
97087
|
]
|
|
96907
97088
|
],
|
|
@@ -96914,7 +97095,7 @@ var MANAGED_REASONING_DEFAULT_UPGRADES = new Map([
|
|
|
96914
97095
|
},
|
|
96915
97096
|
{
|
|
96916
97097
|
previous: { model: "gpt-5.6-terra", effort: "medium" },
|
|
96917
|
-
current: { model:
|
|
97098
|
+
current: { model: LATEST_MODEL_BY_FAMILY.gptAstra, effort: "medium" }
|
|
96918
97099
|
}
|
|
96919
97100
|
]
|
|
96920
97101
|
],
|
|
@@ -96927,7 +97108,7 @@ var MANAGED_REASONING_DEFAULT_UPGRADES = new Map([
|
|
|
96927
97108
|
},
|
|
96928
97109
|
{
|
|
96929
97110
|
previous: { model: "gpt-5.6-terra", effort: "high" },
|
|
96930
|
-
current: { model:
|
|
97111
|
+
current: { model: LATEST_MODEL_BY_FAMILY.gptAstra, effort: "high" }
|
|
96931
97112
|
}
|
|
96932
97113
|
]
|
|
96933
97114
|
],
|
|
@@ -96940,7 +97121,7 @@ var MANAGED_REASONING_DEFAULT_UPGRADES = new Map([
|
|
|
96940
97121
|
},
|
|
96941
97122
|
{
|
|
96942
97123
|
previous: { model: "gpt-5.6-luna", effort: "high" },
|
|
96943
|
-
current: { model:
|
|
97124
|
+
current: { model: LATEST_MODEL_BY_FAMILY.gptAstra, effort: "high" }
|
|
96944
97125
|
}
|
|
96945
97126
|
]
|
|
96946
97127
|
],
|
|
@@ -96957,7 +97138,7 @@ var MANAGED_REASONING_DEFAULT_UPGRADES = new Map([
|
|
|
96957
97138
|
},
|
|
96958
97139
|
{
|
|
96959
97140
|
previous: { model: "gpt-5.6-sol", effort: "low" },
|
|
96960
|
-
current: { model:
|
|
97141
|
+
current: { model: LATEST_MODEL_BY_FAMILY.gptAstra, effort: "low" }
|
|
96961
97142
|
}
|
|
96962
97143
|
]
|
|
96963
97144
|
]
|
|
@@ -97287,7 +97468,7 @@ function nodeErrorCode2(error) {
|
|
|
97287
97468
|
}
|
|
97288
97469
|
|
|
97289
97470
|
// packages/omo-codex/src/install/default-agent-role.ts
|
|
97290
|
-
import { createHash as
|
|
97471
|
+
import { createHash as createHash4 } from "crypto";
|
|
97291
97472
|
import { lstat as lstat9, readFile as readFile16, rm as rm10 } from "fs/promises";
|
|
97292
97473
|
import { join as join43 } from "path";
|
|
97293
97474
|
var REGISTRATION = { name: "default", configFile: "./agents/default.toml" };
|
|
@@ -97343,7 +97524,7 @@ async function readIfPresent(path) {
|
|
|
97343
97524
|
}
|
|
97344
97525
|
}
|
|
97345
97526
|
function hash(content) {
|
|
97346
|
-
return
|
|
97527
|
+
return createHash4("sha256").update(content).digest("hex");
|
|
97347
97528
|
}
|
|
97348
97529
|
|
|
97349
97530
|
// packages/omo-codex/src/install/link-cached-plugin-agents.ts
|
|
@@ -98008,7 +98189,7 @@ function formatUnknownError(error) {
|
|
|
98008
98189
|
}
|
|
98009
98190
|
|
|
98010
98191
|
// packages/omo-codex/src/install/lsp-daemon-reaper.ts
|
|
98011
|
-
import { createHash as
|
|
98192
|
+
import { createHash as createHash5 } from "crypto";
|
|
98012
98193
|
import { lstat as lstat12, readFile as readFile22, readdir as readdir10, rm as rm12 } from "fs/promises";
|
|
98013
98194
|
import { tmpdir as tmpdir3 } from "os";
|
|
98014
98195
|
import { join as join48, posix as posix6 } from "path";
|
|
@@ -98286,7 +98467,7 @@ async function readRegularTrimmedFile(path) {
|
|
|
98286
98467
|
return content.length > 0 ? content : null;
|
|
98287
98468
|
}
|
|
98288
98469
|
function shortDigest(value) {
|
|
98289
|
-
return
|
|
98470
|
+
return createHash5("sha256").update(value).digest("hex").slice(0, 16);
|
|
98290
98471
|
}
|
|
98291
98472
|
async function removeVersionDir(path) {
|
|
98292
98473
|
await rm12(path, { recursive: true, force: true });
|
|
@@ -98328,13 +98509,13 @@ function processIsRunning(pid) {
|
|
|
98328
98509
|
}
|
|
98329
98510
|
|
|
98330
98511
|
// packages/omo-codex/src/install/codex-installer-bin-dir.ts
|
|
98331
|
-
import { homedir as
|
|
98512
|
+
import { homedir as homedir6 } from "os";
|
|
98332
98513
|
import { join as join49, resolve as resolve12 } from "path";
|
|
98333
98514
|
function resolveCodexInstallerBinDir(input) {
|
|
98334
98515
|
const explicitBinDir = input.binDir ?? input.env?.CODEX_LOCAL_BIN_DIR;
|
|
98335
98516
|
if (explicitBinDir !== undefined && explicitBinDir.trim().length > 0)
|
|
98336
98517
|
return resolve12(explicitBinDir.trim());
|
|
98337
|
-
const homeDir = input.homeDir ??
|
|
98518
|
+
const homeDir = input.homeDir ?? homedir6();
|
|
98338
98519
|
const defaultCodexHome = resolve12(homeDir, ".codex");
|
|
98339
98520
|
const resolvedCodexHome = resolve12(input.codexHome);
|
|
98340
98521
|
if (resolvedCodexHome !== defaultCodexHome)
|
|
@@ -98460,7 +98641,7 @@ async function runCodexInstaller(options = {}) {
|
|
|
98460
98641
|
const env = options.env ?? process.env;
|
|
98461
98642
|
const platform = options.platform ?? process.platform;
|
|
98462
98643
|
const repoRoot = resolve13(options.repoRoot ?? findRepoRoot({ importerDir: import.meta.dir, env }));
|
|
98463
|
-
const codexHome = resolve13(options.codexHome ?? env.CODEX_HOME ?? join56(
|
|
98644
|
+
const codexHome = resolve13(options.codexHome ?? env.CODEX_HOME ?? join56(homedir7(), ".codex"));
|
|
98464
98645
|
const projectDirectory = resolve13(options.projectDirectory ?? env.OMO_CODEX_PROJECT ?? process.cwd());
|
|
98465
98646
|
const binDir = resolveCodexInstallerBinDir({ binDir: options.binDir, codexHome, env });
|
|
98466
98647
|
const runCommand = options.runCommand ?? defaultRunCommand;
|
|
@@ -98652,7 +98833,7 @@ function codexMarketplaceSource(marketplaceRoot) {
|
|
|
98652
98833
|
init_bun_which_shim();
|
|
98653
98834
|
import { execFile as execFile2 } from "child_process";
|
|
98654
98835
|
import { existsSync as existsSync28 } from "fs";
|
|
98655
|
-
import { homedir as
|
|
98836
|
+
import { homedir as homedir8 } from "os";
|
|
98656
98837
|
import { posix as posix8, win32 as win324 } from "path";
|
|
98657
98838
|
var CODEX_PATH_CHECK_LABEL = "codex (PATH)";
|
|
98658
98839
|
var WINDOWS_START_APPS_ARGS = [
|
|
@@ -98663,7 +98844,7 @@ var WINDOWS_START_APPS_ARGS = [
|
|
|
98663
98844
|
async function detectCodexInstallation(input = {}) {
|
|
98664
98845
|
const platform = input.platform ?? process.platform;
|
|
98665
98846
|
const env = input.env ?? process.env;
|
|
98666
|
-
const homeDir = input.homeDir ??
|
|
98847
|
+
const homeDir = input.homeDir ?? homedir8();
|
|
98667
98848
|
const exists = input.exists ?? existsSync28;
|
|
98668
98849
|
const which = input.which ?? bunWhich;
|
|
98669
98850
|
const checkedPaths = [CODEX_PATH_CHECK_LABEL];
|
|
@@ -98779,7 +98960,7 @@ function defaultRunCommand2(command, args) {
|
|
|
98779
98960
|
}
|
|
98780
98961
|
// packages/omo-codex/src/install/codex-cleanup.ts
|
|
98781
98962
|
import { lstat as lstat15, readFile as readFile27, readdir as readdir13, rm as rm14, rmdir } from "fs/promises";
|
|
98782
|
-
import { homedir as
|
|
98963
|
+
import { homedir as homedir9 } from "os";
|
|
98783
98964
|
import { isAbsolute as isAbsolute11, join as join59, relative as relative6, resolve as resolve16 } from "path";
|
|
98784
98965
|
|
|
98785
98966
|
// packages/omo-codex/src/install/codex-cleanup-bins.ts
|
|
@@ -99018,7 +99199,7 @@ function skipped(path, reason) {
|
|
|
99018
99199
|
var INSTALLED_AGENTS_MANIFEST = ".installed-agents.json";
|
|
99019
99200
|
async function cleanupCodexLight(input = {}) {
|
|
99020
99201
|
const env = input.env ?? process.env;
|
|
99021
|
-
const codexHome = resolve16(input.codexHome ?? env.CODEX_HOME ?? join59(
|
|
99202
|
+
const codexHome = resolve16(input.codexHome ?? env.CODEX_HOME ?? join59(homedir9(), ".codex"));
|
|
99022
99203
|
const configPath = join59(codexHome, "config.toml");
|
|
99023
99204
|
const installedBinDir = await readInstalledCodexBinDir(codexHome);
|
|
99024
99205
|
const agentPaths = await collectInstalledAgentPaths(codexHome, configPath);
|
|
@@ -99230,14 +99411,14 @@ function nodeErrorCode6(error) {
|
|
|
99230
99411
|
// packages/omo-senpi/src/install/install-senpi.ts
|
|
99231
99412
|
import { execFile as execFile3 } from "child_process";
|
|
99232
99413
|
import { existsSync as existsSync31 } from "fs";
|
|
99233
|
-
import { homedir as
|
|
99414
|
+
import { homedir as homedir12 } from "os";
|
|
99234
99415
|
import { dirname as dirname25, join as join64, resolve as resolve20 } from "path";
|
|
99235
99416
|
import { fileURLToPath } from "url";
|
|
99236
99417
|
import { promisify as promisify2 } from "util";
|
|
99237
99418
|
|
|
99238
|
-
// packages/
|
|
99419
|
+
// packages/senpi-task/src/agent-home.ts
|
|
99239
99420
|
import { existsSync as existsSync29 } from "fs";
|
|
99240
|
-
import { homedir as
|
|
99421
|
+
import { homedir as homedir10 } from "os";
|
|
99241
99422
|
import { join as join60, resolve as resolve17 } from "path";
|
|
99242
99423
|
var AGENT_DIR_ENV_NAMES = [
|
|
99243
99424
|
"OMO_CODING_AGENT_DIR",
|
|
@@ -99246,7 +99427,7 @@ var AGENT_DIR_ENV_NAMES = [
|
|
|
99246
99427
|
];
|
|
99247
99428
|
var AGENT_HOME_SENTINEL = "settings.json";
|
|
99248
99429
|
function resolveAgentHome(options) {
|
|
99249
|
-
const { env, homeDir =
|
|
99430
|
+
const { env, homeDir = homedir10(), exists = existsSync29 } = options;
|
|
99250
99431
|
for (const name of AGENT_DIR_ENV_NAMES) {
|
|
99251
99432
|
const configured = env[name]?.trim();
|
|
99252
99433
|
if (configured)
|
|
@@ -99260,16 +99441,15 @@ function resolveAgentHome(options) {
|
|
|
99260
99441
|
return brandedHome;
|
|
99261
99442
|
return join60(homeDir, ".senpi", "agent");
|
|
99262
99443
|
}
|
|
99263
|
-
|
|
99264
99444
|
// packages/omo-senpi/src/install/local-launcher.ts
|
|
99265
99445
|
import { chmodSync as chmodSync3, existsSync as existsSync30, mkdirSync as mkdirSync12, readFileSync as readFileSync14, rmSync as rmSync4, writeFileSync as writeFileSync7 } from "fs";
|
|
99266
|
-
import { homedir as
|
|
99446
|
+
import { homedir as homedir11 } from "os";
|
|
99267
99447
|
import { dirname as dirname22, join as join61, resolve as resolve18 } from "path";
|
|
99268
99448
|
var MARKER = "omo-local-launcher";
|
|
99269
|
-
function localLauncherPath(homeDir =
|
|
99449
|
+
function localLauncherPath(homeDir = homedir11()) {
|
|
99270
99450
|
return join61(homeDir, ".local", "bin", "omo");
|
|
99271
99451
|
}
|
|
99272
|
-
function localLauncherCmdPath(homeDir =
|
|
99452
|
+
function localLauncherCmdPath(homeDir = homedir11()) {
|
|
99273
99453
|
return join61(homeDir, ".local", "bin", "omo.cmd");
|
|
99274
99454
|
}
|
|
99275
99455
|
function releaseChannel(version) {
|
|
@@ -99358,7 +99538,7 @@ node "%~dp0omo" %*\r
|
|
|
99358
99538
|
}
|
|
99359
99539
|
|
|
99360
99540
|
// packages/omo-senpi/src/install/plugin-artifacts.ts
|
|
99361
|
-
import { createHash as
|
|
99541
|
+
import { createHash as createHash7 } from "crypto";
|
|
99362
99542
|
import { constants as constants9 } from "fs";
|
|
99363
99543
|
import { access as access2, readFile as readFile29, stat as stat6 } from "fs/promises";
|
|
99364
99544
|
import { dirname as dirname24, join as join63 } from "path";
|
|
@@ -99502,6 +99682,8 @@ var REQUIRED_PLUGIN_ARTIFACTS = [
|
|
|
99502
99682
|
join63("extensions", "omo-memory-doctor.js"),
|
|
99503
99683
|
join63("extensions", "omo-memory-memfs.js"),
|
|
99504
99684
|
join63("extensions", "omo-memory-palace.js"),
|
|
99685
|
+
join63("extensions", "omo-device-account.js"),
|
|
99686
|
+
join63("extensions", "omo-memory-commands.js"),
|
|
99505
99687
|
join63("extensions", "omo-session-history.js"),
|
|
99506
99688
|
join63("extensions", "omo-recall-store.js"),
|
|
99507
99689
|
join63("extensions", "omo-telemetry-posthog.js"),
|
|
@@ -99509,6 +99691,7 @@ var REQUIRED_PLUGIN_ARTIFACTS = [
|
|
|
99509
99691
|
join63("extensions", "loro_wasm_bg.wasm"),
|
|
99510
99692
|
join63("extensions", "CaseFolding.txt"),
|
|
99511
99693
|
join63("extensions", "omo-thread-client.js"),
|
|
99694
|
+
join63("extensions", "omo-telemetry-recovery.js"),
|
|
99512
99695
|
join63("extensions", "omo-feedback.js"),
|
|
99513
99696
|
join63("extensions", "omo-claim-receipt.js"),
|
|
99514
99697
|
join63("extensions", "assets.generated.json"),
|
|
@@ -99599,7 +99782,7 @@ async function verifyAstGrepRuntimeIntegrity(pluginPath, platform) {
|
|
|
99599
99782
|
}
|
|
99600
99783
|
let actualSha256;
|
|
99601
99784
|
try {
|
|
99602
|
-
actualSha256 =
|
|
99785
|
+
actualSha256 = createHash7("sha256").update(await readFile29(runtimeEntry)).digest("hex");
|
|
99603
99786
|
} catch (error) {
|
|
99604
99787
|
throw astGrepIntegrityError(runtimeEntry, `runtime hash could not be computed: ${messageOf(error)}`);
|
|
99605
99788
|
}
|
|
@@ -99668,7 +99851,7 @@ function resolveInstallContext(options) {
|
|
|
99668
99851
|
const env = options.env ?? process.env;
|
|
99669
99852
|
const allowBuild = options.pluginPath === undefined;
|
|
99670
99853
|
const repoRoot = resolve20(options.repoRoot ?? (allowBuild ? findRepoRoot2(dirname25(fileURLToPath(import.meta.url))) : dirname25(resolve20(options.pluginPath))));
|
|
99671
|
-
const homeDir = options.homeDir ?? env.HOME ??
|
|
99854
|
+
const homeDir = options.homeDir ?? env.HOME ?? homedir12();
|
|
99672
99855
|
const agentDir = resolve20(options.agentDir ?? resolveAgentHome({ env, homeDir }));
|
|
99673
99856
|
const pluginPath = resolve20(options.pluginPath ?? join64(repoRoot, "packages", "omo-senpi", "plugin"));
|
|
99674
99857
|
return {
|
|
@@ -99964,7 +100147,7 @@ function shadowWarning(resolved, native, isWindows) {
|
|
|
99964
100147
|
// packages/omo-opencode/src/cli/install-native/run-native-install.ts
|
|
99965
100148
|
init_bun_which_shim();
|
|
99966
100149
|
init_spawn_with_windows_hide();
|
|
99967
|
-
import { homedir as
|
|
100150
|
+
import { homedir as homedir13 } from "os";
|
|
99968
100151
|
function describeExit(plan, result) {
|
|
99969
100152
|
const stderr = result.stderr?.trim();
|
|
99970
100153
|
const head = `${plan.packageManager} exited with code ${result.exitCode}`;
|
|
@@ -100028,7 +100211,7 @@ function nativeInstallFailureLines(failure) {
|
|
|
100028
100211
|
function defaultNativeInstallDependencies() {
|
|
100029
100212
|
return {
|
|
100030
100213
|
isBunAvailable: () => bunWhich("bun") !== null,
|
|
100031
|
-
environment: resolveOmoBinEnvironment({ env: process.env, platform: process.platform, homeDir:
|
|
100214
|
+
environment: resolveOmoBinEnvironment({ env: process.env, platform: process.platform, homeDir: homedir13() }),
|
|
100032
100215
|
spawn: async (command, args) => {
|
|
100033
100216
|
const proc = spawnWithWindowsHide([command, ...args], {
|
|
100034
100217
|
env: process.env,
|
|
@@ -100430,7 +100613,7 @@ async function checkTuiPluginConfig() {
|
|
|
100430
100613
|
if (!server.registered && tui.registered) {
|
|
100431
100614
|
issues.push({
|
|
100432
100615
|
title: "Server plugin entry missing from opencode.json",
|
|
100433
|
-
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
|
|
100616
|
+
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.",
|
|
100434
100617
|
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"}.`,
|
|
100435
100618
|
affects: ["tool dispatch", "hook execution", "SDK integration"],
|
|
100436
100619
|
severity: "warning"
|
|
@@ -100599,7 +100782,7 @@ function refreshOpenCodePluginSandboxes(options = {}) {
|
|
|
100599
100782
|
}
|
|
100600
100783
|
|
|
100601
100784
|
// packages/omo-opencode/src/cli/install-ast-grep-sg.ts
|
|
100602
|
-
import { homedir as
|
|
100785
|
+
import { homedir as homedir14 } from "os";
|
|
100603
100786
|
import { join as join69 } from "path";
|
|
100604
100787
|
|
|
100605
100788
|
// packages/shared-skills/index.mjs
|
|
@@ -100622,7 +100805,7 @@ function describeResult2(result) {
|
|
|
100622
100805
|
}
|
|
100623
100806
|
async function installAstGrepForOpenCode(options = {}) {
|
|
100624
100807
|
const platform = options.platform ?? process.platform;
|
|
100625
|
-
const baseDir = join69(options.homeDir ??
|
|
100808
|
+
const baseDir = join69(options.homeDir ?? homedir14(), ".omo");
|
|
100626
100809
|
const targetDir = astGrepRuntimeDir(baseDir, platform, options.arch ?? process.arch);
|
|
100627
100810
|
const skillDir = join69(options.sharedSkillsRoot ?? sharedSkillsRootPath(), "ast-grep");
|
|
100628
100811
|
const installer = options.installer ?? runAstGrepSkillInstall;
|
|
@@ -103196,9 +103379,250 @@ async function processEvents(ctx, stream, state) {
|
|
|
103196
103379
|
}
|
|
103197
103380
|
}
|
|
103198
103381
|
}
|
|
103382
|
+
// packages/omo-opencode/src/config/validate.ts
|
|
103383
|
+
import { dirname as dirname29, isAbsolute as isAbsolute13, join as join74, relative as relative7 } from "path";
|
|
103384
|
+
|
|
103385
|
+
// packages/skills-loader-core/src/shared/skill-path-resolver.ts
|
|
103386
|
+
init_skill_path_resolver();
|
|
103387
|
+
|
|
103388
|
+
// packages/skills-loader-core/src/features/opencode-skill-loader/skill-mcp-config.ts
|
|
103389
|
+
init_js_yaml();
|
|
103390
|
+
|
|
103391
|
+
// packages/skills-loader-core/src/features/opencode-skill-loader/skill-provenance.ts
|
|
103392
|
+
import { basename as basename11, dirname as dirname28, join as join73, resolve as resolve23, sep as sep9 } from "path";
|
|
103393
|
+
import { homedir as homedir16 } from "os";
|
|
103394
|
+
|
|
103395
|
+
// packages/skills-loader-core/src/shared/claude-config-dir.ts
|
|
103396
|
+
init_src();
|
|
103397
|
+
import { join as join70 } from "path";
|
|
103398
|
+
function getClaudeConfigDir() {
|
|
103399
|
+
const envConfigDir = process.env.CLAUDE_CONFIG_DIR;
|
|
103400
|
+
if (envConfigDir) {
|
|
103401
|
+
return envConfigDir;
|
|
103402
|
+
}
|
|
103403
|
+
return join70(getHomeDirectory(), ".claude");
|
|
103404
|
+
}
|
|
103405
|
+
// packages/skills-loader-core/src/shared/opencode-config-dir.ts
|
|
103406
|
+
import { existsSync as existsSync36, realpathSync as realpathSync9 } from "fs";
|
|
103407
|
+
import { homedir as homedir15 } from "os";
|
|
103408
|
+
import { join as join71, posix as posix10, resolve as resolve21, win32 as win326 } from "path";
|
|
103409
|
+
|
|
103410
|
+
// packages/skills-loader-core/src/shared/plugin-identity.ts
|
|
103411
|
+
init_src();
|
|
103412
|
+
var PRODUCT_IDENTITY = createProductIdentity({
|
|
103413
|
+
pluginName: "oh-my-openagent",
|
|
103414
|
+
legacyPluginName: "oh-my-opencode",
|
|
103415
|
+
publishedPackageName: "oh-my-opencode",
|
|
103416
|
+
configBasename: "oh-my-openagent",
|
|
103417
|
+
legacyConfigBasename: "oh-my-opencode",
|
|
103418
|
+
logFileName: "oh-my-opencode.log",
|
|
103419
|
+
cacheDirName: "oh-my-opencode"
|
|
103420
|
+
});
|
|
103421
|
+
var PLUGIN_NAME2 = PRODUCT_IDENTITY.pluginName;
|
|
103422
|
+
var LEGACY_PLUGIN_NAME2 = PRODUCT_IDENTITY.legacyPluginName;
|
|
103423
|
+
var PUBLISHED_PACKAGE_NAME2 = PRODUCT_IDENTITY.publishedPackageName;
|
|
103424
|
+
var CONFIG_BASENAME = PRODUCT_IDENTITY.configBasename;
|
|
103425
|
+
var LEGACY_CONFIG_BASENAME = PRODUCT_IDENTITY.legacyConfigBasename;
|
|
103426
|
+
var LOG_FILENAME3 = PRODUCT_IDENTITY.logFileName;
|
|
103427
|
+
var CACHE_DIR_NAME3 = PRODUCT_IDENTITY.cacheDirName;
|
|
103428
|
+
|
|
103429
|
+
// packages/skills-loader-core/src/shared/opencode-config-dir.ts
|
|
103430
|
+
var TAURI_APP_IDENTIFIER2 = "ai.opencode.desktop";
|
|
103431
|
+
var TAURI_APP_IDENTIFIER_DEV2 = "ai.opencode.desktop.dev";
|
|
103432
|
+
function isDevBuild2(version) {
|
|
103433
|
+
if (!version)
|
|
103434
|
+
return false;
|
|
103435
|
+
return version.includes("-dev") || version.includes(".dev");
|
|
103436
|
+
}
|
|
103437
|
+
function getTauriConfigDir2(identifier) {
|
|
103438
|
+
const platform = process.platform;
|
|
103439
|
+
switch (platform) {
|
|
103440
|
+
case "darwin":
|
|
103441
|
+
return join71(homedir15(), "Library", "Application Support", identifier);
|
|
103442
|
+
case "win32": {
|
|
103443
|
+
const appData = process.env.APPDATA || join71(homedir15(), "AppData", "Roaming");
|
|
103444
|
+
return win326.join(appData, identifier);
|
|
103445
|
+
}
|
|
103446
|
+
case "linux":
|
|
103447
|
+
default: {
|
|
103448
|
+
const xdgConfig = process.env.XDG_CONFIG_HOME || join71(homedir15(), ".config");
|
|
103449
|
+
return join71(xdgConfig, identifier);
|
|
103450
|
+
}
|
|
103451
|
+
}
|
|
103452
|
+
}
|
|
103453
|
+
function resolveConfigPath2(pathValue) {
|
|
103454
|
+
if (isWslEnvironment2() && pathValue.startsWith("/")) {
|
|
103455
|
+
return posix10.normalize(pathValue);
|
|
103456
|
+
}
|
|
103457
|
+
const resolvedPath = resolve21(pathValue);
|
|
103458
|
+
if (!existsSync36(resolvedPath))
|
|
103459
|
+
return resolvedPath;
|
|
103460
|
+
try {
|
|
103461
|
+
return realpathSync9(resolvedPath);
|
|
103462
|
+
} catch (error) {
|
|
103463
|
+
if (error instanceof Error) {
|
|
103464
|
+
return resolvedPath;
|
|
103465
|
+
}
|
|
103466
|
+
return resolvedPath;
|
|
103467
|
+
}
|
|
103468
|
+
}
|
|
103469
|
+
function isWslEnvironment2() {
|
|
103470
|
+
return process.platform === "linux" && (Boolean(process.env.WSL_DISTRO_NAME?.trim()) || Boolean(process.env.WSL_INTEROP?.trim()));
|
|
103471
|
+
}
|
|
103472
|
+
function isWindowsUserConfigRoot2(pathValue) {
|
|
103473
|
+
const normalizedPath = pathValue.replaceAll("\\", "/").toLowerCase();
|
|
103474
|
+
return /^[a-z]:\/users\//.test(normalizedPath) || /^\/mnt\/[a-z]\/users\//.test(normalizedPath);
|
|
103475
|
+
}
|
|
103476
|
+
function getWindowsUserFromConfigRoot2(pathValue) {
|
|
103477
|
+
const normalizedPath = pathValue.replaceAll("\\", "/");
|
|
103478
|
+
const match = /^(?:[a-z]:|\/mnt\/[a-z])\/Users\/([^/]+)/i.exec(normalizedPath);
|
|
103479
|
+
return match?.[1] ?? null;
|
|
103480
|
+
}
|
|
103481
|
+
function getWslLinuxHomeDir2(windowsConfigRoot) {
|
|
103482
|
+
const envHome = process.env.HOME?.trim();
|
|
103483
|
+
if (envHome && envHome.startsWith("/") && !isWindowsUserConfigRoot2(envHome)) {
|
|
103484
|
+
return envHome;
|
|
103485
|
+
}
|
|
103486
|
+
const user = process.env.USER?.trim() || process.env.LOGNAME?.trim() || process.env.SUDO_USER?.trim() || (windowsConfigRoot ? getWindowsUserFromConfigRoot2(windowsConfigRoot) : undefined);
|
|
103487
|
+
return user ? posix10.join("/home", user) : null;
|
|
103488
|
+
}
|
|
103489
|
+
function getCliDefaultConfigDir2() {
|
|
103490
|
+
const envXdgConfig = process.env.XDG_CONFIG_HOME?.trim();
|
|
103491
|
+
const shouldIgnoreWindowsXdg = envXdgConfig !== undefined && envXdgConfig.length > 0 && isWslEnvironment2() && isWindowsUserConfigRoot2(envXdgConfig);
|
|
103492
|
+
const xdgConfig = shouldIgnoreWindowsXdg ? posix10.join(getWslLinuxHomeDir2(envXdgConfig) ?? "/home", ".config") : envXdgConfig || join71(homedir15(), ".config");
|
|
103493
|
+
const configDir = isWslEnvironment2() ? posix10.join(xdgConfig, "opencode") : join71(xdgConfig, "opencode");
|
|
103494
|
+
return resolveConfigPath2(configDir);
|
|
103495
|
+
}
|
|
103496
|
+
function getCliCustomConfigDir2() {
|
|
103497
|
+
const envConfigDir = process.env.OPENCODE_CONFIG_DIR?.trim();
|
|
103498
|
+
if (!envConfigDir) {
|
|
103499
|
+
return null;
|
|
103500
|
+
}
|
|
103501
|
+
return resolveConfigPath2(envConfigDir);
|
|
103502
|
+
}
|
|
103503
|
+
function getCliConfigDir2() {
|
|
103504
|
+
return getCliCustomConfigDir2() ?? getCliDefaultConfigDir2();
|
|
103505
|
+
}
|
|
103506
|
+
function getOpenCodeConfigDirs2(options) {
|
|
103507
|
+
if (options.binary !== "opencode") {
|
|
103508
|
+
return [getOpenCodeConfigDir2(options)];
|
|
103509
|
+
}
|
|
103510
|
+
const customConfigDir = getCliCustomConfigDir2();
|
|
103511
|
+
return Array.from(new Set([
|
|
103512
|
+
...customConfigDir ? [customConfigDir] : [],
|
|
103513
|
+
getCliDefaultConfigDir2()
|
|
103514
|
+
]));
|
|
103515
|
+
}
|
|
103516
|
+
function getOpenCodeConfigDir2(options) {
|
|
103517
|
+
const { binary, version, checkExisting = true } = options;
|
|
103518
|
+
if (binary === "opencode") {
|
|
103519
|
+
return getCliConfigDir2();
|
|
103520
|
+
}
|
|
103521
|
+
const identifier = isDevBuild2(version) ? TAURI_APP_IDENTIFIER_DEV2 : TAURI_APP_IDENTIFIER2;
|
|
103522
|
+
const tauriDirBase = getTauriConfigDir2(identifier);
|
|
103523
|
+
const tauriDir = process.platform === "win32" ? win326.isAbsolute(tauriDirBase) ? win326.normalize(tauriDirBase) : win326.resolve(tauriDirBase) : resolveConfigPath2(tauriDirBase);
|
|
103524
|
+
if (checkExisting) {
|
|
103525
|
+
const legacyDir = getCliConfigDir2();
|
|
103526
|
+
const legacyConfig = join71(legacyDir, "opencode.json");
|
|
103527
|
+
const legacyConfigC = join71(legacyDir, "opencode.jsonc");
|
|
103528
|
+
if (existsSync36(legacyConfig) || existsSync36(legacyConfigC)) {
|
|
103529
|
+
return legacyDir;
|
|
103530
|
+
}
|
|
103531
|
+
}
|
|
103532
|
+
return tauriDir;
|
|
103533
|
+
}
|
|
103534
|
+
// packages/skills-loader-core/src/shared/project-discovery-dirs.ts
|
|
103535
|
+
import { execFileSync as execFileSync3 } from "child_process";
|
|
103536
|
+
import { existsSync as existsSync37, realpathSync as realpathSync10 } from "fs";
|
|
103537
|
+
import { dirname as dirname27, join as join72, resolve as resolve22, win32 as win327 } from "path";
|
|
103538
|
+
var worktreePathCache2 = new Map;
|
|
103539
|
+
function normalizePath(path) {
|
|
103540
|
+
const resolvedPath = process.platform !== "win32" && win327.isAbsolute(path) ? path : resolve22(path);
|
|
103541
|
+
if (!existsSync37(resolvedPath)) {
|
|
103542
|
+
return resolvedPath;
|
|
103543
|
+
}
|
|
103544
|
+
try {
|
|
103545
|
+
return realpathSync10.native(resolvedPath);
|
|
103546
|
+
} catch (error) {
|
|
103547
|
+
if (!(error instanceof Error)) {
|
|
103548
|
+
throw error;
|
|
103549
|
+
}
|
|
103550
|
+
try {
|
|
103551
|
+
return realpathSync10(resolvedPath);
|
|
103552
|
+
} catch (fallbackError) {
|
|
103553
|
+
if (!(fallbackError instanceof Error)) {
|
|
103554
|
+
throw fallbackError;
|
|
103555
|
+
}
|
|
103556
|
+
return resolvedPath;
|
|
103557
|
+
}
|
|
103558
|
+
}
|
|
103559
|
+
}
|
|
103560
|
+
function pathKey2(path) {
|
|
103561
|
+
const normalized = path.replace(/\\/g, "/");
|
|
103562
|
+
return process.platform === "win32" ? normalized.toLowerCase() : normalized;
|
|
103563
|
+
}
|
|
103564
|
+
function detectWorktreePath(directory) {
|
|
103565
|
+
const resolvedDirectory = resolve22(directory);
|
|
103566
|
+
const cacheKey = pathKey2(normalizePath(resolvedDirectory));
|
|
103567
|
+
if (worktreePathCache2.has(cacheKey)) {
|
|
103568
|
+
return worktreePathCache2.get(cacheKey);
|
|
103569
|
+
}
|
|
103570
|
+
let ancestor = normalizePath(resolvedDirectory);
|
|
103571
|
+
while (true) {
|
|
103572
|
+
if (existsSync37(join72(ancestor, ".git"))) {
|
|
103573
|
+
worktreePathCache2.set(cacheKey, ancestor);
|
|
103574
|
+
return ancestor;
|
|
103575
|
+
}
|
|
103576
|
+
const parent = dirname27(ancestor);
|
|
103577
|
+
if (parent === ancestor)
|
|
103578
|
+
break;
|
|
103579
|
+
ancestor = parent;
|
|
103580
|
+
}
|
|
103581
|
+
try {
|
|
103582
|
+
const worktreePath = execFileSync3("git", ["rev-parse", "--show-toplevel"], {
|
|
103583
|
+
cwd: resolvedDirectory,
|
|
103584
|
+
encoding: "utf-8",
|
|
103585
|
+
timeout: 5000,
|
|
103586
|
+
stdio: ["pipe", "pipe", "pipe"]
|
|
103587
|
+
}).trim();
|
|
103588
|
+
const normalizedWorktreePath = normalizePath(worktreePath);
|
|
103589
|
+
worktreePathCache2.set(cacheKey, normalizedWorktreePath);
|
|
103590
|
+
return normalizedWorktreePath;
|
|
103591
|
+
} catch (error) {
|
|
103592
|
+
if (!(error instanceof Error)) {
|
|
103593
|
+
throw error;
|
|
103594
|
+
}
|
|
103595
|
+
worktreePathCache2.set(cacheKey, undefined);
|
|
103596
|
+
return;
|
|
103597
|
+
}
|
|
103598
|
+
}
|
|
103599
|
+
// packages/skills-loader-core/src/shared/internal-initiator-marker.ts
|
|
103600
|
+
init_internal_initiator_marker();
|
|
103601
|
+
// packages/skills-loader-core/src/features/opencode-skill-loader/skill-provenance.ts
|
|
103602
|
+
var observers = new Set;
|
|
103603
|
+
function knownUserSkillRoots() {
|
|
103604
|
+
const home = homedir16();
|
|
103605
|
+
return [
|
|
103606
|
+
join73(getClaudeConfigDir(), "skills"),
|
|
103607
|
+
join73(home, ".agents", "skills"),
|
|
103608
|
+
join73(home, ".omo", "agent", "skills"),
|
|
103609
|
+
join73(home, ".senpi", "agent", "skills"),
|
|
103610
|
+
sharedSkillsRootPath(),
|
|
103611
|
+
...getOpenCodeConfigDirs2({ binary: "opencode" }).flatMap((dir) => [
|
|
103612
|
+
join73(dir, "skills"),
|
|
103613
|
+
join73(dir, "skill")
|
|
103614
|
+
])
|
|
103615
|
+
];
|
|
103616
|
+
}
|
|
103617
|
+
|
|
103618
|
+
// packages/skills-loader-core/src/features/opencode-skill-loader/config-source-discovery.ts
|
|
103619
|
+
var sourceOrigins = new WeakMap;
|
|
103620
|
+
function setSkillSourceProvenance(config, provenance) {
|
|
103621
|
+
sourceOrigins.set(config, provenance);
|
|
103622
|
+
}
|
|
103623
|
+
|
|
103199
103624
|
// packages/omo-opencode/src/config/validate.ts
|
|
103200
103625
|
init_src4();
|
|
103201
|
-
import { relative as relative7 } from "path";
|
|
103202
103626
|
|
|
103203
103627
|
// packages/omo-opencode/src/shared/disabled-providers.ts
|
|
103204
103628
|
init_config_errors();
|
|
@@ -103322,7 +103746,7 @@ function appendViews(views, layers, select, keyPrefix) {
|
|
|
103322
103746
|
for (const layer of layers) {
|
|
103323
103747
|
const config = select(layer.config);
|
|
103324
103748
|
if (Object.keys(config).length > 0)
|
|
103325
|
-
views.push({ config, keyPrefix, path: layer.source.path });
|
|
103749
|
+
views.push({ config, keyPrefix, path: layer.source.path, scope: layer.source.scope });
|
|
103326
103750
|
}
|
|
103327
103751
|
}
|
|
103328
103752
|
function recordFields(value, fields) {
|
|
@@ -103852,7 +104276,7 @@ var GitEnvPrefixSchema2 = string2().refine(isValidGitEnvPrefix, { message: GIT_E
|
|
|
103852
104276
|
init_zod();
|
|
103853
104277
|
var GitMasterConfigSchema = object({
|
|
103854
104278
|
commit_footer: union([boolean2(), string2()]).default(false),
|
|
103855
|
-
include_co_authored_by: boolean2().default(
|
|
104279
|
+
include_co_authored_by: boolean2().default(true),
|
|
103856
104280
|
git_env_prefix: GitEnvPrefixSchema2
|
|
103857
104281
|
});
|
|
103858
104282
|
// packages/omo-opencode/src/config/schema/hooks.ts
|
|
@@ -104161,7 +104585,7 @@ var OhMyOpenCodeConfigSchema = object({
|
|
|
104161
104585
|
babysitting: BabysittingConfigSchema.optional(),
|
|
104162
104586
|
git_master: GitMasterConfigSchema.default({
|
|
104163
104587
|
commit_footer: false,
|
|
104164
|
-
include_co_authored_by:
|
|
104588
|
+
include_co_authored_by: true,
|
|
104165
104589
|
git_env_prefix: "GIT_MASTER=1"
|
|
104166
104590
|
}),
|
|
104167
104591
|
browser_automation_engine: BrowserAutomationConfigSchema.optional(),
|
|
@@ -104332,6 +104756,28 @@ function validatePluginConfig(directory, environment = process.env) {
|
|
|
104332
104756
|
const userConfig = parseConfig(prunePluginView({ config: chain.protectedUserView, homeDir, keyPrefix: "", path: "" }).config);
|
|
104333
104757
|
const config = applyDisabledProviders(materializeAgentModelChains(protectUserFields(mergeViews(views), userConfig)));
|
|
104334
104758
|
warnLegacyUlwExecuteKey(chain.views);
|
|
104759
|
+
if (config.skills) {
|
|
104760
|
+
const owner = chain.views.findLast((view) => Object.hasOwn(view.config, "skills"));
|
|
104761
|
+
const userRoots = [...knownUserSkillRoots()];
|
|
104762
|
+
for (const view of chain.views.filter((candidate) => candidate.scope === "user")) {
|
|
104763
|
+
const settings = OhMyOpenCodeConfigSchema.safeParse({ skills: view.config.skills });
|
|
104764
|
+
const skills = settings.success ? settings.data.skills : undefined;
|
|
104765
|
+
if (!skills || Array.isArray(skills))
|
|
104766
|
+
continue;
|
|
104767
|
+
for (const source of skills.sources ?? []) {
|
|
104768
|
+
const path = typeof source === "string" ? source : source.path;
|
|
104769
|
+
if (/^https?:\/\//.test(path))
|
|
104770
|
+
continue;
|
|
104771
|
+
userRoots.push(path.startsWith("~/") ? join74(homeDir ?? "", path.slice(2)) : isAbsolute13(path) ? path : join74(dirname29(view.path), path));
|
|
104772
|
+
}
|
|
104773
|
+
}
|
|
104774
|
+
setSkillSourceProvenance(config.skills, {
|
|
104775
|
+
kind: owner?.scope === "user" ? "user" : "project-auto",
|
|
104776
|
+
selectedRoot: owner ? dirname29(owner.path) : directory,
|
|
104777
|
+
projectRoot: detectWorktreePath(directory) ?? directory,
|
|
104778
|
+
userRoots
|
|
104779
|
+
});
|
|
104780
|
+
}
|
|
104335
104781
|
return {
|
|
104336
104782
|
valid: messages.length === 0,
|
|
104337
104783
|
messages,
|
|
@@ -104355,7 +104801,7 @@ var import_picocolors11 = __toESM(require_picocolors(), 1);
|
|
|
104355
104801
|
// packages/omo-opencode/src/cli/run/opencode-binary-resolver.ts
|
|
104356
104802
|
init_bun_which_shim();
|
|
104357
104803
|
init_spawn_with_windows_hide();
|
|
104358
|
-
import { delimiter as delimiter2, dirname as
|
|
104804
|
+
import { delimiter as delimiter2, dirname as dirname30, posix as posix11, win32 as win328 } from "path";
|
|
104359
104805
|
var OPENCODE_COMMANDS = ["opencode", "opencode-desktop"];
|
|
104360
104806
|
var WINDOWS_SUFFIXES = ["", ".exe", ".cmd", ".bat", ".ps1"];
|
|
104361
104807
|
function getCommandCandidates(platform) {
|
|
@@ -104365,8 +104811,8 @@ function getCommandCandidates(platform) {
|
|
|
104365
104811
|
}
|
|
104366
104812
|
function getPathTools(platform) {
|
|
104367
104813
|
if (platform === "win32")
|
|
104368
|
-
return
|
|
104369
|
-
return
|
|
104814
|
+
return win328;
|
|
104815
|
+
return posix11;
|
|
104370
104816
|
}
|
|
104371
104817
|
function collectCandidateBinaryPaths(pathEnv, which = bunWhich, platform = process.platform) {
|
|
104372
104818
|
const seen = new Set;
|
|
@@ -104413,7 +104859,7 @@ async function findWorkingOpencodeBinary(pathEnv = process.env.PATH, probe = can
|
|
|
104413
104859
|
return null;
|
|
104414
104860
|
}
|
|
104415
104861
|
function buildPathWithBinaryFirst(pathEnv, binaryPath) {
|
|
104416
|
-
const preferredDir =
|
|
104862
|
+
const preferredDir = dirname30(binaryPath);
|
|
104417
104863
|
const existing = (pathEnv ?? "").split(delimiter2).filter((entry) => entry.length > 0 && entry !== preferredDir);
|
|
104418
104864
|
return [preferredDir, ...existing].join(delimiter2);
|
|
104419
104865
|
}
|
|
@@ -105020,9 +105466,9 @@ function buildTaskRef(section, label) {
|
|
|
105020
105466
|
};
|
|
105021
105467
|
}
|
|
105022
105468
|
// packages/boulder-state/src/top-level-task.ts
|
|
105023
|
-
import { existsSync as
|
|
105469
|
+
import { existsSync as existsSync38, readFileSync as readFileSync19 } from "fs";
|
|
105024
105470
|
function readCurrentTopLevelTask(planPath) {
|
|
105025
|
-
if (!
|
|
105471
|
+
if (!existsSync38(planPath)) {
|
|
105026
105472
|
return null;
|
|
105027
105473
|
}
|
|
105028
105474
|
try {
|
|
@@ -105033,13 +105479,13 @@ function readCurrentTopLevelTask(planPath) {
|
|
|
105033
105479
|
}
|
|
105034
105480
|
}
|
|
105035
105481
|
// packages/boulder-state/src/storage/path.ts
|
|
105036
|
-
import { existsSync as
|
|
105037
|
-
import { isAbsolute as
|
|
105482
|
+
import { existsSync as existsSync39 } from "fs";
|
|
105483
|
+
import { isAbsolute as isAbsolute14, join as join75, relative as relative8, resolve as resolve24 } from "path";
|
|
105038
105484
|
function getBoulderFilePath(directory) {
|
|
105039
|
-
return
|
|
105485
|
+
return join75(directory, BOULDER_DIR, BOULDER_FILE);
|
|
105040
105486
|
}
|
|
105041
105487
|
function resolveTrackedPath(baseDirectory, trackedPath) {
|
|
105042
|
-
return
|
|
105488
|
+
return isAbsolute14(trackedPath) ? resolve24(trackedPath) : resolve24(baseDirectory, trackedPath);
|
|
105043
105489
|
}
|
|
105044
105490
|
function resolveBoulderPlanPath(directory, state) {
|
|
105045
105491
|
const absolutePlanPath = resolveTrackedPath(directory, state.active_plan);
|
|
@@ -105047,22 +105493,22 @@ function resolveBoulderPlanPath(directory, state) {
|
|
|
105047
105493
|
if (!worktreePath) {
|
|
105048
105494
|
return absolutePlanPath;
|
|
105049
105495
|
}
|
|
105050
|
-
const absoluteDirectory =
|
|
105496
|
+
const absoluteDirectory = resolve24(directory);
|
|
105051
105497
|
const relativePlanPath = relative8(absoluteDirectory, absolutePlanPath);
|
|
105052
|
-
if (relativePlanPath.length === 0 || relativePlanPath.startsWith("..") ||
|
|
105498
|
+
if (relativePlanPath.length === 0 || relativePlanPath.startsWith("..") || isAbsolute14(relativePlanPath)) {
|
|
105053
105499
|
return absolutePlanPath;
|
|
105054
105500
|
}
|
|
105055
105501
|
const absoluteWorktreePath = resolveTrackedPath(directory, worktreePath);
|
|
105056
|
-
const worktreePlanPath =
|
|
105057
|
-
return
|
|
105502
|
+
const worktreePlanPath = resolve24(absoluteWorktreePath, relativePlanPath);
|
|
105503
|
+
return existsSync39(worktreePlanPath) ? worktreePlanPath : absolutePlanPath;
|
|
105058
105504
|
}
|
|
105059
105505
|
function resolveBoulderPlanPathForWork(directory, work) {
|
|
105060
105506
|
return resolveBoulderPlanPath(directory, work);
|
|
105061
105507
|
}
|
|
105062
105508
|
// packages/boulder-state/src/storage/plan-progress.ts
|
|
105063
|
-
import { existsSync as
|
|
105509
|
+
import { existsSync as existsSync40, readFileSync as readFileSync20, readdirSync as readdirSync9, statSync as statSync5 } from "fs";
|
|
105064
105510
|
function getPlanProgress(planPath) {
|
|
105065
|
-
if (!
|
|
105511
|
+
if (!existsSync40(planPath)) {
|
|
105066
105512
|
return { total: 0, completed: 0, isComplete: false };
|
|
105067
105513
|
}
|
|
105068
105514
|
try {
|
|
@@ -105145,10 +105591,10 @@ function selectMirrorWork(state) {
|
|
|
105145
105591
|
return sorted[0] ?? null;
|
|
105146
105592
|
}
|
|
105147
105593
|
// packages/boulder-state/src/storage/read-state.ts
|
|
105148
|
-
import { existsSync as
|
|
105594
|
+
import { existsSync as existsSync41, readFileSync as readFileSync21 } from "fs";
|
|
105149
105595
|
function readBoulderState(directory) {
|
|
105150
105596
|
const filePath = getBoulderFilePath(directory);
|
|
105151
|
-
if (!
|
|
105597
|
+
if (!existsSync41(filePath)) {
|
|
105152
105598
|
return null;
|
|
105153
105599
|
}
|
|
105154
105600
|
try {
|
|
@@ -105220,14 +105666,14 @@ init_state();
|
|
|
105220
105666
|
// packages/omo-opencode/src/features/run-continuation-state/constants.ts
|
|
105221
105667
|
var CONTINUATION_MARKER_DIR = ".omo/run-continuation";
|
|
105222
105668
|
// packages/omo-opencode/src/features/run-continuation-state/storage.ts
|
|
105223
|
-
import { existsSync as
|
|
105224
|
-
import { join as
|
|
105669
|
+
import { existsSync as existsSync42, mkdirSync as mkdirSync14, readFileSync as readFileSync22, rmSync as rmSync6, writeFileSync as writeFileSync8 } from "fs";
|
|
105670
|
+
import { join as join76 } from "path";
|
|
105225
105671
|
function getMarkerPath(directory, sessionID) {
|
|
105226
|
-
return
|
|
105672
|
+
return join76(directory, CONTINUATION_MARKER_DIR, `${sessionID}.json`);
|
|
105227
105673
|
}
|
|
105228
105674
|
function readContinuationMarker(directory, sessionID) {
|
|
105229
105675
|
const markerPath = getMarkerPath(directory, sessionID);
|
|
105230
|
-
if (!
|
|
105676
|
+
if (!existsSync42(markerPath))
|
|
105231
105677
|
return null;
|
|
105232
105678
|
try {
|
|
105233
105679
|
const raw = readFileSync22(markerPath, "utf-8");
|
|
@@ -105296,7 +105742,7 @@ async function isSessionInBoulderLineage(input) {
|
|
|
105296
105742
|
init_shared();
|
|
105297
105743
|
init_compaction_marker();
|
|
105298
105744
|
import { readFileSync as readFileSync23, readdirSync as readdirSync10 } from "fs";
|
|
105299
|
-
import { join as
|
|
105745
|
+
import { join as join77 } from "path";
|
|
105300
105746
|
var defaultSessionLastAgentDeps = {
|
|
105301
105747
|
getMessageDir,
|
|
105302
105748
|
isSqliteBackend,
|
|
@@ -105356,7 +105802,7 @@ async function getLastAgentFromSession(sessionID, client, deps = {}) {
|
|
|
105356
105802
|
try {
|
|
105357
105803
|
const messages = readdirSync10(messageDir).filter((fileName) => fileName.endsWith(".json")).map((fileName) => {
|
|
105358
105804
|
try {
|
|
105359
|
-
const content = readFileSync23(
|
|
105805
|
+
const content = readFileSync23(join77(messageDir, fileName), "utf-8");
|
|
105360
105806
|
const parsed = JSON.parse(content);
|
|
105361
105807
|
return {
|
|
105362
105808
|
fileName,
|
|
@@ -105399,8 +105845,8 @@ init_agent_display_names();
|
|
|
105399
105845
|
|
|
105400
105846
|
// packages/omo-opencode/src/hooks/ralph-loop/storage.ts
|
|
105401
105847
|
init_frontmatter2();
|
|
105402
|
-
import { existsSync as
|
|
105403
|
-
import { dirname as
|
|
105848
|
+
import { existsSync as existsSync43, readFileSync as readFileSync24, writeFileSync as writeFileSync9, unlinkSync as unlinkSync6, mkdirSync as mkdirSync15 } from "fs";
|
|
105849
|
+
import { dirname as dirname31, join as join78 } from "path";
|
|
105404
105850
|
|
|
105405
105851
|
// packages/omo-opencode/src/hooks/ralph-loop/constants.ts
|
|
105406
105852
|
var DEFAULT_STATE_FILE = ".omo/ralph-loop.local.md";
|
|
@@ -105409,11 +105855,11 @@ var DEFAULT_COMPLETION_PROMISE = "DONE";
|
|
|
105409
105855
|
|
|
105410
105856
|
// packages/omo-opencode/src/hooks/ralph-loop/storage.ts
|
|
105411
105857
|
function getStateFilePath(directory, customPath) {
|
|
105412
|
-
return customPath ?
|
|
105858
|
+
return customPath ? join78(directory, customPath) : join78(directory, DEFAULT_STATE_FILE);
|
|
105413
105859
|
}
|
|
105414
105860
|
function readState(directory, customPath) {
|
|
105415
105861
|
const filePath = getStateFilePath(directory, customPath);
|
|
105416
|
-
if (!
|
|
105862
|
+
if (!existsSync43(filePath)) {
|
|
105417
105863
|
return null;
|
|
105418
105864
|
}
|
|
105419
105865
|
try {
|
|
@@ -106551,14 +106997,14 @@ async function getLocalVersion(options = {}) {
|
|
|
106551
106997
|
}
|
|
106552
106998
|
}
|
|
106553
106999
|
// packages/omo-opencode/src/cli/doctor/checks/system.ts
|
|
106554
|
-
import { existsSync as
|
|
107000
|
+
import { existsSync as existsSync54, readFileSync as readFileSync34 } from "fs";
|
|
106555
107001
|
|
|
106556
107002
|
// packages/omo-opencode/src/cli/doctor/checks/system-binary.ts
|
|
106557
107003
|
init_extract_semver();
|
|
106558
107004
|
init_bun_which_shim();
|
|
106559
|
-
import { existsSync as
|
|
106560
|
-
import { homedir as
|
|
106561
|
-
import { join as
|
|
107005
|
+
import { existsSync as existsSync51, accessSync as accessSync4, constants as constants12 } from "fs";
|
|
107006
|
+
import { homedir as homedir19 } from "os";
|
|
107007
|
+
import { join as join85 } from "path";
|
|
106562
107008
|
|
|
106563
107009
|
// packages/omo-opencode/src/cli/doctor/framework/spawn-with-timeout.ts
|
|
106564
107010
|
init_spawn_with_windows_hide();
|
|
@@ -106645,22 +107091,22 @@ function isExecutable2(path) {
|
|
|
106645
107091
|
}
|
|
106646
107092
|
}
|
|
106647
107093
|
function getDesktopAppPaths(platform) {
|
|
106648
|
-
const home =
|
|
107094
|
+
const home = homedir19();
|
|
106649
107095
|
switch (platform) {
|
|
106650
107096
|
case "darwin":
|
|
106651
107097
|
return [
|
|
106652
107098
|
"/Applications/OpenCode.app/Contents/MacOS/OpenCode",
|
|
106653
|
-
|
|
107099
|
+
join85(home, "Applications", "OpenCode.app", "Contents", "MacOS", "OpenCode")
|
|
106654
107100
|
];
|
|
106655
107101
|
case "win32": {
|
|
106656
107102
|
const programFiles = process.env.ProgramFiles;
|
|
106657
107103
|
const localAppData = process.env.LOCALAPPDATA;
|
|
106658
107104
|
const paths = [];
|
|
106659
107105
|
if (programFiles) {
|
|
106660
|
-
paths.push(
|
|
107106
|
+
paths.push(join85(programFiles, "OpenCode", "OpenCode.exe"));
|
|
106661
107107
|
}
|
|
106662
107108
|
if (localAppData) {
|
|
106663
|
-
paths.push(
|
|
107109
|
+
paths.push(join85(localAppData, "OpenCode", "OpenCode.exe"));
|
|
106664
107110
|
}
|
|
106665
107111
|
return paths;
|
|
106666
107112
|
}
|
|
@@ -106668,8 +107114,8 @@ function getDesktopAppPaths(platform) {
|
|
|
106668
107114
|
return [
|
|
106669
107115
|
"/usr/bin/opencode",
|
|
106670
107116
|
"/usr/lib/opencode/opencode",
|
|
106671
|
-
|
|
106672
|
-
|
|
107117
|
+
join85(home, "Applications", "opencode-desktop-linux-x86_64.AppImage"),
|
|
107118
|
+
join85(home, "Applications", "opencode-desktop-linux-aarch64.AppImage")
|
|
106673
107119
|
];
|
|
106674
107120
|
default:
|
|
106675
107121
|
return [];
|
|
@@ -106681,7 +107127,7 @@ function buildVersionCommand(binaryPath, platform) {
|
|
|
106681
107127
|
}
|
|
106682
107128
|
return [binaryPath, "--version"];
|
|
106683
107129
|
}
|
|
106684
|
-
function findDesktopBinary(platform = process.platform, checkExists =
|
|
107130
|
+
function findDesktopBinary(platform = process.platform, checkExists = existsSync51) {
|
|
106685
107131
|
for (const desktopPath of getDesktopAppPaths(platform)) {
|
|
106686
107132
|
if (checkExists(desktopPath)) {
|
|
106687
107133
|
return { binary: "opencode", path: desktopPath };
|
|
@@ -106689,7 +107135,7 @@ function findDesktopBinary(platform = process.platform, checkExists = existsSync
|
|
|
106689
107135
|
}
|
|
106690
107136
|
return null;
|
|
106691
107137
|
}
|
|
106692
|
-
async function findOpenCodeBinary(platform = process.platform, checkExists =
|
|
107138
|
+
async function findOpenCodeBinary(platform = process.platform, checkExists = existsSync51) {
|
|
106693
107139
|
for (const binary of OPENCODE_BINARIES2) {
|
|
106694
107140
|
const path = bunWhich(binary);
|
|
106695
107141
|
if (path && checkExists(path)) {
|
|
@@ -106701,7 +107147,7 @@ async function findOpenCodeBinary(platform = process.platform, checkExists = exi
|
|
|
106701
107147
|
const candidates = getCommandCandidates2(platform);
|
|
106702
107148
|
for (const entry of pathEnv.split(delimiter).filter(Boolean)) {
|
|
106703
107149
|
for (const command of candidates) {
|
|
106704
|
-
const fullPath =
|
|
107150
|
+
const fullPath = join85(entry, command);
|
|
106705
107151
|
if (checkExists(fullPath) && isExecutable2(fullPath)) {
|
|
106706
107152
|
return { binary: command, path: fullPath };
|
|
106707
107153
|
}
|
|
@@ -106747,12 +107193,12 @@ function compareVersions3(current, minimum) {
|
|
|
106747
107193
|
|
|
106748
107194
|
// packages/omo-opencode/src/cli/doctor/checks/system-plugin.ts
|
|
106749
107195
|
init_shared();
|
|
106750
|
-
import { existsSync as
|
|
107196
|
+
import { existsSync as existsSync52, readFileSync as readFileSync32 } from "fs";
|
|
106751
107197
|
function detectConfigPath() {
|
|
106752
107198
|
const paths = getOpenCodeConfigPaths({ binary: "opencode", version: null });
|
|
106753
|
-
if (
|
|
107199
|
+
if (existsSync52(paths.configJsonc))
|
|
106754
107200
|
return paths.configJsonc;
|
|
106755
|
-
if (
|
|
107201
|
+
if (existsSync52(paths.configJson))
|
|
106756
107202
|
return paths.configJson;
|
|
106757
107203
|
return null;
|
|
106758
107204
|
}
|
|
@@ -106842,36 +107288,36 @@ init_file_utils2();
|
|
|
106842
107288
|
init_checker();
|
|
106843
107289
|
init_auto_update_checker();
|
|
106844
107290
|
init_package_json_locator();
|
|
106845
|
-
import { existsSync as
|
|
107291
|
+
import { existsSync as existsSync53, readFileSync as readFileSync33, readdirSync as readdirSync12 } from "fs";
|
|
106846
107292
|
import { createRequire } from "module";
|
|
106847
|
-
import { homedir as
|
|
106848
|
-
import { join as
|
|
107293
|
+
import { homedir as homedir20 } from "os";
|
|
107294
|
+
import { join as join86 } from "path";
|
|
106849
107295
|
import { fileURLToPath as fileURLToPath6 } from "url";
|
|
106850
107296
|
init_shared();
|
|
106851
107297
|
function getPlatformDefaultCacheDir(platform = process.platform) {
|
|
106852
107298
|
if (platform === "darwin")
|
|
106853
|
-
return
|
|
107299
|
+
return join86(homedir20(), "Library", "Caches");
|
|
106854
107300
|
if (platform === "win32")
|
|
106855
|
-
return process.env.LOCALAPPDATA ??
|
|
106856
|
-
return
|
|
107301
|
+
return process.env.LOCALAPPDATA ?? join86(homedir20(), "AppData", "Local");
|
|
107302
|
+
return join86(homedir20(), ".cache");
|
|
106857
107303
|
}
|
|
106858
107304
|
function resolveOpenCodeCacheDir() {
|
|
106859
107305
|
const xdgCacheHome = process.env.XDG_CACHE_HOME;
|
|
106860
107306
|
if (xdgCacheHome)
|
|
106861
|
-
return
|
|
107307
|
+
return join86(xdgCacheHome, "opencode");
|
|
106862
107308
|
const fromShared = getOpenCodeCacheDir();
|
|
106863
|
-
const platformDefault =
|
|
106864
|
-
if (
|
|
107309
|
+
const platformDefault = join86(getPlatformDefaultCacheDir(), "opencode");
|
|
107310
|
+
if (existsSync53(fromShared) || !existsSync53(platformDefault))
|
|
106865
107311
|
return fromShared;
|
|
106866
107312
|
return platformDefault;
|
|
106867
107313
|
}
|
|
106868
107314
|
function resolveExistingDir(dirPath) {
|
|
106869
|
-
if (!
|
|
107315
|
+
if (!existsSync53(dirPath))
|
|
106870
107316
|
return dirPath;
|
|
106871
107317
|
return resolveSymlink(dirPath);
|
|
106872
107318
|
}
|
|
106873
107319
|
function readPackageJson(filePath) {
|
|
106874
|
-
if (!
|
|
107320
|
+
if (!existsSync53(filePath))
|
|
106875
107321
|
return null;
|
|
106876
107322
|
try {
|
|
106877
107323
|
const content = readFileSync33(filePath, "utf-8");
|
|
@@ -106892,26 +107338,26 @@ function normalizeVersion(value) {
|
|
|
106892
107338
|
function createPackageCandidates(rootDir) {
|
|
106893
107339
|
return ACCEPTED_PACKAGE_NAMES.map((packageName) => ({
|
|
106894
107340
|
packageName,
|
|
106895
|
-
installedPackagePath:
|
|
107341
|
+
installedPackagePath: join86(rootDir, "node_modules", packageName, "package.json")
|
|
106896
107342
|
}));
|
|
106897
107343
|
}
|
|
106898
107344
|
function createTaggedInstallCandidates(rootDir) {
|
|
106899
|
-
const packagesDir =
|
|
106900
|
-
if (!
|
|
107345
|
+
const packagesDir = join86(rootDir, "packages");
|
|
107346
|
+
if (!existsSync53(packagesDir))
|
|
106901
107347
|
return [];
|
|
106902
107348
|
const candidates = [];
|
|
106903
107349
|
for (const entryName of readdirSync12(packagesDir).sort()) {
|
|
106904
107350
|
const packageName = ACCEPTED_PACKAGE_NAMES.find((name) => entryName.startsWith(`${name}@`));
|
|
106905
107351
|
if (packageName === undefined)
|
|
106906
107352
|
continue;
|
|
106907
|
-
const installDir =
|
|
107353
|
+
const installDir = join86(packagesDir, entryName);
|
|
106908
107354
|
candidates.push({
|
|
106909
107355
|
cacheDir: installDir,
|
|
106910
|
-
cachePackagePath:
|
|
107356
|
+
cachePackagePath: join86(installDir, "package.json"),
|
|
106911
107357
|
packageCandidates: [
|
|
106912
107358
|
{
|
|
106913
107359
|
packageName,
|
|
106914
|
-
installedPackagePath:
|
|
107360
|
+
installedPackagePath: join86(installDir, "node_modules", packageName, "package.json")
|
|
106915
107361
|
}
|
|
106916
107362
|
]
|
|
106917
107363
|
});
|
|
@@ -106919,7 +107365,7 @@ function createTaggedInstallCandidates(rootDir) {
|
|
|
106919
107365
|
return candidates;
|
|
106920
107366
|
}
|
|
106921
107367
|
function selectInstalledPackage(candidate) {
|
|
106922
|
-
return candidate.packageCandidates.find((packageCandidate) =>
|
|
107368
|
+
return candidate.packageCandidates.find((packageCandidate) => existsSync53(packageCandidate.installedPackagePath)) ?? candidate.packageCandidates[0];
|
|
106923
107369
|
}
|
|
106924
107370
|
function getExpectedVersion(cachePackage, packageName) {
|
|
106925
107371
|
return normalizeVersion(cachePackage?.dependencies?.[packageName]) ?? normalizeVersion(cachePackage?.dependencies?.[PACKAGE_NAME]);
|
|
@@ -106930,7 +107376,7 @@ function resolveInstalledPackageJsonPath() {
|
|
|
106930
107376
|
for (const packageName of ACCEPTED_PACKAGE_NAMES) {
|
|
106931
107377
|
try {
|
|
106932
107378
|
const packageJsonPath = require2.resolve(`${packageName}/package.json`);
|
|
106933
|
-
if (
|
|
107379
|
+
if (existsSync53(packageJsonPath)) {
|
|
106934
107380
|
return { packageName, packageJsonPath };
|
|
106935
107381
|
}
|
|
106936
107382
|
} catch {
|
|
@@ -106956,22 +107402,22 @@ function getLoadedPluginVersion() {
|
|
|
106956
107402
|
const candidates = [
|
|
106957
107403
|
{
|
|
106958
107404
|
cacheDir: configDir,
|
|
106959
|
-
cachePackagePath:
|
|
107405
|
+
cachePackagePath: join86(configDir, "package.json"),
|
|
106960
107406
|
packageCandidates: createPackageCandidates(configDir)
|
|
106961
107407
|
},
|
|
106962
107408
|
...createTaggedInstallCandidates(configDir),
|
|
106963
107409
|
{
|
|
106964
107410
|
cacheDir,
|
|
106965
|
-
cachePackagePath:
|
|
107411
|
+
cachePackagePath: join86(cacheDir, "package.json"),
|
|
106966
107412
|
packageCandidates: createPackageCandidates(cacheDir)
|
|
106967
107413
|
},
|
|
106968
107414
|
...createTaggedInstallCandidates(cacheDir)
|
|
106969
107415
|
];
|
|
106970
|
-
const selectedCandidate = candidates.find((candidate) => candidate.packageCandidates.some((packageCandidate) =>
|
|
107416
|
+
const selectedCandidate = candidates.find((candidate) => candidate.packageCandidates.some((packageCandidate) => existsSync53(packageCandidate.installedPackagePath))) ?? candidates[0];
|
|
106971
107417
|
const { cacheDir: selectedDir, cachePackagePath } = selectedCandidate;
|
|
106972
107418
|
const selectedPackage = selectInstalledPackage(selectedCandidate);
|
|
106973
107419
|
const candidateInstalledPath = selectedPackage.installedPackagePath;
|
|
106974
|
-
const candidateExists =
|
|
107420
|
+
const candidateExists = existsSync53(candidateInstalledPath);
|
|
106975
107421
|
const resolvedFallback = candidateExists ? null : resolveInstalledPackageJsonPath();
|
|
106976
107422
|
const installedPackagePath = resolvedFallback?.packageJsonPath ?? candidateInstalledPath;
|
|
106977
107423
|
const resolvedPackageName = resolvedFallback?.packageName ?? selectedPackage.packageName;
|
|
@@ -107007,7 +107453,7 @@ var defaultDeps5 = {
|
|
|
107007
107453
|
getLoadedPluginVersion,
|
|
107008
107454
|
getLatestPluginVersion,
|
|
107009
107455
|
getSuggestedInstallTag,
|
|
107010
|
-
configExists:
|
|
107456
|
+
configExists: existsSync54,
|
|
107011
107457
|
readConfigFile: (path) => readFileSync34(path, "utf-8"),
|
|
107012
107458
|
parseConfigContent: (content) => parseJsonc(content)
|
|
107013
107459
|
};
|
|
@@ -107153,23 +107599,23 @@ async function checkSystem(deps = defaultDeps5) {
|
|
|
107153
107599
|
|
|
107154
107600
|
// packages/omo-opencode/src/cli/doctor/checks/model-resolution-cache.ts
|
|
107155
107601
|
init_shared();
|
|
107156
|
-
import { existsSync as
|
|
107157
|
-
import { homedir as
|
|
107158
|
-
import { join as
|
|
107602
|
+
import { existsSync as existsSync55, readFileSync as readFileSync35 } from "fs";
|
|
107603
|
+
import { homedir as homedir21 } from "os";
|
|
107604
|
+
import { join as join87 } from "path";
|
|
107159
107605
|
function getUserConfigDir2() {
|
|
107160
107606
|
const xdgConfig = process.env.XDG_CONFIG_HOME;
|
|
107161
107607
|
if (xdgConfig)
|
|
107162
|
-
return
|
|
107163
|
-
return
|
|
107608
|
+
return join87(xdgConfig, "opencode");
|
|
107609
|
+
return join87(homedir21(), ".config", "opencode");
|
|
107164
107610
|
}
|
|
107165
107611
|
function loadCustomProviderNames() {
|
|
107166
107612
|
const configDir = getUserConfigDir2();
|
|
107167
107613
|
const candidatePaths = [
|
|
107168
|
-
|
|
107169
|
-
|
|
107614
|
+
join87(configDir, "opencode.json"),
|
|
107615
|
+
join87(configDir, "opencode.jsonc")
|
|
107170
107616
|
];
|
|
107171
107617
|
for (const configPath of candidatePaths) {
|
|
107172
|
-
if (!
|
|
107618
|
+
if (!existsSync55(configPath))
|
|
107173
107619
|
continue;
|
|
107174
107620
|
try {
|
|
107175
107621
|
const content = readFileSync35(configPath, "utf-8");
|
|
@@ -107187,9 +107633,9 @@ function loadCustomProviderNames() {
|
|
|
107187
107633
|
return [];
|
|
107188
107634
|
}
|
|
107189
107635
|
function loadAvailableModelsFromCache() {
|
|
107190
|
-
const cacheFile =
|
|
107636
|
+
const cacheFile = join87(getOpenCodeCacheDir(), "models.json");
|
|
107191
107637
|
const customProviders = loadCustomProviderNames();
|
|
107192
|
-
if (!
|
|
107638
|
+
if (!existsSync55(cacheFile)) {
|
|
107193
107639
|
if (customProviders.length > 0) {
|
|
107194
107640
|
return { providers: customProviders, modelCount: 0, cacheExists: true };
|
|
107195
107641
|
}
|
|
@@ -107249,7 +107695,7 @@ function loadOmoConfig2() {
|
|
|
107249
107695
|
|
|
107250
107696
|
// packages/omo-opencode/src/cli/doctor/checks/model-resolution-details.ts
|
|
107251
107697
|
init_shared();
|
|
107252
|
-
import { join as
|
|
107698
|
+
import { join as join88 } from "path";
|
|
107253
107699
|
|
|
107254
107700
|
// packages/omo-opencode/src/cli/doctor/checks/model-resolution-variant.ts
|
|
107255
107701
|
function formatModelWithVariant(model, variant) {
|
|
@@ -107291,7 +107737,7 @@ function formatCapabilityResolutionLabel(mode) {
|
|
|
107291
107737
|
}
|
|
107292
107738
|
function buildModelResolutionDetails(options) {
|
|
107293
107739
|
const details = [];
|
|
107294
|
-
const cacheFile =
|
|
107740
|
+
const cacheFile = join88(getOpenCodeCacheDir(), "models.json");
|
|
107295
107741
|
details.push("\u2550\u2550\u2550 Available Models (from cache) \u2550\u2550\u2550");
|
|
107296
107742
|
details.push("");
|
|
107297
107743
|
if (options.available.cacheExists) {
|
|
@@ -107447,9 +107893,9 @@ async function checkModels() {
|
|
|
107447
107893
|
|
|
107448
107894
|
// packages/omo-opencode/src/cli/doctor/checks/legacy-config-leftovers.ts
|
|
107449
107895
|
init_config_migration();
|
|
107450
|
-
import { posix as
|
|
107896
|
+
import { posix as posix12, win32 as win329 } from "path";
|
|
107451
107897
|
function findLegacyConfigLeftovers(options) {
|
|
107452
|
-
const pathOperations = options.pathOperations ?? (process.platform === "win32" ?
|
|
107898
|
+
const pathOperations = options.pathOperations ?? (process.platform === "win32" ? win329 : posix12);
|
|
107453
107899
|
const paths = createLegacyConfigMigrationPlans({
|
|
107454
107900
|
cwd: options.cwd,
|
|
107455
107901
|
environment: options.environment ?? process.env,
|
|
@@ -107638,8 +108084,8 @@ async function checkBrowserProvider() {
|
|
|
107638
108084
|
init_src4();
|
|
107639
108085
|
init_main();
|
|
107640
108086
|
init_config_migration();
|
|
107641
|
-
import { existsSync as
|
|
107642
|
-
import { join as
|
|
108087
|
+
import { existsSync as existsSync56, readFileSync as readFileSync36 } from "fs";
|
|
108088
|
+
import { join as join89 } from "path";
|
|
107643
108089
|
var CANONICAL_REPLACEMENT = new Map([
|
|
107644
108090
|
["variant", "reasoning"],
|
|
107645
108091
|
["reasoningEffort", "reasoning"],
|
|
@@ -107700,13 +108146,13 @@ function userConfigPaths() {
|
|
|
107700
108146
|
const home = process.env.HOME ?? process.env.USERPROFILE;
|
|
107701
108147
|
if (home === undefined || home.length === 0)
|
|
107702
108148
|
return [];
|
|
107703
|
-
return [
|
|
108149
|
+
return [join89(home, ".omo", "omo.jsonc"), join89(home, ".omo", "omo.json")];
|
|
107704
108150
|
}
|
|
107705
108151
|
async function checkDeprecatedReasoningKeys() {
|
|
107706
108152
|
const issues = [];
|
|
107707
108153
|
const scanned = [];
|
|
107708
108154
|
for (const configPath of userConfigPaths()) {
|
|
107709
|
-
if (!
|
|
108155
|
+
if (!existsSync56(configPath))
|
|
107710
108156
|
continue;
|
|
107711
108157
|
scanned.push(configPath);
|
|
107712
108158
|
const parsed = parse2(readFileSync36(configPath, "utf-8"));
|
|
@@ -107722,12 +108168,12 @@ async function checkDeprecatedReasoningKeys() {
|
|
|
107722
108168
|
}
|
|
107723
108169
|
|
|
107724
108170
|
// packages/omo-opencode/src/cli/doctor/checks/dependencies.ts
|
|
107725
|
-
import { existsSync as
|
|
108171
|
+
import { existsSync as existsSync57 } from "fs";
|
|
107726
108172
|
import { createRequire as createRequire3 } from "module";
|
|
107727
|
-
import { homedir as
|
|
107728
|
-
import { join as
|
|
108173
|
+
import { homedir as homedir23 } from "os";
|
|
108174
|
+
import { join as join94 } from "path";
|
|
107729
108175
|
// packages/comment-checker-core/src/release.ts
|
|
107730
|
-
import { join as
|
|
108176
|
+
import { join as join90 } from "path";
|
|
107731
108177
|
var COMMENT_CHECKER_RELEASE_VERSION = "0.8.0";
|
|
107732
108178
|
function commentCheckerBinaryName(platform) {
|
|
107733
108179
|
return platform === "win32" ? "comment-checker.exe" : "comment-checker";
|
|
@@ -107735,26 +108181,26 @@ function commentCheckerBinaryName(platform) {
|
|
|
107735
108181
|
function commentCheckerCacheDir(input) {
|
|
107736
108182
|
if (input.platform === "win32") {
|
|
107737
108183
|
const localAppData = input.env.LOCALAPPDATA || input.env.APPDATA;
|
|
107738
|
-
const base = localAppData ||
|
|
107739
|
-
return
|
|
108184
|
+
const base = localAppData || join90(input.homedir, "AppData", "Local");
|
|
108185
|
+
return join90(base, input.cacheDirName, "bin");
|
|
107740
108186
|
}
|
|
107741
|
-
const base = input.env.XDG_CACHE_HOME ||
|
|
107742
|
-
return
|
|
108187
|
+
const base = input.env.XDG_CACHE_HOME || join90(input.homedir, ".cache");
|
|
108188
|
+
return join90(base, input.cacheDirName, "bin");
|
|
107743
108189
|
}
|
|
107744
108190
|
// packages/comment-checker-core/src/cached-release.ts
|
|
107745
108191
|
import { readFileSync as readFileSync37, writeFileSync as writeFileSync12 } from "fs";
|
|
107746
|
-
import { join as
|
|
108192
|
+
import { join as join91 } from "path";
|
|
107747
108193
|
var COMMENT_CHECKER_VERSION_MARKER = "comment-checker.version";
|
|
107748
108194
|
function isCachedCommentCheckerCurrent(cacheDir, readFile = (path) => readFileSync37(path, "utf-8")) {
|
|
107749
108195
|
try {
|
|
107750
|
-
return readFile(
|
|
108196
|
+
return readFile(join91(cacheDir, COMMENT_CHECKER_VERSION_MARKER)).trim() === COMMENT_CHECKER_RELEASE_VERSION;
|
|
107751
108197
|
} catch {
|
|
107752
108198
|
return false;
|
|
107753
108199
|
}
|
|
107754
108200
|
}
|
|
107755
108201
|
// packages/comment-checker-core/src/package-binary.ts
|
|
107756
108202
|
import { createRequire as createRequire2 } from "module";
|
|
107757
|
-
import { dirname as
|
|
108203
|
+
import { dirname as dirname36, join as join92 } from "path";
|
|
107758
108204
|
var COMMENT_CHECKER_PACKAGE_NAME = "@code-yeongyu/comment-checker";
|
|
107759
108205
|
function isModuleResolutionMiss(error) {
|
|
107760
108206
|
return error instanceof Error || typeof error === "object" && error !== null && "name" in error && error.name === "ResolveMessage";
|
|
@@ -107762,18 +108208,18 @@ function isModuleResolutionMiss(error) {
|
|
|
107762
108208
|
function findCommentCheckerPackageBinary(input) {
|
|
107763
108209
|
const packageName = input.packageName ?? COMMENT_CHECKER_PACKAGE_NAME;
|
|
107764
108210
|
const platformKey = `${input.platform ?? process.platform}-${input.arch ?? process.arch}`;
|
|
107765
|
-
const packageDir =
|
|
108211
|
+
const packageDir = dirname36(input.packageJsonPath);
|
|
107766
108212
|
const candidates = [
|
|
107767
108213
|
resolvePlatformPackageBinary(input.packageJsonPath, `${packageName}-${platformKey}`, input.binaryName),
|
|
107768
|
-
|
|
107769
|
-
|
|
108214
|
+
join92(packageDir, "vendor", platformKey, input.binaryName),
|
|
108215
|
+
join92(packageDir, "bin", input.binaryName)
|
|
107770
108216
|
];
|
|
107771
108217
|
return candidates.find((candidate) => candidate !== null && input.existsSync(candidate)) ?? null;
|
|
107772
108218
|
}
|
|
107773
108219
|
function resolvePlatformPackageBinary(packageJsonPath, platformPackageName, binaryName) {
|
|
107774
108220
|
try {
|
|
107775
108221
|
const manifestPath = createRequire2(packageJsonPath).resolve(`${platformPackageName}/package.json`);
|
|
107776
|
-
return
|
|
108222
|
+
return join92(dirname36(manifestPath), "bin", binaryName);
|
|
107777
108223
|
} catch (error) {
|
|
107778
108224
|
if (isModuleResolutionMiss(error))
|
|
107779
108225
|
return null;
|
|
@@ -107784,18 +108230,18 @@ function resolvePlatformPackageBinary(packageJsonPath, platformPackageName, bina
|
|
|
107784
108230
|
init_src();
|
|
107785
108231
|
|
|
107786
108232
|
// packages/omo-opencode/src/hooks/comment-checker/downloader.ts
|
|
107787
|
-
import { join as
|
|
107788
|
-
import { homedir as
|
|
108233
|
+
import { join as join93 } from "path";
|
|
108234
|
+
import { homedir as homedir22, tmpdir as tmpdir4 } from "os";
|
|
107789
108235
|
init_binary_downloader();
|
|
107790
108236
|
init_logger2();
|
|
107791
108237
|
init_plugin_identity();
|
|
107792
108238
|
var DEBUG = process.env.COMMENT_CHECKER_DEBUG === "1";
|
|
107793
|
-
var DEBUG_FILE =
|
|
108239
|
+
var DEBUG_FILE = join93(tmpdir4(), "comment-checker-debug.log");
|
|
107794
108240
|
function getCacheDir2() {
|
|
107795
108241
|
return commentCheckerCacheDir({
|
|
107796
108242
|
platform: process.platform,
|
|
107797
108243
|
env: process.env,
|
|
107798
|
-
homedir:
|
|
108244
|
+
homedir: homedir22(),
|
|
107799
108245
|
cacheDirName: CACHE_DIR_NAME
|
|
107800
108246
|
});
|
|
107801
108247
|
}
|
|
@@ -107849,7 +108295,7 @@ async function getBinaryVersion(binary) {
|
|
|
107849
108295
|
}
|
|
107850
108296
|
}
|
|
107851
108297
|
async function checkAstGrepCli() {
|
|
107852
|
-
const runtimeDir = astGrepRuntimeDir(
|
|
108298
|
+
const runtimeDir = astGrepRuntimeDir(join94(homedir23(), ".omo"));
|
|
107853
108299
|
const sgPath = findSgBinarySync({ runtimeDir });
|
|
107854
108300
|
if (sgPath === null) {
|
|
107855
108301
|
return {
|
|
@@ -107877,8 +108323,8 @@ function resolveCommentCheckerPackageJson() {
|
|
|
107877
108323
|
function findCommentCheckerPackageBinary2(baseDirOverride, resolvePackageJsonPath = resolveCommentCheckerPackageJson) {
|
|
107878
108324
|
const binaryName = process.platform === "win32" ? "comment-checker.exe" : "comment-checker";
|
|
107879
108325
|
try {
|
|
107880
|
-
const packageJsonPath = baseDirOverride === undefined ? resolvePackageJsonPath() :
|
|
107881
|
-
return findCommentCheckerPackageBinary({ packageJsonPath, binaryName, existsSync:
|
|
108326
|
+
const packageJsonPath = baseDirOverride === undefined ? resolvePackageJsonPath() : join94(baseDirOverride, "package.json");
|
|
108327
|
+
return findCommentCheckerPackageBinary({ packageJsonPath, binaryName, existsSync: existsSync57 });
|
|
107882
108328
|
} catch (error) {
|
|
107883
108329
|
if (!(error instanceof Error) && !isModuleResolutionFailure(error))
|
|
107884
108330
|
throw error;
|
|
@@ -108023,8 +108469,8 @@ async function getGhCliInfo(dependencies = {}) {
|
|
|
108023
108469
|
// packages/omo-opencode/src/mcp/lsp.ts
|
|
108024
108470
|
init_zod();
|
|
108025
108471
|
init_opencode_config_dir();
|
|
108026
|
-
import { existsSync as
|
|
108027
|
-
import { delimiter as delimiter3, dirname as
|
|
108472
|
+
import { existsSync as existsSync58, readFileSync as readFileSync38 } from "fs";
|
|
108473
|
+
import { delimiter as delimiter3, dirname as dirname38, resolve as resolve26 } from "path";
|
|
108028
108474
|
import { fileURLToPath as fileURLToPath7 } from "url";
|
|
108029
108475
|
|
|
108030
108476
|
// packages/omo-opencode/src/mcp/cli-suffix.ts
|
|
@@ -108037,7 +108483,7 @@ function hasCliSuffix(candidatePath, suffix) {
|
|
|
108037
108483
|
|
|
108038
108484
|
// packages/omo-opencode/src/mcp/runtime-executable.ts
|
|
108039
108485
|
init_bun_which_shim();
|
|
108040
|
-
import { basename as
|
|
108486
|
+
import { basename as basename12 } from "path";
|
|
108041
108487
|
var NODE_EXECUTABLE_NAMES = new Set(["node", "node.exe"]);
|
|
108042
108488
|
function isUnsafeCommandName2(commandName) {
|
|
108043
108489
|
if (commandName.length === 0)
|
|
@@ -108053,7 +108499,7 @@ function isUnsafeCommandName2(commandName) {
|
|
|
108053
108499
|
return false;
|
|
108054
108500
|
}
|
|
108055
108501
|
function isNodeExecPath(execPath) {
|
|
108056
|
-
return NODE_EXECUTABLE_NAMES.has(
|
|
108502
|
+
return NODE_EXECUTABLE_NAMES.has(basename12(execPath).toLowerCase());
|
|
108057
108503
|
}
|
|
108058
108504
|
function resolveRuntimeExecutable(commandName, options = {}) {
|
|
108059
108505
|
if (isUnsafeCommandName2(commandName)) {
|
|
@@ -108071,7 +108517,7 @@ function resolveRuntimeExecutable(commandName, options = {}) {
|
|
|
108071
108517
|
}
|
|
108072
108518
|
|
|
108073
108519
|
// packages/omo-opencode/src/mcp/shared/ancestor-cli-resolver.ts
|
|
108074
|
-
import { resolve as
|
|
108520
|
+
import { resolve as resolve25 } from "path";
|
|
108075
108521
|
function resolveJavaScriptRuntime(resolveExecutable) {
|
|
108076
108522
|
const node = resolveExecutable("node");
|
|
108077
108523
|
return node.available ? node : resolveExecutable("bun");
|
|
@@ -108079,9 +108525,9 @@ function resolveJavaScriptRuntime(resolveExecutable) {
|
|
|
108079
108525
|
function createAncestorCliCandidates(options) {
|
|
108080
108526
|
const candidates = [];
|
|
108081
108527
|
const seenPaths = new Set;
|
|
108082
|
-
let currentDirectory =
|
|
108528
|
+
let currentDirectory = resolve25(options.startDirectory);
|
|
108083
108529
|
while (true) {
|
|
108084
|
-
const distCliPath =
|
|
108530
|
+
const distCliPath = resolve25(currentDirectory, options.packageRel, options.distCliRel);
|
|
108085
108531
|
if (!seenPaths.has(distCliPath)) {
|
|
108086
108532
|
const runtime = resolveJavaScriptRuntime(options.resolveExecutable);
|
|
108087
108533
|
seenPaths.add(distCliPath);
|
|
@@ -108093,7 +108539,7 @@ function createAncestorCliCandidates(options) {
|
|
|
108093
108539
|
runtimeAvailable: runtime.available
|
|
108094
108540
|
});
|
|
108095
108541
|
}
|
|
108096
|
-
const sourceCliPath =
|
|
108542
|
+
const sourceCliPath = resolve25(currentDirectory, options.packageRel, options.sourceCliRel);
|
|
108097
108543
|
if (!seenPaths.has(sourceCliPath)) {
|
|
108098
108544
|
const runtime = options.resolveExecutable("bun");
|
|
108099
108545
|
const sourceCandidateAvailable = options.isSourceCandidateAvailable?.({
|
|
@@ -108110,7 +108556,7 @@ function createAncestorCliCandidates(options) {
|
|
|
108110
108556
|
runtimeAvailable: runtime.available
|
|
108111
108557
|
});
|
|
108112
108558
|
}
|
|
108113
|
-
const parentDirectory =
|
|
108559
|
+
const parentDirectory = resolve25(currentDirectory, "..");
|
|
108114
108560
|
if (parentDirectory === currentDirectory)
|
|
108115
108561
|
return candidates;
|
|
108116
108562
|
currentDirectory = parentDirectory;
|
|
@@ -108155,7 +108601,7 @@ var LSP_BOOTSTRAP_SCRIPT = [
|
|
|
108155
108601
|
].join(";");
|
|
108156
108602
|
function getModuleDirectory(moduleUrl) {
|
|
108157
108603
|
try {
|
|
108158
|
-
return
|
|
108604
|
+
return dirname38(fileURLToPath7(moduleUrl));
|
|
108159
108605
|
} catch (error) {
|
|
108160
108606
|
if (!(error instanceof Error))
|
|
108161
108607
|
throw error;
|
|
@@ -108163,11 +108609,11 @@ function getModuleDirectory(moduleUrl) {
|
|
|
108163
108609
|
}
|
|
108164
108610
|
}
|
|
108165
108611
|
function findBootstrapRoot(candidates, pathExists) {
|
|
108166
|
-
return candidates.find((candidate) => pathExists(
|
|
108612
|
+
return candidates.find((candidate) => pathExists(resolve26(candidate.root, "package.json")))?.root ?? process.cwd();
|
|
108167
108613
|
}
|
|
108168
108614
|
function readDaemonPackageVersion(root) {
|
|
108169
108615
|
try {
|
|
108170
|
-
const packageJson = JSON.parse(readFileSync38(
|
|
108616
|
+
const packageJson = JSON.parse(readFileSync38(resolve26(root, PACKAGE_REL, "package.json"), "utf-8"));
|
|
108171
108617
|
return DaemonPackageSchema.parse(packageJson).version;
|
|
108172
108618
|
} catch (error) {
|
|
108173
108619
|
if (!(error instanceof Error))
|
|
@@ -108179,17 +108625,17 @@ function createBootstrapCandidate(root, pathExists, resolveExecutable) {
|
|
|
108179
108625
|
const runtime = resolveJavaScriptRuntime(resolveExecutable);
|
|
108180
108626
|
const bun = resolveExecutable("bun");
|
|
108181
108627
|
const npm = resolveExecutable("npm");
|
|
108182
|
-
const packageManifestPath =
|
|
108628
|
+
const packageManifestPath = resolve26(root, PACKAGE_REL, "package.json");
|
|
108183
108629
|
return {
|
|
108184
108630
|
command: [runtime.command, "-e", LSP_BOOTSTRAP_SCRIPT, root, npm.command, bun.command],
|
|
108185
108631
|
root,
|
|
108186
|
-
path:
|
|
108632
|
+
path: resolve26(root, PACKAGE_REL, DIST_CLI_REL),
|
|
108187
108633
|
exists: runtime.available && npm.available && pathExists(packageManifestPath),
|
|
108188
108634
|
runtimeAvailable: runtime.available
|
|
108189
108635
|
};
|
|
108190
108636
|
}
|
|
108191
108637
|
function resolveLspCommand(options = {}) {
|
|
108192
|
-
const pathExists = options.exists ??
|
|
108638
|
+
const pathExists = options.exists ?? existsSync58;
|
|
108193
108639
|
const resolveExecutable = options.resolveExecutable ?? resolveRuntimeExecutable;
|
|
108194
108640
|
const moduleDirectory = getModuleDirectory(options.moduleUrl ?? import.meta.url);
|
|
108195
108641
|
const candidates = moduleDirectory ? createAncestorCliCandidates({
|
|
@@ -108199,7 +108645,7 @@ function resolveLspCommand(options = {}) {
|
|
|
108199
108645
|
sourceCliRel: SOURCE_CLI_REL,
|
|
108200
108646
|
pathExists,
|
|
108201
108647
|
resolveExecutable,
|
|
108202
|
-
isSourceCandidateAvailable: ({ root }) => pathExists(
|
|
108648
|
+
isSourceCandidateAvailable: ({ root }) => pathExists(resolve26(root, LSP_TOOLS_PACKAGE_REL, DIST_CLI_REL)) && readDaemonPackageVersion(root) !== null
|
|
108203
108649
|
}) : [];
|
|
108204
108650
|
const distCandidate = candidates.find((candidate) => hasCliSuffix(candidate.path, DIST_CLI_REL) && candidate.exists);
|
|
108205
108651
|
if (distCandidate) {
|
|
@@ -108213,7 +108659,7 @@ function resolveLspCommand(options = {}) {
|
|
|
108213
108659
|
}
|
|
108214
108660
|
function createLspMcpConfig(options = {}) {
|
|
108215
108661
|
const resolvedCommand = resolveLspCommand(options);
|
|
108216
|
-
const cwd =
|
|
108662
|
+
const cwd = resolve26(options.cwd ?? process.cwd());
|
|
108217
108663
|
const configDir = getOpenCodeConfigDir({ binary: "opencode" });
|
|
108218
108664
|
const sourceVersion = hasCliSuffix(resolvedCommand.path, SOURCE_CLI_REL) ? readDaemonPackageVersion(resolvedCommand.root) : null;
|
|
108219
108665
|
return {
|
|
@@ -108223,9 +108669,9 @@ function createLspMcpConfig(options = {}) {
|
|
|
108223
108669
|
cwd,
|
|
108224
108670
|
environment: {
|
|
108225
108671
|
LSP_TOOLS_MCP_CWD: cwd,
|
|
108226
|
-
LSP_TOOLS_MCP_PROJECT_CONFIG: PROJECT_LSP_CONFIGS.map((configPath) =>
|
|
108227
|
-
LSP_TOOLS_MCP_USER_CONFIG:
|
|
108228
|
-
LSP_TOOLS_MCP_INSTALL_DECISIONS:
|
|
108672
|
+
LSP_TOOLS_MCP_PROJECT_CONFIG: PROJECT_LSP_CONFIGS.map((configPath) => resolve26(cwd, configPath)).join(delimiter3),
|
|
108673
|
+
LSP_TOOLS_MCP_USER_CONFIG: resolve26(configDir, "lsp.json"),
|
|
108674
|
+
LSP_TOOLS_MCP_INSTALL_DECISIONS: resolve26(configDir, "lsp-install-decisions.json"),
|
|
108229
108675
|
...sourceVersion ? {
|
|
108230
108676
|
[OMO_LSP_DAEMON_CLI]: resolvedCommand.path,
|
|
108231
108677
|
[OMO_LSP_DAEMON_VERSION]: sourceVersion
|
|
@@ -108250,21 +108696,21 @@ function getInstalledLspServers(options = {}) {
|
|
|
108250
108696
|
|
|
108251
108697
|
// packages/omo-opencode/src/cli/doctor/checks/tools-mcp.ts
|
|
108252
108698
|
init_shared();
|
|
108253
|
-
import { existsSync as
|
|
108254
|
-
import { homedir as
|
|
108255
|
-
import { join as
|
|
108699
|
+
import { existsSync as existsSync59, readFileSync as readFileSync39 } from "fs";
|
|
108700
|
+
import { homedir as homedir24 } from "os";
|
|
108701
|
+
import { join as join95 } from "path";
|
|
108256
108702
|
var BUILTIN_MCP_SERVERS = ["websearch", "context7", "grep_app", "lsp"];
|
|
108257
108703
|
function getMcpConfigPaths() {
|
|
108258
108704
|
return [
|
|
108259
|
-
|
|
108260
|
-
|
|
108261
|
-
|
|
108705
|
+
join95(homedir24(), ".claude", ".mcp.json"),
|
|
108706
|
+
join95(process.cwd(), ".mcp.json"),
|
|
108707
|
+
join95(process.cwd(), ".claude", ".mcp.json")
|
|
108262
108708
|
];
|
|
108263
108709
|
}
|
|
108264
108710
|
function loadUserMcpConfig() {
|
|
108265
108711
|
const servers = {};
|
|
108266
108712
|
for (const configPath of getMcpConfigPaths()) {
|
|
108267
|
-
if (!
|
|
108713
|
+
if (!existsSync59(configPath))
|
|
108268
108714
|
continue;
|
|
108269
108715
|
try {
|
|
108270
108716
|
const content = readFileSync39(configPath, "utf-8");
|
|
@@ -108402,12 +108848,12 @@ async function checkTools() {
|
|
|
108402
108848
|
|
|
108403
108849
|
// packages/omo-opencode/src/cli/doctor/checks/telemetry.ts
|
|
108404
108850
|
init_src5();
|
|
108405
|
-
import { existsSync as
|
|
108851
|
+
import { existsSync as existsSync60, readFileSync as readFileSync40 } from "fs";
|
|
108406
108852
|
function isTelemetryState(value) {
|
|
108407
108853
|
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
108408
108854
|
}
|
|
108409
108855
|
function readLastActiveDay(stateFilePath) {
|
|
108410
|
-
if (!
|
|
108856
|
+
if (!existsSync60(stateFilePath)) {
|
|
108411
108857
|
return "never";
|
|
108412
108858
|
}
|
|
108413
108859
|
let parsed;
|
|
@@ -108470,17 +108916,17 @@ async function probeBinary(cmd, args, spawnImpl) {
|
|
|
108470
108916
|
}
|
|
108471
108917
|
|
|
108472
108918
|
// packages/team-core/src/team-registry/paths.ts
|
|
108473
|
-
import { homedir as
|
|
108919
|
+
import { homedir as homedir25 } from "os";
|
|
108474
108920
|
import path13 from "path";
|
|
108475
108921
|
function resolveBaseDir(config) {
|
|
108476
|
-
return expandHomeDirectory(config.base_dir ?? path13.join(
|
|
108922
|
+
return expandHomeDirectory(config.base_dir ?? path13.join(homedir25(), ".omo"));
|
|
108477
108923
|
}
|
|
108478
108924
|
function expandHomeDirectory(directoryPath) {
|
|
108479
108925
|
if (directoryPath === "~") {
|
|
108480
|
-
return
|
|
108926
|
+
return homedir25();
|
|
108481
108927
|
}
|
|
108482
108928
|
if (directoryPath.startsWith("~/") || directoryPath.startsWith("~\\")) {
|
|
108483
|
-
return path13.join(
|
|
108929
|
+
return path13.join(homedir25(), directoryPath.slice(2));
|
|
108484
108930
|
}
|
|
108485
108931
|
return directoryPath;
|
|
108486
108932
|
}
|
|
@@ -108537,10 +108983,10 @@ async function pathExists2(dir) {
|
|
|
108537
108983
|
|
|
108538
108984
|
// packages/omo-opencode/src/cli/doctor/checks/codex.ts
|
|
108539
108985
|
init_src();
|
|
108540
|
-
import { existsSync as
|
|
108986
|
+
import { existsSync as existsSync61 } from "fs";
|
|
108541
108987
|
import { lstat as lstat16, readdir as readdir14, readFile as readFile30 } from "fs/promises";
|
|
108542
|
-
import { homedir as
|
|
108543
|
-
import { basename as
|
|
108988
|
+
import { homedir as homedir26 } from "os";
|
|
108989
|
+
import { basename as basename13, join as join96, resolve as resolve27 } from "path";
|
|
108544
108990
|
// packages/omo-opencode/package.json
|
|
108545
108991
|
var package_default3 = {
|
|
108546
108992
|
name: "@oh-my-opencode/omo-opencode",
|
|
@@ -108599,7 +109045,7 @@ var package_default3 = {
|
|
|
108599
109045
|
|
|
108600
109046
|
// packages/omo-opencode/src/cli/doctor/checks/codex.ts
|
|
108601
109047
|
var MARKETPLACE_NAME = "sisyphuslabs";
|
|
108602
|
-
var
|
|
109048
|
+
var PLUGIN_NAME3 = "omo";
|
|
108603
109049
|
var COMPANION_PLUGIN_KEY = "codex@openai-codex";
|
|
108604
109050
|
var DEFAULT_PLUGIN_VERSION = "0.1.0";
|
|
108605
109051
|
var COMPANION_LIFECYCLE_EVENTS = new Set(["session_start", "stop"]);
|
|
@@ -108614,20 +109060,20 @@ var CODEX_BIN_NAMES = [
|
|
|
108614
109060
|
"omo-git-bash-hook"
|
|
108615
109061
|
];
|
|
108616
109062
|
async function gatherCodexSummary(deps = {}) {
|
|
108617
|
-
const codexHome =
|
|
109063
|
+
const codexHome = resolve27(deps.codexHome ?? process.env.CODEX_HOME ?? join96(homedir26(), ".codex"));
|
|
108618
109064
|
const binDir = resolveCodexInstallerBinDir({ binDir: deps.binDir, codexHome, env: process.env });
|
|
108619
109065
|
const detection = await (deps.detectCodexInstallation ?? detectCodexInstallation)();
|
|
108620
109066
|
const pluginRoot = await resolveInstalledPluginRoot(codexHome);
|
|
108621
|
-
const manifest = pluginRoot === null ? null : await readJson(
|
|
108622
|
-
const installSnapshot = pluginRoot === null ? null : await readJson(
|
|
108623
|
-
const configPath =
|
|
109067
|
+
const manifest = pluginRoot === null ? null : await readJson(join96(pluginRoot, ".codex-plugin", "plugin.json"));
|
|
109068
|
+
const installSnapshot = pluginRoot === null ? null : await readJson(join96(pluginRoot, "lazycodex-install.json"));
|
|
109069
|
+
const configPath = join96(codexHome, "config.toml");
|
|
108624
109070
|
const pluginVersion = stringField(manifest, "version");
|
|
108625
109071
|
return {
|
|
108626
109072
|
codexPath: detection.found && "path" in detection ? detection.path : null,
|
|
108627
109073
|
codexSource: detection.found ? detection.source : null,
|
|
108628
109074
|
codexAppId: detection.found && "appId" in detection ? detection.appId : null,
|
|
108629
109075
|
marketplaceName: MARKETPLACE_NAME,
|
|
108630
|
-
pluginName:
|
|
109076
|
+
pluginName: PLUGIN_NAME3,
|
|
108631
109077
|
pluginVersion,
|
|
108632
109078
|
pluginVersionStamped: pluginVersion !== null && pluginVersion !== DEFAULT_PLUGIN_VERSION,
|
|
108633
109079
|
installerVersion: deps.installerVersion ?? package_default3.version,
|
|
@@ -108677,7 +109123,7 @@ function buildCodexIssues(summary) {
|
|
|
108677
109123
|
if (summary.pluginRoot === null) {
|
|
108678
109124
|
issues.push({
|
|
108679
109125
|
title: "OMO Codex plugin is not installed",
|
|
108680
|
-
description: `Expected cached plugin at ${
|
|
109126
|
+
description: `Expected cached plugin at ${join96("plugins", "cache", MARKETPLACE_NAME, PLUGIN_NAME3, DEFAULT_PLUGIN_VERSION)} under CODEX_HOME.`,
|
|
108681
109127
|
fix: "Run: npx lazycodex-ai install",
|
|
108682
109128
|
severity: "error",
|
|
108683
109129
|
affects: ["plugin loading"]
|
|
@@ -108742,15 +109188,15 @@ function buildCodexIssues(summary) {
|
|
|
108742
109188
|
return issues;
|
|
108743
109189
|
}
|
|
108744
109190
|
async function resolveInstalledPluginRoot(codexHome) {
|
|
108745
|
-
const pluginRoot =
|
|
108746
|
-
if (!
|
|
109191
|
+
const pluginRoot = join96(codexHome, "plugins", "cache", MARKETPLACE_NAME, PLUGIN_NAME3);
|
|
109192
|
+
if (!existsSync61(pluginRoot))
|
|
108747
109193
|
return null;
|
|
108748
109194
|
const versions = await readdir14(pluginRoot, { withFileTypes: true });
|
|
108749
109195
|
const candidates = versions.filter((entry) => entry.isDirectory()).map((entry) => entry.name).sort(compareVersionsDescending);
|
|
108750
|
-
return candidates.length === 0 ? null :
|
|
109196
|
+
return candidates.length === 0 ? null : join96(pluginRoot, candidates[0] ?? DEFAULT_PLUGIN_VERSION);
|
|
108751
109197
|
}
|
|
108752
109198
|
async function readCodexConfigSummary(configPath) {
|
|
108753
|
-
if (!
|
|
109199
|
+
if (!existsSync61(configPath)) {
|
|
108754
109200
|
return {
|
|
108755
109201
|
exists: false,
|
|
108756
109202
|
marketplaceConfigured: false,
|
|
@@ -108775,17 +109221,17 @@ async function readCodexConfigSummary(configPath) {
|
|
|
108775
109221
|
async function readLinkedBins(binDir) {
|
|
108776
109222
|
const linked = [];
|
|
108777
109223
|
for (const name of CODEX_BIN_NAMES) {
|
|
108778
|
-
if (await pathExists3(
|
|
109224
|
+
if (await pathExists3(join96(binDir, process.platform === "win32" ? `${name}.cmd` : name)))
|
|
108779
109225
|
linked.push(name);
|
|
108780
109226
|
}
|
|
108781
109227
|
return linked;
|
|
108782
109228
|
}
|
|
108783
109229
|
async function readLinkedAgents(codexHome) {
|
|
108784
|
-
const agentsDir =
|
|
108785
|
-
if (!
|
|
109230
|
+
const agentsDir = join96(codexHome, "agents");
|
|
109231
|
+
if (!existsSync61(agentsDir))
|
|
108786
109232
|
return [];
|
|
108787
109233
|
const entries = await readdir14(agentsDir, { withFileTypes: true });
|
|
108788
|
-
return entries.filter((entry) => entry.isFile() || entry.isSymbolicLink()).map((entry) =>
|
|
109234
|
+
return entries.filter((entry) => entry.isFile() || entry.isSymbolicLink()).map((entry) => basename13(entry.name, ".toml")).sort();
|
|
108789
109235
|
}
|
|
108790
109236
|
async function readJson(path) {
|
|
108791
109237
|
try {
|
|
@@ -108914,24 +109360,24 @@ function resolveLatestVersion(input) {
|
|
|
108914
109360
|
// packages/omo-opencode/src/cli/doctor/checks/codex-components.ts
|
|
108915
109361
|
init_src();
|
|
108916
109362
|
import { readdir as readdir15, readFile as readFile31, stat as stat7 } from "fs/promises";
|
|
108917
|
-
import { homedir as
|
|
108918
|
-
import { dirname as
|
|
109363
|
+
import { homedir as homedir27 } from "os";
|
|
109364
|
+
import { dirname as dirname39, isAbsolute as isAbsolute15, join as join97, relative as relative9, resolve as resolve28, sep as sep10 } from "path";
|
|
108919
109365
|
var CODEX_COMPONENTS_CHECK_ID = "codex-components";
|
|
108920
109366
|
var CODEX_COMPONENTS_CHECK_NAME = "codex-components";
|
|
108921
109367
|
var PLUGIN_DATA_DIR_NAME = "omo-sisyphuslabs";
|
|
108922
|
-
var BOOTSTRAP_PENDING_MESSAGE = "bootstrap pending
|
|
109368
|
+
var BOOTSTRAP_PENDING_MESSAGE = "bootstrap pending: start a Codex session";
|
|
108923
109369
|
var REINSTALL_FIX = "Reinstall: npx lazycodex-ai install (or upgrade: codex plugin marketplace upgrade sisyphuslabs)";
|
|
108924
109370
|
async function checkCodexComponents(deps = {}) {
|
|
108925
109371
|
const env = deps.env ?? process.env;
|
|
108926
109372
|
const platform = deps.platform ?? process.platform;
|
|
108927
109373
|
const arch = deps.arch ?? process.arch;
|
|
108928
|
-
const codexHome =
|
|
109374
|
+
const codexHome = resolve28(deps.codexHome ?? env["CODEX_HOME"] ?? join97(homedir27(), ".codex"));
|
|
108929
109375
|
const summary = await gatherCodexSummary({ ...deps, codexHome });
|
|
108930
109376
|
if (summary.pluginRoot === null) {
|
|
108931
109377
|
return {
|
|
108932
109378
|
name: CODEX_COMPONENTS_CHECK_NAME,
|
|
108933
109379
|
status: "skip",
|
|
108934
|
-
message: "OMO Codex plugin is not installed
|
|
109380
|
+
message: "OMO Codex plugin is not installed: skipping component checks",
|
|
108935
109381
|
details: [`plugin root: not installed under ${codexHome}`],
|
|
108936
109382
|
issues: []
|
|
108937
109383
|
};
|
|
@@ -108950,7 +109396,7 @@ async function checkCodexComponents(deps = {}) {
|
|
|
108950
109396
|
});
|
|
108951
109397
|
}
|
|
108952
109398
|
const runtimeSgDir = runtimeSgDirectory(codexHome, platform, arch);
|
|
108953
|
-
const runtimeSgPath =
|
|
109399
|
+
const runtimeSgPath = join97(runtimeSgDir, sgBinaryName(platform));
|
|
108954
109400
|
const sg = findSgBinarySync({
|
|
108955
109401
|
arch,
|
|
108956
109402
|
env,
|
|
@@ -108989,8 +109435,8 @@ async function auditBundleTargets(pluginRoot) {
|
|
|
108989
109435
|
const manifest = await readJson2(manifestPath);
|
|
108990
109436
|
if (manifest === null || !isRecord18(manifest["mcpServers"]))
|
|
108991
109437
|
continue;
|
|
108992
|
-
const manifestRoot =
|
|
108993
|
-
const isRootManifest =
|
|
109438
|
+
const manifestRoot = dirname39(manifestPath);
|
|
109439
|
+
const isRootManifest = resolve28(manifestRoot) === resolve28(pluginRoot);
|
|
108994
109440
|
for (const server of Object.values(manifest["mcpServers"])) {
|
|
108995
109441
|
if (!isRecord18(server) || !Array.isArray(server["args"]))
|
|
108996
109442
|
continue;
|
|
@@ -109010,7 +109456,7 @@ async function auditBundleTargets(pluginRoot) {
|
|
|
109010
109456
|
continue;
|
|
109011
109457
|
const commands = [];
|
|
109012
109458
|
collectHookCommands(manifest, commands);
|
|
109013
|
-
const hookPluginRoot =
|
|
109459
|
+
const hookPluginRoot = dirname39(dirname39(hookManifestPath));
|
|
109014
109460
|
for (const command of commands) {
|
|
109015
109461
|
for (const relativePath of extractPluginRootPaths(command)) {
|
|
109016
109462
|
referencedCount += 1;
|
|
@@ -109032,9 +109478,9 @@ function recordBrokenTarget(broken, classified, origin) {
|
|
|
109032
109478
|
broken.push(entry);
|
|
109033
109479
|
}
|
|
109034
109480
|
async function classifyBundleTarget(bundleRoot, baseRoot, relativePath, allowEscape) {
|
|
109035
|
-
const targetPath =
|
|
109036
|
-
const bundleRootPath =
|
|
109037
|
-
const bundleRootPrefix = bundleRootPath.endsWith(
|
|
109481
|
+
const targetPath = resolve28(baseRoot, relativePath);
|
|
109482
|
+
const bundleRootPath = resolve28(bundleRoot);
|
|
109483
|
+
const bundleRootPrefix = bundleRootPath.endsWith(sep10) ? bundleRootPath : `${bundleRootPath}${sep10}`;
|
|
109038
109484
|
if (targetPath !== bundleRootPath && !targetPath.startsWith(bundleRootPrefix)) {
|
|
109039
109485
|
if (allowEscape)
|
|
109040
109486
|
return null;
|
|
@@ -109049,7 +109495,7 @@ async function classifyBundleTarget(bundleRoot, baseRoot, relativePath, allowEsc
|
|
|
109049
109495
|
}
|
|
109050
109496
|
async function findHookManifestPaths(root) {
|
|
109051
109497
|
const paths = await findManifestPaths(root, "hooks.json");
|
|
109052
|
-
return paths.filter((path) =>
|
|
109498
|
+
return paths.filter((path) => dirname39(path).endsWith(`${sep10}hooks`));
|
|
109053
109499
|
}
|
|
109054
109500
|
async function findManifestPaths(root, manifestName) {
|
|
109055
109501
|
let entries;
|
|
@@ -109062,7 +109508,7 @@ async function findManifestPaths(root, manifestName) {
|
|
|
109062
109508
|
for (const entry of entries) {
|
|
109063
109509
|
if (entry.name === "node_modules" || entry.name === ".git")
|
|
109064
109510
|
continue;
|
|
109065
|
-
const entryPath =
|
|
109511
|
+
const entryPath = join97(root, entry.name);
|
|
109066
109512
|
if (entry.isDirectory()) {
|
|
109067
109513
|
paths.push(...await findManifestPaths(entryPath, manifestName));
|
|
109068
109514
|
continue;
|
|
@@ -109103,21 +109549,21 @@ function extractPluginRootPaths(command) {
|
|
|
109103
109549
|
}
|
|
109104
109550
|
function isPluginRuntimePathArg(arg) {
|
|
109105
109551
|
const normalized = normalizePathSeparators(arg);
|
|
109106
|
-
return normalized.endsWith(".js") && normalized.includes("/dist/") && (normalized.startsWith("./") || normalized.startsWith("../") || normalized.startsWith("components/") || normalized.startsWith("/") ||
|
|
109552
|
+
return normalized.endsWith(".js") && normalized.includes("/dist/") && (normalized.startsWith("./") || normalized.startsWith("../") || normalized.startsWith("components/") || normalized.startsWith("/") || isAbsolute15(arg));
|
|
109107
109553
|
}
|
|
109108
109554
|
function runtimeSgDirectory(codexHome, platform, arch) {
|
|
109109
|
-
return
|
|
109555
|
+
return join97(codexHome, "runtime", "ast-grep", runtimeSlug(platform, arch));
|
|
109110
109556
|
}
|
|
109111
109557
|
function describeSgSource(sgPath, env, runtimeSgDir, platform) {
|
|
109112
109558
|
const override = env[SG_PATH_ENV_KEY]?.trim();
|
|
109113
109559
|
if (override !== undefined && override.length > 0 && sgPath === override)
|
|
109114
109560
|
return `env override ${SG_PATH_ENV_KEY}`;
|
|
109115
|
-
if (sgPath ===
|
|
109561
|
+
if (sgPath === join97(runtimeSgDir, sgBinaryName(platform)))
|
|
109116
109562
|
return "runtime dir";
|
|
109117
109563
|
return "PATH";
|
|
109118
109564
|
}
|
|
109119
109565
|
async function readBootstrapStateSummary(codexHome) {
|
|
109120
|
-
const statePath =
|
|
109566
|
+
const statePath = join97(codexHome, "plugins", "data", PLUGIN_DATA_DIR_NAME, "bootstrap", "state.json");
|
|
109121
109567
|
const raw = await readJson2(statePath);
|
|
109122
109568
|
if (raw === null)
|
|
109123
109569
|
return null;
|
|
@@ -109193,24 +109639,24 @@ function isRecord18(value) {
|
|
|
109193
109639
|
}
|
|
109194
109640
|
|
|
109195
109641
|
// packages/omo-opencode/src/cli/doctor/checks/codex-runtime-wrapper.ts
|
|
109196
|
-
import { existsSync as
|
|
109642
|
+
import { existsSync as existsSync62 } from "fs";
|
|
109197
109643
|
import { readFile as readFile32 } from "fs/promises";
|
|
109198
|
-
import { homedir as
|
|
109199
|
-
import { join as
|
|
109644
|
+
import { homedir as homedir28 } from "os";
|
|
109645
|
+
import { join as join98, resolve as resolve29 } from "path";
|
|
109200
109646
|
var RUNTIME_WRAPPER_MARKER2 = "OMO_GENERATED_RUNTIME_WRAPPER";
|
|
109201
109647
|
var CHECK_NAME = "codex-runtime-wrapper";
|
|
109202
109648
|
var REINSTALL_COMMAND = "npx --yes lazycodex-ai@latest install --no-tui";
|
|
109203
109649
|
async function checkCodexRuntimeWrapper(deps = {}) {
|
|
109204
|
-
const codexHome =
|
|
109650
|
+
const codexHome = resolve29(deps.codexHome ?? process.env.CODEX_HOME ?? join98(homedir28(), ".codex"));
|
|
109205
109651
|
const binDir = resolveCodexInstallerBinDir({ binDir: deps.binDir, codexHome, env: process.env });
|
|
109206
109652
|
const platform = deps.platform ?? process.platform;
|
|
109207
|
-
const wrapperPath =
|
|
109208
|
-
const legacyWrapperPath =
|
|
109653
|
+
const wrapperPath = join98(binDir, platform === "win32" ? "omo-agent-toolkit.cmd" : "omo-agent-toolkit");
|
|
109654
|
+
const legacyWrapperPath = join98(binDir, platform === "win32" ? "omo.cmd" : "omo");
|
|
109209
109655
|
const [wrapper, legacyWrapper] = await Promise.all([readRuntimeWrapper(wrapperPath), readRuntimeWrapper(legacyWrapperPath)]);
|
|
109210
109656
|
const issues = [];
|
|
109211
109657
|
if (wrapper?.includes(RUNTIME_WRAPPER_MARKER2) === true) {
|
|
109212
109658
|
const targetPath = parseRuntimeTargetPath(wrapper);
|
|
109213
|
-
if (targetPath !== null && !
|
|
109659
|
+
if (targetPath !== null && !existsSync62(targetPath)) {
|
|
109214
109660
|
issues.push({
|
|
109215
109661
|
title: "omo-agent-toolkit runtime wrapper target is missing",
|
|
109216
109662
|
description: `Generated omo-agent-toolkit runtime wrapper at ${wrapperPath} points to missing target ${targetPath}.`,
|
|
@@ -109733,10 +110179,10 @@ Doctor failed unexpectedly: ${message}`];
|
|
|
109733
110179
|
init_commander();
|
|
109734
110180
|
|
|
109735
110181
|
// packages/mcp-client-core/src/mcp-oauth/storage.ts
|
|
109736
|
-
import { createHash as
|
|
110182
|
+
import { createHash as createHash8 } from "crypto";
|
|
109737
110183
|
import {
|
|
109738
110184
|
chmodSync as chmodSync5,
|
|
109739
|
-
existsSync as
|
|
110185
|
+
existsSync as existsSync65,
|
|
109740
110186
|
mkdirSync as mkdirSync17,
|
|
109741
110187
|
readdirSync as readdirSync13,
|
|
109742
110188
|
readFileSync as readFileSync42,
|
|
@@ -109744,18 +110190,18 @@ import {
|
|
|
109744
110190
|
unlinkSync as unlinkSync9,
|
|
109745
110191
|
writeFileSync as writeFileSync14
|
|
109746
110192
|
} from "fs";
|
|
109747
|
-
import { basename as
|
|
110193
|
+
import { basename as basename14, dirname as dirname40, join as join101 } from "path";
|
|
109748
110194
|
|
|
109749
110195
|
// packages/mcp-client-core/src/config-dir.ts
|
|
109750
|
-
import { existsSync as
|
|
109751
|
-
import { homedir as
|
|
109752
|
-
import { join as
|
|
109753
|
-
function
|
|
109754
|
-
const resolvedPath =
|
|
109755
|
-
if (!
|
|
110196
|
+
import { existsSync as existsSync63, realpathSync as realpathSync12 } from "fs";
|
|
110197
|
+
import { homedir as homedir29 } from "os";
|
|
110198
|
+
import { join as join99, resolve as resolve30 } from "path";
|
|
110199
|
+
function resolveConfigPath3(pathValue) {
|
|
110200
|
+
const resolvedPath = resolve30(pathValue);
|
|
110201
|
+
if (!existsSync63(resolvedPath))
|
|
109756
110202
|
return resolvedPath;
|
|
109757
110203
|
try {
|
|
109758
|
-
return
|
|
110204
|
+
return realpathSync12(resolvedPath);
|
|
109759
110205
|
} catch (error) {
|
|
109760
110206
|
if (!(error instanceof Error))
|
|
109761
110207
|
throw error;
|
|
@@ -109765,15 +110211,15 @@ function resolveConfigPath2(pathValue) {
|
|
|
109765
110211
|
function getOpenCodeCliConfigDir(env = process.env) {
|
|
109766
110212
|
const customConfigDir = env["OPENCODE_CONFIG_DIR"]?.trim();
|
|
109767
110213
|
if (customConfigDir) {
|
|
109768
|
-
return
|
|
110214
|
+
return resolveConfigPath3(customConfigDir);
|
|
109769
110215
|
}
|
|
109770
|
-
const xdgConfigDir = env["XDG_CONFIG_HOME"]?.trim() ||
|
|
109771
|
-
return
|
|
110216
|
+
const xdgConfigDir = env["XDG_CONFIG_HOME"]?.trim() || join99(homedir29(), ".config");
|
|
110217
|
+
return resolveConfigPath3(join99(xdgConfigDir, "opencode"));
|
|
109772
110218
|
}
|
|
109773
110219
|
|
|
109774
110220
|
// packages/mcp-client-core/src/mcp-oauth/storage-index.ts
|
|
109775
|
-
import { chmodSync as chmodSync4, existsSync as
|
|
109776
|
-
import { join as
|
|
110221
|
+
import { chmodSync as chmodSync4, existsSync as existsSync64, readFileSync as readFileSync41, renameSync as renameSync7, writeFileSync as writeFileSync13 } from "fs";
|
|
110222
|
+
import { join as join100 } from "path";
|
|
109777
110223
|
var INDEX_FILE_NAME = "index.json";
|
|
109778
110224
|
function isTokenIndex(value) {
|
|
109779
110225
|
if (typeof value !== "object" || value === null || Array.isArray(value))
|
|
@@ -109781,11 +110227,11 @@ function isTokenIndex(value) {
|
|
|
109781
110227
|
return Object.values(value).every((entry) => typeof entry === "string");
|
|
109782
110228
|
}
|
|
109783
110229
|
function getIndexPath(storageDir) {
|
|
109784
|
-
return
|
|
110230
|
+
return join100(storageDir, INDEX_FILE_NAME);
|
|
109785
110231
|
}
|
|
109786
110232
|
function readTokenIndex(storageDir) {
|
|
109787
110233
|
const indexPath = getIndexPath(storageDir);
|
|
109788
|
-
if (!
|
|
110234
|
+
if (!existsSync64(indexPath))
|
|
109789
110235
|
return {};
|
|
109790
110236
|
try {
|
|
109791
110237
|
const parsed = JSON.parse(readFileSync41(indexPath, "utf-8"));
|
|
@@ -109825,16 +110271,16 @@ function deleteTokenIndexEntry(storageDir, hash) {
|
|
|
109825
110271
|
var STORAGE_DIR_NAME = "mcp-oauth";
|
|
109826
110272
|
var LEGACY_STORAGE_FILE_NAME = "mcp-oauth.json";
|
|
109827
110273
|
function getMcpOauthStorageDir() {
|
|
109828
|
-
return
|
|
110274
|
+
return join101(getOpenCodeCliConfigDir(), STORAGE_DIR_NAME);
|
|
109829
110275
|
}
|
|
109830
110276
|
function getMcpOauthServerHash(serverHost, resource) {
|
|
109831
|
-
return
|
|
110277
|
+
return createHash8("sha256").update(buildKey(serverHost, resource)).digest("hex").slice(0, 32);
|
|
109832
110278
|
}
|
|
109833
110279
|
function getMcpOauthStoragePath(serverHost, resource) {
|
|
109834
|
-
return
|
|
110280
|
+
return join101(getMcpOauthStorageDir(), `${getMcpOauthServerHash(serverHost, resource)}.json`);
|
|
109835
110281
|
}
|
|
109836
110282
|
function getLegacyStoragePath() {
|
|
109837
|
-
return
|
|
110283
|
+
return join101(getOpenCodeCliConfigDir(), LEGACY_STORAGE_FILE_NAME);
|
|
109838
110284
|
}
|
|
109839
110285
|
function normalizeHost2(serverHost) {
|
|
109840
110286
|
let host = serverHost.trim();
|
|
@@ -109895,7 +110341,7 @@ function isOAuthTokenData(value) {
|
|
|
109895
110341
|
return clientSecret === undefined || typeof clientSecret === "string";
|
|
109896
110342
|
}
|
|
109897
110343
|
function readTokenFile(filePath) {
|
|
109898
|
-
if (!
|
|
110344
|
+
if (!existsSync65(filePath))
|
|
109899
110345
|
return null;
|
|
109900
110346
|
try {
|
|
109901
110347
|
const parsed = JSON.parse(readFileSync42(filePath, "utf-8"));
|
|
@@ -109908,7 +110354,7 @@ function readTokenFile(filePath) {
|
|
|
109908
110354
|
}
|
|
109909
110355
|
function readLegacyStore() {
|
|
109910
110356
|
const filePath = getLegacyStoragePath();
|
|
109911
|
-
if (!
|
|
110357
|
+
if (!existsSync65(filePath))
|
|
109912
110358
|
return null;
|
|
109913
110359
|
try {
|
|
109914
110360
|
const parsed = JSON.parse(readFileSync42(filePath, "utf-8"));
|
|
@@ -109928,8 +110374,8 @@ function readLegacyStore() {
|
|
|
109928
110374
|
}
|
|
109929
110375
|
function writeTokenFile(filePath, token) {
|
|
109930
110376
|
try {
|
|
109931
|
-
const dir =
|
|
109932
|
-
if (!
|
|
110377
|
+
const dir = dirname40(filePath);
|
|
110378
|
+
if (!existsSync65(dir)) {
|
|
109933
110379
|
mkdirSync17(dir, { recursive: true });
|
|
109934
110380
|
}
|
|
109935
110381
|
const tempPath = `${filePath}.tmp.${Date.now()}`;
|
|
@@ -109953,7 +110399,7 @@ function saveToken(serverHost, resource, token) {
|
|
|
109953
110399
|
}
|
|
109954
110400
|
function deleteToken(serverHost, resource) {
|
|
109955
110401
|
const filePath = getMcpOauthStoragePath(serverHost, resource);
|
|
109956
|
-
if (!
|
|
110402
|
+
if (!existsSync65(filePath))
|
|
109957
110403
|
return deleteLegacyToken(serverHost, resource);
|
|
109958
110404
|
try {
|
|
109959
110405
|
unlinkSync9(filePath);
|
|
@@ -109975,7 +110421,7 @@ function deleteLegacyToken(serverHost, resource) {
|
|
|
109975
110421
|
if (Object.keys(store).length === 0) {
|
|
109976
110422
|
try {
|
|
109977
110423
|
const filePath = getLegacyStoragePath();
|
|
109978
|
-
if (
|
|
110424
|
+
if (existsSync65(filePath))
|
|
109979
110425
|
unlinkSync9(filePath);
|
|
109980
110426
|
return true;
|
|
109981
110427
|
} catch (deleteError) {
|
|
@@ -110013,7 +110459,7 @@ function listTokensByHost(serverHost) {
|
|
|
110013
110459
|
for (const [hash, indexedKey] of Object.entries(index)) {
|
|
110014
110460
|
if (!indexedKey.startsWith(prefix))
|
|
110015
110461
|
continue;
|
|
110016
|
-
const indexedToken = readTokenFile(
|
|
110462
|
+
const indexedToken = readTokenFile(join101(getMcpOauthStorageDir(), `${hash}.json`));
|
|
110017
110463
|
if (indexedToken)
|
|
110018
110464
|
result[indexedKey] = indexedToken;
|
|
110019
110465
|
}
|
|
@@ -110022,14 +110468,14 @@ function listTokensByHost(serverHost) {
|
|
|
110022
110468
|
function listAllTokens() {
|
|
110023
110469
|
const result = { ...readLegacyStore() ?? {} };
|
|
110024
110470
|
const dir = getMcpOauthStorageDir();
|
|
110025
|
-
if (!
|
|
110471
|
+
if (!existsSync65(dir))
|
|
110026
110472
|
return result;
|
|
110027
110473
|
const index = readTokenIndex(dir);
|
|
110028
110474
|
for (const entry of readdirSync13(dir, { withFileTypes: true })) {
|
|
110029
110475
|
if (!entry.isFile() || !entry.name.endsWith(".json") || entry.name === "index.json")
|
|
110030
110476
|
continue;
|
|
110031
|
-
const token = readTokenFile(
|
|
110032
|
-
const hash =
|
|
110477
|
+
const token = readTokenFile(join101(dir, entry.name));
|
|
110478
|
+
const hash = basename14(entry.name, ".json");
|
|
110033
110479
|
if (token)
|
|
110034
110480
|
result[index[hash] ?? hash] = token;
|
|
110035
110481
|
}
|
|
@@ -110037,7 +110483,7 @@ function listAllTokens() {
|
|
|
110037
110483
|
}
|
|
110038
110484
|
|
|
110039
110485
|
// packages/mcp-client-core/src/plugin-identity.ts
|
|
110040
|
-
var
|
|
110486
|
+
var PLUGIN_NAME4 = "oh-my-openagent";
|
|
110041
110487
|
|
|
110042
110488
|
// packages/mcp-client-core/src/mcp-oauth/discovery.ts
|
|
110043
110489
|
var discoveryCache = new Map;
|
|
@@ -110202,13 +110648,13 @@ async function findAvailablePort2(startPort = DEFAULT_PORT) {
|
|
|
110202
110648
|
|
|
110203
110649
|
// packages/mcp-client-core/src/mcp-oauth/oauth-authorization-flow.ts
|
|
110204
110650
|
import { spawn as spawn4 } from "child_process";
|
|
110205
|
-
import { createHash as
|
|
110651
|
+
import { createHash as createHash9, randomBytes as randomBytes2 } from "crypto";
|
|
110206
110652
|
import { createServer as createServer2 } from "http";
|
|
110207
110653
|
function generateCodeVerifier() {
|
|
110208
110654
|
return randomBytes2(32).toString("base64url");
|
|
110209
110655
|
}
|
|
110210
110656
|
function generateCodeChallenge(verifier) {
|
|
110211
|
-
return
|
|
110657
|
+
return createHash9("sha256").update(verifier).digest("base64url");
|
|
110212
110658
|
}
|
|
110213
110659
|
function buildAuthorizationUrl(authorizationEndpoint, options) {
|
|
110214
110660
|
const url = new URL(authorizationEndpoint);
|
|
@@ -110414,7 +110860,7 @@ class McpOAuthProvider {
|
|
|
110414
110860
|
const clientInfo = await getOrRegisterClient({
|
|
110415
110861
|
...metadata.registrationEndpoint ? { registrationEndpoint: metadata.registrationEndpoint } : {},
|
|
110416
110862
|
serverIdentifier: this.serverUrl,
|
|
110417
|
-
clientName:
|
|
110863
|
+
clientName: PLUGIN_NAME4,
|
|
110418
110864
|
redirectUris: [this.redirectUrl()],
|
|
110419
110865
|
tokenEndpointAuthMethod: "none",
|
|
110420
110866
|
...this.configClientId ? { clientId: this.configClientId } : {},
|
|
@@ -111100,8 +111546,8 @@ async function loadDeviceKeyring(store) {
|
|
|
111100
111546
|
|
|
111101
111547
|
// packages/omo-opencode/src/cli/account-keys/keystore.ts
|
|
111102
111548
|
import { execFile as execFile5 } from "child_process";
|
|
111103
|
-
import { homedir as
|
|
111104
|
-
import { join as
|
|
111549
|
+
import { homedir as homedir30 } from "os";
|
|
111550
|
+
import { join as join102 } from "path";
|
|
111105
111551
|
var DEFAULT_SERVICE = "omo-cli";
|
|
111106
111552
|
function defaultRun(argv, input) {
|
|
111107
111553
|
const [file, ...args] = argv;
|
|
@@ -111209,8 +111655,8 @@ function createLibsecretKeyStore(name, run) {
|
|
|
111209
111655
|
}
|
|
111210
111656
|
function createDpapiKeyStore(name, run) {
|
|
111211
111657
|
const safeName = name.replace(/[^A-Za-z0-9._-]/g, "-");
|
|
111212
|
-
const directory =
|
|
111213
|
-
const file =
|
|
111658
|
+
const directory = join102(process.env.LOCALAPPDATA ?? join102(homedir30(), "AppData", "Local"), "omo");
|
|
111659
|
+
const file = join102(directory, `device-keys-${safeName}.bin`);
|
|
111214
111660
|
const ps = (literal) => `'${literal.replace(/'/g, "''")}'`;
|
|
111215
111661
|
const prelude = "Add-Type -AssemblyName System.Security; ";
|
|
111216
111662
|
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).");
|
|
@@ -111374,6 +111820,7 @@ class ApiRefusal extends SignInError {
|
|
|
111374
111820
|
"account_deleted",
|
|
111375
111821
|
"reauth_required",
|
|
111376
111822
|
"invalid_grant",
|
|
111823
|
+
"device_revoked",
|
|
111377
111824
|
"entitlement_required",
|
|
111378
111825
|
"authorization_pending",
|
|
111379
111826
|
"slow_down",
|
|
@@ -111569,7 +112016,7 @@ async function loginDevice(session, options) {
|
|
|
111569
112016
|
}
|
|
111570
112017
|
|
|
111571
112018
|
// packages/omo-opencode/src/cli/service-auth/keystore.ts
|
|
111572
|
-
import { createHash as
|
|
112019
|
+
import { createHash as createHash10 } from "crypto";
|
|
111573
112020
|
|
|
111574
112021
|
// packages/omo-opencode/src/cli/service-auth/secret-service-lock.ts
|
|
111575
112022
|
import { spawn as spawn5 } from "child_process";
|
|
@@ -111613,7 +112060,10 @@ var probeSecretServiceLock = () => new Promise((resolve) => {
|
|
|
111613
112060
|
});
|
|
111614
112061
|
|
|
111615
112062
|
// packages/omo-opencode/src/cli/service-auth/keystore.ts
|
|
111616
|
-
class
|
|
112063
|
+
class CredentialStoreError extends SignInError {
|
|
112064
|
+
}
|
|
112065
|
+
|
|
112066
|
+
class KeychainLockedError extends CredentialStoreError {
|
|
111617
112067
|
}
|
|
111618
112068
|
var LOCKED = /-25308|errSecInteractionNotAllowed|interaction is not allowed|locked collection/i;
|
|
111619
112069
|
var UNLOCKED_REUSE_MS = 30000;
|
|
@@ -111627,7 +112077,7 @@ var stderrNoticeOncePerProcess = (message) => {
|
|
|
111627
112077
|
};
|
|
111628
112078
|
var isLocked = (error) => error instanceof Error && (LOCKED.test(error.message) || LOCKED.test(String(error.code ?? "")));
|
|
111629
112079
|
function credentialId(api) {
|
|
111630
|
-
return
|
|
112080
|
+
return createHash10("sha256").update(serviceOrigin(api)).digest("hex");
|
|
111631
112081
|
}
|
|
111632
112082
|
function createCredentialStore(api, secrets = typeof Bun === "undefined" ? null : Bun.secrets, platform = process.platform, lockProbe = probeSecretServiceLock, notice = stderrNoticeOncePerProcess) {
|
|
111633
112083
|
if (!secrets)
|
|
@@ -111636,7 +112086,7 @@ function createCredentialStore(api, secrets = typeof Bun === "undefined" ? null
|
|
|
111636
112086
|
if (platformName === null)
|
|
111637
112087
|
throw new SignInError("This platform has no supported OS credential store.");
|
|
111638
112088
|
const key = { service: "omo-cli", name: credentialId(api) };
|
|
111639
|
-
const unavailable = (error) => isLocked(error) ? new KeychainLockedError(`${platformName} is locked. Unlock it, then try again. Credentials are never saved to a file.`) : new
|
|
112089
|
+
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.`);
|
|
111640
112090
|
let unlockedUntil = 0;
|
|
111641
112091
|
let noticed = false;
|
|
111642
112092
|
const assertUsable = async () => {
|
|
@@ -111691,7 +112141,7 @@ function createCredentialStore(api, secrets = typeof Bun === "undefined" ? null
|
|
|
111691
112141
|
}
|
|
111692
112142
|
|
|
111693
112143
|
// packages/omo-opencode/src/cli/service-auth/loopback.ts
|
|
111694
|
-
import { createHash as
|
|
112144
|
+
import { createHash as createHash11, randomBytes as randomBytes3, timingSafeEqual } from "crypto";
|
|
111695
112145
|
import { createServer as createServer3 } from "http";
|
|
111696
112146
|
class BrowserUnavailable extends SignInError {
|
|
111697
112147
|
}
|
|
@@ -111737,7 +112187,7 @@ async function authorize(options) {
|
|
|
111737
112187
|
const url = new URL(serviceOrigin(options.accounts));
|
|
111738
112188
|
url.search = new URLSearchParams({
|
|
111739
112189
|
redirect_uri: `${origin}/callback`,
|
|
111740
|
-
code_challenge:
|
|
112190
|
+
code_challenge: createHash11("sha256").update(verifier).digest("base64url"),
|
|
111741
112191
|
code_challenge_method: "S256",
|
|
111742
112192
|
state
|
|
111743
112193
|
}).toString();
|
|
@@ -111791,12 +112241,12 @@ async function loginLoopback(session, options) {
|
|
|
111791
112241
|
|
|
111792
112242
|
// packages/omo-opencode/src/cli/service-auth/session.ts
|
|
111793
112243
|
import { mkdir as mkdir10 } from "fs/promises";
|
|
111794
|
-
import { homedir as
|
|
111795
|
-
import { join as
|
|
112244
|
+
import { homedir as homedir31 } from "os";
|
|
112245
|
+
import { join as join103 } from "path";
|
|
111796
112246
|
|
|
111797
112247
|
// packages/team-core/src/team-state-store/lock-publish.ts
|
|
111798
112248
|
import { access as access3, open as open2, unlink as unlink2 } from "fs/promises";
|
|
111799
|
-
import { dirname as
|
|
112249
|
+
import { dirname as dirname41 } from "path";
|
|
111800
112250
|
|
|
111801
112251
|
// packages/team-core/src/team-state-store/lock-record.ts
|
|
111802
112252
|
import { randomUUID as randomUUID5 } from "crypto";
|
|
@@ -111896,7 +112346,7 @@ async function assertRetryableLockOpenError(lockPath, error, deps) {
|
|
|
111896
112346
|
if (code === "EPERM") {
|
|
111897
112347
|
if (await pathMayExist(lockPath, deps))
|
|
111898
112348
|
return;
|
|
111899
|
-
if ((deps?.platform ?? process.platform) === "win32" && await pathMayExist(
|
|
112349
|
+
if ((deps?.platform ?? process.platform) === "win32" && await pathMayExist(dirname41(lockPath), deps))
|
|
111900
112350
|
return;
|
|
111901
112351
|
}
|
|
111902
112352
|
throw error;
|
|
@@ -111926,7 +112376,7 @@ async function publishLockRecord(lockPath, record) {
|
|
|
111926
112376
|
}
|
|
111927
112377
|
|
|
111928
112378
|
// packages/team-core/src/team-state-store/lock-reclaim.ts
|
|
111929
|
-
import { createHash as
|
|
112379
|
+
import { createHash as createHash12 } from "crypto";
|
|
111930
112380
|
import { unlink as unlink3 } from "fs/promises";
|
|
111931
112381
|
var RECLAIM_UNLINK_ATTEMPTS = 3;
|
|
111932
112382
|
var RECLAIM_UNLINK_RETRY_MS = 25;
|
|
@@ -111936,7 +112386,7 @@ function delay2(ms) {
|
|
|
111936
112386
|
});
|
|
111937
112387
|
}
|
|
111938
112388
|
function reclaimGuardPath(lockPath, record) {
|
|
111939
|
-
return `${lockPath}.reclaim-${
|
|
112389
|
+
return `${lockPath}.reclaim-${createHash12("sha256").update(record).digest("hex").slice(0, 16)}`;
|
|
111940
112390
|
}
|
|
111941
112391
|
async function unlinkWithRetry(path, deps) {
|
|
111942
112392
|
const wait = deps.delay ?? delay2;
|
|
@@ -112035,12 +112485,12 @@ class SessionEnded extends SignInError {
|
|
|
112035
112485
|
this.code = code;
|
|
112036
112486
|
}
|
|
112037
112487
|
}
|
|
112038
|
-
var DEVICE_REVOKING_REFUSALS = new Set(["account_deleted", "reauth_required"]);
|
|
112488
|
+
var DEVICE_REVOKING_REFUSALS = new Set(["account_deleted", "reauth_required", "device_revoked"]);
|
|
112039
112489
|
function createSession(options) {
|
|
112040
112490
|
const api = serviceOrigin(options.api);
|
|
112041
112491
|
const { store, signal } = options;
|
|
112042
|
-
const directory =
|
|
112043
|
-
const lockPath =
|
|
112492
|
+
const directory = join103(options.home ?? homedir31(), ".omo", "session-locks");
|
|
112493
|
+
const lockPath = join103(directory, `${credentialId(api)}.lock`);
|
|
112044
112494
|
async function locked(action) {
|
|
112045
112495
|
await mkdir10(directory, { recursive: true, mode: 448 });
|
|
112046
112496
|
signal?.throwIfAborted();
|
|
@@ -112062,7 +112512,9 @@ function createSession(options) {
|
|
|
112062
112512
|
await store.write({ ...current, ...tokens });
|
|
112063
112513
|
return tokens.accessToken;
|
|
112064
112514
|
} catch (error) {
|
|
112065
|
-
if (error instanceof
|
|
112515
|
+
if (error instanceof CredentialStoreError)
|
|
112516
|
+
throw error;
|
|
112517
|
+
if (error instanceof ApiRefusal && error.status < 500 && ["unauthorized", "account_deleted", "reauth_required", "invalid_grant", "device_revoked"].includes(error.code)) {
|
|
112066
112518
|
await store.clear();
|
|
112067
112519
|
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);
|
|
112068
112520
|
}
|
|
@@ -112291,7 +112743,7 @@ function resolveInstallArgs(options, invocationName = process.env.OMO_INVOCATION
|
|
|
112291
112743
|
init_commander();
|
|
112292
112744
|
|
|
112293
112745
|
// packages/omo-opencode/src/cli/boulder/boulder.ts
|
|
112294
|
-
import { existsSync as
|
|
112746
|
+
import { existsSync as existsSync66 } from "fs";
|
|
112295
112747
|
|
|
112296
112748
|
// packages/omo-opencode/src/cli/boulder/formatter.ts
|
|
112297
112749
|
var import_picocolors22 = __toESM(require_picocolors(), 1);
|
|
@@ -112428,10 +112880,10 @@ async function boulder(options) {
|
|
|
112428
112880
|
const boulderFilePath = getBoulderFilePath(directory);
|
|
112429
112881
|
const state = readBoulderState(directory);
|
|
112430
112882
|
if (!state) {
|
|
112431
|
-
const message =
|
|
112883
|
+
const message = existsSync66(boulderFilePath) ? formatReadErrorMessage(options.json) : formatNoBoulderMessage(options.json);
|
|
112432
112884
|
process.stderr.write(`${message}
|
|
112433
112885
|
`);
|
|
112434
|
-
return
|
|
112886
|
+
return existsSync66(boulderFilePath) ? 2 : 1;
|
|
112435
112887
|
}
|
|
112436
112888
|
const works = getBoulderWorks(state);
|
|
112437
112889
|
const filteredWorks = options.workId ? works.filter((work) => work.work_id === options.workId) : works;
|
|
@@ -112449,12 +112901,12 @@ async function boulder(options) {
|
|
|
112449
112901
|
}
|
|
112450
112902
|
// packages/omo-opencode/src/cli/codex-ulw-loop.ts
|
|
112451
112903
|
import { spawn as spawn6 } from "child_process";
|
|
112452
|
-
import { existsSync as
|
|
112453
|
-
import { homedir as
|
|
112904
|
+
import { existsSync as existsSync67, readFileSync as readFileSync43, realpathSync as realpathSync13 } from "fs";
|
|
112905
|
+
import { homedir as homedir32 } from "os";
|
|
112454
112906
|
var ULW_LOOP_DELEGATION_SENTINEL = "OMO_ULW_LOOP_DELEGATED";
|
|
112455
112907
|
function resolveCodexUlwLoopCommand(input = {}) {
|
|
112456
112908
|
const env = input.env ?? process.env;
|
|
112457
|
-
const homeDir = input.homeDir ??
|
|
112909
|
+
const homeDir = input.homeDir ?? homedir32();
|
|
112458
112910
|
const localComponentBin = resolveLocalUlwLoopBin(env, homeDir);
|
|
112459
112911
|
if (localComponentBin !== null)
|
|
112460
112912
|
return { executable: localComponentBin, argsPrefix: [] };
|
|
@@ -112491,11 +112943,11 @@ async function codexUlwLoop(args) {
|
|
|
112491
112943
|
}
|
|
112492
112944
|
function resolveLocalUlwLoopBin(env, homeDir) {
|
|
112493
112945
|
const candidates = resolveCodexComponentBinCandidates({ executableName: "omo-ulw-loop", env, homeDir });
|
|
112494
|
-
return candidates.find((candidate) =>
|
|
112946
|
+
return candidates.find((candidate) => existsSync67(candidate)) ?? null;
|
|
112495
112947
|
}
|
|
112496
112948
|
function resolveLegacyLocalOmoBin(env, homeDir, currentExecutablePaths) {
|
|
112497
112949
|
const candidates = resolveCodexComponentBinCandidates({ executableName: "omo", env, homeDir });
|
|
112498
|
-
return candidates.find((candidate) =>
|
|
112950
|
+
return candidates.find((candidate) => existsSync67(candidate) && !isCurrentExecutable(candidate, currentExecutablePaths) && !isGeneratedRuntimeWrapper(candidate)) ?? null;
|
|
112499
112951
|
}
|
|
112500
112952
|
function isGeneratedRuntimeWrapper(candidate) {
|
|
112501
112953
|
try {
|
|
@@ -112512,7 +112964,7 @@ function isCurrentExecutable(candidate, currentExecutablePaths) {
|
|
|
112512
112964
|
}
|
|
112513
112965
|
function realpathOrSelf2(path) {
|
|
112514
112966
|
try {
|
|
112515
|
-
return
|
|
112967
|
+
return realpathSync13(path);
|
|
112516
112968
|
} catch (error) {
|
|
112517
112969
|
if (error instanceof Error)
|
|
112518
112970
|
return path;
|
|
@@ -112696,7 +113148,7 @@ function linkedWorktrees(records) {
|
|
|
112696
113148
|
return records.slice(1);
|
|
112697
113149
|
}
|
|
112698
113150
|
// packages/omo-opencode/src/cli/worktree-sweep/sweep.ts
|
|
112699
|
-
import { existsSync as
|
|
113151
|
+
import { existsSync as existsSync68 } from "fs";
|
|
112700
113152
|
import { stat as stat9 } from "fs/promises";
|
|
112701
113153
|
import os7 from "os";
|
|
112702
113154
|
import { normalize as normalize2 } from "path";
|
|
@@ -112787,7 +113239,7 @@ async function isOlderThan(worktreePath, days, now) {
|
|
|
112787
113239
|
}
|
|
112788
113240
|
}
|
|
112789
113241
|
async function classifyRecord(repo, record, defaultBranch, options) {
|
|
112790
|
-
const pathExists =
|
|
113242
|
+
const pathExists = existsSync68(record.path);
|
|
112791
113243
|
const external = isExcludedPath(record.path, options.excludePrefixes, options.home);
|
|
112792
113244
|
const current = options.currentWorktree !== undefined && record.path === options.currentWorktree;
|
|
112793
113245
|
if (record.locked || !pathExists || external || current) {
|
|
@@ -112816,7 +113268,7 @@ async function sweepRepo(repo, options) {
|
|
|
112816
113268
|
const records = linkedWorktrees(allRecords);
|
|
112817
113269
|
const startedInLinked = records.some((record) => record.path === toplevel);
|
|
112818
113270
|
const mainWorktree = allRecords[0]?.path;
|
|
112819
|
-
const root = startedInLinked && mainWorktree !== undefined &&
|
|
113271
|
+
const root = startedInLinked && mainWorktree !== undefined && existsSync68(mainWorktree) ? mainWorktree : toplevel;
|
|
112820
113272
|
const currentWorktree = startedInLinked ? toplevel : undefined;
|
|
112821
113273
|
const classifications = [];
|
|
112822
113274
|
for (const record of records) {
|
|
@@ -112945,7 +113397,7 @@ prunes.
|
|
|
112945
113397
|
|
|
112946
113398
|
// packages/omo-opencode/src/cli/config-migrate.ts
|
|
112947
113399
|
init_startup_migration();
|
|
112948
|
-
import { posix as
|
|
113400
|
+
import { posix as posix13 } from "path";
|
|
112949
113401
|
function reports(result) {
|
|
112950
113402
|
return result.results.map((entry) => ({
|
|
112951
113403
|
diagnostics: entry.diagnostics,
|
|
@@ -112979,7 +113431,7 @@ function runConfigMigrate(options = {}) {
|
|
|
112979
113431
|
dryRun: options.dryRun ?? false,
|
|
112980
113432
|
environment,
|
|
112981
113433
|
...homeDir === undefined ? {} : { env: { HOME: homeDir }, homeDir },
|
|
112982
|
-
pathOperations:
|
|
113434
|
+
pathOperations: posix13
|
|
112983
113435
|
});
|
|
112984
113436
|
const report = reports(result);
|
|
112985
113437
|
const response = {
|