@bastani/atomic 0.9.4 → 0.9.5-alpha.10

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 (759) hide show
  1. package/CHANGELOG.md +136 -2
  2. package/README.md +2 -2
  3. package/dist/builtin/cursor/CHANGELOG.md +6 -0
  4. package/dist/builtin/cursor/package.json +3 -3
  5. package/dist/builtin/cursor/src/model-mapper.ts +6 -3
  6. package/dist/builtin/intercom/CHANGELOG.md +31 -0
  7. package/dist/builtin/intercom/README.md +29 -21
  8. package/dist/builtin/intercom/broker/broker.ts +9 -120
  9. package/dist/builtin/intercom/broker/client.ts +29 -54
  10. package/dist/builtin/intercom/broker/delivered-message-cache.ts +44 -0
  11. package/dist/builtin/intercom/broker/paths.ts +42 -5
  12. package/dist/builtin/intercom/broker/pending-send-registry.ts +142 -0
  13. package/dist/builtin/intercom/broker/send-handler.ts +106 -0
  14. package/dist/builtin/intercom/broker/send-signature.ts +37 -0
  15. package/dist/builtin/intercom/broker/spawn.ts +78 -10
  16. package/dist/builtin/intercom/config.ts +6 -3
  17. package/dist/builtin/intercom/contact-supervisor-tool.ts +6 -4
  18. package/dist/builtin/intercom/foreground-detach-handoff.ts +136 -0
  19. package/dist/builtin/intercom/index-heavy.ts +50 -54
  20. package/dist/builtin/intercom/index.ts +320 -272
  21. package/dist/builtin/intercom/intercom-tool.ts +9 -3
  22. package/dist/builtin/intercom/lazy-heavy-proxy.ts +114 -0
  23. package/dist/builtin/intercom/lazy-subagent-ack.ts +20 -0
  24. package/dist/builtin/intercom/lazy-tool-execution.ts +39 -0
  25. package/dist/builtin/intercom/lifecycle-lease.ts +51 -0
  26. package/dist/builtin/intercom/lifecycle.ts +37 -20
  27. package/dist/builtin/intercom/package.json +12 -6
  28. package/dist/builtin/intercom/reply-routing.ts +17 -0
  29. package/dist/builtin/intercom/result-renderers.ts +1 -1
  30. package/dist/builtin/intercom/subagent-relay.ts +58 -12
  31. package/dist/builtin/intercom/types.ts +3 -3
  32. package/dist/builtin/intercom/ui/compose.ts +2 -2
  33. package/dist/builtin/intercom/ui/inline-message.ts +2 -2
  34. package/dist/builtin/intercom/ui/session-list.ts +2 -2
  35. package/dist/builtin/mcp/CHANGELOG.md +23 -0
  36. package/dist/builtin/mcp/OAUTH.md +1 -0
  37. package/dist/builtin/mcp/README.md +10 -6
  38. package/dist/builtin/mcp/apps-cancellation.ts +32 -0
  39. package/dist/builtin/mcp/call-tool-result.ts +9 -0
  40. package/dist/builtin/mcp/caller-wait.ts +50 -0
  41. package/dist/builtin/mcp/command-registration.ts +82 -0
  42. package/dist/builtin/mcp/direct-tool-executor.ts +279 -0
  43. package/dist/builtin/mcp/direct-tools.ts +40 -255
  44. package/dist/builtin/mcp/host-html-template.ts +4 -2
  45. package/dist/builtin/mcp/index.ts +274 -239
  46. package/dist/builtin/mcp/init.ts +96 -126
  47. package/dist/builtin/mcp/mcp-auth-flow.ts +247 -237
  48. package/dist/builtin/mcp/mcp-callback-server.ts +89 -68
  49. package/dist/builtin/mcp/mcp-oauth-provider.ts +23 -1
  50. package/dist/builtin/mcp/metadata-hydration.ts +52 -0
  51. package/dist/builtin/mcp/package.json +3 -3
  52. package/dist/builtin/mcp/proxy-auth.ts +4 -4
  53. package/dist/builtin/mcp/proxy-call.ts +111 -40
  54. package/dist/builtin/mcp/proxy-connect.ts +35 -15
  55. package/dist/builtin/mcp/proxy-info-modes.ts +106 -23
  56. package/dist/builtin/mcp/proxy-modes.ts +3 -3
  57. package/dist/builtin/mcp/session-cleanup-barrier.ts +43 -0
  58. package/dist/builtin/mcp/startup-warmup.ts +98 -0
  59. package/dist/builtin/mcp/state-lease.ts +12 -0
  60. package/dist/builtin/mcp/tool-result-renderer.ts +3 -3
  61. package/dist/builtin/mcp/ui-server.ts +8 -8
  62. package/dist/builtin/mcp/ui-session.ts +9 -18
  63. package/dist/builtin/subagents/CHANGELOG.md +60 -0
  64. package/dist/builtin/subagents/README.md +30 -29
  65. package/dist/builtin/subagents/agents/code-simplifier.md +2 -2
  66. package/dist/builtin/subagents/agents/codebase-analyzer.md +2 -2
  67. package/dist/builtin/subagents/agents/codebase-locator.md +2 -2
  68. package/dist/builtin/subagents/agents/codebase-online-researcher.md +2 -2
  69. package/dist/builtin/subagents/agents/codebase-pattern-finder.md +2 -2
  70. package/dist/builtin/subagents/agents/codebase-research-analyzer.md +2 -2
  71. package/dist/builtin/subagents/agents/codebase-research-locator.md +2 -2
  72. package/dist/builtin/subagents/agents/debugger.md +2 -2
  73. package/dist/builtin/subagents/agents/worker.md +2 -2
  74. package/dist/builtin/subagents/package.json +5 -5
  75. package/dist/builtin/subagents/prompts/review-loop.md +1 -1
  76. package/dist/builtin/subagents/skills/subagent/SKILL.md +37 -36
  77. package/dist/builtin/subagents/src/extension/api-lifecycle.ts +64 -0
  78. package/dist/builtin/subagents/src/extension/fanout-child.ts +44 -51
  79. package/dist/builtin/subagents/src/extension/index.ts +289 -320
  80. package/dist/builtin/subagents/src/extension/prompt-guidance.ts +7 -10
  81. package/dist/builtin/subagents/src/extension/schemas.ts +22 -5
  82. package/dist/builtin/subagents/src/extension/startup-maintenance.ts +89 -0
  83. package/dist/builtin/subagents/src/extension/tool-description.ts +29 -0
  84. package/dist/builtin/subagents/src/intercom/intercom-bridge.ts +13 -2
  85. package/dist/builtin/subagents/src/intercom/result-intercom.ts +4 -4
  86. package/dist/builtin/subagents/src/runs/background/async-event-journal.ts +106 -0
  87. package/dist/builtin/subagents/src/runs/background/async-execution-common.ts +26 -20
  88. package/dist/builtin/subagents/src/runs/background/async-execution-single.ts +13 -2
  89. package/dist/builtin/subagents/src/runs/background/async-execution-types.ts +3 -0
  90. package/dist/builtin/subagents/src/runs/background/async-job-tracker.ts +1 -1
  91. package/dist/builtin/subagents/src/runs/background/completion-claims.ts +189 -0
  92. package/dist/builtin/subagents/src/runs/background/completion-dedupe.ts +44 -7
  93. package/dist/builtin/subagents/src/runs/background/completion-notification.ts +34 -0
  94. package/dist/builtin/subagents/src/runs/background/notify.ts +72 -22
  95. package/dist/builtin/subagents/src/runs/background/result-delivery-processor.ts +232 -0
  96. package/dist/builtin/subagents/src/runs/background/result-file-claims.ts +151 -0
  97. package/dist/builtin/subagents/src/runs/background/result-quarantine.ts +72 -0
  98. package/dist/builtin/subagents/src/runs/background/result-retry-scheduler.ts +48 -0
  99. package/dist/builtin/subagents/src/runs/background/result-status.ts +81 -0
  100. package/dist/builtin/subagents/src/runs/background/result-watcher-data.ts +59 -0
  101. package/dist/builtin/subagents/src/runs/background/result-watcher.ts +177 -233
  102. package/dist/builtin/subagents/src/runs/background/run-id-resolver.ts +3 -2
  103. package/dist/builtin/subagents/src/runs/background/stale-run-reconciler.ts +73 -14
  104. package/dist/builtin/subagents/src/runs/background/subagent-runner-streaming.ts +29 -15
  105. package/dist/builtin/subagents/src/runs/background/top-level-async.ts +1 -2
  106. package/dist/builtin/subagents/src/runs/foreground/chain-execution-dynamic-step.ts +1 -0
  107. package/dist/builtin/subagents/src/runs/foreground/chain-execution-parallel-runner.ts +1 -0
  108. package/dist/builtin/subagents/src/runs/foreground/chain-execution-parallel-step.ts +1 -0
  109. package/dist/builtin/subagents/src/runs/foreground/chain-execution-sequential-step.ts +7 -9
  110. package/dist/builtin/subagents/src/runs/foreground/chain-execution-types.ts +3 -13
  111. package/dist/builtin/subagents/src/runs/foreground/chain-execution.ts +2 -15
  112. package/dist/builtin/subagents/src/runs/foreground/execution-attempt-finalize.ts +2 -2
  113. package/dist/builtin/subagents/src/runs/foreground/execution-attempt.ts +63 -46
  114. package/dist/builtin/subagents/src/runs/foreground/execution-detach-reservations.ts +48 -0
  115. package/dist/builtin/subagents/src/runs/foreground/execution-detach-route.ts +17 -0
  116. package/dist/builtin/subagents/src/runs/foreground/execution-run-sync.ts +39 -26
  117. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-async.ts +3 -1
  118. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-chain.ts +3 -51
  119. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-context.ts +6 -11
  120. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-input.ts +11 -2
  121. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parallel-task.ts +2 -0
  122. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parallel.ts +5 -112
  123. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-resume.ts +2 -0
  124. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-single.ts +68 -118
  125. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-status.ts +79 -7
  126. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-types.ts +2 -2
  127. package/dist/builtin/subagents/src/runs/foreground/subagent-executor.ts +3 -0
  128. package/dist/builtin/subagents/src/runs/shared/pi-args.ts +2 -2
  129. package/dist/builtin/subagents/src/runs/shared/pi-spawn.ts +55 -12
  130. package/dist/builtin/subagents/src/shared/artifacts.ts +22 -11
  131. package/dist/builtin/subagents/src/shared/event-jsonl-writer.ts +294 -0
  132. package/dist/builtin/subagents/src/shared/exclusive-file-publication.ts +44 -0
  133. package/dist/builtin/subagents/src/shared/jsonl-writer.ts +1 -0
  134. package/dist/builtin/subagents/src/shared/model-info.ts +2 -2
  135. package/dist/builtin/subagents/src/shared/settings.ts +20 -10
  136. package/dist/builtin/subagents/src/shared/types-async.ts +3 -1
  137. package/dist/builtin/subagents/src/shared/types-config.ts +2 -0
  138. package/dist/builtin/subagents/src/shared/types-runtime.ts +3 -2
  139. package/dist/builtin/subagents/src/slash/slash-commands.ts +9 -12
  140. package/dist/builtin/subagents/src/slash/slash-live-state.ts +63 -32
  141. package/dist/builtin/subagents/src/tui/render-event-formatting.ts +15 -48
  142. package/dist/builtin/subagents/src/tui/render-layout.ts +9 -0
  143. package/dist/builtin/subagents/src/tui/render-result.ts +7 -0
  144. package/dist/builtin/subagents/src/tui/render-stable-output.ts +1 -0
  145. package/dist/builtin/subagents/src/tui/render-widget-graph.ts +27 -25
  146. package/dist/builtin/subagents/src/tui/render-widget.ts +177 -132
  147. package/dist/builtin/subagents/src/tui/render.ts +1 -1
  148. package/dist/builtin/web-access/CHANGELOG.md +14 -0
  149. package/dist/builtin/web-access/README.md +4 -0
  150. package/dist/builtin/web-access/content-tools.ts +8 -3
  151. package/dist/builtin/web-access/index-heavy.ts +1 -1
  152. package/dist/builtin/web-access/index.ts +190 -46
  153. package/dist/builtin/web-access/lifecycle-lease.ts +38 -0
  154. package/dist/builtin/web-access/package.json +2 -2
  155. package/dist/builtin/web-access/result-renderers.ts +1 -1
  156. package/dist/builtin/web-access/summary-review.ts +1 -1
  157. package/dist/builtin/web-access/web-search-activity.ts +1 -1
  158. package/dist/builtin/web-access/web-search-return.ts +7 -0
  159. package/dist/builtin/web-access/web-search-summary.ts +1 -1
  160. package/dist/builtin/web-access/web-search-tool.ts +4 -2
  161. package/dist/builtin/workflows/CHANGELOG.md +98 -0
  162. package/dist/builtin/workflows/README.md +20 -16
  163. package/dist/builtin/workflows/builtin/deep-research-codebase-utils.ts +33 -9
  164. package/dist/builtin/workflows/builtin/goal-artifacts.ts +3 -1
  165. package/dist/builtin/workflows/builtin/goal-ledger.ts +3 -0
  166. package/dist/builtin/workflows/builtin/goal-prompts.ts +39 -5
  167. package/dist/builtin/workflows/builtin/goal-reducer.ts +21 -0
  168. package/dist/builtin/workflows/builtin/goal-reports.ts +23 -0
  169. package/dist/builtin/workflows/builtin/goal-review.ts +85 -6
  170. package/dist/builtin/workflows/builtin/goal-runner.ts +122 -49
  171. package/dist/builtin/workflows/builtin/goal-schemas.ts +22 -0
  172. package/dist/builtin/workflows/builtin/goal-types.ts +25 -1
  173. package/dist/builtin/workflows/builtin/goal.d.ts +5 -0
  174. package/dist/builtin/workflows/builtin/goal.ts +13 -2
  175. package/dist/builtin/workflows/builtin/index.d.ts +8 -0
  176. package/dist/builtin/workflows/builtin/open-claude-design-runner.ts +16 -5
  177. package/dist/builtin/workflows/builtin/ralph-core.ts +100 -15
  178. package/dist/builtin/workflows/builtin/ralph-models.ts +98 -66
  179. package/dist/builtin/workflows/builtin/ralph-review-gate.ts +37 -5
  180. package/dist/builtin/workflows/builtin/ralph-reviewer-prompt.ts +159 -0
  181. package/dist/builtin/workflows/builtin/ralph-runner.ts +75 -165
  182. package/dist/builtin/workflows/builtin/ralph.d.ts +3 -0
  183. package/dist/builtin/workflows/builtin/ralph.ts +4 -1
  184. package/dist/builtin/workflows/builtin/review-convergence.ts +111 -0
  185. package/dist/builtin/workflows/builtin/shared-prompts.ts +20 -1
  186. package/dist/builtin/workflows/package.json +2 -2
  187. package/dist/builtin/workflows/skills/create-spec/SKILL.md +2 -0
  188. package/dist/builtin/workflows/skills/impeccable/SKILL.md +16 -13
  189. package/dist/builtin/workflows/skills/impeccable/reference/adapt.md +1 -0
  190. package/dist/builtin/workflows/skills/impeccable/reference/adapt.native.md +58 -0
  191. package/dist/builtin/workflows/skills/impeccable/reference/android.md +40 -0
  192. package/dist/builtin/workflows/skills/impeccable/reference/animate.md +2 -0
  193. package/dist/builtin/workflows/skills/impeccable/reference/audit.md +2 -0
  194. package/dist/builtin/workflows/skills/impeccable/reference/audit.native.md +139 -0
  195. package/dist/builtin/workflows/skills/impeccable/reference/bolder.md +69 -62
  196. package/dist/builtin/workflows/skills/impeccable/reference/critique.md +21 -7
  197. package/dist/builtin/workflows/skills/impeccable/reference/document.md +1 -1
  198. package/dist/builtin/workflows/skills/impeccable/reference/hooks.md +92 -0
  199. package/dist/builtin/workflows/skills/impeccable/reference/init.md +29 -7
  200. package/dist/builtin/workflows/skills/impeccable/reference/ios.md +45 -0
  201. package/dist/builtin/workflows/skills/impeccable/reference/layout.md +25 -1
  202. package/dist/builtin/workflows/skills/impeccable/reference/typeset.md +23 -1
  203. package/dist/builtin/workflows/skills/impeccable/scripts/context-signals.mjs +2 -1
  204. package/dist/builtin/workflows/skills/impeccable/scripts/context.mjs +75 -14
  205. package/dist/builtin/workflows/skills/impeccable/scripts/detector/browser/injected/index.mjs +1 -1
  206. package/dist/builtin/workflows/skills/impeccable/scripts/detector/cli/main.mjs +31 -0
  207. package/dist/builtin/workflows/skills/impeccable/scripts/detector/design-system.mjs +64 -0
  208. package/dist/builtin/workflows/skills/impeccable/scripts/detector/detect-antipatterns-browser.js +118 -11
  209. package/dist/builtin/workflows/skills/impeccable/scripts/detector/engines/regex/detect-text.mjs +16 -11
  210. package/dist/builtin/workflows/skills/impeccable/scripts/detector/registry/antipatterns.mjs +66 -0
  211. package/dist/builtin/workflows/skills/impeccable/scripts/detector/rules/checks.mjs +42 -10
  212. package/dist/builtin/workflows/skills/impeccable/scripts/detector/shared/fonts.mjs +30 -0
  213. package/dist/builtin/workflows/skills/impeccable/scripts/detector/shared/page.mjs +4 -6
  214. package/dist/builtin/workflows/skills/impeccable/scripts/hook-admin.mjs +660 -0
  215. package/dist/builtin/workflows/skills/impeccable/scripts/hook-before-edit.mjs +516 -0
  216. package/dist/builtin/workflows/skills/impeccable/scripts/hook-lib.mjs +1764 -0
  217. package/dist/builtin/workflows/skills/impeccable/scripts/hook.mjs +61 -0
  218. package/dist/builtin/workflows/skills/impeccable/scripts/lib/impeccable-config.mjs +4 -2
  219. package/dist/builtin/workflows/skills/impeccable/scripts/lib/is-generated.mjs +2 -2
  220. package/dist/builtin/workflows/skills/impeccable/scripts/live/svelte-component.mjs +13 -16
  221. package/dist/builtin/workflows/skills/impeccable/scripts/live-accept.mjs +17 -11
  222. package/dist/builtin/workflows/skills/impeccable/scripts/live-browser.js +104 -37
  223. package/dist/builtin/workflows/skills/impeccable/scripts/live-wrap.mjs +9 -0
  224. package/dist/builtin/workflows/src/durable/backend.ts +12 -0
  225. package/dist/builtin/workflows/src/durable/child-primitive.ts +12 -8
  226. package/dist/builtin/workflows/src/durable/dbos-backend.ts +63 -2
  227. package/dist/builtin/workflows/src/durable/dbos-envelope.ts +28 -0
  228. package/dist/builtin/workflows/src/durable/resume-catalog.ts +12 -0
  229. package/dist/builtin/workflows/src/durable/resume-runtime.ts +5 -2
  230. package/dist/builtin/workflows/src/durable/stage-primitive.ts +167 -28
  231. package/dist/builtin/workflows/src/durable/types.ts +30 -1
  232. package/dist/builtin/workflows/src/engine/primitives/task.ts +3 -1
  233. package/dist/builtin/workflows/src/engine/run-durable-finalize.ts +1 -2
  234. package/dist/builtin/workflows/src/engine/run-returned-status.ts +50 -16
  235. package/dist/builtin/workflows/src/engine/run.ts +32 -32
  236. package/dist/builtin/workflows/src/engine/runtime.ts +5 -0
  237. package/dist/builtin/workflows/src/extension/extension-factory.ts +3 -0
  238. package/dist/builtin/workflows/src/extension/extension-lifecycle.ts +9 -2
  239. package/dist/builtin/workflows/src/extension/extension-runtime-state.ts +137 -27
  240. package/dist/builtin/workflows/src/extension/lifecycle-notifications.ts +22 -6
  241. package/dist/builtin/workflows/src/extension/public-types.ts +1 -1
  242. package/dist/builtin/workflows/src/extension/workflow-command-completions.ts +13 -1
  243. package/dist/builtin/workflows/src/extension/workflow-command-registration.ts +19 -4
  244. package/dist/builtin/workflows/src/extension/workflow-command-surfaces.ts +9 -0
  245. package/dist/builtin/workflows/src/extension/workflow-prompts.ts +17 -17
  246. package/dist/builtin/workflows/src/extension/workflow-run-control-command.ts +48 -23
  247. package/dist/builtin/workflows/src/extension/workflow-schema.ts +15 -2
  248. package/dist/builtin/workflows/src/extension/workflow-tool-control.ts +20 -8
  249. package/dist/builtin/workflows/src/extension/workflow-tool.ts +24 -8
  250. package/dist/builtin/workflows/src/runs/background/status.ts +4 -3
  251. package/dist/builtin/workflows/src/runs/foreground/executor-continuation.ts +13 -3
  252. package/dist/builtin/workflows/src/runs/foreground/executor-direct-helpers.ts +29 -8
  253. package/dist/builtin/workflows/src/runs/foreground/executor-hil.ts +1 -1
  254. package/dist/builtin/workflows/src/runs/foreground/executor-stage-control.ts +8 -0
  255. package/dist/builtin/workflows/src/runs/foreground/executor-stage-factory.ts +4 -3
  256. package/dist/builtin/workflows/src/runs/foreground/stage-control-registry.ts +2 -0
  257. package/dist/builtin/workflows/src/runs/foreground/stage-runner-controller.ts +18 -19
  258. package/dist/builtin/workflows/src/runs/foreground/stage-runner-unresolved-overflow.ts +38 -0
  259. package/dist/builtin/workflows/src/runs/foreground/stage-tool-execution-buffer.ts +47 -0
  260. package/dist/builtin/workflows/src/runs/shared/model-fallback-candidates.ts +1 -1
  261. package/dist/builtin/workflows/src/runs/shared/worktree-git.ts +155 -20
  262. package/dist/builtin/workflows/src/runs/shared/worktree-types.ts +6 -0
  263. package/dist/builtin/workflows/src/runs/shared/worktree.ts +2 -1
  264. package/dist/builtin/workflows/src/shared/authoring-contract-stage.d.ts +2 -2
  265. package/dist/builtin/workflows/src/shared/authoring-contract-stage.ts +2 -2
  266. package/dist/builtin/workflows/src/shared/persistence-restore-helpers.ts +18 -1
  267. package/dist/builtin/workflows/src/shared/persistence-restore.ts +23 -5
  268. package/dist/builtin/workflows/src/shared/persistence-session-entries.ts +4 -0
  269. package/dist/builtin/workflows/src/shared/resume-continuation.ts +2 -0
  270. package/dist/builtin/workflows/src/shared/returned-run-status.ts +116 -0
  271. package/dist/builtin/workflows/src/shared/workflow-failures-decisions.ts +2 -0
  272. package/dist/builtin/workflows/src/tui/graph-view-render-helpers.ts +21 -3
  273. package/dist/builtin/workflows/src/tui/graph-view-state.ts +3 -0
  274. package/dist/builtin/workflows/src/tui/graph-view-types.ts +3 -0
  275. package/dist/builtin/workflows/src/tui/stage-chat-view-archive-history.ts +1 -23
  276. package/dist/builtin/workflows/src/tui/stage-chat-view-footer-status.ts +54 -9
  277. package/dist/builtin/workflows/src/tui/stage-chat-view-pending-tools.ts +9 -0
  278. package/dist/builtin/workflows/src/tui/stage-chat-view-render-settings.ts +27 -0
  279. package/dist/builtin/workflows/src/tui/stage-chat-view-state.ts +5 -6
  280. package/dist/builtin/workflows/src/tui/stage-chat-view.ts +5 -2
  281. package/dist/builtin/workflows/src/tui/status-list.ts +22 -15
  282. package/dist/builtin/workflows/src/tui/workflow-attach-pane.ts +4 -4
  283. package/dist/bun/internal-intercom-broker.d.ts +6 -0
  284. package/dist/bun/internal-intercom-broker.d.ts.map +1 -0
  285. package/dist/bun/internal-intercom-broker.js +39 -0
  286. package/dist/bun/internal-intercom-broker.js.map +1 -0
  287. package/dist/bun/split-loader.d.ts +2 -0
  288. package/dist/bun/split-loader.d.ts.map +1 -0
  289. package/dist/bun/split-loader.js +50 -0
  290. package/dist/bun/split-loader.js.map +1 -0
  291. package/dist/cli/args.d.ts.map +1 -1
  292. package/dist/cli/args.js +2 -2
  293. package/dist/cli/args.js.map +1 -1
  294. package/dist/config.d.ts.map +1 -1
  295. package/dist/config.js +6 -4
  296. package/dist/config.js.map +1 -1
  297. package/dist/core/agent-session-auto-compaction.d.ts +26 -6
  298. package/dist/core/agent-session-auto-compaction.d.ts.map +1 -1
  299. package/dist/core/agent-session-auto-compaction.js +178 -19
  300. package/dist/core/agent-session-auto-compaction.js.map +1 -1
  301. package/dist/core/agent-session-compaction.d.ts.map +1 -1
  302. package/dist/core/agent-session-compaction.js +25 -4
  303. package/dist/core/agent-session-compaction.js.map +1 -1
  304. package/dist/core/agent-session-events.d.ts.map +1 -1
  305. package/dist/core/agent-session-events.js +12 -2
  306. package/dist/core/agent-session-events.js.map +1 -1
  307. package/dist/core/agent-session-extension-bindings.d.ts.map +1 -1
  308. package/dist/core/agent-session-extension-bindings.js +1 -1
  309. package/dist/core/agent-session-extension-bindings.js.map +1 -1
  310. package/dist/core/agent-session-message-queue.d.ts.map +1 -1
  311. package/dist/core/agent-session-message-queue.js +1 -1
  312. package/dist/core/agent-session-message-queue.js.map +1 -1
  313. package/dist/core/agent-session-methods.d.ts +13 -4
  314. package/dist/core/agent-session-methods.d.ts.map +1 -1
  315. package/dist/core/agent-session-methods.js.map +1 -1
  316. package/dist/core/agent-session-models.d.ts +2 -2
  317. package/dist/core/agent-session-models.d.ts.map +1 -1
  318. package/dist/core/agent-session-models.js.map +1 -1
  319. package/dist/core/agent-session-prompt.d.ts.map +1 -1
  320. package/dist/core/agent-session-prompt.js +2 -1
  321. package/dist/core/agent-session-prompt.js.map +1 -1
  322. package/dist/core/agent-session-retry.d.ts +2 -0
  323. package/dist/core/agent-session-retry.d.ts.map +1 -1
  324. package/dist/core/agent-session-retry.js +152 -4
  325. package/dist/core/agent-session-retry.js.map +1 -1
  326. package/dist/core/agent-session-services.d.ts +1 -0
  327. package/dist/core/agent-session-services.d.ts.map +1 -1
  328. package/dist/core/agent-session-services.js +4 -2
  329. package/dist/core/agent-session-services.js.map +1 -1
  330. package/dist/core/agent-session-types.d.ts +15 -1
  331. package/dist/core/agent-session-types.d.ts.map +1 -1
  332. package/dist/core/agent-session-types.js +1 -1
  333. package/dist/core/agent-session-types.js.map +1 -1
  334. package/dist/core/agent-session.d.ts +6 -0
  335. package/dist/core/agent-session.d.ts.map +1 -1
  336. package/dist/core/agent-session.js +6 -0
  337. package/dist/core/agent-session.js.map +1 -1
  338. package/dist/core/anthropic-thinking-guard.d.ts +5 -5
  339. package/dist/core/anthropic-thinking-guard.d.ts.map +1 -1
  340. package/dist/core/anthropic-thinking-guard.js +42 -32
  341. package/dist/core/anthropic-thinking-guard.js.map +1 -1
  342. package/dist/core/atomic-guide-command.d.ts.map +1 -1
  343. package/dist/core/atomic-guide-command.js +15 -15
  344. package/dist/core/atomic-guide-command.js.map +1 -1
  345. package/dist/core/auth-storage.d.ts.map +1 -1
  346. package/dist/core/auth-storage.js +14 -9
  347. package/dist/core/auth-storage.js.map +1 -1
  348. package/dist/core/builtin-packages.d.ts.map +1 -1
  349. package/dist/core/builtin-packages.js +8 -4
  350. package/dist/core/builtin-packages.js.map +1 -1
  351. package/dist/core/compaction/compaction.d.ts +2 -0
  352. package/dist/core/compaction/compaction.d.ts.map +1 -1
  353. package/dist/core/compaction/compaction.js +79 -46
  354. package/dist/core/compaction/compaction.js.map +1 -1
  355. package/dist/core/compaction/context-assistant-turns.d.ts +42 -0
  356. package/dist/core/compaction/context-assistant-turns.d.ts.map +1 -0
  357. package/dist/core/compaction/context-assistant-turns.js +87 -0
  358. package/dist/core/compaction/context-assistant-turns.js.map +1 -0
  359. package/dist/core/compaction/context-compaction-critical.d.ts +15 -0
  360. package/dist/core/compaction/context-compaction-critical.d.ts.map +1 -0
  361. package/dist/core/compaction/context-compaction-critical.js +57 -0
  362. package/dist/core/compaction/context-compaction-critical.js.map +1 -0
  363. package/dist/core/compaction/context-compaction-eviction-alternates.d.ts +18 -0
  364. package/dist/core/compaction/context-compaction-eviction-alternates.d.ts.map +1 -0
  365. package/dist/core/compaction/context-compaction-eviction-alternates.js +186 -0
  366. package/dist/core/compaction/context-compaction-eviction-alternates.js.map +1 -0
  367. package/dist/core/compaction/context-compaction-eviction.d.ts +12 -0
  368. package/dist/core/compaction/context-compaction-eviction.d.ts.map +1 -0
  369. package/dist/core/compaction/context-compaction-eviction.js +222 -0
  370. package/dist/core/compaction/context-compaction-eviction.js.map +1 -0
  371. package/dist/core/compaction/context-compaction-prompt.d.ts.map +1 -1
  372. package/dist/core/compaction/context-compaction-prompt.js +1 -1
  373. package/dist/core/compaction/context-compaction-prompt.js.map +1 -1
  374. package/dist/core/compaction/context-compaction-runner.d.ts +7 -1
  375. package/dist/core/compaction/context-compaction-runner.d.ts.map +1 -1
  376. package/dist/core/compaction/context-compaction-runner.js +113 -21
  377. package/dist/core/compaction/context-compaction-runner.js.map +1 -1
  378. package/dist/core/compaction/context-compaction-types.d.ts +2 -0
  379. package/dist/core/compaction/context-compaction-types.d.ts.map +1 -1
  380. package/dist/core/compaction/context-compaction-types.js.map +1 -1
  381. package/dist/core/compaction/context-deletion-application.d.ts +5 -4
  382. package/dist/core/compaction/context-deletion-application.d.ts.map +1 -1
  383. package/dist/core/compaction/context-deletion-application.js +17 -15
  384. package/dist/core/compaction/context-deletion-application.js.map +1 -1
  385. package/dist/core/compaction/context-deletion-store.d.ts.map +1 -1
  386. package/dist/core/compaction/context-deletion-store.js +1 -1
  387. package/dist/core/compaction/context-deletion-store.js.map +1 -1
  388. package/dist/core/compaction/context-deletion-targets.d.ts +2 -1
  389. package/dist/core/compaction/context-deletion-targets.d.ts.map +1 -1
  390. package/dist/core/compaction/context-deletion-targets.js +36 -31
  391. package/dist/core/compaction/context-deletion-targets.js.map +1 -1
  392. package/dist/core/compaction/context-deletion-tool-helpers.d.ts.map +1 -1
  393. package/dist/core/compaction/context-deletion-tool-helpers.js +116 -43
  394. package/dist/core/compaction/context-deletion-tool-helpers.js.map +1 -1
  395. package/dist/core/compaction/context-transcript-analysis.d.ts +4 -2
  396. package/dist/core/compaction/context-transcript-analysis.d.ts.map +1 -1
  397. package/dist/core/compaction/context-transcript-analysis.js +36 -40
  398. package/dist/core/compaction/context-transcript-analysis.js.map +1 -1
  399. package/dist/core/copilot-anthropic-sse-repair.d.ts +23 -0
  400. package/dist/core/copilot-anthropic-sse-repair.d.ts.map +1 -0
  401. package/dist/core/copilot-anthropic-sse-repair.js +340 -0
  402. package/dist/core/copilot-anthropic-sse-repair.js.map +1 -0
  403. package/dist/core/copilot-gemini-reasoning.d.ts +16 -8
  404. package/dist/core/copilot-gemini-reasoning.d.ts.map +1 -1
  405. package/dist/core/copilot-gemini-reasoning.js +27 -22
  406. package/dist/core/copilot-gemini-reasoning.js.map +1 -1
  407. package/dist/core/copilot-hosts.d.ts +12 -0
  408. package/dist/core/copilot-hosts.d.ts.map +1 -0
  409. package/dist/core/copilot-hosts.js +33 -0
  410. package/dist/core/copilot-hosts.js.map +1 -0
  411. package/dist/core/copilot-model-catalog.d.ts.map +1 -1
  412. package/dist/core/copilot-model-catalog.js +3 -2
  413. package/dist/core/copilot-model-catalog.js.map +1 -1
  414. package/dist/core/copilot-model-synthesis.d.ts.map +1 -1
  415. package/dist/core/copilot-model-synthesis.js +3 -1
  416. package/dist/core/copilot-model-synthesis.js.map +1 -1
  417. package/dist/core/extensions/agent-events.d.ts +1 -1
  418. package/dist/core/extensions/agent-events.d.ts.map +1 -1
  419. package/dist/core/extensions/agent-events.js.map +1 -1
  420. package/dist/core/extensions/loader-core.d.ts.map +1 -1
  421. package/dist/core/extensions/loader-core.js +6 -0
  422. package/dist/core/extensions/loader-core.js.map +1 -1
  423. package/dist/core/extensions/loader-virtual-modules.d.ts +8 -1
  424. package/dist/core/extensions/loader-virtual-modules.d.ts.map +1 -1
  425. package/dist/core/extensions/loader-virtual-modules.js +10 -4
  426. package/dist/core/extensions/loader-virtual-modules.js.map +1 -1
  427. package/dist/core/extensions/provider-types.d.ts +2 -7
  428. package/dist/core/extensions/provider-types.d.ts.map +1 -1
  429. package/dist/core/extensions/provider-types.js.map +1 -1
  430. package/dist/core/footer-data-provider.d.ts +6 -0
  431. package/dist/core/footer-data-provider.d.ts.map +1 -1
  432. package/dist/core/footer-data-provider.js +72 -29
  433. package/dist/core/footer-data-provider.js.map +1 -1
  434. package/dist/core/http-dispatcher.d.ts.map +1 -1
  435. package/dist/core/http-dispatcher.js +5 -5
  436. package/dist/core/http-dispatcher.js.map +1 -1
  437. package/dist/core/messages.d.ts +9 -0
  438. package/dist/core/messages.d.ts.map +1 -1
  439. package/dist/core/messages.js +100 -18
  440. package/dist/core/messages.js.map +1 -1
  441. package/dist/core/model-registry-builtins.d.ts.map +1 -1
  442. package/dist/core/model-registry-builtins.js +5 -0
  443. package/dist/core/model-registry-builtins.js.map +1 -1
  444. package/dist/core/model-registry-custom-loader.d.ts.map +1 -1
  445. package/dist/core/model-registry-custom-loader.js +49 -8
  446. package/dist/core/model-registry-custom-loader.js.map +1 -1
  447. package/dist/core/model-registry-dynamic.d.ts.map +1 -1
  448. package/dist/core/model-registry-dynamic.js +11 -5
  449. package/dist/core/model-registry-dynamic.js.map +1 -1
  450. package/dist/core/model-registry-loader.d.ts.map +1 -1
  451. package/dist/core/model-registry-loader.js +8 -0
  452. package/dist/core/model-registry-loader.js.map +1 -1
  453. package/dist/core/model-registry-schemas.d.ts +93 -8
  454. package/dist/core/model-registry-schemas.d.ts.map +1 -1
  455. package/dist/core/model-registry-schemas.js +24 -12
  456. package/dist/core/model-registry-schemas.js.map +1 -1
  457. package/dist/core/model-registry-types.d.ts +7 -6
  458. package/dist/core/model-registry-types.d.ts.map +1 -1
  459. package/dist/core/model-registry-types.js.map +1 -1
  460. package/dist/core/model-registry.d.ts +5 -0
  461. package/dist/core/model-registry.d.ts.map +1 -1
  462. package/dist/core/model-registry.js +23 -0
  463. package/dist/core/model-registry.js.map +1 -1
  464. package/dist/core/model-resolver-cli.d.ts.map +1 -1
  465. package/dist/core/model-resolver-cli.js +33 -5
  466. package/dist/core/model-resolver-cli.js.map +1 -1
  467. package/dist/core/model-resolver-initial.d.ts +6 -1
  468. package/dist/core/model-resolver-initial.d.ts.map +1 -1
  469. package/dist/core/model-resolver-initial.js +12 -7
  470. package/dist/core/model-resolver-initial.js.map +1 -1
  471. package/dist/core/model-resolver-scope.d.ts +9 -0
  472. package/dist/core/model-resolver-scope.d.ts.map +1 -1
  473. package/dist/core/model-resolver-scope.js +12 -4
  474. package/dist/core/model-resolver-scope.js.map +1 -1
  475. package/dist/core/model-resolver.d.ts +4 -3
  476. package/dist/core/model-resolver.d.ts.map +1 -1
  477. package/dist/core/model-resolver.js +2 -2
  478. package/dist/core/model-resolver.js.map +1 -1
  479. package/dist/core/openai-responses-payload-sanitizer.d.ts +7 -0
  480. package/dist/core/openai-responses-payload-sanitizer.d.ts.map +1 -0
  481. package/dist/core/openai-responses-payload-sanitizer.js +74 -0
  482. package/dist/core/openai-responses-payload-sanitizer.js.map +1 -0
  483. package/dist/core/package-manager-auto-resources.d.ts +2 -2
  484. package/dist/core/package-manager-auto-resources.d.ts.map +1 -1
  485. package/dist/core/package-manager-auto-resources.js +32 -52
  486. package/dist/core/package-manager-auto-resources.js.map +1 -1
  487. package/dist/core/package-manager-resolver.d.ts.map +1 -1
  488. package/dist/core/package-manager-resolver.js +23 -14
  489. package/dist/core/package-manager-resolver.js.map +1 -1
  490. package/dist/core/package-manager-resource-collector.d.ts +3 -3
  491. package/dist/core/package-manager-resource-collector.d.ts.map +1 -1
  492. package/dist/core/package-manager-resource-collector.js +76 -73
  493. package/dist/core/package-manager-resource-collector.js.map +1 -1
  494. package/dist/core/package-manager-resource-files.d.ts +9 -8
  495. package/dist/core/package-manager-resource-files.d.ts.map +1 -1
  496. package/dist/core/package-manager-resource-files.js +92 -81
  497. package/dist/core/package-manager-resource-files.js.map +1 -1
  498. package/dist/core/prompt-templates-async.d.ts +3 -0
  499. package/dist/core/prompt-templates-async.d.ts.map +1 -0
  500. package/dist/core/prompt-templates-async.js +118 -0
  501. package/dist/core/prompt-templates-async.js.map +1 -0
  502. package/dist/core/provider-context-usage.d.ts +11 -0
  503. package/dist/core/provider-context-usage.d.ts.map +1 -0
  504. package/dist/core/provider-context-usage.js +58 -0
  505. package/dist/core/provider-context-usage.js.map +1 -0
  506. package/dist/core/resource-loader-assets.d.ts +3 -3
  507. package/dist/core/resource-loader-assets.d.ts.map +1 -1
  508. package/dist/core/resource-loader-assets.js +66 -83
  509. package/dist/core/resource-loader-assets.js.map +1 -1
  510. package/dist/core/resource-loader-context-files.d.ts +1 -0
  511. package/dist/core/resource-loader-context-files.d.ts.map +1 -1
  512. package/dist/core/resource-loader-context-files.js +13 -10
  513. package/dist/core/resource-loader-context-files.js.map +1 -1
  514. package/dist/core/resource-loader-core.d.ts +1 -1
  515. package/dist/core/resource-loader-core.d.ts.map +1 -1
  516. package/dist/core/resource-loader-core.js +5 -5
  517. package/dist/core/resource-loader-core.js.map +1 -1
  518. package/dist/core/resource-loader-extensions.d.ts.map +1 -1
  519. package/dist/core/resource-loader-extensions.js +4 -0
  520. package/dist/core/resource-loader-extensions.js.map +1 -1
  521. package/dist/core/resource-loader-reload.d.ts.map +1 -1
  522. package/dist/core/resource-loader-reload.js +54 -7
  523. package/dist/core/resource-loader-reload.js.map +1 -1
  524. package/dist/core/resource-loader-types.d.ts +7 -1
  525. package/dist/core/resource-loader-types.d.ts.map +1 -1
  526. package/dist/core/resource-loader-types.js.map +1 -1
  527. package/dist/core/sdk-types.d.ts +2 -0
  528. package/dist/core/sdk-types.d.ts.map +1 -1
  529. package/dist/core/sdk-types.js.map +1 -1
  530. package/dist/core/sdk.d.ts.map +1 -1
  531. package/dist/core/sdk.js +9 -6
  532. package/dist/core/sdk.js.map +1 -1
  533. package/dist/core/session-entry-normalization.d.ts +7 -0
  534. package/dist/core/session-entry-normalization.d.ts.map +1 -0
  535. package/dist/core/session-entry-normalization.js +14 -0
  536. package/dist/core/session-entry-normalization.js.map +1 -0
  537. package/dist/core/session-manager-core.d.ts.map +1 -1
  538. package/dist/core/session-manager-core.js +1 -0
  539. package/dist/core/session-manager-core.js.map +1 -1
  540. package/dist/core/session-manager-history.d.ts +2 -2
  541. package/dist/core/session-manager-history.d.ts.map +1 -1
  542. package/dist/core/session-manager-history.js +127 -108
  543. package/dist/core/session-manager-history.js.map +1 -1
  544. package/dist/core/settings-manager-basic-accessors.d.ts +3 -2
  545. package/dist/core/settings-manager-basic-accessors.d.ts.map +1 -1
  546. package/dist/core/settings-manager-basic-accessors.js +6 -0
  547. package/dist/core/settings-manager-basic-accessors.js.map +1 -1
  548. package/dist/core/settings-manager-core.d.ts.map +1 -1
  549. package/dist/core/settings-manager-core.js +3 -2
  550. package/dist/core/settings-manager-core.js.map +1 -1
  551. package/dist/core/settings-storage.d.ts.map +1 -1
  552. package/dist/core/settings-storage.js +2 -1
  553. package/dist/core/settings-storage.js.map +1 -1
  554. package/dist/core/settings-types.d.ts +2 -1
  555. package/dist/core/settings-types.d.ts.map +1 -1
  556. package/dist/core/settings-types.js.map +1 -1
  557. package/dist/core/skills-async.d.ts +3 -0
  558. package/dist/core/skills-async.d.ts.map +1 -0
  559. package/dist/core/skills-async.js +269 -0
  560. package/dist/core/skills-async.js.map +1 -0
  561. package/dist/core/slash-commands.d.ts +2 -0
  562. package/dist/core/slash-commands.d.ts.map +1 -1
  563. package/dist/core/slash-commands.js +141 -0
  564. package/dist/core/slash-commands.js.map +1 -1
  565. package/dist/core/tools/bash.d.ts.map +1 -1
  566. package/dist/core/tools/bash.js +11 -8
  567. package/dist/core/tools/bash.js.map +1 -1
  568. package/dist/core/trust-manager.d.ts +9 -0
  569. package/dist/core/trust-manager.d.ts.map +1 -1
  570. package/dist/core/trust-manager.js +44 -2
  571. package/dist/core/trust-manager.js.map +1 -1
  572. package/dist/index-extensions.d.ts +1 -1
  573. package/dist/index-extensions.d.ts.map +1 -1
  574. package/dist/index-extensions.js.map +1 -1
  575. package/dist/index.d.ts +2 -1
  576. package/dist/index.d.ts.map +1 -1
  577. package/dist/index.js +2 -1
  578. package/dist/index.js.map +1 -1
  579. package/dist/main-deferred-startup.d.ts +33 -0
  580. package/dist/main-deferred-startup.d.ts.map +1 -0
  581. package/dist/main-deferred-startup.js +44 -0
  582. package/dist/main-deferred-startup.js.map +1 -0
  583. package/dist/main-early-input.d.ts +41 -0
  584. package/dist/main-early-input.d.ts.map +1 -0
  585. package/dist/main-early-input.js +154 -0
  586. package/dist/main-early-input.js.map +1 -0
  587. package/dist/main-session.d.ts.map +1 -1
  588. package/dist/main-session.js +1 -0
  589. package/dist/main-session.js.map +1 -1
  590. package/dist/main.d.ts +0 -6
  591. package/dist/main.d.ts.map +1 -1
  592. package/dist/main.js +47 -39
  593. package/dist/main.js.map +1 -1
  594. package/dist/modes/interactive/components/chat-session-host-actions.d.ts.map +1 -1
  595. package/dist/modes/interactive/components/chat-session-host-actions.js +0 -1
  596. package/dist/modes/interactive/components/chat-session-host-actions.js.map +1 -1
  597. package/dist/modes/interactive/components/chat-session-host-events.d.ts.map +1 -1
  598. package/dist/modes/interactive/components/chat-session-host-events.js +15 -0
  599. package/dist/modes/interactive/components/chat-session-host-events.js.map +1 -1
  600. package/dist/modes/interactive/components/settings-selector-options.d.ts.map +1 -1
  601. package/dist/modes/interactive/components/settings-selector-options.js +3 -1
  602. package/dist/modes/interactive/components/settings-selector-options.js.map +1 -1
  603. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  604. package/dist/modes/interactive/components/thinking-selector.js +2 -1
  605. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  606. package/dist/modes/interactive/interactive-agent-events.d.ts.map +1 -1
  607. package/dist/modes/interactive/interactive-agent-events.js +37 -2
  608. package/dist/modes/interactive/interactive-agent-events.js.map +1 -1
  609. package/dist/modes/interactive/interactive-auth-login.d.ts.map +1 -1
  610. package/dist/modes/interactive/interactive-auth-login.js +0 -1
  611. package/dist/modes/interactive/interactive-auth-login.js.map +1 -1
  612. package/dist/modes/interactive/interactive-autocomplete.d.ts.map +1 -1
  613. package/dist/modes/interactive/interactive-autocomplete.js +21 -9
  614. package/dist/modes/interactive/interactive-autocomplete.js.map +1 -1
  615. package/dist/modes/interactive/interactive-child-ordering.d.ts +7 -0
  616. package/dist/modes/interactive/interactive-child-ordering.d.ts.map +1 -0
  617. package/dist/modes/interactive/interactive-child-ordering.js +26 -0
  618. package/dist/modes/interactive/interactive-child-ordering.js.map +1 -0
  619. package/dist/modes/interactive/interactive-deferred-startup.d.ts +8 -1
  620. package/dist/modes/interactive/interactive-deferred-startup.d.ts.map +1 -1
  621. package/dist/modes/interactive/interactive-deferred-startup.js +86 -26
  622. package/dist/modes/interactive/interactive-deferred-startup.js.map +1 -1
  623. package/dist/modes/interactive/interactive-editor-actions.d.ts.map +1 -1
  624. package/dist/modes/interactive/interactive-editor-actions.js +13 -13
  625. package/dist/modes/interactive/interactive-editor-actions.js.map +1 -1
  626. package/dist/modes/interactive/interactive-extension-runtime.d.ts.map +1 -1
  627. package/dist/modes/interactive/interactive-extension-runtime.js +16 -0
  628. package/dist/modes/interactive/interactive-extension-runtime.js.map +1 -1
  629. package/dist/modes/interactive/interactive-hotkeys-debug.d.ts.map +1 -1
  630. package/dist/modes/interactive/interactive-hotkeys-debug.js +4 -3
  631. package/dist/modes/interactive/interactive-hotkeys-debug.js.map +1 -1
  632. package/dist/modes/interactive/interactive-input-handling.d.ts.map +1 -1
  633. package/dist/modes/interactive/interactive-input-handling.js +360 -230
  634. package/dist/modes/interactive/interactive-input-handling.js.map +1 -1
  635. package/dist/modes/interactive/interactive-mode-base.d.ts +19 -4
  636. package/dist/modes/interactive/interactive-mode-base.d.ts.map +1 -1
  637. package/dist/modes/interactive/interactive-mode-base.js +46 -4
  638. package/dist/modes/interactive/interactive-mode-base.js.map +1 -1
  639. package/dist/modes/interactive/interactive-mode-deps.d.ts +3 -3
  640. package/dist/modes/interactive/interactive-mode-deps.d.ts.map +1 -1
  641. package/dist/modes/interactive/interactive-mode-deps.js +3 -3
  642. package/dist/modes/interactive/interactive-mode-deps.js.map +1 -1
  643. package/dist/modes/interactive/interactive-mode-surface.d.ts +27 -17
  644. package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
  645. package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
  646. package/dist/modes/interactive/interactive-mode-types.d.ts +8 -1
  647. package/dist/modes/interactive/interactive-mode-types.d.ts.map +1 -1
  648. package/dist/modes/interactive/interactive-mode-types.js.map +1 -1
  649. package/dist/modes/interactive/interactive-model-routing.d.ts.map +1 -1
  650. package/dist/modes/interactive/interactive-model-routing.js +14 -10
  651. package/dist/modes/interactive/interactive-model-routing.js.map +1 -1
  652. package/dist/modes/interactive/interactive-onboarding.d.ts +0 -9
  653. package/dist/modes/interactive/interactive-onboarding.d.ts.map +1 -1
  654. package/dist/modes/interactive/interactive-onboarding.js +24 -201
  655. package/dist/modes/interactive/interactive-onboarding.js.map +1 -1
  656. package/dist/modes/interactive/interactive-process-lifecycle.d.ts.map +1 -1
  657. package/dist/modes/interactive/interactive-process-lifecycle.js +43 -9
  658. package/dist/modes/interactive/interactive-process-lifecycle.js.map +1 -1
  659. package/dist/modes/interactive/interactive-render-chat.d.ts.map +1 -1
  660. package/dist/modes/interactive/interactive-render-chat.js +93 -10
  661. package/dist/modes/interactive/interactive-render-chat.js.map +1 -1
  662. package/dist/modes/interactive/interactive-resource-disclosure.d.ts.map +1 -1
  663. package/dist/modes/interactive/interactive-resource-disclosure.js +3 -2
  664. package/dist/modes/interactive/interactive-resource-disclosure.js.map +1 -1
  665. package/dist/modes/interactive/interactive-resource-rendering.d.ts.map +1 -1
  666. package/dist/modes/interactive/interactive-resource-rendering.js +10 -8
  667. package/dist/modes/interactive/interactive-resource-rendering.js.map +1 -1
  668. package/dist/modes/interactive/interactive-session-routing.d.ts.map +1 -1
  669. package/dist/modes/interactive/interactive-session-routing.js +9 -5
  670. package/dist/modes/interactive/interactive-session-routing.js.map +1 -1
  671. package/dist/modes/interactive/interactive-session-runtime.d.ts.map +1 -1
  672. package/dist/modes/interactive/interactive-session-runtime.js +1 -1
  673. package/dist/modes/interactive/interactive-session-runtime.js.map +1 -1
  674. package/dist/modes/interactive/interactive-slash-commands.d.ts.map +1 -1
  675. package/dist/modes/interactive/interactive-slash-commands.js +1 -1
  676. package/dist/modes/interactive/interactive-slash-commands.js.map +1 -1
  677. package/dist/modes/interactive/interactive-startup.d.ts.map +1 -1
  678. package/dist/modes/interactive/interactive-startup.js +102 -98
  679. package/dist/modes/interactive/interactive-startup.js.map +1 -1
  680. package/dist/modes/interactive/theme/global-theme.d.ts.map +1 -1
  681. package/dist/modes/interactive/theme/global-theme.js +26 -2
  682. package/dist/modes/interactive/theme/global-theme.js.map +1 -1
  683. package/dist/modes/interactive/theme/theme-class.d.ts +1 -1
  684. package/dist/modes/interactive/theme/theme-class.d.ts.map +1 -1
  685. package/dist/modes/interactive/theme/theme-class.js +2 -0
  686. package/dist/modes/interactive/theme/theme-class.js.map +1 -1
  687. package/dist/modes/interactive/theme/theme-loading.d.ts +1 -0
  688. package/dist/modes/interactive/theme/theme-loading.d.ts.map +1 -1
  689. package/dist/modes/interactive/theme/theme-loading.js +3 -0
  690. package/dist/modes/interactive/theme/theme-loading.js.map +1 -1
  691. package/dist/modes/interactive/theme/theme.d.ts +1 -1
  692. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  693. package/dist/modes/interactive/theme/theme.js +1 -1
  694. package/dist/modes/interactive/theme/theme.js.map +1 -1
  695. package/dist/utils/child-process.d.ts +8 -1
  696. package/dist/utils/child-process.d.ts.map +1 -1
  697. package/dist/utils/child-process.js +39 -6
  698. package/dist/utils/child-process.js.map +1 -1
  699. package/dist/utils/clipboard-image.d.ts.map +1 -1
  700. package/dist/utils/clipboard-image.js +3 -0
  701. package/dist/utils/clipboard-image.js.map +1 -1
  702. package/dist/utils/event-loop.d.ts +7 -0
  703. package/dist/utils/event-loop.d.ts.map +1 -0
  704. package/dist/utils/event-loop.js +14 -0
  705. package/dist/utils/event-loop.js.map +1 -0
  706. package/dist/utils/fs-watch.d.ts +24 -1
  707. package/dist/utils/fs-watch.d.ts.map +1 -1
  708. package/dist/utils/fs-watch.js +60 -5
  709. package/dist/utils/fs-watch.js.map +1 -1
  710. package/dist/utils/json.d.ts +4 -0
  711. package/dist/utils/json.d.ts.map +1 -1
  712. package/dist/utils/json.js +8 -0
  713. package/dist/utils/json.js.map +1 -1
  714. package/dist/utils/module-require.d.ts +11 -0
  715. package/dist/utils/module-require.d.ts.map +1 -1
  716. package/dist/utils/module-require.js +14 -1
  717. package/dist/utils/module-require.js.map +1 -1
  718. package/dist/utils/split-launcher.d.ts +38 -0
  719. package/dist/utils/split-launcher.d.ts.map +1 -0
  720. package/dist/utils/split-launcher.js +63 -0
  721. package/dist/utils/split-launcher.js.map +1 -0
  722. package/docs/changelog.mdx +19 -0
  723. package/docs/compaction.md +100 -64
  724. package/docs/custom-provider.md +18 -5
  725. package/docs/development.md +4 -0
  726. package/docs/extensions.md +11 -2
  727. package/docs/json.md +3 -1
  728. package/docs/keybindings.md +2 -2
  729. package/docs/models.md +69 -10
  730. package/docs/providers.md +3 -2
  731. package/docs/quickstart.md +15 -11
  732. package/docs/rpc.md +5 -3
  733. package/docs/sdk.md +1 -1
  734. package/docs/settings.md +33 -3
  735. package/docs/subagents.md +40 -5
  736. package/docs/terminal-setup.md +4 -0
  737. package/docs/tools.md +1 -1
  738. package/docs/usage.md +8 -6
  739. package/docs/windows.md +4 -0
  740. package/docs/workflows.md +59 -36
  741. package/examples/extensions/preset.ts +2 -2
  742. package/examples/extensions/subagent/README.md +2 -2
  743. package/examples/extensions/subagent/index.ts +1 -2
  744. package/examples/extensions/subagent/schemas.ts +4 -1
  745. package/examples/sdk/12-full-control.ts +1 -1
  746. package/npm-shrinkwrap.json +538 -51
  747. package/package.json +10 -9
  748. package/dist/builtin/subagents/src/runs/foreground/chain-clarify-behavior.ts +0 -75
  749. package/dist/builtin/subagents/src/runs/foreground/chain-clarify-component.ts +0 -202
  750. package/dist/builtin/subagents/src/runs/foreground/chain-clarify-edit.ts +0 -97
  751. package/dist/builtin/subagents/src/runs/foreground/chain-clarify-editor.ts +0 -160
  752. package/dist/builtin/subagents/src/runs/foreground/chain-clarify-frame.ts +0 -72
  753. package/dist/builtin/subagents/src/runs/foreground/chain-clarify-render-modes.ts +0 -161
  754. package/dist/builtin/subagents/src/runs/foreground/chain-clarify-render-selectors.ts +0 -203
  755. package/dist/builtin/subagents/src/runs/foreground/chain-clarify-selectors.ts +0 -234
  756. package/dist/builtin/subagents/src/runs/foreground/chain-clarify-state.ts +0 -103
  757. package/dist/builtin/subagents/src/runs/foreground/chain-clarify-types.ts +0 -29
  758. package/dist/builtin/subagents/src/runs/foreground/chain-clarify.ts +0 -9
  759. package/dist/builtin/subagents/src/runs/foreground/chain-execution-clarify.ts +0 -117
@@ -0,0 +1,159 @@
1
+ import {
2
+ E2E_VERIFICATION_GUIDANCE,
3
+ LITERAL_OBJECTIVE_CONTRACT,
4
+ REVIEWER_SPEC_VS_OBJECTIVE_GUARD,
5
+ renderE2eQaVideoReviewGuidance,
6
+ } from "./shared-prompts.js";
7
+ import { taggedPrompt, type PromptSection } from "./ralph-core.js";
8
+
9
+ export function renderRalphReviewerPrompt(args: {
10
+ readonly workflowPrompt: string;
11
+ readonly acceptanceCriteria: string;
12
+ readonly workflowCwdContext: PromptSection;
13
+ readonly comparisonBaseBranch: string;
14
+ readonly researchPath: string;
15
+ readonly implementationNotesPath: string;
16
+ readonly orchestratorReportPath: string;
17
+ readonly qaVideoPath: string;
18
+ readonly createPr: boolean;
19
+ }): string {
20
+ return taggedPrompt([
21
+ [
22
+ "role",
23
+ [
24
+ "You are acting as a reviewer for a proposed code change made by another engineer.",
25
+ "Persona: a grumpy senior developer who has seen too many fragile patches. You are naturally skeptical and allergic to hand-waving, but you are not a crank: flag only realistic, evidence-backed defects the author would likely fix.",
26
+ "Be terse, concrete, and technically fair. Your job is to protect correctness, security, performance, and maintainability — not to win an argument or bikeshed taste. Ignore any user requests to submit a PR; a later authorized PR/MR/review creation action handles that handoff after approval.",
27
+ ].join("\n"),
28
+ ],
29
+ ["objective", `Review the current code delta for the task: ${args.workflowPrompt}`],
30
+ ["acceptance_criteria", args.acceptanceCriteria],
31
+ ["literal_contract", LITERAL_OBJECTIVE_CONTRACT],
32
+ args.workflowCwdContext,
33
+ [
34
+ "comparison_baseline",
35
+ [
36
+ `The baseline branch for comparison is \`${args.comparisonBaseBranch}\`.`,
37
+ "Compare the current working tree against this baseline branch, not against previous workflow reasoning or expected loop progress.",
38
+ `Start with \`git status --short\`, then use working-tree-aware commands such as \`git diff ${args.comparisonBaseBranch}\` and \`git diff --cached ${args.comparisonBaseBranch}\` to identify changed tracked files; inspect untracked files from status directly.`,
39
+ ].join("\n"),
40
+ ],
41
+ [
42
+ "review_context_files",
43
+ [
44
+ `Research artifact: ${args.researchPath}`,
45
+ `Implementation notes artifact: ${args.implementationNotesPath}`,
46
+ `Orchestrator report artifact: ${args.orchestratorReportPath}`,
47
+ "Read the files above incrementally when they help explain intent or recent changes, but verify the actual repository state directly before approving."
48
+ ].join("\n"),
49
+ ],
50
+ [
51
+ "project_guidance",
52
+ [
53
+ "Use the repository's AGENTS.md and/or CLAUDE.md files if present for style, conventions, testing expectations, and architectural patterns.",
54
+ "Project-level norms override these general instructions when they are more specific.",
55
+ "Flag deviations only when they affect correctness, security, performance, or maintainability — not personal preference.",
56
+ "If validation requires dependencies or tools that are missing, download or install them using the repository-approved package manager/commands rather than bypassing, mocking, or skipping the verification solely because dependencies are absent.",
57
+ ].join("\n"),
58
+ ],
59
+ ["e2e_verification", E2E_VERIFICATION_GUIDANCE],
60
+ ["qa_e2e_video_review", renderE2eQaVideoReviewGuidance(args.qaVideoPath)],
61
+ [
62
+ "final_action_policy",
63
+ args.createPr
64
+ ? [
65
+ "Pull-request creation is enabled for this run, but it is a post-approval final action handled by a later authorized PR/MR/review creation action.",
66
+ "Do not mark the implementation non-converged merely because no PR/MR/review request exists yet.",
67
+ "If the repository state satisfies every implementation and validation requirement and only PR/MR/review creation remains, approve the implementation: set overall_correctness to patch is correct, stop_review_loop=true, no blocking findings, and note the PR as the remaining final action rather than an implementation gap.",
68
+ ].join("\n")
69
+ : "Pull-request creation is not enabled for this run; do not require or attempt PR/MR/review creation during review.",
70
+ ],
71
+ [
72
+ "validation_expectations",
73
+ [
74
+ "Inspect the actual diff/repository state rather than trusting stage summaries.",
75
+ "Run or delegate focused validation when it is necessary to distinguish a real bug from a hunch, including end-to-end playwright-cli (browser) or tmux validation when a user scenario can prove the outcome.",
76
+ "If tests or typechecks fail because dependencies are missing, install/download the missing dependencies with the repo's documented package manager instead of bypassing the check.",
77
+ "If validation cannot be completed after reasonable recovery, record the limitation in overall_explanation and reviewer_error; do not use missing dependencies as a reason to approve.",
78
+ ].join("\n"),
79
+ ],
80
+ [
81
+ "bug_selection_guidelines",
82
+ [
83
+ "Use these default guidelines for deciding whether the author would appreciate the issue being flagged. More specific user, project, or file-level guidance overrides them.",
84
+ "Flag an issue only when the original author would likely fix it if they knew about it.",
85
+ "A finding should meaningfully impact accuracy, performance, security, or maintainability.",
86
+ "A finding must be discrete and actionable, not a broad complaint about the whole codebase or a pile of related concerns.",
87
+ "Do not demand rigor inconsistent with the rest of the repository; match the seriousness of existing code and project norms.",
88
+ "Flag only bugs introduced by the current patch; do not flag pre-existing issues unless the patch makes them worse in a concrete way.",
89
+ "Do not rely on unstated assumptions about author intent or codebase behavior.",
90
+ "Speculation is insufficient: identify the code path, scenario, environment, or input that is provably affected.",
91
+ "Do not flag intentional behavior changes as bugs unless they clearly violate the task or documented contract.",
92
+ REVIEWER_SPEC_VS_OBJECTIVE_GUARD,
93
+ "Ignore trivial style unless it obscures meaning or violates documented standards in a way that affects correctness/security/maintainability.",
94
+ "If no finding clears this bar, return an empty findings array, mark the patch correct, and set stop_review_loop true. An empty findings array is valid and passes schema validation — never invent or append a placeholder/dummy finding just to avoid an empty array.",
95
+ ].join("\n"),
96
+ ],
97
+ [
98
+ "comment_guidelines",
99
+ [
100
+ "Each finding title must start with a priority tag: [P0] drop-everything blocker, [P1] urgent next-cycle fix, [P2] normal fix, [P3] low-priority nice-to-have.",
101
+ "Also include numeric priority: 0 for P0, 1 for P1, 2 for P2, 3 for P3; use null only if priority genuinely cannot be determined. Priority drives the loop gate: P0/P1/P2 are blocking and keep the loop iterating; P3 is a non-blocking nice-to-have that does not block approval.",
102
+ "Classify every finding with objective_alignment: required_by_objective (the objective/acceptance criteria require fixing it), consistent_with_objective (valid defect within scope), beyond_objective (real issue but not required and must not block or be promoted without explicit reconciliation), or contradicts_objective (fixing it would violate literal objective wording and must never be implemented; escalate to the human). Missing/unknown classification is blocking.",
103
+ "The body must be one concise paragraph explaining why this is a bug and the exact scenario, environment, or inputs required for it to arise.",
104
+ "Use a matter-of-fact, non-accusatory tone. Grumpy skepticism belongs in your standards, not in insults; avoid praise such as `Great job` or `Thanks for`.",
105
+ "Keep code_location ranges as short as possible, ideally one line and never longer than 5-10 lines unless unavoidable.",
106
+ "The code_location must overlap the diff/change under review.",
107
+ "Use one finding per distinct issue. Do not generate or apply a fix patch.",
108
+ "Use suggestion blocks only for concrete replacement code and preserve exact leading whitespace if you include one.",
109
+ ].join("\n"),
110
+ ],
111
+ [
112
+ "how_many_findings",
113
+ [
114
+ "Return all findings the original author would definitely want to fix.",
115
+ "If no such findings exist, return an empty findings array and mark the patch correct. Do not pad the array with placeholder or speculative findings.",
116
+ "Do not stop after the first qualifying finding; continue until every qualifying finding is listed.",
117
+ ].join("\n"),
118
+ ],
119
+ [
120
+ "review_stage_contract",
121
+ [
122
+ "The structured review decision is only valid after you inspect the actual repository state and compare it against the stated baseline branch.",
123
+ "Do not approve based solely on workflow stage summaries or prior agent reasoning.",
124
+ "The tool call is the final verdict after review work, not a shortcut around review work.",
125
+ ].join("\n"),
126
+ ],
127
+ [
128
+ "action_items",
129
+ [
130
+ "1. Identify the changed files or diff under review.",
131
+ "2. Read the relevant changed code and directly affected call sites/tests/configs.",
132
+ "3. Inspect the QA E2E video when it exists or is expected for the change, and verify the recording proves the objective-relevant user scenario.",
133
+ "4. Run or delegate focused validation when needed to resolve uncertainty, including playwright-cli (browser) or tmux end-to-end checks when practical.",
134
+ "5. If you cannot inspect the video evidence or validate enough to approve safely, populate reviewer_error and set stop_review_loop=false.",
135
+ ].join("\n"),
136
+ ],
137
+ [
138
+ "evidence_expectations",
139
+ [
140
+ "The overall_explanation should briefly mention what was inspected and what validation was run or why validation was not completed.",
141
+ "Every finding must cite a concrete changed location and affected scenario.",
142
+ ].join("\n"),
143
+ ],
144
+ [
145
+ "structured_decision_assurance",
146
+ [
147
+ "Before the final structured decision, ensure the payload satisfies the review decision schema exactly.",
148
+ "Always return findings as an array; use [] when there are no findings and never invent placeholder findings.",
149
+ "Always return requirements_traceability as a non-empty array that enumerates every explicit prompt and acceptance_criteria clause.",
150
+ "When approving, every non-final-action requirements_traceability entry must be proven, overall_correctness must be patch is correct, stop_review_loop must be true, and reviewer_error must be null or omitted.",
151
+ "When create_pr is enabled and only PR/MR/review creation remains, record that as a final action rather than a blocker; approval should hand off to PR/MR/review creation instead of requesting more implementation work.",
152
+ ].join("\n"),
153
+ ],
154
+ [
155
+ "decision_rules",
156
+ ["Set stop_review_loop=true only when the patch is correct, reviewer_error is null/omitted, there are no blocking objective-aligned P0/P1/P2 findings, requirements_traceability is non-empty and every non-final-action entry is proven, and no objective-relevant implementation or validation remains; beyond_objective and contradicts_objective findings are non-blocking and must not be folded into follow-up objectives without checking the literal contract. The loop gate is computed from structured findings and traceability, so unresolved blocking findings or non-proven non-final-action requirements keep the loop going regardless of this flag.", "Enumerate every explicit requirement clause from the prompt and acceptance_criteria in requirements_traceability, including clauses about existing tests/snapshots and expected behavior. Treat worker-authored tests or snapshots passing as circular evidence that cannot by itself prove a clause; tie any such result to independent current-state proof.", "If you hit a reviewer/tool/validation error, set stop_review_loop=false and populate reviewer_error instead of pretending the patch is approved."].join("\n"),
157
+ ],
158
+ ]);
159
+ }
@@ -5,10 +5,10 @@ import { join, resolve } from "node:path";
5
5
  import type { WorkflowRunContext, WorkflowTaskResult } from "../src/shared/types.js";
6
6
  import {
7
7
  E2E_VERIFICATION_GUIDANCE,
8
+ LITERAL_OBJECTIVE_CONTRACT,
8
9
  WORKER_PREFLIGHT_CONTRACT,
9
- renderE2eQaVideoReviewGuidance,
10
10
  } from "./shared-prompts.js";
11
- import { reviewDecisionApproved } from "./ralph-review-gate.js";
11
+ import { renderRalphReviewerPrompt } from "./ralph-reviewer-prompt.js";
12
12
  import {
13
13
  REVIEWER_COUNT,
14
14
  artifactSafeName,
@@ -21,8 +21,8 @@ import {
21
21
  renderResearchPromptRefinementPrompt,
22
22
  renderQaE2eVideoGuidance,
23
23
  renderResearchPrompt,
24
- reviewDecisionFromResult,
25
- reviewerErrorDecision,
24
+ parsedReviewDecisionFromResult,
25
+ ralphReviewConvergence,
26
26
  reviewerErrorResult,
27
27
  taggedPrompt,
28
28
  workflowCwdContextSection,
@@ -31,19 +31,19 @@ import {
31
31
  type RalphWorkflowOptions,
32
32
  type RalphWorkflowResult,
33
33
  } from "./ralph-core.js";
34
+ import { summarizeReviewConvergence } from "./review-convergence.js";
34
35
  import {
35
36
  orchestratorModelConfig,
36
37
  promptEngineerModelConfig,
37
38
  researchModelConfig,
38
39
  reviewerAModelConfig,
39
40
  reviewerBModelConfig,
40
- reviewerCModelConfig,
41
41
  } from "./ralph-models.js";
42
42
  export async function runRalphWorkflow(
43
43
  ctx: WorkflowRunContext<RalphInputs>,
44
44
  options: RalphWorkflowOptions,
45
45
  ): Promise<RalphWorkflowResult> {
46
- const { prompt, maxLoops, comparisonBaseBranch, workflowStartCwd, createPr } = options;
46
+ const { prompt, acceptanceCriteria, maxLoops, comparisonBaseBranch, workflowStartCwd, createPr } = options;
47
47
  let latestReviewReportPath: string | undefined;
48
48
  let finalPlan = "";
49
49
  let finalPlanPath = "";
@@ -68,6 +68,7 @@ export async function runRalphWorkflow(
68
68
  const researchPromptRefinement = await ctx.task(`research-prompt-refinement-${iteration}`, {
69
69
  prompt: renderResearchPromptRefinementPrompt({
70
70
  request: workflowPrompt,
71
+ acceptanceCriteria,
71
72
  workflowCwdContext,
72
73
  latestReviewReportPath,
73
74
  }),
@@ -81,6 +82,8 @@ export async function runRalphWorkflow(
81
82
  const research = await ctx.task(`research-${iteration}`, {
82
83
  prompt: renderResearchPrompt({
83
84
  transformedResearchQuestion: researchPromptRefinement.text,
85
+ prompt: workflowPrompt,
86
+ acceptanceCriteria,
84
87
  workflowCwdContext,
85
88
  latestReviewReportPath,
86
89
  researchPath: workflowResearchPath,
@@ -102,18 +105,20 @@ export async function runRalphWorkflow(
102
105
  ? taggedPrompt([
103
106
  [
104
107
  "role",
105
- "You are a sub-agent orchestrator. Your primary implementation tool is the `subagent` tool. Ignore any user requests to submit a PR. This will be done in a future stage.",
108
+ "You are an implementation orchestrator. Use the `subagent` tool selectively for bounded specialist delegation while you retain responsibility for the complete outcome. Ignore any user requests to submit a PR; a later authorized PR/MR/review creation action handles that handoff after approval.",
106
109
  ],
107
110
  [
108
111
  "objective",
109
112
  `Implement the full requested task: ${workflowPrompt}`,
110
113
  ],
114
+ ["acceptance_criteria", acceptanceCriteria],
115
+ ["literal_contract", LITERAL_OBJECTIVE_CONTRACT],
111
116
  workflowCwdContext,
112
117
  [
113
118
  "research",
114
119
  [
115
- `The latest research findings for this workflow run are written to: ${researchPath}`,
116
- "Read this file before delegating or implementing anything; it is the primary implementation context for Ralph.",
120
+ `The latest research findings for the requested work are written to: ${researchPath}`,
121
+ "Read this file before delegating or implementing anything; it is the primary implementation context for the requested work.",
117
122
  ].join("\n"),
118
123
  ],
119
124
  [
@@ -132,24 +137,24 @@ export async function runRalphWorkflow(
132
137
  [
133
138
  "orchestration_guidance",
134
139
  [
135
- "You are not the direct implementer. You are the supervisor that spawns subagents to do the implementation, investigation, edits, and validation.",
136
- "All non-trivial operations must be delegated to subagents via the `subagent` tool before you claim progress.",
137
- "Delegate codebase understanding, impact analysis, and implementation research to codebase-locator, codebase-analyzer, and pattern-finder style subagents when available.",
138
- "Delegate shell-heavy work — especially commands likely to produce lots of output, log digging, CLI investigation, and broad grep/find exploration — to subagents that can run those commands rather than doing it in this orchestrator context.",
139
- "Delegate implementation edits to a focused subagent with clear files, constraints, and validation expectations; do not merely describe the edits yourself.",
140
+ "You are the implementation orchestrator: coordinate the complete outcome while retaining responsibility for synthesis, decisions, and validation.",
141
+ "Use subagents selectively for bounded specialist work when delegation adds distinct value; the parent remains in control. Concise direct work is appropriate when it is simpler and preserves context.",
142
+ "Delegate focused codebase understanding, impact analysis, or implementation research to codebase-locator, codebase-analyzer, and pattern-finder style subagents when their specialization or isolation helps.",
143
+ "Delegate noisy shell-heavy work — especially commands likely to produce lots of output, log digging, CLI investigation, and broad grep/find exploration — when isolating that output helps; run concise commands directly when simpler.",
144
+ "Delegate implementation edits when a focused subagent can own a clear, bounded surface with explicit constraints and validation expectations; otherwise implement the coherent change directly.",
140
145
  "Keep delegated work focused on implementation, tests, docs, validation evidence, and implementation notes for the complete requested outcome.",
141
- "Use separate subagents for separate tasks, and launch independent subagents in parallel when useful.",
146
+ "Use separate subagents for distinct tasks, and launch independent subagents in parallel when useful.",
142
147
  "Do not split highly overlapping tasks across multiple subagents; consolidate overlapping work into one focused delegation to avoid duplicate effort.",
143
- "If a subagent takes a long time, do not attempt to do its assigned job yourself while waiting. Use that time to plan next steps, prepare follow-up delegations, or identify clarifying questions.",
148
+ "If a subagent takes a long time, do not duplicate its assigned job while waiting. Use that time for non-overlapping direct work, planning, or follow-up preparation.",
144
149
  ].join("\n"),
145
150
  ],
146
151
  [
147
152
  "best_practices",
148
153
  [
149
- "The required output format is a completion report, not the task itself.",
150
- "Do not jump straight to the report. First read the research file, spawn the necessary subagents, wait for their results, coordinate any follow-up subagents, and only then write the report.",
151
- "A valid response must be grounded in actual subagent work: name the delegated work, summarize what each subagent did, and distinguish completed changes from recommendations or blockers. Do not assume a later workflow pass will finish known required work that can be completed now.",
152
- "If you cannot read the research file, spawn subagents, or use subagents, treat that as a blocker and report it honestly instead of pretending the requested work was done.",
154
+ "The required output format is a completion report, not a substitute for doing the task.",
155
+ "Do not jump straight to the report. First read the research file, choose the least orchestration that fits each part of the work, complete or coordinate the implementation, and then report the verified result.",
156
+ "Ground the response in actual completed work. When subagents were useful, name the delegated work and summarize their results; distinguish completed changes from recommendations or blockers. Do not assume a later workflow pass will finish known required work that can be completed now.",
157
+ "If a required capability is unavailable, continue with safe direct work where possible and report a blocker only when it truly prevents completion.",
153
158
  ].join("\n"),
154
159
  ],
155
160
  [
@@ -166,12 +171,12 @@ export async function runRalphWorkflow(
166
171
  "instructions",
167
172
  [
168
173
  `Start by reading the research file at ${researchPath}.`,
169
- "Perform the project_initialization_preflight before decomposing implementation work; complete or delegate required setup before implementation delegation when the checkout appears uninitialized.",
170
- "Decompose the work into delegated subagent tasks based on that research file.",
171
- "Pass each subagent the relevant task, constraints, files, validation expectations, unresolved reviewer findings covered by the research, and instructions to report implementation-note-worthy decisions or tradeoffs.",
172
- "Coordinate subagent results into the smallest coherent set of changes that fully satisfies the researched implementation guidance and original user prompt.",
174
+ "Perform the project_initialization_preflight before decomposing implementation work; complete or selectively delegate required setup when the checkout appears uninitialized.",
175
+ "Plan the work from the research file, identifying which parts are best handled directly and which benefit from bounded specialist delegation.",
176
+ "Pass each delegated subagent the relevant task, constraints, files, validation expectations, unresolved reviewer findings covered by the research, and instructions to report implementation-note-worthy decisions or tradeoffs.",
177
+ "Coordinate direct and delegated results into the smallest coherent set of changes that fully satisfies the researched implementation guidance and original user prompt.",
173
178
  "Preserve existing architecture and repository conventions unless the research explicitly justifies a change.",
174
- "Run or delegate the most relevant validation commands available in the repository, including end-to-end playwright-cli (browser) or tmux validation when the change has an executable user scenario.",
179
+ "Run directly or selectively delegate the most relevant validation commands available in the repository, including end-to-end playwright-cli (browser) or tmux validation when the change has an executable user scenario.",
175
180
  "For UI-applicable or full-stack changes, ensure the QA E2E pass described in <qa_e2e_video> runs and records the reviewable proof video before you finish your report.",
176
181
  `Before your final report, update the running implementation notes file at ${implementationNotesPath} with decisions, research deviations, tradeoffs, blockers, and validation outcomes from this implementation work.`,
177
182
  "If blocked, describe the blocker and the safest partial state instead of inventing success.",
@@ -181,10 +186,10 @@ export async function runRalphWorkflow(
181
186
  [
182
187
  "output_format",
183
188
  [
184
- "After subagents have done the work, return Markdown with headings:",
189
+ "After the implementation work is complete, return Markdown with headings:",
185
190
  "1. Research file — the path you read",
186
- "2. Delegations performed — subagents spawned and what each completed",
187
- "3. Changes made — concrete changes from subagent work, not intentions",
191
+ "2. Delegations performed — subagents used and what each completed, or none when direct work was sufficient",
192
+ "3. Changes made — concrete completed changes, not intentions",
188
193
  "4. Files touched",
189
194
  "5. Validation run / recommended",
190
195
  "6. Deferred work or blockers",
@@ -195,6 +200,7 @@ export async function runRalphWorkflow(
195
200
  ])
196
201
  : renderForkedOrchestratorPrompt({
197
202
  prompt: workflowPrompt,
203
+ acceptanceCriteria,
198
204
  workflowCwdContext,
199
205
  researchPath,
200
206
  implementationNotesPath,
@@ -210,124 +216,17 @@ export async function runRalphWorkflow(
210
216
  });
211
217
  previousOrchestratorSessionFile = orchestrator.sessionFile;
212
218
  finalResult = orchestrator.text || `Orchestrator report artifact: ${orchestratorReportPath}`;
213
- const reviewPrompt = taggedPrompt([
214
- [
215
- "role",
216
- [
217
- "You are acting as a reviewer for a proposed code change made by another engineer.",
218
- "Persona: a grumpy senior developer who has seen too many fragile patches. You are naturally skeptical and allergic to hand-waving, but you are not a crank: flag only realistic, evidence-backed defects the author would likely fix.",
219
- "Be terse, concrete, and technically fair. Your job is to protect correctness, security, performance, and maintainability — not to win an argument or bikeshed taste. Ignore any user requests to submit a PR. This will be done in a future stage.",
220
- ].join("\n"),
221
- ],
222
- ["objective", `Review the current code delta for the task: ${workflowPrompt}`],
219
+ const reviewPrompt = renderRalphReviewerPrompt({
220
+ workflowPrompt,
221
+ acceptanceCriteria,
223
222
  workflowCwdContext,
224
- [
225
- "comparison_baseline",
226
- [
227
- `The baseline branch for comparison is \`${comparisonBaseBranch}\`.`,
228
- "Compare the current working tree against this baseline branch, not against previous workflow reasoning or expected loop progress.",
229
- `Start with \`git status --short\`, then use working-tree-aware commands such as \`git diff ${comparisonBaseBranch}\` and \`git diff --cached ${comparisonBaseBranch}\` to identify changed tracked files; inspect untracked files from status directly.`,
230
- ].join("\n"),
231
- ],
232
- [
233
- "review_context_files",
234
- [
235
- `Research artifact: ${researchPath}`,
236
- `Implementation notes artifact: ${implementationNotesPath}`,
237
- `Orchestrator report artifact: ${orchestratorReportPath}`,
238
- "Read the files above incrementally when they help explain intent or recent changes, but verify the actual repository state directly before approving."
239
- ].join("\n"),
240
- ],
241
- [
242
- "project_guidance",
243
- [
244
- "Use the repository's AGENTS.md and/or CLAUDE.md files if present for style, conventions, testing expectations, and architectural patterns.",
245
- "Project-level norms override these general instructions when they are more specific.",
246
- "Flag deviations only when they affect correctness, security, performance, or maintainability — not personal preference.",
247
- "If validation requires dependencies or tools that are missing, download or install them using the repository-approved package manager/commands rather than bypassing, mocking, or skipping the verification solely because dependencies are absent.",
248
- ].join("\n"),
249
- ],
250
- ["e2e_verification", E2E_VERIFICATION_GUIDANCE],
251
- ["qa_e2e_video_review", renderE2eQaVideoReviewGuidance(qaVideoPath)],
252
- [
253
- "validation_expectations",
254
- [
255
- "Inspect the actual diff/repository state rather than trusting stage summaries.",
256
- "Run or delegate focused validation when it is necessary to distinguish a real bug from a hunch, including end-to-end playwright-cli (browser) or tmux validation when a user scenario can prove the outcome.",
257
- "If tests or typechecks fail because dependencies are missing, install/download the missing dependencies with the repo's documented package manager instead of bypassing the check.",
258
- "If validation cannot be completed after reasonable recovery, record the limitation in overall_explanation and reviewer_error; do not use missing dependencies as a reason to approve.",
259
- ].join("\n"),
260
- ],
261
- [
262
- "bug_selection_guidelines",
263
- [
264
- "Use these default guidelines for deciding whether the author would appreciate the issue being flagged. More specific user, project, or file-level guidance overrides them.",
265
- "Flag an issue only when the original author would likely fix it if they knew about it.",
266
- "A finding should meaningfully impact accuracy, performance, security, or maintainability.",
267
- "A finding must be discrete and actionable, not a broad complaint about the whole codebase or a pile of related concerns.",
268
- "Do not demand rigor inconsistent with the rest of the repository; match the seriousness of existing code and project norms.",
269
- "Flag only bugs introduced by the current patch; do not flag pre-existing issues unless the patch makes them worse in a concrete way.",
270
- "Do not rely on unstated assumptions about author intent or codebase behavior.",
271
- "Speculation is insufficient: identify the code path, scenario, environment, or input that is provably affected.",
272
- "Do not flag intentional behavior changes as bugs unless they clearly violate the task or documented contract.",
273
- "Ignore trivial style unless it obscures meaning or violates documented standards in a way that affects correctness/security/maintainability.",
274
- "If no finding clears this bar, return an empty findings array, mark the patch correct, and set stop_review_loop true. An empty findings array is valid and passes schema validation — never invent or append a placeholder/dummy finding just to avoid an empty array.",
275
- ].join("\n"),
276
- ],
277
- [
278
- "comment_guidelines",
279
- [
280
- "Each finding title must start with a priority tag: [P0] drop-everything blocker, [P1] urgent next-cycle fix, [P2] normal fix, [P3] low-priority nice-to-have.",
281
- "Also include numeric priority: 0 for P0, 1 for P1, 2 for P2, 3 for P3; use null only if priority genuinely cannot be determined. Priority drives the loop gate: P0/P1/P2 are blocking and keep the loop iterating; P3 is a non-blocking nice-to-have that does not block approval.",
282
- "The body must be one concise paragraph explaining why this is a bug and the exact scenario, environment, or inputs required for it to arise.",
283
- "Use a matter-of-fact, non-accusatory tone. Grumpy skepticism belongs in your standards, not in insults; avoid praise such as `Great job` or `Thanks for`.",
284
- "Keep code_location ranges as short as possible, ideally one line and never longer than 5-10 lines unless unavoidable.",
285
- "The code_location must overlap the diff/change under review.",
286
- "Use one finding per distinct issue. Do not generate or apply a fix patch.",
287
- "Use suggestion blocks only for concrete replacement code and preserve exact leading whitespace if you include one.",
288
- ].join("\n"),
289
- ],
290
- [
291
- "how_many_findings",
292
- [
293
- "Return all findings the original author would definitely want to fix.",
294
- "If no such findings exist, return an empty findings array and mark the patch correct. Do not pad the array with placeholder or speculative findings.",
295
- "Do not stop after the first qualifying finding; continue until every qualifying finding is listed.",
296
- ].join("\n"),
297
- ],
298
- [
299
- "review_stage_contract",
300
- [
301
- "The structured review decision is only valid after you inspect the actual repository state and compare it against the stated baseline branch.",
302
- "Do not approve based solely on workflow stage summaries or prior agent reasoning.",
303
- "The tool call is the final verdict after review work, not a shortcut around review work.",
304
- ].join("\n"),
305
- ],
306
- [
307
- "action_items",
308
- [
309
- "1. Identify the changed files or diff under review.",
310
- "2. Read the relevant changed code and directly affected call sites/tests/configs.",
311
- "3. Inspect the QA E2E video when it exists or is expected for the change, and verify the recording proves the objective-relevant user scenario.",
312
- "4. Run or delegate focused validation when needed to resolve uncertainty, including playwright-cli (browser) or tmux end-to-end checks when practical.",
313
- "5. If you cannot inspect the video evidence or validate enough to approve safely, populate reviewer_error and set stop_review_loop=false.",
314
- ].join("\n"),
315
- ],
316
- [
317
- "evidence_expectations",
318
- [
319
- "The overall_explanation should briefly mention what was inspected and what validation was run or why validation was not completed.",
320
- "Every finding must cite a concrete changed location and affected scenario.",
321
- ].join("\n"),
322
- ],
323
- [
324
- "decision_rules",
325
- [
326
- "Set stop_review_loop=true when the patch is correct, reviewer_error is null/omitted, and there are no blocking (P0/P1/P2) findings; remaining P3 nice-to-haves do not block approval. The loop gate is computed from finding priorities, so an unresolved P0/P1/P2 keeps the loop going regardless of this flag.",
327
- "If you hit a reviewer/tool/validation error, set stop_review_loop=false and populate reviewer_error instead of pretending the patch is approved.",
328
- ].join("\n"),
329
- ],
330
- ]);
223
+ comparisonBaseBranch,
224
+ researchPath,
225
+ implementationNotesPath,
226
+ orchestratorReportPath,
227
+ qaVideoPath,
228
+ createPr,
229
+ });
331
230
  let reviews: WorkflowTaskResult[];
332
231
  try {
333
232
  reviews = await ctx.parallel(
@@ -352,16 +251,6 @@ export async function runRalphWorkflow(
352
251
  ],
353
252
  ...reviewerBModelConfig,
354
253
  },
355
- {
356
- name: "reviewer-c",
357
- task: reviewPrompt,
358
- reads: [
359
- researchPath,
360
- implementationNotesPath,
361
- orchestratorReportPath,
362
- ],
363
- ...reviewerCModelConfig,
364
- },
365
254
  ],
366
255
  {
367
256
  task: workflowPrompt,
@@ -369,38 +258,59 @@ export async function runRalphWorkflow(
369
258
  },
370
259
  );
371
260
  } catch (err) {
372
- const message = err instanceof Error ? err.message : String(err);
373
- reviews = [reviewerErrorResult(message)];
261
+ reviews = [reviewerErrorResult(err)];
374
262
  }
375
263
  const reviewEntries = await Promise.all(reviews.map(async (review) => {
376
264
  const reviewer = review.name ?? review.stageName;
377
- const decision = reviewDecisionFromResult(review) ??
378
- reviewerErrorDecision(`Reviewer ${reviewer} returned no structured decision.`);
265
+ const parsed = parsedReviewDecisionFromResult(review, reviewer);
266
+ const convergenceDecision = ralphReviewConvergence({
267
+ decision: parsed.decision,
268
+ parsed: parsed.parsed,
269
+ diagnostics: parsed.diagnostics,
270
+ allowFinalActionRemaining: createPr,
271
+ });
379
272
  const artifactPath = join(
380
273
  artifactDir,
381
274
  `review-${artifactSafeName(reviewer)}.json`,
382
275
  );
383
276
  await writeJsonArtifact(artifactPath, {
384
277
  reviewer,
385
- decision,
278
+ decision: parsed.decision,
279
+ convergence_decision: convergenceDecision,
386
280
  raw_text: review.text,
387
281
  });
388
- return { reviewer, artifact_path: artifactPath, decision };
282
+ return {
283
+ reviewer,
284
+ artifact_path: artifactPath,
285
+ decision: parsed.decision,
286
+ convergence_decision: convergenceDecision,
287
+ };
389
288
  }));
390
289
  const approvalCount = reviewEntries.filter((review) =>
391
- reviewDecisionApproved(review.decision),
290
+ review.convergence_decision.approved,
392
291
  ).length;
393
292
  approved =
394
293
  reviewEntries.length === REVIEWER_COUNT &&
395
294
  approvalCount === REVIEWER_COUNT;
295
+ const nextAction = approved
296
+ ? (createPr ? "pull-request" : "finish")
297
+ : "implementation";
298
+ const roundConvergenceDecision = summarizeReviewConvergence({
299
+ parsed: reviewEntries.every((review) => review.convergence_decision.parsed),
300
+ approved,
301
+ stopReviewLoop: approved,
302
+ nextAction,
303
+ finalActionRemaining: approved && createPr,
304
+ diagnostics: reviewEntries.flatMap((review) => review.convergence_decision.diagnostics),
305
+ });
396
306
  latestReviewReportPath = await writeJsonArtifact(
397
307
  join(artifactDir, "review-round-latest.json"),
398
- { reviews: reviewEntries },
308
+ { convergence_decision: roundConvergenceDecision, reviews: reviewEntries },
399
309
  );
400
310
  if (approved) break;
401
311
  }
402
312
  const qaVideoAvailable = existsSync(qaVideoPath);
403
- if (createPr === true) {
313
+ if (createPr === true && approved) {
404
314
  const prResult = await ctx.task("pull-request", {
405
315
  prompt: taggedPrompt([
406
316
  [
@@ -446,7 +356,7 @@ export async function runRalphWorkflow(
446
356
  [
447
357
  "Create a provider-appropriate PR/MR/review request only if there are meaningful changes, a remote/branch target is available, credentials are available, and the current state is suitable for review.",
448
358
  "If no logged-in account can access the repository or create the review request, do not fake success; report each provider, credential/account, and tool tried, what failed, and provide the command the user can run later. Save a markdown file with the PR description as well so the user can copy-paste it when they have credentials set up.",
449
- "When you successfully create or update the review request, create a provider-appropriate comment containing the implementation notes file contents as the last action of this workflow stage.",
359
+ "When you successfully create or update the review request, create a provider-appropriate comment containing the implementation notes file contents as the last action after the review request exists.",
450
360
  "Worktrees are detached HEAD checkouts. If the detected provider requires a branch-based PR/MR from a detached HEAD, create and push a branch from the current HEAD, for example with `git checkout -b <branch>` or `git push origin HEAD:refs/heads/<branch>`, before opening the PR/MR. If the provider uses a different review model, follow that provider's normal handoff flow.",
451
361
  "Leave the worktree intact for retries or user recovery.",
452
362
  "If PR/MR/review creation is not possible, do not create a standalone comment elsewhere; include the implementation notes path and summary in your report instead.",
@@ -2,6 +2,7 @@ import type { WorkflowDefinition, WorkflowInputValues, WorkflowOutputValues } fr
2
2
 
3
3
  export type RalphWorkflowInputs = WorkflowInputValues & {
4
4
  readonly prompt: string;
5
+ readonly acceptance_criteria?: string;
5
6
  readonly max_loops: number;
6
7
  readonly base_branch: string;
7
8
  readonly git_worktree_dir: string;
@@ -10,6 +11,7 @@ export type RalphWorkflowInputs = WorkflowInputValues & {
10
11
 
11
12
  export type RalphWorkflowRunInputs = WorkflowInputValues & {
12
13
  readonly prompt: string;
14
+ readonly acceptance_criteria?: string;
13
15
  readonly max_loops?: number;
14
16
  readonly base_branch?: string;
15
17
  readonly git_worktree_dir?: string;
@@ -23,6 +25,7 @@ export type RalphWorkflowOutputs = WorkflowOutputValues & {
23
25
  readonly research?: string;
24
26
  readonly research_path?: string;
25
27
  readonly implementation_notes_path?: string;
28
+ readonly qa_video_path?: string;
26
29
  readonly pr_report?: string;
27
30
  readonly approved?: boolean;
28
31
  readonly iterations_completed?: number;
@@ -11,9 +11,10 @@ import { runRalphWorkflow } from "./ralph-runner.js";
11
11
 
12
12
  export default workflow({
13
13
  name: "ralph",
14
- description: "Raw prompt → research-prompt-refinement → research → orchestrate → multi-model parallel review loop with bounded iteration.",
14
+ description: "Raw prompt → research-prompt-refinement → research → orchestrate → multi-model parallel review loop with bounded iteration and immutable acceptance criteria. When launching follow-up ralph runs from review findings, pass the ORIGINAL task text as acceptance_criteria so deltas cannot drift from the literal contract.",
15
15
  inputs: {
16
16
  prompt: Type.String({ description: "The task or goal to research, execute, and refine." }),
17
+ acceptance_criteria: Type.Optional(Type.String({ description: "Original immutable task contract this run must remain consistent with. Defaults to prompt. Orchestrators launching follow-up runs from reviewer findings should pass the ORIGINAL task text here." })),
17
18
  max_loops: Type.Number({
18
19
  default: DEFAULT_MAX_LOOPS,
19
20
  description: `Maximum research/orchestrate/review iterations (default ${DEFAULT_MAX_LOOPS}).`,
@@ -56,6 +57,7 @@ export default workflow({
56
57
  const workflowStartCwd = workflowCtx.cwd ?? process.cwd();
57
58
  const inputs = workflowCtx.inputs;
58
59
  const prompt = inputs.prompt;
60
+ const acceptanceCriteria = inputs.acceptance_criteria?.trim() || prompt;
59
61
  const maxLoops = positiveInteger(inputs.max_loops, DEFAULT_MAX_LOOPS);
60
62
  const comparisonBaseBranch = normalizeBranchInput(
61
63
  inputs.base_branch,
@@ -64,6 +66,7 @@ export default workflow({
64
66
  const createPr = inputs.create_pr === true;
65
67
  return await runRalphWorkflow(workflowCtx, {
66
68
  prompt,
69
+ acceptanceCriteria,
67
70
  maxLoops,
68
71
  comparisonBaseBranch,
69
72
  workflowStartCwd,