lazycodex-ai 5.1.44 → 5.1.46

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (412) hide show
  1. package/README.de.md +0 -5
  2. package/README.es.md +0 -5
  3. package/README.fr.md +0 -5
  4. package/README.it.md +0 -5
  5. package/README.ja.md +0 -5
  6. package/README.ko.md +0 -5
  7. package/README.md +4 -5
  8. package/README.pt-br.md +0 -5
  9. package/README.ru.md +0 -6
  10. package/README.zh-cn.md +0 -5
  11. package/dist/cli/index.js +865 -413
  12. package/dist/cli/service-auth/keystore.d.ts +4 -2
  13. package/dist/cli-node/index.js +865 -413
  14. package/docs/reference/web-terminal-visual-qa.md +8 -0
  15. package/package.json +1 -1
  16. package/packages/lsp-daemon/dist/cli.js +7 -7
  17. package/packages/lsp-daemon/dist/client.js +7 -7
  18. package/packages/lsp-daemon/dist/index.js +7 -7
  19. package/packages/lsp-daemon/package.json +3 -3
  20. package/packages/lsp-tools-mcp/dist/cli.js +7 -7
  21. package/packages/lsp-tools-mcp/dist/mcp.js +7 -7
  22. package/packages/lsp-tools-mcp/dist/tools.js +4 -4
  23. package/packages/lsp-tools-mcp/package.json +3 -3
  24. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  25. package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +77 -26
  26. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  27. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  28. package/packages/omo-codex/plugin/components/bootstrap/src/hook.ts +1 -1
  29. package/packages/omo-codex/plugin/components/comment-checker/biome.json +1 -21
  30. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  31. package/packages/omo-codex/plugin/components/comment-checker/package.json +4 -4
  32. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  33. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  34. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/biome.json +1 -21
  35. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  36. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +4 -4
  37. package/packages/omo-codex/plugin/components/lsp/biome.json +1 -21
  38. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +3 -3
  39. package/packages/omo-codex/plugin/components/lsp/dist/cli.js +4 -4
  40. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  41. package/packages/omo-codex/plugin/components/lsp/package.json +4 -4
  42. package/packages/omo-codex/plugin/components/lsp/scripts/build-runtime.mjs +0 -1
  43. package/packages/omo-codex/plugin/components/lsp/test/codex-hook-not-installed.test.ts +1 -1
  44. package/packages/omo-codex/plugin/components/rules/biome.json +1 -21
  45. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  46. package/packages/omo-codex/plugin/components/rules/package.json +4 -4
  47. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  48. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  49. package/packages/omo-codex/plugin/components/telemetry/biome.json +1 -21
  50. package/packages/omo-codex/plugin/components/telemetry/dist/cli.js +90 -1
  51. package/packages/omo-codex/plugin/components/telemetry/dist/posthog.js +91 -1
  52. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  53. package/packages/omo-codex/plugin/components/telemetry/package.json +4 -4
  54. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-gate-reviewer.toml +2 -2
  55. package/packages/omo-codex/plugin/components/ultrawork/biome.json +1 -21
  56. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  57. package/packages/omo-codex/plugin/components/ultrawork/package.json +4 -4
  58. package/packages/omo-codex/plugin/components/ulw-execute-continuation/biome.json +1 -21
  59. package/packages/omo-codex/plugin/components/ulw-execute-continuation/directive.md +1 -1
  60. package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +1 -1
  61. package/packages/omo-codex/plugin/components/ulw-execute-continuation/package.json +4 -4
  62. package/packages/omo-codex/plugin/components/ulw-loop/biome.json +1 -21
  63. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint.js +1 -1
  64. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +7 -7
  65. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-instruction.js +5 -5
  66. package/packages/omo-codex/plugin/components/ulw-loop/dist/stop-resume-hook.js +1 -1
  67. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +5 -5
  68. package/packages/omo-codex/plugin/components/ulw-loop/package.json +4 -4
  69. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint.ts +1 -1
  70. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-instruction.ts +5 -5
  71. package/packages/omo-codex/plugin/components/ulw-loop/src/stop-resume-hook.ts +1 -1
  72. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/commit-mutations.mjs +2 -0
  73. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  74. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  75. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  76. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  77. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  78. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  79. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  80. package/packages/omo-codex/plugin/hooks/post-tool-use-recording-spawn-admission.json +1 -1
  81. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  82. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  83. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  84. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  85. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  86. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  87. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  88. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +1 -1
  89. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  90. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  91. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  92. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  93. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  94. package/packages/omo-codex/plugin/package-lock.json +12 -12
  95. package/packages/omo-codex/plugin/package.json +1 -1
  96. package/packages/omo-codex/plugin/scripts/sync-skills.mjs +14 -9
  97. package/packages/omo-codex/plugin/skills/ast-grep/AGENTS.md +1 -1
  98. package/packages/omo-codex/plugin/skills/browser/SKILL.md +21 -22
  99. package/packages/omo-codex/plugin/skills/browser/references/commands.md +2 -9
  100. package/packages/omo-codex/plugin/skills/browser/references/install.md +1 -2
  101. package/packages/omo-codex/plugin/skills/browser/runtime/omowright/manifest.json +1 -1
  102. package/packages/omo-codex/plugin/skills/browser/scripts/browser-doctor.mjs +2 -2
  103. package/packages/omo-codex/plugin/skills/browser/scripts/browser-engine-guard.mjs +63 -487
  104. package/packages/omo-codex/plugin/skills/browser/scripts/browser-install.mjs +1 -1
  105. package/packages/omo-codex/plugin/skills/browser/scripts/omowright.mjs +1 -10
  106. package/packages/omo-codex/plugin/skills/frontend/ATTRIBUTION.md +2 -2
  107. package/packages/omo-codex/plugin/skills/frontend/SKILL.md +79 -118
  108. package/packages/omo-codex/plugin/skills/frontend/references/design/README.md +75 -224
  109. package/packages/omo-codex/plugin/skills/frontend/references/design/stylegallery.md +32 -27
  110. package/packages/omo-codex/plugin/skills/frontend/references/perfection/README.md +2 -2
  111. package/packages/omo-codex/plugin/skills/frontend/scripts/perfection/check-accent-stripes.ts +8 -24
  112. package/packages/omo-codex/plugin/skills/frontend/scripts/perfection/check-draft-guard.ts +40 -0
  113. package/packages/omo-codex/plugin/skills/frontend/scripts/perfection/collect-files.ts +53 -0
  114. package/packages/omo-codex/plugin/skills/frontend/scripts/perfection/draft-guard/findings.ts +16 -0
  115. package/packages/omo-codex/plugin/skills/frontend/scripts/perfection/draft-guard/lint.ts +38 -0
  116. package/packages/omo-codex/plugin/skills/frontend/scripts/perfection/draft-guard/rules.ts +69 -0
  117. package/packages/omo-codex/plugin/skills/frontend/scripts/perfection/draft-guard/text-nodes.ts +121 -0
  118. package/packages/omo-codex/plugin/skills/frontend/scripts/perfection/fixtures/draft-guard/negative/attr-lookalikes.tsx +10 -0
  119. package/packages/omo-codex/plugin/skills/frontend/scripts/perfection/fixtures/draft-guard/negative/bound-values.tsx +12 -0
  120. package/packages/omo-codex/plugin/skills/frontend/scripts/perfection/fixtures/draft-guard/negative/const-generics.tsx +3 -0
  121. package/packages/omo-codex/plugin/skills/frontend/scripts/perfection/fixtures/draft-guard/negative/generics.tsx +7 -0
  122. package/packages/omo-codex/plugin/skills/frontend/scripts/perfection/fixtures/draft-guard/negative/measured-stats.html +6 -0
  123. package/packages/omo-codex/plugin/skills/frontend/scripts/perfection/fixtures/draft-guard/negative/plain-copy.html +9 -0
  124. package/packages/omo-codex/plugin/skills/frontend/scripts/perfection/fixtures/draft-guard/negative/state-copy.html +11 -0
  125. package/packages/omo-codex/plugin/skills/frontend/scripts/perfection/fixtures/draft-guard/positive/attribute-edges.html +7 -0
  126. package/packages/omo-codex/plugin/skills/frontend/scripts/perfection/fixtures/draft-guard/positive/components.tsx +16 -0
  127. package/packages/omo-codex/plugin/skills/frontend/scripts/perfection/fixtures/draft-guard/positive/decorative-badge.vue +7 -0
  128. package/packages/omo-codex/plugin/skills/frontend/scripts/perfection/fixtures/draft-guard/positive/emoji-icons.tsx +9 -0
  129. package/packages/omo-codex/plugin/skills/frontend/scripts/perfection/fixtures/draft-guard/positive/jsx-edges.tsx +1 -0
  130. package/packages/omo-codex/plugin/skills/frontend/scripts/perfection/fixtures/draft-guard/positive/promo-copy.html +6 -0
  131. package/packages/omo-codex/plugin/skills/frontend/scripts/perfection/fixtures/draft-guard/positive/promo-copy.tsx +8 -0
  132. package/packages/omo-codex/plugin/skills/frontend/scripts/perfection/fixtures/draft-guard/positive/vanity-stats.html +5 -0
  133. package/packages/omo-codex/plugin/skills/init-deep/SKILL.md +1 -1
  134. package/packages/omo-codex/plugin/skills/programming/SKILL.md +10 -7
  135. package/packages/omo-codex/plugin/skills/programming/references/typescript/README.md +10 -7
  136. package/packages/omo-codex/plugin/skills/programming/references/typescript/bootstrap.md +9 -23
  137. package/packages/omo-codex/plugin/skills/programming/references/typescript/oxc-lint.md +130 -0
  138. package/packages/omo-codex/plugin/skills/programming/references/typescript/tsconfig-strict.md +6 -62
  139. package/packages/omo-codex/plugin/skills/programming/scripts/typescript/check-no-excuse-rules.ts +12 -12
  140. package/packages/omo-codex/plugin/skills/programming/scripts/typescript/new-project.ts +20 -81
  141. package/packages/omo-codex/plugin/skills/programming/scripts/typescript/oxc/.oxfmtrc.json +9 -0
  142. package/packages/omo-codex/plugin/skills/programming/scripts/typescript/oxc/.oxlintrc.json +46 -0
  143. package/packages/omo-codex/plugin/skills/programming/scripts/typescript/oxc/lint/oxlint-plugin/LICENSE +21 -0
  144. package/packages/omo-codex/plugin/skills/programming/scripts/typescript/oxc/lint/oxlint-plugin/index.js +10 -0
  145. package/packages/omo-codex/plugin/skills/programming/scripts/typescript/oxc/lint/oxlint-plugin/no-em-dash-copy.js +28 -0
  146. package/packages/omo-codex/plugin/skills/programming/scripts/typescript/oxc/lint/oxlint-plugin/require-suppression-reason.js +62 -0
  147. package/packages/omo-codex/plugin/skills/programming/scripts/typescript/oxc/tsconfig.json +29 -0
  148. package/packages/omo-codex/plugin/skills/refactor/SKILL.md +14 -14
  149. package/packages/omo-codex/plugin/skills/remove-ai-slops/SKILL.md +1 -1
  150. package/packages/omo-codex/plugin/skills/review-work/SKILL.md +2 -2
  151. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/AGENTS.md +1 -1
  152. package/packages/omo-codex/plugin/skills/ulw-execute/SKILL.md +2 -2
  153. package/packages/omo-codex/plugin/skills/ulw-loop/SKILL.md +1 -1
  154. package/packages/omo-codex/plugin/skills/ulw-research/AGENTS.md +21 -3
  155. package/packages/omo-codex/plugin/skills/ulw-research/SKILL.md +37 -12
  156. package/packages/omo-codex/plugin/skills/ulw-research/references/deliverable-phase.md +77 -16
  157. package/packages/omo-codex/plugin/skills/ulw-research/references/fact-ledger-grammar.md +134 -0
  158. package/packages/omo-codex/plugin/skills/ulw-research/references/fact-ledger.md +95 -0
  159. package/packages/omo-codex/plugin/skills/ulw-research/references/fidelity-claim-kinds.md +19 -0
  160. package/packages/omo-codex/plugin/skills/ulw-research/references/report-gates.md +68 -3
  161. package/packages/omo-codex/plugin/skills/ulw-research/references/report-visualization.md +2 -0
  162. package/packages/omo-codex/plugin/skills/ulw-research/references/unit-rules.md +157 -0
  163. package/packages/omo-codex/plugin/skills/ulw-research/scripts/claim-kinds.mjs +116 -0
  164. package/packages/omo-codex/plugin/skills/ulw-research/scripts/claims-index.mjs +125 -0
  165. package/packages/omo-codex/plugin/skills/ulw-research/scripts/cli-support.mjs +19 -5
  166. package/packages/omo-codex/plugin/skills/ulw-research/scripts/contracts.mjs +89 -3
  167. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fact-commands-meaning.mjs +191 -0
  168. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fact-commands-verify.mjs +164 -0
  169. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fact-commands.mjs +239 -0
  170. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fact-derive.mjs +66 -0
  171. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fact-expr.mjs +108 -0
  172. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fact-fill.mjs +194 -0
  173. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fact-ledger-kinds.mjs +250 -0
  174. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fact-ledger-schema.mjs +221 -0
  175. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fact-ledger.mjs +123 -0
  176. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fact-locate.mjs +231 -0
  177. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fact-pairs.mjs +187 -0
  178. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fact-recompute.mjs +89 -0
  179. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fidelity-binding.mjs +130 -0
  180. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fidelity-brief.mjs +150 -0
  181. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fidelity-claims.mjs +89 -0
  182. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fidelity-lexicon.mjs +145 -0
  183. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fidelity-records.mjs +163 -0
  184. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fidelity-state.mjs +64 -0
  185. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fidelity-trace.mjs +85 -0
  186. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fidelity-values.mjs +229 -0
  187. package/packages/omo-codex/plugin/skills/ulw-research/scripts/gates-fidelity.mjs +113 -0
  188. package/packages/omo-codex/plugin/skills/ulw-research/scripts/gates-static.mjs +29 -9
  189. package/packages/omo-codex/plugin/skills/ulw-research/scripts/gates-structure.mjs +1 -1
  190. package/packages/omo-codex/plugin/skills/ulw-research/scripts/gates-text.mjs +1 -27
  191. package/packages/omo-codex/plugin/skills/ulw-research/scripts/html-lite.mjs +2 -2
  192. package/packages/omo-codex/plugin/skills/ulw-research/scripts/html-markup.mjs +182 -0
  193. package/packages/omo-codex/plugin/skills/ulw-research/scripts/lexicon.mjs +47 -0
  194. package/packages/omo-codex/plugin/skills/ulw-research/scripts/md-lite.mjs +193 -0
  195. package/packages/omo-codex/plugin/skills/ulw-research/scripts/meaning-check.mjs +196 -0
  196. package/packages/omo-codex/plugin/skills/ulw-research/scripts/numerals.mjs +226 -0
  197. package/packages/omo-codex/plugin/skills/ulw-research/scripts/outcome.mjs +8 -8
  198. package/packages/omo-codex/plugin/skills/ulw-research/scripts/particles-ko.mjs +108 -0
  199. package/packages/omo-codex/plugin/skills/ulw-research/scripts/placeholder.mjs +184 -0
  200. package/packages/omo-codex/plugin/skills/ulw-research/scripts/polish-apply.mjs +115 -0
  201. package/packages/omo-codex/plugin/skills/ulw-research/scripts/polish-diff.mjs +31 -0
  202. package/packages/omo-codex/plugin/skills/ulw-research/scripts/polish-project.mjs +125 -0
  203. package/packages/omo-codex/plugin/skills/ulw-research/scripts/polish-rules.mjs +170 -0
  204. package/packages/omo-codex/plugin/skills/ulw-research/scripts/rational.mjs +139 -0
  205. package/packages/omo-codex/plugin/skills/ulw-research/scripts/report-tools-commands.mjs +21 -10
  206. package/packages/omo-codex/plugin/skills/ulw-research/scripts/report-tools.mjs +15 -0
  207. package/packages/omo-codex/plugin/skills/ulw-research/scripts/sentence-split.mjs +77 -0
  208. package/packages/omo-codex/plugin/skills/ulw-research/scripts/source-commands.mjs +140 -0
  209. package/packages/omo-codex/plugin/skills/ulw-research/scripts/source-snapshot.mjs +176 -0
  210. package/packages/omo-codex/plugin/skills/ulw-research/scripts/text-normalize.mjs +82 -0
  211. package/packages/omo-codex/plugin/skills/ulw-research/scripts/text-similarity.mjs +28 -0
  212. package/packages/omo-codex/plugin/skills/ulw-research/scripts/unit-algebra.mjs +101 -0
  213. package/packages/omo-codex/plugin/skills/ulw-research/scripts/unit-errors.mjs +23 -0
  214. package/packages/omo-codex/plugin/skills/ulw-research/scripts/unit-metadata.mjs +31 -0
  215. package/packages/omo-codex/plugin/skills/ulw-research/scripts/unit-pairs.mjs +72 -0
  216. package/packages/omo-codex/plugin/skills/ulw-research/scripts/unit-precision.mjs +44 -0
  217. package/packages/omo-codex/plugin/skills/ulw-research/scripts/unit-rules-shapes.mjs +64 -0
  218. package/packages/omo-codex/plugin/skills/ulw-research/scripts/unit-rules.mjs +173 -0
  219. package/packages/omo-codex/plugin/skills/ulw-research/scripts/units.mjs +105 -0
  220. package/packages/omo-codex/plugin/skills/visual-qa/SKILL.md +71 -64
  221. package/packages/omo-codex/plugin/test/component-bundled-cli.test.mjs +4 -1
  222. package/packages/omo-codex/plugin/test/sync-skills-codex-compatibility.test.mjs +19 -0
  223. package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +12 -8
  224. package/packages/omo-codex/scripts/install-dist/install-local.mjs +169 -30
  225. package/packages/shared-skills/skills/ast-grep/AGENTS.md +1 -1
  226. package/packages/shared-skills/skills/browser/SKILL.md +21 -22
  227. package/packages/shared-skills/skills/browser/references/commands.md +2 -9
  228. package/packages/shared-skills/skills/browser/references/install.md +1 -2
  229. package/packages/shared-skills/skills/browser/runtime/omowright/manifest.json +1 -1
  230. package/packages/shared-skills/skills/browser/scripts/browser-doctor.mjs +2 -2
  231. package/packages/shared-skills/skills/browser/scripts/browser-engine-guard.mjs +63 -487
  232. package/packages/shared-skills/skills/browser/scripts/browser-install.mjs +1 -1
  233. package/packages/shared-skills/skills/browser/scripts/omowright.mjs +1 -10
  234. package/packages/shared-skills/skills/frontend/ATTRIBUTION.md +2 -2
  235. package/packages/shared-skills/skills/frontend/SKILL.md +79 -118
  236. package/packages/shared-skills/skills/frontend/references/design/README.md +75 -224
  237. package/packages/shared-skills/skills/frontend/references/design/stylegallery.md +32 -27
  238. package/packages/shared-skills/skills/frontend/references/perfection/README.md +2 -2
  239. package/packages/shared-skills/skills/frontend/scripts/perfection/check-accent-stripes.ts +8 -24
  240. package/packages/shared-skills/skills/frontend/scripts/perfection/check-draft-guard.test.ts +101 -0
  241. package/packages/shared-skills/skills/frontend/scripts/perfection/check-draft-guard.ts +40 -0
  242. package/packages/shared-skills/skills/frontend/scripts/perfection/collect-files.test.ts +50 -0
  243. package/packages/shared-skills/skills/frontend/scripts/perfection/collect-files.ts +53 -0
  244. package/packages/shared-skills/skills/frontend/scripts/perfection/draft-guard/findings.ts +16 -0
  245. package/packages/shared-skills/skills/frontend/scripts/perfection/draft-guard/lint.ts +38 -0
  246. package/packages/shared-skills/skills/frontend/scripts/perfection/draft-guard/rules.ts +69 -0
  247. package/packages/shared-skills/skills/frontend/scripts/perfection/draft-guard/text-nodes.ts +121 -0
  248. package/packages/shared-skills/skills/frontend/scripts/perfection/fixtures/draft-guard/negative/attr-lookalikes.tsx +10 -0
  249. package/packages/shared-skills/skills/frontend/scripts/perfection/fixtures/draft-guard/negative/bound-values.tsx +12 -0
  250. package/packages/shared-skills/skills/frontend/scripts/perfection/fixtures/draft-guard/negative/const-generics.tsx +3 -0
  251. package/packages/shared-skills/skills/frontend/scripts/perfection/fixtures/draft-guard/negative/generics.tsx +7 -0
  252. package/packages/shared-skills/skills/frontend/scripts/perfection/fixtures/draft-guard/negative/measured-stats.html +6 -0
  253. package/packages/shared-skills/skills/frontend/scripts/perfection/fixtures/draft-guard/negative/plain-copy.html +9 -0
  254. package/packages/shared-skills/skills/frontend/scripts/perfection/fixtures/draft-guard/negative/state-copy.html +11 -0
  255. package/packages/shared-skills/skills/frontend/scripts/perfection/fixtures/draft-guard/positive/attribute-edges.html +7 -0
  256. package/packages/shared-skills/skills/frontend/scripts/perfection/fixtures/draft-guard/positive/components.tsx +16 -0
  257. package/packages/shared-skills/skills/frontend/scripts/perfection/fixtures/draft-guard/positive/decorative-badge.vue +7 -0
  258. package/packages/shared-skills/skills/frontend/scripts/perfection/fixtures/draft-guard/positive/emoji-icons.tsx +9 -0
  259. package/packages/shared-skills/skills/frontend/scripts/perfection/fixtures/draft-guard/positive/jsx-edges.tsx +1 -0
  260. package/packages/shared-skills/skills/frontend/scripts/perfection/fixtures/draft-guard/positive/promo-copy.html +6 -0
  261. package/packages/shared-skills/skills/frontend/scripts/perfection/fixtures/draft-guard/positive/promo-copy.tsx +8 -0
  262. package/packages/shared-skills/skills/frontend/scripts/perfection/fixtures/draft-guard/positive/vanity-stats.html +5 -0
  263. package/packages/shared-skills/skills/programming/SKILL.md +10 -7
  264. package/packages/shared-skills/skills/programming/references/typescript/README.md +10 -7
  265. package/packages/shared-skills/skills/programming/references/typescript/bootstrap.md +9 -23
  266. package/packages/shared-skills/skills/programming/references/typescript/oxc-lint.md +130 -0
  267. package/packages/shared-skills/skills/programming/references/typescript/tsconfig-strict.md +6 -62
  268. package/packages/shared-skills/skills/programming/scripts/typescript/check-no-excuse-rules.ts +12 -12
  269. package/packages/shared-skills/skills/programming/scripts/typescript/new-project.test.ts +162 -0
  270. package/packages/shared-skills/skills/programming/scripts/typescript/new-project.ts +20 -81
  271. package/packages/shared-skills/skills/programming/scripts/typescript/oxc/.oxfmtrc.json +9 -0
  272. package/packages/shared-skills/skills/programming/scripts/typescript/oxc/.oxlintrc.json +46 -0
  273. package/packages/shared-skills/skills/programming/scripts/typescript/oxc/lint/oxlint-plugin/LICENSE +21 -0
  274. package/packages/shared-skills/skills/programming/scripts/typescript/oxc/lint/oxlint-plugin/index.js +10 -0
  275. package/packages/shared-skills/skills/programming/scripts/typescript/oxc/lint/oxlint-plugin/no-em-dash-copy.js +28 -0
  276. package/packages/shared-skills/skills/programming/scripts/typescript/oxc/lint/oxlint-plugin/require-suppression-reason.js +62 -0
  277. package/packages/shared-skills/skills/programming/scripts/typescript/oxc/tsconfig.json +29 -0
  278. package/packages/shared-skills/skills/refactor/SKILL.md +13 -13
  279. package/packages/shared-skills/skills/ultimate-browsing/engine/AGENTS.md +1 -1
  280. package/packages/shared-skills/skills/ulw-execute/SKILL.md +1 -1
  281. package/packages/shared-skills/skills/ulw-research/AGENTS.md +21 -3
  282. package/packages/shared-skills/skills/ulw-research/SKILL.md +37 -12
  283. package/packages/shared-skills/skills/ulw-research/references/deliverable-phase.md +77 -16
  284. package/packages/shared-skills/skills/ulw-research/references/fact-ledger-grammar.md +134 -0
  285. package/packages/shared-skills/skills/ulw-research/references/fact-ledger.md +95 -0
  286. package/packages/shared-skills/skills/ulw-research/references/fidelity-claim-kinds.md +19 -0
  287. package/packages/shared-skills/skills/ulw-research/references/report-gates.md +68 -3
  288. package/packages/shared-skills/skills/ulw-research/references/report-visualization.md +2 -0
  289. package/packages/shared-skills/skills/ulw-research/references/unit-rules.md +157 -0
  290. package/packages/shared-skills/skills/ulw-research/scripts/claim-kinds.mjs +116 -0
  291. package/packages/shared-skills/skills/ulw-research/scripts/claim-kinds.test.ts +193 -0
  292. package/packages/shared-skills/skills/ulw-research/scripts/claims-index.mjs +125 -0
  293. package/packages/shared-skills/skills/ulw-research/scripts/claims-index.test.ts +149 -0
  294. package/packages/shared-skills/skills/ulw-research/scripts/cli-support.mjs +19 -5
  295. package/packages/shared-skills/skills/ulw-research/scripts/cli-support.test.ts +13 -2
  296. package/packages/shared-skills/skills/ulw-research/scripts/contracts.mjs +89 -3
  297. package/packages/shared-skills/skills/ulw-research/scripts/contracts.test.ts +100 -12
  298. package/packages/shared-skills/skills/ulw-research/scripts/copy-returns.test.ts +183 -0
  299. package/packages/shared-skills/skills/ulw-research/scripts/delivery-barrier.test.ts +245 -0
  300. package/packages/shared-skills/skills/ulw-research/scripts/fact-commands-meaning.mjs +191 -0
  301. package/packages/shared-skills/skills/ulw-research/scripts/fact-commands-verify.mjs +164 -0
  302. package/packages/shared-skills/skills/ulw-research/scripts/fact-commands.mjs +239 -0
  303. package/packages/shared-skills/skills/ulw-research/scripts/fact-derive.mjs +66 -0
  304. package/packages/shared-skills/skills/ulw-research/scripts/fact-derive.test.ts +375 -0
  305. package/packages/shared-skills/skills/ulw-research/scripts/fact-expr.mjs +108 -0
  306. package/packages/shared-skills/skills/ulw-research/scripts/fact-fill.mjs +194 -0
  307. package/packages/shared-skills/skills/ulw-research/scripts/fact-fill.test.ts +221 -0
  308. package/packages/shared-skills/skills/ulw-research/scripts/fact-ledger-grammar.test.ts +197 -0
  309. package/packages/shared-skills/skills/ulw-research/scripts/fact-ledger-kinds.mjs +250 -0
  310. package/packages/shared-skills/skills/ulw-research/scripts/fact-ledger-kinds.test.ts +156 -0
  311. package/packages/shared-skills/skills/ulw-research/scripts/fact-ledger-legacy.test.ts +160 -0
  312. package/packages/shared-skills/skills/ulw-research/scripts/fact-ledger-schema.mjs +221 -0
  313. package/packages/shared-skills/skills/ulw-research/scripts/fact-ledger-schema.test.ts +43 -0
  314. package/packages/shared-skills/skills/ulw-research/scripts/fact-ledger.mjs +123 -0
  315. package/packages/shared-skills/skills/ulw-research/scripts/fact-ledger.test.ts +254 -0
  316. package/packages/shared-skills/skills/ulw-research/scripts/fact-locate.mjs +231 -0
  317. package/packages/shared-skills/skills/ulw-research/scripts/fact-locate.test.ts +118 -0
  318. package/packages/shared-skills/skills/ulw-research/scripts/fact-pairs.mjs +187 -0
  319. package/packages/shared-skills/skills/ulw-research/scripts/fact-pairs.test.ts +167 -0
  320. package/packages/shared-skills/skills/ulw-research/scripts/fact-recompute.mjs +89 -0
  321. package/packages/shared-skills/skills/ulw-research/scripts/fact-unit-dimensions.test.ts +409 -0
  322. package/packages/shared-skills/skills/ulw-research/scripts/fact-unit-rules.test.ts +388 -0
  323. package/packages/shared-skills/skills/ulw-research/scripts/fidelity-binding.mjs +130 -0
  324. package/packages/shared-skills/skills/ulw-research/scripts/fidelity-binding.test.ts +81 -0
  325. package/packages/shared-skills/skills/ulw-research/scripts/fidelity-brief.mjs +150 -0
  326. package/packages/shared-skills/skills/ulw-research/scripts/fidelity-brief.test.ts +179 -0
  327. package/packages/shared-skills/skills/ulw-research/scripts/fidelity-claims.mjs +89 -0
  328. package/packages/shared-skills/skills/ulw-research/scripts/fidelity-lexicon.mjs +145 -0
  329. package/packages/shared-skills/skills/ulw-research/scripts/fidelity-lexicon.test.ts +117 -0
  330. package/packages/shared-skills/skills/ulw-research/scripts/fidelity-records.mjs +163 -0
  331. package/packages/shared-skills/skills/ulw-research/scripts/fidelity-state.mjs +64 -0
  332. package/packages/shared-skills/skills/ulw-research/scripts/fidelity-state.test.ts +46 -0
  333. package/packages/shared-skills/skills/ulw-research/scripts/fidelity-trace.mjs +85 -0
  334. package/packages/shared-skills/skills/ulw-research/scripts/fidelity-trace.test.ts +58 -0
  335. package/packages/shared-skills/skills/ulw-research/scripts/fidelity-values.mjs +229 -0
  336. package/packages/shared-skills/skills/ulw-research/scripts/fidelity-values.test.ts +270 -0
  337. package/packages/shared-skills/skills/ulw-research/scripts/gates-context.test.ts +64 -0
  338. package/packages/shared-skills/skills/ulw-research/scripts/gates-fidelity.mjs +113 -0
  339. package/packages/shared-skills/skills/ulw-research/scripts/gates-fidelity.test.ts +73 -0
  340. package/packages/shared-skills/skills/ulw-research/scripts/gates-static.mjs +29 -9
  341. package/packages/shared-skills/skills/ulw-research/scripts/gates-structure.mjs +1 -1
  342. package/packages/shared-skills/skills/ulw-research/scripts/gates-text.mjs +1 -27
  343. package/packages/shared-skills/skills/ulw-research/scripts/html-lite.mjs +2 -2
  344. package/packages/shared-skills/skills/ulw-research/scripts/html-markup.mjs +182 -0
  345. package/packages/shared-skills/skills/ulw-research/scripts/lexicon.mjs +47 -0
  346. package/packages/shared-skills/skills/ulw-research/scripts/lexicon.test.ts +57 -0
  347. package/packages/shared-skills/skills/ulw-research/scripts/md-lite.mjs +193 -0
  348. package/packages/shared-skills/skills/ulw-research/scripts/md-lite.test.ts +271 -0
  349. package/packages/shared-skills/skills/ulw-research/scripts/meaning-check.mjs +196 -0
  350. package/packages/shared-skills/skills/ulw-research/scripts/meaning-check.test.ts +228 -0
  351. package/packages/shared-skills/skills/ulw-research/scripts/numerals.mjs +226 -0
  352. package/packages/shared-skills/skills/ulw-research/scripts/numerals.test.ts +120 -0
  353. package/packages/shared-skills/skills/ulw-research/scripts/outcome.mjs +8 -8
  354. package/packages/shared-skills/skills/ulw-research/scripts/outcome.test.ts +29 -0
  355. package/packages/shared-skills/skills/ulw-research/scripts/particles-ko.mjs +108 -0
  356. package/packages/shared-skills/skills/ulw-research/scripts/particles-ko.test.ts +86 -0
  357. package/packages/shared-skills/skills/ulw-research/scripts/placeholder.mjs +184 -0
  358. package/packages/shared-skills/skills/ulw-research/scripts/placeholder.test.ts +77 -0
  359. package/packages/shared-skills/skills/ulw-research/scripts/polish-apply.mjs +115 -0
  360. package/packages/shared-skills/skills/ulw-research/scripts/polish-apply.test.ts +363 -0
  361. package/packages/shared-skills/skills/ulw-research/scripts/polish-diff.mjs +31 -0
  362. package/packages/shared-skills/skills/ulw-research/scripts/polish-diff.test.ts +168 -0
  363. package/packages/shared-skills/skills/ulw-research/scripts/polish-markup.test.ts +187 -0
  364. package/packages/shared-skills/skills/ulw-research/scripts/polish-project.mjs +125 -0
  365. package/packages/shared-skills/skills/ulw-research/scripts/polish-rules.mjs +170 -0
  366. package/packages/shared-skills/skills/ulw-research/scripts/rational.mjs +139 -0
  367. package/packages/shared-skills/skills/ulw-research/scripts/rational.test.ts +46 -0
  368. package/packages/shared-skills/skills/ulw-research/scripts/report-tools-commands.mjs +21 -10
  369. package/packages/shared-skills/skills/ulw-research/scripts/report-tools.mjs +15 -0
  370. package/packages/shared-skills/skills/ulw-research/scripts/report-tools.test.ts +458 -2
  371. package/packages/shared-skills/skills/ulw-research/scripts/sentence-split.mjs +77 -0
  372. package/packages/shared-skills/skills/ulw-research/scripts/sentence-split.test.ts +109 -0
  373. package/packages/shared-skills/skills/ulw-research/scripts/source-commands.mjs +140 -0
  374. package/packages/shared-skills/skills/ulw-research/scripts/source-snapshot.mjs +176 -0
  375. package/packages/shared-skills/skills/ulw-research/scripts/source-snapshot.test.ts +113 -0
  376. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/fidelity/assets/share.csv +3 -0
  377. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/fidelity/claim-graph.md +13 -0
  378. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/fidelity/gen-legacy-dev.mjs +89 -0
  379. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/fidelity/ledger-basic.json +223 -0
  380. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/fidelity/ledger-legacy-dev.json +859 -0
  381. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/fidelity/ledger-verify.json +420 -0
  382. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/fidelity/report-bad.html +19 -0
  383. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/fidelity/report-good.html +39 -0
  384. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/fidelity/sources/S4/acronyms.json +3 -0
  385. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/fidelity/sources/S4/meta.json +9 -0
  386. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/fidelity/sources/S4/sentences.jsonl +7 -0
  387. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/fidelity/sources/S4/text.txt +7 -0
  388. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/fidelity/sources/S4.html +19 -0
  389. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/fidelity/sources/S5/acronyms.json +1 -0
  390. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/fidelity/sources/S5/meta.json +9 -0
  391. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/fidelity/sources/S5/sentences.jsonl +1 -0
  392. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/fidelity/sources/S5/text.txt +1 -0
  393. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/fidelity/sources/S9.txt +1 -0
  394. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/fidelity-brief-locked.md +17 -0
  395. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/fidelity-brief-pending.md +17 -0
  396. package/packages/shared-skills/skills/ulw-research/scripts/text-normalize.mjs +82 -0
  397. package/packages/shared-skills/skills/ulw-research/scripts/text-normalize.test.ts +73 -0
  398. package/packages/shared-skills/skills/ulw-research/scripts/text-similarity.mjs +28 -0
  399. package/packages/shared-skills/skills/ulw-research/scripts/text-similarity.test.ts +38 -0
  400. package/packages/shared-skills/skills/ulw-research/scripts/unit-algebra.mjs +101 -0
  401. package/packages/shared-skills/skills/ulw-research/scripts/unit-errors.mjs +23 -0
  402. package/packages/shared-skills/skills/ulw-research/scripts/unit-metadata.mjs +31 -0
  403. package/packages/shared-skills/skills/ulw-research/scripts/unit-pairs.mjs +72 -0
  404. package/packages/shared-skills/skills/ulw-research/scripts/unit-precision.mjs +44 -0
  405. package/packages/shared-skills/skills/ulw-research/scripts/unit-rules-shapes.mjs +64 -0
  406. package/packages/shared-skills/skills/ulw-research/scripts/unit-rules.mjs +173 -0
  407. package/packages/shared-skills/skills/ulw-research/scripts/units.mjs +105 -0
  408. package/packages/shared-skills/skills/ulw-research/scripts/units.test.ts +83 -0
  409. package/packages/shared-skills/skills/visual-qa/SKILL.md +70 -63
  410. package/packages/shared-skills/skills/visual-qa/scripts/skill-doc-fields.test.ts +34 -0
  411. package/script/qa/web-terminal-visual-qa.mjs +6 -2
  412. package/script/qa/xterm-live-terminal.mjs +26 -3
@@ -16,6 +16,7 @@ import {
16
16
  ulwExecuteOriginalCompletion,
17
17
  ulwExecuteOriginalHardRule,
18
18
  } from "../scripts/sync-skills.mjs";
19
+ import { removeCodexSkillOverlays } from "./sync-skills-test-support.mjs";
19
20
 
20
21
  const frontmatter = "---\nname: fixture-sentinel\n---\n\n";
21
22
  const opencodeExample = "# SENTINEL_SECTION\ntask(SENTINEL_INPUT)\n";
@@ -177,3 +178,21 @@ test("#given the shared ulw-research skill #when the Codex overlay runs #then th
177
178
  // then
178
179
  assert.notEqual(actual, shared, "the ulw-research overlay anchor no longer matches the shared SKILL.md");
179
180
  });
181
+
182
+ test("#given the ulw-research delivery gates are renumbered #when the Codex overlay runs #then only the proofread gate is dropped", async () => {
183
+ // given
184
+ const shared = await readFile(join(sharedSkillsRoot, "ulw-research", "SKILL.md"), "utf8");
185
+ const renumbered = shared
186
+ .replace(/^(\d+)(\. \*\*Proofread gate:)/m, (_, numeral, rest) => `${Number(numeral) + 1}${rest}`)
187
+ .replace(/^(\d+)(\. \*\*Visual QA\.\*\*)/m, (_, numeral, rest) => `${Number(numeral) + 1}${rest}`);
188
+ assert.notEqual(renumbered, shared, "the renumbering fixture must change the delivery gates");
189
+
190
+ // when
191
+ const actual = applyCodexSkillOverlays("ulw-research", renumbered);
192
+
193
+ // then: generated Codex edition contract (no `task(category="writing")` gate; tool-based gates kept)
194
+ assert.doesNotMatch(actual, /\*\*Proofread gate:/);
195
+ assert.match(actual, /\*\*Fidelity gate\.\*\*/);
196
+ assert.match(actual, /inspect the pixels\.\n\n/);
197
+ assert.equal(removeCodexSkillOverlays("ulw-research", actual), renumbered);
198
+ });
@@ -58,8 +58,8 @@ export const canonicalUltraworkDirectiveRelativePath = join(
58
58
  );
59
59
 
60
60
  const codexCompatibilityEndMarkers = [
61
- "Omit optional keys you do not set. Never send `items: []`, `message: \"\"`, `model: \"\"`, `reasoning_effort: \"\"`, or `service_tier: \"\"` — Codex rejects them (`Items can't be empty`, `reasoning_effort must not be empty`).\n\nFor work likely to exceed one wait cycle, require the child to send `WORKING: <task> - <current phase>` before long passes and `BLOCKED: <reason>` only when progress stops. A `multi_agent_v1.wait_agent` timeout only means no new mailbox update arrived; back off between waits (double the timeout up to ~5 minutes) instead of spinning short cycles. Treat a running child as alive. Fallback only when the child is completed without the deliverable, ack-only after followup, explicitly `BLOCKED:`, or no longer running.\n\n",
62
- "On the v2 surface `agent_type` may be ABSENT from the spawn schema (verified 2026-07-11: only `fork_turns`/`message`/`task_name`) — when absent, omit it and describe the role inside `message`; installed role TOMLs cannot be selected on that surface. If a code block below conflicts with this section, this section wins. `fork_context` is rejected on `multi_agent_v2` (`fork_context is not supported in MultiAgentV2; use fork_turns instead`).\n\n",
61
+ "Omit optional keys you do not set. Never send `items: []`, `message: \"\"`, `model: \"\"`, `reasoning_effort: \"\"`, or `service_tier: \"\"`. Codex rejects them (`Items can't be empty`, `reasoning_effort must not be empty`).\n\nFor work likely to exceed one wait cycle, require the child to send `WORKING: <task> - <current phase>` before long passes and `BLOCKED: <reason>` only when progress stops. A `multi_agent_v1.wait_agent` timeout only means no new mailbox update arrived; back off between waits (double the timeout up to ~5 minutes) instead of spinning short cycles. Treat a running child as alive. Fallback only when the child is completed without the deliverable, ack-only after followup, explicitly `BLOCKED:`, or no longer running.\n\n",
62
+ "On the v2 surface `agent_type` may be ABSENT from the spawn schema (verified 2026-07-11: only `fork_turns`/`message`/`task_name`). When absent, omit it and describe the role inside `message`; installed role TOMLs cannot be selected on that surface. If a code block below conflicts with this section, this section wins. `fork_context` is rejected on `multi_agent_v2` (`fork_context is not supported in MultiAgentV2; use fork_turns instead`).\n\n",
63
63
  "For work likely to exceed one wait cycle, require the child to send `WORKING: <task> - <current phase>` before long passes and `BLOCKED: <reason>` only when progress stops. A `multi_agent_v1.wait_agent` timeout only means no new mailbox update arrived. Treat a running child as alive. Fallback only when the child is completed without the deliverable, ack-only after followup, explicitly `BLOCKED:`, or no longer running.\n\n",
64
64
  "On `multi_agent_v2` sessions the same `agent_type` applies (the OMO installer exposes it) with `fork_turns` instead of `fork_context`. If a code block below conflicts with this section, this section wins.\n\n",
65
65
  "Role-specific behavior must be described in a self-contained `message`. Use `fork_context: false` to start the child with only the initial prompt (no parent history); use `fork_context: true` only when full parent history is truly required. Include any required conversation context, files, diffs, constraints, and requested skill names directly in the spawned agent's `message`. If a code block below conflicts with this section, this section wins.\n\n",
@@ -101,7 +101,7 @@ const ulwExecuteCodexCompletion = `When all top-level checkboxes in \`## TODOs\`
101
101
  const ulwExecuteOriginalHardRule = `- No production change before the tests covering that behavior were read and a bug's reproduction captured; existing tests are green on the unchanged code first, and one that contradicts the intent is a FINDING, never edited green.
102
102
  - No \`--dry-run\` as completion evidence.
103
103
  - No tests-only completion claim. A Manual-QA artifact is required.
104
- - **NO DIRECT IMPLEMENTATION BY THE ORCHESTRATOR.** Root NEVER edits product files, writes tests, or runs QA itself — a spawned worker does.
104
+ - **NO DIRECT IMPLEMENTATION BY THE ORCHESTRATOR.** Root NEVER edits product files, writes tests, or runs QA itself; a spawned worker does.
105
105
  - No completion claim while an applicable ultraqa adversarial class was never probed. Each applicable class needs a captured observable result; each skipped class needs a one-line not-applicable reason in the ledger.
106
106
  - No implementation, review, or merge in the main checkout; every phase works in its task-owned worktree.
107
107
  - No unprefixed session ids in Boulder state. Sessions are always recorded as \`codex:<session_id>\`.
@@ -110,7 +110,7 @@ const ulwExecuteOriginalHardRule = `- No production change before the tests cove
110
110
  const ulwExecuteCodexHardRule = `- No production change before the tests covering that behavior were read and a bug's reproduction captured; existing tests are green on the unchanged code first, and one that contradicts the intent is a FINDING, never edited green.
111
111
  - No \`--dry-run\` as completion evidence.
112
112
  - No tests-only completion claim. A Manual-QA artifact is required.
113
- - **NO DIRECT IMPLEMENTATION BY THE ORCHESTRATOR.** Root NEVER edits product files, writes tests, or runs QA itself — a spawned worker does.
113
+ - **NO DIRECT IMPLEMENTATION BY THE ORCHESTRATOR.** Root NEVER edits product files, writes tests, or runs QA itself; a spawned worker does.
114
114
  - No completion claim while an applicable ultraqa adversarial class was never probed. Each applicable class needs a captured observable result; each skipped class needs a one-line not-applicable reason in the ledger.
115
115
  - No implementation, review, or merge in the main checkout; every phase works in a task-owned worktree.
116
116
  - No unprefixed session ids in Boulder state. Sessions are always recorded as \`codex:<session_id>\`.
@@ -140,7 +140,7 @@ compaction, re-read that record and require the exact lane/SHA pair. Memory,
140
140
  chat history, or an unstamped report is not coverage; a new commit requires
141
141
  fresh applicable lane records.
142
142
 
143
- A rejecting lane must name its blockers inline in its final message — each
143
+ A rejecting lane must name its blockers inline in its final message; each
144
144
  blocker cites the violated goal criterion or requirement plus an evidence
145
145
  pointer. A bare REJECT/FAIL token without findings is not a verdict; treat it
146
146
  as an inconclusive lane (one bounded respawn, then record it inconclusive with
@@ -158,12 +158,16 @@ prefixes when identity is needed.
158
158
  `;
159
159
  const reviewWorkCodexGatePattern = new RegExp(reviewWorkCodexGate.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"));
160
160
 
161
- const ulwResearchOriginalDeliveryGates = "Reading the source markup is not visual QA; inspect the pixels.\n4. **Proofread gate \u2014 `task(category=\"writing\", ...)`.** Hand the final text to a dedicated `writing` worker whose only job is language: grammar, spelling, punctuation, terminology consistency, and whether the prose reads NATIVELY in the report's own language. It proofreads only and never composes. It returns a defect list; fix every item and re-run the gate on the delta. Deliver only on a clean pass \u2014 this gate runs BEFORE the first delivery, not after the user finds the typo.";
162
- const ulwResearchCodexDeliveryGate = "Reading the source markup is not visual QA; inspect the pixels.";
161
+ const ulwResearchProofreadGate = "**Proofread gate: `task(category=\"writing\", ...)`.** Hand the final text to a dedicated `writing` worker whose only job is language: grammar, spelling, punctuation, terminology consistency, and whether the prose reads NATIVELY in the report's own language. It proofreads only and never composes. It returns a defect list; fix every item and re-run the gate on the delta. Deliver only on a clean pass. This gate runs BEFORE the first delivery, not after the user finds the typo.";
162
+ // The shared skill numbers the proofread gate right after the Visual QA item the Codex edition ends on.
163
+ const ulwResearchVisualQaItemPattern = /^(\d+)\. \*\*Visual QA\.\*\*[^\n]*inspect the pixels\.$/m;
163
164
 
164
165
  export function removeCodexSkillOverlays(skillName, content) {
165
166
  if (skillName === "ulw-research") {
166
- return content.replace(ulwResearchCodexDeliveryGate, ulwResearchOriginalDeliveryGates);
167
+ return content.replace(
168
+ ulwResearchVisualQaItemPattern,
169
+ (item, numeral) => `${item}\n${Number(numeral) + 1}. ${ulwResearchProofreadGate}`,
170
+ );
167
171
  }
168
172
  if (skillName === "ulw-execute") {
169
173
  return content
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- // omo-codex-install:86887beec4a71033b5338b0fe4a2a1d1ef7f01a24b155e45a4794e95ec97c925:c92f287be053aec70fa39eb4a642909b8ee5721383fc3987f69b4e0ca55ae568
2
+ // omo-codex-install:1d099ec7e89e45d9a749b3119fafbd06726b589bba756c5a72ea56b563a2b9ea:0766ee449be1f634fa5ed2f988eb9b3473567708af6ab5bb8a716ce419ce101f
3
3
  var __esm = (fn, res, err) => () => {
4
4
  if (fn)
5
5
  try {
@@ -453,13 +453,13 @@ var init_event_id = __esm(() => {
453
453
  });
454
454
 
455
455
  // packages/telemetry-core/src/machine-id.ts
456
- import { createHash as createHash4 } from "node:crypto";
456
+ import { createHash as createHash5 } from "node:crypto";
457
457
  import os2 from "node:os";
458
458
  function getDefaultTelemetryOsProvider() {
459
459
  return os2;
460
460
  }
461
461
  function getTelemetryDistinctId(machineIdPrefix, osProvider = getDefaultTelemetryOsProvider()) {
462
- return createHash4("sha256").update(`${machineIdPrefix}${osProvider.hostname()}`).digest("hex");
462
+ return createHash5("sha256").update(`${machineIdPrefix}${osProvider.hostname()}`).digest("hex");
463
463
  }
464
464
  var init_machine_id = () => {};
465
465
 
@@ -9982,20 +9982,98 @@ var init_index_node = __esm(() => {
9982
9982
  };
9983
9983
  });
9984
9984
 
9985
+ // packages/telemetry-core/src/telemetry-delivery-error.ts
9986
+ var PERMANENT_STATUSES, TelemetryDeliveryError;
9987
+ var init_telemetry_delivery_error = __esm(() => {
9988
+ PERMANENT_STATUSES = new Set([400, 413]);
9989
+ TelemetryDeliveryError = class TelemetryDeliveryError extends Error {
9990
+ permanent;
9991
+ status;
9992
+ constructor(status, cause) {
9993
+ super(status === undefined ? "telemetry event was not delivered (no response)" : `telemetry event was rejected with HTTP ${status}`, { cause });
9994
+ this.name = "TelemetryDeliveryError";
9995
+ this.status = status;
9996
+ this.permanent = status !== undefined && PERMANENT_STATUSES.has(status);
9997
+ }
9998
+ };
9999
+ });
10000
+
10001
+ // packages/telemetry-core/src/posthog-immediate-send.ts
10002
+ function createImmediateSender(apiKey, options, PostHogClient) {
10003
+ const baseFetch = options.fetch ?? ((url, init) => fetch(url, init));
10004
+ let current;
10005
+ const trackedFetch = async (url, init) => {
10006
+ const attempt = current;
10007
+ try {
10008
+ const response = await baseFetch(url, init);
10009
+ if (attempt !== undefined)
10010
+ attempt.status = response.status;
10011
+ return response;
10012
+ } catch (error) {
10013
+ if (attempt !== undefined)
10014
+ attempt.error = error;
10015
+ throw error;
10016
+ }
10017
+ };
10018
+ const client = new PostHogClient(apiKey, { ...options, fetch: trackedFetch, fetchRetryCount: 0 });
10019
+ let queue = Promise.resolve();
10020
+ const sendOne = async (message) => {
10021
+ const attempt = {};
10022
+ current = attempt;
10023
+ try {
10024
+ await client.captureImmediate(message);
10025
+ } finally {
10026
+ current = undefined;
10027
+ }
10028
+ const { status } = attempt;
10029
+ if (status === undefined || status < 200 || status >= 300)
10030
+ throw new TelemetryDeliveryError(status, attempt.error);
10031
+ };
10032
+ return {
10033
+ send(message) {
10034
+ const result = queue.then(() => sendOne(message));
10035
+ queue = result.catch(() => {
10036
+ return;
10037
+ });
10038
+ return result;
10039
+ },
10040
+ async shutdown() {
10041
+ await client.shutdown();
10042
+ }
10043
+ };
10044
+ }
10045
+ var init_posthog_immediate_send = __esm(() => {
10046
+ init_telemetry_delivery_error();
10047
+ });
10048
+
9985
10049
  // packages/telemetry-core/src/posthog-transport.ts
9986
10050
  class PostHogTelemetryTransport {
9987
10051
  #client;
10052
+ #apiKey;
10053
+ #options;
10054
+ #immediate;
9988
10055
  constructor(apiKey, options) {
9989
10056
  this.#client = new PostHog(apiKey, options);
10057
+ this.#apiKey = apiKey;
10058
+ this.#options = options;
9990
10059
  }
9991
10060
  capture(message) {
9992
10061
  this.#client.capture(message);
9993
10062
  }
10063
+ captureImmediate(message) {
10064
+ this.#immediate ??= Promise.resolve().then(() => (init_posthog_immediate_send(), {})).then(({}) => createImmediateSender(this.#apiKey, this.#options, PostHog)).catch((error) => {
10065
+ this.#immediate = undefined;
10066
+ throw error;
10067
+ });
10068
+ return this.#immediate.then((sender) => sender.send(message));
10069
+ }
9994
10070
  async flush() {
9995
10071
  await this.#client.flush();
9996
10072
  }
9997
10073
  async shutdown() {
9998
- await this.#client.shutdown();
10074
+ await Promise.all([this.#client.shutdown(), this.#immediate?.then((sender) => sender.shutdown(), () => {
10075
+ return;
10076
+ })]);
9999
10077
  }
10000
10078
  }
10001
10079
  function createDefaultPostHogTransport(apiKey, options) {
@@ -10020,6 +10098,12 @@ var init_posthog_client = __esm(() => {
10020
10098
  // packages/telemetry-core/src/record-daily-active.ts
10021
10099
  var init_record_daily_active = () => {};
10022
10100
 
10101
+ // packages/telemetry-core/src/turn-trace-bridge.ts
10102
+ var REGISTRY;
10103
+ var init_turn_trace_bridge = __esm(() => {
10104
+ REGISTRY = Symbol.for("omo.telemetry.turn-traceparent.v1");
10105
+ });
10106
+
10023
10107
  // packages/telemetry-core/src/index.ts
10024
10108
  var init_src = __esm(() => {
10025
10109
  init_activity_state();
@@ -10031,6 +10115,7 @@ var init_src = __esm(() => {
10031
10115
  init_machine_id();
10032
10116
  init_posthog_client();
10033
10117
  init_record_daily_active();
10118
+ init_turn_trace_bridge();
10034
10119
  });
10035
10120
 
10036
10121
  // packages/omo-codex/package.json
@@ -10038,7 +10123,7 @@ var package_default;
10038
10123
  var init_package = __esm(() => {
10039
10124
  package_default = {
10040
10125
  name: "@oh-my-opencode/omo-codex",
10041
- version: "5.1.44",
10126
+ version: "5.1.46",
10042
10127
  type: "module",
10043
10128
  private: true,
10044
10129
  description: "Codex harness adapter for oh-my-openagent. Vendored Codex plugin namespace (omo) + TypeScript installer + telemetry.",
@@ -10069,6 +10154,7 @@ var init_package = __esm(() => {
10069
10154
  "sync:skills": "node plugin/scripts/sync-skills.mjs"
10070
10155
  },
10071
10156
  dependencies: {
10157
+ "@oh-my-opencode/model-core": "workspace:*",
10072
10158
  "@oh-my-opencode/shared-skills": "workspace:*",
10073
10159
  "@oh-my-opencode/utils": "workspace:*"
10074
10160
  },
@@ -12917,9 +13003,27 @@ function isRootSetting(line, key) {
12917
13003
  // packages/omo-codex/src/install/codex-model-catalog.ts
12918
13004
  import { readFile as readFile10 } from "node:fs/promises";
12919
13005
  import { join as join15 } from "node:path";
13006
+
13007
+ // packages/model-core/src/latest-models.ts
13008
+ var LATEST_MODEL_BY_FAMILY = {
13009
+ claudeOpus: "claude-opus-5-5",
13010
+ claudeSonnet: "claude-sonnet-5-5",
13011
+ claudeHaiku: "claude-haiku-5-5",
13012
+ claudeFable: "claude-fable-5-1",
13013
+ gptAstra: "gpt-6-astra",
13014
+ gptSol: "gpt-6.1-sol",
13015
+ gptSolFast: "gpt-6.1-sol-fast",
13016
+ gptLunaFast: "gpt-6-luna-fast",
13017
+ glm: "glm-5.3",
13018
+ glmFlash: "glm-5.3-flash",
13019
+ kimi: "kimi-k3",
13020
+ geminiPro: "gemini-4-argon"
13021
+ };
13022
+
13023
+ // packages/omo-codex/src/install/codex-model-catalog.ts
12920
13024
  var FALLBACK_CODEX_MODEL_CATALOG = {
12921
13025
  current: {
12922
- model: "gpt-6-astra",
13026
+ model: LATEST_MODEL_BY_FAMILY.gptAstra,
12923
13027
  modelContextWindow: 600000,
12924
13028
  modelReasoningEffort: "high",
12925
13029
  planModeReasoningEffort: "xhigh"
@@ -19477,7 +19581,7 @@ var OmoGitMasterSettingsShape = {
19477
19581
  var OmoGitMasterSettingsLayerSchema = object(OmoGitMasterSettingsShape).partial().strict();
19478
19582
  var OmoGitMasterSettingsSchema = OmoGitMasterSettingsLayerSchema.extend({
19479
19583
  commit_footer: union([boolean2(), string2()]).default(false),
19480
- include_co_authored_by: boolean2().default(false),
19584
+ include_co_authored_by: boolean2().default(true),
19481
19585
  git_env_prefix: GitEnvPrefixSchema.default("GIT_MASTER=1")
19482
19586
  }).strict();
19483
19587
 
@@ -19512,6 +19616,7 @@ var OmoMemoryReflectionSchema = object({
19512
19616
  merge: _enum(["auto", "integration"]).default("auto"),
19513
19617
  category: string2().min(1).default("quick"),
19514
19618
  timeout_minutes: number2().int().positive().default(15),
19619
+ max_concurrent_runs: number2().int().positive().default(1),
19515
19620
  sandbox: _enum(["auto", "required", "off"]).default("auto")
19516
19621
  }).strict();
19517
19622
  var OmoMemorySyncSchema = object({
@@ -19537,6 +19642,14 @@ var OmoMemoryRecallSchema = object({
19537
19642
  tool_budget: number2().int().positive().default(8),
19538
19643
  query_expansion: boolean2().default(false)
19539
19644
  }).strict();
19645
+ var OmoMemoryProjectScopeSchema = object({
19646
+ nudge: boolean2().default(true),
19647
+ recall: boolean2().default(true)
19648
+ }).strict();
19649
+ var OmoMemoryProjectScopeLayerSchema = object({
19650
+ nudge: boolean2().optional(),
19651
+ recall: boolean2().optional()
19652
+ }).strict();
19540
19653
  var OmoMemoryNudgeSchema = object({
19541
19654
  enabled: boolean2().default(true),
19542
19655
  every_user_turns: number2().int().min(1).default(10)
@@ -19575,6 +19688,7 @@ var OmoMemoryReflectionLayerSchema = object({
19575
19688
  merge: _enum(["auto", "integration"]).optional(),
19576
19689
  category: string2().min(1).optional(),
19577
19690
  timeout_minutes: number2().int().positive().optional(),
19691
+ max_concurrent_runs: number2().int().positive().optional(),
19578
19692
  sandbox: _enum(["auto", "required", "off"]).optional()
19579
19693
  }).strict();
19580
19694
  var OmoMemorySyncLayerSchema = object({
@@ -19639,7 +19753,7 @@ var OmoMemoryProjectionLayerSchema = object({
19639
19753
  var OmoMemoryAgentOverridesSchema = object({
19640
19754
  enabled: boolean2().optional(),
19641
19755
  agent: string2().min(1).optional(),
19642
- reflection: OmoMemoryReflectionLayerSchema.optional(),
19756
+ reflection: OmoMemoryReflectionLayerSchema.omit({ max_concurrent_runs: true }).optional(),
19643
19757
  nudge: OmoMemoryNudgeLayerSchema.optional(),
19644
19758
  facts: OmoMemoryFactsLayerSchema.optional(),
19645
19759
  dream: OmoMemoryDreamLayerSchema.optional(),
@@ -19664,6 +19778,7 @@ var OmoMemorySettingsSchema = object({
19664
19778
  merge: "auto",
19665
19779
  category: "quick",
19666
19780
  timeout_minutes: 15,
19781
+ max_concurrent_runs: 1,
19667
19782
  sandbox: "auto"
19668
19783
  }),
19669
19784
  nudge: OmoMemoryNudgeSchema.default({ enabled: true, every_user_turns: 10 }),
@@ -19692,6 +19807,7 @@ var OmoMemorySettingsSchema = object({
19692
19807
  tool_budget: 8,
19693
19808
  query_expansion: false
19694
19809
  }),
19810
+ project_scope: OmoMemoryProjectScopeSchema.default({ nudge: true, recall: true }),
19695
19811
  projection: OmoMemoryProjectionSchema.default({ max_entries_per_directory: 40, max_bytes: 24576 }),
19696
19812
  compile_warn_tokens: number2().int().positive().default(30000),
19697
19813
  agents: record(string2(), OmoMemoryAgentOverridesSchema).default({})
@@ -19711,6 +19827,7 @@ var OmoMemorySettingsLayerSchema = object({
19711
19827
  sync: OmoMemorySyncLayerSchema.optional(),
19712
19828
  search: OmoMemorySearchLayerSchema.optional(),
19713
19829
  recall: OmoMemoryRecallLayerSchema.optional(),
19830
+ project_scope: OmoMemoryProjectScopeLayerSchema.optional(),
19714
19831
  projection: OmoMemoryProjectionLayerSchema.optional(),
19715
19832
  compile_warn_tokens: number2().int().positive().optional(),
19716
19833
  agents: record(string2(), OmoMemoryAgentOverridesSchema).optional()
@@ -19982,7 +20099,8 @@ var OmoTeamsConfigLayerSchema = record(string2(), OmoTeamSpecLayerSchema);
19982
20099
 
19983
20100
  // packages/omo-config-core/src/schema/telemetry.ts
19984
20101
  var OmoTelemetrySettingsShape = {
19985
- enabled: boolean2()
20102
+ enabled: boolean2(),
20103
+ rawTurnSampleRate: number2().min(0).max(1)
19986
20104
  };
19987
20105
  var OmoTelemetrySettingsLayerSchema = object(OmoTelemetrySettingsShape).partial().strict();
19988
20106
  var OmoTelemetrySettingsSchema = OmoTelemetrySettingsLayerSchema.extend({
@@ -20004,16 +20122,22 @@ var OmoFormatOnMutationSchema = OmoFormatOnMutationLayerSchema.extend({
20004
20122
  timeoutMs: number2().int().positive().default(3000)
20005
20123
  }).strict();
20006
20124
 
20007
- // packages/omo-config-core/src/schema/gateway.ts
20008
- var OmoGatewaySectionSchema = record(string2(), unknown()).describe("Chat-surface gateway settings, owned and validated by a separately installed gateway package. omo accepts the key and never reads it.");
20125
+ // packages/omo-config-core/src/schema/provenance.ts
20126
+ var OmoProvenanceSettingsSchema = object({
20127
+ workspaces: array(object({
20128
+ name: string2().trim().min(1).regex(/\S/),
20129
+ git_owners: array(string2().trim().min(1).regex(/\S/)).optional(),
20130
+ paths: array(string2().trim().min(1).regex(/\S/)).optional()
20131
+ }).strict()).optional()
20132
+ }).strict();
20009
20133
 
20010
20134
  // packages/omo-config-core/src/schema/config.ts
20011
20135
  var OmoOpenCodeHarnessConfigSchema = record(string2(), unknown());
20012
20136
  var OmoDisabledSkillsSchema = array(string2());
20013
20137
  var OmoExcludedModelsSchema = array(string2());
20014
20138
  var OmoTypedHarnessConfigSchema = object({
20139
+ provenance: OmoProvenanceSettingsSchema.optional(),
20015
20140
  formatOnMutation: OmoFormatOnMutationLayerSchema.optional(),
20016
- gateway: OmoGatewaySectionSchema.optional(),
20017
20141
  categories: OmoCategoriesConfigSchema.optional(),
20018
20142
  agents: OmoAgentsConfigSchema.optional(),
20019
20143
  git_master: OmoGitMasterSettingsLayerSchema.optional(),
@@ -20030,6 +20154,7 @@ var OmoTypedHarnessConfigSchema = object({
20030
20154
  exclude_models: OmoExcludedModelsSchema.optional()
20031
20155
  }).strict();
20032
20156
  var OmoConfigProfileSchema = object({
20157
+ provenance: OmoProvenanceSettingsSchema.optional(),
20033
20158
  formatOnMutation: OmoFormatOnMutationLayerSchema.optional(),
20034
20159
  categories: OmoCategoriesConfigSchema.optional(),
20035
20160
  agents: OmoAgentsConfigSchema.optional(),
@@ -20051,8 +20176,8 @@ var OmoConfigProfileSchema = object({
20051
20176
  "[codex]": OmoTypedHarnessConfigSchema.optional()
20052
20177
  }).strict();
20053
20178
  var OmoConfigSchema = object({
20179
+ provenance: OmoProvenanceSettingsSchema.optional(),
20054
20180
  formatOnMutation: OmoFormatOnMutationSchema.optional(),
20055
- gateway: OmoGatewaySectionSchema.optional(),
20056
20181
  $schema: string2().optional(),
20057
20182
  categories: OmoCategoriesConfigSchema.optional(),
20058
20183
  agents: OmoAgentsConfigSchema.optional(),
@@ -20077,8 +20202,8 @@ var OmoConfigSchema = object({
20077
20202
  legacy_migrations: record(string2(), unknown()).optional()
20078
20203
  }).strict();
20079
20204
  var OmoConfigLayerSchema = object({
20205
+ provenance: OmoProvenanceSettingsSchema.optional(),
20080
20206
  formatOnMutation: OmoFormatOnMutationLayerSchema.optional(),
20081
- gateway: OmoGatewaySectionSchema.optional(),
20082
20207
  $schema: string2().optional(),
20083
20208
  categories: OmoCategoriesConfigSchema.optional(),
20084
20209
  agents: OmoAgentsConfigSchema.optional(),
@@ -21102,6 +21227,9 @@ function printParseErrorCode(code) {
21102
21227
  return "<unknown ParseErrorCode>";
21103
21228
  }
21104
21229
 
21230
+ // packages/omo-config-core/src/loader/layer-validation.ts
21231
+ import { createHash as createHash2 } from "node:crypto";
21232
+
21105
21233
  // packages/omo-config-core/src/loader/merge.ts
21106
21234
  var DANGEROUS_KEYS = new Set(["__proto__", "constructor", "prototype"]);
21107
21235
  function isUnsafeObjectKey(key) {
@@ -21275,6 +21403,14 @@ function unrecognizedKeyIssues(issues) {
21275
21403
  function isRecord9(value) {
21276
21404
  return typeof value === "object" && value !== null && !Array.isArray(value);
21277
21405
  }
21406
+ var RETIRED_SECTION_DIGESTS = new Set([
21407
+ "447f75a8ebdbdb79a57f0b8cebbfba183820cf54a8119ac01449b30499e5ef0e",
21408
+ "4ea5ee68fea05586106890ded5733820bb77d919cda27bc4b8139b7cd33b8889"
21409
+ ]);
21410
+ function isRetiredSection(key) {
21411
+ return RETIRED_SECTION_DIGESTS.has(createHash2("sha256").update(key.toLowerCase()).digest("hex"));
21412
+ }
21413
+ var HARNESS_BLOCKS = new Set(["[opencode]", "[native]", "[senpi]", "[codex]"]);
21278
21414
  function sanitizeUnsafeKeys(value, path = []) {
21279
21415
  if (Array.isArray(value)) {
21280
21416
  const issues = [];
@@ -21293,6 +21429,9 @@ function sanitizeUnsafeKeys(value, path = []) {
21293
21429
  }
21294
21430
  const sanitized = {};
21295
21431
  for (const [key, entry] of Object.entries(value)) {
21432
+ 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] ?? "");
21433
+ if (isConfigContainer && isRetiredSection(key))
21434
+ continue;
21296
21435
  if (isUnsafeObjectKey(key)) {
21297
21436
  issues.push({ keys: [key], path });
21298
21437
  continue;
@@ -21827,7 +21966,7 @@ var MANAGED_REASONING_DEFAULT_UPGRADES = new Map([
21827
21966
  },
21828
21967
  {
21829
21968
  previous: { model: "gpt-5.6-luna", effort: "low" },
21830
- current: { model: "gpt-6-astra", effort: "low" }
21969
+ current: { model: LATEST_MODEL_BY_FAMILY.gptAstra, effort: "low" }
21831
21970
  }
21832
21971
  ]
21833
21972
  ],
@@ -21844,7 +21983,7 @@ var MANAGED_REASONING_DEFAULT_UPGRADES = new Map([
21844
21983
  },
21845
21984
  {
21846
21985
  previous: { model: "gpt-5.6-luna", effort: "low" },
21847
- current: { model: "gpt-6-astra", effort: "low" }
21986
+ current: { model: LATEST_MODEL_BY_FAMILY.gptAstra, effort: "low" }
21848
21987
  }
21849
21988
  ]
21850
21989
  ],
@@ -21853,7 +21992,7 @@ var MANAGED_REASONING_DEFAULT_UPGRADES = new Map([
21853
21992
  [
21854
21993
  {
21855
21994
  previous: { model: "gpt-5.6-sol", effort: "high" },
21856
- current: { model: "gpt-6-astra", effort: "high" }
21995
+ current: { model: LATEST_MODEL_BY_FAMILY.gptAstra, effort: "high" }
21857
21996
  }
21858
21997
  ]
21859
21998
  ],
@@ -21862,7 +22001,7 @@ var MANAGED_REASONING_DEFAULT_UPGRADES = new Map([
21862
22001
  [
21863
22002
  {
21864
22003
  previous: { model: "gpt-5.6-luna", effort: "high" },
21865
- current: { model: "gpt-6-astra", effort: "high" }
22004
+ current: { model: LATEST_MODEL_BY_FAMILY.gptAstra, effort: "high" }
21866
22005
  }
21867
22006
  ]
21868
22007
  ],
@@ -21879,7 +22018,7 @@ var MANAGED_REASONING_DEFAULT_UPGRADES = new Map([
21879
22018
  },
21880
22019
  {
21881
22020
  previous: { model: "gpt-5.6-terra", effort: "high" },
21882
- current: { model: "gpt-6-astra", effort: "high" }
22021
+ current: { model: LATEST_MODEL_BY_FAMILY.gptAstra, effort: "high" }
21883
22022
  }
21884
22023
  ]
21885
22024
  ],
@@ -21896,7 +22035,7 @@ var MANAGED_REASONING_DEFAULT_UPGRADES = new Map([
21896
22035
  },
21897
22036
  {
21898
22037
  previous: { model: "gpt-5.6-sol", effort: "high" },
21899
- current: { model: "gpt-6-astra", effort: "high" }
22038
+ current: { model: LATEST_MODEL_BY_FAMILY.gptAstra, effort: "high" }
21900
22039
  }
21901
22040
  ]
21902
22041
  ],
@@ -21913,7 +22052,7 @@ var MANAGED_REASONING_DEFAULT_UPGRADES = new Map([
21913
22052
  },
21914
22053
  {
21915
22054
  previous: { model: "gpt-5.6-terra", effort: "high" },
21916
- current: { model: "gpt-6-astra", effort: "high" }
22055
+ current: { model: LATEST_MODEL_BY_FAMILY.gptAstra, effort: "high" }
21917
22056
  }
21918
22057
  ]
21919
22058
  ],
@@ -21926,7 +22065,7 @@ var MANAGED_REASONING_DEFAULT_UPGRADES = new Map([
21926
22065
  },
21927
22066
  {
21928
22067
  previous: { model: "gpt-5.6-sol", effort: "medium" },
21929
- current: { model: "gpt-6-astra", effort: "medium" }
22068
+ current: { model: LATEST_MODEL_BY_FAMILY.gptAstra, effort: "medium" }
21930
22069
  }
21931
22070
  ]
21932
22071
  ],
@@ -21939,7 +22078,7 @@ var MANAGED_REASONING_DEFAULT_UPGRADES = new Map([
21939
22078
  },
21940
22079
  {
21941
22080
  previous: { model: "gpt-5.6-terra", effort: "medium" },
21942
- current: { model: "gpt-6-astra", effort: "medium" }
22081
+ current: { model: LATEST_MODEL_BY_FAMILY.gptAstra, effort: "medium" }
21943
22082
  }
21944
22083
  ]
21945
22084
  ],
@@ -21952,7 +22091,7 @@ var MANAGED_REASONING_DEFAULT_UPGRADES = new Map([
21952
22091
  },
21953
22092
  {
21954
22093
  previous: { model: "gpt-5.6-terra", effort: "high" },
21955
- current: { model: "gpt-6-astra", effort: "high" }
22094
+ current: { model: LATEST_MODEL_BY_FAMILY.gptAstra, effort: "high" }
21956
22095
  }
21957
22096
  ]
21958
22097
  ],
@@ -21965,7 +22104,7 @@ var MANAGED_REASONING_DEFAULT_UPGRADES = new Map([
21965
22104
  },
21966
22105
  {
21967
22106
  previous: { model: "gpt-5.6-luna", effort: "high" },
21968
- current: { model: "gpt-6-astra", effort: "high" }
22107
+ current: { model: LATEST_MODEL_BY_FAMILY.gptAstra, effort: "high" }
21969
22108
  }
21970
22109
  ]
21971
22110
  ],
@@ -21982,7 +22121,7 @@ var MANAGED_REASONING_DEFAULT_UPGRADES = new Map([
21982
22121
  },
21983
22122
  {
21984
22123
  previous: { model: "gpt-5.6-sol", effort: "low" },
21985
- current: { model: "gpt-6-astra", effort: "low" }
22124
+ current: { model: LATEST_MODEL_BY_FAMILY.gptAstra, effort: "low" }
21986
22125
  }
21987
22126
  ]
21988
22127
  ]
@@ -22312,7 +22451,7 @@ function nodeErrorCode2(error) {
22312
22451
  }
22313
22452
 
22314
22453
  // packages/omo-codex/src/install/default-agent-role.ts
22315
- import { createHash as createHash2 } from "node:crypto";
22454
+ import { createHash as createHash3 } from "node:crypto";
22316
22455
  import { lstat as lstat9, readFile as readFile16, rm as rm10 } from "node:fs/promises";
22317
22456
  import { join as join23 } from "node:path";
22318
22457
  var REGISTRATION = { name: "default", configFile: "./agents/default.toml" };
@@ -22368,7 +22507,7 @@ async function readIfPresent(path) {
22368
22507
  }
22369
22508
  }
22370
22509
  function hash(content) {
22371
- return createHash2("sha256").update(content).digest("hex");
22510
+ return createHash3("sha256").update(content).digest("hex");
22372
22511
  }
22373
22512
 
22374
22513
  // packages/omo-codex/src/install/link-cached-plugin-agents.ts
@@ -23005,7 +23144,7 @@ function formatUnknownError(error) {
23005
23144
  }
23006
23145
 
23007
23146
  // packages/omo-codex/src/install/lsp-daemon-reaper.ts
23008
- import { createHash as createHash3 } from "node:crypto";
23147
+ import { createHash as createHash4 } from "node:crypto";
23009
23148
  import { lstat as lstat12, readFile as readFile22, readdir as readdir10, rm as rm12 } from "node:fs/promises";
23010
23149
  import { tmpdir } from "node:os";
23011
23150
  import { join as join28, posix as posix2 } from "node:path";
@@ -23283,7 +23422,7 @@ async function readRegularTrimmedFile(path) {
23283
23422
  return content.length > 0 ? content : null;
23284
23423
  }
23285
23424
  function shortDigest(value) {
23286
- return createHash3("sha256").update(value).digest("hex").slice(0, 16);
23425
+ return createHash4("sha256").update(value).digest("hex").slice(0, 16);
23287
23426
  }
23288
23427
  async function removeVersionDir(path) {
23289
23428
  await rm12(path, { recursive: true, force: true });
@@ -4,7 +4,7 @@
4
4
 
5
5
  ## OVERVIEW
6
6
 
7
- Vendored skill teaching agents ast-grep (`sg`) structural search/rewrite, plus a stdlib-Python helper CLI that wraps the `sg` binary. Vendoring pin in `SOURCE`: upstream `code-yeongyu/ast-grep-skill @ 3148c69` (ast-grep 0.45.0), "vendored as a sync; do not fork-drift". Earned this file: own executable surface (749-LOC helper + installers + smoke tests) and a no-fork-drift upstream contract that has no analogue elsewhere in `shared-skills`.
7
+ Vendored skill teaching agents ast-grep (`sg`) structural search/rewrite, plus a stdlib-Python helper CLI that wraps the `sg` binary. Upstream pin in `SOURCE`: upstream `code-yeongyu/ast-grep-skill @ 3148c69` (ast-grep 0.45.0), "vendored as a sync; do not fork-drift". Earned this file: own executable surface (749-LOC helper + installers + smoke tests) and a no-fork-drift upstream contract that has no analogue elsewhere in `shared-skills`.
8
8
 
9
9
  ## STRUCTURE
10
10
 
@@ -18,29 +18,28 @@ one where a human is a single call away. Never substitute one engine for the oth
18
18
  the attached engine is not set up, run the onboarding script and tell the user its one remaining
19
19
  step.
20
20
 
21
- ## Step 0 — which engine this session is allowed to use
21
+ ## Step 0 — inside OmO Desktop: everything above, plus the app's built-in browser
22
22
 
23
- When `OMO_BROWSER_ENGINE` is set (the OmO desktop app sets it for every session), it wins over the table above:
23
+ When `OMO_BROWSER_ENGINE` is set (the OmO desktop app sets it for every session), everything above works exactly
24
+ as in the terminal: `connectBrowserSkill()` for the user's own browser, `connectPipe()` / `connectCloakProfile()` /
25
+ `connect()` for a browser of your own, with the same table to choose between them. The app adds one more option:
24
26
 
25
- | Value | What you do |
26
- |---|---|
27
- | `connected` | Use `connectBrowserSkill()` only. If the user's browser is not connected you get a "Connect your browser" error: relay it and stop. Never open another browser |
28
- | `builtin` | Do not call `connectBrowserSkill()`; use the app's in-app browser tools |
29
- | `none` | Do not do browser work. Say that agent browser access is off for this project |
30
- | unset | The table above, as before (terminal use) |
31
-
32
- While any engine is set, `loadOmowright()` returns a guarded library. The owned engine (`connectPipe`,
33
- `connectCloakProfile`, `connect`) and every other export that acts on a browser is refused, so the table above
34
- does not apply: do not look for a way around it, and tell the user what the session allows. Under `connected`
35
- the app sees what the browser is doing, and before a click, Enter or script that sends, posts, pays, orders,
36
- subscribes, deletes or closes an account, and before Enter in a message box, it asks the user first. A "No" fails the action with
37
- `BrowserActionDeclinedError`: report that, never retry it or go around it (`session.tool()` lets only reads
38
- through; `evaluate` is guarded too). If the user presses Stop, the next call throws `BrowserUserStoppedError`: tell
39
- the user browser use was stopped and start no new session this turn.
40
-
41
- The guard prevents mistakes by a cooperating agent. It is not a security boundary: code that imports the raw
42
- entry (`resolveOmowrightEntry()`) is not guarded, and a host without the `omo_browser_bridge` tool cannot show state or
43
- honor Stop, though questions are still asked.
27
+ | Option | What it is | Use it when |
28
+ |---|---|---|
29
+ | `connectBuiltinBrowser()` | OmO's built-in browser for this thread: the tab the user sees beside the chat, which they can watch, take over and share | the user should see the page while you work, the task is QA of something in the app, or a sign-in the user should do themselves in a visible tab |
30
+
31
+ ```js
32
+ const browser = await omowright.connectBuiltinBrowser()
33
+ const [tab] = await browser.listTargets()
34
+ const page = await browser.attachPage(tab.id)
35
+ await page.goto(url)
36
+ ```
37
+
38
+ It is an OmOWright connection like `connect()`. Work in few calls: take `page.snapshot()` once, act on its refs,
39
+ and chain several actions in one eval cell (`page.locator(ref).fill()`, `.click()`, `.selectOption(value)`,
40
+ `.setInputFiles(path)`), snapshotting again only after the page changed. It has one tab: navigate it rather than
41
+ opening new ones. `BuiltinBrowserUnavailableError` permits another engine only for `unavailable`, `timeout`, or
42
+ `invalid_grant`. For `user_stopped` or any other app refusal, stop browser work and report it; do not open another browser.
44
43
 
45
44
  ## Step 1 — load omowright and prove the stack
46
45
 
@@ -118,7 +117,7 @@ changing the extension's automation settings.
118
117
  out everywhere. No flow here needs it.
119
118
  - **`focused: false` by default.** The browser belongs to someone who is probably using it.
120
119
  - **One short, named session per task,** always stopped.
121
- - **Bot-scored or WAF targets go to the owned engine** (not while `OMO_BROWSER_ENGINE` is set: then say the site needs a browser the session does not allow). The attached engine's daemon enables console
120
+ - **Bot-scored or WAF targets go to the owned engine**, in the terminal and inside OmO Desktop alike. The attached engine's daemon enables console
122
121
  capture on every tab it drives, which is a known automation signal; CloakBrowser through
123
122
  `connectCloakProfile()` is the stealth path.
124
123