oh-my-opencode 4.7.5 → 4.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (612) hide show
  1. package/.agents/command/get-unpublished-changes.md +35 -6
  2. package/.agents/command/omomomo.md +1 -1
  3. package/.agents/command/publish.md +13 -0
  4. package/.agents/command/security-research.md +0 -1
  5. package/.agents/skills/get-unpublished-changes/SKILL.md +21 -5
  6. package/.agents/skills/omomomo/SKILL.md +1 -2
  7. package/.agents/skills/opencode-qa/scripts/export-roundtrip.sh +57 -19
  8. package/.agents/skills/opencode-qa/scripts/lib/common.sh +19 -7
  9. package/.agents/skills/opencode-qa/scripts/sse-hook-probe.sh +3 -0
  10. package/.agents/skills/opencode-qa/scripts/tui-smoke.sh +1 -1
  11. package/.agents/skills/pre-publish-review/SKILL.md +24 -4
  12. package/.agents/skills/publish/SKILL.md +13 -0
  13. package/.agents/skills/remove-deadcode/SKILL.md +0 -1
  14. package/.agents/skills/security-research/SKILL.md +0 -1
  15. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-3/with_skill/outputs/code-changes.md +1 -1
  16. package/.agents/skills/work-with-pr-workspace/iteration-1/eval-3/without_skill/outputs/code-changes.md +2 -2
  17. package/.agents/skills/work-with-pr-workspace/iteration-1/review.html +1 -1
  18. package/.opencode/command/get-unpublished-changes.md +35 -6
  19. package/.opencode/command/omomomo.md +1 -1
  20. package/.opencode/command/publish.md +13 -0
  21. package/.opencode/command/security-research.md +0 -1
  22. package/.opencode/skills/pre-publish-review/SKILL.md +24 -4
  23. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-3/with_skill/outputs/code-changes.md +1 -1
  24. package/.opencode/skills/work-with-pr-workspace/iteration-1/eval-3/without_skill/outputs/code-changes.md +2 -2
  25. package/.opencode/skills/work-with-pr-workspace/iteration-1/review.html +1 -1
  26. package/README.ja.md +7 -7
  27. package/README.ko.md +9 -7
  28. package/README.md +14 -8
  29. package/README.ru.md +5 -5
  30. package/README.zh-cn.md +7 -7
  31. package/bin/oh-my-opencode.js +24 -1
  32. package/bin/oh-my-opencode.test.ts +79 -20
  33. package/dist/agents/hephaestus/agent.d.ts +1 -1
  34. package/dist/agents/kimi-tool-loop-guard.d.ts +1 -0
  35. package/dist/agents/momus.d.ts +1 -1
  36. package/dist/agents/sisyphus-agent-config.d.ts +4 -0
  37. package/dist/agents/sisyphus-agent-factory.d.ts +6 -0
  38. package/dist/agents/sisyphus-dynamic-prompt-builder.d.ts +2 -0
  39. package/dist/agents/sisyphus-dynamic-prompt-execution.d.ts +2 -0
  40. package/dist/agents/sisyphus-dynamic-prompt-exploration.d.ts +2 -0
  41. package/dist/agents/sisyphus-dynamic-prompt-role.d.ts +2 -0
  42. package/dist/agents/sisyphus-dynamic-prompt-sections.d.ts +18 -0
  43. package/dist/agents/sisyphus-dynamic-prompt-style.d.ts +2 -0
  44. package/dist/agents/sisyphus-dynamic-prompt.d.ts +3 -0
  45. package/dist/agents/sisyphus-gemini-fallback-overrides.d.ts +1 -0
  46. package/dist/agents/sisyphus-junior/agent.d.ts +1 -1
  47. package/dist/agents/sisyphus-junior/index.d.ts +0 -1
  48. package/dist/agents/sisyphus.d.ts +1 -6
  49. package/dist/agents/types.d.ts +14 -3
  50. package/dist/cli/cli-program.d.ts +3 -0
  51. package/dist/cli/doctor/checks/codex.d.ts +11 -0
  52. package/dist/cli/doctor/checks/dependencies.d.ts +1 -0
  53. package/dist/cli/doctor/checks/index.d.ts +3 -0
  54. package/dist/cli/doctor/checks/system.d.ts +4 -0
  55. package/dist/cli/doctor/constants.d.ts +1 -0
  56. package/dist/cli/doctor/doctor-target.d.ts +2 -0
  57. package/dist/cli/doctor/index.d.ts +1 -0
  58. package/dist/cli/doctor/types.d.ts +26 -0
  59. package/dist/cli/index.js +4426 -2200
  60. package/dist/cli/install-codex/codex-cache-bins.d.ts +21 -0
  61. package/dist/cli/install-codex/codex-cache-fs.d.ts +3 -0
  62. package/dist/cli/install-codex/codex-cache-install.d.ts +13 -0
  63. package/dist/cli/install-codex/codex-cache-mcp-manifest.d.ts +2 -0
  64. package/dist/cli/install-codex/codex-cache-prune.d.ts +10 -0
  65. package/dist/cli/install-codex/codex-cache.d.ts +4 -32
  66. package/dist/cli/install-codex/codex-cached-marketplace-manifest.d.ts +6 -0
  67. package/dist/cli/install-codex/codex-config-agents.d.ts +3 -0
  68. package/dist/cli/install-codex/codex-config-features.d.ts +1 -0
  69. package/dist/cli/install-codex/codex-config-marketplaces.d.ts +6 -0
  70. package/dist/cli/install-codex/codex-config-plugins.d.ts +8 -0
  71. package/dist/cli/install-codex/codex-config-toml-sections.d.ts +9 -0
  72. package/dist/cli/install-codex/codex-process.d.ts +5 -0
  73. package/dist/cli/install-codex/index.d.ts +1 -1
  74. package/dist/cli/install-codex/lazycodex-version-stamp.d.ts +19 -0
  75. package/dist/cli/install-codex/link-cached-plugin-agents.d.ts +4 -0
  76. package/dist/cli/install-validators.d.ts +3 -0
  77. package/dist/cli/model-fallback-types.d.ts +3 -0
  78. package/dist/cli/run/event-handlers.d.ts +4 -11
  79. package/dist/cli/run/event-message-handlers.d.ts +5 -0
  80. package/dist/cli/run/event-session-handlers.d.ts +5 -0
  81. package/dist/cli/run/event-session-ids.d.ts +24 -0
  82. package/dist/cli/run/event-think-block.d.ts +3 -0
  83. package/dist/cli/run/event-toast-handlers.d.ts +3 -0
  84. package/dist/cli/run/event-tool-handlers.d.ts +4 -0
  85. package/dist/cli/run/event-tool-output.d.ts +2 -0
  86. package/dist/cli/run/on-complete-hook.d.ts +8 -1
  87. package/dist/cli/run/opencode-binary-resolver.d.ts +2 -1
  88. package/dist/cli/runtime-commands.d.ts +2 -0
  89. package/dist/cli/sparkshell-appserver-websocket.d.ts +4 -0
  90. package/dist/cli/sparkshell-appserver.d.ts +16 -0
  91. package/dist/cli/sparkshell-parse.d.ts +21 -0
  92. package/dist/cli/sparkshell.d.ts +26 -0
  93. package/dist/cli/types.d.ts +9 -0
  94. package/dist/config/schema/claude-code.d.ts +1 -0
  95. package/dist/config/schema/hooks.d.ts +1 -0
  96. package/dist/config/schema/oh-my-opencode-config.d.ts +1 -0
  97. package/dist/create-hooks.d.ts +1 -0
  98. package/dist/features/background-agent/concurrency.d.ts +6 -1
  99. package/dist/features/background-agent/constants.d.ts +1 -0
  100. package/dist/features/background-agent/empty-assistant-turn.d.ts +7 -0
  101. package/dist/features/background-agent/manager.d.ts +12 -0
  102. package/dist/features/background-agent/message-updated-parent-wake-output.d.ts +1 -0
  103. package/dist/features/background-agent/parent-wake-dedupe.d.ts +2 -0
  104. package/dist/features/background-agent/parent-wake-dispatched-tracker.d.ts +21 -0
  105. package/dist/features/background-agent/parent-wake-flush-runner.d.ts +24 -0
  106. package/dist/features/background-agent/parent-wake-history-state.d.ts +5 -0
  107. package/dist/features/background-agent/parent-wake-notifier-types.d.ts +50 -0
  108. package/dist/features/background-agent/parent-wake-notifier.d.ts +8 -50
  109. package/dist/features/background-agent/parent-wake-pending-queue.d.ts +22 -0
  110. package/dist/features/background-agent/parent-wake-prompt-dispatch.d.ts +19 -0
  111. package/dist/features/background-agent/parent-wake-session-history.d.ts +73 -0
  112. package/dist/features/background-agent/parent-wake-session-inspector.d.ts +35 -0
  113. package/dist/features/background-agent/parent-wake-timer-handle.d.ts +5 -0
  114. package/dist/features/background-agent/parent-wake-window-recovery.d.ts +13 -0
  115. package/dist/features/background-agent/process-cleanup.d.ts +2 -0
  116. package/dist/features/background-agent/process-cleanup.test-helpers.d.ts +3 -0
  117. package/dist/features/background-agent/session-stream-activity.d.ts +6 -0
  118. package/dist/features/background-agent/spawner/fallback-agent.d.ts +5 -0
  119. package/dist/features/background-agent/spawner/task-prompt-body.d.ts +34 -0
  120. package/dist/features/background-agent/spawner/task-record.d.ts +2 -0
  121. package/dist/features/background-agent/spawner.d.ts +2 -5
  122. package/dist/features/builtin-commands/templates/refactor-sections/codemap-and-tests.d.ts +1 -0
  123. package/dist/features/builtin-commands/templates/refactor-sections/intro-and-analysis.d.ts +1 -0
  124. package/dist/features/builtin-commands/templates/refactor-sections/plan-and-execution.d.ts +1 -0
  125. package/dist/features/builtin-commands/templates/refactor-sections/team-mode-addendum.d.ts +1 -0
  126. package/dist/features/builtin-commands/templates/refactor-sections/verification-and-tooling.d.ts +1 -0
  127. package/dist/features/builtin-commands/templates/refactor.d.ts +2 -2
  128. package/dist/features/builtin-skills/skills/agent-browser-skill.d.ts +2 -0
  129. package/dist/features/builtin-skills/skills/agent-browser-template.d.ts +2 -0
  130. package/dist/features/builtin-skills/skills/git-master-sections/commit-atomic-planning.d.ts +1 -0
  131. package/dist/features/builtin-skills/skills/git-master-sections/commit-context-analysis.d.ts +1 -0
  132. package/dist/features/builtin-skills/skills/git-master-sections/commit-execution-verification.d.ts +1 -0
  133. package/dist/features/builtin-skills/skills/git-master-sections/commit-workflow.d.ts +1 -1
  134. package/dist/features/builtin-skills/skills/index.d.ts +1 -0
  135. package/dist/features/builtin-skills/skills/playwright-mcp-skill.d.ts +2 -0
  136. package/dist/features/builtin-skills/skills/playwright.d.ts +2 -3
  137. package/dist/features/builtin-skills/skills/visual-qa.d.ts +2 -0
  138. package/dist/features/claude-code-agent-loader/agent-definitions-loader.d.ts +2 -2
  139. package/dist/features/claude-code-agent-loader/claude-model-mapper.d.ts +1 -1
  140. package/dist/features/claude-code-agent-loader/loader.d.ts +2 -2
  141. package/dist/features/claude-code-plugin-loader/agent-loader.d.ts +1 -1
  142. package/dist/features/claude-code-plugin-loader/discovery-core.d.ts +2 -0
  143. package/dist/features/claude-code-plugin-loader/discovery-paths.d.ts +3 -0
  144. package/dist/features/claude-code-plugin-loader/discovery.d.ts +3 -4
  145. package/dist/features/claude-code-plugin-loader/install-path-resolver.d.ts +1 -0
  146. package/dist/features/claude-code-plugin-loader/installed-plugin-database.d.ts +3 -0
  147. package/dist/features/claude-code-plugin-loader/loaded-plugin.d.ts +2 -0
  148. package/dist/features/claude-code-plugin-loader/plugin-key.d.ts +1 -0
  149. package/dist/features/claude-code-plugin-loader/plugin-manifest.d.ts +4 -0
  150. package/dist/features/claude-code-plugin-loader/plugin-settings.d.ts +3 -0
  151. package/dist/features/claude-code-plugin-loader/types.d.ts +1 -0
  152. package/dist/features/hook-message-injector/context-resolver.d.ts +6 -0
  153. package/dist/features/hook-message-injector/id-generation.d.ts +2 -0
  154. package/dist/features/hook-message-injector/index.d.ts +1 -1
  155. package/dist/features/hook-message-injector/injector.d.ts +7 -69
  156. package/dist/features/hook-message-injector/json-message-lookup.d.ts +3 -0
  157. package/dist/features/hook-message-injector/message-directory.d.ts +1 -0
  158. package/dist/features/hook-message-injector/message-injection.d.ts +2 -0
  159. package/dist/features/hook-message-injector/sdk-message-context.d.ts +6 -0
  160. package/dist/features/hook-message-injector/sdk-message-lookup.d.ts +28 -0
  161. package/dist/features/hook-message-injector/types.d.ts +9 -0
  162. package/dist/features/mcp-oauth/callback-server.d.ts +10 -2
  163. package/dist/features/opencode-runtime-skills/source-server.d.ts +1 -0
  164. package/dist/features/skill-mcp-manager/http-client.d.ts +2 -0
  165. package/dist/features/team-mode/deps.d.ts +8 -1
  166. package/dist/features/team-mode/team-layout-tmux/layout.d.ts +2 -0
  167. package/dist/features/team-mode/team-mailbox/send.d.ts +3 -0
  168. package/dist/features/team-mode/team-registry/paths.d.ts +17 -2
  169. package/dist/features/team-mode/team-runtime/shutdown.d.ts +1 -1
  170. package/dist/features/team-mode/team-runtime/unresolved-team-members.d.ts +3 -0
  171. package/dist/features/team-mode/team-state-store/active-resume.d.ts +5 -0
  172. package/dist/features/team-mode/team-state-store/creating-resume.d.ts +4 -0
  173. package/dist/features/team-mode/team-state-store/deleting-resume.d.ts +4 -0
  174. package/dist/features/team-mode/team-state-store/error-normalization.d.ts +2 -0
  175. package/dist/features/team-mode/team-state-store/reservation-reconciliation.d.ts +4 -0
  176. package/dist/features/team-mode/team-state-store/resume-report.d.ts +7 -0
  177. package/dist/features/team-mode/team-state-store/resume.d.ts +2 -7
  178. package/dist/features/team-mode/team-state-store/runtime-cleanup.d.ts +4 -0
  179. package/dist/features/team-mode/team-state-store/session-liveness.d.ts +9 -0
  180. package/dist/features/team-mode/team-state-store/worker-resume-status.d.ts +9 -0
  181. package/dist/features/team-mode/tools/lifecycle-create-tool.d.ts +17 -0
  182. package/dist/features/team-mode/tools/lifecycle-inline-spec.d.ts +19 -0
  183. package/dist/features/team-mode/tools/lifecycle-participant.d.ts +25 -0
  184. package/dist/features/team-mode/tools/lifecycle-shutdown-tools.d.ts +18 -0
  185. package/dist/features/team-mode/tools/lifecycle-test-fixture.d.ts +3 -3
  186. package/dist/features/team-mode/tools/lifecycle.d.ts +3 -37
  187. package/dist/features/team-mode/tools/messaging-live-delivery-client.d.ts +25 -0
  188. package/dist/features/team-mode/tools/messaging-live-delivery-recipient.d.ts +19 -0
  189. package/dist/features/team-mode/tools/messaging-live-delivery-reservation.d.ts +10 -0
  190. package/dist/features/team-mode/tools/messaging-live-delivery-state.d.ts +5 -0
  191. package/dist/features/team-mode/tools/messaging-live-delivery.d.ts +6 -0
  192. package/dist/features/team-mode/tools/messaging-runtime.d.ts +17 -0
  193. package/dist/features/team-mode/tools/messaging.d.ts +4 -29
  194. package/dist/features/tmux-subagent/manager.d.ts +20 -1
  195. package/dist/features/tmux-subagent/session-created-handler.d.ts +4 -0
  196. package/dist/features/tmux-subagent/types.d.ts +1 -0
  197. package/dist/hooks/anthropic-context-window-limit-recovery/message-builder.d.ts +1 -1
  198. package/dist/hooks/atlas/idle-completion-nudge.d.ts +10 -0
  199. package/dist/hooks/atlas/idle-constants.d.ts +4 -0
  200. package/dist/hooks/atlas/idle-continuation.d.ts +23 -0
  201. package/dist/hooks/atlas/idle-session-eligibility.d.ts +8 -0
  202. package/dist/hooks/atlas/tool-execute-after-direct-work.d.ts +9 -0
  203. package/dist/hooks/atlas/tool-execute-after-plan-tasks.d.ts +3 -0
  204. package/dist/hooks/atlas/tool-execute-after-subagent-completion.d.ts +14 -0
  205. package/dist/hooks/auto-update-checker/hook/background-update-check.d.ts +6 -0
  206. package/dist/hooks/auto-update-checker/hook/ignore-toast-error.d.ts +1 -0
  207. package/dist/hooks/hephaestus-agents-md-injector/hook.d.ts +37 -0
  208. package/dist/hooks/hephaestus-agents-md-injector/index.d.ts +1 -0
  209. package/dist/hooks/index.d.ts +1 -0
  210. package/dist/hooks/json-error-recovery/hook.d.ts +1 -1
  211. package/dist/hooks/ralph-loop/command-arguments.d.ts +1 -0
  212. package/dist/hooks/ralph-loop/event-handler-activity.d.ts +10 -0
  213. package/dist/hooks/ralph-loop/event-handler-completion.d.ts +9 -0
  214. package/dist/hooks/ralph-loop/event-handler-continuation.d.ts +16 -0
  215. package/dist/hooks/ralph-loop/event-handler-feedback.d.ts +16 -0
  216. package/dist/hooks/ralph-loop/event-handler-idle.d.ts +15 -0
  217. package/dist/hooks/ralph-loop/event-handler-impl.d.ts +10 -0
  218. package/dist/hooks/ralph-loop/event-handler-runtime-error.d.ts +4 -0
  219. package/dist/hooks/ralph-loop/event-handler-types.d.ts +20 -0
  220. package/dist/hooks/ralph-loop/loop-state-controller.d.ts +1 -0
  221. package/dist/hooks/ralph-loop/ralph-loop-event-handler.d.ts +4 -24
  222. package/dist/hooks/ralph-loop/ralph-loop-hook.d.ts +1 -0
  223. package/dist/hooks/read-image-resizer/png-chunks.d.ts +6 -0
  224. package/dist/hooks/read-image-resizer/png-constants.d.ts +1 -0
  225. package/dist/hooks/read-image-resizer/png-crc.d.ts +1 -0
  226. package/dist/hooks/read-image-resizer/png-decoder.d.ts +1 -0
  227. package/dist/hooks/read-image-resizer/png-encoder.d.ts +1 -0
  228. package/dist/hooks/read-image-resizer/png-filters.d.ts +1 -0
  229. package/dist/hooks/read-image-resizer/png-ihdr.d.ts +11 -0
  230. package/dist/hooks/read-image-resizer/png-nearest-neighbor.d.ts +1 -0
  231. package/dist/hooks/rules-injector/injection-output.d.ts +2 -0
  232. package/dist/hooks/rules-injector/injection-processor.d.ts +22 -0
  233. package/dist/hooks/rules-injector/injection-types.d.ts +43 -0
  234. package/dist/hooks/rules-injector/injector.d.ts +3 -47
  235. package/dist/hooks/rules-injector/match-decision-cache.d.ts +4 -0
  236. package/dist/hooks/rules-injector/parsed-rule-cache.d.ts +11 -0
  237. package/dist/hooks/rules-injector/path-resolution.d.ts +1 -0
  238. package/dist/hooks/rules-injector/rule-match-reason.d.ts +12 -0
  239. package/dist/hooks/rules-injector/transcript-hydration.d.ts +13 -2
  240. package/dist/hooks/runtime-fallback/auto-retry-abort.d.ts +2 -0
  241. package/dist/hooks/runtime-fallback/auto-retry-agent-context.d.ts +2 -0
  242. package/dist/hooks/runtime-fallback/auto-retry-cleanup.d.ts +2 -0
  243. package/dist/hooks/runtime-fallback/auto-retry-dispatch.d.ts +2 -0
  244. package/dist/hooks/runtime-fallback/auto-retry-metadata.d.ts +9 -0
  245. package/dist/hooks/runtime-fallback/auto-retry-timeout.d.ts +5 -0
  246. package/dist/hooks/runtime-fallback/fallback-bootstrap-model.d.ts +1 -1
  247. package/dist/hooks/runtime-fallback/fallback-state.d.ts +4 -1
  248. package/dist/hooks/runtime-fallback/normalize-model.d.ts +12 -0
  249. package/dist/hooks/session-notification-linux.d.ts +3 -0
  250. package/dist/hooks/session-notification-log.d.ts +2 -0
  251. package/dist/hooks/session-notification-macos.d.ts +3 -0
  252. package/dist/hooks/session-notification-platform.d.ts +3 -0
  253. package/dist/hooks/session-notification-runner.d.ts +9 -0
  254. package/dist/hooks/session-notification-send.d.ts +3 -0
  255. package/dist/hooks/session-notification-sender.d.ts +5 -6
  256. package/dist/hooks/session-notification-sound.d.ts +3 -0
  257. package/dist/hooks/session-notification-windows.d.ts +3 -0
  258. package/dist/hooks/session-recovery/error-recovery.d.ts +4 -0
  259. package/dist/hooks/session-recovery/hook-types.d.ts +22 -0
  260. package/dist/hooks/session-recovery/hook.d.ts +2 -19
  261. package/dist/hooks/session-recovery/interrupted-tool-results.d.ts +3 -0
  262. package/dist/hooks/session-recovery/message-state.d.ts +4 -0
  263. package/dist/hooks/session-recovery/storage/thinking-strip.d.ts +7 -1
  264. package/dist/hooks/start-work/context-info-builder.d.ts +9 -9
  265. package/dist/hooks/start-work/context-info-formatters.d.ts +21 -0
  266. package/dist/hooks/start-work/explicit-plan-context.d.ts +9 -0
  267. package/dist/hooks/start-work/plan-discovery-context.d.ts +25 -0
  268. package/dist/hooks/start-work/plan-selection.d.ts +4 -0
  269. package/dist/hooks/start-work/work-initializer.d.ts +17 -0
  270. package/dist/hooks/tool-pair-validator/hook.d.ts +1 -37
  271. package/dist/hooks/tool-pair-validator/message-transform.d.ts +2 -0
  272. package/dist/hooks/tool-pair-validator/tool-part-ids.d.ts +6 -0
  273. package/dist/hooks/tool-pair-validator/tool-result-repair.d.ts +4 -0
  274. package/dist/hooks/tool-pair-validator/types.d.ts +36 -0
  275. package/dist/index.js +12708 -9988
  276. package/dist/oh-my-opencode.schema.json +4 -0
  277. package/dist/openclaw/reply-listener-poll-loop.d.ts +3 -0
  278. package/dist/openclaw/reply-listener-signature.d.ts +2 -0
  279. package/dist/openclaw/reply-listener-sleep.d.ts +1 -0
  280. package/dist/openclaw/reply-listener-start.d.ts +9 -0
  281. package/dist/openclaw/reply-listener-status.d.ts +4 -0
  282. package/dist/openclaw/reply-listener-stop.d.ts +7 -0
  283. package/dist/openclaw/reply-listener.d.ts +5 -18
  284. package/dist/openclaw/session-registry-lock.d.ts +2 -0
  285. package/dist/openclaw/session-registry-paths.d.ts +9 -0
  286. package/dist/openclaw/session-registry-storage.d.ts +4 -0
  287. package/dist/openclaw/session-registry-types.d.ts +11 -0
  288. package/dist/openclaw/session-registry.d.ts +2 -11
  289. package/dist/plugin/chat-message/loop-commands.d.ts +9 -0
  290. package/dist/plugin/chat-message/model-cache-warning.d.ts +12 -0
  291. package/dist/plugin/chat-message/prompt-text.d.ts +2 -0
  292. package/dist/plugin/chat-message/session-model.d.ts +4 -0
  293. package/dist/plugin/chat-message/start-work-message.d.ts +5 -0
  294. package/dist/plugin/chat-message/types.d.ts +67 -0
  295. package/dist/plugin/chat-message.d.ts +3 -24
  296. package/dist/plugin/event-error-utils.d.ts +14 -0
  297. package/dist/plugin/event-hook-dispatcher.d.ts +5 -0
  298. package/dist/plugin/event-model-fallback-state.d.ts +30 -0
  299. package/dist/plugin/event-model-fallback.d.ts +39 -0
  300. package/dist/plugin/event-session-lifecycle.d.ts +49 -0
  301. package/dist/plugin/event-session-recovery.d.ts +9 -0
  302. package/dist/plugin/event-team-handlers.d.ts +13 -0
  303. package/dist/plugin/event-types.d.ts +78 -0
  304. package/dist/plugin/event.d.ts +3 -12
  305. package/dist/plugin/hooks/create-core-hooks.d.ts +1 -0
  306. package/dist/plugin/hooks/create-session-hooks.d.ts +2 -1
  307. package/dist/plugin/hooks/model-fallback-title-updater.d.ts +8 -0
  308. package/dist/plugin/session-compacting.d.ts +4 -1
  309. package/dist/plugin/system-transform.d.ts +1 -1
  310. package/dist/plugin/tool-execute-after.d.ts +2 -0
  311. package/dist/plugin/tool-registry-core-tools.d.ts +15 -0
  312. package/dist/plugin/tool-registry-factories.d.ts +36 -0
  313. package/dist/plugin/tool-registry-gated-tools.d.ts +16 -0
  314. package/dist/plugin/tool-registry-team-tools.d.ts +14 -0
  315. package/dist/plugin/tool-registry-trimming.d.ts +2 -0
  316. package/dist/plugin/tool-registry.d.ts +3 -38
  317. package/dist/plugin/ultrawork-db-model-override.d.ts +1 -1
  318. package/dist/plugin-config/agent-order-warnings.d.ts +1 -0
  319. package/dist/plugin-config/config-merger.d.ts +2 -0
  320. package/dist/plugin-config/layered-config-loader.d.ts +2 -0
  321. package/dist/plugin-config/single-config-loader.d.ts +4 -0
  322. package/dist/plugin-config.d.ts +3 -5
  323. package/dist/plugin-handlers/agent-config-assembly.d.ts +19 -0
  324. package/dist/plugin-handlers/agent-config-finalizer.d.ts +4 -0
  325. package/dist/plugin-handlers/agent-config-handler.d.ts +2 -11
  326. package/dist/plugin-handlers/agent-config-types.d.ts +30 -0
  327. package/dist/plugin-handlers/agent-skill-discovery.d.ts +3 -0
  328. package/dist/plugin-handlers/agent-source-loader.d.ts +2 -0
  329. package/dist/plugin-handlers/hook-config-handler.d.ts +0 -3
  330. package/dist/shared/context-window-usage.d.ts +7 -0
  331. package/dist/shared/dynamic-truncator-types.d.ts +17 -0
  332. package/dist/shared/dynamic-truncator.d.ts +8 -23
  333. package/dist/shared/migration/migrations-sidecar.d.ts +2 -2
  334. package/dist/shared/migration/model-versions.d.ts +7 -4
  335. package/dist/shared/model-availability.d.ts +1 -1
  336. package/dist/shared/opencode-version.d.ts +2 -2
  337. package/dist/shared/sparkshell-awareness.d.ts +5 -0
  338. package/dist/shared/spawn-with-windows-hide.d.ts +2 -0
  339. package/dist/shared/token-limit-truncator.d.ts +2 -0
  340. package/dist/testing/module-mock-lifecycle.d.ts +8 -0
  341. package/dist/tools/delegate-task/openai-categories.d.ts +0 -1
  342. package/dist/tools/delegate-task/subagent-agent-match.d.ts +3 -0
  343. package/dist/tools/delegate-task/subagent-model-resolution.d.ts +4 -0
  344. package/dist/tools/delegate-task/subagent-request-preflight.d.ts +3 -0
  345. package/dist/tools/delegate-task/subagent-resolution-types.d.ts +32 -0
  346. package/dist/tools/delegate-task/subagent-resolver.d.ts +3 -12
  347. package/dist/tools/delegate-task/sync-completion-message.d.ts +20 -0
  348. package/dist/tools/delegate-task/sync-poll-error-recovery.d.ts +1 -0
  349. package/dist/tools/delegate-task/sync-session-lifecycle.d.ts +12 -0
  350. package/dist/tools/delegate-task/sync-session-poller.d.ts +2 -0
  351. package/dist/tools/delegate-task/sync-spawn-reservation.d.ts +10 -0
  352. package/dist/tools/delegate-task/sync-task-metadata.d.ts +11 -0
  353. package/dist/tools/delegate-task/sync-task-runner.d.ts +30 -0
  354. package/dist/tools/delegate-task/sync-task.d.ts +2 -1
  355. package/dist/tools/hashline-edit/formatter-trigger.d.ts +2 -2
  356. package/package.json +15 -14
  357. package/packages/git-bash-mcp/dist/cli.js +29 -12
  358. package/packages/lsp-tools-mcp/dist/lsp/client-wrapper.d.ts +1 -1
  359. package/packages/lsp-tools-mcp/dist/lsp/client-wrapper.js +1 -1
  360. package/packages/lsp-tools-mcp/dist/lsp/config-loader.js +95 -30
  361. package/packages/lsp-tools-mcp/dist/lsp/server-installation.d.ts +1 -2
  362. package/packages/lsp-tools-mcp/dist/lsp/server-installation.js +1 -11
  363. package/packages/lsp-tools-mcp/dist/lsp/transport.d.ts +1 -0
  364. package/packages/lsp-tools-mcp/dist/lsp/transport.js +5 -10
  365. package/packages/lsp-tools-mcp/dist/lsp/workspace-edit.d.ts +4 -1
  366. package/packages/lsp-tools-mcp/dist/lsp/workspace-edit.js +84 -23
  367. package/packages/lsp-tools-mcp/dist/missing-dependency-result.d.ts +2 -0
  368. package/packages/lsp-tools-mcp/dist/missing-dependency-result.js +14 -0
  369. package/packages/lsp-tools-mcp/dist/tools.js +64 -80
  370. package/packages/lsp-tools-mcp/package.json +4 -4
  371. package/packages/omo-codex/lazycodex-repository/.github/workflows/pr-source-guidance.yml +36 -0
  372. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  373. package/packages/omo-codex/plugin/README.md +3 -1
  374. package/packages/omo-codex/plugin/components/comment-checker/src/apply-patch.ts +188 -0
  375. package/packages/omo-codex/plugin/components/comment-checker/src/core-values.ts +1 -0
  376. package/packages/omo-codex/plugin/components/comment-checker/src/core.ts +15 -361
  377. package/packages/omo-codex/plugin/components/comment-checker/src/hook-input.ts +19 -0
  378. package/packages/omo-codex/plugin/components/comment-checker/src/record.ts +11 -0
  379. package/packages/omo-codex/plugin/components/comment-checker/src/request-extractor.ts +102 -0
  380. package/packages/omo-codex/plugin/components/comment-checker/src/types.ts +51 -0
  381. package/packages/omo-codex/plugin/components/comment-checker/test/codex-hook.test.ts +145 -0
  382. package/packages/omo-codex/plugin/components/comment-checker/test/core.test.ts +200 -0
  383. package/packages/omo-codex/plugin/components/lsp/CHANGELOG.md +2 -2
  384. package/packages/omo-codex/plugin/components/rules/bundled-rules/hephaestus.md +11 -5
  385. package/packages/omo-codex/plugin/components/rules/src/hook-output.ts +11 -1
  386. package/packages/omo-codex/plugin/components/rules/src/post-compact-budget.ts +0 -1
  387. package/packages/omo-codex/plugin/components/rules/src/rules/constants.ts +1 -4
  388. package/packages/omo-codex/plugin/components/rules/src/rules/engine-dynamic-cache.ts +87 -0
  389. package/packages/omo-codex/plugin/components/rules/src/rules/engine-dynamic-loader.ts +94 -0
  390. package/packages/omo-codex/plugin/components/rules/src/rules/engine-loader.ts +84 -0
  391. package/packages/omo-codex/plugin/components/rules/src/rules/engine-paths.ts +103 -0
  392. package/packages/omo-codex/plugin/components/rules/src/rules/engine-static-loader.ts +43 -0
  393. package/packages/omo-codex/plugin/components/rules/src/rules/engine-types.ts +45 -0
  394. package/packages/omo-codex/plugin/components/rules/src/rules/engine.ts +8 -419
  395. package/packages/omo-codex/plugin/components/rules/src/rules/formatter.ts +32 -5
  396. package/packages/omo-codex/plugin/components/rules/src/rules/parser-frontmatter.ts +39 -0
  397. package/packages/omo-codex/plugin/components/rules/src/rules/parser-yaml.ts +271 -0
  398. package/packages/omo-codex/plugin/components/rules/src/rules/parser.ts +3 -294
  399. package/packages/omo-codex/plugin/components/rules/src/sparkshell-awareness.ts +57 -0
  400. package/packages/omo-codex/plugin/components/rules/src/static-injection.ts +13 -2
  401. package/packages/omo-codex/plugin/components/rules/src/transcript-rule-filter.ts +17 -0
  402. package/packages/omo-codex/plugin/components/rules/test/bundled-rules-priority.test.ts +2 -1
  403. package/packages/omo-codex/plugin/components/rules/test/bundled-rules.test.ts +26 -11
  404. package/packages/omo-codex/plugin/components/rules/test/codex-hook-context-pressure.test.ts +104 -138
  405. package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-budget.test.ts +5 -2
  406. package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-context.test.ts +12 -5
  407. package/packages/omo-codex/plugin/components/rules/test/codex-hook.test.ts +10 -4
  408. package/packages/omo-codex/plugin/components/rules/test/engine.test.ts +65 -3
  409. package/packages/omo-codex/plugin/components/rules/test/formatter.test.ts +47 -2
  410. package/packages/omo-codex/plugin/components/rules/test/hook-output.test.ts +16 -0
  411. package/packages/omo-codex/plugin/components/rules/test/parser.test.ts +153 -0
  412. package/packages/omo-codex/plugin/components/rules/test/post-compact-budget.test.ts +12 -0
  413. package/packages/omo-codex/plugin/components/rules/test/sparkshell-awareness.test.ts +236 -0
  414. package/packages/omo-codex/plugin/components/rules/test/tool-paths.test.ts +28 -50
  415. package/packages/omo-codex/plugin/components/rules/test/windows-git-bash-bundled-rule.test.ts +6 -3
  416. package/packages/omo-codex/plugin/components/start-work-continuation/directive.md +13 -6
  417. package/packages/omo-codex/plugin/components/start-work-continuation/src/codex-hook.ts +21 -0
  418. package/packages/omo-codex/plugin/components/start-work-continuation/test/codex-hook.test.ts +64 -2
  419. package/packages/omo-codex/plugin/components/telemetry/README.md +11 -1
  420. package/packages/omo-codex/plugin/components/telemetry/biome.json +12 -0
  421. package/packages/omo-codex/plugin/components/telemetry/src/codex-hook.ts +30 -3
  422. package/packages/omo-codex/plugin/components/telemetry/src/diagnostics.ts +154 -0
  423. package/packages/omo-codex/plugin/components/telemetry/src/posthog-activity-state.ts +18 -2
  424. package/packages/omo-codex/plugin/components/telemetry/src/posthog.ts +36 -4
  425. package/packages/omo-codex/plugin/components/telemetry/test/codex-hook-diagnostics.test.ts +115 -0
  426. package/packages/omo-codex/plugin/components/telemetry/test/codex-hook.test.ts +16 -25
  427. package/packages/omo-codex/plugin/components/telemetry/test/diagnostics.test.ts +119 -0
  428. package/packages/omo-codex/plugin/components/ultrawork/AGENTS.md +1 -1
  429. package/packages/omo-codex/plugin/components/ultrawork/README.md +5 -5
  430. package/packages/omo-codex/plugin/components/ultrawork/agents/codex-ultrawork-reviewer.toml +2 -1
  431. package/packages/omo-codex/plugin/components/ultrawork/agents/explorer.toml +1 -0
  432. package/packages/omo-codex/plugin/components/ultrawork/agents/metis.toml +0 -1
  433. package/packages/omo-codex/plugin/components/ultrawork/agents/momus.toml +0 -1
  434. package/packages/omo-codex/plugin/components/ultrawork/agents/plan.toml +1 -2
  435. package/packages/omo-codex/plugin/components/ultrawork/directive.md +97 -32
  436. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/SKILL.md +65 -0
  437. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/agents/openai.yaml +7 -0
  438. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/full-workflow.md +131 -0
  439. package/packages/omo-codex/plugin/components/ultrawork/test/codex-hook.test.ts +38 -10
  440. package/packages/omo-codex/plugin/components/ultrawork/test/directive-contract.test.ts +18 -0
  441. package/packages/omo-codex/plugin/components/ultrawork/test/package-smoke.test.ts +47 -0
  442. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  443. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/SKILL.md +12 -8
  444. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +28 -21
  445. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-instruction.ts +2 -3
  446. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-hook.ts +7 -7
  447. package/packages/omo-codex/plugin/components/ulw-loop/src/command-types.ts +36 -0
  448. package/packages/omo-codex/plugin/components/ulw-loop/src/constants.ts +64 -0
  449. package/packages/omo-codex/plugin/components/ulw-loop/src/domain-types.ts +98 -0
  450. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-crud.ts +17 -2
  451. package/packages/omo-codex/plugin/components/ulw-loop/src/runtime.ts +22 -0
  452. package/packages/omo-codex/plugin/components/ulw-loop/src/steering-types.ts +69 -0
  453. package/packages/omo-codex/plugin/components/ulw-loop/src/types.ts +5 -277
  454. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-commands.test.ts +35 -13
  455. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-complete-goals.test.ts +52 -0
  456. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-steering.test.ts +67 -111
  457. package/packages/omo-codex/plugin/components/ulw-loop/test/codex-goal-instruction.test.ts +2 -2
  458. package/packages/omo-codex/plugin/components/ulw-loop/test/codex-hook.test.ts +31 -2
  459. package/packages/omo-codex/plugin/components/ulw-loop/test/package-smoke.test.ts +46 -9
  460. package/packages/omo-codex/plugin/components/ulw-loop/test/steering.test.ts +20 -29
  461. package/packages/omo-codex/plugin/model-catalog.json +5 -11
  462. package/packages/omo-codex/plugin/package-lock.json +1 -1
  463. package/packages/omo-codex/plugin/scripts/auto-update-state.mjs +78 -0
  464. package/packages/omo-codex/plugin/scripts/auto-update.mjs +166 -76
  465. package/packages/omo-codex/plugin/scripts/migrate-codex-config/catalog.mjs +71 -0
  466. package/packages/omo-codex/plugin/scripts/migrate-codex-config/config-paths.mjs +44 -0
  467. package/packages/omo-codex/plugin/scripts/migrate-codex-config/root-settings.mjs +74 -0
  468. package/packages/omo-codex/plugin/scripts/migrate-codex-config/state.mjs +29 -0
  469. package/packages/omo-codex/plugin/scripts/migrate-codex-config.mjs +14 -202
  470. package/packages/omo-codex/plugin/scripts/spawn-command.mjs +11 -0
  471. package/packages/omo-codex/plugin/scripts/sync-hook-status-messages.mjs +23 -9
  472. package/packages/omo-codex/plugin/scripts/sync-skills.mjs +131 -28
  473. package/packages/omo-codex/plugin/skills/debugging/references/methodology/04-oracle-triple.md +3 -3
  474. package/packages/omo-codex/plugin/skills/git-master/SKILL.md +100 -0
  475. package/packages/omo-codex/plugin/skills/git-master/agents/openai.yaml +13 -0
  476. package/packages/omo-codex/plugin/skills/init-deep/SKILL.md +9 -7
  477. package/packages/omo-codex/plugin/skills/lcx-contribute-bug-fix/SKILL.md +176 -0
  478. package/packages/omo-codex/plugin/skills/lcx-contribute-bug-fix/agents/openai.yaml +12 -0
  479. package/packages/omo-codex/plugin/skills/lcx-contribute-bug-fix/scripts/create-pr-body.mjs +107 -0
  480. package/packages/omo-codex/plugin/skills/lcx-report-bug/SKILL.md +119 -14
  481. package/packages/omo-codex/plugin/skills/lcx-report-bug/agents/openai.yaml +4 -2
  482. package/packages/omo-codex/plugin/skills/programming/references/go/concurrency.md +2 -2
  483. package/packages/omo-codex/plugin/skills/programming/references/python/async-anyio.md +6 -6
  484. package/packages/omo-codex/plugin/skills/programming/references/python/pydantic-ai.md +12 -12
  485. package/packages/omo-codex/plugin/skills/programming/references/typescript/backend-hono.md +7 -7
  486. package/packages/omo-codex/plugin/skills/refactor/SKILL.md +13 -11
  487. package/packages/omo-codex/plugin/skills/remove-ai-slops/SKILL.md +10 -8
  488. package/packages/omo-codex/plugin/skills/review-work/SKILL.md +68 -33
  489. package/packages/omo-codex/plugin/skills/start-work/SKILL.md +86 -22
  490. package/packages/omo-codex/plugin/skills/ultraresearch/SKILL.md +770 -0
  491. package/packages/omo-codex/plugin/skills/ulw-loop/SKILL.md +12 -8
  492. package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +28 -21
  493. package/packages/omo-codex/plugin/skills/ulw-plan/SKILL.md +45 -379
  494. package/packages/omo-codex/plugin/skills/ulw-plan/agents/openai.yaml +7 -0
  495. package/packages/omo-codex/plugin/skills/ulw-plan/references/full-workflow.md +131 -0
  496. package/packages/omo-codex/plugin/skills/visual-qa/SKILL.md +237 -0
  497. package/packages/omo-codex/plugin/skills/visual-qa/scripts/ansi.ts +17 -0
  498. package/packages/omo-codex/plugin/skills/visual-qa/scripts/cli.ts +82 -0
  499. package/packages/omo-codex/plugin/skills/visual-qa/scripts/east-asian-width.ts +72 -0
  500. package/packages/omo-codex/plugin/skills/visual-qa/scripts/image-diff.ts +109 -0
  501. package/packages/omo-codex/plugin/skills/visual-qa/scripts/png-crc.ts +27 -0
  502. package/packages/omo-codex/plugin/skills/visual-qa/scripts/png-decode.ts +206 -0
  503. package/packages/omo-codex/plugin/skills/visual-qa/scripts/png-synth.ts +57 -0
  504. package/packages/omo-codex/plugin/skills/visual-qa/scripts/tui-grid.ts +88 -0
  505. package/packages/omo-codex/plugin/skills/visual-qa/scripts/types.ts +54 -0
  506. package/packages/omo-codex/plugin/test/aggregate-agents.test.mjs +55 -0
  507. package/packages/omo-codex/plugin/test/aggregate-build.test.mjs +38 -0
  508. package/packages/omo-codex/plugin/test/aggregate-hooks.test.mjs +164 -0
  509. package/packages/omo-codex/plugin/test/aggregate-manifest.test.mjs +73 -0
  510. package/packages/omo-codex/plugin/test/aggregate-mcp.test.mjs +69 -0
  511. package/packages/omo-codex/plugin/test/aggregate-model-catalog.test.mjs +53 -0
  512. package/packages/omo-codex/plugin/test/aggregate-plugin-fixture.mjs +83 -0
  513. package/packages/omo-codex/plugin/test/aggregate-skills.test.mjs +67 -0
  514. package/packages/omo-codex/plugin/test/aggregate.test.mjs +2 -514
  515. package/packages/omo-codex/plugin/test/auto-update-state-persistence.test.mjs +36 -0
  516. package/packages/omo-codex/plugin/test/auto-update.test.mjs +191 -29
  517. package/packages/omo-codex/plugin/test/component-bin-names.test.mjs +1 -1
  518. package/packages/omo-codex/plugin/test/global-review-debug-gate.test.mjs +29 -0
  519. package/packages/omo-codex/plugin/test/hook-status-message.test.mjs +23 -10
  520. package/packages/omo-codex/plugin/test/lcx-bug-skills.test.mjs +81 -0
  521. package/packages/omo-codex/plugin/test/lcx-contribute-bug-fix-template.test.mjs +91 -0
  522. package/packages/omo-codex/plugin/test/migrate-codex-config.test.mjs +165 -9
  523. package/packages/omo-codex/plugin/test/node-install-surface.test.mjs +0 -19
  524. package/packages/omo-codex/plugin/test/start-work-skill.test.mjs +107 -0
  525. package/packages/omo-codex/plugin/test/subagent-guidance.test.mjs +82 -7
  526. package/packages/omo-codex/plugin/test/sync-hook-status-messages.test.mjs +58 -6
  527. package/packages/omo-codex/plugin/test/sync-skills-orchestration.test.mjs +152 -0
  528. package/packages/omo-codex/plugin/test/sync-skills.test.mjs +158 -50
  529. package/packages/omo-codex/plugin/test/ulw-plan-skill.test.mjs +43 -0
  530. package/packages/omo-codex/scripts/install/agent-source-roots.mjs +13 -0
  531. package/packages/omo-codex/scripts/install/agents.mjs +84 -14
  532. package/packages/omo-codex/scripts/install/bin-links.mjs +239 -0
  533. package/packages/omo-codex/scripts/install/cache.mjs +152 -108
  534. package/packages/omo-codex/scripts/install/cached-marketplace-manifest.mjs +21 -0
  535. package/packages/omo-codex/scripts/install/cli-args.mjs +39 -2
  536. package/packages/omo-codex/scripts/install/config.mjs +7 -5
  537. package/packages/omo-codex/scripts/install/lazycodex-version-stamp.mjs +102 -0
  538. package/packages/omo-codex/scripts/install/legacy-bins.mjs +9 -1
  539. package/packages/omo-codex/scripts/install/model-catalog.mjs +9 -1
  540. package/packages/omo-codex/scripts/install/process.mjs +3 -1
  541. package/packages/omo-codex/scripts/install/project-local-cleanup.mjs +0 -1
  542. package/packages/omo-codex/scripts/install/snapshot.mjs +0 -1
  543. package/packages/omo-codex/scripts/install-agent-links.test.mjs +205 -11
  544. package/packages/omo-codex/scripts/install-bin-links.test.mjs +123 -1
  545. package/packages/omo-codex/scripts/install-cache-copy.test.mjs +129 -5
  546. package/packages/omo-codex/scripts/install-cli-args.test.mjs +82 -1
  547. package/packages/omo-codex/scripts/install-config-preservation.test.mjs +43 -0
  548. package/packages/omo-codex/scripts/install-config-reasoning.test.mjs +14 -1
  549. package/packages/omo-codex/scripts/install-config.test.mjs +49 -1
  550. package/packages/omo-codex/scripts/install-lazycodex-version-stamp.test.mjs +84 -0
  551. package/packages/omo-codex/scripts/install-local-entrypoint.test.mjs +51 -0
  552. package/packages/omo-codex/scripts/install-local.mjs +42 -40
  553. package/packages/omo-codex/scripts/install-local.test.mjs +17 -241
  554. package/packages/omo-codex/scripts/install-marketplace-cache.test.mjs +162 -0
  555. package/packages/omo-codex/scripts/install-packaged-local.test.mjs +10 -6
  556. package/packages/omo-codex/scripts/install-project-local-cleanup.test.mjs +73 -2
  557. package/packages/omo-codex/scripts/sync-telemetry-component.mjs +1 -0
  558. package/packages/shared-skills/skills/debugging/references/methodology/04-oracle-triple.md +3 -3
  559. package/packages/shared-skills/skills/git-master/SKILL.md +100 -0
  560. package/packages/shared-skills/skills/git-master/agents/openai.yaml +13 -0
  561. package/packages/shared-skills/skills/lcx-contribute-bug-fix/SKILL.md +176 -0
  562. package/packages/shared-skills/skills/lcx-contribute-bug-fix/agents/openai.yaml +12 -0
  563. package/packages/shared-skills/skills/lcx-contribute-bug-fix/scripts/create-pr-body.mjs +107 -0
  564. package/packages/shared-skills/skills/lcx-report-bug/SKILL.md +119 -14
  565. package/packages/shared-skills/skills/lcx-report-bug/agents/openai.yaml +4 -2
  566. package/packages/shared-skills/skills/programming/references/go/concurrency.md +2 -2
  567. package/packages/shared-skills/skills/programming/references/python/async-anyio.md +6 -6
  568. package/packages/shared-skills/skills/programming/references/python/pydantic-ai.md +12 -12
  569. package/packages/shared-skills/skills/programming/references/typescript/backend-hono.md +7 -7
  570. package/packages/shared-skills/skills/refactor/SKILL.md +4 -4
  571. package/packages/shared-skills/skills/remove-ai-slops/SKILL.md +1 -1
  572. package/packages/shared-skills/skills/review-work/SKILL.md +55 -33
  573. package/packages/shared-skills/skills/start-work/SKILL.md +76 -19
  574. package/packages/shared-skills/skills/ultraresearch/SKILL.md +770 -0
  575. package/packages/shared-skills/skills/visual-qa/SKILL.md +219 -0
  576. package/packages/shared-skills/skills/visual-qa/scripts/ansi.test.ts +45 -0
  577. package/packages/shared-skills/skills/visual-qa/scripts/ansi.ts +17 -0
  578. package/packages/shared-skills/skills/visual-qa/scripts/cli.test.ts +73 -0
  579. package/packages/shared-skills/skills/visual-qa/scripts/cli.ts +82 -0
  580. package/packages/shared-skills/skills/visual-qa/scripts/east-asian-width.test.ts +60 -0
  581. package/packages/shared-skills/skills/visual-qa/scripts/east-asian-width.ts +72 -0
  582. package/packages/shared-skills/skills/visual-qa/scripts/image-diff.test.ts +70 -0
  583. package/packages/shared-skills/skills/visual-qa/scripts/image-diff.ts +109 -0
  584. package/packages/shared-skills/skills/visual-qa/scripts/png-crc.ts +27 -0
  585. package/packages/shared-skills/skills/visual-qa/scripts/png-decode.test.ts +44 -0
  586. package/packages/shared-skills/skills/visual-qa/scripts/png-decode.ts +206 -0
  587. package/packages/shared-skills/skills/visual-qa/scripts/png-synth.ts +57 -0
  588. package/packages/shared-skills/skills/visual-qa/scripts/skill-prompt-contract.test.ts +83 -0
  589. package/packages/shared-skills/skills/visual-qa/scripts/tui-grid.test.ts +57 -0
  590. package/packages/shared-skills/skills/visual-qa/scripts/tui-grid.ts +88 -0
  591. package/packages/shared-skills/skills/visual-qa/scripts/types.ts +54 -0
  592. package/postinstall.mjs +24 -1
  593. package/dist/agents/custom-agent-summaries.d.ts +0 -8
  594. package/dist/agents/hephaestus/gpt-5-3-codex.d.ts +0 -20
  595. package/dist/agents/prometheus/gemini.d.ts +0 -1
  596. package/dist/agents/prometheus/gpt.d.ts +0 -1
  597. package/dist/agents/sisyphus-junior/gpt-5-3-codex.d.ts +0 -8
  598. package/dist/features/background-agent/session-route.d.ts +0 -12
  599. package/dist/features/background-agent/spawner/parent-directory-resolver.d.ts +0 -6
  600. package/dist/features/background-agent/state.d.ts +0 -35
  601. package/dist/features/claude-tasks/session-storage.d.ts +0 -9
  602. package/dist/features/mcp-oauth/resource-indicator.d.ts +0 -2
  603. package/dist/features/mcp-oauth/schema.d.ts +0 -6
  604. package/dist/features/opencode-skill-loader/async-loader.d.ts +0 -6
  605. package/dist/features/opencode-skill-loader/blocking.d.ts +0 -2
  606. package/dist/features/opencode-skill-loader/discover-worker.d.ts +0 -1
  607. package/dist/hooks/session-recovery/recover-empty-content-message-sdk.d.ts +0 -13
  608. package/dist/shared/bun-hash-shim.d.ts +0 -1
  609. package/dist/tools/delegate-task/resolve-call-id.d.ts +0 -2
  610. package/packages/shared-skills/skills/ulw-plan/SKILL.md +0 -383
  611. /package/packages/lsp-tools-mcp/dist/lsp/{utils.d.ts → startup-failure.d.ts} +0 -0
  612. /package/packages/lsp-tools-mcp/dist/lsp/{utils.js → startup-failure.js} +0 -0
@@ -26,6 +26,22 @@ describe("formatAdditionalContextOutput", () => {
26
26
  // then
27
27
  expect(output).toBe("");
28
28
  });
29
+
30
+ it("#given oversized context #when serializing hook JSON #then it keeps additional context under the safety cap", () => {
31
+ // given
32
+ const context = `first\n${"x".repeat(50_000)}\nlast`;
33
+
34
+ // when
35
+ const output = formatAdditionalContextOutput("SessionStart", context);
36
+ const parsed: unknown = JSON.parse(output);
37
+ const additionalContext = readAdditionalContext(parsed);
38
+
39
+ // then
40
+ expect(additionalContext.length).toBeLessThanOrEqual(32_000);
41
+ expect(additionalContext).toContain("first");
42
+ expect(additionalContext).not.toContain("last");
43
+ expect(additionalContext).toContain("[Truncated hook additional context to 32000 chars");
44
+ });
29
45
  });
30
46
 
31
47
  function readAdditionalContext(value: unknown): string {
@@ -0,0 +1,153 @@
1
+ import { describe, expect, it } from "vitest";
2
+
3
+ import { parseRule } from "../src/rules/parser.js";
4
+
5
+ describe("parseRule", () => {
6
+ it("#given content without frontmatter #when parsing #then body is preserved", () => {
7
+ // given
8
+ const content = "Prefer strict TypeScript.\n---\nThis is body content.";
9
+
10
+ // when
11
+ const parsed = parseRule(content);
12
+
13
+ // then
14
+ expect(parsed).toEqual({
15
+ frontmatter: {},
16
+ body: content,
17
+ });
18
+ });
19
+
20
+ it("#given bom and crlf frontmatter #when parsing #then delimiters are removed", () => {
21
+ // given
22
+ const content = "\uFEFF---\r\ndescription: Windows rule\r\nalwaysApply: true\r\n---\r\nUse Git Bash.\r\n";
23
+
24
+ // when
25
+ const parsed = parseRule(content);
26
+
27
+ // then
28
+ expect(parsed).toEqual({
29
+ frontmatter: {
30
+ description: "Windows rule",
31
+ alwaysApply: true,
32
+ },
33
+ body: "Use Git Bash.\r\n",
34
+ });
35
+ });
36
+
37
+ it("#given missing closing delimiter #when parsing #then original markdown is salvaged with diagnostic", () => {
38
+ // given
39
+ const content = ["---", "description: Missing close", "", "Keep this content."].join("\n");
40
+
41
+ // when
42
+ const parsed = parseRule(content);
43
+
44
+ // then
45
+ expect(parsed).toEqual({
46
+ frontmatter: {},
47
+ body: content,
48
+ diagnostic: "Missing closing frontmatter delimiter",
49
+ });
50
+ });
51
+
52
+ it("#given malformed yaml subset #when parsing #then original markdown is salvaged with diagnostic", () => {
53
+ // given
54
+ const content = ["---", "alwaysApply: maybe", "---", "", "Keep this content."].join("\n");
55
+
56
+ // when
57
+ const parsed = parseRule(content);
58
+
59
+ // then
60
+ expect(parsed.frontmatter).toEqual({});
61
+ expect(parsed.body).toBe(content);
62
+ expect(parsed.diagnostic).toBe("Malformed frontmatter: Expected boolean on line 1");
63
+ });
64
+
65
+ it("#given quoted hashes and inline quoted commas #when parsing #then comments and commas are handled by quote context", () => {
66
+ // given
67
+ const content = [
68
+ "---",
69
+ 'description: "Rule #1" # trailing comment',
70
+ 'globs: ["src/a,b.ts", "docs/#guide.md"] # trailing comment',
71
+ "---",
72
+ "",
73
+ "Use quote-aware parsing.",
74
+ ].join("\n");
75
+
76
+ // when
77
+ const parsed = parseRule(content);
78
+
79
+ // then
80
+ expect(parsed.frontmatter).toEqual({
81
+ description: "Rule #1",
82
+ globs: ["src/a,b.ts", "docs/#guide.md"],
83
+ });
84
+ });
85
+
86
+ it("#given quoted scalar glob with comma #when parsing #then the comma remains part of one glob", () => {
87
+ // given
88
+ const content = ["---", 'globs: "src/foo,bar.ts"', "---", "", "Prefer precise glob parsing."].join("\n");
89
+
90
+ // when
91
+ const parsed = parseRule(content);
92
+
93
+ // then
94
+ expect(parsed.frontmatter.globs).toBe("src/foo,bar.ts");
95
+ });
96
+
97
+ it("#given unquoted scalar glob list with comma #when parsing #then it remains split into multiple globs", () => {
98
+ // given
99
+ const content = ["---", "globs: src/foo.ts, src/bar.ts", "---", "", "Prefer precise glob parsing."].join("\n");
100
+
101
+ // when
102
+ const parsed = parseRule(content);
103
+
104
+ // then
105
+ expect(parsed.frontmatter.globs).toEqual(["src/foo.ts", "src/bar.ts"]);
106
+ });
107
+
108
+ it("#given multiline array with comments and blanks #when parsing #then items are collected until next key", () => {
109
+ // given
110
+ const content = [
111
+ "---",
112
+ "globs:",
113
+ " # ignored comment",
114
+ "",
115
+ ' - "src/#hash.ts" # trailing comment',
116
+ " - docs/**/*.md",
117
+ "description: Multiline",
118
+ "---",
119
+ "",
120
+ "Prefer precise rules.",
121
+ ].join("\n");
122
+
123
+ // when
124
+ const parsed = parseRule(content);
125
+
126
+ // then
127
+ expect(parsed.frontmatter).toEqual({
128
+ description: "Multiline",
129
+ globs: ["src/#hash.ts", "docs/**/*.md"],
130
+ });
131
+ });
132
+
133
+ it("#given duplicate glob aliases #when parsing frontmatter #then first-seen order is preserved", () => {
134
+ // given
135
+ const content = [
136
+ "---",
137
+ 'globs: ["src/**/*.ts", "test/**/*.ts", "src/**/*.ts"]',
138
+ "paths:",
139
+ " - test/**/*.ts",
140
+ " - packages/**/*.ts",
141
+ "applyTo: packages/**/*.ts, docs/**/*.md, src/**/*.ts",
142
+ "---",
143
+ "",
144
+ "Prefer strict TypeScript.",
145
+ ].join("\n");
146
+
147
+ // when
148
+ const parsed = parseRule(content);
149
+
150
+ // then
151
+ expect(parsed.frontmatter.globs).toEqual(["src/**/*.ts", "test/**/*.ts", "packages/**/*.ts", "docs/**/*.md"]);
152
+ });
153
+ });
@@ -60,6 +60,18 @@ describe("post-compact context budget", () => {
60
60
  expect(budget.maxResultChars).toBe(CONFIG.postCompactMaxResultChars);
61
61
  });
62
62
 
63
+ it("#given pure GPT-5.4 model near the fallback context window #when resolving post-compact budget #then treats it as non-preset metadata", () => {
64
+ // given
65
+ const transcriptPath = writeCompactedTranscript("A".repeat(600_000));
66
+
67
+ // when
68
+ const budget = withPostCompactBudget(CONFIG, { model: "gpt-5.4", transcriptPath });
69
+
70
+ // then
71
+ expect(budget.maxResultChars).toBeLessThan(1_000);
72
+ expect(budget.maxRuleChars).toBeLessThanOrEqual(budget.maxResultChars);
73
+ });
74
+
63
75
  it("#given context pressure marker after compaction #when resolving post-compact budget #then shrinks projected rule injection", () => {
64
76
  // given
65
77
  const transcriptPath = writeCompactedPressureTranscript("small compacted summary");
@@ -0,0 +1,236 @@
1
+ import { mkdtempSync, rmSync } from "node:fs";
2
+ import { tmpdir } from "node:os";
3
+ import { join } from "node:path";
4
+
5
+ import { describe, expect, it } from "vitest";
6
+
7
+ import { runSessionStartHook, runUserPromptSubmitHook } from "../src/codex-hook.js";
8
+ import { formatAdditionalContextOutput } from "../src/hook-output.js";
9
+
10
+ type HookOutput = {
11
+ readonly hookSpecificOutput?: {
12
+ readonly additionalContext?: string;
13
+ };
14
+ };
15
+
16
+ function parseAdditionalContext(output: string): string {
17
+ expect(output.trim().length).toBeGreaterThan(0);
18
+ const parsed = parseHookOutput(JSON.parse(output));
19
+ return parsed.hookSpecificOutput?.additionalContext ?? "";
20
+ }
21
+
22
+ function parseHookOutput(value: unknown): HookOutput {
23
+ if (typeof value !== "object" || value === null) {
24
+ return {};
25
+ }
26
+ const record = value;
27
+ if (!("hookSpecificOutput" in record)) {
28
+ return {};
29
+ }
30
+ const hookSpecificOutput = record.hookSpecificOutput;
31
+ if (typeof hookSpecificOutput !== "object" || hookSpecificOutput === null) {
32
+ return {};
33
+ }
34
+ if (!("additionalContext" in hookSpecificOutput)) {
35
+ return { hookSpecificOutput: {} };
36
+ }
37
+ const additionalContext = hookSpecificOutput.additionalContext;
38
+ if (typeof additionalContext !== "string") {
39
+ return { hookSpecificOutput: {} };
40
+ }
41
+ return {
42
+ hookSpecificOutput: {
43
+ additionalContext,
44
+ },
45
+ };
46
+ }
47
+
48
+ describe("Codex Sparkshell awareness", () => {
49
+ it("#given active Codex app server env #when SessionStart runs #then emits Sparkshell guidance", async () => {
50
+ // given
51
+ const env = {
52
+ CODEX_INTERNAL_ORIGINATOR_OVERRIDE: "Codex Desktop",
53
+ CODEX_SHELL: "1",
54
+ CODEX_RULES_ENABLED_SOURCES: ".omo/rules",
55
+ };
56
+
57
+ // when
58
+ const output = await runSessionStartHook(
59
+ {
60
+ session_id: "session-sparkshell-active",
61
+ transcript_path: null,
62
+ cwd: process.cwd(),
63
+ hook_event_name: "SessionStart",
64
+ model: "gpt-5.5",
65
+ permission_mode: "default",
66
+ source: "startup",
67
+ },
68
+ { env },
69
+ );
70
+
71
+ // then
72
+ expect(parseAdditionalContext(output)).toContain("omo sparkshell <command>");
73
+ });
74
+
75
+ it("#given inactive env #when SessionStart runs #then emits no Sparkshell guidance", async () => {
76
+ // given
77
+ const env = {
78
+ CODEX_RULES_ENABLED_SOURCES: ".omo/rules",
79
+ };
80
+
81
+ // when
82
+ const output = await runSessionStartHook(
83
+ {
84
+ session_id: "session-sparkshell-inactive",
85
+ transcript_path: null,
86
+ cwd: process.cwd(),
87
+ hook_event_name: "SessionStart",
88
+ model: "gpt-5.5",
89
+ permission_mode: "default",
90
+ source: "startup",
91
+ },
92
+ { env },
93
+ );
94
+
95
+ // then
96
+ expect(output).toBe("");
97
+ });
98
+
99
+ it("#given Codex CLI appserver socket env #when SessionStart runs #then emits Sparkshell guidance", async () => {
100
+ // given
101
+ const env = {
102
+ OMO_SPARKSHELL_APP_SERVER_SOCKET: "/tmp/app-server-control.sock",
103
+ CODEX_THREAD_ID: "thread-sparkshell-cli",
104
+ CODEX_RULES_ENABLED_SOURCES: ".omo/rules",
105
+ };
106
+
107
+ // when
108
+ const output = await runSessionStartHook(
109
+ {
110
+ session_id: "session-sparkshell-cli-wrapper",
111
+ transcript_path: null,
112
+ cwd: process.cwd(),
113
+ hook_event_name: "SessionStart",
114
+ model: "gpt-5.5",
115
+ permission_mode: "default",
116
+ source: "startup",
117
+ },
118
+ { env },
119
+ );
120
+
121
+ // then
122
+ expect(parseAdditionalContext(output)).toContain("omo sparkshell <command>");
123
+ });
124
+
125
+ it("#given explicit force-on env #when SessionStart runs #then emits Sparkshell guidance", async () => {
126
+ // given
127
+ const env = {
128
+ OMO_SPARKSHELL_AWARENESS: "1",
129
+ CODEX_RULES_ENABLED_SOURCES: ".omo/rules",
130
+ };
131
+
132
+ // when
133
+ const output = await runSessionStartHook(
134
+ {
135
+ session_id: "session-sparkshell-force-on",
136
+ transcript_path: null,
137
+ cwd: process.cwd(),
138
+ hook_event_name: "SessionStart",
139
+ model: "gpt-5.5",
140
+ permission_mode: "default",
141
+ source: "startup",
142
+ },
143
+ { env },
144
+ );
145
+
146
+ // then
147
+ expect(parseAdditionalContext(output)).toContain("omo sparkshell <command>");
148
+ });
149
+
150
+ it("#given explicit force-off env with active Codex app context #when SessionStart runs #then emits no Sparkshell guidance", async () => {
151
+ // given
152
+ const env = {
153
+ OMO_SPARKSHELL_AWARENESS: "0",
154
+ CODEX_INTERNAL_ORIGINATOR_OVERRIDE: "Codex Desktop",
155
+ CODEX_SHELL: "1",
156
+ CODEX_RULES_ENABLED_SOURCES: ".omo/rules",
157
+ };
158
+
159
+ // when
160
+ const output = await runSessionStartHook(
161
+ {
162
+ session_id: "session-sparkshell-force-off",
163
+ transcript_path: null,
164
+ cwd: process.cwd(),
165
+ hook_event_name: "SessionStart",
166
+ model: "gpt-5.5",
167
+ permission_mode: "default",
168
+ source: "startup",
169
+ },
170
+ { env },
171
+ );
172
+
173
+ // then
174
+ expect(output).toBe("");
175
+ });
176
+
177
+ it("#given Sparkshell awareness already emitted for a session #when UserPromptSubmit runs #then emits no duplicate guidance", async () => {
178
+ // given
179
+ const pluginDataRoot = mkdtempSync(join(tmpdir(), "codex-sparkshell-awareness-"));
180
+ const env = {
181
+ CODEX_INTERNAL_ORIGINATOR_OVERRIDE: "Codex Desktop",
182
+ CODEX_SHELL: "1",
183
+ CODEX_RULES_ENABLED_SOURCES: ".omo/rules",
184
+ };
185
+ try {
186
+ const firstOutput = await runSessionStartHook(
187
+ {
188
+ session_id: "session-sparkshell-dedupe",
189
+ transcript_path: null,
190
+ cwd: process.cwd(),
191
+ hook_event_name: "SessionStart",
192
+ model: "gpt-5.5",
193
+ permission_mode: "default",
194
+ source: "startup",
195
+ },
196
+ { env, pluginDataRoot },
197
+ );
198
+ expect(parseAdditionalContext(firstOutput)).toContain("omo sparkshell <command>");
199
+
200
+ // when
201
+ const secondOutput = await runUserPromptSubmitHook(
202
+ {
203
+ session_id: "session-sparkshell-dedupe",
204
+ turn_id: "turn-1",
205
+ transcript_path: null,
206
+ cwd: process.cwd(),
207
+ hook_event_name: "UserPromptSubmit",
208
+ model: "gpt-5.5",
209
+ permission_mode: "default",
210
+ prompt: "continue",
211
+ },
212
+ { env, pluginDataRoot },
213
+ );
214
+
215
+ // then
216
+ expect(secondOutput).toBe("");
217
+ } finally {
218
+ rmSync(pluginDataRoot, { recursive: true, force: true });
219
+ }
220
+ });
221
+
222
+ it("#given explicit force-on env #when hook output is formatted #then awareness remains valid hook JSON", () => {
223
+ // given
224
+ const context = [
225
+ "## Sparkshell Runtime",
226
+ "",
227
+ "- Prefer `omo sparkshell <command>` for shell-native inspection.",
228
+ ].join("\n");
229
+
230
+ // when
231
+ const output = formatAdditionalContextOutput("SessionStart", context);
232
+
233
+ // then
234
+ expect(parseAdditionalContext(output)).toContain("## Sparkshell Runtime");
235
+ });
236
+ });
@@ -30,22 +30,34 @@ function postToolUse(input: { toolName: string; toolInput?: unknown; toolRespons
30
30
  }
31
31
 
32
32
  describe("extractCodexToolPaths", () => {
33
- it("#given filesystem read payload #when extracting #then returns resolved path", () => {
34
- // given
35
- const root = makeProject();
36
-
37
- // when
38
- const paths = extractCodexToolPaths(
39
- postToolUse({
40
- toolName: "mcp__filesystem__read_file",
41
- toolInput: { path: "src/app.ts" },
42
- }),
43
- root,
44
- );
45
-
46
- // then
47
- expect(paths).toEqual([path.join(root, "src", "app.ts")]);
48
- });
33
+ for (const [name, toolName, toolInput] of [
34
+ [
35
+ "#given filesystem read payload #when extracting #then returns resolved path",
36
+ "mcp__filesystem__read_file",
37
+ { path: "src/app.ts" },
38
+ ],
39
+ [
40
+ "#given mcp write-file payload #when extracting #then returns resolved path",
41
+ "mcp__filesystem__write_file",
42
+ { path: "src/app.ts", content: "export const app = true;\n" },
43
+ ],
44
+ [
45
+ "#given mcp edit-file payload #when extracting #then returns resolved path",
46
+ "mcp__filesystem__edit_file",
47
+ { path: "src/app.ts", edits: [] },
48
+ ],
49
+ ] as const) {
50
+ it(name, () => {
51
+ // given
52
+ const root = makeProject();
53
+
54
+ // when
55
+ const paths = extractCodexToolPaths(postToolUse({ toolName, toolInput }), root);
56
+
57
+ // then
58
+ expect(paths).toEqual([path.join(root, "src", "app.ts")]);
59
+ });
60
+ }
49
61
 
50
62
  it("#given apply_patch payload #when extracting #then returns patched file paths", () => {
51
63
  // given
@@ -109,40 +121,6 @@ describe("extractCodexToolPaths", () => {
109
121
  ]);
110
122
  });
111
123
 
112
- it("#given mcp write-file payload #when extracting #then returns resolved path", () => {
113
- // given
114
- const root = makeProject();
115
-
116
- // when
117
- const paths = extractCodexToolPaths(
118
- postToolUse({
119
- toolName: "mcp__filesystem__write_file",
120
- toolInput: { path: "src/app.ts", content: "export const app = true;\n" },
121
- }),
122
- root,
123
- );
124
-
125
- // then
126
- expect(paths).toEqual([path.join(root, "src", "app.ts")]);
127
- });
128
-
129
- it("#given mcp edit-file payload #when extracting #then returns resolved path", () => {
130
- // given
131
- const root = makeProject();
132
-
133
- // when
134
- const paths = extractCodexToolPaths(
135
- postToolUse({
136
- toolName: "mcp__filesystem__edit_file",
137
- toolInput: { path: "src/app.ts", edits: [] },
138
- }),
139
- root,
140
- );
141
-
142
- // then
143
- expect(paths).toEqual([path.join(root, "src", "app.ts")]);
144
- });
145
-
146
124
  it("#given mcp read-multiple-files payload #when extracting #then returns all resolved paths", () => {
147
125
  // given
148
126
  const root = makeProject();
@@ -81,7 +81,8 @@ describe("Windows Git Bash bundled rule", () => {
81
81
  platform: "win32",
82
82
  });
83
83
 
84
- expect(occurrenceCount(output, WINDOWS_GUIDANCE)).toBe(1);
84
+ expect(occurrenceCount(output, `Instructions from: ${join(process.cwd(), WINDOWS_RULE_PATH)}`)).toBe(1);
85
+ expect(output).toContain(WINDOWS_GUIDANCE);
85
86
  });
86
87
 
87
88
  it("#given bundled rules enabled off Windows #when SessionStart runs #then Windows Git Bash guidance is not injected", async () => {
@@ -97,12 +98,13 @@ describe("Windows Git Bash bundled rule", () => {
97
98
  expect(output).not.toContain(WINDOWS_RULE_PATH);
98
99
  });
99
100
 
100
- it("#given project rule with same description on Windows #when static rules load #then project guidance overrides bundled guidance", async () => {
101
+ it("#given project rule with same description on Windows #when static rules load #then project guidance file overrides bundled guidance", async () => {
101
102
  const { root, pluginData } = makeProject();
102
103
  const projectGuidance = "Project-specific Windows shell policy.";
104
+ const projectRulePath = join(root, ".omo", "rules", "windows-git-bash.md");
103
105
  mkdirSync(join(root, ".omo", "rules"), { recursive: true });
104
106
  writeFileSync(
105
- join(root, ".omo", "rules", "windows-git-bash.md"),
107
+ projectRulePath,
106
108
  ["---", `description: ${WINDOWS_RULE_DESCRIPTION}`, "alwaysApply: true", "---", "", projectGuidance].join(
107
109
  "\n",
108
110
  ),
@@ -114,6 +116,7 @@ describe("Windows Git Bash bundled rule", () => {
114
116
  platform: "win32",
115
117
  });
116
118
 
119
+ expect(output).toContain(`Instructions from: ${projectRulePath}`);
117
120
  expect(output).toContain(projectGuidance);
118
121
  expect(output).not.toContain(WINDOWS_GUIDANCE);
119
122
  });
@@ -18,11 +18,12 @@ You are mid-flight on a Prometheus work plan. The turn just ended without finish
18
18
  1. Read `{{PLAN_PATH}}` AND `{{LEDGER_PATH}}` first — ground truth for what remains and what evidence has already been recorded. The plan checkbox and the ledger are the only sources of truth; do not trust your own memory of prior turns.
19
19
  2. Pick the FIRST unchecked top-level checkbox in `## TODOs` or `## Final Verification Wave`. Ignore nested checkboxes under Acceptance Criteria / Evidence / Definition of Done.
20
20
  3. Follow the `start-work` skill in full. The skill is already loaded from your earlier turn — re-read its file at `packages/omo-codex/plugin/skills/start-work/SKILL.md` if you have lost context.
21
- 4. Decompose the checkbox into atomic sub-tasks. Dispatch them in PARALLEL via `spawn_agent` calls in this same response unless a sub-task has a NAMED blocking dependency (input from another sub-task or shared file). Prefer `fork_turns: "none"` unless full history is truly required. Every dispatch sets `agent_type`; `model` + `reasoning_effort` alone creates a default agent, not the requested role.
21
+ 4. Decompose the checkbox into atomic sub-tasks. Dispatch them in PARALLEL via `spawn_agent` calls in this same response unless a sub-task has a NAMED blocking dependency (input from another sub-task or shared file). Prefer `fork_turns: "none"` unless full history is truly required. Put role and specialty instructions inside `message`; the Codex tool schema only accepts `task_name`, `message`, and `fork_turns`.
22
22
  5. Every sub-task message MUST be self-contained and start with `TASK: <imperative assignment>`, then name `DELIVERABLE`, `SCOPE`, and `VERIFY`. State that it is an executable assignment, not a context handoff. It must include all 7 sections and name one Manual-QA channel with its exact tool and exact invocation (the literal `curl` / `send-keys` / `page.click` with concrete inputs and the binary PASS/FAIL observable), plus the applicable ultraqa adversarial classes, a captured artifact, and a cleanup receipt. Channels: HTTP call (`curl -i`); tmux (`send-keys` + `capture-pane`); browser use — use Chrome to drive the page, else download and use agent-browser (https://github.com/vercel-labs/agent-browser); computer use — OS-level GUI automation for a desktop app. Tests are the floor; the channel artifact plus probed adversarial classes are the ceiling. All are required.
23
- 6. Use `wait_agent` for completion signals, but treat `wait_agent` as a mailbox signal, not proof of completion, content, or errors. After two waits with no substantive result, send one targeted followup: `TASK STILL ACTIVE: return <deliverable> or BLOCKED: <reason>`. If still silent or ack-only, record inconclusive, do not count it as pass/review approval, close if safe, and respawn a smaller `fork_turns: "none"` task with the missing deliverable.
24
- 7. After verification of ALL sub-tasks under this checkbox: `apply_patch` the plan to change `- [ ]` `- [x]`, re-read the plan to confirm the count decreased, append a `task-completed` line to the ledger, then continue.
25
- 8. Do not start fresh on a sub-agent failure. Re-dispatch the same `task_name` with a fix-message: `FAILED: <exact error>` + `Diagnosis: <observation>` + `Fix: <instruction>`.
23
+ 6. Treat every worker DoneClaim as untrusted input. Run independent AdversarialVerify before any checkbox can become FullyDone; `confirmed` is the only pass verdict, while `false-positive`, `needs-fix`, and `needs-human-review` loop back to the executor with exact feedback.
24
+ 7. Use `wait_agent` for mailbox signals, not proof of completion. For sub-tasks likely to exceed one wait cycle, require `WORKING: <task> - <current phase>` before long passes and `BLOCKED: <reason>` only when progress stops. A timeout only means no new mailbox update arrived; after a timeout, run a single `list_agents` check for the named child when you need reassurance. If it is running or its latest message is `WORKING:`, treat it as alive. Do not use `list_agents` as a polling loop. Send `TASK STILL ACTIVE: return <deliverable> or BLOCKED: <reason>` only when the child is completed without the deliverable, ack-only, or no longer running. If that followup is still silent or ack-only, record inconclusive, do not count it as pass/review approval, close if safe, and respawn a smaller `fork_turns: "none"` task with the missing deliverable.
25
+ 8. After verification of ALL sub-tasks under this checkbox: `apply_patch` the plan to change `- [ ]` `- [x]`, re-read the plan to confirm the count decreased, append a `task-completed` line to the ledger, then continue.
26
+ 9. Do not start fresh on a sub-agent failure. Re-dispatch the same `task_name` with a fix-message: `FAILED: <exact error>` + `Diagnosis: <observation>` + `Fix: <instruction>`.
26
27
 
27
28
  # Hard constraints
28
29
 
@@ -34,12 +35,18 @@ You are mid-flight on a Prometheus work plan. The turn just ended without finish
34
35
  - The worktree path (if set in boulder.json) governs every file edit and command. Do not stray into the main repo.
35
36
  - session_ids you write to boulder.json MUST be prefixed `codex:`. Bare ids on read are legacy `opencode:`.
36
37
 
38
+ # Global Review and Debugging Gate
39
+
40
+ Before completion, run `review-work` and a `debugging` runtime audit. Treat timeout, missing deliverable, ack-only, `BLOCKED:`, and inconclusive review lanes as failures, not progress. Record at least three debugging hypotheses and the runtime evidence that confirms or refutes each one.
41
+
42
+ Do not print `ORCHESTRATION COMPLETE`. Do not create a PR, PR handoff, or branch handoff. Do not write a final completion answer until this gate passes. Always redact secrets, tokens, credentials, auth headers, cookies, env dumps, private logs, and PII from ledgers, PR bodies, and handoffs.
43
+
37
44
  # Stop conditions for THIS turn
38
45
 
39
46
  - A top-level checkbox flipped to `- [x]` after the 5-phase QA gate (Phase 1 read, Phase 2 automated, Phase 3 channel scenario, Phase 4 adversarial-class probing, Phase 5 gate decision). Then the Stop hook will re-evaluate; if more checkboxes remain you will be continued again.
40
- - 3 same-failure cycles on one sub-task → escalate via `spawn_agent(agent_type="codex-ultrawork-reviewer", fork_turns="none", ...)` and stop dispatch.
47
+ - 3 same-failure cycles on one sub-task → escalate via `spawn_agent({"task_name":"failure_escalation_review","message":"TASK: act as a rigorous reviewer. DELIVERABLE: diagnose the repeated sub-task failure and recommend the next safe action. VERIFY: cite the failing evidence.","fork_turns":"none"})` and stop dispatch.
41
48
  - Safety boundary (destructive command, secret exfiltration, production write) → stop and surface a safe substitute.
42
- - All top-level checkboxes `- [x]` AND (if gate triggered) `codex-ultrawork-reviewer` approved unconditionally → print the ORCHESTRATION COMPLETE block and end.
49
+ - All top-level checkboxes `- [x]` AND the Global Review and Debugging Gate passed → print the ORCHESTRATION COMPLETE block and end.
43
50
 
44
51
  # Output discipline
45
52
 
@@ -6,6 +6,7 @@ import type { ReadonlyFileSystem, StopHookEventName, StopHookOutput, StopInput }
6
6
  export function runStopHook(input: unknown, fs: ReadonlyFileSystem): string {
7
7
  if (!isStopInput(input)) return "";
8
8
  if (input.stop_hook_active) return "";
9
+ if (transcriptHasContextPressureMarker(input.transcript_path, fs)) return "";
9
10
  const state = readContinuationState(input.cwd, input.session_id, fs);
10
11
  if (state === null) return "";
11
12
  return JSON.stringify({
@@ -38,6 +39,26 @@ function renderDirective(state: ContinuationState, sessionId: string): string {
38
39
  return rendered;
39
40
  }
40
41
 
42
+ const CONTEXT_PRESSURE_MARKERS = [
43
+ "context compacted",
44
+ "context_length_exceeded",
45
+ "skill descriptions were shortened",
46
+ "context_too_large",
47
+ "codex ran out of room in the model's context window",
48
+ "your input exceeds the context window",
49
+ "long threads and multiple compactions",
50
+ ] as const;
51
+
52
+ function transcriptHasContextPressureMarker(transcriptPath: string, fs: ReadonlyFileSystem): boolean {
53
+ try {
54
+ const transcript = fs.readFileSync(transcriptPath, "utf8").toLowerCase();
55
+ return CONTEXT_PRESSURE_MARKERS.some((marker) => transcript.includes(marker));
56
+ } catch (error) {
57
+ if (error instanceof Error) return false;
58
+ throw error;
59
+ }
60
+ }
61
+
41
62
  function isStopInput(value: unknown): value is StopInput {
42
63
  return (
43
64
  isRecord(value) &&