oh-my-opencode 4.7.5 → 4.8.1

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 (617) 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 +4466 -2212
  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-multi-agent-v2-config.d.ts +11 -0
  73. package/dist/cli/install-codex/codex-process.d.ts +5 -0
  74. package/dist/cli/install-codex/index.d.ts +1 -1
  75. package/dist/cli/install-codex/lazycodex-version-stamp.d.ts +19 -0
  76. package/dist/cli/install-codex/link-cached-plugin-agents.d.ts +4 -0
  77. package/dist/cli/install-validators.d.ts +3 -0
  78. package/dist/cli/model-fallback-types.d.ts +3 -0
  79. package/dist/cli/run/event-handlers.d.ts +4 -11
  80. package/dist/cli/run/event-message-handlers.d.ts +5 -0
  81. package/dist/cli/run/event-session-handlers.d.ts +5 -0
  82. package/dist/cli/run/event-session-ids.d.ts +24 -0
  83. package/dist/cli/run/event-think-block.d.ts +3 -0
  84. package/dist/cli/run/event-toast-handlers.d.ts +3 -0
  85. package/dist/cli/run/event-tool-handlers.d.ts +4 -0
  86. package/dist/cli/run/event-tool-output.d.ts +2 -0
  87. package/dist/cli/run/on-complete-hook.d.ts +8 -1
  88. package/dist/cli/run/opencode-binary-resolver.d.ts +2 -1
  89. package/dist/cli/run/runnable-agent-resolver.d.ts +11 -0
  90. package/dist/cli/runtime-commands.d.ts +2 -0
  91. package/dist/cli/sparkshell-appserver-websocket.d.ts +4 -0
  92. package/dist/cli/sparkshell-appserver.d.ts +16 -0
  93. package/dist/cli/sparkshell-parse.d.ts +21 -0
  94. package/dist/cli/sparkshell.d.ts +26 -0
  95. package/dist/cli/types.d.ts +9 -0
  96. package/dist/config/schema/claude-code.d.ts +1 -0
  97. package/dist/config/schema/hooks.d.ts +1 -0
  98. package/dist/config/schema/oh-my-opencode-config.d.ts +1 -0
  99. package/dist/create-hooks.d.ts +1 -0
  100. package/dist/features/background-agent/concurrency.d.ts +6 -1
  101. package/dist/features/background-agent/constants.d.ts +1 -0
  102. package/dist/features/background-agent/empty-assistant-turn.d.ts +7 -0
  103. package/dist/features/background-agent/manager.d.ts +12 -0
  104. package/dist/features/background-agent/message-updated-parent-wake-output.d.ts +1 -0
  105. package/dist/features/background-agent/parent-wake-dedupe.d.ts +2 -0
  106. package/dist/features/background-agent/parent-wake-dispatched-tracker.d.ts +21 -0
  107. package/dist/features/background-agent/parent-wake-flush-runner.d.ts +24 -0
  108. package/dist/features/background-agent/parent-wake-history-state.d.ts +5 -0
  109. package/dist/features/background-agent/parent-wake-notifier-types.d.ts +50 -0
  110. package/dist/features/background-agent/parent-wake-notifier.d.ts +8 -50
  111. package/dist/features/background-agent/parent-wake-pending-queue.d.ts +22 -0
  112. package/dist/features/background-agent/parent-wake-prompt-dispatch.d.ts +19 -0
  113. package/dist/features/background-agent/parent-wake-session-history.d.ts +73 -0
  114. package/dist/features/background-agent/parent-wake-session-inspector.d.ts +35 -0
  115. package/dist/features/background-agent/parent-wake-timer-handle.d.ts +5 -0
  116. package/dist/features/background-agent/parent-wake-window-recovery.d.ts +13 -0
  117. package/dist/features/background-agent/process-cleanup.d.ts +2 -0
  118. package/dist/features/background-agent/process-cleanup.test-helpers.d.ts +3 -0
  119. package/dist/features/background-agent/session-stream-activity.d.ts +6 -0
  120. package/dist/features/background-agent/spawner/fallback-agent.d.ts +5 -0
  121. package/dist/features/background-agent/spawner/task-prompt-body.d.ts +34 -0
  122. package/dist/features/background-agent/spawner/task-record.d.ts +2 -0
  123. package/dist/features/background-agent/spawner.d.ts +2 -5
  124. package/dist/features/builtin-commands/templates/refactor-sections/codemap-and-tests.d.ts +1 -0
  125. package/dist/features/builtin-commands/templates/refactor-sections/intro-and-analysis.d.ts +1 -0
  126. package/dist/features/builtin-commands/templates/refactor-sections/plan-and-execution.d.ts +1 -0
  127. package/dist/features/builtin-commands/templates/refactor-sections/team-mode-addendum.d.ts +1 -0
  128. package/dist/features/builtin-commands/templates/refactor-sections/verification-and-tooling.d.ts +1 -0
  129. package/dist/features/builtin-commands/templates/refactor.d.ts +2 -2
  130. package/dist/features/builtin-skills/skills/agent-browser-skill.d.ts +2 -0
  131. package/dist/features/builtin-skills/skills/agent-browser-template.d.ts +2 -0
  132. package/dist/features/builtin-skills/skills/git-master-sections/commit-atomic-planning.d.ts +1 -0
  133. package/dist/features/builtin-skills/skills/git-master-sections/commit-context-analysis.d.ts +1 -0
  134. package/dist/features/builtin-skills/skills/git-master-sections/commit-execution-verification.d.ts +1 -0
  135. package/dist/features/builtin-skills/skills/git-master-sections/commit-workflow.d.ts +1 -1
  136. package/dist/features/builtin-skills/skills/index.d.ts +1 -0
  137. package/dist/features/builtin-skills/skills/playwright-mcp-skill.d.ts +2 -0
  138. package/dist/features/builtin-skills/skills/playwright.d.ts +2 -3
  139. package/dist/features/builtin-skills/skills/visual-qa.d.ts +2 -0
  140. package/dist/features/claude-code-agent-loader/agent-definitions-loader.d.ts +2 -2
  141. package/dist/features/claude-code-agent-loader/claude-model-mapper.d.ts +1 -1
  142. package/dist/features/claude-code-agent-loader/loader.d.ts +2 -2
  143. package/dist/features/claude-code-plugin-loader/agent-loader.d.ts +1 -1
  144. package/dist/features/claude-code-plugin-loader/discovery-core.d.ts +2 -0
  145. package/dist/features/claude-code-plugin-loader/discovery-paths.d.ts +3 -0
  146. package/dist/features/claude-code-plugin-loader/discovery.d.ts +3 -4
  147. package/dist/features/claude-code-plugin-loader/install-path-resolver.d.ts +1 -0
  148. package/dist/features/claude-code-plugin-loader/installed-plugin-database.d.ts +3 -0
  149. package/dist/features/claude-code-plugin-loader/loaded-plugin.d.ts +2 -0
  150. package/dist/features/claude-code-plugin-loader/plugin-key.d.ts +1 -0
  151. package/dist/features/claude-code-plugin-loader/plugin-manifest.d.ts +4 -0
  152. package/dist/features/claude-code-plugin-loader/plugin-settings.d.ts +3 -0
  153. package/dist/features/claude-code-plugin-loader/types.d.ts +1 -0
  154. package/dist/features/hook-message-injector/context-resolver.d.ts +6 -0
  155. package/dist/features/hook-message-injector/id-generation.d.ts +2 -0
  156. package/dist/features/hook-message-injector/index.d.ts +1 -1
  157. package/dist/features/hook-message-injector/injector.d.ts +7 -69
  158. package/dist/features/hook-message-injector/json-message-lookup.d.ts +3 -0
  159. package/dist/features/hook-message-injector/message-directory.d.ts +1 -0
  160. package/dist/features/hook-message-injector/message-injection.d.ts +2 -0
  161. package/dist/features/hook-message-injector/sdk-message-context.d.ts +6 -0
  162. package/dist/features/hook-message-injector/sdk-message-lookup.d.ts +28 -0
  163. package/dist/features/hook-message-injector/types.d.ts +9 -0
  164. package/dist/features/mcp-oauth/callback-server.d.ts +10 -2
  165. package/dist/features/opencode-runtime-skills/source-server.d.ts +1 -0
  166. package/dist/features/skill-mcp-manager/http-client.d.ts +2 -0
  167. package/dist/features/team-mode/deps.d.ts +8 -1
  168. package/dist/features/team-mode/team-layout-tmux/layout.d.ts +2 -0
  169. package/dist/features/team-mode/team-mailbox/send.d.ts +3 -0
  170. package/dist/features/team-mode/team-registry/paths.d.ts +17 -2
  171. package/dist/features/team-mode/team-runtime/shutdown.d.ts +1 -1
  172. package/dist/features/team-mode/team-runtime/unresolved-team-members.d.ts +3 -0
  173. package/dist/features/team-mode/team-state-store/active-resume.d.ts +5 -0
  174. package/dist/features/team-mode/team-state-store/creating-resume.d.ts +4 -0
  175. package/dist/features/team-mode/team-state-store/deleting-resume.d.ts +4 -0
  176. package/dist/features/team-mode/team-state-store/error-normalization.d.ts +2 -0
  177. package/dist/features/team-mode/team-state-store/reservation-reconciliation.d.ts +4 -0
  178. package/dist/features/team-mode/team-state-store/resume-report.d.ts +7 -0
  179. package/dist/features/team-mode/team-state-store/resume.d.ts +2 -7
  180. package/dist/features/team-mode/team-state-store/runtime-cleanup.d.ts +4 -0
  181. package/dist/features/team-mode/team-state-store/session-liveness.d.ts +9 -0
  182. package/dist/features/team-mode/team-state-store/worker-resume-status.d.ts +9 -0
  183. package/dist/features/team-mode/tools/lifecycle-create-tool.d.ts +17 -0
  184. package/dist/features/team-mode/tools/lifecycle-inline-spec.d.ts +19 -0
  185. package/dist/features/team-mode/tools/lifecycle-participant.d.ts +25 -0
  186. package/dist/features/team-mode/tools/lifecycle-shutdown-tools.d.ts +18 -0
  187. package/dist/features/team-mode/tools/lifecycle-test-fixture.d.ts +3 -3
  188. package/dist/features/team-mode/tools/lifecycle.d.ts +3 -37
  189. package/dist/features/team-mode/tools/messaging-live-delivery-client.d.ts +25 -0
  190. package/dist/features/team-mode/tools/messaging-live-delivery-recipient.d.ts +19 -0
  191. package/dist/features/team-mode/tools/messaging-live-delivery-reservation.d.ts +10 -0
  192. package/dist/features/team-mode/tools/messaging-live-delivery-state.d.ts +5 -0
  193. package/dist/features/team-mode/tools/messaging-live-delivery.d.ts +6 -0
  194. package/dist/features/team-mode/tools/messaging-runtime.d.ts +17 -0
  195. package/dist/features/team-mode/tools/messaging.d.ts +4 -29
  196. package/dist/features/tmux-subagent/manager.d.ts +20 -1
  197. package/dist/features/tmux-subagent/session-created-handler.d.ts +4 -0
  198. package/dist/features/tmux-subagent/types.d.ts +1 -0
  199. package/dist/hooks/anthropic-context-window-limit-recovery/message-builder.d.ts +1 -1
  200. package/dist/hooks/atlas/idle-completion-nudge.d.ts +10 -0
  201. package/dist/hooks/atlas/idle-constants.d.ts +4 -0
  202. package/dist/hooks/atlas/idle-continuation.d.ts +23 -0
  203. package/dist/hooks/atlas/idle-session-eligibility.d.ts +8 -0
  204. package/dist/hooks/atlas/tool-execute-after-direct-work.d.ts +9 -0
  205. package/dist/hooks/atlas/tool-execute-after-plan-tasks.d.ts +3 -0
  206. package/dist/hooks/atlas/tool-execute-after-subagent-completion.d.ts +14 -0
  207. package/dist/hooks/auto-update-checker/hook/background-update-check.d.ts +6 -0
  208. package/dist/hooks/auto-update-checker/hook/ignore-toast-error.d.ts +1 -0
  209. package/dist/hooks/hephaestus-agents-md-injector/hook.d.ts +37 -0
  210. package/dist/hooks/hephaestus-agents-md-injector/index.d.ts +1 -0
  211. package/dist/hooks/index.d.ts +1 -0
  212. package/dist/hooks/json-error-recovery/hook.d.ts +1 -1
  213. package/dist/hooks/ralph-loop/command-arguments.d.ts +1 -0
  214. package/dist/hooks/ralph-loop/event-handler-activity.d.ts +10 -0
  215. package/dist/hooks/ralph-loop/event-handler-completion.d.ts +9 -0
  216. package/dist/hooks/ralph-loop/event-handler-continuation.d.ts +16 -0
  217. package/dist/hooks/ralph-loop/event-handler-feedback.d.ts +16 -0
  218. package/dist/hooks/ralph-loop/event-handler-idle.d.ts +15 -0
  219. package/dist/hooks/ralph-loop/event-handler-impl.d.ts +10 -0
  220. package/dist/hooks/ralph-loop/event-handler-runtime-error.d.ts +4 -0
  221. package/dist/hooks/ralph-loop/event-handler-types.d.ts +20 -0
  222. package/dist/hooks/ralph-loop/loop-state-controller.d.ts +1 -0
  223. package/dist/hooks/ralph-loop/ralph-loop-event-handler.d.ts +4 -24
  224. package/dist/hooks/ralph-loop/ralph-loop-hook.d.ts +1 -0
  225. package/dist/hooks/read-image-resizer/png-chunks.d.ts +6 -0
  226. package/dist/hooks/read-image-resizer/png-constants.d.ts +1 -0
  227. package/dist/hooks/read-image-resizer/png-crc.d.ts +1 -0
  228. package/dist/hooks/read-image-resizer/png-decoder.d.ts +1 -0
  229. package/dist/hooks/read-image-resizer/png-encoder.d.ts +1 -0
  230. package/dist/hooks/read-image-resizer/png-filters.d.ts +1 -0
  231. package/dist/hooks/read-image-resizer/png-ihdr.d.ts +11 -0
  232. package/dist/hooks/read-image-resizer/png-nearest-neighbor.d.ts +1 -0
  233. package/dist/hooks/rules-injector/injection-output.d.ts +2 -0
  234. package/dist/hooks/rules-injector/injection-processor.d.ts +22 -0
  235. package/dist/hooks/rules-injector/injection-types.d.ts +43 -0
  236. package/dist/hooks/rules-injector/injector.d.ts +3 -47
  237. package/dist/hooks/rules-injector/match-decision-cache.d.ts +4 -0
  238. package/dist/hooks/rules-injector/parsed-rule-cache.d.ts +11 -0
  239. package/dist/hooks/rules-injector/path-resolution.d.ts +1 -0
  240. package/dist/hooks/rules-injector/rule-match-reason.d.ts +12 -0
  241. package/dist/hooks/rules-injector/transcript-hydration.d.ts +13 -2
  242. package/dist/hooks/runtime-fallback/auto-retry-abort.d.ts +2 -0
  243. package/dist/hooks/runtime-fallback/auto-retry-agent-context.d.ts +2 -0
  244. package/dist/hooks/runtime-fallback/auto-retry-cleanup.d.ts +2 -0
  245. package/dist/hooks/runtime-fallback/auto-retry-dispatch.d.ts +2 -0
  246. package/dist/hooks/runtime-fallback/auto-retry-metadata.d.ts +9 -0
  247. package/dist/hooks/runtime-fallback/auto-retry-timeout.d.ts +5 -0
  248. package/dist/hooks/runtime-fallback/fallback-bootstrap-model.d.ts +1 -1
  249. package/dist/hooks/runtime-fallback/fallback-state.d.ts +4 -1
  250. package/dist/hooks/runtime-fallback/normalize-model.d.ts +12 -0
  251. package/dist/hooks/session-notification-linux.d.ts +3 -0
  252. package/dist/hooks/session-notification-log.d.ts +2 -0
  253. package/dist/hooks/session-notification-macos.d.ts +3 -0
  254. package/dist/hooks/session-notification-platform.d.ts +3 -0
  255. package/dist/hooks/session-notification-runner.d.ts +9 -0
  256. package/dist/hooks/session-notification-send.d.ts +3 -0
  257. package/dist/hooks/session-notification-sender.d.ts +5 -6
  258. package/dist/hooks/session-notification-sound.d.ts +3 -0
  259. package/dist/hooks/session-notification-windows.d.ts +3 -0
  260. package/dist/hooks/session-recovery/error-recovery.d.ts +4 -0
  261. package/dist/hooks/session-recovery/hook-types.d.ts +22 -0
  262. package/dist/hooks/session-recovery/hook.d.ts +2 -19
  263. package/dist/hooks/session-recovery/interrupted-tool-results.d.ts +3 -0
  264. package/dist/hooks/session-recovery/message-state.d.ts +4 -0
  265. package/dist/hooks/session-recovery/storage/thinking-strip.d.ts +7 -1
  266. package/dist/hooks/start-work/context-info-builder.d.ts +9 -9
  267. package/dist/hooks/start-work/context-info-formatters.d.ts +21 -0
  268. package/dist/hooks/start-work/explicit-plan-context.d.ts +9 -0
  269. package/dist/hooks/start-work/plan-discovery-context.d.ts +25 -0
  270. package/dist/hooks/start-work/plan-selection.d.ts +4 -0
  271. package/dist/hooks/start-work/work-initializer.d.ts +17 -0
  272. package/dist/hooks/tool-pair-validator/hook.d.ts +1 -37
  273. package/dist/hooks/tool-pair-validator/message-transform.d.ts +2 -0
  274. package/dist/hooks/tool-pair-validator/tool-part-ids.d.ts +6 -0
  275. package/dist/hooks/tool-pair-validator/tool-result-repair.d.ts +4 -0
  276. package/dist/hooks/tool-pair-validator/types.d.ts +36 -0
  277. package/dist/index.js +12708 -9988
  278. package/dist/oh-my-opencode.schema.json +4 -0
  279. package/dist/openclaw/reply-listener-poll-loop.d.ts +3 -0
  280. package/dist/openclaw/reply-listener-signature.d.ts +2 -0
  281. package/dist/openclaw/reply-listener-sleep.d.ts +1 -0
  282. package/dist/openclaw/reply-listener-start.d.ts +9 -0
  283. package/dist/openclaw/reply-listener-status.d.ts +4 -0
  284. package/dist/openclaw/reply-listener-stop.d.ts +7 -0
  285. package/dist/openclaw/reply-listener.d.ts +5 -18
  286. package/dist/openclaw/session-registry-lock.d.ts +2 -0
  287. package/dist/openclaw/session-registry-paths.d.ts +9 -0
  288. package/dist/openclaw/session-registry-storage.d.ts +4 -0
  289. package/dist/openclaw/session-registry-types.d.ts +11 -0
  290. package/dist/openclaw/session-registry.d.ts +2 -11
  291. package/dist/plugin/chat-message/loop-commands.d.ts +9 -0
  292. package/dist/plugin/chat-message/model-cache-warning.d.ts +12 -0
  293. package/dist/plugin/chat-message/prompt-text.d.ts +2 -0
  294. package/dist/plugin/chat-message/session-model.d.ts +4 -0
  295. package/dist/plugin/chat-message/start-work-message.d.ts +5 -0
  296. package/dist/plugin/chat-message/types.d.ts +67 -0
  297. package/dist/plugin/chat-message.d.ts +3 -24
  298. package/dist/plugin/event-error-utils.d.ts +14 -0
  299. package/dist/plugin/event-hook-dispatcher.d.ts +5 -0
  300. package/dist/plugin/event-model-fallback-state.d.ts +30 -0
  301. package/dist/plugin/event-model-fallback.d.ts +39 -0
  302. package/dist/plugin/event-session-lifecycle.d.ts +49 -0
  303. package/dist/plugin/event-session-recovery.d.ts +9 -0
  304. package/dist/plugin/event-team-handlers.d.ts +13 -0
  305. package/dist/plugin/event-types.d.ts +78 -0
  306. package/dist/plugin/event.d.ts +3 -12
  307. package/dist/plugin/hooks/create-core-hooks.d.ts +1 -0
  308. package/dist/plugin/hooks/create-session-hooks.d.ts +2 -1
  309. package/dist/plugin/hooks/model-fallback-title-updater.d.ts +8 -0
  310. package/dist/plugin/session-compacting.d.ts +4 -1
  311. package/dist/plugin/system-transform.d.ts +1 -1
  312. package/dist/plugin/tool-execute-after.d.ts +2 -0
  313. package/dist/plugin/tool-registry-core-tools.d.ts +15 -0
  314. package/dist/plugin/tool-registry-factories.d.ts +36 -0
  315. package/dist/plugin/tool-registry-gated-tools.d.ts +16 -0
  316. package/dist/plugin/tool-registry-team-tools.d.ts +14 -0
  317. package/dist/plugin/tool-registry-trimming.d.ts +2 -0
  318. package/dist/plugin/tool-registry.d.ts +3 -38
  319. package/dist/plugin/ultrawork-db-model-override.d.ts +1 -1
  320. package/dist/plugin-config/agent-order-warnings.d.ts +1 -0
  321. package/dist/plugin-config/config-merger.d.ts +2 -0
  322. package/dist/plugin-config/layered-config-loader.d.ts +2 -0
  323. package/dist/plugin-config/single-config-loader.d.ts +4 -0
  324. package/dist/plugin-config.d.ts +3 -5
  325. package/dist/plugin-handlers/agent-config-assembly.d.ts +19 -0
  326. package/dist/plugin-handlers/agent-config-finalizer.d.ts +4 -0
  327. package/dist/plugin-handlers/agent-config-handler.d.ts +2 -11
  328. package/dist/plugin-handlers/agent-config-types.d.ts +30 -0
  329. package/dist/plugin-handlers/agent-skill-discovery.d.ts +3 -0
  330. package/dist/plugin-handlers/agent-source-loader.d.ts +2 -0
  331. package/dist/plugin-handlers/hook-config-handler.d.ts +0 -3
  332. package/dist/shared/context-window-usage.d.ts +7 -0
  333. package/dist/shared/dynamic-truncator-types.d.ts +17 -0
  334. package/dist/shared/dynamic-truncator.d.ts +8 -23
  335. package/dist/shared/migration/migrations-sidecar.d.ts +2 -2
  336. package/dist/shared/migration/model-versions.d.ts +7 -4
  337. package/dist/shared/model-availability.d.ts +1 -1
  338. package/dist/shared/opencode-version.d.ts +2 -2
  339. package/dist/shared/sparkshell-awareness.d.ts +5 -0
  340. package/dist/shared/spawn-with-windows-hide.d.ts +2 -0
  341. package/dist/shared/token-limit-truncator.d.ts +2 -0
  342. package/dist/testing/module-mock-lifecycle.d.ts +8 -0
  343. package/dist/tools/delegate-task/openai-categories.d.ts +0 -1
  344. package/dist/tools/delegate-task/subagent-agent-match.d.ts +3 -0
  345. package/dist/tools/delegate-task/subagent-model-resolution.d.ts +4 -0
  346. package/dist/tools/delegate-task/subagent-request-preflight.d.ts +3 -0
  347. package/dist/tools/delegate-task/subagent-resolution-types.d.ts +32 -0
  348. package/dist/tools/delegate-task/subagent-resolver.d.ts +3 -12
  349. package/dist/tools/delegate-task/sync-completion-message.d.ts +20 -0
  350. package/dist/tools/delegate-task/sync-poll-error-recovery.d.ts +1 -0
  351. package/dist/tools/delegate-task/sync-session-lifecycle.d.ts +12 -0
  352. package/dist/tools/delegate-task/sync-session-poller.d.ts +2 -0
  353. package/dist/tools/delegate-task/sync-spawn-reservation.d.ts +10 -0
  354. package/dist/tools/delegate-task/sync-task-metadata.d.ts +11 -0
  355. package/dist/tools/delegate-task/sync-task-runner.d.ts +30 -0
  356. package/dist/tools/delegate-task/sync-task.d.ts +2 -1
  357. package/dist/tools/hashline-edit/formatter-trigger.d.ts +2 -2
  358. package/package.json +15 -14
  359. package/packages/git-bash-mcp/dist/cli.js +29 -12
  360. package/packages/lsp-tools-mcp/dist/lsp/client-wrapper.d.ts +1 -1
  361. package/packages/lsp-tools-mcp/dist/lsp/client-wrapper.js +1 -1
  362. package/packages/lsp-tools-mcp/dist/lsp/config-loader.js +95 -30
  363. package/packages/lsp-tools-mcp/dist/lsp/server-installation.d.ts +1 -2
  364. package/packages/lsp-tools-mcp/dist/lsp/server-installation.js +1 -11
  365. package/packages/lsp-tools-mcp/dist/lsp/transport.d.ts +1 -0
  366. package/packages/lsp-tools-mcp/dist/lsp/transport.js +5 -10
  367. package/packages/lsp-tools-mcp/dist/lsp/workspace-edit.d.ts +4 -1
  368. package/packages/lsp-tools-mcp/dist/lsp/workspace-edit.js +84 -23
  369. package/packages/lsp-tools-mcp/dist/missing-dependency-result.d.ts +2 -0
  370. package/packages/lsp-tools-mcp/dist/missing-dependency-result.js +14 -0
  371. package/packages/lsp-tools-mcp/dist/tools.js +64 -80
  372. package/packages/lsp-tools-mcp/package.json +4 -4
  373. package/packages/omo-codex/lazycodex-repository/.github/workflows/pr-source-guidance.yml +36 -0
  374. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  375. package/packages/omo-codex/plugin/README.md +3 -1
  376. package/packages/omo-codex/plugin/components/comment-checker/src/apply-patch.ts +188 -0
  377. package/packages/omo-codex/plugin/components/comment-checker/src/core-values.ts +1 -0
  378. package/packages/omo-codex/plugin/components/comment-checker/src/core.ts +15 -361
  379. package/packages/omo-codex/plugin/components/comment-checker/src/hook-input.ts +19 -0
  380. package/packages/omo-codex/plugin/components/comment-checker/src/record.ts +11 -0
  381. package/packages/omo-codex/plugin/components/comment-checker/src/request-extractor.ts +102 -0
  382. package/packages/omo-codex/plugin/components/comment-checker/src/types.ts +51 -0
  383. package/packages/omo-codex/plugin/components/comment-checker/test/codex-hook.test.ts +145 -0
  384. package/packages/omo-codex/plugin/components/comment-checker/test/core.test.ts +200 -0
  385. package/packages/omo-codex/plugin/components/lsp/CHANGELOG.md +2 -2
  386. package/packages/omo-codex/plugin/components/rules/bundled-rules/hephaestus.md +11 -5
  387. package/packages/omo-codex/plugin/components/rules/src/hook-output.ts +11 -1
  388. package/packages/omo-codex/plugin/components/rules/src/post-compact-budget.ts +0 -1
  389. package/packages/omo-codex/plugin/components/rules/src/rules/constants.ts +1 -4
  390. package/packages/omo-codex/plugin/components/rules/src/rules/engine-dynamic-cache.ts +87 -0
  391. package/packages/omo-codex/plugin/components/rules/src/rules/engine-dynamic-loader.ts +94 -0
  392. package/packages/omo-codex/plugin/components/rules/src/rules/engine-loader.ts +84 -0
  393. package/packages/omo-codex/plugin/components/rules/src/rules/engine-paths.ts +103 -0
  394. package/packages/omo-codex/plugin/components/rules/src/rules/engine-static-loader.ts +43 -0
  395. package/packages/omo-codex/plugin/components/rules/src/rules/engine-types.ts +45 -0
  396. package/packages/omo-codex/plugin/components/rules/src/rules/engine.ts +8 -419
  397. package/packages/omo-codex/plugin/components/rules/src/rules/formatter.ts +39 -13
  398. package/packages/omo-codex/plugin/components/rules/src/rules/parser-frontmatter.ts +39 -0
  399. package/packages/omo-codex/plugin/components/rules/src/rules/parser-yaml.ts +271 -0
  400. package/packages/omo-codex/plugin/components/rules/src/rules/parser.ts +3 -294
  401. package/packages/omo-codex/plugin/components/rules/src/rules/truncator.ts +17 -0
  402. package/packages/omo-codex/plugin/components/rules/src/sparkshell-awareness.ts +57 -0
  403. package/packages/omo-codex/plugin/components/rules/src/static-injection.ts +13 -2
  404. package/packages/omo-codex/plugin/components/rules/src/transcript-rule-filter.ts +17 -0
  405. package/packages/omo-codex/plugin/components/rules/test/bundled-rules-priority.test.ts +2 -1
  406. package/packages/omo-codex/plugin/components/rules/test/bundled-rules.test.ts +26 -11
  407. package/packages/omo-codex/plugin/components/rules/test/codex-hook-context-pressure.test.ts +104 -138
  408. package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-budget.test.ts +5 -2
  409. package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-context.test.ts +12 -5
  410. package/packages/omo-codex/plugin/components/rules/test/codex-hook.test.ts +10 -4
  411. package/packages/omo-codex/plugin/components/rules/test/engine.test.ts +65 -3
  412. package/packages/omo-codex/plugin/components/rules/test/formatter.test.ts +67 -2
  413. package/packages/omo-codex/plugin/components/rules/test/hook-output.test.ts +16 -0
  414. package/packages/omo-codex/plugin/components/rules/test/parser.test.ts +153 -0
  415. package/packages/omo-codex/plugin/components/rules/test/post-compact-budget.test.ts +12 -0
  416. package/packages/omo-codex/plugin/components/rules/test/sparkshell-awareness.test.ts +236 -0
  417. package/packages/omo-codex/plugin/components/rules/test/tool-paths.test.ts +28 -50
  418. package/packages/omo-codex/plugin/components/rules/test/windows-git-bash-bundled-rule.test.ts +6 -3
  419. package/packages/omo-codex/plugin/components/start-work-continuation/directive.md +13 -6
  420. package/packages/omo-codex/plugin/components/start-work-continuation/src/codex-hook.ts +21 -0
  421. package/packages/omo-codex/plugin/components/start-work-continuation/test/codex-hook.test.ts +64 -2
  422. package/packages/omo-codex/plugin/components/telemetry/README.md +11 -1
  423. package/packages/omo-codex/plugin/components/telemetry/biome.json +12 -0
  424. package/packages/omo-codex/plugin/components/telemetry/src/codex-hook.ts +30 -3
  425. package/packages/omo-codex/plugin/components/telemetry/src/diagnostics.ts +154 -0
  426. package/packages/omo-codex/plugin/components/telemetry/src/posthog-activity-state.ts +18 -2
  427. package/packages/omo-codex/plugin/components/telemetry/src/posthog.ts +36 -4
  428. package/packages/omo-codex/plugin/components/telemetry/test/codex-hook-diagnostics.test.ts +115 -0
  429. package/packages/omo-codex/plugin/components/telemetry/test/codex-hook.test.ts +16 -25
  430. package/packages/omo-codex/plugin/components/telemetry/test/diagnostics.test.ts +119 -0
  431. package/packages/omo-codex/plugin/components/ultrawork/AGENTS.md +1 -1
  432. package/packages/omo-codex/plugin/components/ultrawork/README.md +5 -5
  433. package/packages/omo-codex/plugin/components/ultrawork/agents/codex-ultrawork-reviewer.toml +2 -1
  434. package/packages/omo-codex/plugin/components/ultrawork/agents/explorer.toml +1 -0
  435. package/packages/omo-codex/plugin/components/ultrawork/agents/metis.toml +0 -1
  436. package/packages/omo-codex/plugin/components/ultrawork/agents/momus.toml +0 -1
  437. package/packages/omo-codex/plugin/components/ultrawork/agents/plan.toml +1 -2
  438. package/packages/omo-codex/plugin/components/ultrawork/directive.md +97 -32
  439. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/SKILL.md +65 -0
  440. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/agents/openai.yaml +7 -0
  441. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/full-workflow.md +131 -0
  442. package/packages/omo-codex/plugin/components/ultrawork/test/codex-hook.test.ts +38 -10
  443. package/packages/omo-codex/plugin/components/ultrawork/test/directive-contract.test.ts +18 -0
  444. package/packages/omo-codex/plugin/components/ultrawork/test/package-smoke.test.ts +47 -0
  445. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  446. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/SKILL.md +12 -8
  447. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +28 -21
  448. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-instruction.ts +2 -3
  449. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-hook.ts +7 -7
  450. package/packages/omo-codex/plugin/components/ulw-loop/src/command-types.ts +36 -0
  451. package/packages/omo-codex/plugin/components/ulw-loop/src/constants.ts +64 -0
  452. package/packages/omo-codex/plugin/components/ulw-loop/src/domain-types.ts +98 -0
  453. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-crud.ts +17 -2
  454. package/packages/omo-codex/plugin/components/ulw-loop/src/runtime.ts +22 -0
  455. package/packages/omo-codex/plugin/components/ulw-loop/src/steering-types.ts +69 -0
  456. package/packages/omo-codex/plugin/components/ulw-loop/src/types.ts +5 -277
  457. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-commands.test.ts +35 -13
  458. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-complete-goals.test.ts +52 -0
  459. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-steering.test.ts +67 -111
  460. package/packages/omo-codex/plugin/components/ulw-loop/test/codex-goal-instruction.test.ts +2 -2
  461. package/packages/omo-codex/plugin/components/ulw-loop/test/codex-hook.test.ts +31 -2
  462. package/packages/omo-codex/plugin/components/ulw-loop/test/package-smoke.test.ts +46 -9
  463. package/packages/omo-codex/plugin/components/ulw-loop/test/steering.test.ts +20 -29
  464. package/packages/omo-codex/plugin/model-catalog.json +5 -11
  465. package/packages/omo-codex/plugin/package-lock.json +1 -1
  466. package/packages/omo-codex/plugin/scripts/auto-update-state.mjs +78 -0
  467. package/packages/omo-codex/plugin/scripts/auto-update.mjs +166 -76
  468. package/packages/omo-codex/plugin/scripts/migrate-codex-config/catalog.mjs +71 -0
  469. package/packages/omo-codex/plugin/scripts/migrate-codex-config/config-paths.mjs +44 -0
  470. package/packages/omo-codex/plugin/scripts/migrate-codex-config/multi-agent-v2-guard.mjs +40 -0
  471. package/packages/omo-codex/plugin/scripts/migrate-codex-config/root-settings.mjs +74 -0
  472. package/packages/omo-codex/plugin/scripts/migrate-codex-config/state.mjs +29 -0
  473. package/packages/omo-codex/plugin/scripts/migrate-codex-config.mjs +33 -204
  474. package/packages/omo-codex/plugin/scripts/spawn-command.mjs +11 -0
  475. package/packages/omo-codex/plugin/scripts/sync-hook-status-messages.mjs +23 -9
  476. package/packages/omo-codex/plugin/scripts/sync-skills.mjs +131 -28
  477. package/packages/omo-codex/plugin/skills/debugging/references/methodology/04-oracle-triple.md +3 -3
  478. package/packages/omo-codex/plugin/skills/git-master/SKILL.md +100 -0
  479. package/packages/omo-codex/plugin/skills/git-master/agents/openai.yaml +13 -0
  480. package/packages/omo-codex/plugin/skills/init-deep/SKILL.md +9 -7
  481. package/packages/omo-codex/plugin/skills/lcx-contribute-bug-fix/SKILL.md +176 -0
  482. package/packages/omo-codex/plugin/skills/lcx-contribute-bug-fix/agents/openai.yaml +12 -0
  483. package/packages/omo-codex/plugin/skills/lcx-contribute-bug-fix/scripts/create-pr-body.mjs +107 -0
  484. package/packages/omo-codex/plugin/skills/lcx-report-bug/SKILL.md +119 -14
  485. package/packages/omo-codex/plugin/skills/lcx-report-bug/agents/openai.yaml +4 -2
  486. package/packages/omo-codex/plugin/skills/programming/references/go/concurrency.md +2 -2
  487. package/packages/omo-codex/plugin/skills/programming/references/python/async-anyio.md +6 -6
  488. package/packages/omo-codex/plugin/skills/programming/references/python/pydantic-ai.md +12 -12
  489. package/packages/omo-codex/plugin/skills/programming/references/typescript/backend-hono.md +7 -7
  490. package/packages/omo-codex/plugin/skills/refactor/SKILL.md +13 -11
  491. package/packages/omo-codex/plugin/skills/remove-ai-slops/SKILL.md +10 -8
  492. package/packages/omo-codex/plugin/skills/review-work/SKILL.md +68 -33
  493. package/packages/omo-codex/plugin/skills/start-work/SKILL.md +86 -22
  494. package/packages/omo-codex/plugin/skills/ultraresearch/SKILL.md +770 -0
  495. package/packages/omo-codex/plugin/skills/ulw-loop/SKILL.md +12 -8
  496. package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +28 -21
  497. package/packages/omo-codex/plugin/skills/ulw-plan/SKILL.md +45 -379
  498. package/packages/omo-codex/plugin/skills/ulw-plan/agents/openai.yaml +7 -0
  499. package/packages/omo-codex/plugin/skills/ulw-plan/references/full-workflow.md +131 -0
  500. package/packages/omo-codex/plugin/skills/visual-qa/SKILL.md +237 -0
  501. package/packages/omo-codex/plugin/skills/visual-qa/scripts/ansi.ts +17 -0
  502. package/packages/omo-codex/plugin/skills/visual-qa/scripts/cli.ts +82 -0
  503. package/packages/omo-codex/plugin/skills/visual-qa/scripts/east-asian-width.ts +72 -0
  504. package/packages/omo-codex/plugin/skills/visual-qa/scripts/image-diff.ts +109 -0
  505. package/packages/omo-codex/plugin/skills/visual-qa/scripts/png-crc.ts +27 -0
  506. package/packages/omo-codex/plugin/skills/visual-qa/scripts/png-decode.ts +206 -0
  507. package/packages/omo-codex/plugin/skills/visual-qa/scripts/png-synth.ts +57 -0
  508. package/packages/omo-codex/plugin/skills/visual-qa/scripts/tui-grid.ts +88 -0
  509. package/packages/omo-codex/plugin/skills/visual-qa/scripts/types.ts +54 -0
  510. package/packages/omo-codex/plugin/test/aggregate-agents.test.mjs +55 -0
  511. package/packages/omo-codex/plugin/test/aggregate-build.test.mjs +38 -0
  512. package/packages/omo-codex/plugin/test/aggregate-hooks.test.mjs +164 -0
  513. package/packages/omo-codex/plugin/test/aggregate-manifest.test.mjs +73 -0
  514. package/packages/omo-codex/plugin/test/aggregate-mcp.test.mjs +69 -0
  515. package/packages/omo-codex/plugin/test/aggregate-model-catalog.test.mjs +53 -0
  516. package/packages/omo-codex/plugin/test/aggregate-plugin-fixture.mjs +83 -0
  517. package/packages/omo-codex/plugin/test/aggregate-skills.test.mjs +67 -0
  518. package/packages/omo-codex/plugin/test/aggregate.test.mjs +2 -514
  519. package/packages/omo-codex/plugin/test/auto-update-state-persistence.test.mjs +36 -0
  520. package/packages/omo-codex/plugin/test/auto-update.test.mjs +191 -29
  521. package/packages/omo-codex/plugin/test/component-bin-names.test.mjs +1 -1
  522. package/packages/omo-codex/plugin/test/global-review-debug-gate.test.mjs +29 -0
  523. package/packages/omo-codex/plugin/test/hook-status-message.test.mjs +23 -10
  524. package/packages/omo-codex/plugin/test/lcx-bug-skills.test.mjs +81 -0
  525. package/packages/omo-codex/plugin/test/lcx-contribute-bug-fix-template.test.mjs +91 -0
  526. package/packages/omo-codex/plugin/test/migrate-codex-config.test.mjs +244 -9
  527. package/packages/omo-codex/plugin/test/node-install-surface.test.mjs +0 -19
  528. package/packages/omo-codex/plugin/test/start-work-skill.test.mjs +107 -0
  529. package/packages/omo-codex/plugin/test/subagent-guidance.test.mjs +82 -7
  530. package/packages/omo-codex/plugin/test/sync-hook-status-messages.test.mjs +58 -6
  531. package/packages/omo-codex/plugin/test/sync-skills-orchestration.test.mjs +152 -0
  532. package/packages/omo-codex/plugin/test/sync-skills.test.mjs +158 -50
  533. package/packages/omo-codex/plugin/test/ulw-plan-skill.test.mjs +43 -0
  534. package/packages/omo-codex/scripts/install/agent-source-roots.mjs +13 -0
  535. package/packages/omo-codex/scripts/install/agents.mjs +84 -14
  536. package/packages/omo-codex/scripts/install/bin-links.mjs +239 -0
  537. package/packages/omo-codex/scripts/install/cache.mjs +152 -108
  538. package/packages/omo-codex/scripts/install/cached-marketplace-manifest.mjs +21 -0
  539. package/packages/omo-codex/scripts/install/cli-args.mjs +39 -2
  540. package/packages/omo-codex/scripts/install/config.mjs +9 -5
  541. package/packages/omo-codex/scripts/install/lazycodex-version-stamp.mjs +102 -0
  542. package/packages/omo-codex/scripts/install/legacy-bins.mjs +9 -1
  543. package/packages/omo-codex/scripts/install/model-catalog.mjs +9 -1
  544. package/packages/omo-codex/scripts/install/multi-agent-v2-config.mjs +12 -10
  545. package/packages/omo-codex/scripts/install/process.mjs +3 -1
  546. package/packages/omo-codex/scripts/install/project-local-cleanup.mjs +0 -1
  547. package/packages/omo-codex/scripts/install/snapshot.mjs +0 -1
  548. package/packages/omo-codex/scripts/install-agent-links.test.mjs +205 -11
  549. package/packages/omo-codex/scripts/install-bin-links.test.mjs +123 -1
  550. package/packages/omo-codex/scripts/install-cache-copy.test.mjs +129 -5
  551. package/packages/omo-codex/scripts/install-cli-args.test.mjs +82 -1
  552. package/packages/omo-codex/scripts/install-config-preservation.test.mjs +43 -0
  553. package/packages/omo-codex/scripts/install-config-reasoning.test.mjs +14 -1
  554. package/packages/omo-codex/scripts/install-config.test.mjs +49 -1
  555. package/packages/omo-codex/scripts/install-lazycodex-version-stamp.test.mjs +84 -0
  556. package/packages/omo-codex/scripts/install-local-entrypoint.test.mjs +51 -0
  557. package/packages/omo-codex/scripts/install-local.mjs +42 -40
  558. package/packages/omo-codex/scripts/install-local.test.mjs +17 -241
  559. package/packages/omo-codex/scripts/install-marketplace-cache.test.mjs +162 -0
  560. package/packages/omo-codex/scripts/install-packaged-local.test.mjs +10 -6
  561. package/packages/omo-codex/scripts/install-project-local-cleanup.test.mjs +73 -2
  562. package/packages/omo-codex/scripts/sync-telemetry-component.mjs +1 -0
  563. package/packages/shared-skills/skills/debugging/references/methodology/04-oracle-triple.md +3 -3
  564. package/packages/shared-skills/skills/git-master/SKILL.md +100 -0
  565. package/packages/shared-skills/skills/git-master/agents/openai.yaml +13 -0
  566. package/packages/shared-skills/skills/lcx-contribute-bug-fix/SKILL.md +176 -0
  567. package/packages/shared-skills/skills/lcx-contribute-bug-fix/agents/openai.yaml +12 -0
  568. package/packages/shared-skills/skills/lcx-contribute-bug-fix/scripts/create-pr-body.mjs +107 -0
  569. package/packages/shared-skills/skills/lcx-report-bug/SKILL.md +119 -14
  570. package/packages/shared-skills/skills/lcx-report-bug/agents/openai.yaml +4 -2
  571. package/packages/shared-skills/skills/programming/references/go/concurrency.md +2 -2
  572. package/packages/shared-skills/skills/programming/references/python/async-anyio.md +6 -6
  573. package/packages/shared-skills/skills/programming/references/python/pydantic-ai.md +12 -12
  574. package/packages/shared-skills/skills/programming/references/typescript/backend-hono.md +7 -7
  575. package/packages/shared-skills/skills/refactor/SKILL.md +4 -4
  576. package/packages/shared-skills/skills/remove-ai-slops/SKILL.md +1 -1
  577. package/packages/shared-skills/skills/review-work/SKILL.md +55 -33
  578. package/packages/shared-skills/skills/start-work/SKILL.md +76 -19
  579. package/packages/shared-skills/skills/ultraresearch/SKILL.md +770 -0
  580. package/packages/shared-skills/skills/visual-qa/SKILL.md +219 -0
  581. package/packages/shared-skills/skills/visual-qa/scripts/ansi.test.ts +45 -0
  582. package/packages/shared-skills/skills/visual-qa/scripts/ansi.ts +17 -0
  583. package/packages/shared-skills/skills/visual-qa/scripts/cli.test.ts +73 -0
  584. package/packages/shared-skills/skills/visual-qa/scripts/cli.ts +82 -0
  585. package/packages/shared-skills/skills/visual-qa/scripts/east-asian-width.test.ts +60 -0
  586. package/packages/shared-skills/skills/visual-qa/scripts/east-asian-width.ts +72 -0
  587. package/packages/shared-skills/skills/visual-qa/scripts/image-diff.test.ts +70 -0
  588. package/packages/shared-skills/skills/visual-qa/scripts/image-diff.ts +109 -0
  589. package/packages/shared-skills/skills/visual-qa/scripts/png-crc.ts +27 -0
  590. package/packages/shared-skills/skills/visual-qa/scripts/png-decode.test.ts +44 -0
  591. package/packages/shared-skills/skills/visual-qa/scripts/png-decode.ts +206 -0
  592. package/packages/shared-skills/skills/visual-qa/scripts/png-synth.ts +57 -0
  593. package/packages/shared-skills/skills/visual-qa/scripts/skill-prompt-contract.test.ts +83 -0
  594. package/packages/shared-skills/skills/visual-qa/scripts/tui-grid.test.ts +57 -0
  595. package/packages/shared-skills/skills/visual-qa/scripts/tui-grid.ts +88 -0
  596. package/packages/shared-skills/skills/visual-qa/scripts/types.ts +54 -0
  597. package/postinstall.mjs +24 -1
  598. package/dist/agents/custom-agent-summaries.d.ts +0 -8
  599. package/dist/agents/hephaestus/gpt-5-3-codex.d.ts +0 -20
  600. package/dist/agents/prometheus/gemini.d.ts +0 -1
  601. package/dist/agents/prometheus/gpt.d.ts +0 -1
  602. package/dist/agents/sisyphus-junior/gpt-5-3-codex.d.ts +0 -8
  603. package/dist/features/background-agent/session-route.d.ts +0 -12
  604. package/dist/features/background-agent/spawner/parent-directory-resolver.d.ts +0 -6
  605. package/dist/features/background-agent/state.d.ts +0 -35
  606. package/dist/features/claude-tasks/session-storage.d.ts +0 -9
  607. package/dist/features/mcp-oauth/resource-indicator.d.ts +0 -2
  608. package/dist/features/mcp-oauth/schema.d.ts +0 -6
  609. package/dist/features/opencode-skill-loader/async-loader.d.ts +0 -6
  610. package/dist/features/opencode-skill-loader/blocking.d.ts +0 -2
  611. package/dist/features/opencode-skill-loader/discover-worker.d.ts +0 -1
  612. package/dist/hooks/session-recovery/recover-empty-content-message-sdk.d.ts +0 -13
  613. package/dist/shared/bun-hash-shim.d.ts +0 -1
  614. package/dist/tools/delegate-task/resolve-call-id.d.ts +0 -2
  615. package/packages/shared-skills/skills/ulw-plan/SKILL.md +0 -383
  616. /package/packages/lsp-tools-mcp/dist/lsp/{utils.d.ts → startup-failure.d.ts} +0 -0
  617. /package/packages/lsp-tools-mcp/dist/lsp/{utils.js → startup-failure.js} +0 -0
@@ -1,514 +1,2 @@
1
- import assert from "node:assert/strict";
2
- import { readdir, readFile, stat } from "node:fs/promises";
3
- import { basename, dirname, join } from "node:path";
4
- import test from "node:test";
5
- import { fileURLToPath } from "node:url";
6
-
7
- const root = dirname(dirname(fileURLToPath(import.meta.url)));
8
- const mcpPackageManifestPaths = ["../../lsp-tools-mcp/package.json", "../../ast-grep-mcp/package.json", "../../git-bash-mcp/package.json"];
9
- const mcpPackageManifestExists = await Promise.all(mcpPackageManifestPaths.map(exists));
10
-
11
- async function readJson(relativePath) {
12
- return JSON.parse(await readFile(join(root, relativePath), "utf8"));
13
- }
14
-
15
- async function exists(relativePath) {
16
- try {
17
- await stat(join(root, relativePath));
18
- return true;
19
- } catch (error) {
20
- if (error instanceof Error && "code" in error && error.code === "ENOENT") return false;
21
- throw error;
22
- }
23
- }
24
-
25
- async function readComponentHookManifests() {
26
- const components = await readdir(join(root, "components"), { withFileTypes: true });
27
- const manifests = [];
28
- for (const entry of components) {
29
- if (!entry.isDirectory()) continue;
30
- const source = join("components", entry.name, "hooks", "hooks.json");
31
- if (!(await exists(source))) continue;
32
- manifests.push({ source, hooks: await readJson(source) });
33
- }
34
- return manifests.sort((left, right) => left.source.localeCompare(right.source));
35
- }
36
-
37
- function collectCommandHooks(hooks, source) {
38
- const config = hooks.hooks;
39
- if (typeof config !== "object" || config === null || Array.isArray(config)) {
40
- throw new TypeError(`Invalid hooks manifest: ${source}`);
41
- }
42
- const commandHooks = [];
43
- for (const [eventName, groups] of Object.entries(config)) {
44
- if (!Array.isArray(groups)) {
45
- throw new TypeError(`Invalid hook groups in ${source}:${eventName}`);
46
- }
47
- groups.forEach((group, groupIndex) => {
48
- if (typeof group !== "object" || group === null || !Array.isArray(group.hooks)) {
49
- throw new TypeError(`Invalid hook group in ${source}:${eventName}:${groupIndex}`);
50
- }
51
- group.hooks.forEach((handler, handlerIndex) => {
52
- if (typeof handler !== "object" || handler === null || handler.type !== "command") return;
53
- commandHooks.push({ source, eventName, groupIndex, handlerIndex, handler });
54
- });
55
- });
56
- }
57
- return commandHooks;
58
- }
59
-
60
- function hookLocation({ source, eventName, groupIndex, handlerIndex, handler }) {
61
- return `${source}:${eventName}:${groupIndex}:${handlerIndex}:${handler.command}`;
62
- }
63
-
64
- function findSpawnAgentTypes(content) {
65
- const agentTypes = new Set();
66
- const regex = /spawn_agent\(agent_type="([^"]+)"/g;
67
- for (const match of content.matchAll(regex)) {
68
- agentTypes.add(match[1]);
69
- }
70
- return [...agentTypes].sort();
71
- }
72
-
73
- function findRoleSpecificSpawnsWithoutForkTurnsNone(content) {
74
- const missingForkTurns = [];
75
- const regex = /spawn_agent\(agent_type="([^"]+)"[^)]*\)/g;
76
- for (const match of content.matchAll(regex)) {
77
- const call = match[0];
78
- if (!call.includes('fork_turns="none"')) {
79
- missingForkTurns.push(call);
80
- }
81
- }
82
- return missingForkTurns;
83
- }
84
-
85
- test("#given aggregate plugin manifest #when inspected #then it owns the omo namespace", async () => {
86
- // given
87
- const manifest = await readJson(".codex-plugin/plugin.json");
88
-
89
- // when
90
- const hookPath = manifest.hooks;
91
- const skillsPath = manifest.skills;
92
- const mcpPath = manifest.mcpServers;
93
-
94
- // then
95
- assert.equal(manifest.name, "omo");
96
- assert.equal(hookPath, "./hooks/hooks.json");
97
- assert.equal(skillsPath, "./skills/");
98
- assert.equal(mcpPath, "./.mcp.json");
99
- });
100
-
101
- test("#given aggregate plugin metadata #when inspected #then ulw-loop is the public loop name", async () => {
102
- // given
103
- const manifestText = await readFile(join(root, ".codex-plugin", "plugin.json"), "utf8");
104
- const manifest = JSON.parse(manifestText);
105
-
106
- // when
107
- const longDescription = String(manifest.interface?.longDescription ?? "");
108
-
109
- // then
110
- assert.match(longDescription, /ulw-loop/);
111
- });
112
-
113
- test("#given isolated components #when hooks are inspected #then commands stay inside component roots", async () => {
114
- // given
115
- const hooks = await readJson("hooks/hooks.json");
116
- const text = JSON.stringify(hooks);
117
-
118
- // when
119
- const componentMarkers = [
120
- "components/comment-checker/dist/cli.js",
121
- "components/lsp/dist/cli.js",
122
- "components/rules/dist/cli.js",
123
- "components/start-work-continuation/dist/cli.js",
124
- "components/telemetry/dist/cli.js",
125
- "components/ulw-loop/dist/cli.js",
126
- "components/ultrawork/dist/cli.js",
127
- "scripts/auto-update.mjs",
128
- ];
129
-
130
- // then
131
- for (const marker of componentMarkers) {
132
- assert.match(text, new RegExp(marker.replaceAll("/", "\\/")));
133
- }
134
- assert.doesNotMatch(text, /codex-(comment-checker|lsp|rules|telemetry|ulw-loop|ultrawork)@/);
135
- assert.equal(await exists("scripts/migrate-codex-config.mjs"), true);
136
- });
137
-
138
- test("#given aggregate PostCompact hooks #when hooks are inspected #then LSP diagnostics cache reset is registered", async () => {
139
- // given
140
- const hooks = await readJson("hooks/hooks.json");
141
-
142
- // when
143
- const lspPostCompactHooks = collectCommandHooks(hooks, "hooks/hooks.json").filter(
144
- (hook) =>
145
- hook.eventName === "PostCompact" &&
146
- hook.handler.command === 'node "${PLUGIN_ROOT}/components/lsp/dist/cli.js" hook post-compact',
147
- );
148
-
149
- // then
150
- assert.equal(lspPostCompactHooks.length, 1);
151
- assert.equal(lspPostCompactHooks[0]?.handler.statusMessage, "LazyCodex(0.1.0): Resetting LSP Diagnostics Cache");
152
- });
153
-
154
- test("#given aggregate hook commands #when inspected #then every command exposes a Codex status message", async () => {
155
- // given
156
- const hooks = await readJson("hooks/hooks.json");
157
-
158
- // when
159
- const commandHooks = collectCommandHooks(hooks, "hooks/hooks.json");
160
- const missingStatusMessages = commandHooks
161
- .filter(({ handler }) => typeof handler.statusMessage !== "string" || handler.statusMessage.trim() === "")
162
- .map(hookLocation);
163
-
164
- // then
165
- assert.deepEqual(missingStatusMessages, []);
166
- });
167
-
168
- test("#given component hook commands #when inspected #then standalone packages expose Codex status messages", async () => {
169
- // given
170
- const componentHooks = await readComponentHookManifests();
171
-
172
- // when
173
- const missingStatusMessages = componentHooks
174
- .flatMap(({ source, hooks }) => collectCommandHooks(hooks, source))
175
- .filter(({ handler }) => typeof handler.statusMessage !== "string" || handler.statusMessage.trim() === "")
176
- .map(hookLocation);
177
-
178
- // then
179
- assert.deepEqual(missingStatusMessages, []);
180
- });
181
-
182
- test("#given hook status messages #when inspected #then labels describe OMO responsibilities instead of the hook runner", async () => {
183
- // given
184
- const aggregateHooks = await readJson("hooks/hooks.json");
185
- const componentHooks = await readComponentHookManifests();
186
-
187
- // when
188
- const commandHooks = [
189
- ...collectCommandHooks(aggregateHooks, "hooks/hooks.json"),
190
- ...componentHooks.flatMap(({ source, hooks }) => collectCommandHooks(hooks, source)),
191
- ];
192
- const genericStatusMessages = commandHooks
193
- .filter(({ handler }) => typeof handler.statusMessage !== "string" || /\bhook\b/i.test(handler.statusMessage))
194
- .map(hookLocation);
195
-
196
- // then
197
- assert.deepEqual(genericStatusMessages, []);
198
- });
199
-
200
- test("#given aggregate OMO plugin is enabled #when hooks are inspected #then shell guidance and ulw-loop guard are registered", async () => {
201
- // given
202
- const hooks = await readJson("hooks/hooks.json");
203
- const text = JSON.stringify(hooks);
204
-
205
- // when
206
- const preToolUseGroups = hooks.hooks.PreToolUse;
207
-
208
- // then
209
- assert.match(text, /components\/git-bash\/dist\/cli\.js/);
210
- assert.match(text, /Recommending Git Bash Mcp/);
211
- assert.match(text, /hook post-compact/);
212
- assert.match(text, /Resetting Git Bash Mcp Reminder/);
213
- assert.match(text, /components\/ulw-loop\/dist\/cli\.js/);
214
- assert.match(text, /hook pre-tool-use/);
215
- assert.deepEqual(preToolUseGroups.map((group) => group.matcher), ["^Bash$", "^create_goal$"]);
216
- });
217
-
218
- test("#given aggregate SessionStart hooks #when inspected #then LazyCodex auto-update is registered", async () => {
219
- // given
220
- const hooks = await readJson("hooks/hooks.json");
221
- const text = JSON.stringify(hooks);
222
-
223
- // when
224
- const sessionStartCommands = collectCommandHooks(hooks, "hooks/hooks.json")
225
- .filter(({ eventName }) => eventName === "SessionStart")
226
- .map(({ handler }) => handler.command);
227
- const autoUpdateGroup = hooks.hooks.SessionStart.find((group) => JSON.stringify(group).includes("scripts/auto-update.mjs"));
228
-
229
- // then
230
- assert.equal(autoUpdateGroup?.matcher, "^startup$");
231
- assert.match(text, /scripts\/auto-update\.mjs/);
232
- assert.match(text, /Checking Auto Update/);
233
- assert(sessionStartCommands.some((command) => command.includes("scripts/auto-update.mjs")));
234
- });
235
-
236
- test("#given aggregate MCP config #when inspected #then code MCPs reference package runtimes without package names", async () => {
237
- // given
238
- const packageJson = await readJson("package.json");
239
- const mcp = await readJson(".mcp.json");
240
- const lspSources = await readdir(join(root, "components", "lsp", "src"));
241
- const bundledMcpBuildScript = await readFile(join(root, "scripts", "build-bundled-mcp-runtimes.mjs"), "utf8");
242
-
243
- // when
244
- const lspServer = mcp.mcpServers.lsp;
245
- const astGrepServer = mcp.mcpServers.ast_grep;
246
- const gitBashServer = mcp.mcpServers.git_bash;
247
- const codeMcpNames = Object.keys(mcp.mcpServers)
248
- .filter((name) => name === "lsp" || name === "ast_grep" || name === "git_bash")
249
- .sort();
250
- const componentLocalMcpSources = lspSources.filter((name) => name.startsWith("lazy-mcp") || name === "lazy-lsp-mcp.ts");
251
-
252
- // then
253
- assert.deepEqual(codeMcpNames, ["ast_grep", "git_bash", "lsp"]);
254
- assert.equal(packageJson.workspaces.includes("components/lsp/packages/lsp-tools-mcp"), false);
255
- assert.equal(packageJson.workspaces.includes("components/ast-grep/packages/ast-grep-mcp"), false);
256
- assert.deepEqual(packageJson.dependencies, { "@oh-my-opencode/shared-skills": "file:../../shared-skills" });
257
- assert.match(bundledMcpBuildScript, /ast-grep-mcp/);
258
- assert.match(bundledMcpBuildScript, /git-bash-mcp/);
259
- assert.doesNotMatch(packageJson.scripts.build, /--workspaces/);
260
- assert.equal(lspServer.command, "node");
261
- assert.deepEqual(lspServer.args, ["../../lsp-tools-mcp/dist/cli.js", "mcp"]);
262
- assert.equal(lspServer.cwd, ".");
263
- assert.equal(astGrepServer.command, "node");
264
- assert.deepEqual(astGrepServer.args, ["../../ast-grep-mcp/dist/cli.js", "mcp"]);
265
- assert.equal(astGrepServer.cwd, ".");
266
- assert.equal(gitBashServer.command, "node");
267
- assert.deepEqual(gitBashServer.args, ["../../git-bash-mcp/dist/cli.js", "mcp"]);
268
- assert.equal(gitBashServer.cwd, ".");
269
- assert.deepEqual(componentLocalMcpSources, []);
270
- });
271
-
272
- test(
273
- "#given package-level MCP CLIs #when package metadata is inspected #then bin names use the omo prefix",
274
- { skip: mcpPackageManifestExists.some((exists) => !exists) },
275
- async () => {
276
- // given
277
- const [lspPackageJson, astGrepPackageJson, gitBashPackageJson] = await Promise.all(
278
- mcpPackageManifestPaths.map((path) => readJson(path)),
279
- );
280
-
281
- // when
282
- const binNames = [
283
- ...Object.keys(lspPackageJson.bin ?? {}),
284
- ...Object.keys(astGrepPackageJson.bin ?? {}),
285
- ...Object.keys(gitBashPackageJson.bin ?? {}),
286
- ].sort();
287
-
288
- // then
289
- assert.deepEqual(binNames, ["omo-ast-grep", "omo-git-bash", "omo-lsp"]);
290
- for (const name of binNames) {
291
- assert.match(name, /^omo-/);
292
- }
293
- },
294
- );
295
-
296
- test("#given aggregate plugin build script #when inspected #then hook status and telemetry sync run before workspace builds", async () => {
297
- // given
298
- const packageJson = await readJson("package.json");
299
- const telemetrySyncScript = await readFile(join(root, "..", "scripts", "sync-telemetry-component.mjs"), "utf8");
300
-
301
- // when
302
- const buildScript = packageJson.scripts.build;
303
-
304
- // then
305
- assert.equal(
306
- buildScript,
307
- "node scripts/sync-hook-status-messages.mjs && node scripts/build-bundled-mcp-runtimes.mjs && node scripts/sync-skills.mjs && node ../scripts/sync-telemetry-component.mjs && node scripts/build-components.mjs",
308
- );
309
- assert.match(telemetrySyncScript, /syncTelemetryComponent/);
310
- });
311
-
312
- test("#given omo-codex package build script #when inspected #then delegates to the aggregate plugin package", async () => {
313
- // given
314
- const packageJson = JSON.parse(await readFile(join(root, "..", "package.json"), "utf8"));
315
-
316
- // when
317
- const buildPluginScript = packageJson.scripts["build:plugin"];
318
-
319
- // then
320
- assert.equal(buildPluginScript, "bun run --cwd plugin build");
321
- });
322
-
323
- test("#given component directories #when scanned #then only intentional resource roots declare plugin manifests", async () => {
324
- // given
325
- const components = await readdir(join(root, "components"), { withFileTypes: true });
326
- const expectedComponentManifests = new Map([["rules", { hooks: "./hooks/hooks.json" }]]);
327
-
328
- // when
329
- const componentNames = [];
330
- for (const entry of components) {
331
- if (!entry.isDirectory()) continue;
332
- if (!(await exists(join("components", entry.name, "package.json")))) continue;
333
- componentNames.push(entry.name);
334
- }
335
- componentNames.sort();
336
-
337
- // then
338
- assert.deepEqual(componentNames, [
339
- "comment-checker",
340
- "git-bash",
341
- "lsp",
342
- "rules",
343
- "start-work-continuation",
344
- "telemetry",
345
- "ultrawork",
346
- "ulw-loop",
347
- ]);
348
- for (const name of componentNames) {
349
- const expectedManifest = expectedComponentManifests.get(name);
350
- if (expectedManifest !== undefined) {
351
- assert.deepEqual(await readJson(join("components", name, ".codex-plugin", "plugin.json")), expectedManifest);
352
- continue;
353
- }
354
-
355
- await assert.rejects(
356
- readFile(join(root, "components", name, ".codex-plugin", "plugin.json"), "utf8"),
357
- /code: 'ENOENT'|ENOENT/,
358
- );
359
- }
360
- });
361
-
362
- test("#given bundled Codex agents #when components/ultrawork/agents directory is scanned #then planner support TOMLs are present and match expected schema keys", async () => {
363
- const agentsDir = join(root, "components", "ultrawork", "agents");
364
- const entries = (await readdir(agentsDir, { withFileTypes: true }))
365
- .filter((entry) => entry.isFile() && entry.name.endsWith(".toml"))
366
- .map((entry) => entry.name)
367
- .sort();
368
-
369
- assert.deepEqual(entries, [
370
- "codex-ultrawork-reviewer.toml",
371
- "explorer.toml",
372
- "librarian.toml",
373
- "metis.toml",
374
- "momus.toml",
375
- "plan.toml",
376
- ]);
377
-
378
- for (const fileName of entries) {
379
- const content = await readFile(join(agentsDir, fileName), "utf8");
380
- assert.match(content, /^name\s*=\s*".+"$/m);
381
- assert.match(content, /^description\s*=\s*".+"$/m);
382
- assert.match(content, /^nickname_candidates\s*=\s*\[.+\]$/m);
383
- assert.match(content, /^model\s*=\s*".+"$/m);
384
- assert.match(content, /^model_reasoning_effort\s*=\s*".+"$/m);
385
- assert.match(content, /^developer_instructions\s*=\s*"""/m);
386
- }
387
- });
388
-
389
- test("#given planner agent prompt #when inspected #then generated artifacts stay under .omo", async () => {
390
- const prompt = await readFile(join(root, "components", "ultrawork", "agents", "plan.toml"), "utf8");
391
-
392
- assert.match(prompt, /\.omo\/plans\/<slug>\.md/);
393
- assert.match(prompt, /\.omo\/evidence\/task-<N>-<slug>\.<ext>/);
394
- assert.doesNotMatch(prompt, /(?<!\.omo\/)plans\/<slug>\.md/);
395
- assert.doesNotMatch(prompt, /(?<!\.omo\/)evidence\/task-/);
396
- });
397
-
398
- test("#given reviewer agent prompt #when inspected #then default model is ChatGPT-account compatible", async () => {
399
- const prompt = await readFile(
400
- join(root, "components", "ultrawork", "agents", "codex-ultrawork-reviewer.toml"),
401
- "utf8",
402
- );
403
-
404
- assert.match(prompt, /^model\s*=\s*"gpt-5\.5"$/m);
405
- assert.match(prompt, /^model_reasoning_effort\s*=\s*"xhigh"$/m);
406
- assert.doesNotMatch(prompt, /^model\s*=\s*"gpt-5\.2"$/m);
407
- assert.match(prompt, /ChatGPT account/);
408
- });
409
-
410
- test("#given bundled model catalog #when inspected #then default verifier and worker roles are pinned", async () => {
411
- const catalog = JSON.parse(await readFile(join(root, "model-catalog.json"), "utf8"));
412
-
413
- assert.equal(catalog.current.model, "gpt-5.5");
414
- assert.equal(catalog.current.model_context_window, 400000);
415
- assert.equal(catalog.current.model_reasoning_effort, "high");
416
- assert.equal(catalog.current.plan_mode_reasoning_effort, "xhigh");
417
- assert.deepEqual(catalog.roles.default, catalog.current);
418
- assert.deepEqual(catalog.roles.verifier, {
419
- model: "gpt-5.5",
420
- model_reasoning_effort: "xhigh",
421
- });
422
- assert.deepEqual(catalog.roles.worker, {
423
- model: "gpt-5.4",
424
- model_reasoning_effort: "high",
425
- });
426
- });
427
-
428
- test("#given Codex-facing orchestration surfaces #when inspected #then retired ChatGPT-account model names are not recommended", async () => {
429
- const promptFiles = [
430
- join(root, "skills", "ulw-loop", "references", "full-workflow.md"),
431
- join(root, "components", "ulw-loop", "skills", "ulw-loop", "references", "full-workflow.md"),
432
- join(root, "components", "ultrawork", "README.md"),
433
- join(root, "components", "ultrawork", "CHANGELOG.md"),
434
- join(root, "components", "rules", "src", "post-compact-budget.ts"),
435
- ];
436
-
437
- const staleReferences = [];
438
- for (const promptPath of promptFiles) {
439
- const content = await readFile(promptPath, "utf8");
440
- if (/gpt-5\.(?:2|3-codex)/i.test(content)) {
441
- staleReferences.push(`${basename(dirname(promptPath))}/${basename(promptPath)}`);
442
- }
443
- }
444
-
445
- assert.deepEqual(staleReferences, []);
446
- });
447
-
448
- test("#given synced skills with Codex compatibility guidance #when a bundled agent_type is referenced #then a matching TOML is bundled", async () => {
449
- const skillsDir = join(root, "skills");
450
- const skillEntries = await readdir(skillsDir, { withFileTypes: true });
451
- const skillFiles = skillEntries
452
- .filter((entry) => entry.isDirectory())
453
- .map((entry) => join(skillsDir, entry.name, "SKILL.md"));
454
-
455
- const referencedAgentTypes = new Set();
456
- for (const skillPath of skillFiles) {
457
- const content = await readFile(skillPath, "utf8");
458
- for (const agentType of findSpawnAgentTypes(content)) {
459
- if (agentType === "worker" || agentType === "codex-ultrawork-reviewer") {
460
- continue;
461
- }
462
- referencedAgentTypes.add(agentType);
463
- }
464
- }
465
-
466
- const expected = [...referencedAgentTypes].sort();
467
- assert.deepEqual(expected, ["explorer", "librarian", "metis", "momus", "plan"]);
468
-
469
- for (const agentType of expected) {
470
- const tomlPath = join(root, "components", "ultrawork", "agents", `${agentType}.toml`);
471
- const fileStat = await stat(tomlPath);
472
- assert.equal(fileStat.isFile(), true);
473
- assert.equal(basename(tomlPath), `${agentType}.toml`);
474
- }
475
- });
476
-
477
- test('#given synced skills and bundled rules #when role-specific agents are spawned #then they set fork_turns="none"', async () => {
478
- const skillsDir = join(root, "skills");
479
- const skillEntries = await readdir(skillsDir, { withFileTypes: true });
480
- const promptFiles = skillEntries
481
- .filter((entry) => entry.isDirectory())
482
- .map((entry) => join(skillsDir, entry.name, "SKILL.md"));
483
- promptFiles.push(join(root, "components", "rules", "bundled-rules", "hephaestus.md"));
484
-
485
- const missingForkTurns = [];
486
- for (const promptPath of promptFiles) {
487
- const content = await readFile(promptPath, "utf8");
488
- for (const call of findRoleSpecificSpawnsWithoutForkTurnsNone(content)) {
489
- missingForkTurns.push(`${basename(dirname(promptPath))}/${basename(promptPath)}: ${call}`);
490
- }
491
- }
492
-
493
- assert.deepEqual(missingForkTurns, []);
494
- });
495
-
496
- test("#given long-running orchestration prompts #when waiting on child agents #then parent liveness is surfaced", async () => {
497
- const promptFiles = [
498
- join(root, "skills", "ulw-loop", "SKILL.md"),
499
- join(root, "skills", "ulw-loop", "references", "full-workflow.md"),
500
- join(root, "skills", "review-work", "SKILL.md"),
501
- join(root, "skills", "start-work", "SKILL.md"),
502
- join(root, "components", "rules", "bundled-rules", "hephaestus.md"),
503
- ];
504
-
505
- const missingLivenessGuidance = [];
506
- for (const promptPath of promptFiles) {
507
- const content = await readFile(promptPath, "utf8");
508
- if (!content.includes("active subagent count") || !content.includes("last heartbeat")) {
509
- missingLivenessGuidance.push(`${basename(dirname(promptPath))}/${basename(promptPath)}`);
510
- }
511
- }
512
-
513
- assert.deepEqual(missingLivenessGuidance, []);
514
- });
1
+ // Compatibility sentinel for packaging regressions that inspect this path.
2
+ // Focused aggregate coverage lives in aggregate-*.test.mjs.
@@ -0,0 +1,36 @@
1
+ import assert from "node:assert/strict";
2
+ import { mkdtemp, readFile } from "node:fs/promises";
3
+ import { tmpdir } from "node:os";
4
+ import { join } from "node:path";
5
+ import test from "node:test";
6
+
7
+ import { runAutoUpdateCheck } from "../scripts/auto-update.mjs";
8
+
9
+ function autoUpdateEnv(root, extra = {}) {
10
+ return {
11
+ CODEX_HOME: join(root, "codex-home"),
12
+ LAZYCODEX_CURRENT_VERSION: "1.0.1",
13
+ LAZYCODEX_LATEST_VERSION: "1.0.1",
14
+ LAZYCODEX_MODEL_CATALOG_STATE_PATH: join(root, "model-state.json"),
15
+ LAZYCODEX_AUTO_UPDATE_STATE_PATH: join(root, "state.json"),
16
+ LAZYCODEX_AUTO_UPDATE_LOG_PATH: join(root, "auto-update.log"),
17
+ ...extra,
18
+ };
19
+ }
20
+
21
+ test("#given lazycodex is up to date #when running check #then persists checked success state", async () => {
22
+ const root = await mkdtemp(join(tmpdir(), "lazycodex-auto-update-state-"));
23
+ const env = autoUpdateEnv(root);
24
+
25
+ const result = await runAutoUpdateCheck({
26
+ env,
27
+ now: 123_456,
28
+ });
29
+
30
+ assert.equal(result.started, false);
31
+ assert.equal(result.reason, "up-to-date");
32
+ assert.deepEqual(JSON.parse(await readFile(env.LAZYCODEX_AUTO_UPDATE_STATE_PATH, "utf8")), {
33
+ lastCheckedAt: 123_456,
34
+ lastStatus: "success",
35
+ });
36
+ });