oh-my-opencode 4.18.1 → 4.19.0

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 (217) hide show
  1. package/.agents/skills/codex-qa/scripts/lsp-e2e.sh +39 -16
  2. package/.agents/skills/opencode-qa/scripts/lsp-e2e.sh +111 -28
  3. package/README.ja.md +2 -2
  4. package/README.ko.md +2 -2
  5. package/README.md +4 -4
  6. package/README.ru.md +2 -2
  7. package/README.zh-cn.md +2 -2
  8. package/bin/AGENTS.md +33 -0
  9. package/dist/agents/atlas/agent.d.ts +6 -5
  10. package/dist/agents/sisyphus/index.d.ts +5 -0
  11. package/dist/agents/sisyphus/kimi-k3.d.ts +19 -0
  12. package/dist/agents/sisyphus-agent-factory.d.ts +1 -1
  13. package/dist/agents/sisyphus-junior/agent.d.ts +8 -4
  14. package/dist/agents/sisyphus-junior/index.d.ts +2 -0
  15. package/dist/agents/sisyphus-junior/kimi-k3.d.ts +12 -0
  16. package/dist/agents/types.d.ts +2 -2
  17. package/dist/cli/index.js +690 -139
  18. package/dist/cli-node/index.js +690 -139
  19. package/dist/config/index.d.ts +1 -1
  20. package/dist/config/schema/browser-automation.d.ts +1 -0
  21. package/dist/config/schema/commands.d.ts +1 -3
  22. package/dist/config/schema/default-mode.d.ts +1 -1
  23. package/dist/config/schema/goal.d.ts +7 -0
  24. package/dist/config/schema/hooks.d.ts +1 -1
  25. package/dist/config/schema/oh-my-opencode-config.d.ts +6 -10
  26. package/dist/config/schema/ralph-loop.d.ts +1 -1
  27. package/dist/config/schema.d.ts +1 -1
  28. package/dist/create-hooks.d.ts +1 -1
  29. package/dist/features/builtin-commands/templates/goal.d.ts +1 -0
  30. package/dist/features/builtin-commands/templates/stop-continuation.d.ts +1 -1
  31. package/dist/features/builtin-commands/types.d.ts +1 -1
  32. package/dist/hooks/anthropic-context-window-limit-recovery/empty-content-recovery-sdk.d.ts +6 -0
  33. package/dist/hooks/auto-slash-command/executor.d.ts +1 -0
  34. package/dist/hooks/category-skill-reminder/hook.d.ts +9 -1
  35. package/dist/hooks/comment-checker/hook.d.ts +8 -1
  36. package/dist/hooks/goal/command-arguments.d.ts +13 -0
  37. package/dist/hooks/goal/controller.d.ts +26 -0
  38. package/dist/hooks/goal/index.d.ts +23 -0
  39. package/dist/hooks/goal/prompt.d.ts +3 -0
  40. package/dist/hooks/goal/store.d.ts +8 -0
  41. package/dist/hooks/goal/tools.d.ts +10 -0
  42. package/dist/hooks/goal/types.d.ts +93 -0
  43. package/dist/hooks/goal/validation.d.ts +4 -0
  44. package/dist/hooks/index.d.ts +1 -0
  45. package/dist/hooks/keyword-detector/hook.d.ts +1 -2
  46. package/dist/hooks/ralph-loop/types.d.ts +1 -1
  47. package/dist/hooks/todo-continuation-enforcer/types.d.ts +3 -0
  48. package/dist/index.js +3706 -4329
  49. package/dist/oh-my-opencode.schema.json +23 -19
  50. package/dist/plugin/chat-message/loop-commands.d.ts +1 -1
  51. package/dist/plugin/chat-message/types.d.ts +23 -10
  52. package/dist/plugin/hooks/create-core-hooks.d.ts +1 -1
  53. package/dist/plugin/hooks/create-session-hooks.d.ts +3 -2
  54. package/dist/plugin/hooks/create-transform-hooks.d.ts +0 -2
  55. package/dist/plugin/messages-transform.d.ts +1 -0
  56. package/dist/plugin/stop-continuation.d.ts +2 -2
  57. package/dist/plugin-handlers/prometheus-agent-config-builder.d.ts +2 -0
  58. package/dist/shared/system-directive.d.ts +0 -1
  59. package/dist/skills/ulw-plan/SKILL.md +11 -7
  60. package/dist/skills/ulw-plan/references/full-workflow.md +117 -6
  61. package/dist/skills/ulw-plan/scripts/scaffold-plan.mjs +46 -10
  62. package/dist/skills/ulw-research/SKILL.md +3 -3
  63. package/dist/tools/delegate-task/types.d.ts +0 -1
  64. package/dist/tui.js +115 -28
  65. package/package.json +14 -14
  66. package/packages/git-bash-mcp/dist/cli.js +81 -19
  67. package/packages/lsp-core/src/lsp/client-diagnostics-freshness.integration.test.ts +4 -4
  68. package/packages/lsp-core/src/lsp/directory-diagnostics.test.ts +118 -1
  69. package/packages/lsp-core/src/lsp/directory-diagnostics.ts +1 -1
  70. package/packages/lsp-daemon/dist/cli.js +262 -63
  71. package/packages/lsp-daemon/dist/client.js +194 -50
  72. package/packages/lsp-daemon/dist/daemon-client.d.ts +2 -2
  73. package/packages/lsp-daemon/dist/daemon-client.js +26 -2
  74. package/packages/lsp-daemon/dist/ensure-daemon.d.ts +5 -4
  75. package/packages/lsp-daemon/dist/ensure-daemon.js +79 -18
  76. package/packages/lsp-daemon/dist/index.js +262 -63
  77. package/packages/lsp-daemon/dist/proxy.d.ts +2 -0
  78. package/packages/lsp-daemon/dist/proxy.js +79 -23
  79. package/packages/lsp-tools-mcp/dist/cli.js +82 -20
  80. package/packages/lsp-tools-mcp/dist/mcp.js +82 -20
  81. package/packages/lsp-tools-mcp/dist/tools.js +1 -1
  82. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  83. package/packages/omo-codex/plugin/.mcp.json +2 -1
  84. package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +352 -17
  85. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  86. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  87. package/packages/omo-codex/plugin/components/codegraph/AGENTS.md +7 -6
  88. package/packages/omo-codex/plugin/components/codegraph/dist/cli.js +195 -56
  89. package/packages/omo-codex/plugin/components/codegraph/dist/serve.js +100 -28
  90. package/packages/omo-codex/plugin/components/codegraph/package.json +1 -1
  91. package/packages/omo-codex/plugin/components/codegraph/src/mcp-bridge.ts +21 -9
  92. package/packages/omo-codex/plugin/components/codegraph/test/hook-exclusion.test.ts +1 -1
  93. package/packages/omo-codex/plugin/components/codegraph/test/mcp-bridge-fixtures.ts +35 -0
  94. package/packages/omo-codex/plugin/components/codegraph/test/serve-mcp-bridge-lifecycle.test.ts +69 -0
  95. package/packages/omo-codex/plugin/components/codegraph/test/serve-mcp-bridge.test.ts +57 -1
  96. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  97. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  98. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  99. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  100. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  101. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  102. package/packages/omo-codex/plugin/components/lsp/.mcp.json +2 -1
  103. package/packages/omo-codex/plugin/components/lsp/AGENTS.md +1 -0
  104. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +3 -3
  105. package/packages/omo-codex/plugin/components/lsp/dist/cli.js +113 -31
  106. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  107. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  108. package/packages/omo-codex/plugin/components/lsp/test/package-smoke.test.ts +1 -0
  109. package/packages/omo-codex/plugin/components/rules/bundled-rules/hephaestus/gpt-5.5.md +1 -1
  110. package/packages/omo-codex/plugin/components/rules/bundled-rules/hephaestus/gpt-5.6.md +5 -3
  111. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  112. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  113. package/packages/omo-codex/plugin/components/start-work-continuation/AGENTS.md +8 -0
  114. package/packages/omo-codex/plugin/components/start-work-continuation/README.md +2 -2
  115. package/packages/omo-codex/plugin/components/start-work-continuation/directive.md +3 -3
  116. package/packages/omo-codex/plugin/components/start-work-continuation/dist/cli.js +148 -61
  117. package/packages/omo-codex/plugin/components/start-work-continuation/hooks/hooks.json +2 -2
  118. package/packages/omo-codex/plugin/components/start-work-continuation/package.json +1 -1
  119. package/packages/omo-codex/plugin/components/start-work-continuation/src/boulder-reader.ts +4 -72
  120. package/packages/omo-codex/plugin/components/start-work-continuation/src/codex-hook.ts +1 -1
  121. package/packages/omo-codex/plugin/components/start-work-continuation/src/plan-checklist.ts +171 -0
  122. package/packages/omo-codex/plugin/components/start-work-continuation/test/boulder-reader.test.ts +213 -24
  123. package/packages/omo-codex/plugin/components/start-work-continuation/test/cli.test.ts +4 -3
  124. package/packages/omo-codex/plugin/components/start-work-continuation/test/codex-hook.test.ts +25 -4
  125. package/packages/omo-codex/plugin/components/start-work-continuation/test/fixtures/plan-scaffold.md +15 -0
  126. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  127. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  128. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  129. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  130. package/packages/omo-codex/plugin/components/ultrawork/AGENTS.md +10 -10
  131. package/packages/omo-codex/plugin/components/ultrawork/agents/momus.toml +3 -3
  132. package/packages/omo-codex/plugin/components/ultrawork/directive.md +50 -33
  133. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  134. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  135. package/packages/omo-codex/plugin/components/ultrawork/skills/ultrawork/SKILL.md +50 -33
  136. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/SKILL.md +11 -7
  137. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/full-workflow.md +117 -6
  138. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/scripts/scaffold-plan.mjs +46 -10
  139. package/packages/omo-codex/plugin/components/ulw-loop/directive.md +50 -33
  140. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +3 -3
  141. package/packages/omo-codex/plugin/components/ulw-loop/dist/stop-resume-hook.js +5 -6
  142. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +4 -4
  143. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  144. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +1 -1
  145. package/packages/omo-codex/plugin/components/ulw-loop/src/stop-resume-hook.ts +5 -6
  146. package/packages/omo-codex/plugin/components/ulw-loop/test/stop-resume-hook.test.ts +2 -2
  147. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  148. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  149. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  150. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-codegraph-init-guidance.json +1 -1
  151. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  152. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  153. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  154. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  155. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  156. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  157. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  158. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  159. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  160. package/packages/omo-codex/plugin/hooks/session-start-checking-codegraph-bootstrap.json +1 -1
  161. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  162. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  163. package/packages/omo-codex/plugin/hooks/stop-checking-start-work-continuation.json +1 -1
  164. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  165. package/packages/omo-codex/plugin/hooks/subagent-stop-checking-start-work-continuation.json +1 -1
  166. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  167. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  168. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  169. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  170. package/packages/omo-codex/plugin/package-lock.json +13 -13
  171. package/packages/omo-codex/plugin/package.json +1 -1
  172. package/packages/omo-codex/plugin/scripts/migrate-codex-config/multi-agent-v2-guard.mjs +32 -28
  173. package/packages/omo-codex/plugin/scripts/migrate-codex-config/subagent-limit-guard.mjs +17 -45
  174. package/packages/omo-codex/plugin/scripts/migrate-codex-config/toml-section-editor.mjs +455 -0
  175. package/packages/omo-codex/plugin/scripts/sync-skills.mjs +13 -20
  176. package/packages/omo-codex/plugin/skills/review-work/SKILL.md +7 -0
  177. package/packages/omo-codex/plugin/skills/start-work/SKILL.md +3 -2
  178. package/packages/omo-codex/plugin/skills/ultrawork/SKILL.md +50 -33
  179. package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +1 -1
  180. package/packages/omo-codex/plugin/skills/ulw-plan/SKILL.md +11 -7
  181. package/packages/omo-codex/plugin/skills/ulw-plan/references/full-workflow.md +117 -6
  182. package/packages/omo-codex/plugin/skills/ulw-plan/scripts/scaffold-plan.mjs +46 -10
  183. package/packages/omo-codex/plugin/test/aggregate-agents.test.mjs +2 -2
  184. package/packages/omo-codex/plugin/test/lcx-bug-skills.test.mjs +2 -2
  185. package/packages/omo-codex/plugin/test/mcp-research-servers.test.mjs +1 -0
  186. package/packages/omo-codex/plugin/test/migrate-codex-config.test.mjs +6 -6
  187. package/packages/omo-codex/plugin/test/multi-agent-v2-regression.test.mjs +3 -3
  188. package/packages/omo-codex/plugin/test/scaffold-plan.test.mjs +62 -0
  189. package/packages/omo-codex/plugin/test/subagent-limit-migration.test.mjs +271 -14
  190. package/packages/omo-codex/plugin/test/sync-skills-orchestration.test.mjs +7 -0
  191. package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +38 -22
  192. package/packages/omo-codex/plugin/test/sync-skills.test.mjs +0 -5
  193. package/packages/omo-codex/plugin/test/ulw-plan-review-state-contract.test.mjs +293 -0
  194. package/packages/omo-codex/scripts/install-config.test.mjs +10 -10
  195. package/packages/omo-codex/scripts/install-dist/install-local.mjs +353 -18
  196. package/packages/omo-codex/scripts/install-generated-bundle.test.mjs +39 -2
  197. package/packages/shared-skills/skills/ulw-plan/SKILL.md +11 -7
  198. package/packages/shared-skills/skills/ulw-plan/references/full-workflow.md +117 -6
  199. package/packages/shared-skills/skills/ulw-plan/scripts/scaffold-plan.mjs +46 -10
  200. package/packages/shared-skills/skills/ulw-research/SKILL.md +3 -3
  201. package/dist/features/builtin-commands/templates/ralph-loop.d.ts +0 -3
  202. package/dist/skills/ultraresearch/SKILL.md +0 -10
  203. package/packages/shared-skills/skills/lcx-contribute-bug-fix/SKILL.md +0 -273
  204. package/packages/shared-skills/skills/lcx-contribute-bug-fix/agents/openai.yaml +0 -12
  205. package/packages/shared-skills/skills/lcx-contribute-bug-fix/scripts/create-pr-body.mjs +0 -107
  206. package/packages/shared-skills/skills/lcx-doctor/SKILL.md +0 -128
  207. package/packages/shared-skills/skills/lcx-doctor/agents/openai.yaml +0 -11
  208. package/packages/shared-skills/skills/lcx-report-bug/SKILL.md +0 -268
  209. package/packages/shared-skills/skills/lcx-report-bug/agents/openai.yaml +0 -11
  210. package/packages/shared-skills/skills/ultraresearch/SKILL.md +0 -10
  211. /package/{dist → packages/omo-codex/plugin/components/lcx}/skills/lcx-contribute-bug-fix/SKILL.md +0 -0
  212. /package/{dist → packages/omo-codex/plugin/components/lcx}/skills/lcx-contribute-bug-fix/agents/openai.yaml +0 -0
  213. /package/{dist → packages/omo-codex/plugin/components/lcx}/skills/lcx-contribute-bug-fix/scripts/create-pr-body.mjs +0 -0
  214. /package/{dist → packages/omo-codex/plugin/components/lcx}/skills/lcx-doctor/SKILL.md +0 -0
  215. /package/{dist → packages/omo-codex/plugin/components/lcx}/skills/lcx-doctor/agents/openai.yaml +0 -0
  216. /package/{dist → packages/omo-codex/plugin/components/lcx}/skills/lcx-report-bug/SKILL.md +0 -0
  217. /package/{dist → packages/omo-codex/plugin/components/lcx}/skills/lcx-report-bug/agents/openai.yaml +0 -0
@@ -36,6 +36,8 @@ DAEMON_DIST_BACKUP=""
36
36
  DAEMON_DIST_WAS_PRESENT=0
37
37
  DAEMON_DIST_PREPARED=0
38
38
  BUILD_LOCK_DIR=""
39
+ CANCELLATION_SMOKE_RELATIVE="packages/lsp-daemon/scripts/qa/cancellation-smoke.mjs"
40
+ COMMIT_BARRIER_SMOKE_RELATIVE="packages/lsp-daemon/scripts/qa/commit-barrier-smoke.mjs"
39
41
 
40
42
  log() { printf '[codex-lsp-e2e] %s\n' "$*" >&2; }
41
43
  fail() { log "FAIL: $*"; return 1; }
@@ -110,6 +112,21 @@ require_bins() {
110
112
  [ "$missing" -eq 0 ]
111
113
  }
112
114
 
115
+ verify_tracked_cancellation_probes() {
116
+ local dependency ignored_evidence_root=".omo""/evidence"
117
+ if grep -Fq "$ignored_evidence_root" "${BASH_SOURCE[0]}"; then
118
+ fail "LSP QA driver references ignored evidence state"
119
+ return 1
120
+ fi
121
+ for dependency in "$CANCELLATION_SMOKE_RELATIVE" "$COMMIT_BARRIER_SMOKE_RELATIVE"; do
122
+ [ -f "$REPO_ROOT/$dependency" ] || { fail "missing cancellation QA dependency: $dependency"; return 1; }
123
+ git -C "$REPO_ROOT" ls-files --error-unmatch -- "$dependency" >/dev/null 2>&1 || {
124
+ fail "cancellation QA dependency is not tracked: $dependency"
125
+ return 1
126
+ }
127
+ done
128
+ }
129
+
113
130
  hash_path() {
114
131
  node --input-type=module - "$1" <<'NODE'
115
132
  import { createHash } from "node:crypto";
@@ -970,24 +987,21 @@ NODE
970
987
  }
971
988
 
972
989
  run_cancellation_contract_probe() {
973
- local cancellation_smoke="$REPO_ROOT/.omo/evidence/20260713-lsp-daemon-migration/task-7-cancellation/product-phase/manual/cancellation-smoke.mjs"
974
- local commit_smoke="$REPO_ROOT/.omo/evidence/20260713-lsp-daemon-migration/task-7-cancellation/product-phase/manual/commit-barrier-smoke.mjs"
975
- [ -f "$cancellation_smoke" ] || { fail "missing product cancellation smoke"; return 1; }
976
- [ -f "$commit_smoke" ] || { fail "missing product commit-barrier smoke"; return 1; }
990
+ local cancellation_smoke="$REPO_ROOT/$CANCELLATION_SMOKE_RELATIVE"
991
+ local commit_smoke="$REPO_ROOT/$COMMIT_BARRIER_SMOKE_RELATIVE"
992
+ verify_tracked_cancellation_probes || return 1
977
993
 
978
- run_bounded 90 "$EVIDENCE_DIR/cancellation-smoke-output.json" bun "$cancellation_smoke" || return 1
979
- run_bounded 90 "$EVIDENCE_DIR/commit-barrier-smoke-output.json" bun "$commit_smoke" || return 1
994
+ run_bounded 90 "$EVIDENCE_DIR/cancellation-smoke-output.json" bun "$cancellation_smoke" "$REPO_ROOT" || return 1
995
+ run_bounded 90 "$EVIDENCE_DIR/commit-barrier-smoke-output.json" bun "$commit_smoke" "$REPO_ROOT" || return 1
980
996
 
981
997
  node --input-type=module - \
982
998
  "$EVIDENCE_DIR/cancellation-smoke-output.json" \
983
999
  "$EVIDENCE_DIR/commit-barrier-smoke-output.json" \
984
- "$REPO_ROOT/.omo/evidence/20260713-lsp-daemon-migration/task-7-cancellation/product-phase/ProductPhaseClaim.json" \
985
1000
  "$EVIDENCE_DIR/cancellation-contract.json" "$SCENARIO" "codex" <<'NODE'
986
1001
  import { readFileSync, writeFileSync } from "node:fs";
987
- const [cancelPath, commitPath, claimPath, outputPath, scenario, harness] = process.argv.slice(2);
1002
+ const [cancelPath, commitPath, outputPath, scenario, harness] = process.argv.slice(2);
988
1003
  const cancel = JSON.parse(readFileSync(cancelPath, "utf8"));
989
1004
  const commit = JSON.parse(readFileSync(commitPath, "utf8"));
990
- const claim = JSON.parse(readFileSync(claimPath, "utf8"));
991
1005
  const result = {
992
1006
  result: "PASS",
993
1007
  scenario,
@@ -1006,12 +1020,12 @@ const result = {
1006
1020
  },
1007
1021
  daemonTimeout: {
1008
1022
  bounded: true,
1009
- provenBy: "product focused daemon timeout and LSP timeout tests in ProductPhaseClaim.greenEvidence",
1023
+ provenBy: "packages/lsp-daemon/test/daemon-client-retry.test.ts and packages/lsp-core/src/lsp/json-rpc-connection-cancellation.test.ts",
1010
1024
  },
1011
1025
  socketDisconnect: {
1012
1026
  abortsServerWork: true,
1013
1027
  activeDaemonControllersAfter: 0,
1014
- provenBy: "product focused request-routing socket-close test in ProductPhaseClaim.greenEvidence",
1028
+ provenBy: "packages/lsp-daemon/test/request-routing.test.ts",
1015
1029
  },
1016
1030
  pendingAndLateResponse: {
1017
1031
  lspPendingRequestsAfter: cancel.directPendingAfterLateResponse,
@@ -1019,7 +1033,7 @@ const result = {
1019
1033
  },
1020
1034
  directoryDiagnostics: {
1021
1035
  stoppedSchedulingBetweenFiles: true,
1022
- provenBy: "packages/lsp-core/src/lsp/directory-diagnostics.test.ts and ProductPhaseClaim.greenEvidence",
1036
+ provenBy: "packages/lsp-core/src/lsp/directory-diagnostics.test.ts",
1023
1037
  },
1024
1038
  delayedRenamePreCommitGate: {
1025
1039
  cancelTarget: commit.preGate.cancelTarget,
@@ -1041,7 +1055,7 @@ const result = {
1041
1055
  readOnlyPreWriteConnectionFailureRetry: {
1042
1056
  retryCount: 1,
1043
1057
  requestCount: 1,
1044
- provenBy: "packages/lsp-daemon/test/daemon-client-retry.test.ts and ProductPhaseClaim.greenEvidence",
1058
+ provenBy: "packages/lsp-daemon/test/daemon-client-retry.test.ts",
1045
1059
  },
1046
1060
  sequentialProxyIds: {
1047
1061
  distinct: true,
@@ -1056,7 +1070,6 @@ const result = {
1056
1070
  cwdCanonical: true,
1057
1071
  },
1058
1072
  dirtyWorktreePreservation: {
1059
- productPhasePreExistingDirtyScope: claim.scope?.preExistingDirtyScope,
1060
1073
  driverMustPreserveDirtyWorktree: true,
1061
1074
  },
1062
1075
  noLeftovers: {
@@ -1067,7 +1080,10 @@ const result = {
1067
1080
  artifacts: {
1068
1081
  cancellationSmoke: "cancellation-smoke-output.json",
1069
1082
  commitBarrierSmoke: "commit-barrier-smoke-output.json",
1070
- productClaim: ".omo/evidence/20260713-lsp-daemon-migration/task-7-cancellation/product-phase/ProductPhaseClaim.json",
1083
+ },
1084
+ sources: {
1085
+ cancellationSmoke: "packages/lsp-daemon/scripts/qa/cancellation-smoke.mjs",
1086
+ commitBarrierSmoke: "packages/lsp-daemon/scripts/qa/commit-barrier-smoke.mjs",
1071
1087
  },
1072
1088
  };
1073
1089
  const required = [
@@ -3166,6 +3182,7 @@ run_self_test() {
3166
3182
  require_bins bash node jq git || return 1
3167
3183
  local root before_omo after_omo before_codex after_codex before_status after_status failures=0 out rc start end
3168
3184
  local cancellation_result_fields=true client_package_result_fields=true installed_component_result_fields=true
3185
+ local qa_dependencies_portable=true
3169
3186
  local fixture_run child sandbox_path attempts
3170
3187
  local missing_dist_build_order='{"result":"NOT_RUN"}'
3171
3188
  root="$(mktemp -d -t cqa-lsp-e2e.XXXXXX)" || return 1
@@ -3180,6 +3197,11 @@ run_self_test() {
3180
3197
  if bash "${BASH_SOURCE[0]}" --scenario ../bad --evidence-dir "$root/bad" >>"$out" 2>&1; then failures=$((failures + 1)); fi
3181
3198
  if bash "${BASH_SOURCE[0]}" --scenario ok --evidence-dir relative >>"$out" 2>&1; then failures=$((failures + 1)); fi
3182
3199
 
3200
+ if ! verify_tracked_cancellation_probes >>"$out" 2>&1; then
3201
+ qa_dependencies_portable=false
3202
+ failures=$((failures + 1))
3203
+ fi
3204
+
3183
3205
  for fixture in fake-pass fake-skip; do
3184
3206
  local ev="$root/$fixture"
3185
3207
  mkdir -p "$ev"
@@ -3402,8 +3424,9 @@ NODE
3402
3424
  [ "$before_codex" = "$after_codex" ] || failures=$((failures + 1))
3403
3425
  [ "$before_status" = "$after_status" ] || failures=$((failures + 1))
3404
3426
 
3405
- printf '{"result":"%s","selfTest":true,"malformedArgsRejected":true,"fakePassRejected":true,"skipRejected":true,"hungCommandBounded":true,"partialStagingCleanedTwice":true,"interruptCleanupRepeated":true,"missingDaemonDistBuildOrderIndependent":true,"cancellationResultFieldsMandatory":%s,"clientPackageResultFieldsMandatory":%s,"installedComponentResultFieldsMandatory":%s,"missingDistBuildOrder":%s,"dirtyWorktreePreserved":%s,"realHomesUnchanged":%s}\n' \
3427
+ printf '{"result":"%s","selfTest":true,"malformedArgsRejected":true,"fakePassRejected":true,"skipRejected":true,"hungCommandBounded":true,"partialStagingCleanedTwice":true,"interruptCleanupRepeated":true,"missingDaemonDistBuildOrderIndependent":true,"qaDependenciesPortable":%s,"cancellationResultFieldsMandatory":%s,"clientPackageResultFieldsMandatory":%s,"installedComponentResultFieldsMandatory":%s,"missingDistBuildOrder":%s,"dirtyWorktreePreserved":%s,"realHomesUnchanged":%s}\n' \
3406
3428
  "$( [ "$failures" -eq 0 ] && echo PASS || echo FAIL )" \
3429
+ "$qa_dependencies_portable" \
3407
3430
  "$cancellation_result_fields" \
3408
3431
  "$client_package_result_fields" \
3409
3432
  "$installed_component_result_fields" \
@@ -41,6 +41,8 @@ SSE_ATTEMPT_SECONDS=2
41
41
  BUILD_LOCK_DIR=""
42
42
  SOURCE_PACKAGE_STAMP=""
43
43
  SOURCE_PACKAGE_STAMP_CREATED=0
44
+ CANCELLATION_SMOKE_RELATIVE="packages/lsp-daemon/scripts/qa/cancellation-smoke.mjs"
45
+ COMMIT_BARRIER_SMOKE_RELATIVE="packages/lsp-daemon/scripts/qa/commit-barrier-smoke.mjs"
44
46
 
45
47
  log() { printf '[opencode-lsp-e2e] %s\n' "$*" >&2; }
46
48
  fail() { log "FAIL: $*"; return 1; }
@@ -111,6 +113,21 @@ require_bins() {
111
113
  [ "$missing" -eq 0 ]
112
114
  }
113
115
 
116
+ verify_tracked_cancellation_probes() {
117
+ local dependency ignored_evidence_root=".omo""/evidence"
118
+ if grep -Fq "$ignored_evidence_root" "${BASH_SOURCE[0]}"; then
119
+ fail "LSP QA driver references ignored evidence state"
120
+ return 1
121
+ fi
122
+ for dependency in "$CANCELLATION_SMOKE_RELATIVE" "$COMMIT_BARRIER_SMOKE_RELATIVE"; do
123
+ [ -f "$REPO_ROOT/$dependency" ] || { fail "missing cancellation QA dependency: $dependency"; return 1; }
124
+ git -C "$REPO_ROOT" ls-files --error-unmatch -- "$dependency" >/dev/null 2>&1 || {
125
+ fail "cancellation QA dependency is not tracked: $dependency"
126
+ return 1
127
+ }
128
+ done
129
+ }
130
+
114
131
  hash_path() {
115
132
  node --input-type=module - "$1" <<'NODE'
116
133
  import { createHash } from "node:crypto";
@@ -920,24 +937,21 @@ NODE
920
937
  }
921
938
 
922
939
  run_cancellation_contract_probe() {
923
- local cancellation_smoke="$REPO_ROOT/.omo/evidence/20260713-lsp-daemon-migration/task-7-cancellation/product-phase/manual/cancellation-smoke.mjs"
924
- local commit_smoke="$REPO_ROOT/.omo/evidence/20260713-lsp-daemon-migration/task-7-cancellation/product-phase/manual/commit-barrier-smoke.mjs"
925
- [ -f "$cancellation_smoke" ] || { fail "missing product cancellation smoke"; return 1; }
926
- [ -f "$commit_smoke" ] || { fail "missing product commit-barrier smoke"; return 1; }
940
+ local cancellation_smoke="$REPO_ROOT/$CANCELLATION_SMOKE_RELATIVE"
941
+ local commit_smoke="$REPO_ROOT/$COMMIT_BARRIER_SMOKE_RELATIVE"
942
+ verify_tracked_cancellation_probes || return 1
927
943
 
928
- run_bounded 90 "$EVIDENCE_DIR/cancellation-smoke-output.json" bun "$cancellation_smoke" || return 1
929
- run_bounded 90 "$EVIDENCE_DIR/commit-barrier-smoke-output.json" bun "$commit_smoke" || return 1
944
+ run_bounded 90 "$EVIDENCE_DIR/cancellation-smoke-output.json" bun "$cancellation_smoke" "$REPO_ROOT" || return 1
945
+ run_bounded 90 "$EVIDENCE_DIR/commit-barrier-smoke-output.json" bun "$commit_smoke" "$REPO_ROOT" || return 1
930
946
 
931
947
  bun --input-type=module - \
932
948
  "$EVIDENCE_DIR/cancellation-smoke-output.json" \
933
949
  "$EVIDENCE_DIR/commit-barrier-smoke-output.json" \
934
- "$REPO_ROOT/.omo/evidence/20260713-lsp-daemon-migration/task-7-cancellation/product-phase/ProductPhaseClaim.json" \
935
950
  "$EVIDENCE_DIR/cancellation-contract.json" "$SCENARIO" "opencode" <<'NODE'
936
951
  import { readFileSync, writeFileSync } from "node:fs";
937
- const [cancelPath, commitPath, claimPath, outputPath, scenario, harness] = process.argv.slice(2);
952
+ const [cancelPath, commitPath, outputPath, scenario, harness] = process.argv.slice(2);
938
953
  const cancel = JSON.parse(readFileSync(cancelPath, "utf8"));
939
954
  const commit = JSON.parse(readFileSync(commitPath, "utf8"));
940
- const claim = JSON.parse(readFileSync(claimPath, "utf8"));
941
955
  const result = {
942
956
  result: "PASS",
943
957
  scenario,
@@ -956,12 +970,12 @@ const result = {
956
970
  },
957
971
  daemonTimeout: {
958
972
  bounded: true,
959
- provenBy: "product focused daemon timeout and LSP timeout tests in ProductPhaseClaim.greenEvidence",
973
+ provenBy: "packages/lsp-daemon/test/daemon-client-retry.test.ts and packages/lsp-core/src/lsp/json-rpc-connection-cancellation.test.ts",
960
974
  },
961
975
  socketDisconnect: {
962
976
  abortsServerWork: true,
963
977
  activeDaemonControllersAfter: 0,
964
- provenBy: "product focused request-routing socket-close test in ProductPhaseClaim.greenEvidence",
978
+ provenBy: "packages/lsp-daemon/test/request-routing.test.ts",
965
979
  },
966
980
  pendingAndLateResponse: {
967
981
  lspPendingRequestsAfter: cancel.directPendingAfterLateResponse,
@@ -969,7 +983,7 @@ const result = {
969
983
  },
970
984
  directoryDiagnostics: {
971
985
  stoppedSchedulingBetweenFiles: true,
972
- provenBy: "packages/lsp-core/src/lsp/directory-diagnostics.test.ts and ProductPhaseClaim.greenEvidence",
986
+ provenBy: "packages/lsp-core/src/lsp/directory-diagnostics.test.ts",
973
987
  },
974
988
  delayedRenamePreCommitGate: {
975
989
  cancelTarget: commit.preGate.cancelTarget,
@@ -991,7 +1005,7 @@ const result = {
991
1005
  readOnlyPreWriteConnectionFailureRetry: {
992
1006
  retryCount: 1,
993
1007
  requestCount: 1,
994
- provenBy: "packages/lsp-daemon/test/daemon-client-retry.test.ts and ProductPhaseClaim.greenEvidence",
1008
+ provenBy: "packages/lsp-daemon/test/daemon-client-retry.test.ts",
995
1009
  },
996
1010
  sequentialProxyIds: {
997
1011
  distinct: true,
@@ -1006,7 +1020,6 @@ const result = {
1006
1020
  cwdCanonical: true,
1007
1021
  },
1008
1022
  dirtyWorktreePreservation: {
1009
- productPhasePreExistingDirtyScope: claim.scope?.preExistingDirtyScope,
1010
1023
  driverMustPreserveDirtyWorktree: true,
1011
1024
  },
1012
1025
  noLeftovers: {
@@ -1017,7 +1030,10 @@ const result = {
1017
1030
  artifacts: {
1018
1031
  cancellationSmoke: "cancellation-smoke-output.json",
1019
1032
  commitBarrierSmoke: "commit-barrier-smoke-output.json",
1020
- productClaim: ".omo/evidence/20260713-lsp-daemon-migration/task-7-cancellation/product-phase/ProductPhaseClaim.json",
1033
+ },
1034
+ sources: {
1035
+ cancellationSmoke: "packages/lsp-daemon/scripts/qa/cancellation-smoke.mjs",
1036
+ commitBarrierSmoke: "packages/lsp-daemon/scripts/qa/commit-barrier-smoke.mjs",
1021
1037
  },
1022
1038
  };
1023
1039
  const required = [
@@ -1762,19 +1778,79 @@ NODE
1762
1778
  }
1763
1779
 
1764
1780
  run_mcp_status_call() {
1765
- local label="$1" output="$2"
1781
+ local label="$1" output="$2" stderr_output="$EVIDENCE_DIR/${1}.stderr.log"
1766
1782
  shift 2
1767
- printf '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"lsp_status","arguments":{}}}\n' |
1768
- env \
1769
- HOME="$HOME" \
1770
- XDG_CONFIG_HOME="$XDG_CONFIG_HOME" \
1771
- OMO_LSP_DAEMON_DIR="$OMO_LSP_DAEMON_DIR" \
1772
- ${OMO_LSP_DAEMON_CLI+OMO_LSP_DAEMON_CLI="$OMO_LSP_DAEMON_CLI"} \
1773
- ${OMO_LSP_DAEMON_VERSION+OMO_LSP_DAEMON_VERSION="$OMO_LSP_DAEMON_VERSION"} \
1774
- LSP_TOOLS_MCP_PROJECT_CONFIG="$SANDBOX_ROOT/project/.opencode/lsp.json:$SANDBOX_ROOT/project/.omo/lsp.json:$SANDBOX_ROOT/project/.omo/lsp-client.json" \
1775
- LSP_TOOLS_MCP_USER_CONFIG="$XDG_CONFIG_HOME/opencode/lsp.json" \
1776
- LSP_TOOLS_MCP_INSTALL_DECISIONS="$XDG_CONFIG_HOME/opencode/lsp-install-decisions.json" \
1777
- "$@" >"$output" 2>"$EVIDENCE_DIR/${label}.stderr.log"
1783
+ env \
1784
+ HOME="$HOME" \
1785
+ XDG_CONFIG_HOME="$XDG_CONFIG_HOME" \
1786
+ OMO_LSP_DAEMON_DIR="$OMO_LSP_DAEMON_DIR" \
1787
+ ${OMO_LSP_DAEMON_CLI+OMO_LSP_DAEMON_CLI="$OMO_LSP_DAEMON_CLI"} \
1788
+ ${OMO_LSP_DAEMON_VERSION+OMO_LSP_DAEMON_VERSION="$OMO_LSP_DAEMON_VERSION"} \
1789
+ LSP_TOOLS_MCP_PROJECT_CONFIG="$SANDBOX_ROOT/project/.opencode/lsp.json:$SANDBOX_ROOT/project/.omo/lsp.json:$SANDBOX_ROOT/project/.omo/lsp-client.json" \
1790
+ LSP_TOOLS_MCP_USER_CONFIG="$XDG_CONFIG_HOME/opencode/lsp.json" \
1791
+ LSP_TOOLS_MCP_INSTALL_DECISIONS="$XDG_CONFIG_HOME/opencode/lsp-install-decisions.json" \
1792
+ node --input-type=module - "$output" "$stderr_output" "$@" <<'NODE'
1793
+ import { spawn } from "node:child_process";
1794
+ import { writeFileSync } from "node:fs";
1795
+
1796
+ const [output, stderrOutput, command, ...args] = process.argv.slice(2);
1797
+ if (!command) process.exit(125);
1798
+
1799
+ const child = spawn(command, args, { env: process.env, stdio: ["pipe", "pipe", "pipe"] });
1800
+ let stdout = "";
1801
+ let stderr = "";
1802
+ let responseSeen = false;
1803
+ let forceTimer;
1804
+
1805
+ child.stdout.setEncoding("utf8");
1806
+ child.stderr.setEncoding("utf8");
1807
+ child.stdout.on("data", (chunk) => {
1808
+ stdout += chunk;
1809
+ if (!responseSeen && stdout.includes("\n")) {
1810
+ responseSeen = true;
1811
+ child.stdin.end();
1812
+ }
1813
+ });
1814
+ child.stderr.on("data", (chunk) => {
1815
+ stderr += chunk;
1816
+ });
1817
+ child.stdin.on("error", (error) => {
1818
+ stderr += `${error instanceof Error ? error.stack ?? error.message : String(error)}\n`;
1819
+ });
1820
+
1821
+ const request = { jsonrpc: "2.0", id: 1, method: "tools/call", params: { name: "lsp_status", arguments: {} } };
1822
+ child.stdin.write(`${JSON.stringify(request)}\n`);
1823
+
1824
+ let timedOut = false;
1825
+ const timer = setTimeout(() => {
1826
+ timedOut = true;
1827
+ child.kill("SIGTERM");
1828
+ forceTimer = setTimeout(() => child.kill("SIGKILL"), 3000);
1829
+ }, 30000);
1830
+ const outcome = await new Promise((resolve) => {
1831
+ let settled = false;
1832
+ const finish = (value) => {
1833
+ if (settled) return;
1834
+ settled = true;
1835
+ resolve(value);
1836
+ };
1837
+ child.once("error", (error) => finish({ error }));
1838
+ child.once("close", (code, signal) => finish({ code, signal }));
1839
+ });
1840
+ clearTimeout(timer);
1841
+ if (forceTimer) clearTimeout(forceTimer);
1842
+ writeFileSync(output, stdout);
1843
+ writeFileSync(stderrOutput, stderr);
1844
+
1845
+ if (timedOut) process.exit(124);
1846
+ if ("error" in outcome) {
1847
+ console.error(outcome.error);
1848
+ process.exit(126);
1849
+ }
1850
+ if (!responseSeen) process.exit(1);
1851
+ if (typeof outcome.code === "number") process.exit(outcome.code);
1852
+ process.exit(outcome.signal ? 128 : 1);
1853
+ NODE
1778
1854
  }
1779
1855
 
1780
1856
  capture_current_daemon_owner() {
@@ -2416,6 +2492,7 @@ run_self_test() {
2416
2492
  local fixture_run child sandbox_path attempts health_pid health_port accepted_count previous_opencode_pid
2417
2493
  local sse_pid sse_port previous_sse_ready previous_sse_attempt
2418
2494
  local terminal_pid terminal_port previous_scenario previous_evidence_dir terminal_killer
2495
+ local qa_dependencies_portable=true
2419
2496
  root="$(mktemp -d -t oqa-lsp-e2e.XXXXXX)" || return 1
2420
2497
  SANDBOX_ROOT="$root"
2421
2498
  before_omo="$(hash_path "$REAL_OMO_ROOT")"
@@ -2429,6 +2506,11 @@ run_self_test() {
2429
2506
  if bash "${BASH_SOURCE[0]}" --scenario ../bad --evidence-dir "$root/bad" >>"$out" 2>&1; then failures=$((failures + 1)); fi
2430
2507
  if bash "${BASH_SOURCE[0]}" --scenario ok --evidence-dir relative >>"$out" 2>&1; then failures=$((failures + 1)); fi
2431
2508
 
2509
+ if ! verify_tracked_cancellation_probes >>"$out" 2>&1; then
2510
+ qa_dependencies_portable=false
2511
+ failures=$((failures + 1))
2512
+ fi
2513
+
2432
2514
  for fixture in fake-pass fake-skip; do
2433
2515
  local ev="$root/$fixture"
2434
2516
  mkdir -p "$ev"
@@ -2763,8 +2845,9 @@ NODE
2763
2845
  [ "$before_db" = "$after_db" ] || failures=$((failures + 1))
2764
2846
  [ "$before_status" = "$after_status" ] || failures=$((failures + 1))
2765
2847
 
2766
- printf '{"result":"%s","selfTest":true,"malformedArgsRejected":true,"fakePassRejected":true,"skipRejected":true,"hungCommandBounded":true,"healthTimeoutReadinessBounded":true,"sseStartupRetryDeterministic":true,"partialStagingCleanedTwice":true,"interruptCleanupRepeated":true,"cancellationResultFieldsMandatory":true,"clientPackageResultFieldsMandatory":true,"dirtyWorktreePreserved":%s,"realHomesUnchanged":%s}\n' \
2848
+ printf '{"result":"%s","selfTest":true,"malformedArgsRejected":true,"fakePassRejected":true,"skipRejected":true,"hungCommandBounded":true,"healthTimeoutReadinessBounded":true,"sseStartupRetryDeterministic":true,"partialStagingCleanedTwice":true,"interruptCleanupRepeated":true,"qaDependenciesPortable":%s,"cancellationResultFieldsMandatory":true,"clientPackageResultFieldsMandatory":true,"dirtyWorktreePreserved":%s,"realHomesUnchanged":%s}\n' \
2767
2849
  "$( [ "$failures" -eq 0 ] && echo PASS || echo FAIL )" \
2850
+ "$qa_dependencies_portable" \
2768
2851
  "$( [ "$before_status" = "$after_status" ] && echo true || echo false )" \
2769
2852
  "$( [ "$before_omo" = "$after_omo" ] && [ "$before_db" = "$after_db" ] && echo true || echo false )"
2770
2853
  cleanup_all || failures=$((failures + 1))
package/README.ja.md CHANGED
@@ -193,7 +193,7 @@ Read this and tell me why it's not just another boilerplate: https://raw.githubu
193
193
  <td align="center"><img src=".github/assets/hephaestus.png" height="300" /></td>
194
194
  </tr></table>
195
195
 
196
- **Sisyphus** (`claude-opus-4-7` / **`kimi-k2.6`** / **`glm-5`**) はあなたのメインオーケストレーターです。計画を立て、専門家に委任し、攻撃的な並列実行でタスクを完了まで推進します。途中で投げ出すことはありません。
196
+ **Sisyphus** (`claude-opus-4-8` / `claude-opus-4-7` / **`kimi-k3`** / **`kimi-k2.6`** / **`glm-5`**) はあなたのメインオーケストレーターです。計画を立て、専門家に委任し、攻撃的な並列実行でタスクを完了まで推進します。途中で投げ出すことはありません。thinking token のコストを許容できる場合は **Kimi K3** を、そうでなければ **Claude Opus 4.8 / 4.7** または **Kimi K2.6** を推奨します。
197
197
 
198
198
  **Hephaestus** (OpenAI または Vercel では `gpt-5.6-sol`、その次に `gpt-5.5`) はあなたの自律的なディープワーカーです。レシピではなく、目標を与えてください。手取り足取り教えなくても、コードベースを探索し、パターンを調査し、エンドツーエンドで実行します。*正当なる職人 (The Legitimate Craftsman).*
199
199
 
@@ -203,7 +203,7 @@ Read this and tell me why it's not just another boilerplate: https://raw.githubu
203
203
 
204
204
  > Anthropic が [私たちのせいで OpenCode をブロックしました。](https://x.com/thdxr/status/2010149530486911014) だからこそ Hephaestus は「正当なる職人 (The Legitimate Craftsman)」と呼ばれているのです。皮肉を込めています。
205
205
  >
206
- > Opus で最もよく動きますが、Kimi K2.6 + GPT-5.5 の組み合わせだけでも、バニラの Claude Code を軽く凌駕します。設定は一切不要です。
206
+ > Opus または Kimi K3 で最もよく動きますが、Kimi K2.6 + GPT-5.5 の組み合わせだけでも、バニラの Claude Code を軽く凌駕します。設定は一切不要です。
207
207
 
208
208
  ### Team Mode (v4.0)
209
209
 
package/README.ko.md CHANGED
@@ -194,7 +194,7 @@ Read this and tell me why it's not just another boilerplate: https://raw.githubu
194
194
  <td align="center"><img src=".github/assets/hephaestus.png" height="300" /></td>
195
195
  </tr></table>
196
196
 
197
- **Sisyphus** (`claude-opus-4-7` / **`kimi-k2.6`** / **`glm-5`**)는 메인 오케스트레이터입니다. 계획을 세우고, 전문가에게 위임하고, 공격적인 병렬 실행으로 작업을 끝까지 밀어붙입니다. 중간에 멈추지 않습니다.
197
+ **Sisyphus** (`claude-opus-4-8` / `claude-opus-4-7` / **`kimi-k3`** / **`kimi-k2.6`** / **`glm-5`**)는 메인 오케스트레이터입니다. 계획을 세우고, 전문가에게 위임하고, 공격적인 병렬 실행으로 작업을 끝까지 밀어붙입니다. 중간에 멈추지 않습니다. thinking token 비용을 감수할 수 있다면 **Kimi K3**를, 그렇지 않으면 **Claude Opus 4.8 / 4.7** 또는 **Kimi K2.6**을 권장합니다.
198
198
 
199
199
  **Hephaestus** (OpenAI 또는 Vercel에서 `gpt-5.6-sol`, 그다음 `gpt-5.5`)는 자율적으로 깊게 파는 작업자입니다. 레시피가 아니라 목표를 주세요. 코드베이스를 탐색하고, 패턴을 조사하고, 손을 잡아주지 않아도 엔드투엔드로 실행합니다. *The Legitimate Craftsman.*
200
200
 
@@ -204,7 +204,7 @@ Read this and tell me why it's not just another boilerplate: https://raw.githubu
204
204
 
205
205
  > Anthropic은 [우리 때문에 OpenCode를 차단했습니다.](https://x.com/thdxr/status/2010149530486911014) 그래서 Hephaestus에게 "The Legitimate Craftsman"이라는 별명이 붙었습니다. 의도된 아이러니입니다.
206
206
  >
207
- > Opus에서 가장 잘 돌지만, Kimi K2.6 + GPT-5.5 조합만으로도 이미 바닐라 Claude Code를 이깁니다. 별도 설정 없이요.
207
+ > Opus나 Kimi K3에서 가장 잘 돌지만, Kimi K2.6 + GPT-5.5 조합만으로도 이미 바닐라 Claude Code를 이깁니다. 별도 설정 없이요.
208
208
 
209
209
  ### Team Mode (v4.0)
210
210
 
package/README.md CHANGED
@@ -221,7 +221,7 @@ Even with only the following subscriptions, `ultrawork` works well (this project
221
221
  | 🔎 | **AST-Grep** | Ultimate | Pattern-aware code search and rewriting across 25 languages. |
222
222
  | 🧠 | **Background Agents** | Ultimate | Fire 5+ specialists in parallel. Context stays lean. Results when ready. |
223
223
  | 📚 | **Built-in MCPs** (web/docs/code search) | Ultimate | Exa (web search), Context7 (official docs), Grep.app (GitHub search). Always on. |
224
- | 🔁 | **Ralph Loop / `/ulw-loop`** | Ultimate | Self-referential loop. Doesn't stop until 100% done. |
224
+ | 🔁 | **Goal / `/goal`** | Ultimate | Persistent per-session objective. Re-injects a continuation prompt on every idle until a completion audit says it's done. |
225
225
  | ✅ | **Todo Enforcer** | Ultimate | Agent goes idle? System yanks it back. Your task gets done, period. |
226
226
  | 💬 | **Comment Checker** | Both | No AI slop in comments. Code reads like a senior wrote it. |
227
227
  | 📐 | **Rules Injection** (`AGENTS.md` / `.omo/rules/**`) | Both | Project rules and AGENTS.md auto-loaded into the agent's context at every prompt. |
@@ -241,7 +241,7 @@ Even with only the following subscriptions, `ultrawork` works well (this project
241
241
  <td align="center"><img src=".github/assets/hephaestus.png" height="300" /></td>
242
242
  </tr></table>
243
243
 
244
- **Sisyphus** (`claude-opus-4-7` / **`kimi-k2.6`** / **`glm-5`** ) is your main orchestrator. He plans, delegates to specialists, and drives tasks to completion with aggressive parallel execution. He does not stop halfway.
244
+ **Sisyphus** (`claude-opus-4-8` / `claude-opus-4-7` / **`kimi-k3`** / **`kimi-k2.6`** / **`glm-5`** ) is your main orchestrator. He plans, delegates to specialists, and drives tasks to completion with aggressive parallel execution. He does not stop halfway. Use **Kimi K3** when you can accept its thinking-token cost; otherwise **Claude Opus 4.8 / 4.7** or **Kimi K2.6** are the recommended defaults.
245
245
 
246
246
  **Hephaestus** (`gpt-5.6-sol` on OpenAI or Vercel, then `gpt-5.5`) is your autonomous deep worker. Give him a goal, not a recipe. He explores the codebase, researches patterns, and executes end-to-end without hand-holding. *The Legitimate Craftsman.*
247
247
 
@@ -251,7 +251,7 @@ Every agent is tuned to its model's specific strengths. No manual model juggling
251
251
 
252
252
  > Anthropic [blocked OpenCode because of us.](https://x.com/thdxr/status/2010149530486911014) That's why Hephaestus is called "The Legitimate Craftsman." The irony is intentional.
253
253
  >
254
- > We run best on Opus, but Kimi K2.6 + GPT-5.5 already beats vanilla Claude Code. Zero config needed.
254
+ > We run best on Opus or Kimi K3, but Kimi K2.6 + GPT-5.5 already beats vanilla Claude Code. Zero config needed.
255
255
 
256
256
  ### Team Mode (v4.0)
257
257
 
@@ -433,7 +433,7 @@ See full [Features Documentation](docs/reference/features.md).
433
433
  - **Claude Code Compatibility**: Full hook system, commands, skills, agents, MCPs
434
434
  - **Built-in MCPs**: websearch (Exa), context7 (docs), grep_app (GitHub search) — injected at runtime by the plugin; not visible in `opencode mcp list` (see [MCP docs](docs/reference/features.md#native-vs-plugin-injected-mcps))
435
435
  - **Session Tools**: List, read, search, and analyze session history
436
- - **Productivity Features**: Ralph Loop, Todo Enforcer, Comment Checker, Think Mode, and more
436
+ - **Productivity Features**: Goal, Todo Enforcer, Comment Checker, Think Mode, and more
437
437
  - **Doctor Command**: Built-in diagnostics (`bunx oh-my-opencode doctor`) verify plugin registration, config, models, and environment
438
438
  - **Model Fallbacks**: `fallback_models` can mix plain model strings with per-fallback object settings in the same array
439
439
  - **File Prompts**: Load prompts from files with `file://` support in agent configurations
package/README.ru.md CHANGED
@@ -192,7 +192,7 @@ Read this and tell me why it's not just another boilerplate: https://raw.githubu
192
192
  <td align="center"><img src=".github/assets/hephaestus.png" height="300" /></td>
193
193
  </tr></table>
194
194
 
195
- **Sisyphus** (`claude-opus-4-7` / **`kimi-k2.6`** / **`glm-5`**) — главный оркестратор. Он планирует, делегирует задачи специалистам и доводит их до завершения с агрессивным параллельным выполнением. Он не останавливается на полпути.
195
+ **Sisyphus** (`claude-opus-4-8` / `claude-opus-4-7` / **`kimi-k3`** / **`kimi-k2.6`** / **`glm-5`**) — главный оркестратор. Он планирует, делегирует задачи специалистам и доводит их до завершения с агрессивным параллельным выполнением. Он не останавливается на полпути. Используйте **Kimi K3**, если готовы оплатить повышенный расход thinking-токенов; иначе рекомендуем **Claude Opus 4.8 / 4.7** или **Kimi K2.6**.
196
196
 
197
197
  **Hephaestus** (`gpt-5.6-sol` через OpenAI или Vercel, затем `gpt-5.5`) — автономный глубокий исполнитель. Дайте ему цель, а не рецепт. Он исследует кодовую базу, изучает паттерны и выполняет задачи сквозным образом без лишних подсказок. *Законный Мастер.*
198
198
 
@@ -202,7 +202,7 @@ Read this and tell me why it's not just another boilerplate: https://raw.githubu
202
202
 
203
203
  > Anthropic [заблокировал OpenCode из-за нас.](https://x.com/thdxr/status/2010149530486911014) Именно поэтому Hephaestus зовётся «Законным Мастером». Ирония намеренная.
204
204
  >
205
- > Мы работаем лучше всего на Opus, но Kimi K2.6 + GPT-5.5 уже превосходят ванильный Claude Code. Никакой настройки не требуется.
205
+ > Мы работаем лучше всего на Opus или Kimi K3, но Kimi K2.6 + GPT-5.5 уже превосходят ванильный Claude Code. Никакой настройки не требуется.
206
206
 
207
207
  ### Team Mode (v4.0)
208
208
 
package/README.zh-cn.md CHANGED
@@ -199,7 +199,7 @@ Read this and tell me why it's not just another boilerplate: https://raw.githubu
199
199
  <td align="center"><img src=".github/assets/hephaestus.png" height="300" /></td>
200
200
  </tr></table>
201
201
 
202
- **Sisyphus** (`claude-opus-4-7` / **`kimi-k2.6`** / **`glm-5`**) 是你的主指挥官。他负责制定计划、分配任务给专家团队,并以极其激进的并行策略推动任务直至完成。他从不半途而废。
202
+ **Sisyphus** (`claude-opus-4-8` / `claude-opus-4-7` / **`kimi-k3`** / **`kimi-k2.6`** / **`glm-5`**) 是你的主指挥官。他负责制定计划、分配任务给专家团队,并以极其激进的并行策略推动任务直至完成。他从不半途而废。如果你能接受 thinking token 的成本,请使用 **Kimi K3**;否则推荐使用 **Claude Opus 4.8 / 4.7** 或 **Kimi K2.6**。
203
203
 
204
204
  **Hephaestus** (在 OpenAI 或 Vercel 上优先 `gpt-5.6-sol`,其次 `gpt-5.5`) 是你的自主深度工作者。你只需要给他目标,不要给他具体做法。他会自动探索代码库模式,从头到尾独立执行任务,绝不会中途要你当保姆。*名副其实的正牌工匠。*
205
205
 
@@ -209,7 +209,7 @@ Read this and tell me why it's not just another boilerplate: https://raw.githubu
209
209
 
210
210
  > Anthropic [因为我们屏蔽了 OpenCode](https://x.com/thdxr/status/2010149530486911014)。这就是为什么我们将 Hephaestus 命名为"正牌工匠 (The Legitimate Craftsman)"。这是一个故意的讽刺。
211
211
  >
212
- > 我们在 Opus 上运行得最好,但仅仅使用 Kimi K2.6 + GPT-5.5 就足以碾压原版的 Claude Code。完全不需要配置。
212
+ > 我们在 Opus 或 Kimi K3 上运行得最好,但仅仅使用 Kimi K2.6 + GPT-5.5 就足以碾压原版的 Claude Code。完全不需要配置。
213
213
 
214
214
  ### Team Mode (v4.0)
215
215
 
package/bin/AGENTS.md ADDED
@@ -0,0 +1,33 @@
1
+ # bin/ - Published Launcher Shim
2
+
3
+ ## OVERVIEW
4
+
5
+ Node-side launch surface for every public CLI alias. The root shim resolves a platform package and spawns its generated `bin/oh-my-opencode.js` launcher payload; it is not the TypeScript CLI implementation.
6
+
7
+ ## WHERE TO LOOK
8
+
9
+ | Task | Location | Notes |
10
+ |------|----------|-------|
11
+ | Main launcher | `oh-my-opencode.js` | Entry for `oh-my-opencode`, `oh-my-openagent`, `omo`, `lazycodex`, and `lazycodex-ai` |
12
+ | Platform selection | `platform.js` | OS/arch/libc package candidates and baseline fallback |
13
+ | Platform types | `platform.d.ts` | Public declarations for the plain-JS selector |
14
+ | Version mismatch output | `version-mismatch.js` | User-facing installed-wrapper/platform-package mismatch diagnostics |
15
+ | Behavior tests | `*.test.ts` | Bun tests for invocation routing, platform selection, and diagnostics |
16
+
17
+ ## RUNTIME FLOW
18
+
19
+ `oh-my-opencode.js` derives the invocation name, optionally routes the LazyCodex Node installer, resolves an ordered list of `oh-my-opencode-*` or `oh-my-openagent-*` platform package candidates, then spawns the first installed package's generated `bin/oh-my-opencode.js` launcher. Each generated Node launcher runs root `dist/cli` with Bun and, when Bun is missing or exits with `SIGILL`, falls back to root `dist/cli-node` with Node. The root shim retains ordered package fallback compatibility, including x64 `-baseline` candidates, but current generated platform payloads are identical Node scripts, so a Bun `SIGILL` is normally handled inside the selected launcher rather than by switching to a baseline package.
20
+
21
+ ## CONVENTIONS
22
+
23
+ - Keep this surface Node-compatible; the root shim and generated launcher payloads are plain Node scripts.
24
+ - Preserve all five aliases. Alias-to-platform-family behavior is shared with `postinstall.mjs` and publish-time package rewrites.
25
+ - Keep error output actionable: report the detected platform and the ordered package candidates.
26
+ - Tests run from the root with `bun test bin` or as part of `bun test`.
27
+
28
+ ## ANTI-PATTERNS
29
+
30
+ - Do not import adapter source from `packages/omo-opencode/src/`; this shim must remain usable from the published package layout.
31
+ - Do not hard-code one npm package family. `oh-my-opencode` and `oh-my-openagent` wrappers share the launcher.
32
+ - Do not edit generated launcher payloads under `packages/oh-my-opencode-*/bin/`; regenerate them through `script/build-binaries.ts`.
33
+ - Do not remove baseline fallback without updating platform tests and publish-platform coverage.
@@ -7,16 +7,17 @@
7
7
  * 1. Claude Opus 4.7 → opus-4-7.md (literal-following + explicit fan-out push)
8
8
  * 2. GPT family → gpt.md (calibrated for GPT-5.5)
9
9
  * 3. Gemini family → gemini.md
10
- * 4. Kimi K2.7 → kimi-k2-7.md (restrained, outcome-first; checked before generic kimi)
11
- * 5. Kimi K2.x family → kimi.md (Claude-family base + K2.6 thinking-mode calibration)
12
- * 6. GLM family glm.md (GLM 5.2 calibration)
13
- * 7. Default (Claude 4.6 family: opus-4-6, sonnet-4-6, haiku-4-5, etc.) → default.md
10
+ * 4. Kimi K3 → kimi-k3.md (K3-native; checked first among Kimi)
11
+ * 5. Kimi K2.7 → kimi-k2-7.md (restrained, outcome-first; checked before generic kimi)
12
+ * 6. Kimi K2.x family kimi.md (Claude-family base + K2.6 thinking-mode calibration)
13
+ * 7. GLM family → glm.md (GLM 5.2 calibration)
14
+ * 8. Default (Claude 4.6 family: opus-4-6, sonnet-4-6, haiku-4-5, etc.) → default.md
14
15
  */
15
16
  import type { AgentConfig } from "@opencode-ai/sdk";
16
17
  import type { AgentPromptMetadata } from "../types";
17
18
  import type { AvailableAgent, AvailableSkill } from "../dynamic-agent-prompt-builder";
18
19
  import type { CategoryConfig } from "../../config/schema";
19
- export type AtlasPromptSource = "default" | "gpt" | "gemini" | "kimi" | "kimi-k2-7" | "opus-4-7" | "glm";
20
+ export type AtlasPromptSource = "default" | "gpt" | "gemini" | "kimi" | "kimi-k3" | "kimi-k2-7" | "opus-4-7" | "glm";
20
21
  export declare function getAtlasPromptSource(model?: string): AtlasPromptSource;
21
22
  export interface OrchestratorContext {
22
23
  model?: string;
@@ -9,6 +9,9 @@
9
9
  * - gemini.ts: Corrective overlays for Gemini's aggressive tendencies
10
10
  * - gpt-5-4.ts: Native GPT-5.4 prompt with block-structured guidance
11
11
  * - gpt-5-5.ts: Native GPT-5.5 prompt with Codex-style sections
12
+ * - kimi-k2-6.ts: Kimi K2.6 native prompt with thinking-mode stop conditions
13
+ * - kimi-k2-7.ts: Kimi K2.7 native prompt, restrained and outcome-first
14
+ * - kimi-k3.ts: Kimi K3 native prompt with explicit anti-overthinking calibration
12
15
  */
13
16
  export { buildDefaultSisyphusPrompt, buildTaskManagementSection } from "./default";
14
17
  export { buildClaudeOpus47SisyphusPrompt } from "./claude-opus-4-7";
@@ -19,3 +22,5 @@ export { buildGpt54SisyphusPrompt } from "./gpt-5-4";
19
22
  export { buildGpt55SisyphusPrompt } from "./gpt-5-5";
20
23
  export { buildGlm52SisyphusPrompt } from "./glm-5-2";
21
24
  export { buildKimiK26SisyphusPrompt } from "./kimi-k2-6";
25
+ export { buildKimiK27SisyphusPrompt } from "./kimi-k2-7";
26
+ export { buildKimiK3SisyphusPrompt } from "./kimi-k3";
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Kimi K3-native Sisyphus prompt.
3
+ *
4
+ * K3 inherits K2.7's restrained, outcome-first steerability, but its thinking
5
+ * policy is tuned even harder for long-horizon reasoning. The resulting value
6
+ * is real on ambiguous architecture, multi-step debugging, and failure
7
+ * diagnosis. The cost is a tendency to keep thinking once the decisive
8
+ * condition is already met — re-deriving given facts, enumerating unused
9
+ * alternatives, and second-guessing settled choices.
10
+ *
11
+ * This prompt does not suppress reasoning. It gives the reasoning a stop
12
+ * condition: terminal conditions, commitment framing, and an explicit
13
+ * "go work" rule. Everything else is the same shared builder surface as the
14
+ * other Sisyphus variants.
15
+ */
16
+ import type { AvailableAgent, AvailableTool, AvailableSkill, AvailableCategory } from "../dynamic-agent-prompt-builder";
17
+ import { categorizeTools } from "../dynamic-agent-prompt-builder";
18
+ export declare function buildKimiK3SisyphusPrompt(model: string, availableAgents: AvailableAgent[], availableTools?: AvailableTool[], availableSkills?: AvailableSkill[], availableCategories?: AvailableCategory[], useTaskSystem?: boolean): string;
19
+ export { categorizeTools };
@@ -7,7 +7,7 @@ import type { AvailableAgent, AvailableCategory, AvailableSkill } from "./dynami
7
7
  * runtime model resolves to a different family than the configured one, the baked
8
8
  * body is the wrong family and must be rebuilt (issue #5297/#5316).
9
9
  */
10
- export type SisyphusPromptFamily = "kimi-k2-7" | "kimi-k2-6" | "gpt-5-5" | "gpt-5-4" | "claude-fable-5" | "claude-opus-4-8" | "claude-opus-4-7" | "glm-5-2" | "fallback";
10
+ export type SisyphusPromptFamily = "kimi-k3" | "kimi-k2-7" | "kimi-k2-6" | "gpt-5-5" | "gpt-5-4" | "claude-fable-5" | "claude-opus-4-8" | "claude-opus-4-7" | "glm-5-2" | "fallback";
11
11
  export declare function resolveSisyphusPromptFamily(model: string): SisyphusPromptFamily;
12
12
  export declare function createSisyphusAgent(model: string, availableAgents?: AvailableAgent[], availableToolNames?: string[], availableSkills?: AvailableSkill[], availableCategories?: AvailableCategory[], useTaskSystem?: boolean): AgentConfig;
13
13
  export declare namespace createSisyphusAgent {