oh-my-opencode 5.0.0-beta.31 → 5.0.0-beta.32

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 (227) hide show
  1. package/dist/cli/index.js +136 -44
  2. package/dist/cli-node/index.js +136 -44
  3. package/dist/features/background-agent/parent-wake-notifier-types.d.ts +1 -1
  4. package/dist/features/background-agent/parent-wake-prompt-dispatch.d.ts +1 -1
  5. package/dist/features/background-agent/parent-wake-session-inspector.d.ts +1 -1
  6. package/dist/features/monitor/manager-internals.d.ts +1 -1
  7. package/dist/features/monitor/output-injector-types.d.ts +1 -1
  8. package/dist/features/team-mode/tools/messaging-live-delivery-recipient.d.ts +1 -0
  9. package/dist/features/team-mode/tools/messaging-runtime.d.ts +1 -0
  10. package/dist/hooks/anthropic-context-window-limit-recovery/tool-result-storage.d.ts +11 -0
  11. package/dist/index.js +286 -99
  12. package/dist/skills/ultimate-browsing/references/insane-search/README.md +9 -2
  13. package/dist/tools/session-manager/directory-filter.d.ts +2 -0
  14. package/dist/tui.js +109 -23
  15. package/package.json +16 -15
  16. package/packages/lsp-core/src/lsp/client-diagnostics-freshness.integration.test.ts +47 -19
  17. package/packages/lsp-core/src/lsp/client-diagnostics-pull-timeout.test.ts +64 -0
  18. package/packages/lsp-core/src/lsp/client.ts +6 -3
  19. package/packages/lsp-core/src/lsp/controlled-clock-test-support.ts +61 -0
  20. package/packages/lsp-core/src/lsp/fixtures/workspace-edit-server.mjs +10 -3
  21. package/packages/lsp-core/src/lsp/timer-provider.ts +13 -0
  22. package/packages/lsp-core/src/lsp/transport-request-timeout.test.ts +73 -0
  23. package/packages/lsp-core/src/lsp/transport.ts +7 -2
  24. package/packages/lsp-core/src/lsp/workspace-document-state.test.ts +84 -1
  25. package/packages/lsp-core/src/lsp/workspace-document-state.ts +30 -11
  26. package/packages/lsp-core/src/tools/parameters.test.ts +51 -0
  27. package/packages/lsp-daemon/dist/cli.js +41 -16
  28. package/packages/lsp-daemon/dist/client.js +41 -16
  29. package/packages/lsp-daemon/dist/index.js +41 -16
  30. package/packages/lsp-tools-mcp/dist/cli.js +41 -16
  31. package/packages/lsp-tools-mcp/dist/lsp/manager.js +41 -16
  32. package/packages/lsp-tools-mcp/dist/mcp.js +41 -16
  33. package/packages/lsp-tools-mcp/dist/tools.js +41 -16
  34. package/packages/lsp-tools-mcp/package.json +1 -1
  35. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  36. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  37. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  38. package/packages/omo-codex/plugin/components/codegraph/dist/cli.js +3 -17
  39. package/packages/omo-codex/plugin/components/codegraph/dist/serve.js +3 -17
  40. package/packages/omo-codex/plugin/components/codegraph/package.json +1 -1
  41. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  42. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  43. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  44. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  45. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  46. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  47. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +3 -3
  48. package/packages/omo-codex/plugin/components/lsp/dist/cli.js +39 -16
  49. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  50. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  51. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  52. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  53. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  54. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  55. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  56. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  57. package/packages/omo-codex/plugin/components/ultrawork/AGENTS.md +5 -4
  58. package/packages/omo-codex/plugin/components/ultrawork/dist/cli.js +489 -4
  59. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  60. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -2
  61. package/packages/omo-codex/plugin/components/ultrawork/scripts/sync-directive.mjs +30 -14
  62. package/packages/omo-codex/plugin/components/ultrawork/src/directive-content.ts +4 -0
  63. package/packages/omo-codex/plugin/components/ultrawork/src/directive.ts +5 -2
  64. package/packages/omo-codex/plugin/components/ultrawork/test/directive-source.test.ts +14 -8
  65. package/packages/omo-codex/plugin/components/ultrawork/test/package-smoke.test.ts +12 -1
  66. package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +2 -2
  67. package/packages/omo-codex/plugin/components/ulw-execute-continuation/package.json +1 -1
  68. package/packages/omo-codex/plugin/components/ulw-loop/AGENTS.md +4 -2
  69. package/packages/omo-codex/plugin/components/ulw-loop/README.md +1 -0
  70. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-continuation.js +9 -0
  71. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-reconciliation.d.ts +14 -0
  72. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-reconciliation.js +10 -1
  73. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-template.d.ts +8 -0
  74. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-template.js +113 -0
  75. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint.js +7 -5
  76. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-commands.js +2 -1
  77. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-output.d.ts +1 -1
  78. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-output.js +1 -0
  79. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-subcommands.js +2 -0
  80. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +775 -312
  81. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-instruction.js +18 -0
  82. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-snapshot.d.ts +13 -0
  83. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-snapshot.js +14 -0
  84. package/packages/omo-codex/plugin/components/ulw-loop/dist/domain-types.d.ts +17 -9
  85. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-io.js +17 -2
  86. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-missing-recovery.d.ts +13 -0
  87. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-missing-recovery.js +19 -0
  88. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-aggregate.d.ts +2 -0
  89. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-aggregate.js +53 -0
  90. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-artifacts.d.ts +9 -0
  91. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-artifacts.js +85 -0
  92. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-fields.js +1 -1
  93. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate.js +41 -99
  94. package/packages/omo-codex/plugin/components/ulw-loop/dist/review-blockers.js +4 -2
  95. package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-guard.js +184 -14
  96. package/packages/omo-codex/plugin/components/ulw-loop/dist/status-next-actions.d.ts +6 -0
  97. package/packages/omo-codex/plugin/components/ulw-loop/dist/status-next-actions.js +33 -0
  98. package/packages/omo-codex/plugin/components/ulw-loop/dist/surface.d.ts +3 -0
  99. package/packages/omo-codex/plugin/components/ulw-loop/dist/surface.js +15 -0
  100. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +4 -4
  101. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  102. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +17 -0
  103. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-continuation.ts +7 -0
  104. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-reconciliation.ts +25 -1
  105. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-template.ts +127 -0
  106. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint.ts +8 -12
  107. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-commands.ts +2 -1
  108. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-output.ts +1 -0
  109. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-subcommands.ts +2 -0
  110. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-instruction.ts +18 -0
  111. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-snapshot.ts +23 -0
  112. package/packages/omo-codex/plugin/components/ulw-loop/src/domain-types.ts +19 -9
  113. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-io.ts +18 -3
  114. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-missing-recovery.ts +27 -0
  115. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-aggregate.ts +57 -0
  116. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-artifacts.ts +103 -0
  117. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-fields.ts +1 -1
  118. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate.ts +50 -116
  119. package/packages/omo-codex/plugin/components/ulw-loop/src/review-blockers.ts +4 -2
  120. package/packages/omo-codex/plugin/components/ulw-loop/src/spawn-guard.ts +186 -12
  121. package/packages/omo-codex/plugin/components/ulw-loop/src/status-next-actions.ts +36 -0
  122. package/packages/omo-codex/plugin/components/ulw-loop/src/surface.ts +22 -0
  123. package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint-final.test.ts +66 -3
  124. package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint-template.test.ts +92 -0
  125. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-status-next-actions.test.ts +183 -0
  126. package/packages/omo-codex/plugin/components/ulw-loop/test/codex-goal-instruction.test.ts +13 -3
  127. package/packages/omo-codex/plugin/components/ulw-loop/test/guided-recovery.test.ts +105 -0
  128. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-aggregate.test.ts +101 -0
  129. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-roles.test.ts +16 -15
  130. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-senpi-surface.test.ts +131 -0
  131. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate.test.ts +5 -0
  132. package/packages/omo-codex/plugin/components/ulw-loop/test/spawn-guard.test.ts +300 -3
  133. package/packages/omo-codex/plugin/components/ulw-loop/test/ultrawork-directive.test.ts +9 -3
  134. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  135. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  136. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  137. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-codegraph-init-guidance.json +1 -1
  138. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  139. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  140. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  141. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  142. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  143. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  144. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  145. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  146. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  147. package/packages/omo-codex/plugin/hooks/session-start-checking-codegraph-bootstrap.json +1 -1
  148. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  149. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  150. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +1 -1
  151. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  152. package/packages/omo-codex/plugin/hooks/subagent-stop-checking-ulw-execute-continuation.json +1 -1
  153. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  154. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  155. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  156. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  157. package/packages/omo-codex/plugin/package-lock.json +13 -13
  158. package/packages/omo-codex/plugin/package.json +1 -1
  159. package/packages/omo-codex/plugin/scripts/sync-skills.mjs +31 -2
  160. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/README.md +9 -2
  161. package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +17 -0
  162. package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +11 -1
  163. package/packages/omo-codex/plugin/test/sync-skills.test.mjs +13 -0
  164. package/packages/omo-codex/plugin/test/ultrawork-skill-pointer.test.mjs +5 -2
  165. package/packages/omo-codex/scripts/install-dist/install-local.mjs +2 -2
  166. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/README.md +9 -2
  167. package/dist/features/builtin-skills/index.d.ts +0 -1
  168. package/dist/features/builtin-skills/skill-file-loader.d.ts +0 -1
  169. package/dist/features/builtin-skills/skills/agent-browser-skill.d.ts +0 -1
  170. package/dist/features/builtin-skills/skills/agent-browser-template.d.ts +0 -1
  171. package/dist/features/builtin-skills/skills/debugging.d.ts +0 -1
  172. package/dist/features/builtin-skills/skills/dev-browser.d.ts +0 -1
  173. package/dist/features/builtin-skills/skills/frontend.d.ts +0 -1
  174. package/dist/features/builtin-skills/skills/git-master-sections/commit-atomic-planning.d.ts +0 -1
  175. package/dist/features/builtin-skills/skills/git-master-sections/commit-context-analysis.d.ts +0 -1
  176. package/dist/features/builtin-skills/skills/git-master-sections/commit-execution-verification.d.ts +0 -1
  177. package/dist/features/builtin-skills/skills/git-master-sections/commit-workflow.d.ts +0 -1
  178. package/dist/features/builtin-skills/skills/git-master-sections/history-search-workflow.d.ts +0 -1
  179. package/dist/features/builtin-skills/skills/git-master-sections/overview.d.ts +0 -1
  180. package/dist/features/builtin-skills/skills/git-master-sections/quick-reference.d.ts +0 -1
  181. package/dist/features/builtin-skills/skills/git-master-sections/rebase-workflow.d.ts +0 -1
  182. package/dist/features/builtin-skills/skills/git-master-skill-metadata.d.ts +0 -1
  183. package/dist/features/builtin-skills/skills/git-master.d.ts +0 -1
  184. package/dist/features/builtin-skills/skills/index.d.ts +0 -1
  185. package/dist/features/builtin-skills/skills/init-deep.d.ts +0 -1
  186. package/dist/features/builtin-skills/skills/playwright-cli.d.ts +0 -1
  187. package/dist/features/builtin-skills/skills/playwright-mcp-skill.d.ts +0 -1
  188. package/dist/features/builtin-skills/skills/playwright.d.ts +0 -1
  189. package/dist/features/builtin-skills/skills/remove-ai-slops.d.ts +0 -1
  190. package/dist/features/builtin-skills/skills/review-work.d.ts +0 -1
  191. package/dist/features/builtin-skills/skills/security-research.d.ts +0 -1
  192. package/dist/features/builtin-skills/skills/security-review.d.ts +0 -1
  193. package/dist/features/builtin-skills/skills/team-mode.d.ts +0 -1
  194. package/dist/features/builtin-skills/skills/visual-qa.d.ts +0 -1
  195. package/dist/features/builtin-skills/skills.d.ts +0 -1
  196. package/dist/features/builtin-skills/types.d.ts +0 -1
  197. package/dist/features/claude-code-plugin-loader/agent-loader.d.ts +0 -1
  198. package/dist/features/claude-code-plugin-loader/command-loader.d.ts +0 -1
  199. package/dist/features/claude-code-plugin-loader/discovery-core.d.ts +0 -1
  200. package/dist/features/claude-code-plugin-loader/discovery-paths.d.ts +0 -1
  201. package/dist/features/claude-code-plugin-loader/discovery.d.ts +0 -1
  202. package/dist/features/claude-code-plugin-loader/hook-loader.d.ts +0 -1
  203. package/dist/features/claude-code-plugin-loader/index.d.ts +0 -1
  204. package/dist/features/claude-code-plugin-loader/install-path-resolver.d.ts +0 -1
  205. package/dist/features/claude-code-plugin-loader/installed-plugin-database.d.ts +0 -1
  206. package/dist/features/claude-code-plugin-loader/loaded-plugin.d.ts +0 -1
  207. package/dist/features/claude-code-plugin-loader/loader.d.ts +0 -1
  208. package/dist/features/claude-code-plugin-loader/mcp-server-loader.d.ts +0 -1
  209. package/dist/features/claude-code-plugin-loader/plugin-key.d.ts +0 -1
  210. package/dist/features/claude-code-plugin-loader/plugin-manifest.d.ts +0 -1
  211. package/dist/features/claude-code-plugin-loader/plugin-path-resolver.d.ts +0 -1
  212. package/dist/features/claude-code-plugin-loader/plugin-settings.d.ts +0 -1
  213. package/dist/features/claude-code-plugin-loader/scope-filter.d.ts +0 -1
  214. package/dist/features/claude-code-plugin-loader/skill-loader.d.ts +0 -1
  215. package/dist/features/claude-code-plugin-loader/types.d.ts +0 -1
  216. package/dist/shared/prompt-async-gate/message-inspection-error.d.ts +0 -1
  217. package/dist/shared/prompt-async-gate/pending-tool-turn.d.ts +0 -1
  218. package/dist/shared/prompt-async-gate/prompt-message-state.d.ts +0 -1
  219. package/dist/shared/prompt-async-gate/queue.d.ts +0 -1
  220. package/dist/shared/prompt-async-gate/recent-dispatches.d.ts +0 -1
  221. package/dist/shared/prompt-async-gate/reservations.d.ts +0 -1
  222. package/dist/shared/prompt-async-gate/semantic-dedupe.d.ts +0 -1
  223. package/dist/shared/prompt-async-gate/session-idle-dispatch.d.ts +0 -1
  224. package/dist/shared/prompt-async-gate/timing.d.ts +0 -1
  225. package/dist/shared/prompt-async-gate/types.d.ts +0 -1
  226. package/packages/omo-codex/plugin/components/ultrawork/directive.md +0 -483
  227. package/packages/omo-codex/plugin/components/ultrawork/skills/ultrawork/SKILL.md +0 -490
@@ -5848,11 +5848,7 @@ var OmoMemorySearchSchema = object({
5848
5848
  }).strict();
5849
5849
  var OmoMemoryRecallSchema = object({
5850
5850
  enabled: boolean2().default(true),
5851
- max_items: number2().int().min(1).max(5).default(2),
5852
- budget_tokens: number2().int().positive().default(600),
5853
- excerpt_chars: number2().int().positive().default(200),
5854
- min_score: number2().optional(),
5855
- exclude: array(string2()).default([])
5851
+ max_items: number2().int().min(1).max(5).default(2)
5856
5852
  }).strict();
5857
5853
  var OmoMemoryNudgeSchema = object({
5858
5854
  enabled: boolean2().default(true),
@@ -5902,11 +5898,7 @@ var OmoMemorySearchLayerSchema = object({
5902
5898
  }).strict();
5903
5899
  var OmoMemoryRecallLayerSchema = object({
5904
5900
  enabled: boolean2().optional(),
5905
- max_items: number2().int().min(1).max(5).optional(),
5906
- budget_tokens: number2().int().positive().optional(),
5907
- excerpt_chars: number2().int().positive().optional(),
5908
- min_score: number2().optional(),
5909
- exclude: array(string2()).optional()
5901
+ max_items: number2().int().min(1).max(5).optional()
5910
5902
  }).strict();
5911
5903
  var OmoMemoryNudgeLayerSchema = object({
5912
5904
  enabled: boolean2().optional(),
@@ -5977,13 +5969,7 @@ var OmoMemorySettingsSchema = object({
5977
5969
  write_notice: OmoMemoryWriteNoticeSchema.default({ enabled: true }),
5978
5970
  sync: OmoMemorySyncSchema.default({ enabled: true }),
5979
5971
  search: OmoMemorySearchSchema.default({ enabled: true }),
5980
- recall: OmoMemoryRecallSchema.default({
5981
- enabled: true,
5982
- max_items: 2,
5983
- budget_tokens: 600,
5984
- excerpt_chars: 200,
5985
- exclude: []
5986
- }),
5972
+ recall: OmoMemoryRecallSchema.default({ enabled: true, max_items: 2 }),
5987
5973
  compile_warn_tokens: number2().int().positive().default(30000),
5988
5974
  agents: record(string2(), OmoMemoryAgentOverridesSchema).default({})
5989
5975
  }).strict();
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sisyphuslabs/codex-codegraph",
3
- "version": "5.0.0-beta.31",
3
+ "version": "5.0.0-beta.32",
4
4
  "description": "Codex plugin MCP wrapper for CodeGraph.",
5
5
  "type": "module",
6
6
  "private": true,
@@ -8,7 +8,7 @@
8
8
  "type": "command",
9
9
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-tool-use",
10
10
  "timeout": 30,
11
- "statusMessage": "(OmO 5.0.0-beta.31) Checking Comments"
11
+ "statusMessage": "(OmO 5.0.0-beta.32) Checking Comments"
12
12
  }
13
13
  ]
14
14
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-comment-checker",
3
- "version": "5.0.0-beta.31",
3
+ "version": "5.0.0-beta.32",
4
4
  "description": "Codex plugin that runs comment-checker after edit-like PostToolUse hooks.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -8,7 +8,7 @@
8
8
  "type": "command",
9
9
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook pre-tool-use",
10
10
  "timeout": 5,
11
- "statusMessage": "(OmO 5.0.0-beta.31) Recommending Git Bash MCP"
11
+ "statusMessage": "(OmO 5.0.0-beta.32) Recommending Git Bash MCP"
12
12
  }
13
13
  ]
14
14
  }
@@ -20,7 +20,7 @@
20
20
  "type": "command",
21
21
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-compact",
22
22
  "timeout": 5,
23
- "statusMessage": "(OmO 5.0.0-beta.31) Resetting Git Bash MCP Reminder"
23
+ "statusMessage": "(OmO 5.0.0-beta.32) Resetting Git Bash MCP Reminder"
24
24
  }
25
25
  ]
26
26
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sisyphuslabs/codex-git-bash-hook",
3
- "version": "5.0.0-beta.31",
3
+ "version": "5.0.0-beta.32",
4
4
  "description": "Codex hook component that reminds Windows sessions to prefer the OMO git_bash MCP.",
5
5
  "type": "module",
6
6
  "private": true,
@@ -8,7 +8,7 @@
8
8
  "type": "command",
9
9
  "command": "node \"${PLUGIN_ROOT}/components/lazycodex-executor-verify/dist/cli.js\" hook subagent-stop",
10
10
  "timeout": 10,
11
- "statusMessage": "(OmO 5.0.0-beta.31) Verifying LazyCodex Executor Evidence"
11
+ "statusMessage": "(OmO 5.0.0-beta.32) Verifying LazyCodex Executor Evidence"
12
12
  }
13
13
  ]
14
14
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-lazycodex-executor-verify",
3
- "version": "5.0.0-beta.31",
3
+ "version": "5.0.0-beta.32",
4
4
  "description": "Codex SubagentStop evidence verifier for LazyCodex executor completions.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "version": "5.0.0-beta.31",
4
- "inputDigest": "sha256:858b6dbf85523225a57282289db35b4a82d608613a4a5930ce1d85a86b4296b4",
3
+ "version": "5.0.0-beta.32",
4
+ "inputDigest": "sha256:7ebeb55787bcfcf32f5cdd2782c145f22c9aa8c595b7dedde0228036267ccfee",
5
5
  "outputs": [
6
6
  {
7
7
  "path": "cli.d.ts",
@@ -9,7 +9,7 @@
9
9
  },
10
10
  {
11
11
  "path": "cli.js",
12
- "sha256": "d20c513dadc159abf9ecbc16198769b6b872a77472ac64a78d137e6c73c5debb"
12
+ "sha256": "89f0a2360dc1977cc00f2cdb661ff6929a7b90131728488502834a372840db3c"
13
13
  },
14
14
  {
15
15
  "path": "codex-hook-cli.d.ts",
@@ -766,6 +766,11 @@ function reportBestEffortCleanupError(operation, error, logger = writeCleanupErr
766
766
  const message = error instanceof Error ? error.message : String(error);
767
767
  logger(`[lsp] ignored ${operation} failure during cleanup: ${message}`);
768
768
  }
769
+ var realTimerProvider = {
770
+ now: () => Date.now(),
771
+ setTimeout: (callback, delayMs) => setTimeout(callback, delayMs),
772
+ clearTimeout: (handle) => clearTimeout(handle)
773
+ };
769
774
  var DEFAULT_MAX_REFERENCES = 200;
770
775
  var DEFAULT_MAX_SYMBOLS = 200;
771
776
  var DEFAULT_MAX_DIAGNOSTICS = 200;
@@ -1294,6 +1299,7 @@ class LspClientTransport {
1294
1299
  this.documentFormattingSupported = false;
1295
1300
  this.requestTimeoutMs = timeouts.requestTimeoutMs ?? REQUEST_TIMEOUT_MS;
1296
1301
  this.initializeTimeoutMs = timeouts.initializeTimeoutMs ?? INIT_TIMEOUT_MS;
1302
+ this.timerProvider = timeouts.timerProvider ?? realTimerProvider;
1297
1303
  }
1298
1304
  pid() {
1299
1305
  return this.proc?.pid;
@@ -1394,7 +1400,7 @@ class LspClientTransport {
1394
1400
  const options = args[1];
1395
1401
  const timeoutMs = options?.timeoutMs ?? this.requestTimeoutMs;
1396
1402
  const timeoutController = new AbortController;
1397
- const timeoutHandle = setTimeout(() => {
1403
+ const timeoutHandle = this.timerProvider.setTimeout(() => {
1398
1404
  const stderrTail = this.stderrBuffer.slice(-5).join(`
1399
1405
  `);
1400
1406
  timeoutController.abort(new LspRequestTimeoutError(method, stderrTail || undefined));
@@ -1413,7 +1419,7 @@ class LspClientTransport {
1413
1419
  }
1414
1420
  throw error;
1415
1421
  } finally {
1416
- clearTimeout(timeoutHandle);
1422
+ this.timerProvider.clearTimeout(timeoutHandle);
1417
1423
  combinedSignal.dispose();
1418
1424
  }
1419
1425
  }
@@ -1783,6 +1789,17 @@ function canonicalPath(filePath) {
1783
1789
  return absolute;
1784
1790
  }
1785
1791
  }
1792
+ function normalizeDocumentUri(uri) {
1793
+ let decoded = uri;
1794
+ try {
1795
+ decoded = decodeURIComponent(uri);
1796
+ } catch {
1797
+ decoded = uri;
1798
+ }
1799
+ if (process.platform !== "win32")
1800
+ return decoded;
1801
+ return decoded.replace(/^(file:\/\/\/)([a-z]):/, (_match, prefix, drive) => `${prefix}${drive.toUpperCase()}:`);
1802
+ }
1786
1803
  function isSameOrDescendant(candidate, parent) {
1787
1804
  const suffix = relative2(parent, candidate);
1788
1805
  return suffix === "" || !suffix.startsWith("..") && suffix !== "..";
@@ -1799,7 +1816,12 @@ class WorkspaceDocumentState {
1799
1816
  this.openDocuments = new Map;
1800
1817
  this.openByUri = new Map;
1801
1818
  this.openPromises = new Map;
1802
- this.now = options.now ?? (() => Date.now());
1819
+ this.timerProvider = options.timerProvider ?? {
1820
+ now: options.now ?? (() => Date.now()),
1821
+ setTimeout: (callback, delayMs) => setTimeout(callback, delayMs),
1822
+ clearTimeout: (handle) => clearTimeout(handle)
1823
+ };
1824
+ this.now = () => this.timerProvider.now();
1803
1825
  this.versionlessPublishQuiescenceMs = options.versionlessPublishQuiescenceMs ?? DEFAULT_VERSIONLESS_PUBLISH_QUIESCENCE_MS;
1804
1826
  }
1805
1827
  async openFile(filePath) {
@@ -1821,7 +1843,7 @@ class WorkspaceDocumentState {
1821
1843
  return this.openDocuments.get(canonicalPath(filePath))?.version;
1822
1844
  }
1823
1845
  getStoredDiagnostics(uri) {
1824
- const state = this.openByUri.get(uri);
1846
+ const state = this.openByUri.get(normalizeDocumentUri(uri));
1825
1847
  if (!state)
1826
1848
  return [];
1827
1849
  return state.lastPublish?.diagnostics ?? state.pullCache?.diagnostics ?? [];
@@ -1843,13 +1865,13 @@ class WorkspaceDocumentState {
1843
1865
  return state !== undefined && state.uri === snapshot.uri && state.version === snapshot.version && state.generation === snapshot.documentGeneration;
1844
1866
  }
1845
1867
  getPullCache(snapshot) {
1846
- const state = this.openByUri.get(snapshot.uri);
1868
+ const state = this.openByUri.get(normalizeDocumentUri(snapshot.uri));
1847
1869
  if (!state?.pullCache || state.pullCache.documentVersion !== snapshot.version)
1848
1870
  return null;
1849
1871
  return state.pullCache;
1850
1872
  }
1851
1873
  recordPullDiagnostics(snapshot, report) {
1852
- const state = this.openByUri.get(snapshot.uri);
1874
+ const state = this.openByUri.get(normalizeDocumentUri(snapshot.uri));
1853
1875
  if (!state)
1854
1876
  return;
1855
1877
  state.pullCache = {
@@ -1859,7 +1881,7 @@ class WorkspaceDocumentState {
1859
1881
  };
1860
1882
  }
1861
1883
  recordPublishedDiagnostics(params) {
1862
- const state = this.openByUri.get(params.uri);
1884
+ const state = this.openByUri.get(normalizeDocumentUri(params.uri));
1863
1885
  if (!state)
1864
1886
  return;
1865
1887
  state.publishGeneration += 1;
@@ -1873,7 +1895,7 @@ class WorkspaceDocumentState {
1873
1895
  this.notifyWaiters(state);
1874
1896
  }
1875
1897
  resolvePushDiagnostics(snapshot) {
1876
- const state = this.openByUri.get(snapshot.uri);
1898
+ const state = this.openByUri.get(normalizeDocumentUri(snapshot.uri));
1877
1899
  if (!state?.lastPublish)
1878
1900
  return { status: "missing" };
1879
1901
  const publish = state.lastPublish;
@@ -1887,7 +1909,7 @@ class WorkspaceDocumentState {
1887
1909
  return waitMs === 0 ? { status: "ready", diagnostics: publish.diagnostics } : { status: "wait", waitMs };
1888
1910
  }
1889
1911
  waitForDiagnosticsActivity(snapshot, timeoutMs) {
1890
- const state = this.openByUri.get(snapshot.uri);
1912
+ const state = this.openByUri.get(normalizeDocumentUri(snapshot.uri));
1891
1913
  if (!state || timeoutMs <= 0)
1892
1914
  return Promise.resolve();
1893
1915
  return new Promise((resolveActivity) => {
@@ -1896,11 +1918,11 @@ class WorkspaceDocumentState {
1896
1918
  if (settled)
1897
1919
  return;
1898
1920
  settled = true;
1899
- clearTimeout(timer);
1921
+ this.timerProvider.clearTimeout(timer);
1900
1922
  state.waiters.delete(finish);
1901
1923
  resolveActivity();
1902
1924
  };
1903
- const timer = setTimeout(finish, timeoutMs);
1925
+ const timer = this.timerProvider.setTimeout(finish, timeoutMs);
1904
1926
  if (typeof timer.unref === "function")
1905
1927
  timer.unref();
1906
1928
  state.waiters.add(finish);
@@ -2008,7 +2030,7 @@ class WorkspaceDocumentState {
2008
2030
  waiters: new Set
2009
2031
  };
2010
2032
  this.openDocuments.set(path2, state);
2011
- this.openByUri.set(state.uri, state);
2033
+ this.openByUri.set(normalizeDocumentUri(state.uri), state);
2012
2034
  this.notifyWaiters(state);
2013
2035
  await this.sendNotification("textDocument/didOpen", {
2014
2036
  textDocument: { uri: state.uri, languageId: state.languageId, version: state.version, text }
@@ -2033,7 +2055,7 @@ class WorkspaceDocumentState {
2033
2055
  }
2034
2056
  async closeDocument(state) {
2035
2057
  this.openDocuments.delete(state.path);
2036
- this.openByUri.delete(state.uri);
2058
+ this.openByUri.delete(normalizeDocumentUri(state.uri));
2037
2059
  this.clearDiagnostics(state.uri);
2038
2060
  this.notifyWaiters(state);
2039
2061
  await this.sendNotification("textDocument/didClose", { textDocument: { uri: state.uri } });
@@ -3083,6 +3105,7 @@ class LspClient extends LspClientConnection {
3083
3105
  this.diagnosticPullErrors = [];
3084
3106
  this.diagnosticsFreshnessTimeoutMs = options.diagnosticsFreshnessTimeoutMs ?? DIAGNOSTICS_FRESHNESS_TIMEOUT_MS;
3085
3107
  this.documents = new WorkspaceDocumentState((method, params) => this.sendNotification(method, params), (uri) => this.diagnosticsStore.delete(uri), {
3108
+ timerProvider: this.timerProvider,
3086
3109
  versionlessPublishQuiescenceMs: options.versionlessPublishQuiescenceMs ?? VERSIONLESS_PUBLISH_QUIESCENCE_MS
3087
3110
  });
3088
3111
  this.workspaceMutations = new WorkspaceMutationController(root, this.documents);
@@ -3186,7 +3209,7 @@ class LspClient extends LspClientConnection {
3186
3209
  const absPath = this.resolveWorkspacePath(filePath);
3187
3210
  const uri = pathToFileURL3(absPath).href;
3188
3211
  await this.openFile(absPath);
3189
- const deadlineAt = Date.now() + this.diagnosticsFreshnessTimeoutMs;
3212
+ const deadlineAt = this.timerProvider.now() + this.diagnosticsFreshnessTimeoutMs;
3190
3213
  for (;; ) {
3191
3214
  signal?.throwIfAborted();
3192
3215
  const snapshot = this.documents.captureDiagnosticSnapshot(absPath);
@@ -3199,7 +3222,7 @@ class LspClient extends LspClientConnection {
3199
3222
  if (!pushFallbackOnly) {
3200
3223
  const cached = this.documents.getPullCache(snapshot);
3201
3224
  try {
3202
- const remainingMs2 = deadlineAt - Date.now();
3225
+ const remainingMs2 = deadlineAt - this.timerProvider.now();
3203
3226
  if (remainingMs2 <= 0)
3204
3227
  return this.freshnessTimeout(absPath);
3205
3228
  const result = await this.sendRequest("textDocument/diagnostic", {
@@ -3234,7 +3257,7 @@ class LspClient extends LspClientConnection {
3234
3257
  }
3235
3258
  if (!pushFallbackOnly)
3236
3259
  continue;
3237
- const remainingMs = deadlineAt - Date.now();
3260
+ const remainingMs = deadlineAt - this.timerProvider.now();
3238
3261
  if (remainingMs <= 0) {
3239
3262
  if (!this.isDiagnosticPullSupported() && snapshot.publishGeneration === 0) {
3240
3263
  const cached = this.documents.getPullCache(snapshot);
@@ -8,7 +8,7 @@
8
8
  "type": "command",
9
9
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-tool-use",
10
10
  "timeout": 60,
11
- "statusMessage": "(OmO 5.0.0-beta.31) Checking LSP Diagnostics"
11
+ "statusMessage": "(OmO 5.0.0-beta.32) Checking LSP Diagnostics"
12
12
  }
13
13
  ]
14
14
  }
@@ -21,7 +21,7 @@
21
21
  "type": "command",
22
22
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-compact",
23
23
  "timeout": 5,
24
- "statusMessage": "(OmO 5.0.0-beta.31) Resetting LSP Diagnostics Cache"
24
+ "statusMessage": "(OmO 5.0.0-beta.32) Resetting LSP Diagnostics Cache"
25
25
  }
26
26
  ]
27
27
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-lsp",
3
- "version": "5.0.0-beta.31",
3
+ "version": "5.0.0-beta.32",
4
4
  "description": "Codex plugin that exposes Language Server Protocol tools and post-edit diagnostics.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook session-start",
9
9
  "timeout": 10,
10
- "statusMessage": "(OmO 5.0.0-beta.31) Loading Project Rules"
10
+ "statusMessage": "(OmO 5.0.0-beta.32) Loading Project Rules"
11
11
  }
12
12
  ]
13
13
  }
@@ -19,7 +19,7 @@
19
19
  "type": "command",
20
20
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook user-prompt-submit",
21
21
  "timeout": 10,
22
- "statusMessage": "(OmO 5.0.0-beta.31) Loading Project Rules"
22
+ "statusMessage": "(OmO 5.0.0-beta.32) Loading Project Rules"
23
23
  }
24
24
  ]
25
25
  }
@@ -32,7 +32,7 @@
32
32
  "type": "command",
33
33
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-tool-use",
34
34
  "timeout": 10,
35
- "statusMessage": "(OmO 5.0.0-beta.31) Matching Project Rules"
35
+ "statusMessage": "(OmO 5.0.0-beta.32) Matching Project Rules"
36
36
  }
37
37
  ]
38
38
  }
@@ -45,7 +45,7 @@
45
45
  "type": "command",
46
46
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-compact",
47
47
  "timeout": 10,
48
- "statusMessage": "(OmO 5.0.0-beta.31) Resetting Project Rule Cache"
48
+ "statusMessage": "(OmO 5.0.0-beta.32) Resetting Project Rule Cache"
49
49
  }
50
50
  ]
51
51
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-rules",
3
- "version": "5.0.0-beta.31",
3
+ "version": "5.0.0-beta.32",
4
4
  "description": "Codex plugin that injects project rule files into model context through lifecycle hooks.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -8,7 +8,7 @@
8
8
  "type": "command",
9
9
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-tool-use",
10
10
  "timeout": 10,
11
- "statusMessage": "(OmO 5.0.0-beta.31) Checking Thread Title Hygiene"
11
+ "statusMessage": "(OmO 5.0.0-beta.32) Checking Thread Title Hygiene"
12
12
  }
13
13
  ]
14
14
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sisyphuslabs/codex-teammode",
3
- "version": "5.0.0-beta.31",
3
+ "version": "5.0.0-beta.32",
4
4
  "description": "Codex team-mode hook component that keeps background thread titles descriptive after create_thread.",
5
5
  "type": "module",
6
6
  "private": true,
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook session-start",
9
9
  "timeout": 5,
10
- "statusMessage": "(OmO 5.0.0-beta.31) Recording Session Telemetry"
10
+ "statusMessage": "(OmO 5.0.0-beta.32) Recording Session Telemetry"
11
11
  }
12
12
  ]
13
13
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-telemetry",
3
- "version": "5.0.0-beta.31",
3
+ "version": "5.0.0-beta.32",
4
4
  "description": "Codex plugin component that emits omo-codex anonymous daily-active telemetry on SessionStart.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -16,8 +16,9 @@ Conventions for human contributors and AI agents working on this repository.
16
16
  - `src/cli.ts`: `UserPromptSubmit` hook CLI. Reads JSON on stdin, writes a compact `<ultrawork-mode>` skill pointer to stdout when the keyword matches (full directive as fallback), exits 0 otherwise.
17
17
  - `src/codex-hook.ts`: pure detector/hook behavior; skips on context-pressure/recovery transcripts and when the directive is already in the transcript.
18
18
  - `src/skill-pointer.ts`: `buildUltraworkAdditionalContext()`: emits the <4096-byte pointer (Codex App truncates large hook output) directing the model to `create_goal` then read the bundled `ultrawork` skill; falls back to the full `ULTRAWORK_DIRECTIVE` when the plugin skills tree is absent. Pointer size + `ulw-loop` mirror byte-identity pinned by `plugin/test/ultrawork-skill-pointer.test.mjs`.
19
- - `directive.md`: bundled ultrawork directive text.
20
- - `skills/ultrawork/SKILL.md`: full directive as a skill, generated by `scripts/sync-directive.mjs`; pinned byte-for-byte to `directive.md` by `test/directive-source.test.ts`. `plugin/scripts/sync-skills.mjs` materializes it into the aggregate `plugin/skills/` tree the pointer path targets.
19
+ - `src/directive-content.ts`: GENERATED bundled directive text (`export const ULTRAWORK_DIRECTIVE_TEXT`). Regenerate via `scripts/sync-directive.mjs`; freshness pinned to the canonical prompt by `test/directive-source.test.ts`. Checked in so a clean checkout builds without running generation.
20
+ - `scripts/sync-directive.mjs`: reads the canonical `packages/prompts-core/prompts/ultrawork/codex.md` and writes two checked-in artifacts: `src/directive-content.ts` and `../ulw-loop/directive.md` (ulw-loop is a separately published standalone package with no prompts-core dependency, so it bundles its own byte-identical copy).
21
+ - Aggregate `ultrawork` skill: `plugin/scripts/sync-skills.mjs` composes `plugin/skills/ultrawork/SKILL.md` by inlining the canonical prompt under skill frontmatter. It reads the canonical file DIRECTLY because `sync-skills` runs before `build-components` in the plugin build chain.
21
22
  - `skills/ulw-plan/`: dual-maintained copy of the ulw-plan skill (component copy wins over `packages/shared-skills/skills/ulw-plan/` in sync-skills; keep both in step by hand).
22
23
  - `agents/*.toml`: bundled Codex agent role files. Installed as regular files into `CODEX_HOME/agents/` by `src/cli/install-codex/link-cached-plugin-agents.ts` at install time. Public `sisyphuslabs` installs source them from Codex's installed-marketplace snapshot, not the versioned plugin cache, so they survive Codex auto-update cache pruning and temporary snapshot cleanup. No runtime `SessionStart` hook is involved.
23
24
  - `hooks/hooks.json`: registers the prompt-detector hook only.
@@ -27,9 +28,9 @@ Conventions for human contributors and AI agents working on this repository.
27
28
 
28
29
  - Never let the hook block a turn. Exit code is always 0.
29
30
  - Never make a network call from the hook.
30
- - Keep the directive in `directive.md`. Do not inline it into TypeScript files.
31
+ - The canonical directive lives in `packages/prompts-core/prompts/ultrawork/codex.md`. `src/directive-content.ts` is a GENERATED bundled artifact (regenerate via `scripts/sync-directive.mjs`; freshness enforced by `test/directive-source.test.ts`). Do not hand-edit `directive-content.ts`; do not read prompts-core from disk at runtime.
31
32
  - Keep bundled agent role prompts concise and model-specific; measure prompt length when changing them.
32
- - When editing `directive.md`, apply the `prompt-engineering` skill's entropy gate: every edit must reduce uncertainty per token. Re-measure character count before committing.
33
+ - When editing the canonical `packages/prompts-core/prompts/ultrawork/codex.md`, apply the `prompt-engineering` skill's entropy gate: every edit must reduce uncertainty per token. Re-measure character count before committing, and re-run `scripts/sync-directive.mjs` so the generated artifacts stay in step.
33
34
 
34
35
  ## Commands
35
36