oh-my-opencode 4.19.0 → 4.19.1

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 (214) hide show
  1. package/.agents/command/omomomo.md +1 -1
  2. package/.agents/skills/omomomo/SKILL.md +1 -1
  3. package/.opencode/command/omomomo.md +1 -1
  4. package/README.ja.md +6 -6
  5. package/README.ko.md +6 -6
  6. package/README.md +6 -6
  7. package/README.ru.md +6 -6
  8. package/README.zh-cn.md +6 -6
  9. package/dist/agents/atlas/agent.d.ts +1 -1
  10. package/dist/agents/gpt-prompt-identity.d.ts +3 -0
  11. package/dist/agents/sisyphus/gpt-5-5.d.ts +1 -1
  12. package/dist/agents/sisyphus/gpt-task-system-guide.d.ts +1 -0
  13. package/dist/agents/sisyphus-junior/gpt-5-5.d.ts +2 -2
  14. package/dist/cli/index.js +148 -94
  15. package/dist/cli-node/index.js +148 -94
  16. package/dist/config/schema/agent-overrides.d.ts +48 -48
  17. package/dist/config/schema/categories.d.ts +6 -6
  18. package/dist/config/schema/codegraph.d.ts +2 -0
  19. package/dist/config/schema/fallback-models.d.ts +5 -5
  20. package/dist/config/schema/oh-my-opencode-config.d.ts +50 -48
  21. package/dist/hooks/codegraph-bootstrap/hook.d.ts +3 -2
  22. package/dist/hooks/sisyphus-junior-notepad/constants.d.ts +1 -1
  23. package/dist/hooks/start-work/notepad-scaffold.d.ts +10 -0
  24. package/dist/index.js +2612 -1473
  25. package/dist/oh-my-opencode.schema.json +11 -0
  26. package/dist/shared/omo-process-sweep.d.ts +18 -0
  27. package/dist/skills/programming/scripts/typescript/check-no-excuse-rules.test.ts +87 -0
  28. package/dist/skills/programming/scripts/typescript/check-no-excuse-rules.ts +35 -5
  29. package/dist/skills/ulw-plan/SKILL.md +20 -1
  30. package/dist/testing/create-plugin-module.d.ts +1 -0
  31. package/dist/tui.js +66 -56
  32. package/package.json +13 -13
  33. package/packages/git-bash-mcp/dist/cli.js +54 -8
  34. package/packages/lsp-core/src/lsp/client-diagnostics-freshness.integration.test.ts +60 -0
  35. package/packages/lsp-core/src/lsp/client.ts +14 -1
  36. package/packages/lsp-core/src/lsp/fixtures/diagnostics-freshness-contract-probe.ts +2 -2
  37. package/packages/lsp-core/src/mcp.ts +9 -0
  38. package/packages/lsp-daemon/dist/cli.js +319 -51
  39. package/packages/lsp-daemon/dist/client.js +136 -48
  40. package/packages/lsp-daemon/dist/daemon-client.d.ts +0 -10
  41. package/packages/lsp-daemon/dist/daemon-client.js +4 -34
  42. package/packages/lsp-daemon/dist/daemon-failure-result.d.ts +3 -0
  43. package/packages/lsp-daemon/dist/daemon-failure-result.js +38 -0
  44. package/packages/lsp-daemon/dist/daemon-request-error.d.ts +14 -0
  45. package/packages/lsp-daemon/dist/daemon-request-error.js +26 -0
  46. package/packages/lsp-daemon/dist/daemon-server.js +5 -1
  47. package/packages/lsp-daemon/dist/index.js +137 -48
  48. package/packages/lsp-daemon/dist/proxy.d.ts +2 -0
  49. package/packages/lsp-daemon/dist/proxy.js +1 -0
  50. package/packages/lsp-daemon/dist/version-reap.d.ts +26 -0
  51. package/packages/lsp-daemon/dist/version-reap.js +182 -0
  52. package/packages/lsp-tools-mcp/dist/cli.js +61 -10
  53. package/packages/lsp-tools-mcp/dist/lsp/manager.js +6 -1
  54. package/packages/lsp-tools-mcp/dist/mcp.js +61 -10
  55. package/packages/lsp-tools-mcp/dist/tools.js +6 -1
  56. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  57. package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +64 -8
  58. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  59. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  60. package/packages/omo-codex/plugin/components/bootstrap/src/setup.ts +22 -2
  61. package/packages/omo-codex/plugin/components/codegraph/dist/cli.js +555 -251
  62. package/packages/omo-codex/plugin/components/codegraph/dist/serve.js +178 -89
  63. package/packages/omo-codex/plugin/components/codegraph/package.json +2 -2
  64. package/packages/omo-codex/plugin/components/codegraph/src/hook-types.ts +3 -1
  65. package/packages/omo-codex/plugin/components/codegraph/src/hook.ts +3 -1
  66. package/packages/omo-codex/plugin/components/codegraph/src/mcp-bridge.ts +98 -32
  67. package/packages/omo-codex/plugin/components/codegraph/src/mcp-unavailable.ts +5 -0
  68. package/packages/omo-codex/plugin/components/codegraph/src/serve.ts +15 -6
  69. package/packages/omo-codex/plugin/components/codegraph/src/session-start-worker.ts +6 -2
  70. package/packages/omo-codex/plugin/components/codegraph/src/sweep-cli.ts +1 -0
  71. package/packages/omo-codex/plugin/components/codegraph/test/hook-store-upgrade.test.ts +148 -0
  72. package/packages/omo-codex/plugin/components/codegraph/test/mcp-bridge-fixtures.ts +31 -2
  73. package/packages/omo-codex/plugin/components/codegraph/test/package-runtime.test.ts +1 -1
  74. package/packages/omo-codex/plugin/components/codegraph/test/serve-mcp-bridge-lifecycle.test.ts +65 -1
  75. package/packages/omo-codex/plugin/components/codegraph/test/serve-mcp-bridge.test.ts +3 -7
  76. package/packages/omo-codex/plugin/components/codegraph/test/serve-mcp-facade.test.ts +1 -1
  77. package/packages/omo-codex/plugin/components/codegraph/test/serve-provision.test.ts +57 -3
  78. package/packages/omo-codex/plugin/components/codegraph/test/serve-unavailable.test.ts +41 -0
  79. package/packages/omo-codex/plugin/components/codegraph/test/serve.test.ts +109 -8
  80. package/packages/omo-codex/plugin/components/codegraph/test/session-start-node-support.test.ts +2 -2
  81. package/packages/omo-codex/plugin/components/codegraph/test/session-start-worker-flow.test.ts +43 -0
  82. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  83. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  84. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  85. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  86. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  87. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  88. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +3 -3
  89. package/packages/omo-codex/plugin/components/lsp/dist/cli.js +80 -40
  90. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  91. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  92. package/packages/omo-codex/plugin/components/rules/dist/cli.js +11 -0
  93. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  94. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  95. package/packages/omo-codex/plugin/components/rules/src/post-compact-budget.ts +11 -0
  96. package/packages/omo-codex/plugin/components/rules/test/post-compact-budget.test.ts +60 -0
  97. package/packages/omo-codex/plugin/components/start-work-continuation/hooks/hooks.json +2 -2
  98. package/packages/omo-codex/plugin/components/start-work-continuation/package.json +1 -1
  99. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  100. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  101. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  102. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  103. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-clone-fidelity-reviewer.toml +2 -2
  104. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-code-reviewer.toml +2 -2
  105. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-gate-reviewer.toml +1 -1
  106. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-worker-high.toml +1 -1
  107. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-worker-medium.toml +2 -2
  108. package/packages/omo-codex/plugin/components/ultrawork/agents/plan.toml +1 -1
  109. package/packages/omo-codex/plugin/components/ultrawork/dist/cli.js +1 -1
  110. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  111. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  112. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/SKILL.md +20 -1
  113. package/packages/omo-codex/plugin/components/ultrawork/src/codex-hook.ts +1 -1
  114. package/packages/omo-codex/plugin/components/ultrawork/test/codex-hook-trigger-policy.test.ts +42 -0
  115. package/packages/omo-codex/plugin/components/ulw-loop/README.md +6 -4
  116. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-continuation.d.ts +21 -0
  117. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-continuation.js +64 -0
  118. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint.js +15 -2
  119. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-arg-parser.js +1 -1
  120. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-commands.js +2 -1
  121. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-output.d.ts +1 -1
  122. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-output.js +3 -3
  123. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-steering.d.ts +3 -0
  124. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-steering.js +85 -0
  125. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-subcommands.d.ts +0 -1
  126. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-subcommands.js +13 -33
  127. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +998 -593
  128. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-instruction.js +1 -0
  129. package/packages/omo-codex/plugin/components/ulw-loop/dist/constants.d.ts +1 -1
  130. package/packages/omo-codex/plugin/components/ulw-loop/dist/constants.js +2 -0
  131. package/packages/omo-codex/plugin/components/ulw-loop/dist/domain-types.d.ts +6 -0
  132. package/packages/omo-codex/plugin/components/ulw-loop/dist/goal-status.d.ts +1 -0
  133. package/packages/omo-codex/plugin/components/ulw-loop/dist/goal-status.js +3 -0
  134. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-crud.d.ts +1 -0
  135. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-crud.js +4 -0
  136. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-io.d.ts +1 -0
  137. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-io.js +10 -2
  138. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-verdicts.js +1 -1
  139. package/packages/omo-codex/plugin/components/ulw-loop/dist/steering-batch.d.ts +15 -0
  140. package/packages/omo-codex/plugin/components/ulw-loop/dist/steering-batch.js +84 -0
  141. package/packages/omo-codex/plugin/components/ulw-loop/dist/steering-mutations.d.ts +5 -0
  142. package/packages/omo-codex/plugin/components/ulw-loop/dist/steering-mutations.js +81 -0
  143. package/packages/omo-codex/plugin/components/ulw-loop/dist/steering.js +7 -59
  144. package/packages/omo-codex/plugin/components/ulw-loop/dist/stop-resume-hook.js +12 -4
  145. package/packages/omo-codex/plugin/components/ulw-loop/dist/validation-batch.d.ts +9 -0
  146. package/packages/omo-codex/plugin/components/ulw-loop/dist/validation-batch.js +122 -0
  147. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +4 -4
  148. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  149. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +8 -6
  150. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-continuation.ts +84 -0
  151. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint.ts +13 -2
  152. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-arg-parser.ts +1 -1
  153. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-commands.ts +1 -1
  154. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-output.ts +3 -3
  155. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-steering.ts +49 -0
  156. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-subcommands.ts +13 -45
  157. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-instruction.ts +1 -0
  158. package/packages/omo-codex/plugin/components/ulw-loop/src/constants.ts +2 -0
  159. package/packages/omo-codex/plugin/components/ulw-loop/src/domain-types.ts +7 -0
  160. package/packages/omo-codex/plugin/components/ulw-loop/src/goal-status.ts +4 -0
  161. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-crud.ts +4 -1
  162. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-io.ts +20 -2
  163. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-verdicts.ts +1 -1
  164. package/packages/omo-codex/plugin/components/ulw-loop/src/steering-batch.ts +125 -0
  165. package/packages/omo-codex/plugin/components/ulw-loop/src/steering-mutations.ts +59 -0
  166. package/packages/omo-codex/plugin/components/ulw-loop/src/steering.ts +6 -58
  167. package/packages/omo-codex/plugin/components/ulw-loop/src/stop-resume-hook.ts +12 -4
  168. package/packages/omo-codex/plugin/components/ulw-loop/src/validation-batch.ts +122 -0
  169. package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint-continuation.test.ts +76 -0
  170. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-checkpoint-continuation.test.ts +111 -0
  171. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-steering-batch.test.ts +67 -0
  172. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-validation-batch.test.ts +57 -0
  173. package/packages/omo-codex/plugin/components/ulw-loop/test/paths.test.ts +1 -0
  174. package/packages/omo-codex/plugin/components/ulw-loop/test/steering-batch.test.ts +152 -0
  175. package/packages/omo-codex/plugin/components/ulw-loop/test/stop-resume-hook.test.ts +29 -0
  176. package/packages/omo-codex/plugin/components/ulw-loop/test/validation-batch-checkpoint.test.ts +147 -0
  177. package/packages/omo-codex/plugin/components/ulw-loop/test/validation-batch.test.ts +73 -0
  178. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  179. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  180. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  181. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-codegraph-init-guidance.json +1 -1
  182. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  183. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  184. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  185. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  186. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  187. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  188. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  189. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +2 -2
  190. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  191. package/packages/omo-codex/plugin/hooks/session-start-checking-codegraph-bootstrap.json +2 -2
  192. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  193. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +2 -2
  194. package/packages/omo-codex/plugin/hooks/stop-checking-start-work-continuation.json +1 -1
  195. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  196. package/packages/omo-codex/plugin/hooks/subagent-stop-checking-start-work-continuation.json +1 -1
  197. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  198. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  199. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  200. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  201. package/packages/omo-codex/plugin/package-lock.json +41 -41
  202. package/packages/omo-codex/plugin/package.json +1 -1
  203. package/packages/omo-codex/plugin/shared/test/config-loader.test.ts +43 -0
  204. package/packages/omo-codex/plugin/skills/programming/scripts/typescript/check-no-excuse-rules.ts +35 -5
  205. package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +8 -6
  206. package/packages/omo-codex/plugin/skills/ulw-plan/SKILL.md +20 -1
  207. package/packages/omo-codex/plugin/test/aggregate-agents.test.mjs +9 -9
  208. package/packages/omo-codex/plugin/test/aggregate-hooks.test.mjs +26 -0
  209. package/packages/omo-codex/plugin/test/bootstrap-setup.test.mjs +41 -0
  210. package/packages/omo-codex/scripts/install-dist/install-local.mjs +49 -5
  211. package/packages/omo-codex/scripts/install-marketplace-cache.test.mjs +4 -1
  212. package/packages/shared-skills/skills/programming/scripts/typescript/check-no-excuse-rules.test.ts +87 -0
  213. package/packages/shared-skills/skills/programming/scripts/typescript/check-no-excuse-rules.ts +35 -5
  214. package/packages/shared-skills/skills/ulw-plan/SKILL.md +20 -1
@@ -6556,10 +6556,20 @@
6556
6556
  "default": true,
6557
6557
  "type": "boolean"
6558
6558
  },
6559
+ "daemon": {
6560
+ "default": false,
6561
+ "type": "boolean"
6562
+ },
6559
6563
  "enabled": {
6560
6564
  "default": true,
6561
6565
  "type": "boolean"
6562
6566
  },
6567
+ "excluded_roots": {
6568
+ "type": "array",
6569
+ "items": {
6570
+ "type": "string"
6571
+ }
6572
+ },
6563
6573
  "install_dir": {
6564
6574
  "type": "string"
6565
6575
  },
@@ -6574,6 +6584,7 @@
6574
6584
  "required": [
6575
6585
  "auto_init",
6576
6586
  "auto_provision",
6587
+ "daemon",
6577
6588
  "enabled"
6578
6589
  ],
6579
6590
  "additionalProperties": false
@@ -0,0 +1,18 @@
1
+ import { sweepCodegraphZombies, sweepOrphanedLspDaemonProxies, sweepStaleLspDaemonVersions } from "@oh-my-opencode/utils/process-sweep";
2
+ export interface OmoFamilySweepOptions {
3
+ readonly log?: (message: string) => void;
4
+ }
5
+ export interface OmoFamilySweeps {
6
+ readonly sweepCodegraph: typeof sweepCodegraphZombies;
7
+ readonly sweepLspProxies: typeof sweepOrphanedLspDaemonProxies;
8
+ readonly sweepStaleLspDaemons: typeof sweepStaleLspDaemonVersions;
9
+ }
10
+ export declare function sweepCodegraphZombiesBestEffort(options: OmoFamilySweepOptions, sweep?: typeof sweepCodegraphZombies): Promise<void>;
11
+ export declare function sweepOrphanedLspDaemonProxiesBestEffort(options: OmoFamilySweepOptions, sweep?: typeof sweepOrphanedLspDaemonProxies): Promise<void>;
12
+ export declare function sweepStaleLspDaemonVersionsBestEffort(options: OmoFamilySweepOptions, sweep?: typeof sweepStaleLspDaemonVersions): Promise<void>;
13
+ /**
14
+ * Runs all three omo sweep families concurrently. NEVER rejects: each family
15
+ * is wrapped best-effort so a sweep failure can only produce a log line, not
16
+ * a startup failure. Callers fire-and-forget the returned promise.
17
+ */
18
+ export declare function sweepOmoFamiliesBestEffort(options?: OmoFamilySweepOptions, sweeps?: OmoFamilySweeps): Promise<void>;
@@ -0,0 +1,87 @@
1
+ import { afterAll, beforeAll, describe, expect, test } from "bun:test"
2
+ import { spawnSync } from "node:child_process"
3
+ import { copyFileSync, mkdirSync, mkdtempSync, rmSync, symlinkSync, writeFileSync } from "node:fs"
4
+ import { createRequire } from "node:module"
5
+ import { tmpdir } from "node:os"
6
+ import { dirname, join } from "node:path"
7
+
8
+ // Regression for lazycodex#111: the script must resolve `typescript` from the
9
+ // caller project (cwd), not from the script's own location, so it works when
10
+ // executed from an installed `~/.codex/...` skill cache.
11
+
12
+ const scriptSource = join(import.meta.dir, "check-no-excuse-rules.ts")
13
+ const repoRequire = createRequire(import.meta.url)
14
+ const typescriptPackageDir = dirname(repoRequire.resolve("typescript/package.json"))
15
+
16
+ let tempRoot = ""
17
+ let cachedScript = ""
18
+ let callerDir = ""
19
+ let callerWithoutTypescriptDir = ""
20
+
21
+ function runNoExcuse(cwd: string, target: string) {
22
+ return spawnSync(process.execPath, ["--no-install", cachedScript, target], {
23
+ cwd,
24
+ encoding: "utf8",
25
+ timeout: 60_000,
26
+ })
27
+ }
28
+
29
+ describe("#given the no-excuse script is executed from an installed ~/.codex-style skill cache", () => {
30
+ beforeAll(() => {
31
+ // given a cache copy of the script outside any project, and two caller projects:
32
+ // one providing node_modules/typescript, one without typescript at all
33
+ tempRoot = mkdtempSync(join(tmpdir(), "no-excuse-cache-repro-"))
34
+ const cacheDir = join(tempRoot, ".codex", "skills", "programming", "scripts", "typescript")
35
+ mkdirSync(cacheDir, { recursive: true })
36
+ cachedScript = join(cacheDir, "check-no-excuse-rules.ts")
37
+ copyFileSync(scriptSource, cachedScript)
38
+
39
+ callerDir = join(tempRoot, "caller-project")
40
+ mkdirSync(join(callerDir, "node_modules"), { recursive: true })
41
+ symlinkSync(typescriptPackageDir, join(callerDir, "node_modules", "typescript"), "junction")
42
+ writeFileSync(join(callerDir, "clean.ts"), "export const answer: number = 42\n")
43
+ writeFileSync(join(callerDir, "violating.ts"), "const x = foo as any\nexport default x\n")
44
+
45
+ callerWithoutTypescriptDir = join(tempRoot, "caller-without-typescript")
46
+ mkdirSync(callerWithoutTypescriptDir, { recursive: true })
47
+ writeFileSync(join(callerWithoutTypescriptDir, "clean.ts"), "export const answer: number = 42\n")
48
+ })
49
+
50
+ afterAll(() => {
51
+ rmSync(tempRoot, { recursive: true, force: true })
52
+ })
53
+
54
+ // A generous timeout: the first run does a cold TypeScript program load in a
55
+ // spawned subprocess, which can exceed bun test's 5s default on a cold cache
56
+ // (matches the 60s spawnSync ceiling). This bounds the subprocess, it does not
57
+ // wait on wall-clock time as behavior.
58
+ test("#when the caller project provides typescript #then it resolves the caller's typescript and exits 0", () => {
59
+ // when no-excuse runs from the cache copy against the caller project
60
+ const result = runNoExcuse(callerDir, "clean.ts")
61
+
62
+ // then the caller's own typescript is used and the clean file passes
63
+ expect(result.error).toBeUndefined()
64
+ expect(result.status).toBe(0)
65
+ expect(result.stdout).toContain("No violations in 1 file(s).")
66
+ }, 60_000)
67
+
68
+ test("#when a checked file violates the rules #then violations are still reported with exit 1", () => {
69
+ // when no-excuse runs against a file containing `as any`
70
+ const result = runNoExcuse(callerDir, "violating.ts")
71
+
72
+ // then the existing CLI behavior is unchanged
73
+ expect(result.error).toBeUndefined()
74
+ expect(result.status).toBe(1)
75
+ expect(result.stderr).toContain("[no-any-assertion]")
76
+ }, 60_000)
77
+
78
+ test("#when the caller project genuinely lacks typescript #then it fails with a clear error and exit 2", () => {
79
+ // when no-excuse runs from a caller project with no local typescript
80
+ const result = runNoExcuse(callerWithoutTypescriptDir, "clean.ts")
81
+
82
+ // then it reports the resolution problem instead of crashing mid-analysis
83
+ expect(result.error).toBeUndefined()
84
+ expect(result.status).toBe(2)
85
+ expect(result.stderr).toContain('cannot resolve "typescript" from the caller project')
86
+ }, 60_000)
87
+ })
@@ -19,6 +19,10 @@
19
19
  * Usage:
20
20
  * bun run scripts/check-no-excuse-rules.ts <file-or-dir>...
21
21
  *
22
+ * The `typescript` package is resolved from the caller project (process.cwd()),
23
+ * not from this script's location, so the script works when executed from an
24
+ * installed skill-cache path (e.g. ~/.codex/...) against a project checkout.
25
+ *
22
26
  * Exit codes:
23
27
  * 0 - no violations
24
28
  * 1 - violations found
@@ -26,9 +30,35 @@
26
30
  */
27
31
 
28
32
  import fs from "node:fs"
33
+ import { createRequire } from "node:module"
29
34
  import path from "node:path"
30
35
  import process from "node:process"
31
- import ts from "typescript"
36
+ import type * as tsTypes from "typescript"
37
+
38
+ type TsModule = typeof import("typescript")
39
+
40
+ function loadTypescriptFromCaller(): TsModule {
41
+ // A static `import ts from "typescript"` resolves from this script's location —
42
+ // an installed skill-cache path (e.g. ~/.codex/...) with no node_modules of its
43
+ // own — and fails even when the checked project has typescript. Resolve from the
44
+ // caller project (cwd) instead. When the caller has no local typescript, Bun
45
+ // falls back to a version-only stub from its global install cache instead of
46
+ // throwing, so the loaded module's API shape is verified as well.
47
+ const callerRequire = createRequire(path.join(process.cwd(), "no-excuse-anchor.cjs"))
48
+ try {
49
+ const loaded: Partial<TsModule> = callerRequire("typescript")
50
+ if (typeof loaded.createSourceFile === "function") return loaded as TsModule
51
+ } catch { // no-excuse-ok: catch
52
+ // fall through to the clear error below
53
+ }
54
+ console.error(
55
+ `error: cannot resolve "typescript" from the caller project (${process.cwd()}). ` +
56
+ "Install it in the project being checked (e.g. `bun add -d typescript`) and re-run.",
57
+ )
58
+ process.exit(2)
59
+ }
60
+
61
+ const ts: TsModule = loadTypescriptFromCaller()
32
62
 
33
63
  type RuleId =
34
64
  | "no-any-assertion"
@@ -95,7 +125,7 @@ function discoverFiles(inputs: string[]): string[] {
95
125
  return files
96
126
  }
97
127
 
98
- function getLineText(sourceFile: ts.SourceFile, line: number): string {
128
+ function getLineText(sourceFile: tsTypes.SourceFile, line: number): string {
99
129
  const lineStarts = sourceFile.getLineStarts()
100
130
  const start = lineStarts[line]
101
131
  const end = line + 1 < lineStarts.length ? lineStarts[line + 1] : sourceFile.getEnd()
@@ -107,17 +137,17 @@ function analyzeFile(filePath: string): Violation[] {
107
137
  const sourceFile = ts.createSourceFile(filePath, source, ts.ScriptTarget.Latest, true)
108
138
  const violations: Violation[] = []
109
139
 
110
- function pos(node: ts.Node): { line: number; column: number } {
140
+ function pos(node: tsTypes.Node): { line: number; column: number } {
111
141
  const { line, character } = sourceFile.getLineAndCharacterOfPosition(node.getStart(sourceFile))
112
142
  return { line: line + 1, column: character + 1 }
113
143
  }
114
144
 
115
- function lineHasOptOut(node: ts.Node): boolean {
145
+ function lineHasOptOut(node: tsTypes.Node): boolean {
116
146
  const { line } = sourceFile.getLineAndCharacterOfPosition(node.getStart(sourceFile))
117
147
  return OPT_OUT_RE.test(getLineText(sourceFile, line))
118
148
  }
119
149
 
120
- function visit(node: ts.Node): void {
150
+ function visit(node: tsTypes.Node): void {
121
151
  // ── as any / as unknown ──
122
152
  if (ts.isAsExpression(node)) {
123
153
  const typeText = node.type.getText(sourceFile)
@@ -13,11 +13,30 @@ You are **Prometheus**, a planning consultant. You turn a vague or large request
13
13
 
14
14
  Outcome-first: explore a lot, ask few sharp questions - or none, when the intent is fuzzy (see routing) - and stop the moment the plan is done.
15
15
 
16
+ ## MANDATORY OPENING ANNOUNCEMENT
17
+
18
+ The FIRST user-visible line of the turn that activates this skill MUST be exactly:
19
+
20
+ `ULW-PLAN MODE ENABLED!`
21
+
22
+ If another active mode mandates its own first line (ultrawork does), print that line first and this marker on the next line - both contracts stay satisfied.
23
+
24
+ Directly under the marker, before any exploration, state the working contract once, in your own words, carrying ALL of these commitments:
25
+
26
+ 1. **Persona + no-implementation pledge** - from now on you work as Prometheus, a planning consultant, and you will never start implementation - no product-code edits, no implementer subagents - until the user explicitly says okay; even then, approval authorizes writing the plan only, and execution starts in a separate worker session (e.g. `$start-work`).
27
+ 2. **Workflow preview** - the order of what happens next: parallel read-only exploration (plus outside research when the repo cannot answer) until the open unknowns are resolved; the intent verdict from INTENT ROUTING, announced; questions to the user ONLY when a genuine owner-decision survives exploration - or when exploration and research both come back empty on a fork the plan cannot proceed without; then the approval brief, and the plan is written only after the explicit okay.
28
+
29
+ Example opening (adapt the wording, keep every commitment):
30
+
31
+ > ULW-PLAN MODE ENABLED!
32
+ > From now on I am working as Prometheus, a planning consultant. I will not start any implementation until you explicitly say okay - and approval authorizes writing the plan only; execution starts separately (e.g. `$start-work`).
33
+ > Next, in order: (1) parallel read-only exploration and research, (2) intent verdict announced (CLEAR or UNCLEAR, plus whether high-accuracy review is required), (3) questions only for the forks exploration cannot settle - or where research finds nothing on a blocking decision, (4) approval brief, then (5) the plan is written after your okay.
34
+
16
35
  ## INTENT ROUTING - pick ONE intent reference
17
36
 
18
37
  **Review modifiers are a gate trigger, not a style cue.** If the user says "high accuracy", "ultra high accuracy", "고정밀", "deep review", or equivalent - in ANY turn, even appended to a follow-up question and even after the plan already exists - set `review_required: true` in the draft: the dual high-accuracy review (native `momus` + the independent Oracle review) is now REQUIRED before handoff, and if the plan already exists you run it this same turn. Answering the current question more carefully does NOT satisfy it. This does NOT choose CLEAR/UNCLEAR and does NOT suppress interview.
19
38
 
20
- After grounding, make ONE judgment, record `intent: clear|unclear` plus `review_required`, **ANNOUNCE both to the user in one line**, then load ONE intent reference (you ALSO read `references/full-workflow.md` for the shared mechanics - see below). The test keys on whether the desired **OUTCOME** is clear, NOT on request length. The announcement is the user's first signal of whether they will be interviewed and whether high-accuracy review is already requested - never skip it.
39
+ After grounding, make ONE judgment, record `intent: clear|unclear` plus `review_required`, **ANNOUNCE both to the user in one line**, then load ONE intent reference (you ALSO read `references/full-workflow.md` for the shared mechanics - see below). The test keys on whether the desired **OUTCOME** is clear, NOT on request length. This verdict line and the opening announcement above are the two mandatory user-visible signals of a planning session - it tells the user whether they will be interviewed and whether high-accuracy review is already requested; never skip either.
21
40
 
22
41
  > "Intent: **CLEAR**, review required - you specified the endpoint and asked for high accuracy. I will ask only the genuine forks, then run the high-accuracy review after approval."
23
42
  > "Intent: **UNCLEAR**, review required - 'make auth better' is open-ended and you asked for high accuracy. I will choose best-practice defaults, then run the high-accuracy review automatically."
@@ -27,6 +27,7 @@ export type PluginModuleDeps = {
27
27
  log: typeof log;
28
28
  logLegacyPluginStartupWarning: typeof logLegacyPluginStartupWarning;
29
29
  migrateLegacyWorkspaceDirectory: typeof migrateLegacyWorkspaceDirectory;
30
+ startOmoProcessSweep: () => Promise<void>;
30
31
  detectDuplicateOmoPlugin: typeof detectDuplicateOmoPlugin;
31
32
  getDuplicateOmoPluginWarning: typeof getDuplicateOmoPluginWarning;
32
33
  detectExternalSkillPlugin: typeof detectExternalSkillPlugin;
package/dist/tui.js CHANGED
@@ -4171,6 +4171,7 @@ var init_env = __esm(() => {
4171
4171
  SAFE_CODEGRAPH_RUNTIME_ENV_KEYS = new Set([
4172
4172
  "CODEGRAPH_ALLOW_UNSAFE_NODE",
4173
4173
  "CODEGRAPH_BIN",
4174
+ "CODEGRAPH_DAEMON_IDLE_TIMEOUT_MS",
4174
4175
  "CODEGRAPH_FAKE_LOG",
4175
4176
  "CODEGRAPH_NO_DAEMON",
4176
4177
  "CODEGRAPH_NODE_BIN",
@@ -4186,6 +4187,9 @@ var init_workspace = () => {};
4186
4187
  // packages/utils/src/codegraph/guidance.ts
4187
4188
  var init_guidance = () => {};
4188
4189
 
4190
+ // packages/utils/src/codegraph/manifest.ts
4191
+ var init_manifest = () => {};
4192
+
4189
4193
  // packages/utils/src/codegraph/provision.ts
4190
4194
  import { execFile } from "child_process";
4191
4195
  import { promisify } from "util";
@@ -4208,6 +4212,7 @@ var init_resolve2 = __esm(() => {
4208
4212
  var init_codegraph = __esm(() => {
4209
4213
  init_env();
4210
4214
  init_guidance();
4215
+ init_manifest();
4211
4216
  init_provision();
4212
4217
  init_process_sweep();
4213
4218
  init_resolve2();
@@ -19958,7 +19963,9 @@ var init_codegraph2 = __esm(() => {
19958
19963
  CodegraphConfigSchema = exports_external.object({
19959
19964
  auto_init: exports_external.boolean().default(true),
19960
19965
  auto_provision: exports_external.boolean().default(true),
19966
+ daemon: exports_external.boolean().default(false),
19961
19967
  enabled: exports_external.boolean().default(true),
19968
+ excluded_roots: exports_external.array(exports_external.string()).optional(),
19962
19969
  install_dir: exports_external.string().optional(),
19963
19970
  telemetry: exports_external.boolean().optional(),
19964
19971
  watch_debounce_ms: exports_external.number().nonnegative().optional()
@@ -20667,26 +20674,25 @@ var init_agent_model_requirements = __esm(() => {
20667
20674
  fallbackChain: [
20668
20675
  {
20669
20676
  providers: ["anthropic", "github-copilot", "opencode", "vercel"],
20670
- model: "claude-opus-4-7",
20677
+ model: "claude-opus-4-8",
20671
20678
  variant: "max"
20672
20679
  },
20673
- { providers: ["opencode-go", "kimi-for-coding", "moonshotai", "opencode", "vercel"], model: "kimi-k3" },
20674
- { providers: ["opencode-go", "vercel"], model: "kimi-k2.6" },
20675
- { providers: ["kimi-for-coding"], model: "k2p5" },
20676
20680
  {
20677
20681
  providers: [
20682
+ "opencode-go",
20683
+ "kimi-for-coding",
20684
+ "moonshotai",
20678
20685
  "opencode",
20686
+ "vercel",
20679
20687
  "bailian-coding-plan",
20680
- "moonshotai",
20681
20688
  "moonshotai-cn",
20682
20689
  "firmware",
20683
20690
  "ollama-cloud",
20684
- "aihubmix",
20685
- "vercel"
20691
+ "aihubmix"
20686
20692
  ],
20687
- model: "kimi-k2.5"
20693
+ model: "kimi-k3"
20688
20694
  },
20689
- { providers: ["openai", "github-copilot", "opencode", "vercel"], model: "gpt-5.5", variant: "medium" },
20695
+ { providers: ["openai", "github-copilot", "opencode", "vercel"], model: "gpt-5.6-sol", variant: "medium" },
20690
20696
  { providers: ["zai-coding-plan", "opencode", "bailian-coding-plan", "vercel"], model: "glm-5" },
20691
20697
  { providers: ["opencode"], model: "big-pickle" }
20692
20698
  ],
@@ -20695,13 +20701,8 @@ var init_agent_model_requirements = __esm(() => {
20695
20701
  hephaestus: {
20696
20702
  fallbackChain: [
20697
20703
  {
20698
- providers: ["openai", "github-copilot", "vercel"],
20704
+ providers: ["openai", "github-copilot", "vercel", "opencode"],
20699
20705
  model: "gpt-5.6-sol",
20700
- variant: "high"
20701
- },
20702
- {
20703
- providers: ["openai", "github-copilot", "opencode", "vercel"],
20704
- model: "gpt-5.5",
20705
20706
  variant: "medium"
20706
20707
  }
20707
20708
  ],
@@ -20711,8 +20712,13 @@ var init_agent_model_requirements = __esm(() => {
20711
20712
  oracle: {
20712
20713
  fallbackChain: [
20713
20714
  {
20714
- providers: ["openai", "github-copilot", "opencode", "vercel"],
20715
- model: "gpt-5.5",
20715
+ providers: ["openai", "opencode", "vercel"],
20716
+ model: "gpt-5.6-sol",
20717
+ variant: "xhigh"
20718
+ },
20719
+ {
20720
+ providers: ["github-copilot"],
20721
+ model: "gpt-5.6-sol",
20716
20722
  variant: "high"
20717
20723
  },
20718
20724
  {
@@ -20722,7 +20728,7 @@ var init_agent_model_requirements = __esm(() => {
20722
20728
  },
20723
20729
  {
20724
20730
  providers: ["anthropic", "github-copilot", "opencode", "vercel"],
20725
- model: "claude-opus-4-7",
20731
+ model: "claude-opus-4-8",
20726
20732
  variant: "max"
20727
20733
  },
20728
20734
  { providers: ["opencode-go", "vercel"], model: "glm-5.2" }
@@ -20754,8 +20760,8 @@ var init_agent_model_requirements = __esm(() => {
20754
20760
  },
20755
20761
  "multimodal-looker": {
20756
20762
  fallbackChain: [
20757
- { providers: ["openai", "opencode", "vercel"], model: "gpt-5.5", variant: "medium" },
20758
- { providers: ["opencode-go", "vercel"], model: "kimi-k2.6" },
20763
+ { providers: ["openai", "opencode", "vercel"], model: "gpt-5.6-sol", variant: "low" },
20764
+ { providers: ["opencode-go", "vercel"], model: "kimi-k3" },
20759
20765
  { providers: ["zai-coding-plan", "vercel"], model: "glm-4.6v" },
20760
20766
  { providers: ["openai", "github-copilot", "opencode", "vercel"], model: "gpt-5-nano" }
20761
20767
  ]
@@ -20764,12 +20770,12 @@ var init_agent_model_requirements = __esm(() => {
20764
20770
  fallbackChain: [
20765
20771
  {
20766
20772
  providers: ["anthropic", "github-copilot", "opencode", "vercel"],
20767
- model: "claude-opus-4-7",
20773
+ model: "claude-opus-4-8",
20768
20774
  variant: "max"
20769
20775
  },
20770
20776
  {
20771
20777
  providers: ["openai", "github-copilot", "opencode", "vercel"],
20772
- model: "gpt-5.5",
20778
+ model: "gpt-5.6-sol",
20773
20779
  variant: "high"
20774
20780
  },
20775
20781
  { providers: ["opencode-go", "vercel"], model: "glm-5.2" },
@@ -20787,16 +20793,16 @@ var init_agent_model_requirements = __esm(() => {
20787
20793
  },
20788
20794
  {
20789
20795
  providers: ["anthropic", "github-copilot", "opencode", "vercel"],
20790
- model: "claude-opus-4-7",
20796
+ model: "claude-opus-4-8",
20791
20797
  variant: "max"
20792
20798
  },
20793
20799
  {
20794
20800
  providers: ["openai", "github-copilot", "opencode", "vercel"],
20795
- model: "gpt-5.5",
20796
- variant: "high"
20801
+ model: "gpt-5.6-sol",
20802
+ variant: "medium"
20797
20803
  },
20798
20804
  { providers: ["opencode-go", "vercel"], model: "glm-5.2" },
20799
- { providers: ["kimi-for-coding"], model: "k2p5" }
20805
+ { providers: ["kimi-for-coding"], model: "kimi-k3" }
20800
20806
  ]
20801
20807
  },
20802
20808
  momus: {
@@ -20812,13 +20818,18 @@ var init_agent_model_requirements = __esm(() => {
20812
20818
  variant: "high"
20813
20819
  },
20814
20820
  {
20815
- providers: ["openai", "github-copilot", "opencode", "vercel"],
20816
- model: "gpt-5.5",
20821
+ providers: ["openai", "opencode", "vercel"],
20822
+ model: "gpt-5.6-sol",
20817
20823
  variant: "xhigh"
20818
20824
  },
20825
+ {
20826
+ providers: ["github-copilot"],
20827
+ model: "gpt-5.6-sol",
20828
+ variant: "high"
20829
+ },
20819
20830
  {
20820
20831
  providers: ["anthropic", "github-copilot", "opencode", "vercel"],
20821
- model: "claude-opus-4-7",
20832
+ model: "claude-opus-4-8",
20822
20833
  variant: "max"
20823
20834
  },
20824
20835
  {
@@ -20832,10 +20843,10 @@ var init_agent_model_requirements = __esm(() => {
20832
20843
  atlas: {
20833
20844
  fallbackChain: [
20834
20845
  { providers: ["anthropic", "github-copilot", "opencode", "vercel"], model: "claude-sonnet-4-6" },
20835
- { providers: ["opencode-go", "vercel"], model: "kimi-k2.6" },
20846
+ { providers: ["opencode-go", "vercel"], model: "kimi-k3" },
20836
20847
  {
20837
20848
  providers: ["openai", "github-copilot", "opencode", "vercel"],
20838
- model: "gpt-5.5",
20849
+ model: "gpt-5.6-sol",
20839
20850
  variant: "medium"
20840
20851
  },
20841
20852
  { providers: ["opencode-go", "vercel"], model: "minimax-m3" },
@@ -20846,10 +20857,10 @@ var init_agent_model_requirements = __esm(() => {
20846
20857
  "sisyphus-junior": {
20847
20858
  fallbackChain: [
20848
20859
  { providers: ["anthropic", "github-copilot", "opencode", "vercel"], model: "claude-sonnet-4-6" },
20849
- { providers: ["opencode-go", "vercel"], model: "kimi-k2.6" },
20860
+ { providers: ["opencode-go", "vercel"], model: "kimi-k3" },
20850
20861
  {
20851
20862
  providers: ["openai", "github-copilot", "opencode", "vercel"],
20852
- model: "gpt-5.5",
20863
+ model: "gpt-5.6-sol",
20853
20864
  variant: "medium"
20854
20865
  },
20855
20866
  { providers: ["opencode-go", "vercel"], model: "minimax-m3" },
@@ -20875,11 +20886,11 @@ var init_category_model_requirements = __esm(() => {
20875
20886
  { providers: ["zai-coding-plan", "opencode", "bailian-coding-plan", "vercel"], model: "glm-5" },
20876
20887
  {
20877
20888
  providers: ["anthropic", "github-copilot", "opencode", "vercel"],
20878
- model: "claude-opus-4-7",
20889
+ model: "claude-opus-4-8",
20879
20890
  variant: "max"
20880
20891
  },
20881
20892
  { providers: ["opencode-go", "vercel"], model: "glm-5.2" },
20882
- { providers: ["kimi-for-coding"], model: "k2p5" }
20893
+ { providers: ["kimi-for-coding"], model: "kimi-k3" }
20883
20894
  ]
20884
20895
  },
20885
20896
  ultrabrain: {
@@ -20896,7 +20907,7 @@ var init_category_model_requirements = __esm(() => {
20896
20907
  },
20897
20908
  {
20898
20909
  providers: ["openai", "opencode", "vercel"],
20899
- model: "gpt-5.5",
20910
+ model: "gpt-5.6-sol",
20900
20911
  variant: "xhigh"
20901
20912
  },
20902
20913
  {
@@ -20906,7 +20917,7 @@ var init_category_model_requirements = __esm(() => {
20906
20917
  },
20907
20918
  {
20908
20919
  providers: ["anthropic", "github-copilot", "opencode", "vercel"],
20909
- model: "claude-opus-4-7",
20920
+ model: "claude-opus-4-8",
20910
20921
  variant: "max"
20911
20922
  },
20912
20923
  { providers: ["opencode-go", "vercel"], model: "glm-5.2" }
@@ -20931,12 +20942,12 @@ var init_category_model_requirements = __esm(() => {
20931
20942
  },
20932
20943
  {
20933
20944
  providers: ["openai", "github-copilot", "opencode", "vercel"],
20934
- model: "gpt-5.5",
20945
+ model: "gpt-5.6-sol",
20935
20946
  variant: "medium"
20936
20947
  },
20937
20948
  {
20938
20949
  providers: ["anthropic", "github-copilot", "opencode", "vercel"],
20939
- model: "claude-opus-4-7",
20950
+ model: "claude-opus-4-8",
20940
20951
  variant: "max"
20941
20952
  },
20942
20953
  {
@@ -20944,7 +20955,7 @@ var init_category_model_requirements = __esm(() => {
20944
20955
  model: "gemini-3.1-pro",
20945
20956
  variant: "high"
20946
20957
  },
20947
- { providers: ["opencode-go", "vercel"], model: "kimi-k2.6" },
20958
+ { providers: ["opencode-go", "vercel"], model: "kimi-k3" },
20948
20959
  { providers: ["opencode-go", "vercel"], model: "glm-5.2" }
20949
20960
  ]
20950
20961
  },
@@ -20957,11 +20968,11 @@ var init_category_model_requirements = __esm(() => {
20957
20968
  },
20958
20969
  {
20959
20970
  providers: ["anthropic", "github-copilot", "opencode", "vercel"],
20960
- model: "claude-opus-4-7",
20971
+ model: "claude-opus-4-8",
20961
20972
  variant: "max"
20962
20973
  },
20963
- { providers: ["openai", "github-copilot", "opencode", "vercel"], model: "gpt-5.5" },
20964
- { providers: ["opencode-go", "vercel"], model: "kimi-k2.6" },
20974
+ { providers: ["openai", "github-copilot", "opencode", "vercel"], model: "gpt-5.6-sol", variant: "high" },
20975
+ { providers: ["opencode-go", "vercel"], model: "kimi-k3" },
20965
20976
  { providers: ["opencode-go", "vercel"], model: "glm-5.2" }
20966
20977
  ]
20967
20978
  },
@@ -21003,10 +21014,10 @@ var init_category_model_requirements = __esm(() => {
21003
21014
  },
21004
21015
  {
21005
21016
  providers: ["openai", "opencode", "vercel"],
21006
- model: "gpt-5.5",
21017
+ model: "gpt-5.6-sol",
21007
21018
  variant: "medium"
21008
21019
  },
21009
- { providers: ["opencode-go", "vercel"], model: "kimi-k2.6" },
21020
+ { providers: ["opencode-go", "vercel"], model: "kimi-k3" },
21010
21021
  {
21011
21022
  providers: ["google", "github-copilot", "opencode", "vercel"],
21012
21023
  model: "gemini-3-flash"
@@ -21020,30 +21031,29 @@ var init_category_model_requirements = __esm(() => {
21020
21031
  fallbackChain: [
21021
21032
  {
21022
21033
  providers: ["anthropic", "github-copilot", "opencode", "vercel"],
21023
- model: "claude-opus-4-7",
21034
+ model: "claude-opus-4-8",
21024
21035
  variant: "max"
21025
21036
  },
21026
21037
  {
21027
21038
  providers: ["openai", "github-copilot", "opencode", "vercel"],
21028
- model: "gpt-5.5",
21039
+ model: "gpt-5.6-sol",
21029
21040
  variant: "high"
21030
21041
  },
21031
21042
  { providers: ["zai-coding-plan", "opencode", "bailian-coding-plan", "vercel"], model: "glm-5" },
21032
- { providers: ["kimi-for-coding"], model: "k2p5" },
21043
+ { providers: ["kimi-for-coding"], model: "kimi-k3" },
21033
21044
  { providers: ["opencode-go", "vercel"], model: "glm-5.2" },
21034
- { providers: ["opencode", "bailian-coding-plan", "vercel"], model: "kimi-k2.5" },
21035
21045
  {
21036
21046
  providers: [
21037
21047
  "opencode",
21038
21048
  "bailian-coding-plan",
21049
+ "vercel",
21039
21050
  "moonshotai",
21040
21051
  "moonshotai-cn",
21041
21052
  "firmware",
21042
21053
  "ollama-cloud",
21043
- "aihubmix",
21044
- "vercel"
21054
+ "aihubmix"
21045
21055
  ],
21046
- model: "kimi-k2.5"
21056
+ model: "kimi-k3"
21047
21057
  }
21048
21058
  ]
21049
21059
  },
@@ -21053,7 +21063,7 @@ var init_category_model_requirements = __esm(() => {
21053
21063
  providers: ["google", "github-copilot", "opencode", "vercel"],
21054
21064
  model: "gemini-3-flash"
21055
21065
  },
21056
- { providers: ["opencode-go", "vercel"], model: "kimi-k2.6" },
21066
+ { providers: ["opencode-go", "vercel"], model: "kimi-k3" },
21057
21067
  {
21058
21068
  providers: ["anthropic", "github-copilot", "opencode", "vercel"],
21059
21069
  model: "claude-sonnet-4-6"
@@ -21995,7 +22005,7 @@ var init_anthropic_categories = __esm(() => {
21995
22005
  ANTHROPIC_CATEGORIES = [
21996
22006
  {
21997
22007
  name: "unspecified-high",
21998
- config: { model: "anthropic/claude-opus-4-7", variant: "max" },
22008
+ config: { model: "anthropic/claude-opus-4-8", variant: "max" },
21999
22009
  description: "Tasks that don't fit other categories, high effort required",
22000
22010
  promptAppend: UNSPECIFIED_HIGH_CATEGORY_PROMPT_APPEND
22001
22011
  }
@@ -22153,7 +22163,7 @@ var init_kimi_categories = __esm(() => {
22153
22163
  KIMI_CATEGORIES = [
22154
22164
  {
22155
22165
  name: "writing",
22156
- config: { model: "kimi-for-coding/k2p5" },
22166
+ config: { model: "kimi-for-coding/kimi-k3" },
22157
22167
  description: "Documentation, prose, technical writing",
22158
22168
  promptAppend: WRITING_CATEGORY_PROMPT_APPEND
22159
22169
  }
@@ -75795,7 +75805,7 @@ var init_claude_model_mapper = __esm(() => {
75795
75805
  init_model_normalization2();
75796
75806
  CLAUDE_CODE_ALIAS_MAP = new Map([
75797
75807
  ["sonnet", `${ANTHROPIC_PREFIX}claude-sonnet-4-6`],
75798
- ["opus", `${ANTHROPIC_PREFIX}claude-opus-4-7`],
75808
+ ["opus", `${ANTHROPIC_PREFIX}claude-opus-4-8`],
75799
75809
  ["haiku", `${ANTHROPIC_PREFIX}claude-haiku-4-5`]
75800
75810
  ]);
75801
75811
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oh-my-opencode",
3
- "version": "4.19.0",
3
+ "version": "4.19.1",
4
4
  "description": "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
5
5
  "main": "./dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -212,18 +212,18 @@
212
212
  "typescript": "^6.0.3"
213
213
  },
214
214
  "optionalDependencies": {
215
- "oh-my-opencode-darwin-arm64": "4.19.0",
216
- "oh-my-opencode-darwin-x64": "4.19.0",
217
- "oh-my-opencode-darwin-x64-baseline": "4.19.0",
218
- "oh-my-opencode-linux-arm64": "4.19.0",
219
- "oh-my-opencode-linux-arm64-musl": "4.19.0",
220
- "oh-my-opencode-linux-x64": "4.19.0",
221
- "oh-my-opencode-linux-x64-baseline": "4.19.0",
222
- "oh-my-opencode-linux-x64-musl": "4.19.0",
223
- "oh-my-opencode-linux-x64-musl-baseline": "4.19.0",
224
- "oh-my-opencode-windows-arm64": "4.19.0",
225
- "oh-my-opencode-windows-x64": "4.19.0",
226
- "oh-my-opencode-windows-x64-baseline": "4.19.0"
215
+ "oh-my-opencode-darwin-arm64": "4.19.1",
216
+ "oh-my-opencode-darwin-x64": "4.19.1",
217
+ "oh-my-opencode-darwin-x64-baseline": "4.19.1",
218
+ "oh-my-opencode-linux-arm64": "4.19.1",
219
+ "oh-my-opencode-linux-arm64-musl": "4.19.1",
220
+ "oh-my-opencode-linux-x64": "4.19.1",
221
+ "oh-my-opencode-linux-x64-baseline": "4.19.1",
222
+ "oh-my-opencode-linux-x64-musl": "4.19.1",
223
+ "oh-my-opencode-linux-x64-musl-baseline": "4.19.1",
224
+ "oh-my-opencode-windows-arm64": "4.19.1",
225
+ "oh-my-opencode-windows-x64": "4.19.1",
226
+ "oh-my-opencode-windows-x64-baseline": "4.19.1"
227
227
  },
228
228
  "overrides": {
229
229
  "@earendil-works/pi-agent-core": "0.80.3",