lazycodex-ai 5.0.0-beta.42 → 5.0.0-beta.44

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.
Files changed (60) hide show
  1. package/README.ja.md +2 -2
  2. package/README.ko.md +4 -4
  3. package/README.md +4 -4
  4. package/README.ru.md +2 -2
  5. package/README.zh-cn.md +2 -2
  6. package/dist/cli/index.js +389 -310
  7. package/dist/cli-node/index.js +389 -310
  8. package/package.json +3 -1
  9. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  10. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  11. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  12. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  13. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  14. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  15. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  16. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  17. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  18. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +2 -2
  19. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  20. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  21. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  22. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  23. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  24. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  25. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  26. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  27. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  28. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  29. package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +2 -2
  30. package/packages/omo-codex/plugin/components/ulw-execute-continuation/package.json +1 -1
  31. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +4 -4
  32. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  33. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  34. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  35. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  36. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  37. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  38. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  39. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  40. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  41. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  42. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  43. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  44. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  45. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  46. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  47. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +1 -1
  48. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  49. package/packages/omo-codex/plugin/hooks/subagent-stop-checking-ulw-execute-continuation.json +1 -1
  50. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  51. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  52. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  53. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  54. package/packages/omo-codex/plugin/package-lock.json +12 -12
  55. package/packages/omo-codex/plugin/package.json +1 -1
  56. package/packages/omo-codex/plugin/test/sync-skills-codex-compatibility.test.mjs +47 -2
  57. package/packages/omo-codex/plugin/test/sync-skills.test.mjs +4 -0
  58. package/packages/omo-codex/scripts/install-dist/install-local.mjs +32 -50
  59. package/packages/shared-skills/skill-source-filter.d.ts +16 -0
  60. package/packages/shared-skills/skill-source-filter.mjs +44 -0
@@ -55,7 +55,7 @@ var package_default;
55
55
  var init_package = __esm(() => {
56
56
  package_default = {
57
57
  name: "oh-my-opencode",
58
- version: "5.0.0-beta.42",
58
+ version: "5.0.0-beta.44",
59
59
  description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
60
60
  main: "./dist/index.js",
61
61
  types: "dist/index.d.ts",
@@ -145,6 +145,7 @@ var init_package = __esm(() => {
145
145
  "packages/omo-codex/plugin/components/telemetry/dist/cli.js",
146
146
  "packages/omo-codex/plugin/components/ultrawork/dist/cli.js",
147
147
  "packages/omo-codex/plugin/components/ulw-loop/dist/cli.js",
148
+ "packages/prompts-core/prompts/ultrawork/codex.md",
148
149
  "packages/omo-codex/plugin/.codex-plugin",
149
150
  "!packages/omo-codex/plugin/node_modules",
150
151
  "!packages/omo-codex/plugin/**/node_modules",
@@ -187,14 +188,14 @@ var init_package = __esm(() => {
187
188
  prepare: "bun run build",
188
189
  postinstall: "node postinstall.mjs",
189
190
  prepublishOnly: "bun run clean && bun run build:lsp-tools-mcp && bun run build:lsp-daemon && bun run build",
190
- "test:model-capabilities": "bun test 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",
191
+ "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",
191
192
  typecheck: "tsgo --noEmit && bun run typecheck:script && bun run typecheck:packages",
192
193
  "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/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/pi-goal/tsconfig.json && tsgo --noEmit -p packages/pi-webfetch/tsconfig.json && tsgo --noEmit -p packages/omo-opencode/tsconfig.json && tsgo --noEmit -p packages/omo-native/tsconfig.json",
193
194
  "typecheck:script": "tsgo --noEmit -p script/tsconfig.json",
194
- test: "bun test",
195
- "test:codex": "bun run build:codex-install && bun run build:git-bash-mcp && bun run build:lsp-tools-mcp && bun run build:lsp-daemon && npm --prefix packages/lsp-tools-mcp test && npm --prefix packages/omo-codex/plugin ci && npm --prefix packages/omo-codex/plugin/components/ulw-loop test && bun run --cwd packages/omo-codex/plugin build && node scripts/check-third-party-notices.mjs --ship && bun test packages/omo-opencode/src/cli/cli-installer.platform.test.ts packages/omo-codex/src/install/codex-cache.test.ts packages/omo-codex/src/install/codex-cleanup.test.ts packages/omo-codex/src/install/codex-config-agent-cleanup.test.ts packages/omo-codex/src/install/codex-config-autonomous-features.test.ts packages/omo-codex/src/install/codex-config-reasoning.test.ts packages/omo-codex/src/install/codex-config-toml.test.ts packages/omo-codex/src/install/codex-project-local-cleanup.test.ts packages/omo-codex/src/install/install-codex-project-local-cleanup.test.ts packages/omo-codex/src/install/install-codex.test.ts packages/omo-codex/src/install/install-codex-packaged.test.ts packages/omo-codex/src/install/link-cached-plugin-agents.test.ts packages/omo-codex/src/**/*.test.ts packages/utils/src/jsonc-parser.test.ts packages/utils/src/frontmatter.test.ts packages/hashline-core/src/hash-computation.test.ts packages/hashline-core/src/smoke-untested-modules.test.ts packages/rules-engine/src/index.test.ts packages/rules-engine/src/security-boundary.test.ts packages/agents-md-core/src/injector.test.ts packages/omo-codex/plugin/components/lsp/test/package-smoke.test.ts && node --test packages/omo-codex/plugin/test/*.test.mjs packages/omo-codex/scripts/install-cache-copy.test.mjs packages/omo-codex/scripts/install-cli-args.test.mjs packages/omo-codex/scripts/install-delegated-command.test.mjs packages/omo-codex/scripts/install-config-autonomous-features.test.mjs packages/omo-codex/scripts/install-config-autonomous.test.mjs packages/omo-codex/scripts/install-config-reasoning.test.mjs packages/omo-codex/scripts/install-config.test.mjs packages/omo-codex/scripts/install-hook-targets.test.mjs packages/omo-codex/scripts/install-project-local-cleanup.test.mjs packages/omo-codex/scripts/install-lazycodex-version-stamp.test.mjs packages/omo-codex/scripts/install-local-entrypoint.test.mjs packages/omo-codex/scripts/install-local-git-bash-preflight.test.mjs packages/omo-codex/scripts/install-local.test.mjs packages/omo-codex/scripts/install-marketplace-cache.test.mjs packages/omo-codex/scripts/install-mcp-context7-runtime.test.mjs packages/omo-codex/scripts/install-mcp-runtime.test.mjs packages/omo-codex/scripts/install-packaged-local.test.mjs packages/omo-codex/scripts/install-generated-bundle.test.mjs packages/omo-codex/scripts/install-agent-links.test.mjs packages/omo-codex/scripts/install-bin-links.test.mjs",
195
+ test: "bun test --timeout 20000",
196
+ "test:codex": "bun run build:codex-install && bun run build:git-bash-mcp && bun run build:lsp-tools-mcp && bun run build:lsp-daemon && npm --prefix packages/lsp-tools-mcp test && npm --prefix packages/omo-codex/plugin ci && npm --prefix packages/omo-codex/plugin/components/ulw-loop test && bun run --cwd packages/omo-codex/plugin build && node scripts/check-third-party-notices.mjs --ship && bun test --timeout 20000 packages/omo-opencode/src/cli/cli-installer.platform.test.ts packages/omo-codex/src/install/codex-cache.test.ts packages/omo-codex/src/install/codex-cleanup.test.ts packages/omo-codex/src/install/codex-config-agent-cleanup.test.ts packages/omo-codex/src/install/codex-config-autonomous-features.test.ts packages/omo-codex/src/install/codex-config-reasoning.test.ts packages/omo-codex/src/install/codex-config-toml.test.ts packages/omo-codex/src/install/codex-project-local-cleanup.test.ts packages/omo-codex/src/install/install-codex-project-local-cleanup.test.ts packages/omo-codex/src/install/install-codex.test.ts packages/omo-codex/src/install/install-codex-packaged.test.ts packages/omo-codex/src/install/link-cached-plugin-agents.test.ts packages/omo-codex/src/**/*.test.ts packages/utils/src/jsonc-parser.test.ts packages/utils/src/frontmatter.test.ts packages/hashline-core/src/hash-computation.test.ts packages/hashline-core/src/smoke-untested-modules.test.ts packages/rules-engine/src/index.test.ts packages/rules-engine/src/security-boundary.test.ts packages/agents-md-core/src/injector.test.ts packages/omo-codex/plugin/components/lsp/test/package-smoke.test.ts && node --test packages/omo-codex/plugin/test/*.test.mjs packages/omo-codex/scripts/install-cache-copy.test.mjs packages/omo-codex/scripts/install-cli-args.test.mjs packages/omo-codex/scripts/install-delegated-command.test.mjs packages/omo-codex/scripts/install-config-autonomous-features.test.mjs packages/omo-codex/scripts/install-config-autonomous.test.mjs packages/omo-codex/scripts/install-config-reasoning.test.mjs packages/omo-codex/scripts/install-config.test.mjs packages/omo-codex/scripts/install-hook-targets.test.mjs packages/omo-codex/scripts/install-project-local-cleanup.test.mjs packages/omo-codex/scripts/install-lazycodex-version-stamp.test.mjs packages/omo-codex/scripts/install-local-entrypoint.test.mjs packages/omo-codex/scripts/install-local-git-bash-preflight.test.mjs packages/omo-codex/scripts/install-local.test.mjs packages/omo-codex/scripts/install-marketplace-cache.test.mjs packages/omo-codex/scripts/install-mcp-context7-runtime.test.mjs packages/omo-codex/scripts/install-mcp-runtime.test.mjs packages/omo-codex/scripts/install-packaged-local.test.mjs packages/omo-codex/scripts/install-generated-bundle.test.mjs packages/omo-codex/scripts/install-agent-links.test.mjs packages/omo-codex/scripts/install-bin-links.test.mjs",
196
197
  "test:fast": "bun run script/test-fast.ts",
197
- "test:senpi": "bun run build:senpi-plugin && tsgo --noEmit -p packages/omo-senpi/tsconfig.json && bun test packages/omo-senpi && bun test ./.agents/skills/senpi-qa/scripts/resolve-evidence-dir.test.mjs",
198
+ "test:senpi": "bun run build:senpi-plugin && tsgo --noEmit -p packages/omo-senpi/tsconfig.json && bun test --timeout 20000 packages/omo-senpi && bun test ./.agents/skills/senpi-qa/scripts/resolve-evidence-dir.test.mjs",
198
199
  "test:windows-codex": "bun run test:codex",
199
200
  "build:git-bash-mcp": "bun run --cwd packages/git-bash-mcp build",
200
201
  "build:ast-grep-mcp": "bun run --cwd packages/ast-grep-mcp build"
@@ -238,7 +239,7 @@ var init_package = __esm(() => {
238
239
  zod: "^4.4.3"
239
240
  },
240
241
  devDependencies: {
241
- "@code-yeongyu/senpi": "2026.9.4-3",
242
+ "@code-yeongyu/senpi": "2026.9.5-3",
242
243
  "@oh-my-opencode/agents-md-core": "workspace:*",
243
244
  "@oh-my-opencode/ast-grep-mcp": "workspace:*",
244
245
  "@oh-my-opencode/boulder-state": "workspace:*",
@@ -279,18 +280,18 @@ var init_package = __esm(() => {
279
280
  typescript: "^7.0.2"
280
281
  },
281
282
  optionalDependencies: {
282
- "oh-my-opencode-darwin-arm64": "5.0.0-beta.42",
283
- "oh-my-opencode-darwin-x64": "5.0.0-beta.42",
284
- "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.42",
285
- "oh-my-opencode-linux-arm64": "5.0.0-beta.42",
286
- "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.42",
287
- "oh-my-opencode-linux-x64": "5.0.0-beta.42",
288
- "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.42",
289
- "oh-my-opencode-linux-x64-musl": "5.0.0-beta.42",
290
- "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.42",
291
- "oh-my-opencode-windows-arm64": "5.0.0-beta.42",
292
- "oh-my-opencode-windows-x64": "5.0.0-beta.42",
293
- "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.42"
283
+ "oh-my-opencode-darwin-arm64": "5.0.0-beta.44",
284
+ "oh-my-opencode-darwin-x64": "5.0.0-beta.44",
285
+ "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.44",
286
+ "oh-my-opencode-linux-arm64": "5.0.0-beta.44",
287
+ "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.44",
288
+ "oh-my-opencode-linux-x64": "5.0.0-beta.44",
289
+ "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.44",
290
+ "oh-my-opencode-linux-x64-musl": "5.0.0-beta.44",
291
+ "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.44",
292
+ "oh-my-opencode-windows-arm64": "5.0.0-beta.44",
293
+ "oh-my-opencode-windows-x64": "5.0.0-beta.44",
294
+ "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.44"
294
295
  },
295
296
  overrides: {
296
297
  "@earendil-works/pi-agent-core": "0.84.2",
@@ -7127,7 +7128,7 @@ var init_agent_model_requirements = __esm(() => {
7127
7128
  fallbackChain: [
7128
7129
  {
7129
7130
  providers: ["anthropic", "github-copilot", "opencode"],
7130
- model: "claude-fable-5",
7131
+ model: "claude-fable-5-1",
7131
7132
  variant: "xhigh"
7132
7133
  },
7133
7134
  {
@@ -7153,10 +7154,9 @@ var init_agent_model_requirements = __esm(() => {
7153
7154
  },
7154
7155
  momus: {
7155
7156
  fallbackChain: [
7156
- { providers: ["openai", "openai-codex"], model: "gpt-5.6-terra", variant: "high" },
7157
- { providers: ["github-copilot"], model: "gpt-5.6-terra", variant: "high" },
7158
- { providers: ["openai", "openai-codex", "opencode"], model: "gpt-5.6-sol", variant: "xhigh" },
7159
- { providers: ["github-copilot"], model: "gpt-5.6-sol", variant: "high" },
7157
+ { providers: ["openai", "openai-codex"], model: "gpt-6-astra", variant: "xhigh" },
7158
+ { providers: ["github-copilot"], model: "gpt-6-astra", variant: "high" },
7159
+ { providers: ["openai", "openai-codex", "opencode"], model: "gpt-6-astra", variant: "high" },
7160
7160
  {
7161
7161
  providers: ["anthropic", "github-copilot", "opencode"],
7162
7162
  model: "claude-opus-5",
@@ -7208,6 +7208,11 @@ var init_category_model_requirements = __esm(() => {
7208
7208
  CATEGORY_MODEL_REQUIREMENTS = {
7209
7209
  "visual-engineering": {
7210
7210
  fallbackChain: [
7211
+ {
7212
+ providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
7213
+ model: "claude-fable-5-1",
7214
+ variant: "max"
7215
+ },
7211
7216
  {
7212
7217
  providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
7213
7218
  model: "claude-opus-5",
@@ -7217,17 +7222,14 @@ var init_category_model_requirements = __esm(() => {
7217
7222
  providers: ["kimi-for-coding", "moonshotai", "opencode-go", "opencode"],
7218
7223
  model: "kimi-k3",
7219
7224
  variant: "max"
7220
- },
7221
- { providers: ["zai-coding-plan", "opencode-go"], model: "glm-5.2", variant: "max" },
7222
- {
7223
- providers: ["openai", "openai-codex", "github-copilot", "opencode"],
7224
- model: "gpt-5.6-sol",
7225
- variant: "medium"
7226
7225
  }
7227
7226
  ]
7228
7227
  },
7229
7228
  ultrabrain: {
7230
7229
  fallbackChain: [
7230
+ { providers: ["openai", "openai-codex"], model: "gpt-6-astra", variant: "max" },
7231
+ { providers: ["github-copilot"], model: "gpt-6-astra", variant: "max" },
7232
+ { providers: ["openai", "openai-codex", "opencode"], model: "gpt-6-astra", variant: "max" },
7231
7233
  { providers: ["openai", "openai-codex"], model: "gpt-5.6-sol", variant: "max" },
7232
7234
  { providers: ["github-copilot"], model: "gpt-5.6-sol", variant: "max" },
7233
7235
  { providers: ["openai", "openai-codex", "opencode"], model: "gpt-5.6-sol", variant: "max" }
@@ -7235,6 +7237,11 @@ var init_category_model_requirements = __esm(() => {
7235
7237
  },
7236
7238
  deep: {
7237
7239
  fallbackChain: [
7240
+ {
7241
+ providers: ["openai", "openai-codex", "github-copilot", "opencode"],
7242
+ model: "gpt-6-astra",
7243
+ variant: "high"
7244
+ },
7238
7245
  {
7239
7246
  providers: ["openai", "openai-codex", "github-copilot", "opencode"],
7240
7247
  model: "gpt-5.6-sol",
@@ -7246,8 +7253,8 @@ var init_category_model_requirements = __esm(() => {
7246
7253
  fallbackChain: [
7247
7254
  {
7248
7255
  providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
7249
- model: "claude-fable-5",
7250
- variant: "xhigh"
7256
+ model: "claude-fable-5-1",
7257
+ variant: "max"
7251
7258
  },
7252
7259
  {
7253
7260
  providers: ["kimi-for-coding", "moonshotai", "opencode-go", "opencode"],
@@ -7305,6 +7312,11 @@ var init_category_model_requirements = __esm(() => {
7305
7312
  },
7306
7313
  "unspecified-high": {
7307
7314
  fallbackChain: [
7315
+ {
7316
+ providers: ["openai", "openai-codex", "github-copilot", "opencode"],
7317
+ model: "gpt-6-astra",
7318
+ variant: "high"
7319
+ },
7308
7320
  {
7309
7321
  providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
7310
7322
  model: "claude-opus-5",
@@ -7320,17 +7332,16 @@ var init_category_model_requirements = __esm(() => {
7320
7332
  },
7321
7333
  writing: {
7322
7334
  fallbackChain: [
7323
- {
7324
- providers: ["kimi-for-coding", "moonshotai", "opencode-go", "opencode"],
7325
- model: "kimi-k3",
7326
- variant: "low"
7327
- },
7328
7335
  {
7329
7336
  providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
7330
- model: "claude-opus-5",
7331
- variant: "low"
7337
+ model: "claude-fable-5-1",
7338
+ variant: "medium"
7332
7339
  },
7333
- { providers: ["google", "github-copilot", "opencode"], model: "gemini-3.6-flash" }
7340
+ {
7341
+ providers: ["kimi-for-coding", "moonshotai", "opencode-go", "opencode"],
7342
+ model: "kimi-k3",
7343
+ variant: "max"
7344
+ }
7334
7345
  ]
7335
7346
  }
7336
7347
  };
@@ -7433,11 +7444,11 @@ var init_model_capability_aliases = __esm(() => {
7433
7444
  EXACT_ALIAS_RULES_BY_MODEL = new Map(EXACT_ALIAS_RULES.map((rule) => [rule.aliasModelID, rule]));
7434
7445
  PATTERN_ALIAS_RULES = [
7435
7446
  {
7436
- ruleID: "openai-gpt-5.6-fast-service-tier-alias",
7437
- description: "Normalizes OpenCode's OpenAI GPT-5.6 fast service-tier IDs to canonical snapshot IDs.",
7447
+ ruleID: "openai-gpt-fast-service-tier-alias",
7448
+ description: "Normalizes OpenCode's OpenAI GPT fast service-tier IDs to canonical snapshot IDs.",
7438
7449
  providerIDs: ["openai"],
7439
7450
  allowedSubproviderHosts: ["vercel"],
7440
- match: (normalizedModelID) => /^gpt-5\.6-(?:sol|terra|luna)-fast$/.test(normalizedModelID),
7451
+ match: (normalizedModelID) => /^(?:gpt-5\.6-(?:sol|terra|luna)|gpt-6-astra)-fast$/.test(normalizedModelID),
7441
7452
  canonicalize: (normalizedModelID) => normalizedModelID.slice(0, -"-fast".length)
7442
7453
  },
7443
7454
  {
@@ -7577,6 +7588,14 @@ var init_model_capability_heuristics = __esm(() => {
7577
7588
  reasoningEfforts: ["none", "minimal", "low", "medium", "high"],
7578
7589
  supportsTemperature: false
7579
7590
  },
7591
+ {
7592
+ family: "gpt-6",
7593
+ includes: ["gpt-6"],
7594
+ variants: ["low", "medium", "high", "xhigh", "max"],
7595
+ reasoningEfforts: ["low", "medium", "high", "xhigh", "max"],
7596
+ reasoningEffortAliases: { none: "low", minimal: "low" },
7597
+ supportsTemperature: false
7598
+ },
7580
7599
  {
7581
7600
  family: "gpt-5",
7582
7601
  includes: ["gpt-5"],
@@ -7942,6 +7961,37 @@ var init_supplemental_entries = __esm(() => {
7942
7961
  output: 262144
7943
7962
  }
7944
7963
  },
7964
+ "claude-fable-5-1": {
7965
+ id: "claude-fable-5-1",
7966
+ family: "claude-fable",
7967
+ reasoning: true,
7968
+ temperature: false,
7969
+ toolCall: true,
7970
+ modalities: {
7971
+ input: ["text", "image", "pdf"],
7972
+ output: ["text"]
7973
+ },
7974
+ limit: {
7975
+ context: 1e6,
7976
+ output: 128000
7977
+ }
7978
+ },
7979
+ "gpt-6-astra": {
7980
+ id: "gpt-6-astra",
7981
+ family: "gpt",
7982
+ reasoning: true,
7983
+ temperature: false,
7984
+ toolCall: true,
7985
+ modalities: {
7986
+ input: ["text", "image"],
7987
+ output: ["text"]
7988
+ },
7989
+ limit: {
7990
+ context: 1050000,
7991
+ input: 922000,
7992
+ output: 128000
7993
+ }
7994
+ },
7945
7995
  "gpt-5.6-sol": {
7946
7996
  id: "gpt-5.6-sol",
7947
7997
  family: "gpt",
@@ -8017,8 +8067,8 @@ var init_supplemental_entries = __esm(() => {
8017
8067
  output: ["text"]
8018
8068
  },
8019
8069
  limit: {
8020
- context: 400000,
8021
- input: 272000,
8070
+ context: 1050000,
8071
+ input: 922000,
8022
8072
  output: 128000
8023
8073
  }
8024
8074
  },
@@ -8282,7 +8332,7 @@ function getOverride(modelID) {
8282
8332
  function getProviderOverride(providerID, modelID) {
8283
8333
  if (providerID.trim().toLowerCase() !== "github-copilot")
8284
8334
  return;
8285
- return GITHUB_COPILOT_GPT5_MODEL.test(normalizeLookupModelID2(modelID)) ? GITHUB_COPILOT_GPT5_OVERRIDE : undefined;
8335
+ return GITHUB_COPILOT_GPT_MODEL.test(normalizeLookupModelID2(modelID)) ? GITHUB_COPILOT_GPT_OVERRIDE : undefined;
8286
8336
  }
8287
8337
  function stripSameProviderPrefix(providerID, modelID) {
8288
8338
  const prefix = `${providerID.trim()}/`;
@@ -8421,14 +8471,14 @@ function getModelCapabilities(input) {
8421
8471
  }
8422
8472
  };
8423
8473
  }
8424
- var MODEL_ID_OVERRIDES, GITHUB_COPILOT_GPT5_MODEL, GITHUB_COPILOT_GPT5_OVERRIDE;
8474
+ var MODEL_ID_OVERRIDES, GITHUB_COPILOT_GPT_MODEL, GITHUB_COPILOT_GPT_OVERRIDE;
8425
8475
  var init_get_model_capabilities = __esm(() => {
8426
8476
  init_model_capability_aliases();
8427
8477
  init_model_capability_heuristics();
8428
8478
  init_model_string_parser();
8429
8479
  MODEL_ID_OVERRIDES = {};
8430
- GITHUB_COPILOT_GPT5_MODEL = /(?:^|\/)gpt-5(?:[.-]|$)/;
8431
- GITHUB_COPILOT_GPT5_OVERRIDE = {
8480
+ GITHUB_COPILOT_GPT_MODEL = /(?:^|\/)gpt-[56](?:[.-]|$)/;
8481
+ GITHUB_COPILOT_GPT_OVERRIDE = {
8432
8482
  variants: ["low", "medium", "high"],
8433
8483
  reasoningEfforts: ["none", "minimal", "low", "medium", "high"]
8434
8484
  };
@@ -8443,6 +8493,9 @@ var init_model_capabilities = __esm(() => {
8443
8493
  // packages/model-core/src/context-limit-resolver.ts
8444
8494
  var init_context_limit_resolver = () => {};
8445
8495
 
8496
+ // packages/model-core/src/context-overflow.ts
8497
+ var init_context_overflow = () => {};
8498
+
8446
8499
  // packages/model-core/src/model-capabilities-snapshot.ts
8447
8500
  function isRecord3(value) {
8448
8501
  return typeof value === "object" && value !== null && !Array.isArray(value);
@@ -8579,6 +8632,7 @@ var init_src2 = __esm(() => {
8579
8632
  init_runtime_fallback_model();
8580
8633
  init_model_capabilities();
8581
8634
  init_context_limit_resolver();
8635
+ init_context_overflow();
8582
8636
  });
8583
8637
 
8584
8638
  // packages/omo-opencode/src/shared/model-sanitizer.ts
@@ -8780,22 +8834,6 @@ var init_agent_display_names = __esm(() => {
8780
8834
  "athena-junior (council)": "athena-junior"
8781
8835
  };
8782
8836
  });
8783
- // packages/omo-opencode/src/tools/delegate-task/anthropic-categories.ts
8784
- var UNSPECIFIED_HIGH_CATEGORY_PROMPT_APPEND = `<Category_Context>
8785
- You are working on tasks that don't fit specific categories but require substantial effort.
8786
- </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>`, ANTHROPIC_CATEGORIES;
8787
- var init_anthropic_categories = __esm(() => {
8788
- ANTHROPIC_CATEGORIES = [
8789
- {
8790
- name: "unspecified-high",
8791
- config: { model: "anthropic/claude-opus-5", variant: "xhigh" },
8792
- description: "Tasks that don't fit other categories, high effort required",
8793
- callerGuidance: UNSPECIFIED_HIGH_CATEGORY_CALLER_GUIDANCE,
8794
- promptAppend: UNSPECIFIED_HIGH_CATEGORY_PROMPT_APPEND
8795
- }
8796
- ];
8797
- });
8798
-
8799
8837
  // packages/omo-opencode/src/tools/delegate-task/google-categories.ts
8800
8838
  var VISUAL_CATEGORY_PROMPT_APPEND = `<Category_Context>
8801
8839
  You are working on VISUAL/UI tasks.
@@ -8904,13 +8942,13 @@ var init_google_categories = __esm(() => {
8904
8942
  GOOGLE_CATEGORIES = [
8905
8943
  {
8906
8944
  name: "visual-engineering",
8907
- config: { model: "anthropic/claude-opus-5", variant: "max" },
8908
- description: "Frontend, UI/UX, design, styling, animation",
8945
+ config: { model: "anthropic/claude-fable-5-1", variant: "max" },
8946
+ description: "Visual design, UI/UX, frontend, styling, animation, and design systems",
8909
8947
  promptAppend: VISUAL_CATEGORY_PROMPT_APPEND
8910
8948
  },
8911
8949
  {
8912
8950
  name: "artistry",
8913
- config: { model: "anthropic/claude-fable-5", variant: "xhigh" },
8951
+ config: { model: "anthropic/claude-fable-5-1", variant: "max" },
8914
8952
  description: "Complex problem-solving with unconventional, creative approaches - beyond standard patterns",
8915
8953
  promptAppend: ARTISTRY_CATEGORY_PROMPT_APPEND
8916
8954
  }
@@ -8947,7 +8985,7 @@ var init_kimi_categories = __esm(() => {
8947
8985
  KIMI_CATEGORIES = [
8948
8986
  {
8949
8987
  name: "writing",
8950
- config: { model: "kimi-for-coding/k3", variant: "low" },
8988
+ config: { model: "anthropic/claude-fable-5-1", variant: "medium" },
8951
8989
  description: "Documentation, prose, technical writing",
8952
8990
  promptAppend: WRITING_CATEGORY_PROMPT_APPEND
8953
8991
  }
@@ -8966,16 +9004,58 @@ function isGpt5_6Model(model) {
8966
9004
  const modelName = extractModelName2(model).toLowerCase();
8967
9005
  return modelName.includes("gpt-5.6") || modelName.includes("gpt-5-6");
8968
9006
  }
9007
+ function isGpt6Model(model) {
9008
+ const modelName = extractModelName2(model).toLowerCase();
9009
+ return modelName.includes("gpt-6");
9010
+ }
8969
9011
  var init_types = () => {};
8970
9012
 
8971
9013
  // packages/omo-opencode/src/tools/delegate-task/openai-categories.ts
9014
+ function resolveUltrabrainCategoryPromptAppend(model) {
9015
+ if (model && isGpt6Model(model)) {
9016
+ return ULTRABRAIN_CATEGORY_PROMPT_APPEND_GPT_6_ASTRA;
9017
+ }
9018
+ return ULTRABRAIN_CATEGORY_PROMPT_APPEND;
9019
+ }
8972
9020
  function resolveDeepCategoryPromptAppend(model) {
9021
+ if (model && isGpt6Model(model)) {
9022
+ return DEEP_CATEGORY_PROMPT_APPEND_GPT_6_ASTRA;
9023
+ }
8973
9024
  if (model && (isGpt5_5Model(model) || isGpt5_6Model(model))) {
8974
9025
  return DEEP_CATEGORY_PROMPT_APPEND_GPT_5_5;
8975
9026
  }
8976
9027
  return DEEP_CATEGORY_PROMPT_APPEND;
8977
9028
  }
8978
- var ULTRABRAIN_CATEGORY_PROMPT_APPEND = `<Category_Context>
9029
+ function resolveUnspecifiedHighCategoryPromptAppend(model) {
9030
+ if (model && isGpt6Model(model)) {
9031
+ return UNSPECIFIED_HIGH_CATEGORY_PROMPT_APPEND_GPT_6_ASTRA;
9032
+ }
9033
+ return UNSPECIFIED_HIGH_CATEGORY_PROMPT_APPEND;
9034
+ }
9035
+ var ULTRABRAIN_CATEGORY_PROMPT_APPEND_GPT_6_ASTRA = `<Category_Context name="ultrabrain">
9036
+ The orchestrator routed this task here because it is the one genuinely hard, logic-heavy problem in its plan, and it sent a goal rather than steps: choose the approach yourself, and let correctness outrank speed, brevity, and token cost.
9037
+
9038
+ Success means:
9039
+ - every load-bearing claim cites evidence from this turn: a file and line read, a command run, a test executed;
9040
+ - every executable claim was executed: a proposed fix runs, an algorithm passes the boundary cases you enumerated, a verdict on a diff names the failing line;
9041
+ - the conclusion survived your own attempt to break it, and the answer names the strongest counter-case you looked for;
9042
+ - rejected alternatives carry the reason that decided against them, and open assumptions are stated so the orchestrator can overturn them;
9043
+ - one decision-complete recommendation, actionable without a follow-up question.
9044
+
9045
+ Whatever that check leaves unsettled goes in the answer as an open question with what would settle it. When the goal bundles independent problems, solve the one the others depend on and return the rest as separately delegable items.
9046
+ </Category_Context>`, DEEP_CATEGORY_PROMPT_APPEND_GPT_6_ASTRA = `<Category_Context name="deep">
9047
+ The orchestrator routed this task here for depth: one goal, one deliverable, and the time to earn it. The exploration budget is generous: read every file involved, trace callers and dependencies in both directions, and fan out explore and librarian subagents in parallel for the questions a single read wave cannot answer, until you can explain the full mechanism you are about to change; an edit made before that point is the failure this category exists to prevent.
9048
+
9049
+ **MUST USE \`deep\` FOR 3D GRAPHICS, COMPUTER USE, BROWSER USE, BACKEND, LOGIC, ALGORITHMS, CAPTCHA SOLVING, AND MULTIMODAL WORK.**
9050
+
9051
+ The goal is the authorization. Choose how to reach it yourself, and when it lists numbered steps or phases, deliver all of them in this turn as one task; a proposal, a plan awaiting approval, a simplified version, or a proof of concept is unfinished work. When the steps turn out to be independent problems sharing no reasoning, do the one the goal centers on and return the others as separately delegable items with what you learned. A question ends your turn and hands the task back unfinished, so decide from context, record each assumption in the final message, and stop early only for a blocker you cannot route around: a missing secret, a decision only the user can make, or three materially different attempts that all failed.
9052
+
9053
+ Fix the cause: trace at least two levels above the symptom before settling, and prefer the change that makes the failure impossible over the guard that hides it. Depth means understanding the mechanism, so the diff stays as small as the fix allows; on greenfield work choose strong defaults and finish something you would hand to a senior engineer. Close with the delivered change, the evidence that it works, and the assumptions you made.
9054
+ </Category_Context>`, UNSPECIFIED_HIGH_CATEGORY_PROMPT_APPEND_GPT_6_ASTRA = `<Category_Context name="unspecified-high">
9055
+ The orchestrator routed this task here because it spans systems or modules and fits no specialist category, so breadth of consideration is what this category buys. Before committing to an approach, survey the whole surface the change touches: every caller and consumer of what you will modify, sibling modules that implement the same pattern, the tests, docs, schemas, config, scripts, and CI that encode the current behavior, and the history of the area (git log and blame) for the reasons it is shaped this way. Fan out explore and librarian subagents in parallel when that surface is wider than one read wave covers.
9056
+
9057
+ Weigh at least two ways to do it against what you found, choose one, and say in the final message why it won. Then deliver it across every surface you identified, so behavior stays consistent everywhere the change is observable and no caller, test, doc, schema, or config still describes the old state. A question ends your turn and hands the task back unfinished, so decide from context, record each assumption in the final message, and finish.
9058
+ </Category_Context>`, ULTRABRAIN_CATEGORY_PROMPT_APPEND = `<Category_Context>
8979
9059
  You are working on DEEP LOGICAL REASONING / COMPLEX ARCHITECTURE tasks.
8980
9060
 
8981
9061
  **CRITICAL - CODE STYLE REQUIREMENTS (NON-NEGOTIABLE)**:
@@ -9000,6 +9080,8 @@ You are working on GOAL-ORIENTED AUTONOMOUS tasks.
9000
9080
 
9001
9081
  You are NOT an interactive assistant. You are an autonomous problem-solver.
9002
9082
 
9083
+ **MUST USE \`deep\` FOR 3D GRAPHICS, COMPUTER USE, BROWSER USE, BACKEND, LOGIC, ALGORITHMS, CAPTCHA SOLVING, AND MULTIMODAL WORK.**
9084
+
9003
9085
  BEFORE making ANY changes:
9004
9086
  1. Silently explore the codebase extensively (5-15 minutes of reading is normal)
9005
9087
  2. Read related files, trace dependencies, understand the full context
@@ -9017,6 +9099,8 @@ Minimal status updates. Focus on results, not play-by-play. Report completion wi
9017
9099
  </Category_Context>`, DEEP_CATEGORY_PROMPT_APPEND_GPT_5_5 = `<Category_Context name="deep">
9018
9100
  You are operating in DEEP mode. This is the category reserved for goal-oriented autonomous work on hairy problems that reward thorough exploration and comprehensive solutions.
9019
9101
 
9102
+ **MUST USE \`deep\` FOR 3D GRAPHICS, COMPUTER USE, BROWSER USE, BACKEND, LOGIC, ALGORITHMS, CAPTCHA SOLVING, AND MULTIMODAL WORK.**
9103
+
9020
9104
  The orchestrator chose this category because the task benefits from depth over speed. You should feel empowered to spend the time needed: five to fifteen minutes of silent exploration before the first edit is normal and correct. Rushing to implementation on a deep task is a failure mode, not a feature.
9021
9105
 
9022
9106
  # How deep mode adjusts the base behavior
@@ -9050,23 +9134,27 @@ Approach:
9050
9134
  </Category_Context>`, QUICK_CATEGORY_CALLER_GUIDANCE = `<Caller_Warning>Small/fast model: before delegating, write an explicit prompt with numbered must-do steps, forbidden deviations, and concrete success criteria.</Caller_Warning>`, UNSPECIFIED_LOW_CATEGORY_PROMPT_APPEND = `<Category_Context>
9051
9135
  You are working on tasks that don't fit specific categories but require moderate effort.
9052
9136
  </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>
9053
- <Caller_Warning>Provide explicit must-do steps, forbidden scope, and concrete success criteria.</Caller_Warning>`, OPENAI_CATEGORIES;
9137
+ <Caller_Warning>Provide explicit must-do steps, forbidden scope, and concrete success criteria.</Caller_Warning>`, UNSPECIFIED_HIGH_CATEGORY_PROMPT_APPEND = `<Category_Context>
9138
+ You are working on tasks that don't fit specific categories but require substantial effort.
9139
+ </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>`, GPT_FLAGSHIP_GATE_MODELS, OPENAI_CATEGORIES;
9054
9140
  var init_openai_categories = __esm(() => {
9055
9141
  init_types();
9142
+ GPT_FLAGSHIP_GATE_MODELS = ["gpt-6-astra", "gpt-5.6-sol"];
9056
9143
  OPENAI_CATEGORIES = [
9057
9144
  {
9058
9145
  name: "ultrabrain",
9059
- config: { model: "openai/gpt-5.6-sol", variant: "xhigh" },
9146
+ config: { model: "openai/gpt-6-astra", variant: "max" },
9060
9147
  description: "Use ONLY for genuinely hard, logic-heavy tasks. Give clear goals only, not step-by-step instructions.",
9061
- promptAppend: ULTRABRAIN_CATEGORY_PROMPT_APPEND
9148
+ promptAppend: ULTRABRAIN_CATEGORY_PROMPT_APPEND,
9149
+ resolvePromptAppend: resolveUltrabrainCategoryPromptAppend
9062
9150
  },
9063
9151
  {
9064
9152
  name: "deep",
9065
- config: { model: "openai/gpt-5.6-sol", variant: "medium" },
9066
- description: "Goal-oriented autonomous problem-solving on hairy problems requiring deep research. ONE goal + ONE deliverable per call — multiple goals must fan out as parallel `deep` calls, never bundled into one.",
9153
+ config: { model: "openai/gpt-6-astra", variant: "high" },
9154
+ description: "**MANDATORY: USE deep FOR 3D GRAPHICS, COMPUTER USE, BROWSER USE, BACKEND, LOGIC, ALGORITHMS, CAPTCHA SOLVING, AND MULTIMODAL WORK.** Deep autonomous problem-solving for complex research. ONE goal + ONE deliverable per call — multiple goals must fan out as parallel `deep` calls, never bundled into one.",
9067
9155
  promptAppend: DEEP_CATEGORY_PROMPT_APPEND,
9068
9156
  resolvePromptAppend: resolveDeepCategoryPromptAppend,
9069
- requiresModel: "gpt-5.6-sol"
9157
+ requiresModel: GPT_FLAGSHIP_GATE_MODELS
9070
9158
  },
9071
9159
  {
9072
9160
  name: "quick",
@@ -9081,6 +9169,14 @@ var init_openai_categories = __esm(() => {
9081
9169
  description: "Tasks that don't fit other categories, low effort required",
9082
9170
  callerGuidance: UNSPECIFIED_LOW_CATEGORY_CALLER_GUIDANCE,
9083
9171
  promptAppend: UNSPECIFIED_LOW_CATEGORY_PROMPT_APPEND
9172
+ },
9173
+ {
9174
+ name: "unspecified-high",
9175
+ config: { model: "openai/gpt-6-astra", variant: "high" },
9176
+ description: "Tasks that don't fit other categories, high effort required",
9177
+ callerGuidance: UNSPECIFIED_HIGH_CATEGORY_CALLER_GUIDANCE,
9178
+ promptAppend: UNSPECIFIED_HIGH_CATEGORY_PROMPT_APPEND,
9179
+ resolvePromptAppend: resolveUnspecifiedHighCategoryPromptAppend
9084
9180
  }
9085
9181
  ];
9086
9182
  });
@@ -9091,14 +9187,12 @@ function buildCategoryRecord(selector) {
9091
9187
  }
9092
9188
  var BUILTIN_CATEGORIES, DEFAULT_CATEGORIES, CATEGORY_PROMPT_APPENDS, CATEGORY_DESCRIPTIONS, CATEGORY_CALLER_GUIDANCE, CATEGORY_PROMPT_APPEND_RESOLVERS, BUILTIN_CATEGORY_REQUIRES_MODEL;
9093
9189
  var init_builtin_categories = __esm(() => {
9094
- init_anthropic_categories();
9095
9190
  init_google_categories();
9096
9191
  init_kimi_categories();
9097
9192
  init_openai_categories();
9098
9193
  BUILTIN_CATEGORIES = [
9099
9194
  ...GOOGLE_CATEGORIES,
9100
9195
  ...OPENAI_CATEGORIES,
9101
- ...ANTHROPIC_CATEGORIES,
9102
9196
  ...KIMI_CATEGORIES
9103
9197
  ];
9104
9198
  DEFAULT_CATEGORIES = buildCategoryRecord((definition) => definition.config);
@@ -9106,7 +9200,10 @@ var init_builtin_categories = __esm(() => {
9106
9200
  CATEGORY_DESCRIPTIONS = buildCategoryRecord((definition) => definition.description);
9107
9201
  CATEGORY_CALLER_GUIDANCE = buildCategoryRecord((definition) => definition.callerGuidance);
9108
9202
  CATEGORY_PROMPT_APPEND_RESOLVERS = Object.fromEntries(BUILTIN_CATEGORIES.filter((definition) => definition.resolvePromptAppend !== undefined).map((definition) => [definition.name, definition.resolvePromptAppend]));
9109
- BUILTIN_CATEGORY_REQUIRES_MODEL = Object.fromEntries(BUILTIN_CATEGORIES.filter((definition) => definition.requiresModel !== undefined).map((definition) => [definition.name, definition.requiresModel]));
9203
+ BUILTIN_CATEGORY_REQUIRES_MODEL = Object.fromEntries(BUILTIN_CATEGORIES.filter((definition) => definition.requiresModel !== undefined).map((definition) => [
9204
+ definition.name,
9205
+ typeof definition.requiresModel === "string" ? [definition.requiresModel] : definition.requiresModel
9206
+ ]));
9110
9207
  });
9111
9208
 
9112
9209
  // packages/omo-opencode/src/tools/delegate-task/constants.ts
@@ -12598,8 +12695,8 @@ var init_model_capabilities_generated = __esm(() => {
12598
12695
  ]
12599
12696
  },
12600
12697
  limit: {
12601
- context: 400000,
12602
- input: 272000,
12698
+ context: 1050000,
12699
+ input: 922000,
12603
12700
  output: 128000
12604
12701
  }
12605
12702
  },
@@ -82494,7 +82591,6 @@ var init_memory = __esm(() => {
82494
82591
  OmoMemorySettingsSchema = object({
82495
82592
  enabled: boolean2().default(true),
82496
82593
  agent: string2().min(1).default("auto"),
82497
- tool_exposure: _enum2(["direct", "search"]).default("direct"),
82498
82594
  reflection: OmoMemoryReflectionSchema.default({
82499
82595
  enabled: true,
82500
82596
  trigger: { step_count: 25, on_compaction: true },
@@ -82525,7 +82621,6 @@ var init_memory = __esm(() => {
82525
82621
  OmoMemorySettingsLayerSchema = object({
82526
82622
  enabled: boolean2().optional(),
82527
82623
  agent: string2().min(1).optional(),
82528
- tool_exposure: _enum2(["direct", "search"]).optional(),
82529
82624
  reflection: OmoMemoryReflectionLayerSchema.optional(),
82530
82625
  nudge: OmoMemoryNudgeLayerSchema.optional(),
82531
82626
  facts: OmoMemoryFactsLayerSchema.optional(),
@@ -86566,20 +86661,20 @@ var init_config_manager = __esm(() => {
86566
86661
 
86567
86662
  // packages/telemetry-core/src/activity-state.ts
86568
86663
  import { existsSync as existsSync25, mkdirSync as mkdirSync8, readFileSync as readFileSync12 } from "node:fs";
86569
- import { basename as basename8, join as join52 } from "node:path";
86664
+ import { basename as basename8, join as join51 } from "node:path";
86570
86665
  function resolveTelemetryStateDir(product, options = {}) {
86571
86666
  const dataDir = resolveXdgDataDir(product.cacheDirName, {
86572
86667
  env: options.env,
86573
86668
  osProvider: options.osProvider
86574
86669
  });
86575
- const xdgStateDir = options.env?.XDG_DATA_HOME === undefined ? undefined : join52(options.env.XDG_DATA_HOME, product.cacheDirName);
86670
+ const xdgStateDir = options.env?.XDG_DATA_HOME === undefined ? undefined : join51(options.env.XDG_DATA_HOME, product.cacheDirName);
86576
86671
  if (dataDir === xdgStateDir || xdgStateDir === undefined && basename8(dataDir) === product.cacheDirName) {
86577
86672
  return dataDir;
86578
86673
  }
86579
- return join52(dataDir, product.cacheDirName);
86674
+ return join51(dataDir, product.cacheDirName);
86580
86675
  }
86581
86676
  function getTelemetryActivityStateFilePath(stateDir) {
86582
- return join52(stateDir, POSTHOG_ACTIVITY_STATE_FILE);
86677
+ return join51(stateDir, POSTHOG_ACTIVITY_STATE_FILE);
86583
86678
  }
86584
86679
  function getDailyActiveCaptureState(input) {
86585
86680
  const state = readPostHogActivityState(input.stateDir, input.diagnostics);
@@ -86650,9 +86745,9 @@ var DEFAULT_POSTHOG_HOST = "https://us.i.posthog.com", DEFAULT_POSTHOG_API_KEY =
86650
86745
 
86651
86746
  // packages/telemetry-core/src/diagnostics.ts
86652
86747
  import { appendFileSync as appendFileSync2, existsSync as existsSync26, mkdirSync as mkdirSync9, readFileSync as readFileSync13 } from "node:fs";
86653
- import { join as join53 } from "node:path";
86748
+ import { join as join52 } from "node:path";
86654
86749
  function getTelemetryDiagnosticsFilePath(diagnosticsDir) {
86655
- return join53(diagnosticsDir, DIAGNOSTICS_FILE_NAME);
86750
+ return join52(diagnosticsDir, DIAGNOSTICS_FILE_NAME);
86656
86751
  }
86657
86752
  function writeTelemetryDiagnostic(input, options) {
86658
86753
  const now = options.now ?? new Date;
@@ -94431,7 +94526,7 @@ var package_default2;
94431
94526
  var init_package2 = __esm(() => {
94432
94527
  package_default2 = {
94433
94528
  name: "@oh-my-opencode/omo-codex",
94434
- version: "5.0.0-beta.42",
94529
+ version: "5.0.0-beta.44",
94435
94530
  type: "module",
94436
94531
  private: true,
94437
94532
  description: "Codex harness adapter for oh-my-openagent. Vendored Codex plugin namespace (omo) + TypeScript installer + telemetry.",
@@ -95399,7 +95494,7 @@ var init_update_toasts = __esm(() => {
95399
95494
 
95400
95495
  // packages/omo-opencode/src/hooks/auto-update-checker/hook/background-update-check.ts
95401
95496
  import { existsSync as existsSync47 } from "node:fs";
95402
- import { dirname as dirname30, join as join75 } from "node:path";
95497
+ import { dirname as dirname30, join as join74 } from "node:path";
95403
95498
  import { fileURLToPath as fileURLToPath5 } from "node:url";
95404
95499
  function defaultGetModuleHostingWorkspace() {
95405
95500
  try {
@@ -95553,7 +95648,7 @@ var init_background_update_check = __esm(() => {
95553
95648
  init_update_toasts();
95554
95649
  defaultDeps4 = {
95555
95650
  existsSync: existsSync47,
95556
- join: join75,
95651
+ join: join74,
95557
95652
  runBunInstallWithDetails,
95558
95653
  log: log2,
95559
95654
  getOpenCodeCacheDir,
@@ -98190,7 +98285,7 @@ function getUnsupportedOpenCodeVersionMessage(openCodeVersion) {
98190
98285
  }
98191
98286
 
98192
98287
  // packages/omo-codex/src/install/install-codex.ts
98193
- import { join as join54, resolve as resolve12 } from "node:path";
98288
+ import { join as join53, resolve as resolve12 } from "node:path";
98194
98289
  import { existsSync as existsSync27 } from "node:fs";
98195
98290
  import { homedir as homedir6 } from "node:os";
98196
98291
 
@@ -102496,26 +102591,9 @@ async function removeGitBashHooksOffWindows(input) {
102496
102591
  `);
102497
102592
  }
102498
102593
 
102499
- // packages/omo-codex/src/install/omo-sot-migration.ts
102500
- import { join as join50 } from "node:path";
102501
- async function seedAndMigrateOmoSot(input) {
102502
- const commandEnv = { ...input.env };
102503
- const scriptPath = join50(input.repoRoot, "packages", "omo-codex", "plugin", "scripts", "migrate-omo-sot.mjs");
102504
- try {
102505
- await input.runCommand(process.execPath, [scriptPath, "--seed"], {
102506
- cwd: input.repoRoot,
102507
- env: commandEnv
102508
- });
102509
- } catch (error51) {
102510
- if (!(error51 instanceof Error))
102511
- throw error51;
102512
- input.log(`Warning: skipped OMO SOT seed/migration: ${error51.message}`);
102513
- }
102514
- }
102515
-
102516
102594
  // packages/omo-codex/src/install/install-ast-grep-sg.ts
102517
102595
  init_src();
102518
- import { join as join51 } from "node:path";
102596
+ import { join as join50 } from "node:path";
102519
102597
  function describeResult(result) {
102520
102598
  if (result.kind === "succeeded")
102521
102599
  return null;
@@ -102529,7 +102607,7 @@ async function installAstGrepForCodex(options) {
102529
102607
  return;
102530
102608
  const platform = options.platform ?? process.platform;
102531
102609
  const targetDir = astGrepRuntimeDir(options.codexHome, platform, options.arch ?? process.arch);
102532
- const skillDir = join51(plugin.path, "skills", "ast-grep");
102610
+ const skillDir = join50(plugin.path, "skills", "ast-grep");
102533
102611
  const installer = options.installer ?? runAstGrepSkillInstall;
102534
102612
  try {
102535
102613
  const result = await installer({ platform, skillDir, targetDir });
@@ -102562,7 +102640,7 @@ async function runCodexInstaller(options = {}) {
102562
102640
  const env2 = options.env ?? process.env;
102563
102641
  const platform = options.platform ?? process.platform;
102564
102642
  const repoRoot = resolve12(options.repoRoot ?? findRepoRoot({ importerDir: import.meta.dir, env: env2 }));
102565
- const codexHome = resolve12(options.codexHome ?? env2.CODEX_HOME ?? join54(homedir6(), ".codex"));
102643
+ const codexHome = resolve12(options.codexHome ?? env2.CODEX_HOME ?? join53(homedir6(), ".codex"));
102566
102644
  const projectDirectory = resolve12(options.projectDirectory ?? env2.OMO_CODEX_PROJECT ?? process.cwd());
102567
102645
  const binDir = resolveCodexInstallerBinDir({ binDir: options.binDir, codexHome, env: env2 });
102568
102646
  const runCommand = options.runCommand ?? defaultRunCommand;
@@ -102579,9 +102657,9 @@ async function runCodexInstaller(options = {}) {
102579
102657
  if (!gitBashResolution.found) {
102580
102658
  throw new Error(gitBashResolution.installHint);
102581
102659
  }
102582
- const codexPackageRoot = join54(repoRoot, "packages", "omo-codex");
102660
+ const codexPackageRoot = join53(repoRoot, "packages", "omo-codex");
102583
102661
  const marketplace = await readMarketplace(repoRoot, {
102584
- marketplacePath: join54(codexPackageRoot, "marketplace.json")
102662
+ marketplacePath: join53(codexPackageRoot, "marketplace.json")
102585
102663
  });
102586
102664
  const distributionManifest = await readDistributionManifest(repoRoot);
102587
102665
  const installed = [];
@@ -102627,7 +102705,7 @@ async function runCodexInstaller(options = {}) {
102627
102705
  if (runtimeLink !== null)
102628
102706
  log4(`Linked ${runtimeLink.name} -> ${runtimeLink.target}`);
102629
102707
  else
102630
- log4(`Warning: skipped the omo-agent-toolkit runtime wrapper because ${join54(repoRoot, "dist", "cli", "index.js")} is missing; omo-agent-toolkit ulw-loop commands will be unavailable until a package shipping dist/cli is installed`);
102708
+ log4(`Warning: skipped the omo-agent-toolkit runtime wrapper because ${join53(repoRoot, "dist", "cli", "index.js")} is missing; omo-agent-toolkit ulw-loop commands will be unavailable until a package shipping dist/cli is installed`);
102631
102709
  }
102632
102710
  pluginSources.push({ name: entry.name, sourcePath });
102633
102711
  installed.push(plugin);
@@ -102690,13 +102768,13 @@ async function runCodexInstaller(options = {}) {
102690
102768
  continue;
102691
102769
  log4(`Warning: deferred legacy Codex LSP daemon cleanup for v${cleanup.version}: ${cleanup.reason}`);
102692
102770
  }
102693
- const marketplaceRoot = join54(codexHome, "plugins", "cache", marketplace.name);
102771
+ const marketplaceRoot = join53(codexHome, "plugins", "cache", marketplace.name);
102694
102772
  await writeCachedMarketplaceManifest({
102695
102773
  marketplaceName: marketplace.name,
102696
102774
  marketplaceRoot,
102697
102775
  plugins: installed
102698
102776
  });
102699
- const configPath = join54(codexHome, "config.toml");
102777
+ const configPath = join53(codexHome, "config.toml");
102700
102778
  await updateCodexConfig({
102701
102779
  configPath,
102702
102780
  repoRoot: codexPackageRoot,
@@ -102710,7 +102788,6 @@ async function runCodexInstaller(options = {}) {
102710
102788
  autonomousPermissions: options.autonomousPermissions !== false,
102711
102789
  ...options.reasoning === undefined ? {} : { reasoning: options.reasoning }
102712
102790
  });
102713
- await seedAndMigrateOmoSot({ env: env2, log: log4, repoRoot, runCommand });
102714
102791
  const projectCleanup = await repairProjectLocalCodexArtifactsBestEffort({
102715
102792
  startDirectory: projectDirectory,
102716
102793
  codexHome,
@@ -102756,7 +102833,7 @@ function findRepoRootFromImporter(importerDir) {
102756
102833
  for (let depth = 0;depth <= 7; depth += 1) {
102757
102834
  if (isRepoRootWithCodexPlugin(current))
102758
102835
  return current;
102759
- for (const wrapperPackageRoot of [join54(current, "node_modules", "oh-my-openagent"), join54(current, "oh-my-openagent")]) {
102836
+ for (const wrapperPackageRoot of [join53(current, "node_modules", "oh-my-openagent"), join53(current, "oh-my-openagent")]) {
102760
102837
  if (isRepoRootWithCodexPlugin(wrapperPackageRoot))
102761
102838
  return wrapperPackageRoot;
102762
102839
  }
@@ -102774,7 +102851,7 @@ function findRepoRoot(input) {
102774
102851
  return findRepoRootFromImporter(input.importerDir);
102775
102852
  }
102776
102853
  function isRepoRootWithCodexPlugin(repoRoot) {
102777
- return existsSync27(join54(repoRoot, "packages", "omo-codex", "plugin", ".codex-plugin", "plugin.json"));
102854
+ return existsSync27(join53(repoRoot, "packages", "omo-codex", "plugin", ".codex-plugin", "plugin.json"));
102778
102855
  }
102779
102856
  function codexMarketplaceSource(marketplaceRoot) {
102780
102857
  return { sourceType: "local", source: marketplaceRoot };
@@ -102911,11 +102988,11 @@ function defaultRunCommand2(command, args) {
102911
102988
  // packages/omo-codex/src/install/codex-cleanup.ts
102912
102989
  import { lstat as lstat14, readFile as readFile24, readdir as readdir13, rm as rm12, rmdir } from "node:fs/promises";
102913
102990
  import { homedir as homedir8 } from "node:os";
102914
- import { isAbsolute as isAbsolute11, join as join57, relative as relative6, resolve as resolve15 } from "node:path";
102991
+ import { isAbsolute as isAbsolute11, join as join56, relative as relative6, resolve as resolve15 } from "node:path";
102915
102992
 
102916
102993
  // packages/omo-codex/src/install/codex-cleanup-bins.ts
102917
102994
  import { lstat as lstat12, readFile as readFile22, readdir as readdir12, readlink as readlink6, rm as rm11 } from "node:fs/promises";
102918
- import { dirname as dirname18, isAbsolute as isAbsolute9, join as join55, resolve as resolve13 } from "node:path";
102995
+ import { dirname as dirname18, isAbsolute as isAbsolute9, join as join54, resolve as resolve13 } from "node:path";
102919
102996
  var ROOT_RUNTIME_BIN_NAME = "omo";
102920
102997
  var MANAGED_CODEX_BIN_NAMES = new Set([
102921
102998
  ROOT_RUNTIME_BIN_NAME,
@@ -102945,7 +103022,7 @@ async function removeManagedCodexBins(binDir, platform) {
102945
103022
  const binName = managedBinNameForEntry2(entry.name, platform);
102946
103023
  if (binName === null || !MANAGED_CODEX_BIN_NAMES.has(binName))
102947
103024
  continue;
102948
- const linkPath = join55(binDir, entry.name);
103025
+ const linkPath = join54(binDir, entry.name);
102949
103026
  if (await isManagedCodexBin(linkPath, platform, binName)) {
102950
103027
  await rm11(linkPath, { force: true });
102951
103028
  removed2.push(linkPath);
@@ -103098,7 +103175,7 @@ function nodeErrorCode5(error51) {
103098
103175
  }
103099
103176
 
103100
103177
  // packages/omo-codex/src/install/codex-cleanup-safety.ts
103101
- import { dirname as dirname20, isAbsolute as isAbsolute10, join as join56, relative as relative5, resolve as resolve14 } from "node:path";
103178
+ import { dirname as dirname20, isAbsolute as isAbsolute10, join as join55, relative as relative5, resolve as resolve14 } from "node:path";
103102
103179
  function codexHomeResolvesToFilesystemRoot(codexHome) {
103103
103180
  const resolved = resolve14(codexHome);
103104
103181
  return dirname20(resolved) === resolved;
@@ -103115,11 +103192,11 @@ function validateManagedCleanupTarget(input) {
103115
103192
  if (target === codexHome)
103116
103193
  return skipped(input.path, "outside managed Codex cleanup scope");
103117
103194
  const exactManagedRoots = new Set([
103118
- resolve14(join56(codexHome, "plugins", "cache", "sisyphuslabs")),
103119
- resolve14(join56(codexHome, ".tmp", "marketplaces", "sisyphuslabs")),
103120
- resolve14(join56(codexHome, "runtime", "ast-grep")),
103121
- resolve14(join56(codexHome, "runtime", "node")),
103122
- resolve14(join56(codexHome, "plugins", "data", "omo-sisyphuslabs", "bootstrap"))
103195
+ resolve14(join55(codexHome, "plugins", "cache", "sisyphuslabs")),
103196
+ resolve14(join55(codexHome, ".tmp", "marketplaces", "sisyphuslabs")),
103197
+ resolve14(join55(codexHome, "runtime", "ast-grep")),
103198
+ resolve14(join55(codexHome, "runtime", "node")),
103199
+ resolve14(join55(codexHome, "plugins", "data", "omo-sisyphuslabs", "bootstrap"))
103123
103200
  ]);
103124
103201
  if (exactManagedRoots.has(target))
103125
103202
  return null;
@@ -103149,8 +103226,8 @@ function skipped(path7, reason) {
103149
103226
  var INSTALLED_AGENTS_MANIFEST = ".installed-agents.json";
103150
103227
  async function cleanupCodexLight(input = {}) {
103151
103228
  const env2 = input.env ?? process.env;
103152
- const codexHome = resolve15(input.codexHome ?? env2.CODEX_HOME ?? join57(homedir8(), ".codex"));
103153
- const configPath = join57(codexHome, "config.toml");
103229
+ const codexHome = resolve15(input.codexHome ?? env2.CODEX_HOME ?? join56(homedir8(), ".codex"));
103230
+ const configPath = join56(codexHome, "config.toml");
103154
103231
  const installedBinDir = await readInstalledCodexBinDir(codexHome);
103155
103232
  const agentPaths = await collectInstalledAgentPaths(codexHome, configPath);
103156
103233
  const configCleanup = await cleanupCodexConfig(configPath, input.now);
@@ -103204,17 +103281,17 @@ function firstConfiguredPath(...values) {
103204
103281
  }
103205
103282
  function managedGlobalStatePaths(codexHome) {
103206
103283
  return [
103207
- join57(codexHome, "plugins", "cache", "sisyphuslabs"),
103208
- join57(codexHome, ".tmp", "marketplaces", "sisyphuslabs"),
103209
- join57(codexHome, "runtime", "ast-grep"),
103210
- join57(codexHome, "runtime", "node"),
103211
- join57(codexHome, "plugins", "data", "omo-sisyphuslabs", "bootstrap")
103284
+ join56(codexHome, "plugins", "cache", "sisyphuslabs"),
103285
+ join56(codexHome, ".tmp", "marketplaces", "sisyphuslabs"),
103286
+ join56(codexHome, "runtime", "ast-grep"),
103287
+ join56(codexHome, "runtime", "node"),
103288
+ join56(codexHome, "plugins", "data", "omo-sisyphuslabs", "bootstrap")
103212
103289
  ];
103213
103290
  }
103214
103291
  var BOOTSTRAP_DATA_GLOB_MAX_DEPTH = 5;
103215
103292
  async function collectBootstrapDataDirsByGlob(codexHome) {
103216
103293
  const results = [];
103217
- await walkForManagedBootstrapDirs(join57(codexHome, "plugins"), 0, results);
103294
+ await walkForManagedBootstrapDirs(join56(codexHome, "plugins"), 0, results);
103218
103295
  return results;
103219
103296
  }
103220
103297
  async function walkForManagedBootstrapDirs(directory, depth, results) {
@@ -103226,9 +103303,9 @@ async function walkForManagedBootstrapDirs(directory, depth, results) {
103226
103303
  for (const entry of entries) {
103227
103304
  if (!entry.isDirectory())
103228
103305
  continue;
103229
- const childPath = join57(directory, entry.name);
103306
+ const childPath = join56(directory, entry.name);
103230
103307
  if (isManagedBootstrapOwnerName(entry.name)) {
103231
- const bootstrapDir = join57(childPath, "bootstrap");
103308
+ const bootstrapDir = join56(childPath, "bootstrap");
103232
103309
  if (await exists6(bootstrapDir))
103233
103310
  results.push(bootstrapDir);
103234
103311
  continue;
@@ -103262,7 +103339,7 @@ async function attemptRemove(path7) {
103262
103339
  }
103263
103340
  async function pruneEmptyRuntimeDirBestEffort(codexHome) {
103264
103341
  try {
103265
- await rmdir(join57(codexHome, "runtime"));
103342
+ await rmdir(join56(codexHome, "runtime"));
103266
103343
  } catch (error51) {
103267
103344
  if (isExpectedRuntimePruneFailure(error51))
103268
103345
  return;
@@ -103274,14 +103351,14 @@ function isExpectedRuntimePruneFailure(error51) {
103274
103351
  }
103275
103352
  async function collectInstalledAgentPaths(codexHome, configPath) {
103276
103353
  const manifestPaths = [
103277
- join57(codexHome, ".tmp", "marketplaces", "sisyphuslabs", "plugins", "omo", INSTALLED_AGENTS_MANIFEST)
103354
+ join56(codexHome, ".tmp", "marketplaces", "sisyphuslabs", "plugins", "omo", INSTALLED_AGENTS_MANIFEST)
103278
103355
  ];
103279
- const versionRoot = join57(codexHome, "plugins", "cache", "sisyphuslabs", "omo");
103356
+ const versionRoot = join56(codexHome, "plugins", "cache", "sisyphuslabs", "omo");
103280
103357
  if (await exists6(versionRoot)) {
103281
103358
  const entries = await readdir13(versionRoot, { withFileTypes: true });
103282
103359
  for (const entry of entries) {
103283
103360
  if (entry.isDirectory())
103284
- manifestPaths.push(join57(versionRoot, entry.name, INSTALLED_AGENTS_MANIFEST));
103361
+ manifestPaths.push(join56(versionRoot, entry.name, INSTALLED_AGENTS_MANIFEST));
103285
103362
  }
103286
103363
  }
103287
103364
  const paths2 = new Set;
@@ -103299,7 +103376,7 @@ async function readManagedAgentPathsFromConfig(codexHome, configPath) {
103299
103376
  if (!await exists6(configPath))
103300
103377
  return [];
103301
103378
  const config3 = await readFile24(configPath, "utf8");
103302
- return MANAGED_CODEX_AGENT_NAMES2.filter((agentName) => config3.includes(`config_file = ${JSON.stringify(`./agents/${agentName}.toml`)}`)).map((agentName) => join57(codexHome, "agents", `${agentName}.toml`));
103379
+ return MANAGED_CODEX_AGENT_NAMES2.filter((agentName) => config3.includes(`config_file = ${JSON.stringify(`./agents/${agentName}.toml`)}`)).map((agentName) => join56(codexHome, "agents", `${agentName}.toml`));
103303
103380
  }
103304
103381
  async function readInstalledAgentManifest(manifestPath) {
103305
103382
  if (!await exists6(manifestPath))
@@ -103310,7 +103387,7 @@ async function readInstalledAgentManifest(manifestPath) {
103310
103387
  return parsed.agents.filter((path7) => typeof path7 === "string");
103311
103388
  }
103312
103389
  async function removeManifestListedAgentLinks(codexHome, paths2) {
103313
- const agentsDir = join57(codexHome, "agents");
103390
+ const agentsDir = join56(codexHome, "agents");
103314
103391
  const removed2 = [];
103315
103392
  const skipped2 = [];
103316
103393
  for (const path7 of paths2) {
@@ -103362,14 +103439,14 @@ function nodeErrorCode6(error51) {
103362
103439
  import { execFile as execFile3 } from "node:child_process";
103363
103440
  import { existsSync as existsSync31 } from "node:fs";
103364
103441
  import { homedir as homedir11 } from "node:os";
103365
- import { dirname as dirname24, join as join62, resolve as resolve19 } from "node:path";
103442
+ import { dirname as dirname24, join as join61, resolve as resolve19 } from "node:path";
103366
103443
  import { fileURLToPath } from "node:url";
103367
103444
  import { promisify as promisify2 } from "node:util";
103368
103445
 
103369
103446
  // packages/omo-senpi/src/components/agent-home/resolve-agent-home.ts
103370
103447
  import { existsSync as existsSync29 } from "node:fs";
103371
103448
  import { homedir as homedir9 } from "node:os";
103372
- import { join as join58, resolve as resolve16 } from "node:path";
103449
+ import { join as join57, resolve as resolve16 } from "node:path";
103373
103450
  var AGENT_DIR_ENV_NAMES = [
103374
103451
  "OMO_CODING_AGENT_DIR",
103375
103452
  "SENPI_CODING_AGENT_DIR",
@@ -103383,25 +103460,25 @@ function resolveAgentHome(options) {
103383
103460
  if (configured)
103384
103461
  return resolve16(configured);
103385
103462
  }
103386
- const brandedHome = join58(homeDir, ".omo");
103387
- const canonical = join58(brandedHome, "agent");
103388
- if (exists7(join58(canonical, AGENT_HOME_SENTINEL)))
103463
+ const brandedHome = join57(homeDir, ".omo");
103464
+ const canonical = join57(brandedHome, "agent");
103465
+ if (exists7(join57(canonical, AGENT_HOME_SENTINEL)))
103389
103466
  return canonical;
103390
- if (exists7(join58(brandedHome, AGENT_HOME_SENTINEL)))
103467
+ if (exists7(join57(brandedHome, AGENT_HOME_SENTINEL)))
103391
103468
  return brandedHome;
103392
- return join58(homeDir, ".senpi", "agent");
103469
+ return join57(homeDir, ".senpi", "agent");
103393
103470
  }
103394
103471
 
103395
103472
  // packages/omo-senpi/src/install/local-launcher.ts
103396
103473
  import { chmodSync as chmodSync3, existsSync as existsSync30, mkdirSync as mkdirSync10, readFileSync as readFileSync14, rmSync as rmSync2, writeFileSync as writeFileSync6 } from "node:fs";
103397
103474
  import { homedir as homedir10 } from "node:os";
103398
- import { dirname as dirname21, join as join59, resolve as resolve17 } from "node:path";
103475
+ import { dirname as dirname21, join as join58, resolve as resolve17 } from "node:path";
103399
103476
  var MARKER = "omo-local-launcher";
103400
103477
  function localLauncherPath(homeDir = homedir10()) {
103401
- return join59(homeDir, ".local", "bin", "omo");
103478
+ return join58(homeDir, ".local", "bin", "omo");
103402
103479
  }
103403
103480
  function localLauncherCmdPath(homeDir = homedir10()) {
103404
- return join59(homeDir, ".local", "bin", "omo.cmd");
103481
+ return join58(homeDir, ".local", "bin", "omo.cmd");
103405
103482
  }
103406
103483
  function renderLocalLauncher(options) {
103407
103484
  const brand = {
@@ -103481,16 +103558,16 @@ node "%~dp0omo" %*\r
103481
103558
  import { createHash as createHash5 } from "node:crypto";
103482
103559
  import { constants as constants9 } from "node:fs";
103483
103560
  import { access as access2, readFile as readFile26, stat as stat6 } from "node:fs/promises";
103484
- import { dirname as dirname23, join as join61 } from "node:path";
103561
+ import { dirname as dirname23, join as join60 } from "node:path";
103485
103562
 
103486
103563
  // packages/omo-senpi/src/install/senpi-settings.ts
103487
103564
  import { constants as constants8 } from "node:fs";
103488
103565
  import { access, copyFile as copyFile3, mkdir as mkdir9, readFile as readFile25, rename as rename5, writeFile as writeFile14 } from "node:fs/promises";
103489
- import { dirname as dirname22, join as join60, resolve as resolve18 } from "node:path";
103566
+ import { dirname as dirname22, join as join59, resolve as resolve18 } from "node:path";
103490
103567
  var OMO_SENPI_PACKAGE_NAME = "@code-yeongyu/omo-senpi";
103491
103568
  var LEGACY_BUILTIN_SHADOW_PACKAGES = [
103492
- join60("packages", "pi-goal"),
103493
- join60("packages", "pi-webfetch")
103569
+ join59("packages", "pi-goal"),
103570
+ join59("packages", "pi-webfetch")
103494
103571
  ];
103495
103572
  async function readSettings(settingsPath) {
103496
103573
  let raw;
@@ -103565,7 +103642,7 @@ function isRecord12(value) {
103565
103642
  async function readPackageName(packagePath) {
103566
103643
  let raw;
103567
103644
  try {
103568
- raw = await readFile25(join60(packagePath, "package.json"), "utf8");
103645
+ raw = await readFile25(join59(packagePath, "package.json"), "utf8");
103569
103646
  } catch (error51) {
103570
103647
  if (isErrno(error51, "ENOENT") || isErrno(error51, "ENOTDIR"))
103571
103648
  return;
@@ -103590,57 +103667,57 @@ function isErrno(error51, code) {
103590
103667
 
103591
103668
  // packages/omo-senpi/src/install/plugin-artifacts.ts
103592
103669
  var REQUIRED_PLUGIN_ARTIFACTS = [
103593
- join61("extensions", "omo.js"),
103594
- join61("extensions", "omo-task.js"),
103595
- join61("extensions", "omo-member.js"),
103596
- join61("extensions", "memory-run-supervisor.mjs"),
103597
- join61("extensions", "reflection-persona.md"),
103598
- join61("extensions", "dream-persona.md"),
103599
- join61("extensions", "facts-persona.md"),
103600
- join61("extensions", "memorian-persona.md"),
103601
- join61("skills", "ast-grep", "SKILL.md"),
103602
- join61("skills", "coding-agent-sessions", "SKILL.md"),
103603
- join61("skills", "debugging", "SKILL.md"),
103604
- join61("skills", "frontend", "SKILL.md"),
103605
- join61("skills", "git-master", "SKILL.md"),
103606
- join61("skills", "init-deep", "SKILL.md"),
103607
- join61("skills", "lsp-setup", "SKILL.md"),
103608
- join61("skills", "programming", "SKILL.md"),
103609
- join61("skills", "refactor", "SKILL.md"),
103610
- join61("skills", "remove-ai-slops", "SKILL.md"),
103611
- join61("skills", "review-work", "SKILL.md"),
103612
- join61("skills", "ultimate-browsing", "SKILL.md"),
103613
- join61("skills", "ultrawork", "SKILL.md"),
103614
- join61("skills", "ulw-execute", "SKILL.md"),
103615
- join61("skills", "ulw-loop", "SKILL.md"),
103616
- join61("skills", "ulw-plan", "SKILL.md"),
103617
- join61("skills", "ulw-research", "SKILL.md"),
103618
- join61("skills", "visual-qa", "SKILL.md"),
103619
- join61("skills-conditional", "x-search", "SKILL.md"),
103620
- join61("runtime", "ast-grep-mcp", "cli.js"),
103621
- join61("runtime", "agent-toolkit", "cli.js"),
103622
- join61("runtime", "agent-toolkit", "ulw-loop", "cli.js"),
103623
- join61("runtime", "agent-toolkit", "omo-agent-toolkit"),
103624
- join61("runtime", "agent-toolkit", "omo-agent-toolkit.cmd"),
103625
- join61("runtime", "lsp-daemon", "dist", "cli.js"),
103626
- join61("runtime", "lsp-daemon", "dist", "index.js"),
103627
- join61("runtime", "lsp-daemon", "dist", "index.d.ts"),
103628
- join61("runtime", "lsp-daemon", "dist", "daemon-client.js"),
103629
- join61("runtime", "lsp-daemon", "dist", "daemon-client.d.ts"),
103630
- join61("runtime", "lsp-daemon", "dist", "package.json"),
103631
- join61("runtime", "lsp-daemon", "dist", ".omo-runtime-manifest.json"),
103632
- join61("scripts", "install.mjs")
103670
+ join60("extensions", "omo.js"),
103671
+ join60("extensions", "omo-task.js"),
103672
+ join60("extensions", "omo-member.js"),
103673
+ join60("extensions", "memory-run-supervisor.mjs"),
103674
+ join60("extensions", "reflection-persona.md"),
103675
+ join60("extensions", "dream-persona.md"),
103676
+ join60("extensions", "facts-persona.md"),
103677
+ join60("extensions", "memorian-persona.md"),
103678
+ join60("skills", "ast-grep", "SKILL.md"),
103679
+ join60("skills", "coding-agent-sessions", "SKILL.md"),
103680
+ join60("skills", "debugging", "SKILL.md"),
103681
+ join60("skills", "frontend", "SKILL.md"),
103682
+ join60("skills", "git-master", "SKILL.md"),
103683
+ join60("skills", "init-deep", "SKILL.md"),
103684
+ join60("skills", "lsp-setup", "SKILL.md"),
103685
+ join60("skills", "programming", "SKILL.md"),
103686
+ join60("skills", "refactor", "SKILL.md"),
103687
+ join60("skills", "remove-ai-slops", "SKILL.md"),
103688
+ join60("skills", "review-work", "SKILL.md"),
103689
+ join60("skills", "ultimate-browsing", "SKILL.md"),
103690
+ join60("skills", "ultrawork", "SKILL.md"),
103691
+ join60("skills", "ulw-execute", "SKILL.md"),
103692
+ join60("skills", "ulw-loop", "SKILL.md"),
103693
+ join60("skills", "ulw-plan", "SKILL.md"),
103694
+ join60("skills", "ulw-research", "SKILL.md"),
103695
+ join60("skills", "visual-qa", "SKILL.md"),
103696
+ join60("skills-conditional", "x-search", "SKILL.md"),
103697
+ join60("runtime", "ast-grep-mcp", "cli.js"),
103698
+ join60("runtime", "agent-toolkit", "cli.js"),
103699
+ join60("runtime", "agent-toolkit", "ulw-loop", "cli.js"),
103700
+ join60("runtime", "agent-toolkit", "omo-agent-toolkit"),
103701
+ join60("runtime", "agent-toolkit", "omo-agent-toolkit.cmd"),
103702
+ join60("runtime", "lsp-daemon", "dist", "cli.js"),
103703
+ join60("runtime", "lsp-daemon", "dist", "index.js"),
103704
+ join60("runtime", "lsp-daemon", "dist", "index.d.ts"),
103705
+ join60("runtime", "lsp-daemon", "dist", "daemon-client.js"),
103706
+ join60("runtime", "lsp-daemon", "dist", "daemon-client.d.ts"),
103707
+ join60("runtime", "lsp-daemon", "dist", "package.json"),
103708
+ join60("runtime", "lsp-daemon", "dist", ".omo-runtime-manifest.json"),
103709
+ join60("scripts", "install.mjs")
103633
103710
  ];
103634
103711
  async function ensurePluginArtifacts(context) {
103635
103712
  if (context.allowBuild) {
103636
- await context.runCommand("node", [join61(context.pluginPath, "scripts", "build-extension.mjs")], { cwd: context.repoRoot });
103637
- await context.runCommand("node", [join61("packages", "omo-codex", "plugin", "scripts", "materialize-shared-upstreams.mjs")], { cwd: context.repoRoot });
103638
- await context.runCommand("node", [join61(context.pluginPath, "scripts", "sync-skills.mjs")], { cwd: context.repoRoot });
103639
- await context.runCommand("node", [join61(context.pluginPath, "scripts", "build-install.mjs")], { cwd: context.repoRoot });
103640
- await context.runCommand("node", [join61(context.pluginPath, "scripts", "stage-lsp-daemon-runtime.mjs")], { cwd: context.repoRoot });
103641
- await context.runCommand("node", [join61(context.pluginPath, "scripts", "stage-ast-grep-mcp-runtime.mjs")], { cwd: context.repoRoot });
103642
- await context.runCommand("node", [join61(context.pluginPath, "scripts", "stage-agent-toolkit.mjs")], { cwd: context.repoRoot });
103643
- await context.runCommand("node", [join61(context.pluginPath, "scripts", "stage-x-search-skill.mjs")], { cwd: context.repoRoot });
103713
+ await context.runCommand("node", [join60(context.pluginPath, "scripts", "build-extension.mjs")], { cwd: context.repoRoot });
103714
+ await context.runCommand("node", [join60("packages", "omo-codex", "plugin", "scripts", "materialize-shared-upstreams.mjs")], { cwd: context.repoRoot });
103715
+ await context.runCommand("node", [join60(context.pluginPath, "scripts", "sync-skills.mjs")], { cwd: context.repoRoot });
103716
+ await context.runCommand("node", [join60(context.pluginPath, "scripts", "build-install.mjs")], { cwd: context.repoRoot });
103717
+ await context.runCommand("node", [join60(context.pluginPath, "scripts", "stage-lsp-daemon-runtime.mjs")], { cwd: context.repoRoot });
103718
+ await context.runCommand("node", [join60(context.pluginPath, "scripts", "stage-ast-grep-mcp-runtime.mjs")], { cwd: context.repoRoot });
103719
+ await context.runCommand("node", [join60(context.pluginPath, "scripts", "stage-agent-toolkit.mjs")], { cwd: context.repoRoot });
103720
+ await context.runCommand("node", [join60(context.pluginPath, "scripts", "stage-x-search-skill.mjs")], { cwd: context.repoRoot });
103644
103721
  }
103645
103722
  if (await hasMissingPluginArtifact(context.pluginPath)) {
103646
103723
  throw new Error(`Packed omo-senpi plugin is missing required runtime artifacts at ${context.pluginPath}`);
@@ -103649,14 +103726,14 @@ async function ensurePluginArtifacts(context) {
103649
103726
  }
103650
103727
  async function hasMissingPluginArtifact(pluginPath) {
103651
103728
  for (const artifact of REQUIRED_PLUGIN_ARTIFACTS) {
103652
- if (!await fileExists2(join61(pluginPath, artifact)))
103729
+ if (!await fileExists2(join60(pluginPath, artifact)))
103653
103730
  return true;
103654
103731
  }
103655
103732
  return false;
103656
103733
  }
103657
103734
  async function verifyAstGrepRuntimeIntegrity(pluginPath, platform) {
103658
- const runtimeEntry = join61(pluginPath, "runtime", "ast-grep-mcp", "cli.js");
103659
- const manifestPath = join61(dirname23(runtimeEntry), "manifest.json");
103735
+ const runtimeEntry = join60(pluginPath, "runtime", "ast-grep-mcp", "cli.js");
103736
+ const manifestPath = join60(dirname23(runtimeEntry), "manifest.json");
103660
103737
  let runtimeStat;
103661
103738
  try {
103662
103739
  runtimeStat = await stat6(runtimeEntry);
@@ -103731,7 +103808,7 @@ async function runSenpiInstaller(options = {}) {
103731
103808
  const backupPath = await writeSettingsAtomically(context.settingsPath, settings);
103732
103809
  installLocalLauncher({
103733
103810
  pluginPath: context.pluginPath,
103734
- senpiCliPath: join62(context.repoRoot, "packages", "coding-agent", "dist", "cli.js")
103811
+ senpiCliPath: join61(context.repoRoot, "packages", "coding-agent", "dist", "cli.js")
103735
103812
  });
103736
103813
  return {
103737
103814
  ok: true,
@@ -103748,12 +103825,12 @@ function resolveInstallContext(options) {
103748
103825
  const allowBuild = options.pluginPath === undefined;
103749
103826
  const repoRoot = resolve19(options.repoRoot ?? (allowBuild ? findRepoRoot2(dirname24(fileURLToPath(import.meta.url))) : dirname24(resolve19(options.pluginPath))));
103750
103827
  const agentDir = resolve19(options.agentDir ?? resolveAgentHome({ env: env2, homeDir: env2.HOME ?? homedir11() }));
103751
- const pluginPath = resolve19(options.pluginPath ?? join62(repoRoot, "packages", "omo-senpi", "plugin"));
103828
+ const pluginPath = resolve19(options.pluginPath ?? join61(repoRoot, "packages", "omo-senpi", "plugin"));
103752
103829
  return {
103753
103830
  env: env2,
103754
103831
  repoRoot,
103755
103832
  agentDir,
103756
- settingsPath: join62(agentDir, "settings.json"),
103833
+ settingsPath: join61(agentDir, "settings.json"),
103757
103834
  pluginPath,
103758
103835
  platform: options.platform ?? process.platform,
103759
103836
  allowBuild,
@@ -103770,7 +103847,7 @@ async function defaultRunCommand3(command, args, options) {
103770
103847
  function findRepoRoot2(importerDir) {
103771
103848
  let current = importerDir;
103772
103849
  for (let depth = 0;depth <= 7; depth += 1) {
103773
- if (fileExistsSync(join62(current, "packages", "omo-senpi", "plugin", "package.json")))
103850
+ if (fileExistsSync(join61(current, "packages", "omo-senpi", "plugin", "package.json")))
103774
103851
  return current;
103775
103852
  current = resolve19(current, "..");
103776
103853
  }
@@ -103814,19 +103891,19 @@ init_provider_availability();
103814
103891
 
103815
103892
  // packages/omo-opencode/src/cli/config-manager/add-tui-plugin-to-tui-config.ts
103816
103893
  import { existsSync as existsSync33, mkdirSync as mkdirSync11, readFileSync as readFileSync16 } from "node:fs";
103817
- import { join as join64 } from "node:path";
103894
+ import { join as join63 } from "node:path";
103818
103895
 
103819
103896
  // packages/omo-opencode/src/cli/doctor/checks/tui-plugin-config.ts
103820
103897
  init_shared();
103821
103898
  import { existsSync as existsSync32, readFileSync as readFileSync15 } from "node:fs";
103822
- import { join as join63 } from "node:path";
103899
+ import { join as join62 } from "node:path";
103823
103900
  var TUI_SUBPATH = "tui";
103824
103901
  var TUI_EXPORT_SUBPATH = `./${TUI_SUBPATH}`;
103825
103902
  function fileEntryPackageJsonPath(entry) {
103826
103903
  let path7 = entry.slice("file:".length);
103827
103904
  if (path7.startsWith("//"))
103828
103905
  path7 = path7.slice(2);
103829
- return join63(path7, "package.json");
103906
+ return join62(path7, "package.json");
103830
103907
  }
103831
103908
  function packageJsonExportsTui(pkgJsonPath) {
103832
103909
  if (!existsSync32(pkgJsonPath))
@@ -103864,7 +103941,7 @@ function packageExportsTuiForServerEntry(entry) {
103864
103941
  const packageName = packageNameFromServerEntry(entry);
103865
103942
  if (packageName === null)
103866
103943
  return null;
103867
- return packageJsonExportsTui(join63(getOpenCodeConfigDir({ binary: "opencode" }), "node_modules", packageName, "package.json"));
103944
+ return packageJsonExportsTui(join62(getOpenCodeConfigDir({ binary: "opencode" }), "node_modules", packageName, "package.json"));
103868
103945
  }
103869
103946
  function isOurFilePluginEntry(entry) {
103870
103947
  if (typeof entry !== "string" || !entry.startsWith("file:"))
@@ -103929,7 +104006,7 @@ function detectServerPluginRegistration() {
103929
104006
  }
103930
104007
  }
103931
104008
  function detectTuiPluginRegistration() {
103932
- const tuiJsonPath = join63(getOpenCodeConfigDir({ binary: "opencode" }), "tui.json");
104009
+ const tuiJsonPath = join62(getOpenCodeConfigDir({ binary: "opencode" }), "tui.json");
103933
104010
  if (!existsSync32(tuiJsonPath)) {
103934
104011
  return {
103935
104012
  registered: false,
@@ -104085,10 +104162,10 @@ function readConfig(path7) {
104085
104162
  return null;
104086
104163
  }
104087
104164
  function readServerConfig(configDir) {
104088
- const jsoncPath = join64(configDir, "opencode.jsonc");
104165
+ const jsoncPath = join63(configDir, "opencode.jsonc");
104089
104166
  if (existsSync33(jsoncPath))
104090
104167
  return readConfig(jsoncPath);
104091
- const jsonPath = join64(configDir, "opencode.json");
104168
+ const jsonPath = join63(configDir, "opencode.json");
104092
104169
  if (existsSync33(jsonPath))
104093
104170
  return readConfig(jsonPath);
104094
104171
  return null;
@@ -104130,7 +104207,7 @@ function ensureTuiPluginEntry(opts = {}) {
104130
104207
  if (!desiredEntry) {
104131
104208
  return { changed: false, reason: "no-server-entry" };
104132
104209
  }
104133
- const tuiJsonPath = join64(configDir, "tui.json");
104210
+ const tuiJsonPath = join63(configDir, "tui.json");
104134
104211
  const { config: config3, malformed } = readTuiConfig(tuiJsonPath);
104135
104212
  if (malformed) {
104136
104213
  return { changed: false, reason: "malformed" };
@@ -104146,7 +104223,7 @@ function ensureTuiPluginEntry(opts = {}) {
104146
104223
 
104147
104224
  // packages/omo-opencode/src/cli/install-ast-grep-sg.ts
104148
104225
  import { homedir as homedir12 } from "node:os";
104149
- import { join as join65 } from "node:path";
104226
+ import { join as join64 } from "node:path";
104150
104227
 
104151
104228
  // packages/shared-skills/index.mjs
104152
104229
  import { existsSync as existsSync34 } from "node:fs";
@@ -104168,9 +104245,9 @@ function describeResult2(result) {
104168
104245
  }
104169
104246
  async function installAstGrepForOpenCode(options = {}) {
104170
104247
  const platform = options.platform ?? process.platform;
104171
- const baseDir = join65(options.homeDir ?? homedir12(), ".omo");
104248
+ const baseDir = join64(options.homeDir ?? homedir12(), ".omo");
104172
104249
  const targetDir = astGrepRuntimeDir(baseDir, platform, options.arch ?? process.arch);
104173
- const skillDir = join65(options.sharedSkillsRoot ?? sharedSkillsRootPath(), "ast-grep");
104250
+ const skillDir = join64(options.sharedSkillsRoot ?? sharedSkillsRootPath(), "ast-grep");
104174
104251
  const installer = options.installer ?? runAstGrepSkillInstall;
104175
104252
  try {
104176
104253
  const result = await installer({ platform, skillDir, targetDir });
@@ -104288,6 +104365,7 @@ async function runCliInstaller(args, version3) {
104288
104365
  return 1;
104289
104366
  }
104290
104367
  printWarning(`Codex install failed (OpenCode install is still complete): ${message}`);
104368
+ printInfo(`The Codex harness is NOT installed. Fix the error above, then re-run: ${import_picocolors3.default.cyan("bunx oh-my-openagent install --platform=codex")}`);
104291
104369
  }
104292
104370
  console.log();
104293
104371
  }
@@ -105760,6 +105838,7 @@ async function runTuiInstaller(args, version3) {
105760
105838
  return 1;
105761
105839
  }
105762
105840
  log4.warn(`Codex install failed (OpenCode install remains successful): ${message}`);
105841
+ log4.info("The Codex harness is NOT installed. Fix the error above, then re-run: bunx oh-my-openagent install --platform=codex");
105763
105842
  }
105764
105843
  }
105765
105844
  if (config3.hasSenpi) {
@@ -108389,9 +108468,9 @@ function readCurrentTopLevelTask(planPath) {
108389
108468
  }
108390
108469
  // packages/boulder-state/src/storage/path.ts
108391
108470
  import { existsSync as existsSync36 } from "node:fs";
108392
- import { isAbsolute as isAbsolute12, join as join66, relative as relative8, resolve as resolve20 } from "node:path";
108471
+ import { isAbsolute as isAbsolute12, join as join65, relative as relative8, resolve as resolve20 } from "node:path";
108393
108472
  function getBoulderFilePath(directory) {
108394
- return join66(directory, BOULDER_DIR, BOULDER_FILE);
108473
+ return join65(directory, BOULDER_DIR, BOULDER_FILE);
108395
108474
  }
108396
108475
  function resolveTrackedPath(baseDirectory, trackedPath) {
108397
108476
  return isAbsolute12(trackedPath) ? resolve20(trackedPath) : resolve20(baseDirectory, trackedPath);
@@ -108574,9 +108653,9 @@ init_state();
108574
108653
  var CONTINUATION_MARKER_DIR = ".omo/run-continuation";
108575
108654
  // packages/omo-opencode/src/features/run-continuation-state/storage.ts
108576
108655
  import { existsSync as existsSync39, mkdirSync as mkdirSync12, readFileSync as readFileSync20, rmSync as rmSync3, writeFileSync as writeFileSync7 } from "node:fs";
108577
- import { join as join67 } from "node:path";
108656
+ import { join as join66 } from "node:path";
108578
108657
  function getMarkerPath(directory, sessionID) {
108579
- return join67(directory, CONTINUATION_MARKER_DIR, `${sessionID}.json`);
108658
+ return join66(directory, CONTINUATION_MARKER_DIR, `${sessionID}.json`);
108580
108659
  }
108581
108660
  function readContinuationMarker(directory, sessionID) {
108582
108661
  const markerPath = getMarkerPath(directory, sessionID);
@@ -108649,7 +108728,7 @@ async function isSessionInBoulderLineage(input) {
108649
108728
  init_shared();
108650
108729
  init_compaction_marker();
108651
108730
  import { readFileSync as readFileSync21, readdirSync as readdirSync8 } from "node:fs";
108652
- import { join as join68 } from "node:path";
108731
+ import { join as join67 } from "node:path";
108653
108732
  var defaultSessionLastAgentDeps = {
108654
108733
  getMessageDir,
108655
108734
  isSqliteBackend,
@@ -108709,7 +108788,7 @@ async function getLastAgentFromSession(sessionID, client3, deps = {}) {
108709
108788
  try {
108710
108789
  const messages = readdirSync8(messageDir).filter((fileName) => fileName.endsWith(".json")).map((fileName) => {
108711
108790
  try {
108712
- const content = readFileSync21(join68(messageDir, fileName), "utf-8");
108791
+ const content = readFileSync21(join67(messageDir, fileName), "utf-8");
108713
108792
  const parsed = JSON.parse(content);
108714
108793
  return {
108715
108794
  fileName,
@@ -108753,7 +108832,7 @@ init_agent_display_names();
108753
108832
  // packages/omo-opencode/src/hooks/ralph-loop/storage.ts
108754
108833
  init_frontmatter2();
108755
108834
  import { existsSync as existsSync40, readFileSync as readFileSync22, writeFileSync as writeFileSync8, unlinkSync as unlinkSync6, mkdirSync as mkdirSync13 } from "node:fs";
108756
- import { dirname as dirname26, join as join69 } from "node:path";
108835
+ import { dirname as dirname26, join as join68 } from "node:path";
108757
108836
 
108758
108837
  // packages/omo-opencode/src/hooks/ralph-loop/constants.ts
108759
108838
  var DEFAULT_STATE_FILE = ".omo/ralph-loop.local.md";
@@ -108762,7 +108841,7 @@ var DEFAULT_COMPLETION_PROMISE = "DONE";
108762
108841
 
108763
108842
  // packages/omo-opencode/src/hooks/ralph-loop/storage.ts
108764
108843
  function getStateFilePath(directory, customPath) {
108765
- return customPath ? join69(directory, customPath) : join69(directory, DEFAULT_STATE_FILE);
108844
+ return customPath ? join68(directory, customPath) : join68(directory, DEFAULT_STATE_FILE);
108766
108845
  }
108767
108846
  function readState(directory, customPath) {
108768
108847
  const filePath = getStateFilePath(directory, customPath);
@@ -109869,7 +109948,7 @@ init_extract_semver();
109869
109948
  init_bun_which_shim();
109870
109949
  import { existsSync as existsSync48, accessSync as accessSync4, constants as constants12 } from "node:fs";
109871
109950
  import { homedir as homedir15 } from "node:os";
109872
- import { join as join76 } from "node:path";
109951
+ import { join as join75 } from "node:path";
109873
109952
 
109874
109953
  // packages/omo-opencode/src/cli/doctor/framework/spawn-with-timeout.ts
109875
109954
  init_spawn_with_windows_hide();
@@ -109961,17 +110040,17 @@ function getDesktopAppPaths(platform) {
109961
110040
  case "darwin":
109962
110041
  return [
109963
110042
  "/Applications/OpenCode.app/Contents/MacOS/OpenCode",
109964
- join76(home, "Applications", "OpenCode.app", "Contents", "MacOS", "OpenCode")
110043
+ join75(home, "Applications", "OpenCode.app", "Contents", "MacOS", "OpenCode")
109965
110044
  ];
109966
110045
  case "win32": {
109967
110046
  const programFiles = process.env.ProgramFiles;
109968
110047
  const localAppData = process.env.LOCALAPPDATA;
109969
110048
  const paths2 = [];
109970
110049
  if (programFiles) {
109971
- paths2.push(join76(programFiles, "OpenCode", "OpenCode.exe"));
110050
+ paths2.push(join75(programFiles, "OpenCode", "OpenCode.exe"));
109972
110051
  }
109973
110052
  if (localAppData) {
109974
- paths2.push(join76(localAppData, "OpenCode", "OpenCode.exe"));
110053
+ paths2.push(join75(localAppData, "OpenCode", "OpenCode.exe"));
109975
110054
  }
109976
110055
  return paths2;
109977
110056
  }
@@ -109979,8 +110058,8 @@ function getDesktopAppPaths(platform) {
109979
110058
  return [
109980
110059
  "/usr/bin/opencode",
109981
110060
  "/usr/lib/opencode/opencode",
109982
- join76(home, "Applications", "opencode-desktop-linux-x86_64.AppImage"),
109983
- join76(home, "Applications", "opencode-desktop-linux-aarch64.AppImage")
110061
+ join75(home, "Applications", "opencode-desktop-linux-x86_64.AppImage"),
110062
+ join75(home, "Applications", "opencode-desktop-linux-aarch64.AppImage")
109984
110063
  ];
109985
110064
  default:
109986
110065
  return [];
@@ -110012,7 +110091,7 @@ async function findOpenCodeBinary(platform = process.platform, checkExists = exi
110012
110091
  const candidates = getCommandCandidates2(platform);
110013
110092
  for (const entry of pathEnv.split(delimiter3).filter(Boolean)) {
110014
110093
  for (const command of candidates) {
110015
- const fullPath = join76(entry, command);
110094
+ const fullPath = join75(entry, command);
110016
110095
  if (checkExists(fullPath) && isExecutable2(fullPath)) {
110017
110096
  return { binary: command, path: fullPath };
110018
110097
  }
@@ -110156,22 +110235,22 @@ init_package_json_locator();
110156
110235
  import { existsSync as existsSync50, readFileSync as readFileSync31, readdirSync as readdirSync10 } from "node:fs";
110157
110236
  import { createRequire as createRequire2 } from "node:module";
110158
110237
  import { homedir as homedir16 } from "node:os";
110159
- import { join as join77 } from "node:path";
110238
+ import { join as join76 } from "node:path";
110160
110239
  import { fileURLToPath as fileURLToPath6 } from "node:url";
110161
110240
  init_shared();
110162
110241
  function getPlatformDefaultCacheDir(platform = process.platform) {
110163
110242
  if (platform === "darwin")
110164
- return join77(homedir16(), "Library", "Caches");
110243
+ return join76(homedir16(), "Library", "Caches");
110165
110244
  if (platform === "win32")
110166
- return process.env.LOCALAPPDATA ?? join77(homedir16(), "AppData", "Local");
110167
- return join77(homedir16(), ".cache");
110245
+ return process.env.LOCALAPPDATA ?? join76(homedir16(), "AppData", "Local");
110246
+ return join76(homedir16(), ".cache");
110168
110247
  }
110169
110248
  function resolveOpenCodeCacheDir() {
110170
110249
  const xdgCacheHome = process.env.XDG_CACHE_HOME;
110171
110250
  if (xdgCacheHome)
110172
- return join77(xdgCacheHome, "opencode");
110251
+ return join76(xdgCacheHome, "opencode");
110173
110252
  const fromShared = getOpenCodeCacheDir();
110174
- const platformDefault = join77(getPlatformDefaultCacheDir(), "opencode");
110253
+ const platformDefault = join76(getPlatformDefaultCacheDir(), "opencode");
110175
110254
  if (existsSync50(fromShared) || !existsSync50(platformDefault))
110176
110255
  return fromShared;
110177
110256
  return platformDefault;
@@ -110203,11 +110282,11 @@ function normalizeVersion(value) {
110203
110282
  function createPackageCandidates(rootDir) {
110204
110283
  return ACCEPTED_PACKAGE_NAMES.map((packageName) => ({
110205
110284
  packageName,
110206
- installedPackagePath: join77(rootDir, "node_modules", packageName, "package.json")
110285
+ installedPackagePath: join76(rootDir, "node_modules", packageName, "package.json")
110207
110286
  }));
110208
110287
  }
110209
110288
  function createTaggedInstallCandidates(rootDir) {
110210
- const packagesDir = join77(rootDir, "packages");
110289
+ const packagesDir = join76(rootDir, "packages");
110211
110290
  if (!existsSync50(packagesDir))
110212
110291
  return [];
110213
110292
  const candidates = [];
@@ -110215,14 +110294,14 @@ function createTaggedInstallCandidates(rootDir) {
110215
110294
  const packageName = ACCEPTED_PACKAGE_NAMES.find((name) => entryName.startsWith(`${name}@`));
110216
110295
  if (packageName === undefined)
110217
110296
  continue;
110218
- const installDir = join77(packagesDir, entryName);
110297
+ const installDir = join76(packagesDir, entryName);
110219
110298
  candidates.push({
110220
110299
  cacheDir: installDir,
110221
- cachePackagePath: join77(installDir, "package.json"),
110300
+ cachePackagePath: join76(installDir, "package.json"),
110222
110301
  packageCandidates: [
110223
110302
  {
110224
110303
  packageName,
110225
- installedPackagePath: join77(installDir, "node_modules", packageName, "package.json")
110304
+ installedPackagePath: join76(installDir, "node_modules", packageName, "package.json")
110226
110305
  }
110227
110306
  ]
110228
110307
  });
@@ -110267,13 +110346,13 @@ function getLoadedPluginVersion() {
110267
110346
  const candidates = [
110268
110347
  {
110269
110348
  cacheDir: configDir,
110270
- cachePackagePath: join77(configDir, "package.json"),
110349
+ cachePackagePath: join76(configDir, "package.json"),
110271
110350
  packageCandidates: createPackageCandidates(configDir)
110272
110351
  },
110273
110352
  ...createTaggedInstallCandidates(configDir),
110274
110353
  {
110275
110354
  cacheDir,
110276
- cachePackagePath: join77(cacheDir, "package.json"),
110355
+ cachePackagePath: join76(cacheDir, "package.json"),
110277
110356
  packageCandidates: createPackageCandidates(cacheDir)
110278
110357
  },
110279
110358
  ...createTaggedInstallCandidates(cacheDir)
@@ -110467,18 +110546,18 @@ async function checkSystem(deps = defaultDeps6) {
110467
110546
  init_shared();
110468
110547
  import { existsSync as existsSync52, readFileSync as readFileSync33 } from "node:fs";
110469
110548
  import { homedir as homedir17 } from "node:os";
110470
- import { join as join78 } from "node:path";
110549
+ import { join as join77 } from "node:path";
110471
110550
  function getUserConfigDir2() {
110472
110551
  const xdgConfig = process.env.XDG_CONFIG_HOME;
110473
110552
  if (xdgConfig)
110474
- return join78(xdgConfig, "opencode");
110475
- return join78(homedir17(), ".config", "opencode");
110553
+ return join77(xdgConfig, "opencode");
110554
+ return join77(homedir17(), ".config", "opencode");
110476
110555
  }
110477
110556
  function loadCustomProviderNames() {
110478
110557
  const configDir = getUserConfigDir2();
110479
110558
  const candidatePaths = [
110480
- join78(configDir, "opencode.json"),
110481
- join78(configDir, "opencode.jsonc")
110559
+ join77(configDir, "opencode.json"),
110560
+ join77(configDir, "opencode.jsonc")
110482
110561
  ];
110483
110562
  for (const configPath of candidatePaths) {
110484
110563
  if (!existsSync52(configPath))
@@ -110499,7 +110578,7 @@ function loadCustomProviderNames() {
110499
110578
  return [];
110500
110579
  }
110501
110580
  function loadAvailableModelsFromCache() {
110502
- const cacheFile = join78(getOpenCodeCacheDir(), "models.json");
110581
+ const cacheFile = join77(getOpenCodeCacheDir(), "models.json");
110503
110582
  const customProviders = loadCustomProviderNames();
110504
110583
  if (!existsSync52(cacheFile)) {
110505
110584
  if (customProviders.length > 0) {
@@ -110561,7 +110640,7 @@ function loadOmoConfig2() {
110561
110640
 
110562
110641
  // packages/omo-opencode/src/cli/doctor/checks/model-resolution-details.ts
110563
110642
  init_shared();
110564
- import { join as join79 } from "node:path";
110643
+ import { join as join78 } from "node:path";
110565
110644
 
110566
110645
  // packages/omo-opencode/src/cli/doctor/checks/model-resolution-variant.ts
110567
110646
  function formatModelWithVariant(model, variant) {
@@ -110603,7 +110682,7 @@ function formatCapabilityResolutionLabel(mode2) {
110603
110682
  }
110604
110683
  function buildModelResolutionDetails(options) {
110605
110684
  const details = [];
110606
- const cacheFile = join79(getOpenCodeCacheDir(), "models.json");
110685
+ const cacheFile = join78(getOpenCodeCacheDir(), "models.json");
110607
110686
  details.push("═══ Available Models (from cache) ═══");
110608
110687
  details.push("");
110609
110688
  if (options.available.cacheExists) {
@@ -110913,7 +110992,7 @@ async function checkConfig() {
110913
110992
  // packages/omo-opencode/src/cli/doctor/checks/deprecated-reasoning-keys.ts
110914
110993
  init_main();
110915
110994
  import { existsSync as existsSync53, readFileSync as readFileSync34 } from "node:fs";
110916
- import { join as join80 } from "node:path";
110995
+ import { join as join79 } from "node:path";
110917
110996
  var CANONICAL_REPLACEMENT = new Map([
110918
110997
  ["variant", "reasoning"],
110919
110998
  ["reasoningEffort", "reasoning"],
@@ -110968,7 +111047,7 @@ function userConfigPaths() {
110968
111047
  const home = process.env.HOME ?? process.env.USERPROFILE;
110969
111048
  if (home === undefined || home.length === 0)
110970
111049
  return [];
110971
- return [join80(home, ".omo", "omo.jsonc"), join80(home, ".omo", "omo.json")];
111050
+ return [join79(home, ".omo", "omo.jsonc"), join79(home, ".omo", "omo.json")];
110972
111051
  }
110973
111052
  async function checkDeprecatedReasoningKeys() {
110974
111053
  const issues = [];
@@ -110994,25 +111073,25 @@ init_src();
110994
111073
  import { existsSync as existsSync54 } from "node:fs";
110995
111074
  import { createRequire as createRequire3 } from "node:module";
110996
111075
  import { homedir as homedir19 } from "node:os";
110997
- import { dirname as dirname31, join as join82 } from "node:path";
111076
+ import { dirname as dirname31, join as join81 } from "node:path";
110998
111077
 
110999
111078
  // packages/omo-opencode/src/hooks/comment-checker/downloader.ts
111000
- import { join as join81 } from "path";
111079
+ import { join as join80 } from "path";
111001
111080
  import { homedir as homedir18, tmpdir as tmpdir4 } from "os";
111002
111081
  init_binary_downloader();
111003
111082
  init_logger2();
111004
111083
  init_plugin_identity();
111005
111084
  var DEBUG = process.env.COMMENT_CHECKER_DEBUG === "1";
111006
- var DEBUG_FILE = join81(tmpdir4(), "comment-checker-debug.log");
111085
+ var DEBUG_FILE = join80(tmpdir4(), "comment-checker-debug.log");
111007
111086
  function getCacheDir2() {
111008
111087
  if (process.platform === "win32") {
111009
111088
  const localAppData = process.env.LOCALAPPDATA || process.env.APPDATA;
111010
- const base2 = localAppData || join81(homedir18(), "AppData", "Local");
111011
- return join81(base2, CACHE_DIR_NAME, "bin");
111089
+ const base2 = localAppData || join80(homedir18(), "AppData", "Local");
111090
+ return join80(base2, CACHE_DIR_NAME, "bin");
111012
111091
  }
111013
111092
  const xdgCache = process.env.XDG_CACHE_HOME;
111014
- const base = xdgCache || join81(homedir18(), ".cache");
111015
- return join81(base, CACHE_DIR_NAME, "bin");
111093
+ const base = xdgCache || join80(homedir18(), ".cache");
111094
+ return join80(base, CACHE_DIR_NAME, "bin");
111016
111095
  }
111017
111096
  function getBinaryName() {
111018
111097
  return process.platform === "win32" ? "comment-checker.exe" : "comment-checker";
@@ -111062,7 +111141,7 @@ async function getBinaryVersion(binary) {
111062
111141
  }
111063
111142
  }
111064
111143
  async function checkAstGrepCli() {
111065
- const runtimeDir = astGrepRuntimeDir(join82(homedir19(), ".omo"));
111144
+ const runtimeDir = astGrepRuntimeDir(join81(homedir19(), ".omo"));
111066
111145
  const sgPath = findSgBinarySync({ runtimeDir });
111067
111146
  if (sgPath === null) {
111068
111147
  return {
@@ -111092,10 +111171,10 @@ function findCommentCheckerPackageBinary(baseDirOverride, resolvePackageJsonPath
111092
111171
  const platformKey = `${process.platform}-${process.arch === "x64" ? "x64" : process.arch}`;
111093
111172
  try {
111094
111173
  const packageDir = baseDirOverride ?? dirname31(resolvePackageJsonPath());
111095
- const vendorPath = join82(packageDir, "vendor", platformKey, binaryName);
111174
+ const vendorPath = join81(packageDir, "vendor", platformKey, binaryName);
111096
111175
  if (existsSync54(vendorPath))
111097
111176
  return vendorPath;
111098
- const binPath = join82(packageDir, "bin", binaryName);
111177
+ const binPath = join81(packageDir, "bin", binaryName);
111099
111178
  if (existsSync54(binPath))
111100
111179
  return binPath;
111101
111180
  } catch (error51) {
@@ -111471,13 +111550,13 @@ function getInstalledLspServers(options = {}) {
111471
111550
  init_shared();
111472
111551
  import { existsSync as existsSync56, readFileSync as readFileSync36 } from "node:fs";
111473
111552
  import { homedir as homedir20 } from "node:os";
111474
- import { join as join83 } from "node:path";
111553
+ import { join as join82 } from "node:path";
111475
111554
  var BUILTIN_MCP_SERVERS = ["websearch", "context7", "grep_app", "lsp"];
111476
111555
  function getMcpConfigPaths() {
111477
111556
  return [
111478
- join83(homedir20(), ".claude", ".mcp.json"),
111479
- join83(process.cwd(), ".mcp.json"),
111480
- join83(process.cwd(), ".claude", ".mcp.json")
111557
+ join82(homedir20(), ".claude", ".mcp.json"),
111558
+ join82(process.cwd(), ".mcp.json"),
111559
+ join82(process.cwd(), ".claude", ".mcp.json")
111481
111560
  ];
111482
111561
  }
111483
111562
  function loadUserMcpConfig() {
@@ -111759,7 +111838,7 @@ init_src();
111759
111838
  import { existsSync as existsSync58 } from "node:fs";
111760
111839
  import { lstat as lstat15, readdir as readdir14, readFile as readFile27 } from "node:fs/promises";
111761
111840
  import { homedir as homedir22 } from "node:os";
111762
- import { basename as basename10, join as join84, resolve as resolve23 } from "node:path";
111841
+ import { basename as basename10, join as join83, resolve as resolve23 } from "node:path";
111763
111842
  // packages/omo-opencode/package.json
111764
111843
  var package_default3 = {
111765
111844
  name: "@oh-my-opencode/omo-opencode",
@@ -111825,13 +111904,13 @@ var CODEX_BIN_NAMES = [
111825
111904
  "omo-git-bash-hook"
111826
111905
  ];
111827
111906
  async function gatherCodexSummary(deps = {}) {
111828
- const codexHome = resolve23(deps.codexHome ?? process.env.CODEX_HOME ?? join84(homedir22(), ".codex"));
111907
+ const codexHome = resolve23(deps.codexHome ?? process.env.CODEX_HOME ?? join83(homedir22(), ".codex"));
111829
111908
  const binDir = resolveCodexInstallerBinDir({ binDir: deps.binDir, codexHome, env: process.env });
111830
111909
  const detection = await (deps.detectCodexInstallation ?? detectCodexInstallation)();
111831
111910
  const pluginRoot = await resolveInstalledPluginRoot(codexHome);
111832
- const manifest = pluginRoot === null ? null : await readJson(join84(pluginRoot, ".codex-plugin", "plugin.json"));
111833
- const installSnapshot = pluginRoot === null ? null : await readJson(join84(pluginRoot, "lazycodex-install.json"));
111834
- const configPath = join84(codexHome, "config.toml");
111911
+ const manifest = pluginRoot === null ? null : await readJson(join83(pluginRoot, ".codex-plugin", "plugin.json"));
111912
+ const installSnapshot = pluginRoot === null ? null : await readJson(join83(pluginRoot, "lazycodex-install.json"));
111913
+ const configPath = join83(codexHome, "config.toml");
111835
111914
  const pluginVersion = stringField(manifest, "version");
111836
111915
  return {
111837
111916
  codexPath: detection.found && "path" in detection ? detection.path : null,
@@ -111888,7 +111967,7 @@ function buildCodexIssues(summary) {
111888
111967
  if (summary.pluginRoot === null) {
111889
111968
  issues.push({
111890
111969
  title: "OMO Codex plugin is not installed",
111891
- description: `Expected cached plugin at ${join84("plugins", "cache", MARKETPLACE_NAME, PLUGIN_NAME2, DEFAULT_PLUGIN_VERSION)} under CODEX_HOME.`,
111970
+ description: `Expected cached plugin at ${join83("plugins", "cache", MARKETPLACE_NAME, PLUGIN_NAME2, DEFAULT_PLUGIN_VERSION)} under CODEX_HOME.`,
111892
111971
  fix: "Run: npx lazycodex-ai install",
111893
111972
  severity: "error",
111894
111973
  affects: ["plugin loading"]
@@ -111953,12 +112032,12 @@ function buildCodexIssues(summary) {
111953
112032
  return issues;
111954
112033
  }
111955
112034
  async function resolveInstalledPluginRoot(codexHome) {
111956
- const pluginRoot = join84(codexHome, "plugins", "cache", MARKETPLACE_NAME, PLUGIN_NAME2);
112035
+ const pluginRoot = join83(codexHome, "plugins", "cache", MARKETPLACE_NAME, PLUGIN_NAME2);
111957
112036
  if (!existsSync58(pluginRoot))
111958
112037
  return null;
111959
112038
  const versions2 = await readdir14(pluginRoot, { withFileTypes: true });
111960
112039
  const candidates = versions2.filter((entry) => entry.isDirectory()).map((entry) => entry.name).sort(compareVersionsDescending);
111961
- return candidates.length === 0 ? null : join84(pluginRoot, candidates[0] ?? DEFAULT_PLUGIN_VERSION);
112040
+ return candidates.length === 0 ? null : join83(pluginRoot, candidates[0] ?? DEFAULT_PLUGIN_VERSION);
111962
112041
  }
111963
112042
  async function readCodexConfigSummary(configPath) {
111964
112043
  if (!existsSync58(configPath)) {
@@ -111986,13 +112065,13 @@ async function readCodexConfigSummary(configPath) {
111986
112065
  async function readLinkedBins(binDir) {
111987
112066
  const linked = [];
111988
112067
  for (const name of CODEX_BIN_NAMES) {
111989
- if (await pathExists2(join84(binDir, process.platform === "win32" ? `${name}.cmd` : name)))
112068
+ if (await pathExists2(join83(binDir, process.platform === "win32" ? `${name}.cmd` : name)))
111990
112069
  linked.push(name);
111991
112070
  }
111992
112071
  return linked;
111993
112072
  }
111994
112073
  async function readLinkedAgents(codexHome) {
111995
- const agentsDir = join84(codexHome, "agents");
112074
+ const agentsDir = join83(codexHome, "agents");
111996
112075
  if (!existsSync58(agentsDir))
111997
112076
  return [];
111998
112077
  const entries = await readdir14(agentsDir, { withFileTypes: true });
@@ -112108,7 +112187,7 @@ async function pathExists2(path15) {
112108
112187
  init_src();
112109
112188
  import { readdir as readdir15, readFile as readFile28, stat as stat7 } from "node:fs/promises";
112110
112189
  import { homedir as homedir23 } from "node:os";
112111
- import { dirname as dirname33, isAbsolute as isAbsolute13, join as join85, relative as relative9, resolve as resolve24, sep as sep9 } from "node:path";
112190
+ import { dirname as dirname33, isAbsolute as isAbsolute13, join as join84, relative as relative9, resolve as resolve24, sep as sep9 } from "node:path";
112112
112191
  var CODEX_COMPONENTS_CHECK_ID = "codex-components";
112113
112192
  var CODEX_COMPONENTS_CHECK_NAME = "codex-components";
112114
112193
  var PLUGIN_DATA_DIR_NAME = "omo-sisyphuslabs";
@@ -112118,7 +112197,7 @@ async function checkCodexComponents(deps = {}) {
112118
112197
  const env2 = deps.env ?? process.env;
112119
112198
  const platform = deps.platform ?? process.platform;
112120
112199
  const arch = deps.arch ?? process.arch;
112121
- const codexHome = resolve24(deps.codexHome ?? env2["CODEX_HOME"] ?? join85(homedir23(), ".codex"));
112200
+ const codexHome = resolve24(deps.codexHome ?? env2["CODEX_HOME"] ?? join84(homedir23(), ".codex"));
112122
112201
  const summary = await gatherCodexSummary({ ...deps, codexHome });
112123
112202
  if (summary.pluginRoot === null) {
112124
112203
  return {
@@ -112143,7 +112222,7 @@ async function checkCodexComponents(deps = {}) {
112143
112222
  });
112144
112223
  }
112145
112224
  const runtimeSgDir = runtimeSgDirectory(codexHome, platform, arch);
112146
- const runtimeSgPath = join85(runtimeSgDir, sgBinaryName(platform));
112225
+ const runtimeSgPath = join84(runtimeSgDir, sgBinaryName(platform));
112147
112226
  const sg = findSgBinarySync({
112148
112227
  arch,
112149
112228
  env: env2,
@@ -112255,7 +112334,7 @@ async function findManifestPaths(root, manifestName) {
112255
112334
  for (const entry of entries) {
112256
112335
  if (entry.name === "node_modules" || entry.name === ".git")
112257
112336
  continue;
112258
- const entryPath = join85(root, entry.name);
112337
+ const entryPath = join84(root, entry.name);
112259
112338
  if (entry.isDirectory()) {
112260
112339
  paths3.push(...await findManifestPaths(entryPath, manifestName));
112261
112340
  continue;
@@ -112299,18 +112378,18 @@ function isPluginRuntimePathArg(arg) {
112299
112378
  return normalized.endsWith(".js") && normalized.includes("/dist/") && (normalized.startsWith("./") || normalized.startsWith("../") || normalized.startsWith("components/") || normalized.startsWith("/") || isAbsolute13(arg));
112300
112379
  }
112301
112380
  function runtimeSgDirectory(codexHome, platform, arch) {
112302
- return join85(codexHome, "runtime", "ast-grep", runtimeSlug(platform, arch));
112381
+ return join84(codexHome, "runtime", "ast-grep", runtimeSlug(platform, arch));
112303
112382
  }
112304
112383
  function describeSgSource(sgPath, env2, runtimeSgDir, platform) {
112305
112384
  const override = env2[SG_PATH_ENV_KEY]?.trim();
112306
112385
  if (override !== undefined && override.length > 0 && sgPath === override)
112307
112386
  return `env override ${SG_PATH_ENV_KEY}`;
112308
- if (sgPath === join85(runtimeSgDir, sgBinaryName(platform)))
112387
+ if (sgPath === join84(runtimeSgDir, sgBinaryName(platform)))
112309
112388
  return "runtime dir";
112310
112389
  return "PATH";
112311
112390
  }
112312
112391
  async function readBootstrapStateSummary(codexHome) {
112313
- const statePath = join85(codexHome, "plugins", "data", PLUGIN_DATA_DIR_NAME, "bootstrap", "state.json");
112392
+ const statePath = join84(codexHome, "plugins", "data", PLUGIN_DATA_DIR_NAME, "bootstrap", "state.json");
112314
112393
  const raw = await readJson2(statePath);
112315
112394
  if (raw === null)
112316
112395
  return null;
@@ -112389,16 +112468,16 @@ function isRecord14(value) {
112389
112468
  import { existsSync as existsSync59 } from "node:fs";
112390
112469
  import { readFile as readFile29 } from "node:fs/promises";
112391
112470
  import { homedir as homedir24 } from "node:os";
112392
- import { join as join86, resolve as resolve25 } from "node:path";
112471
+ import { join as join85, resolve as resolve25 } from "node:path";
112393
112472
  var RUNTIME_WRAPPER_MARKER2 = "OMO_GENERATED_RUNTIME_WRAPPER";
112394
112473
  var CHECK_NAME = "codex-runtime-wrapper";
112395
112474
  var REINSTALL_COMMAND = "npx --yes lazycodex-ai@latest install --no-tui";
112396
112475
  async function checkCodexRuntimeWrapper(deps = {}) {
112397
- const codexHome = resolve25(deps.codexHome ?? process.env.CODEX_HOME ?? join86(homedir24(), ".codex"));
112476
+ const codexHome = resolve25(deps.codexHome ?? process.env.CODEX_HOME ?? join85(homedir24(), ".codex"));
112398
112477
  const binDir = resolveCodexInstallerBinDir({ binDir: deps.binDir, codexHome, env: process.env });
112399
112478
  const platform = deps.platform ?? process.platform;
112400
- const wrapperPath = join86(binDir, platform === "win32" ? "omo-agent-toolkit.cmd" : "omo-agent-toolkit");
112401
- const legacyWrapperPath = join86(binDir, platform === "win32" ? "omo.cmd" : "omo");
112479
+ const wrapperPath = join85(binDir, platform === "win32" ? "omo-agent-toolkit.cmd" : "omo-agent-toolkit");
112480
+ const legacyWrapperPath = join85(binDir, platform === "win32" ? "omo.cmd" : "omo");
112402
112481
  const [wrapper, legacyWrapper] = await Promise.all([readRuntimeWrapper(wrapperPath), readRuntimeWrapper(legacyWrapperPath)]);
112403
112482
  const issues = [];
112404
112483
  if (wrapper?.includes(RUNTIME_WRAPPER_MARKER2) === true) {
@@ -112926,12 +113005,12 @@ import {
112926
113005
  unlinkSync as unlinkSync9,
112927
113006
  writeFileSync as writeFileSync12
112928
113007
  } from "node:fs";
112929
- import { basename as basename11, dirname as dirname34, join as join89 } from "node:path";
113008
+ import { basename as basename11, dirname as dirname34, join as join88 } from "node:path";
112930
113009
 
112931
113010
  // packages/mcp-client-core/src/config-dir.ts
112932
113011
  import { existsSync as existsSync60, realpathSync as realpathSync8 } from "node:fs";
112933
113012
  import { homedir as homedir25 } from "node:os";
112934
- import { join as join87, resolve as resolve26 } from "node:path";
113013
+ import { join as join86, resolve as resolve26 } from "node:path";
112935
113014
  function resolveConfigPath2(pathValue) {
112936
113015
  const resolvedPath = resolve26(pathValue);
112937
113016
  if (!existsSync60(resolvedPath))
@@ -112949,13 +113028,13 @@ function getOpenCodeCliConfigDir(env2 = process.env) {
112949
113028
  if (customConfigDir) {
112950
113029
  return resolveConfigPath2(customConfigDir);
112951
113030
  }
112952
- const xdgConfigDir = env2["XDG_CONFIG_HOME"]?.trim() || join87(homedir25(), ".config");
112953
- return resolveConfigPath2(join87(xdgConfigDir, "opencode"));
113031
+ const xdgConfigDir = env2["XDG_CONFIG_HOME"]?.trim() || join86(homedir25(), ".config");
113032
+ return resolveConfigPath2(join86(xdgConfigDir, "opencode"));
112954
113033
  }
112955
113034
 
112956
113035
  // packages/mcp-client-core/src/mcp-oauth/storage-index.ts
112957
113036
  import { chmodSync as chmodSync4, existsSync as existsSync61, readFileSync as readFileSync38, renameSync as renameSync6, writeFileSync as writeFileSync11 } from "node:fs";
112958
- import { join as join88 } from "node:path";
113037
+ import { join as join87 } from "node:path";
112959
113038
  var INDEX_FILE_NAME = "index.json";
112960
113039
  function isTokenIndex(value) {
112961
113040
  if (typeof value !== "object" || value === null || Array.isArray(value))
@@ -112963,7 +113042,7 @@ function isTokenIndex(value) {
112963
113042
  return Object.values(value).every((entry) => typeof entry === "string");
112964
113043
  }
112965
113044
  function getIndexPath(storageDir) {
112966
- return join88(storageDir, INDEX_FILE_NAME);
113045
+ return join87(storageDir, INDEX_FILE_NAME);
112967
113046
  }
112968
113047
  function readTokenIndex(storageDir) {
112969
113048
  const indexPath = getIndexPath(storageDir);
@@ -113007,16 +113086,16 @@ function deleteTokenIndexEntry(storageDir, hash2) {
113007
113086
  var STORAGE_DIR_NAME = "mcp-oauth";
113008
113087
  var LEGACY_STORAGE_FILE_NAME = "mcp-oauth.json";
113009
113088
  function getMcpOauthStorageDir() {
113010
- return join89(getOpenCodeCliConfigDir(), STORAGE_DIR_NAME);
113089
+ return join88(getOpenCodeCliConfigDir(), STORAGE_DIR_NAME);
113011
113090
  }
113012
113091
  function getMcpOauthServerHash(serverHost, resource) {
113013
113092
  return createHash6("sha256").update(buildKey(serverHost, resource)).digest("hex").slice(0, 32);
113014
113093
  }
113015
113094
  function getMcpOauthStoragePath(serverHost, resource) {
113016
- return join89(getMcpOauthStorageDir(), `${getMcpOauthServerHash(serverHost, resource)}.json`);
113095
+ return join88(getMcpOauthStorageDir(), `${getMcpOauthServerHash(serverHost, resource)}.json`);
113017
113096
  }
113018
113097
  function getLegacyStoragePath() {
113019
- return join89(getOpenCodeCliConfigDir(), LEGACY_STORAGE_FILE_NAME);
113098
+ return join88(getOpenCodeCliConfigDir(), LEGACY_STORAGE_FILE_NAME);
113020
113099
  }
113021
113100
  function normalizeHost2(serverHost) {
113022
113101
  let host = serverHost.trim();
@@ -113195,7 +113274,7 @@ function listTokensByHost(serverHost) {
113195
113274
  for (const [hash2, indexedKey] of Object.entries(index)) {
113196
113275
  if (!indexedKey.startsWith(prefix))
113197
113276
  continue;
113198
- const indexedToken = readTokenFile(join89(getMcpOauthStorageDir(), `${hash2}.json`));
113277
+ const indexedToken = readTokenFile(join88(getMcpOauthStorageDir(), `${hash2}.json`));
113199
113278
  if (indexedToken)
113200
113279
  result[indexedKey] = indexedToken;
113201
113280
  }
@@ -113210,7 +113289,7 @@ function listAllTokens() {
113210
113289
  for (const entry of readdirSync11(dir, { withFileTypes: true })) {
113211
113290
  if (!entry.isFile() || !entry.name.endsWith(".json") || entry.name === "index.json")
113212
113291
  continue;
113213
- const token = readTokenFile(join89(dir, entry.name));
113292
+ const token = readTokenFile(join88(dir, entry.name));
113214
113293
  const hash2 = basename11(entry.name, ".json");
113215
113294
  if (token)
113216
113295
  result[index[hash2] ?? hash2] = token;