oh-my-opencode 5.1.45 → 5.1.47

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 (370) hide show
  1. package/.agents/command/publish.md +12 -13
  2. package/.agents/skills/publish/SKILL.md +12 -13
  3. package/.opencode/command/publish.md +12 -13
  4. package/README.de.md +0 -5
  5. package/README.es.md +0 -5
  6. package/README.fr.md +0 -5
  7. package/README.it.md +0 -5
  8. package/README.ja.md +0 -5
  9. package/README.ko.md +0 -5
  10. package/README.md +4 -5
  11. package/README.pt-br.md +0 -5
  12. package/README.ru.md +0 -6
  13. package/README.zh-cn.md +0 -5
  14. package/dist/agents/atlas/agent.d.ts +3 -2
  15. package/dist/agents/sisyphus/index.d.ts +1 -0
  16. package/dist/agents/sisyphus/kimi-k3-1.d.ts +9 -0
  17. package/dist/agents/sisyphus-agent-factory.d.ts +1 -1
  18. package/dist/agents/sisyphus-junior/agent.d.ts +1 -1
  19. package/dist/agents/sisyphus-junior/index.d.ts +1 -0
  20. package/dist/agents/sisyphus-junior/kimi-k3-1.d.ts +6 -0
  21. package/dist/agents/types.d.ts +2 -2
  22. package/dist/cli/index.js +91 -163
  23. package/dist/cli/service-auth/keystore.d.ts +8 -3
  24. package/dist/cli-node/index.js +91 -163
  25. package/dist/config-migration/index.d.ts +2 -2
  26. package/dist/config-migration/migration-plans.d.ts +0 -10
  27. package/dist/index.js +1784 -1204
  28. package/dist/skills/ast-grep/AGENTS.md +1 -1
  29. package/dist/skills/browser/runtime/omowright/manifest.json +1 -1
  30. package/dist/skills/frontend/ATTRIBUTION.md +2 -2
  31. package/dist/skills/ultimate-browsing/engine/AGENTS.md +1 -1
  32. package/dist/skills/ulw-research/AGENTS.md +14 -2
  33. package/dist/skills/ulw-research/SKILL.md +37 -12
  34. package/dist/skills/ulw-research/references/deliverable-phase.md +81 -14
  35. package/dist/skills/ulw-research/references/fact-ledger-grammar.md +19 -1
  36. package/dist/skills/ulw-research/references/fact-ledger.md +95 -0
  37. package/dist/skills/ulw-research/references/fidelity-claim-kinds.md +19 -0
  38. package/dist/skills/ulw-research/references/report-gates.md +21 -4
  39. package/dist/skills/ulw-research/references/report-visualization.md +2 -0
  40. package/dist/skills/ulw-research/references/unit-rules.md +157 -0
  41. package/dist/skills/ulw-research/scripts/claim-kinds.mjs +116 -0
  42. package/dist/skills/ulw-research/scripts/claim-kinds.test.ts +193 -0
  43. package/dist/skills/ulw-research/scripts/cli-support.mjs +19 -5
  44. package/dist/skills/ulw-research/scripts/cli-support.test.ts +13 -2
  45. package/dist/skills/ulw-research/scripts/contracts.mjs +27 -6
  46. package/dist/skills/ulw-research/scripts/contracts.test.ts +3 -0
  47. package/dist/skills/ulw-research/scripts/copy-returns-polish.test.ts +209 -0
  48. package/dist/skills/ulw-research/scripts/copy-returns.test.ts +183 -0
  49. package/dist/skills/ulw-research/scripts/delivery-barrier.test.ts +245 -0
  50. package/dist/skills/ulw-research/scripts/fact-commands-meaning.mjs +176 -0
  51. package/dist/skills/ulw-research/scripts/fact-commands-polish.mjs +127 -0
  52. package/dist/skills/ulw-research/scripts/fact-commands-verify.mjs +183 -0
  53. package/dist/skills/ulw-research/scripts/fact-commands.mjs +241 -0
  54. package/dist/skills/ulw-research/scripts/fact-derive.mjs +66 -0
  55. package/dist/skills/ulw-research/scripts/fact-derive.test.ts +375 -0
  56. package/dist/skills/ulw-research/scripts/fact-expr.mjs +108 -0
  57. package/dist/skills/ulw-research/scripts/fact-fill.mjs +194 -0
  58. package/dist/skills/ulw-research/scripts/fact-fill.test.ts +221 -0
  59. package/dist/skills/ulw-research/scripts/fact-ledger-grammar.test.ts +9 -2
  60. package/dist/skills/ulw-research/scripts/fact-ledger-kinds.mjs +127 -13
  61. package/dist/skills/ulw-research/scripts/fact-ledger-kinds.test.ts +18 -3
  62. package/dist/skills/ulw-research/scripts/fact-ledger-legacy.test.ts +160 -0
  63. package/dist/skills/ulw-research/scripts/fact-ledger-schema.mjs +33 -16
  64. package/dist/skills/ulw-research/scripts/fact-ledger.mjs +29 -9
  65. package/dist/skills/ulw-research/scripts/fact-ledger.test.ts +2 -0
  66. package/dist/skills/ulw-research/scripts/fact-locate.mjs +231 -0
  67. package/dist/skills/ulw-research/scripts/fact-locate.test.ts +118 -0
  68. package/dist/skills/ulw-research/scripts/fact-pairs.mjs +185 -0
  69. package/dist/skills/ulw-research/scripts/fact-pairs.test.ts +151 -0
  70. package/dist/skills/ulw-research/scripts/fact-recompute.mjs +89 -0
  71. package/dist/skills/ulw-research/scripts/fact-unit-dimensions.test.ts +409 -0
  72. package/dist/skills/ulw-research/scripts/fact-unit-rules.test.ts +388 -0
  73. package/dist/skills/ulw-research/scripts/fidelity-binding.mjs +130 -0
  74. package/dist/skills/ulw-research/scripts/fidelity-binding.test.ts +81 -0
  75. package/dist/skills/ulw-research/scripts/fidelity-brief.mjs +5 -0
  76. package/dist/skills/ulw-research/scripts/fidelity-claims.mjs +89 -0
  77. package/dist/skills/ulw-research/scripts/fidelity-lexicon.mjs +145 -0
  78. package/dist/skills/ulw-research/scripts/fidelity-lexicon.test.ts +117 -0
  79. package/dist/skills/ulw-research/scripts/fidelity-records.mjs +163 -0
  80. package/dist/skills/ulw-research/scripts/fidelity-state.mjs +2 -1
  81. package/dist/skills/ulw-research/scripts/fidelity-trace.mjs +85 -0
  82. package/dist/skills/ulw-research/scripts/fidelity-trace.test.ts +58 -0
  83. package/dist/skills/ulw-research/scripts/fidelity-values.mjs +229 -0
  84. package/dist/skills/ulw-research/scripts/fidelity-values.test.ts +270 -0
  85. package/dist/skills/ulw-research/scripts/gates-fidelity.mjs +113 -0
  86. package/dist/skills/ulw-research/scripts/gates-fidelity.test.ts +73 -0
  87. package/dist/skills/ulw-research/scripts/gates-static.mjs +28 -8
  88. package/dist/skills/ulw-research/scripts/html-lite.mjs +2 -2
  89. package/dist/skills/ulw-research/scripts/html-markup.mjs +182 -0
  90. package/dist/skills/ulw-research/scripts/md-lite.mjs +193 -0
  91. package/dist/skills/ulw-research/scripts/md-lite.test.ts +271 -0
  92. package/dist/skills/ulw-research/scripts/meaning-check.mjs +196 -0
  93. package/dist/skills/ulw-research/scripts/meaning-check.test.ts +228 -0
  94. package/dist/skills/ulw-research/scripts/outcome.mjs +6 -5
  95. package/dist/skills/ulw-research/scripts/placeholder.mjs +184 -0
  96. package/dist/skills/ulw-research/scripts/placeholder.test.ts +77 -0
  97. package/dist/skills/ulw-research/scripts/polish-apply.mjs +115 -0
  98. package/dist/skills/ulw-research/scripts/polish-apply.test.ts +363 -0
  99. package/dist/skills/ulw-research/scripts/polish-diff.mjs +31 -0
  100. package/dist/skills/ulw-research/scripts/polish-diff.test.ts +168 -0
  101. package/dist/skills/ulw-research/scripts/polish-markup.test.ts +187 -0
  102. package/dist/skills/ulw-research/scripts/polish-project.mjs +125 -0
  103. package/dist/skills/ulw-research/scripts/polish-rules.mjs +170 -0
  104. package/dist/skills/ulw-research/scripts/references-fences.test.ts +25 -0
  105. package/dist/skills/ulw-research/scripts/report-tools-commands.mjs +19 -8
  106. package/dist/skills/ulw-research/scripts/report-tools.mjs +15 -0
  107. package/dist/skills/ulw-research/scripts/report-tools.test.ts +545 -2
  108. package/dist/skills/ulw-research/scripts/source-commands.mjs +140 -0
  109. package/dist/skills/ulw-research/scripts/source-snapshot.mjs +176 -0
  110. package/dist/skills/ulw-research/scripts/source-snapshot.test.ts +113 -0
  111. package/dist/skills/ulw-research/scripts/tests/fixtures/fidelity/assets/share.csv +3 -0
  112. package/dist/skills/ulw-research/scripts/tests/fixtures/fidelity/gen-legacy-dev.mjs +89 -0
  113. package/dist/skills/ulw-research/scripts/tests/fixtures/fidelity/ledger-basic.json +223 -0
  114. package/dist/skills/ulw-research/scripts/tests/fixtures/fidelity/ledger-legacy-dev.json +859 -0
  115. package/dist/skills/ulw-research/scripts/tests/fixtures/fidelity/ledger-verify.json +420 -0
  116. package/dist/skills/ulw-research/scripts/tests/fixtures/fidelity/polish-edits.json +12 -0
  117. package/dist/skills/ulw-research/scripts/tests/fixtures/fidelity/report-bad.html +19 -0
  118. package/dist/skills/ulw-research/scripts/tests/fixtures/fidelity/report-good.html +39 -0
  119. package/dist/skills/ulw-research/scripts/tests/fixtures/fidelity/sources/S4/acronyms.json +3 -0
  120. package/dist/skills/ulw-research/scripts/tests/fixtures/fidelity/sources/S4/meta.json +9 -0
  121. package/dist/skills/ulw-research/scripts/tests/fixtures/fidelity/sources/S4/sentences.jsonl +7 -0
  122. package/dist/skills/ulw-research/scripts/tests/fixtures/fidelity/sources/S4/text.txt +7 -0
  123. package/dist/skills/ulw-research/scripts/tests/fixtures/fidelity/sources/S4.html +19 -0
  124. package/dist/skills/ulw-research/scripts/tests/fixtures/fidelity/sources/S5/acronyms.json +1 -0
  125. package/dist/skills/ulw-research/scripts/tests/fixtures/fidelity/sources/S5/meta.json +9 -0
  126. package/dist/skills/ulw-research/scripts/tests/fixtures/fidelity/sources/S5/sentences.jsonl +1 -0
  127. package/dist/skills/ulw-research/scripts/tests/fixtures/fidelity/sources/S5/text.txt +1 -0
  128. package/dist/skills/ulw-research/scripts/tests/fixtures/fidelity/sources/S9.txt +1 -0
  129. package/dist/skills/ulw-research/scripts/unit-algebra.mjs +101 -0
  130. package/dist/skills/ulw-research/scripts/unit-errors.mjs +23 -0
  131. package/dist/skills/ulw-research/scripts/unit-metadata.mjs +31 -0
  132. package/dist/skills/ulw-research/scripts/unit-pairs.mjs +72 -0
  133. package/dist/skills/ulw-research/scripts/unit-precision.mjs +44 -0
  134. package/dist/skills/ulw-research/scripts/unit-rules-shapes.mjs +64 -0
  135. package/dist/skills/ulw-research/scripts/unit-rules.mjs +173 -0
  136. package/dist/skills/ulw-research/scripts/units.mjs +4 -4
  137. package/dist/testing/module-mock-lifecycle.d.ts +1 -1
  138. package/dist/tui.js +32 -34
  139. package/package.json +13 -13
  140. package/packages/lsp-core/src/mcp-protocol-pin.test.ts +29 -0
  141. package/packages/lsp-core/src/mcp.ts +5 -2
  142. package/packages/lsp-daemon/dist/cli.js +3 -3
  143. package/packages/lsp-daemon/dist/client.js +3 -3
  144. package/packages/lsp-daemon/dist/index.js +3 -3
  145. package/packages/lsp-tools-mcp/dist/cli.js +3 -3
  146. package/packages/lsp-tools-mcp/dist/mcp.js +3 -3
  147. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  148. package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +23 -14
  149. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  150. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  151. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  152. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  153. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  154. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  155. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  156. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  157. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +2 -2
  158. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  159. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  160. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  161. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  162. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  163. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  164. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  165. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  166. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  167. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  168. package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +1 -1
  169. package/packages/omo-codex/plugin/components/ulw-execute-continuation/package.json +1 -1
  170. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +5 -5
  171. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  172. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  173. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  174. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  175. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  176. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  177. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  178. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  179. package/packages/omo-codex/plugin/hooks/post-tool-use-recording-spawn-admission.json +1 -1
  180. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  181. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  182. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  183. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  184. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  185. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  186. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  187. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +1 -1
  188. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  189. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  190. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  191. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  192. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  193. package/packages/omo-codex/plugin/package-lock.json +12 -12
  194. package/packages/omo-codex/plugin/package.json +1 -1
  195. package/packages/omo-codex/plugin/scripts/sync-skills.mjs +8 -3
  196. package/packages/omo-codex/plugin/shared/test/config-loader.test.ts +0 -2
  197. package/packages/omo-codex/plugin/skills/ast-grep/AGENTS.md +1 -1
  198. package/packages/omo-codex/plugin/skills/browser/runtime/omowright/manifest.json +1 -1
  199. package/packages/omo-codex/plugin/skills/frontend/ATTRIBUTION.md +2 -2
  200. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/AGENTS.md +1 -1
  201. package/packages/omo-codex/plugin/skills/ulw-research/AGENTS.md +14 -2
  202. package/packages/omo-codex/plugin/skills/ulw-research/SKILL.md +36 -11
  203. package/packages/omo-codex/plugin/skills/ulw-research/references/deliverable-phase.md +81 -14
  204. package/packages/omo-codex/plugin/skills/ulw-research/references/fact-ledger-grammar.md +19 -1
  205. package/packages/omo-codex/plugin/skills/ulw-research/references/fact-ledger.md +95 -0
  206. package/packages/omo-codex/plugin/skills/ulw-research/references/fidelity-claim-kinds.md +19 -0
  207. package/packages/omo-codex/plugin/skills/ulw-research/references/report-gates.md +21 -4
  208. package/packages/omo-codex/plugin/skills/ulw-research/references/report-visualization.md +2 -0
  209. package/packages/omo-codex/plugin/skills/ulw-research/references/unit-rules.md +157 -0
  210. package/packages/omo-codex/plugin/skills/ulw-research/scripts/claim-kinds.mjs +116 -0
  211. package/packages/omo-codex/plugin/skills/ulw-research/scripts/cli-support.mjs +19 -5
  212. package/packages/omo-codex/plugin/skills/ulw-research/scripts/contracts.mjs +27 -6
  213. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fact-commands-meaning.mjs +176 -0
  214. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fact-commands-polish.mjs +127 -0
  215. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fact-commands-verify.mjs +183 -0
  216. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fact-commands.mjs +241 -0
  217. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fact-derive.mjs +66 -0
  218. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fact-expr.mjs +108 -0
  219. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fact-fill.mjs +194 -0
  220. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fact-ledger-kinds.mjs +127 -13
  221. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fact-ledger-schema.mjs +33 -16
  222. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fact-ledger.mjs +29 -9
  223. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fact-locate.mjs +231 -0
  224. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fact-pairs.mjs +185 -0
  225. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fact-recompute.mjs +89 -0
  226. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fidelity-binding.mjs +130 -0
  227. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fidelity-brief.mjs +5 -0
  228. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fidelity-claims.mjs +89 -0
  229. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fidelity-lexicon.mjs +145 -0
  230. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fidelity-records.mjs +163 -0
  231. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fidelity-state.mjs +2 -1
  232. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fidelity-trace.mjs +85 -0
  233. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fidelity-values.mjs +229 -0
  234. package/packages/omo-codex/plugin/skills/ulw-research/scripts/gates-fidelity.mjs +113 -0
  235. package/packages/omo-codex/plugin/skills/ulw-research/scripts/gates-static.mjs +28 -8
  236. package/packages/omo-codex/plugin/skills/ulw-research/scripts/html-lite.mjs +2 -2
  237. package/packages/omo-codex/plugin/skills/ulw-research/scripts/html-markup.mjs +182 -0
  238. package/packages/omo-codex/plugin/skills/ulw-research/scripts/md-lite.mjs +193 -0
  239. package/packages/omo-codex/plugin/skills/ulw-research/scripts/meaning-check.mjs +196 -0
  240. package/packages/omo-codex/plugin/skills/ulw-research/scripts/outcome.mjs +6 -5
  241. package/packages/omo-codex/plugin/skills/ulw-research/scripts/placeholder.mjs +184 -0
  242. package/packages/omo-codex/plugin/skills/ulw-research/scripts/polish-apply.mjs +115 -0
  243. package/packages/omo-codex/plugin/skills/ulw-research/scripts/polish-diff.mjs +31 -0
  244. package/packages/omo-codex/plugin/skills/ulw-research/scripts/polish-project.mjs +125 -0
  245. package/packages/omo-codex/plugin/skills/ulw-research/scripts/polish-rules.mjs +170 -0
  246. package/packages/omo-codex/plugin/skills/ulw-research/scripts/report-tools-commands.mjs +19 -8
  247. package/packages/omo-codex/plugin/skills/ulw-research/scripts/report-tools.mjs +15 -0
  248. package/packages/omo-codex/plugin/skills/ulw-research/scripts/source-commands.mjs +140 -0
  249. package/packages/omo-codex/plugin/skills/ulw-research/scripts/source-snapshot.mjs +176 -0
  250. package/packages/omo-codex/plugin/skills/ulw-research/scripts/unit-algebra.mjs +101 -0
  251. package/packages/omo-codex/plugin/skills/ulw-research/scripts/unit-errors.mjs +23 -0
  252. package/packages/omo-codex/plugin/skills/ulw-research/scripts/unit-metadata.mjs +31 -0
  253. package/packages/omo-codex/plugin/skills/ulw-research/scripts/unit-pairs.mjs +72 -0
  254. package/packages/omo-codex/plugin/skills/ulw-research/scripts/unit-precision.mjs +44 -0
  255. package/packages/omo-codex/plugin/skills/ulw-research/scripts/unit-rules-shapes.mjs +64 -0
  256. package/packages/omo-codex/plugin/skills/ulw-research/scripts/unit-rules.mjs +173 -0
  257. package/packages/omo-codex/plugin/skills/ulw-research/scripts/units.mjs +4 -4
  258. package/packages/omo-codex/plugin/test/sync-skills-codex-compatibility.test.mjs +19 -0
  259. package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +7 -3
  260. package/packages/omo-codex/scripts/install-dist/install-local.mjs +28 -19
  261. package/packages/shared-skills/skills/ast-grep/AGENTS.md +1 -1
  262. package/packages/shared-skills/skills/browser/runtime/omowright/manifest.json +1 -1
  263. package/packages/shared-skills/skills/frontend/ATTRIBUTION.md +2 -2
  264. package/packages/shared-skills/skills/ultimate-browsing/engine/AGENTS.md +1 -1
  265. package/packages/shared-skills/skills/ulw-research/AGENTS.md +14 -2
  266. package/packages/shared-skills/skills/ulw-research/SKILL.md +37 -12
  267. package/packages/shared-skills/skills/ulw-research/references/deliverable-phase.md +81 -14
  268. package/packages/shared-skills/skills/ulw-research/references/fact-ledger-grammar.md +19 -1
  269. package/packages/shared-skills/skills/ulw-research/references/fact-ledger.md +95 -0
  270. package/packages/shared-skills/skills/ulw-research/references/fidelity-claim-kinds.md +19 -0
  271. package/packages/shared-skills/skills/ulw-research/references/report-gates.md +21 -4
  272. package/packages/shared-skills/skills/ulw-research/references/report-visualization.md +2 -0
  273. package/packages/shared-skills/skills/ulw-research/references/unit-rules.md +157 -0
  274. package/packages/shared-skills/skills/ulw-research/scripts/claim-kinds.mjs +116 -0
  275. package/packages/shared-skills/skills/ulw-research/scripts/claim-kinds.test.ts +193 -0
  276. package/packages/shared-skills/skills/ulw-research/scripts/cli-support.mjs +19 -5
  277. package/packages/shared-skills/skills/ulw-research/scripts/cli-support.test.ts +13 -2
  278. package/packages/shared-skills/skills/ulw-research/scripts/contracts.mjs +27 -6
  279. package/packages/shared-skills/skills/ulw-research/scripts/contracts.test.ts +3 -0
  280. package/packages/shared-skills/skills/ulw-research/scripts/copy-returns-polish.test.ts +209 -0
  281. package/packages/shared-skills/skills/ulw-research/scripts/copy-returns.test.ts +183 -0
  282. package/packages/shared-skills/skills/ulw-research/scripts/delivery-barrier.test.ts +245 -0
  283. package/packages/shared-skills/skills/ulw-research/scripts/fact-commands-meaning.mjs +176 -0
  284. package/packages/shared-skills/skills/ulw-research/scripts/fact-commands-polish.mjs +127 -0
  285. package/packages/shared-skills/skills/ulw-research/scripts/fact-commands-verify.mjs +183 -0
  286. package/packages/shared-skills/skills/ulw-research/scripts/fact-commands.mjs +241 -0
  287. package/packages/shared-skills/skills/ulw-research/scripts/fact-derive.mjs +66 -0
  288. package/packages/shared-skills/skills/ulw-research/scripts/fact-derive.test.ts +375 -0
  289. package/packages/shared-skills/skills/ulw-research/scripts/fact-expr.mjs +108 -0
  290. package/packages/shared-skills/skills/ulw-research/scripts/fact-fill.mjs +194 -0
  291. package/packages/shared-skills/skills/ulw-research/scripts/fact-fill.test.ts +221 -0
  292. package/packages/shared-skills/skills/ulw-research/scripts/fact-ledger-grammar.test.ts +9 -2
  293. package/packages/shared-skills/skills/ulw-research/scripts/fact-ledger-kinds.mjs +127 -13
  294. package/packages/shared-skills/skills/ulw-research/scripts/fact-ledger-kinds.test.ts +18 -3
  295. package/packages/shared-skills/skills/ulw-research/scripts/fact-ledger-legacy.test.ts +160 -0
  296. package/packages/shared-skills/skills/ulw-research/scripts/fact-ledger-schema.mjs +33 -16
  297. package/packages/shared-skills/skills/ulw-research/scripts/fact-ledger.mjs +29 -9
  298. package/packages/shared-skills/skills/ulw-research/scripts/fact-ledger.test.ts +2 -0
  299. package/packages/shared-skills/skills/ulw-research/scripts/fact-locate.mjs +231 -0
  300. package/packages/shared-skills/skills/ulw-research/scripts/fact-locate.test.ts +118 -0
  301. package/packages/shared-skills/skills/ulw-research/scripts/fact-pairs.mjs +185 -0
  302. package/packages/shared-skills/skills/ulw-research/scripts/fact-pairs.test.ts +151 -0
  303. package/packages/shared-skills/skills/ulw-research/scripts/fact-recompute.mjs +89 -0
  304. package/packages/shared-skills/skills/ulw-research/scripts/fact-unit-dimensions.test.ts +409 -0
  305. package/packages/shared-skills/skills/ulw-research/scripts/fact-unit-rules.test.ts +388 -0
  306. package/packages/shared-skills/skills/ulw-research/scripts/fidelity-binding.mjs +130 -0
  307. package/packages/shared-skills/skills/ulw-research/scripts/fidelity-binding.test.ts +81 -0
  308. package/packages/shared-skills/skills/ulw-research/scripts/fidelity-brief.mjs +5 -0
  309. package/packages/shared-skills/skills/ulw-research/scripts/fidelity-claims.mjs +89 -0
  310. package/packages/shared-skills/skills/ulw-research/scripts/fidelity-lexicon.mjs +145 -0
  311. package/packages/shared-skills/skills/ulw-research/scripts/fidelity-lexicon.test.ts +117 -0
  312. package/packages/shared-skills/skills/ulw-research/scripts/fidelity-records.mjs +163 -0
  313. package/packages/shared-skills/skills/ulw-research/scripts/fidelity-state.mjs +2 -1
  314. package/packages/shared-skills/skills/ulw-research/scripts/fidelity-trace.mjs +85 -0
  315. package/packages/shared-skills/skills/ulw-research/scripts/fidelity-trace.test.ts +58 -0
  316. package/packages/shared-skills/skills/ulw-research/scripts/fidelity-values.mjs +229 -0
  317. package/packages/shared-skills/skills/ulw-research/scripts/fidelity-values.test.ts +270 -0
  318. package/packages/shared-skills/skills/ulw-research/scripts/gates-fidelity.mjs +113 -0
  319. package/packages/shared-skills/skills/ulw-research/scripts/gates-fidelity.test.ts +73 -0
  320. package/packages/shared-skills/skills/ulw-research/scripts/gates-static.mjs +28 -8
  321. package/packages/shared-skills/skills/ulw-research/scripts/html-lite.mjs +2 -2
  322. package/packages/shared-skills/skills/ulw-research/scripts/html-markup.mjs +182 -0
  323. package/packages/shared-skills/skills/ulw-research/scripts/md-lite.mjs +193 -0
  324. package/packages/shared-skills/skills/ulw-research/scripts/md-lite.test.ts +271 -0
  325. package/packages/shared-skills/skills/ulw-research/scripts/meaning-check.mjs +196 -0
  326. package/packages/shared-skills/skills/ulw-research/scripts/meaning-check.test.ts +228 -0
  327. package/packages/shared-skills/skills/ulw-research/scripts/outcome.mjs +6 -5
  328. package/packages/shared-skills/skills/ulw-research/scripts/placeholder.mjs +184 -0
  329. package/packages/shared-skills/skills/ulw-research/scripts/placeholder.test.ts +77 -0
  330. package/packages/shared-skills/skills/ulw-research/scripts/polish-apply.mjs +115 -0
  331. package/packages/shared-skills/skills/ulw-research/scripts/polish-apply.test.ts +363 -0
  332. package/packages/shared-skills/skills/ulw-research/scripts/polish-diff.mjs +31 -0
  333. package/packages/shared-skills/skills/ulw-research/scripts/polish-diff.test.ts +168 -0
  334. package/packages/shared-skills/skills/ulw-research/scripts/polish-markup.test.ts +187 -0
  335. package/packages/shared-skills/skills/ulw-research/scripts/polish-project.mjs +125 -0
  336. package/packages/shared-skills/skills/ulw-research/scripts/polish-rules.mjs +170 -0
  337. package/packages/shared-skills/skills/ulw-research/scripts/references-fences.test.ts +25 -0
  338. package/packages/shared-skills/skills/ulw-research/scripts/report-tools-commands.mjs +19 -8
  339. package/packages/shared-skills/skills/ulw-research/scripts/report-tools.mjs +15 -0
  340. package/packages/shared-skills/skills/ulw-research/scripts/report-tools.test.ts +545 -2
  341. package/packages/shared-skills/skills/ulw-research/scripts/source-commands.mjs +140 -0
  342. package/packages/shared-skills/skills/ulw-research/scripts/source-snapshot.mjs +176 -0
  343. package/packages/shared-skills/skills/ulw-research/scripts/source-snapshot.test.ts +113 -0
  344. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/fidelity/assets/share.csv +3 -0
  345. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/fidelity/gen-legacy-dev.mjs +89 -0
  346. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/fidelity/ledger-basic.json +223 -0
  347. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/fidelity/ledger-legacy-dev.json +859 -0
  348. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/fidelity/ledger-verify.json +420 -0
  349. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/fidelity/polish-edits.json +12 -0
  350. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/fidelity/report-bad.html +19 -0
  351. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/fidelity/report-good.html +39 -0
  352. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/fidelity/sources/S4/acronyms.json +3 -0
  353. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/fidelity/sources/S4/meta.json +9 -0
  354. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/fidelity/sources/S4/sentences.jsonl +7 -0
  355. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/fidelity/sources/S4/text.txt +7 -0
  356. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/fidelity/sources/S4.html +19 -0
  357. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/fidelity/sources/S5/acronyms.json +1 -0
  358. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/fidelity/sources/S5/meta.json +9 -0
  359. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/fidelity/sources/S5/sentences.jsonl +1 -0
  360. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/fidelity/sources/S5/text.txt +1 -0
  361. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/fidelity/sources/S9.txt +1 -0
  362. package/packages/shared-skills/skills/ulw-research/scripts/unit-algebra.mjs +101 -0
  363. package/packages/shared-skills/skills/ulw-research/scripts/unit-errors.mjs +23 -0
  364. package/packages/shared-skills/skills/ulw-research/scripts/unit-metadata.mjs +31 -0
  365. package/packages/shared-skills/skills/ulw-research/scripts/unit-pairs.mjs +72 -0
  366. package/packages/shared-skills/skills/ulw-research/scripts/unit-precision.mjs +44 -0
  367. package/packages/shared-skills/skills/ulw-research/scripts/unit-rules-shapes.mjs +64 -0
  368. package/packages/shared-skills/skills/ulw-research/scripts/unit-rules.mjs +173 -0
  369. package/packages/shared-skills/skills/ulw-research/scripts/units.mjs +4 -4
  370. package/dist/config-migration/dori-section-rename.d.ts +0 -3
package/dist/cli/index.js CHANGED
@@ -2132,7 +2132,7 @@ var package_default;
2132
2132
  var init_package = __esm(() => {
2133
2133
  package_default = {
2134
2134
  name: "oh-my-opencode",
2135
- version: "5.1.45",
2135
+ version: "5.1.47",
2136
2136
  description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
2137
2137
  main: "./dist/index.js",
2138
2138
  types: "dist/index.d.ts",
@@ -2378,18 +2378,18 @@ var init_package = __esm(() => {
2378
2378
  typescript: "^7.0.2"
2379
2379
  },
2380
2380
  optionalDependencies: {
2381
- "oh-my-opencode-darwin-arm64": "5.1.45",
2382
- "oh-my-opencode-darwin-x64": "5.1.45",
2383
- "oh-my-opencode-darwin-x64-baseline": "5.1.45",
2384
- "oh-my-opencode-linux-arm64": "5.1.45",
2385
- "oh-my-opencode-linux-arm64-musl": "5.1.45",
2386
- "oh-my-opencode-linux-x64": "5.1.45",
2387
- "oh-my-opencode-linux-x64-baseline": "5.1.45",
2388
- "oh-my-opencode-linux-x64-musl": "5.1.45",
2389
- "oh-my-opencode-linux-x64-musl-baseline": "5.1.45",
2390
- "oh-my-opencode-windows-arm64": "5.1.45",
2391
- "oh-my-opencode-windows-x64": "5.1.45",
2392
- "oh-my-opencode-windows-x64-baseline": "5.1.45"
2381
+ "oh-my-opencode-darwin-arm64": "5.1.47",
2382
+ "oh-my-opencode-darwin-x64": "5.1.47",
2383
+ "oh-my-opencode-darwin-x64-baseline": "5.1.47",
2384
+ "oh-my-opencode-linux-arm64": "5.1.47",
2385
+ "oh-my-opencode-linux-arm64-musl": "5.1.47",
2386
+ "oh-my-opencode-linux-x64": "5.1.47",
2387
+ "oh-my-opencode-linux-x64-baseline": "5.1.47",
2388
+ "oh-my-opencode-linux-x64-musl": "5.1.47",
2389
+ "oh-my-opencode-linux-x64-musl-baseline": "5.1.47",
2390
+ "oh-my-opencode-windows-arm64": "5.1.47",
2391
+ "oh-my-opencode-windows-x64": "5.1.47",
2392
+ "oh-my-opencode-windows-x64-baseline": "5.1.47"
2393
2393
  },
2394
2394
  overrides: {
2395
2395
  hono: "^4.13.8",
@@ -7163,7 +7163,7 @@ function resolveStdio(options) {
7163
7163
  return [options.stdin ?? "ignore", options.stdout ?? "pipe", options.stderr ?? "inherit"];
7164
7164
  }
7165
7165
  function createBunSpawnOptions(options) {
7166
- return { ...options, windowsHide: true };
7166
+ return { ...options, env: options.env ?? process.env, windowsHide: true };
7167
7167
  }
7168
7168
  function createNodeSpawnOptions(options, platform = process.platform) {
7169
7169
  const nodeOptions = {
@@ -10184,6 +10184,10 @@ function transformModelForProviderUsingAnthropicBehavior(provider, model) {
10184
10184
  return "k3";
10185
10185
  if (model === "kimi-k3-256k")
10186
10186
  return "k3-256k";
10187
+ if (model === "kimi-k3.1-pro")
10188
+ return "k3.1-pro";
10189
+ if (model === "kimi-k3.1-pro-highspeed")
10190
+ return "k3.1-pro-highspeed";
10187
10191
  }
10188
10192
  return model;
10189
10193
  }
@@ -76903,6 +76907,7 @@ var init_memory = __esm(() => {
76903
76907
  merge: _enum(["auto", "integration"]).default("auto"),
76904
76908
  category: string2().min(1).default("quick"),
76905
76909
  timeout_minutes: number2().int().positive().default(15),
76910
+ max_concurrent_runs: number2().int().positive().default(1),
76906
76911
  sandbox: _enum(["auto", "required", "off"]).default("auto")
76907
76912
  }).strict();
76908
76913
  OmoMemorySyncSchema = object({
@@ -76974,6 +76979,7 @@ var init_memory = __esm(() => {
76974
76979
  merge: _enum(["auto", "integration"]).optional(),
76975
76980
  category: string2().min(1).optional(),
76976
76981
  timeout_minutes: number2().int().positive().optional(),
76982
+ max_concurrent_runs: number2().int().positive().optional(),
76977
76983
  sandbox: _enum(["auto", "required", "off"]).optional()
76978
76984
  }).strict();
76979
76985
  OmoMemorySyncLayerSchema = object({
@@ -77038,7 +77044,7 @@ var init_memory = __esm(() => {
77038
77044
  OmoMemoryAgentOverridesSchema = object({
77039
77045
  enabled: boolean2().optional(),
77040
77046
  agent: string2().min(1).optional(),
77041
- reflection: OmoMemoryReflectionLayerSchema.optional(),
77047
+ reflection: OmoMemoryReflectionLayerSchema.omit({ max_concurrent_runs: true }).optional(),
77042
77048
  nudge: OmoMemoryNudgeLayerSchema.optional(),
77043
77049
  facts: OmoMemoryFactsLayerSchema.optional(),
77044
77050
  dream: OmoMemoryDreamLayerSchema.optional(),
@@ -77063,6 +77069,7 @@ var init_memory = __esm(() => {
77063
77069
  merge: "auto",
77064
77070
  category: "quick",
77065
77071
  timeout_minutes: 15,
77072
+ max_concurrent_runs: 1,
77066
77073
  sandbox: "auto"
77067
77074
  }),
77068
77075
  nudge: OmoMemoryNudgeSchema.default({ enabled: true, every_user_turns: 10 }),
@@ -77437,13 +77444,6 @@ var init_format_on_mutation = __esm(() => {
77437
77444
  }).strict();
77438
77445
  });
77439
77446
 
77440
- // packages/omo-config-core/src/schema/dori.ts
77441
- var OmoDoriSectionSchema;
77442
- var init_dori = __esm(() => {
77443
- init_zod();
77444
- OmoDoriSectionSchema = record(string2(), unknown()).describe("Chat-surface dori settings, owned and validated by a separately installed dori package. omo accepts the key and never reads it.");
77445
- });
77446
-
77447
77447
  // packages/omo-config-core/src/schema/provenance.ts
77448
77448
  var OmoProvenanceSettingsSchema;
77449
77449
  var init_provenance = __esm(() => {
@@ -77473,7 +77473,6 @@ var init_config = __esm(() => {
77473
77473
  init_team();
77474
77474
  init_telemetry();
77475
77475
  init_format_on_mutation();
77476
- init_dori();
77477
77476
  init_provenance();
77478
77477
  OmoOpenCodeHarnessConfigSchema = record(string2(), unknown());
77479
77478
  OmoDisabledSkillsSchema = array(string2());
@@ -77481,7 +77480,6 @@ var init_config = __esm(() => {
77481
77480
  OmoTypedHarnessConfigSchema = object({
77482
77481
  provenance: OmoProvenanceSettingsSchema.optional(),
77483
77482
  formatOnMutation: OmoFormatOnMutationLayerSchema.optional(),
77484
- dori: OmoDoriSectionSchema.optional(),
77485
77483
  categories: OmoCategoriesConfigSchema.optional(),
77486
77484
  agents: OmoAgentsConfigSchema.optional(),
77487
77485
  git_master: OmoGitMasterSettingsLayerSchema.optional(),
@@ -77500,7 +77498,6 @@ var init_config = __esm(() => {
77500
77498
  OmoConfigProfileSchema = object({
77501
77499
  provenance: OmoProvenanceSettingsSchema.optional(),
77502
77500
  formatOnMutation: OmoFormatOnMutationLayerSchema.optional(),
77503
- dori: OmoDoriSectionSchema.optional(),
77504
77501
  categories: OmoCategoriesConfigSchema.optional(),
77505
77502
  agents: OmoAgentsConfigSchema.optional(),
77506
77503
  git_master: OmoGitMasterSettingsLayerSchema.optional(),
@@ -77523,7 +77520,6 @@ var init_config = __esm(() => {
77523
77520
  OmoConfigSchema = object({
77524
77521
  provenance: OmoProvenanceSettingsSchema.optional(),
77525
77522
  formatOnMutation: OmoFormatOnMutationSchema.optional(),
77526
- dori: OmoDoriSectionSchema.optional(),
77527
77523
  $schema: string2().optional(),
77528
77524
  categories: OmoCategoriesConfigSchema.optional(),
77529
77525
  agents: OmoAgentsConfigSchema.optional(),
@@ -77550,7 +77546,6 @@ var init_config = __esm(() => {
77550
77546
  OmoConfigLayerSchema = object({
77551
77547
  provenance: OmoProvenanceSettingsSchema.optional(),
77552
77548
  formatOnMutation: OmoFormatOnMutationLayerSchema.optional(),
77553
- dori: OmoDoriSectionSchema.optional(),
77554
77549
  $schema: string2().optional(),
77555
77550
  categories: OmoCategoriesConfigSchema.optional(),
77556
77551
  agents: OmoAgentsConfigSchema.optional(),
@@ -77692,54 +77687,6 @@ var init_legacy_harness_names = __esm(() => {
77692
77687
  init_harness();
77693
77688
  });
77694
77689
 
77695
- // packages/omo-config-core/src/schema/legacy-dori-section.ts
77696
- function isRecord11(value) {
77697
- return value !== null && typeof value === "object" && !Array.isArray(value);
77698
- }
77699
- function migrateLegacyDoriSection(document) {
77700
- if (!isRecord11(document))
77701
- return { document: {}, diagnostics: [] };
77702
- const diagnostics = [];
77703
- const rename = (container, path) => {
77704
- const result = { ...container };
77705
- if (Object.hasOwn(container, "gateway")) {
77706
- if (Object.hasOwn(container, "dori")) {
77707
- diagnostics.push(`${[...path, "gateway"].join(".")} removed: dori is already configured`);
77708
- } else {
77709
- result.dori = container.gateway;
77710
- diagnostics.push(`${[...path, "gateway"].join(".")} renamed to dori`);
77711
- }
77712
- delete result.gateway;
77713
- }
77714
- return result;
77715
- };
77716
- const layer = (container, path) => {
77717
- const result = rename(container, path);
77718
- for (const key of HARNESS_BLOCKS) {
77719
- const block = container[key];
77720
- if (isRecord11(block))
77721
- result[key] = rename(block, [...path, key]);
77722
- }
77723
- return result;
77724
- };
77725
- const result = layer(document, []);
77726
- if (isRecord11(document.profiles)) {
77727
- const profiles = {};
77728
- for (const [name, profile] of Object.entries(document.profiles)) {
77729
- profiles[name] = isRecord11(profile) ? layer(profile, ["profiles", name]) : profile;
77730
- }
77731
- result.profiles = profiles;
77732
- }
77733
- return { document: result, diagnostics };
77734
- }
77735
- function hasLegacyGatewaySection(document) {
77736
- return migrateLegacyDoriSection(document).diagnostics.length > 0;
77737
- }
77738
- var HARNESS_BLOCKS;
77739
- var init_legacy_dori_section = __esm(() => {
77740
- HARNESS_BLOCKS = ["[opencode]", "[native]", "[senpi]", "[codex]"];
77741
- });
77742
-
77743
77690
  // packages/omo-config-core/src/schema/index.ts
77744
77691
  var init_schema = __esm(() => {
77745
77692
  init_agent();
@@ -77747,12 +77694,10 @@ var init_schema = __esm(() => {
77747
77694
  init_config();
77748
77695
  init_fallback_models();
77749
77696
  init_format_on_mutation();
77750
- init_dori();
77751
77697
  init_git_master();
77752
77698
  init_harness();
77753
77699
  init_legacy_category_names();
77754
77700
  init_legacy_harness_names();
77755
- init_legacy_dori_section();
77756
77701
  init_memory();
77757
77702
  init_model_catalog();
77758
77703
  init_model_profile();
@@ -78023,6 +77968,7 @@ function pruneInvalidConfigPaths(config, issues, validate, maxPasses = MAX_PRUNE
78023
77968
  var MAX_PRUNE_PASSES = 32;
78024
77969
 
78025
77970
  // packages/omo-config-core/src/loader/layer-validation.ts
77971
+ import { createHash as createHash2 } from "crypto";
78026
77972
  function validationDiagnostic(path, issues) {
78027
77973
  const issuePaths = issues.map((issue) => issue.path.map((segment) => String(segment)).join("."));
78028
77974
  return {
@@ -78043,9 +77989,12 @@ function invalidValueDiagnostics(path, dropped) {
78043
77989
  function unrecognizedKeyIssues(issues) {
78044
77990
  return issues.flatMap((issue) => issue.code === "unrecognized_keys" ? [{ keys: issue.keys, path: issue.path.map((segment) => String(segment)) }] : []);
78045
77991
  }
78046
- function isRecord12(value) {
77992
+ function isRecord11(value) {
78047
77993
  return typeof value === "object" && value !== null && !Array.isArray(value);
78048
77994
  }
77995
+ function isRetiredSection(key) {
77996
+ return RETIRED_SECTION_DIGESTS.has(createHash2("sha256").update(key.toLowerCase()).digest("hex"));
77997
+ }
78049
77998
  function sanitizeUnsafeKeys(value, path = []) {
78050
77999
  if (Array.isArray(value)) {
78051
78000
  const issues = [];
@@ -78056,7 +78005,7 @@ function sanitizeUnsafeKeys(value, path = []) {
78056
78005
  });
78057
78006
  return { issues, value: sanitized };
78058
78007
  }
78059
- if (!isRecord12(value))
78008
+ if (!isRecord11(value))
78060
78009
  return { issues: [], value };
78061
78010
  const issues = [];
78062
78011
  if (Object.getPrototypeOf(value) !== Object.prototype && Object.getPrototypeOf(value) !== null) {
@@ -78064,6 +78013,9 @@ function sanitizeUnsafeKeys(value, path = []) {
78064
78013
  }
78065
78014
  const sanitized = {};
78066
78015
  for (const [key, entry] of Object.entries(value)) {
78016
+ const isConfigContainer = path.length === 0 || path.length === 1 && HARNESS_BLOCKS.has(path[0] ?? "") || path.length === 2 && path[0] === "profiles" || path.length === 3 && path[0] === "profiles" && HARNESS_BLOCKS.has(path[2] ?? "");
78017
+ if (isConfigContainer && isRetiredSection(key))
78018
+ continue;
78067
78019
  if (isUnsafeObjectKey2(key)) {
78068
78020
  issues.push({ keys: [key], path });
78069
78021
  continue;
@@ -78082,13 +78034,13 @@ function containerAt(record, path) {
78082
78034
  if (!Number.isInteger(index) || index < 0 || index >= node.length)
78083
78035
  return null;
78084
78036
  node = node[index];
78085
- } else if (isRecord12(node) && Object.hasOwn(node, segment)) {
78037
+ } else if (isRecord11(node) && Object.hasOwn(node, segment)) {
78086
78038
  node = node[segment];
78087
78039
  } else {
78088
78040
  return null;
78089
78041
  }
78090
78042
  }
78091
- return isRecord12(node) ? node : null;
78043
+ return isRecord11(node) ? node : null;
78092
78044
  }
78093
78045
  function stripUnrecognizedKeys(record, issues) {
78094
78046
  const stripped = structuredClone(record);
@@ -78150,13 +78102,18 @@ function validateConfigLayer(path, data) {
78150
78102
  return rejected;
78151
78103
  return { loaded: true, diagnostics: [...diagnostics, ...invalidValueDiagnostics(path, pruned.dropped)], value: pruned.config };
78152
78104
  }
78153
- var validateLayerRecord = (record) => {
78105
+ var RETIRED_SECTION_DIGESTS, HARNESS_BLOCKS, validateLayerRecord = (record) => {
78154
78106
  const parsed = OmoConfigLayerSchema.safeParse(record);
78155
78107
  return parsed.success ? { success: true } : { success: false, issues: parsed.error.issues };
78156
78108
  };
78157
78109
  var init_layer_validation = __esm(() => {
78158
78110
  init_schema();
78159
78111
  init_merge();
78112
+ RETIRED_SECTION_DIGESTS = new Set([
78113
+ "447f75a8ebdbdb79a57f0b8cebbfba183820cf54a8119ac01449b30499e5ef0e",
78114
+ "4ea5ee68fea05586106890ded5733820bb77d919cda27bc4b8139b7cd33b8889"
78115
+ ]);
78116
+ HARNESS_BLOCKS = new Set(["[opencode]", "[native]", "[senpi]", "[codex]"]);
78160
78117
  });
78161
78118
 
78162
78119
  // packages/omo-config-core/src/internal/posix-path.ts
@@ -81716,18 +81673,6 @@ function subscriptionProviderRenamePlan(targetPath) {
81716
81673
  transform: inspect
81717
81674
  };
81718
81675
  }
81719
- function doriSectionRenamePlan(targetPath, rename) {
81720
- const inspect = (sources) => rename.transform(sources[0]?.value);
81721
- return {
81722
- id: DORI_SECTION_RENAME_MIGRATION_ID,
81723
- inspect,
81724
- mode: "replace-target",
81725
- shouldRun: rename.shouldRun,
81726
- sources: [],
81727
- targetPath,
81728
- transform: inspect
81729
- };
81730
- }
81731
81676
  function existingOmoConfigPath(directory, options) {
81732
81677
  const fileSystem = discoveryFileSystem(options);
81733
81678
  for (const fileName of ["omo.jsonc", "omo.json"]) {
@@ -81789,7 +81734,6 @@ function createLegacyConfigMigrationPlans(options) {
81789
81734
  addReasoningTarget(plan.targetPath);
81790
81735
  const inPlaceTargets = [...reasoningTargets.values()];
81791
81736
  return [
81792
- ...inPlaceTargets.map((targetPath) => doriSectionRenamePlan(targetPath, options.doriSectionRename)),
81793
81737
  ...legacyPlans,
81794
81738
  ...inPlaceTargets.map(reasoningPlan),
81795
81739
  ...inPlaceTargets.map(categoryDeepSplitPlan),
@@ -81797,7 +81741,6 @@ function createLegacyConfigMigrationPlans(options) {
81797
81741
  ...inPlaceTargets.map(subscriptionProviderRenamePlan)
81798
81742
  ];
81799
81743
  }
81800
- var DORI_SECTION_RENAME_MIGRATION_ID = "2026-10-dori-section-rename";
81801
81744
  var init_migration_plans = __esm(() => {
81802
81745
  init_discovery2();
81803
81746
  init_discovery_paths2();
@@ -81824,16 +81767,6 @@ var init_config_migration = __esm(() => {
81824
81767
  init_reasoning_unification();
81825
81768
  });
81826
81769
 
81827
- // packages/omo-opencode/src/config-migration/dori-section-rename.ts
81828
- var doriSectionRename;
81829
- var init_dori_section_rename = __esm(() => {
81830
- init_src4();
81831
- doriSectionRename = {
81832
- shouldRun: hasLegacyGatewaySection,
81833
- transform: migrateLegacyDoriSection
81834
- };
81835
- });
81836
-
81837
81770
  // packages/omo-opencode/src/startup-migration.ts
81838
81771
  import { posix as posix5 } from "path";
81839
81772
  function homeDirectory(options) {
@@ -81873,7 +81806,6 @@ function runOpenCodeStartupMigration(options) {
81873
81806
  ...options.backupTimestamp === undefined ? {} : { backupTimestamp: options.backupTimestamp },
81874
81807
  cwd: options.cwd,
81875
81808
  ...options.discoveryFileSystem === undefined ? {} : { fileSystem: options.discoveryFileSystem },
81876
- doriSectionRename,
81877
81809
  environment: options.environment ?? process.env,
81878
81810
  homeDir,
81879
81811
  pathOperations: options.pathOperations ?? posix5,
@@ -81910,7 +81842,6 @@ function runOpenCodeStartupMigration(options) {
81910
81842
  var init_startup_migration = __esm(() => {
81911
81843
  init_src4();
81912
81844
  init_config_migration();
81913
- init_dori_section_rename();
81914
81845
  });
81915
81846
 
81916
81847
  // packages/omo-opencode/src/cli/config-manager/deep-merge-record.ts
@@ -82652,7 +82583,7 @@ function shouldRetainLine(line, cutoffMs) {
82652
82583
  function parseDiagnosticLine(line) {
82653
82584
  try {
82654
82585
  const parsed = JSON.parse(line);
82655
- if (!isRecord14(parsed)) {
82586
+ if (!isRecord13(parsed)) {
82656
82587
  return null;
82657
82588
  }
82658
82589
  return parsed;
@@ -82663,7 +82594,7 @@ function parseDiagnosticLine(line) {
82663
82594
  throw error;
82664
82595
  }
82665
82596
  }
82666
- function isRecord14(value) {
82597
+ function isRecord13(value) {
82667
82598
  return value !== null && typeof value === "object" && !Array.isArray(value);
82668
82599
  }
82669
82600
  function trimToMaxBytes(lines) {
@@ -82783,13 +82714,13 @@ var init_event_id = __esm(() => {
82783
82714
  });
82784
82715
 
82785
82716
  // packages/telemetry-core/src/machine-id.ts
82786
- import { createHash as createHash5 } from "crypto";
82717
+ import { createHash as createHash6 } from "crypto";
82787
82718
  import os4 from "os";
82788
82719
  function getDefaultTelemetryOsProvider() {
82789
82720
  return os4;
82790
82721
  }
82791
82722
  function getTelemetryDistinctId(machineIdPrefix, osProvider = getDefaultTelemetryOsProvider()) {
82792
- return createHash5("sha256").update(`${machineIdPrefix}${osProvider.hostname()}`).digest("hex");
82723
+ return createHash6("sha256").update(`${machineIdPrefix}${osProvider.hostname()}`).digest("hex");
82793
82724
  }
82794
82725
  var init_machine_id = () => {};
82795
82726
 
@@ -90351,7 +90282,7 @@ function coerceBool(value) {
90351
90282
  function coerceString(value) {
90352
90283
  return typeof value == "string" ? value : undefined;
90353
90284
  }
90354
- function isRecord15(value) {
90285
+ function isRecord14(value) {
90355
90286
  return typeof value == "object" && value !== null && !Array.isArray(value);
90356
90287
  }
90357
90288
  function toRfc3339(timestamp) {
@@ -90373,7 +90304,7 @@ function relocateInto(properties, key, value) {
90373
90304
  properties[key] = value;
90374
90305
  }
90375
90306
  function buildV1Event(message) {
90376
- const sourceProperties = isRecord15(message.properties) ? message.properties : {};
90307
+ const sourceProperties = isRecord14(message.properties) ? message.properties : {};
90377
90308
  const properties = {
90378
90309
  ...sourceProperties
90379
90310
  };
@@ -92454,7 +92385,7 @@ var package_default2;
92454
92385
  var init_package2 = __esm(() => {
92455
92386
  package_default2 = {
92456
92387
  name: "@oh-my-opencode/omo-codex",
92457
- version: "5.1.45",
92388
+ version: "5.1.47",
92458
92389
  type: "module",
92459
92390
  private: true,
92460
92391
  description: "Codex harness adapter for oh-my-openagent. Vendored Codex plugin namespace (omo) + TypeScript installer + telemetry.",
@@ -94027,8 +93958,7 @@ function windowsNodeDiscoveryLines() {
94027
93958
  ' for /f "tokens=* delims= " %%N in ("!OMO_NODE_BINARY!") do set "OMO_NODE_BINARY=%%N"',
94028
93959
  ` if "!OMO_NODE_BINARY:~0,1!"=="'" set "OMO_NODE_BINARY=!OMO_NODE_BINARY:~1!"`,
94029
93960
  ` if "!OMO_NODE_BINARY:~-1!"=="'" set "OMO_NODE_BINARY=!OMO_NODE_BINARY:~0,-1!"`,
94030
- ' if "!OMO_NODE_BINARY:~0,1!"=="^"" set "OMO_NODE_BINARY=!OMO_NODE_BINARY:~1!"',
94031
- ' if "!OMO_NODE_BINARY:~-1!"=="^"" set "OMO_NODE_BINARY=!OMO_NODE_BINARY:~0,-1!"',
93961
+ ' set "OMO_NODE_BINARY=!OMO_NODE_BINARY:"=!"',
94032
93962
  ' if defined OMO_NODE_BINARY if not exist "!OMO_NODE_BINARY!" set "OMO_NODE_BINARY="',
94033
93963
  ")",
94034
93964
  'if not defined OMO_NODE_BINARY where node >nul 2>nul && set "OMO_NODE_BINARY=node"'
@@ -96624,10 +96554,10 @@ function readCatalogMultiAgentVersion(model, cachePath) {
96624
96554
  } catch {
96625
96555
  return null;
96626
96556
  }
96627
- if (!isRecord13(cache) || !Array.isArray(cache.models))
96557
+ if (!isRecord12(cache) || !Array.isArray(cache.models))
96628
96558
  return null;
96629
96559
  for (const entry of cache.models) {
96630
- if (!isRecord13(entry))
96560
+ if (!isRecord12(entry))
96631
96561
  continue;
96632
96562
  if (entry.slug !== model && entry.id !== model)
96633
96563
  continue;
@@ -96652,7 +96582,7 @@ function readRootModelCatalogPath(config) {
96652
96582
  const single = config.match(/^\s*model_catalog_json\s*=\s*'([^']+)'/m);
96653
96583
  return single?.[1] ?? null;
96654
96584
  }
96655
- function isRecord13(value) {
96585
+ function isRecord12(value) {
96656
96586
  return typeof value === "object" && value !== null && !Array.isArray(value);
96657
96587
  }
96658
96588
  function removeFeatureFlagSetting(config, featureName) {
@@ -96770,7 +96700,7 @@ function isMissingFileError(error) {
96770
96700
  }
96771
96701
 
96772
96702
  // packages/omo-codex/src/install/codex-hook-trust.ts
96773
- import { createHash as createHash2 } from "crypto";
96703
+ import { createHash as createHash3 } from "crypto";
96774
96704
  import { readFile as readFile12 } from "fs/promises";
96775
96705
  import { join as join38 } from "path";
96776
96706
  var EVENT_LABELS = new Map([
@@ -96862,7 +96792,7 @@ function commandHookHash(eventName, matcher, handler, command) {
96862
96792
  if (typeof matcher === "string")
96863
96793
  identity.matcher = matcher;
96864
96794
  const canonical = JSON.stringify(canonicalJson(identity));
96865
- return `sha256:${createHash2("sha256").update(canonical).digest("hex")}`;
96795
+ return `sha256:${createHash3("sha256").update(canonical).digest("hex")}`;
96866
96796
  }
96867
96797
  function canonicalJson(value) {
96868
96798
  if (Array.isArray(value))
@@ -97541,7 +97471,7 @@ function nodeErrorCode2(error) {
97541
97471
  }
97542
97472
 
97543
97473
  // packages/omo-codex/src/install/default-agent-role.ts
97544
- import { createHash as createHash3 } from "crypto";
97474
+ import { createHash as createHash4 } from "crypto";
97545
97475
  import { lstat as lstat9, readFile as readFile16, rm as rm10 } from "fs/promises";
97546
97476
  import { join as join43 } from "path";
97547
97477
  var REGISTRATION = { name: "default", configFile: "./agents/default.toml" };
@@ -97597,7 +97527,7 @@ async function readIfPresent(path) {
97597
97527
  }
97598
97528
  }
97599
97529
  function hash(content) {
97600
- return createHash3("sha256").update(content).digest("hex");
97530
+ return createHash4("sha256").update(content).digest("hex");
97601
97531
  }
97602
97532
 
97603
97533
  // packages/omo-codex/src/install/link-cached-plugin-agents.ts
@@ -98262,7 +98192,7 @@ function formatUnknownError(error) {
98262
98192
  }
98263
98193
 
98264
98194
  // packages/omo-codex/src/install/lsp-daemon-reaper.ts
98265
- import { createHash as createHash4 } from "crypto";
98195
+ import { createHash as createHash5 } from "crypto";
98266
98196
  import { lstat as lstat12, readFile as readFile22, readdir as readdir10, rm as rm12 } from "fs/promises";
98267
98197
  import { tmpdir as tmpdir3 } from "os";
98268
98198
  import { join as join48, posix as posix6 } from "path";
@@ -98540,7 +98470,7 @@ async function readRegularTrimmedFile(path) {
98540
98470
  return content.length > 0 ? content : null;
98541
98471
  }
98542
98472
  function shortDigest(value) {
98543
- return createHash4("sha256").update(value).digest("hex").slice(0, 16);
98473
+ return createHash5("sha256").update(value).digest("hex").slice(0, 16);
98544
98474
  }
98545
98475
  async function removeVersionDir(path) {
98546
98476
  await rm12(path, { recursive: true, force: true });
@@ -99611,7 +99541,7 @@ node "%~dp0omo" %*\r
99611
99541
  }
99612
99542
 
99613
99543
  // packages/omo-senpi/src/install/plugin-artifacts.ts
99614
- import { createHash as createHash6 } from "crypto";
99544
+ import { createHash as createHash7 } from "crypto";
99615
99545
  import { constants as constants9 } from "fs";
99616
99546
  import { access as access2, readFile as readFile29, stat as stat6 } from "fs/promises";
99617
99547
  import { dirname as dirname24, join as join63 } from "path";
@@ -99650,7 +99580,7 @@ async function readSettings(settingsPath) {
99650
99580
  throw error;
99651
99581
  }
99652
99582
  const parsed = JSON.parse(raw);
99653
- if (!isRecord16(parsed))
99583
+ if (!isRecord15(parsed))
99654
99584
  throw new Error(`${settingsPath} must contain a JSON object`);
99655
99585
  return parsed;
99656
99586
  }
@@ -99711,7 +99641,7 @@ async function nextBackupPath(settingsPath) {
99711
99641
  function timestampForBackup() {
99712
99642
  return new Date().toISOString().replace(/[-:.]/g, "");
99713
99643
  }
99714
- function isRecord16(value) {
99644
+ function isRecord15(value) {
99715
99645
  return typeof value === "object" && value !== null && !Array.isArray(value);
99716
99646
  }
99717
99647
  async function readPackageName(packagePath) {
@@ -99731,7 +99661,7 @@ async function readPackageName(packagePath) {
99731
99661
  return;
99732
99662
  throw error;
99733
99663
  }
99734
- return isRecord16(parsed) && typeof parsed.name === "string" ? parsed.name : undefined;
99664
+ return isRecord15(parsed) && typeof parsed.name === "string" ? parsed.name : undefined;
99735
99665
  }
99736
99666
  async function fileExists(path) {
99737
99667
  try {
@@ -99759,7 +99689,6 @@ var REQUIRED_PLUGIN_ARTIFACTS = [
99759
99689
  join63("extensions", "omo-memory-commands.js"),
99760
99690
  join63("extensions", "omo-session-history.js"),
99761
99691
  join63("extensions", "omo-recall-store.js"),
99762
- join63("extensions", "omo-dori-migration.js"),
99763
99692
  join63("extensions", "omo-telemetry-posthog.js"),
99764
99693
  join63("extensions", "omo-memory-sync.js"),
99765
99694
  join63("extensions", "loro_wasm_bg.wasm"),
@@ -99856,7 +99785,7 @@ async function verifyAstGrepRuntimeIntegrity(pluginPath, platform) {
99856
99785
  }
99857
99786
  let actualSha256;
99858
99787
  try {
99859
- actualSha256 = createHash6("sha256").update(await readFile29(runtimeEntry)).digest("hex");
99788
+ actualSha256 = createHash7("sha256").update(await readFile29(runtimeEntry)).digest("hex");
99860
99789
  } catch (error) {
99861
99790
  throw astGrepIntegrityError(runtimeEntry, `runtime hash could not be computed: ${messageOf(error)}`);
99862
99791
  }
@@ -99869,7 +99798,7 @@ async function verifyAstGrepRuntimeIntegrity(pluginPath, platform) {
99869
99798
  }
99870
99799
  }
99871
99800
  function isAstGrepRuntimeManifest(value) {
99872
- if (!isRecord16(value))
99801
+ if (!isRecord15(value))
99873
99802
  return false;
99874
99803
  return typeof value.sha256 === "string" && /^[a-f0-9]{64}$/.test(value.sha256) && typeof value.mode === "number" && Number.isInteger(value.mode) && typeof value.stagedAtUtc === "string" && !Number.isNaN(Date.parse(value.stagedAtUtc));
99875
99804
  }
@@ -107967,13 +107896,11 @@ async function checkModels() {
107967
107896
 
107968
107897
  // packages/omo-opencode/src/cli/doctor/checks/legacy-config-leftovers.ts
107969
107898
  init_config_migration();
107970
- init_dori_section_rename();
107971
107899
  import { posix as posix12, win32 as win329 } from "path";
107972
107900
  function findLegacyConfigLeftovers(options) {
107973
107901
  const pathOperations = options.pathOperations ?? (process.platform === "win32" ? win329 : posix12);
107974
107902
  const paths = createLegacyConfigMigrationPlans({
107975
107903
  cwd: options.cwd,
107976
- doriSectionRename,
107977
107904
  environment: options.environment ?? process.env,
107978
107905
  homeDir: options.homeDir,
107979
107906
  pathOperations,
@@ -108172,14 +108099,14 @@ var CANONICAL_REPLACEMENT = new Map([
108172
108099
  var MIGRATE_SUFFIX = ", or run: oh-my-openagent config migrate";
108173
108100
  var TUNING_CONTAINERS = new Set(["agents", "categories", "models"]);
108174
108101
  var PASSTHROUGH_CONTAINERS = new Set(["provider_options", "providerOptions"]);
108175
- function isRecord17(value) {
108102
+ function isRecord16(value) {
108176
108103
  return value !== null && typeof value === "object" && !Array.isArray(value);
108177
108104
  }
108178
108105
  function isHarnessBlock(key) {
108179
108106
  return key.startsWith("[") && key.endsWith("]");
108180
108107
  }
108181
108108
  function collectIssues(configPath, value, prefix, fixSuffix) {
108182
- if (!isRecord17(value))
108109
+ if (!isRecord16(value))
108183
108110
  return [];
108184
108111
  const issues = [];
108185
108112
  for (const [key, child] of Object.entries(value)) {
@@ -108195,7 +108122,7 @@ function collectIssues(configPath, value, prefix, fixSuffix) {
108195
108122
  });
108196
108123
  continue;
108197
108124
  }
108198
- if (!isRecord17(child))
108125
+ if (!isRecord16(child))
108199
108126
  continue;
108200
108127
  if (PASSTHROUGH_CONTAINERS.has(key))
108201
108128
  continue;
@@ -108214,7 +108141,7 @@ function collectIssues(configPath, value, prefix, fixSuffix) {
108214
108141
  return issues;
108215
108142
  }
108216
108143
  function migrateFixSuffix(parsed) {
108217
- if (isRecord17(parsed) && hasMigrationMarker(parsed, REASONING_UNIFICATION_MIGRATION_ID))
108144
+ if (isRecord16(parsed) && hasMigrationMarker(parsed, REASONING_UNIFICATION_MIGRATION_ID))
108218
108145
  return "";
108219
108146
  return MIGRATE_SUFFIX;
108220
108147
  }
@@ -109079,10 +109006,6 @@ var package_default3 = {
109079
109006
  types: "./src/cli/service-auth/index.ts",
109080
109007
  import: "./src/cli/service-auth/index.ts"
109081
109008
  },
109082
- "./config-migration/dori-section-rename": {
109083
- types: "./src/config-migration/dori-section-rename.ts",
109084
- import: "./src/config-migration/dori-section-rename.ts"
109085
- },
109086
109009
  "./binary-downloader": {
109087
109010
  types: "./src/shared/binary-downloader.ts",
109088
109011
  import: "./src/shared/binary-downloader.ts"
@@ -109513,12 +109436,12 @@ async function auditBundleTargets(pluginRoot) {
109513
109436
  let referencedCount = 0;
109514
109437
  for (const manifestPath of await findManifestPaths(pluginRoot, ".mcp.json")) {
109515
109438
  const manifest = await readJson2(manifestPath);
109516
- if (manifest === null || !isRecord19(manifest["mcpServers"]))
109439
+ if (manifest === null || !isRecord18(manifest["mcpServers"]))
109517
109440
  continue;
109518
109441
  const manifestRoot = dirname39(manifestPath);
109519
109442
  const isRootManifest = resolve28(manifestRoot) === resolve28(pluginRoot);
109520
109443
  for (const server of Object.values(manifest["mcpServers"])) {
109521
- if (!isRecord19(server) || !Array.isArray(server["args"]))
109444
+ if (!isRecord18(server) || !Array.isArray(server["args"]))
109522
109445
  continue;
109523
109446
  for (const arg of server["args"]) {
109524
109447
  if (typeof arg !== "string" || !isPluginRuntimePathArg(arg))
@@ -109604,7 +109527,7 @@ function collectHookCommands(value, commands) {
109604
109527
  collectHookCommands(item, commands);
109605
109528
  return;
109606
109529
  }
109607
- if (!isRecord19(value))
109530
+ if (!isRecord18(value))
109608
109531
  return;
109609
109532
  if (value["type"] === "command") {
109610
109533
  if (typeof value["command"] === "string")
@@ -109659,7 +109582,7 @@ function parseDegradedEntries(value) {
109659
109582
  return [];
109660
109583
  const entries = [];
109661
109584
  for (const item of value) {
109662
- if (!isRecord19(item))
109585
+ if (!isRecord18(item))
109663
109586
  continue;
109664
109587
  if (typeof item["component"] !== "string" || typeof item["reason"] !== "string")
109665
109588
  continue;
@@ -109693,7 +109616,7 @@ function degradedDetailLines(entries) {
109693
109616
  async function readJson2(path) {
109694
109617
  try {
109695
109618
  const parsed = JSON.parse(await readFile31(path, "utf8"));
109696
- return isRecord19(parsed) ? parsed : null;
109619
+ return isRecord18(parsed) ? parsed : null;
109697
109620
  } catch (error) {
109698
109621
  if (error instanceof Error)
109699
109622
  return null;
@@ -109714,7 +109637,7 @@ function normalizeRelative(root, target) {
109714
109637
  function normalizePathSeparators(path) {
109715
109638
  return path.split("\\").join("/");
109716
109639
  }
109717
- function isRecord19(value) {
109640
+ function isRecord18(value) {
109718
109641
  return typeof value === "object" && value !== null && !Array.isArray(value);
109719
109642
  }
109720
109643
 
@@ -110259,7 +110182,7 @@ Doctor failed unexpectedly: ${message}`];
110259
110182
  init_commander();
110260
110183
 
110261
110184
  // packages/mcp-client-core/src/mcp-oauth/storage.ts
110262
- import { createHash as createHash7 } from "crypto";
110185
+ import { createHash as createHash8 } from "crypto";
110263
110186
  import {
110264
110187
  chmodSync as chmodSync5,
110265
110188
  existsSync as existsSync65,
@@ -110354,7 +110277,7 @@ function getMcpOauthStorageDir() {
110354
110277
  return join101(getOpenCodeCliConfigDir(), STORAGE_DIR_NAME);
110355
110278
  }
110356
110279
  function getMcpOauthServerHash(serverHost, resource) {
110357
- return createHash7("sha256").update(buildKey(serverHost, resource)).digest("hex").slice(0, 32);
110280
+ return createHash8("sha256").update(buildKey(serverHost, resource)).digest("hex").slice(0, 32);
110358
110281
  }
110359
110282
  function getMcpOauthStoragePath(serverHost, resource) {
110360
110283
  return join101(getMcpOauthStorageDir(), `${getMcpOauthServerHash(serverHost, resource)}.json`);
@@ -110728,13 +110651,13 @@ async function findAvailablePort2(startPort = DEFAULT_PORT) {
110728
110651
 
110729
110652
  // packages/mcp-client-core/src/mcp-oauth/oauth-authorization-flow.ts
110730
110653
  import { spawn as spawn4 } from "child_process";
110731
- import { createHash as createHash8, randomBytes as randomBytes2 } from "crypto";
110654
+ import { createHash as createHash9, randomBytes as randomBytes2 } from "crypto";
110732
110655
  import { createServer as createServer2 } from "http";
110733
110656
  function generateCodeVerifier() {
110734
110657
  return randomBytes2(32).toString("base64url");
110735
110658
  }
110736
110659
  function generateCodeChallenge(verifier) {
110737
- return createHash8("sha256").update(verifier).digest("base64url");
110660
+ return createHash9("sha256").update(verifier).digest("base64url");
110738
110661
  }
110739
110662
  function buildAuthorizationUrl(authorizationEndpoint, options) {
110740
110663
  const url = new URL(authorizationEndpoint);
@@ -112096,7 +112019,7 @@ async function loginDevice(session, options) {
112096
112019
  }
112097
112020
 
112098
112021
  // packages/omo-opencode/src/cli/service-auth/keystore.ts
112099
- import { createHash as createHash9 } from "crypto";
112022
+ import { createHash as createHash10 } from "crypto";
112100
112023
 
112101
112024
  // packages/omo-opencode/src/cli/service-auth/secret-service-lock.ts
112102
112025
  import { spawn as spawn5 } from "child_process";
@@ -112145,6 +112068,8 @@ class CredentialStoreError extends SignInError {
112145
112068
 
112146
112069
  class KeychainLockedError extends CredentialStoreError {
112147
112070
  }
112071
+ class InvalidCredentialState extends SignInError {
112072
+ }
112148
112073
  var LOCKED = /-25308|errSecInteractionNotAllowed|interaction is not allowed|locked collection/i;
112149
112074
  var UNLOCKED_REUSE_MS = 30000;
112150
112075
  var fallbackNoticed = false;
@@ -112157,15 +112082,18 @@ var stderrNoticeOncePerProcess = (message) => {
112157
112082
  };
112158
112083
  var isLocked = (error) => error instanceof Error && (LOCKED.test(error.message) || LOCKED.test(String(error.code ?? "")));
112159
112084
  function credentialId(api) {
112160
- return createHash9("sha256").update(serviceOrigin(api)).digest("hex");
112085
+ return createHash10("sha256").update(serviceOrigin(api)).digest("hex");
112161
112086
  }
112162
112087
  function createCredentialStore(api, secrets = typeof Bun === "undefined" ? null : Bun.secrets, platform = process.platform, lockProbe = probeSecretServiceLock, notice = stderrNoticeOncePerProcess) {
112088
+ return createSealedStore(api, "omo-cli", credentialSchema, secrets, platform, lockProbe, notice);
112089
+ }
112090
+ function createSealedStore(api, namespace, schema, secrets = typeof Bun === "undefined" ? null : Bun.secrets, platform = process.platform, lockProbe = probeSecretServiceLock, notice = stderrNoticeOncePerProcess) {
112163
112091
  if (!secrets)
112164
112092
  throw new SignInError("OmO sign-in needs Bun 1.4 or newer with OS credential storage. No file fallback is available.");
112165
112093
  const platformName = platform === "darwin" ? "macOS Keychain" : platform === "linux" ? "Linux Secret Service (libsecret and an unlocked keyring)" : platform === "win32" ? "Windows Credential Manager" : null;
112166
112094
  if (platformName === null)
112167
112095
  throw new SignInError("This platform has no supported OS credential store.");
112168
- const key = { service: "omo-cli", name: credentialId(api) };
112096
+ const key = { service: namespace, name: credentialId(api) };
112169
112097
  const unavailable = (error) => isLocked(error) ? new KeychainLockedError(`${platformName} is locked. Unlock it, then try again. Credentials are never saved to a file.`) : new CredentialStoreError(`Cannot access ${platformName}. Unlock or enable the OS credential store and try again. Credentials are never saved to a file.`);
112170
112098
  let unlockedUntil = 0;
112171
112099
  let noticed = false;
@@ -112196,15 +112124,15 @@ function createCredentialStore(api, secrets = typeof Bun === "undefined" ? null
112196
112124
  if (value === null)
112197
112125
  return null;
112198
112126
  try {
112199
- return credentialSchema.parse(JSON.parse(value));
112127
+ return schema.parse(JSON.parse(value));
112200
112128
  } catch {
112201
- throw new SignInError("Stored sign-in data is invalid. Run omo logout, then omo login.");
112129
+ throw new InvalidCredentialState("Stored sign-in data is invalid. Run omo logout, then omo login.");
112202
112130
  }
112203
112131
  },
112204
112132
  async write(value) {
112205
112133
  await assertUsable();
112206
112134
  try {
112207
- await secrets.set({ ...key, value: JSON.stringify(credentialSchema.parse(value)) });
112135
+ await secrets.set({ ...key, value: JSON.stringify(schema.parse(value)) });
112208
112136
  } catch (error) {
112209
112137
  throw unavailable(error);
112210
112138
  }
@@ -112221,7 +112149,7 @@ function createCredentialStore(api, secrets = typeof Bun === "undefined" ? null
112221
112149
  }
112222
112150
 
112223
112151
  // packages/omo-opencode/src/cli/service-auth/loopback.ts
112224
- import { createHash as createHash10, randomBytes as randomBytes3, timingSafeEqual } from "crypto";
112152
+ import { createHash as createHash11, randomBytes as randomBytes3, timingSafeEqual } from "crypto";
112225
112153
  import { createServer as createServer3 } from "http";
112226
112154
  class BrowserUnavailable extends SignInError {
112227
112155
  }
@@ -112267,7 +112195,7 @@ async function authorize(options) {
112267
112195
  const url = new URL(serviceOrigin(options.accounts));
112268
112196
  url.search = new URLSearchParams({
112269
112197
  redirect_uri: `${origin}/callback`,
112270
- code_challenge: createHash10("sha256").update(verifier).digest("base64url"),
112198
+ code_challenge: createHash11("sha256").update(verifier).digest("base64url"),
112271
112199
  code_challenge_method: "S256",
112272
112200
  state
112273
112201
  }).toString();
@@ -112456,7 +112384,7 @@ async function publishLockRecord(lockPath, record) {
112456
112384
  }
112457
112385
 
112458
112386
  // packages/team-core/src/team-state-store/lock-reclaim.ts
112459
- import { createHash as createHash11 } from "crypto";
112387
+ import { createHash as createHash12 } from "crypto";
112460
112388
  import { unlink as unlink3 } from "fs/promises";
112461
112389
  var RECLAIM_UNLINK_ATTEMPTS = 3;
112462
112390
  var RECLAIM_UNLINK_RETRY_MS = 25;
@@ -112466,7 +112394,7 @@ function delay2(ms) {
112466
112394
  });
112467
112395
  }
112468
112396
  function reclaimGuardPath(lockPath, record) {
112469
- return `${lockPath}.reclaim-${createHash11("sha256").update(record).digest("hex").slice(0, 16)}`;
112397
+ return `${lockPath}.reclaim-${createHash12("sha256").update(record).digest("hex").slice(0, 16)}`;
112470
112398
  }
112471
112399
  async function unlinkWithRetry(path, deps) {
112472
112400
  const wait = deps.delay ?? delay2;