pi-subagents 0.69.0 → 0.70.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1443) hide show
  1. package/CHANGELOG.md +66 -0
  2. package/README.md +1 -1
  3. package/agents/claude-code-writer.md +1 -0
  4. package/agents/codex-exec-writer.md +1 -0
  5. package/agents/cursor-agent-writer.md +1 -0
  6. package/agents/reviewer.md +3 -2
  7. package/agents/worker.md +1 -0
  8. package/docs/agents.md +12 -9
  9. package/docs/configuration.md +3 -1
  10. package/docs/extension-api.md +3 -1
  11. package/docs/models.md +4 -2
  12. package/docs/observability.md +7 -1
  13. package/docs/standalone-background.md +4 -4
  14. package/docs/tool-reference.md +3 -7
  15. package/docs/watchdog.md +2 -0
  16. package/docs/workflows.md +6 -2
  17. package/index.d.ts +3 -0
  18. package/index.d.ts.map +1 -0
  19. package/index.js +10 -0
  20. package/index.js.map +1 -0
  21. package/inspector-runner.mjs +1 -1
  22. package/package.json +89 -73
  23. package/runner-peer-loader.mjs +4 -7
  24. package/runner-peer-preload.mjs +5 -7
  25. package/skills/pi-subagents/SKILL.md +1 -0
  26. package/skills/pi-subagents/references/management-authoring-rpc.md +1 -1
  27. package/skills/pi-subagents/references/multi-lane-orchestration.md +8 -0
  28. package/skills/pi-subagents/references/prompting-and-roles.md +16 -15
  29. package/src/agents/advertised-agent-prompt.d.ts +8 -0
  30. package/src/agents/advertised-agent-prompt.d.ts.map +1 -0
  31. package/src/agents/advertised-agent-prompt.js +77 -0
  32. package/src/agents/advertised-agent-prompt.js.map +1 -0
  33. package/src/agents/agent-management.d.ts +27 -0
  34. package/src/agents/agent-management.d.ts.map +1 -0
  35. package/src/agents/agent-management.js +1514 -0
  36. package/src/agents/agent-management.js.map +1 -0
  37. package/src/agents/agent-memory.d.ts +49 -0
  38. package/src/agents/agent-memory.d.ts.map +1 -0
  39. package/src/agents/agent-memory.js +349 -0
  40. package/src/agents/agent-memory.js.map +1 -0
  41. package/src/agents/agent-refinements.d.ts +100 -0
  42. package/src/agents/agent-refinements.d.ts.map +1 -0
  43. package/src/agents/agent-refinements.js +569 -0
  44. package/src/agents/agent-refinements.js.map +1 -0
  45. package/src/agents/agent-scope.d.ts +3 -0
  46. package/src/agents/agent-scope.d.ts.map +1 -0
  47. package/src/agents/agent-scope.js +6 -0
  48. package/src/agents/agent-scope.js.map +1 -0
  49. package/src/agents/agent-selection.d.ts +3 -0
  50. package/src/agents/agent-selection.d.ts.map +1 -0
  51. package/src/agents/agent-selection.js +23 -0
  52. package/src/agents/agent-selection.js.map +1 -0
  53. package/src/agents/agent-serializer.d.ts +8 -0
  54. package/src/agents/agent-serializer.d.ts.map +1 -0
  55. package/src/agents/agent-serializer.js +196 -0
  56. package/src/agents/agent-serializer.js.map +1 -0
  57. package/src/agents/agents.d.ts +326 -0
  58. package/src/agents/agents.d.ts.map +1 -0
  59. package/src/agents/agents.js +2639 -0
  60. package/src/agents/agents.js.map +1 -0
  61. package/src/agents/builtin-names.d.ts +2 -0
  62. package/src/agents/builtin-names.d.ts.map +1 -0
  63. package/src/agents/builtin-names.js +17 -0
  64. package/src/agents/builtin-names.js.map +1 -0
  65. package/src/agents/chain-serializer.d.ts +7 -0
  66. package/src/agents/chain-serializer.d.ts.map +1 -0
  67. package/src/agents/chain-serializer.js +319 -0
  68. package/src/agents/chain-serializer.js.map +1 -0
  69. package/src/agents/frontmatter.d.ts +16 -0
  70. package/src/agents/frontmatter.d.ts.map +1 -0
  71. package/src/agents/frontmatter.js +142 -0
  72. package/src/agents/frontmatter.js.map +1 -0
  73. package/src/agents/identity.d.ts +8 -0
  74. package/src/agents/identity.d.ts.map +1 -0
  75. package/src/agents/identity.js +30 -0
  76. package/src/agents/identity.js.map +1 -0
  77. package/src/agents/proactive-skills.d.ts +35 -0
  78. package/src/agents/proactive-skills.d.ts.map +1 -0
  79. package/src/agents/proactive-skills.js +154 -0
  80. package/src/agents/proactive-skills.js.map +1 -0
  81. package/src/agents/runtime-agent-events.d.ts +27 -0
  82. package/src/agents/runtime-agent-events.d.ts.map +1 -0
  83. package/src/agents/runtime-agent-events.js +53 -0
  84. package/src/agents/runtime-agent-events.js.map +1 -0
  85. package/src/agents/runtime-agent-registry.d.ts +64 -0
  86. package/src/agents/runtime-agent-registry.d.ts.map +1 -0
  87. package/src/agents/runtime-agent-registry.js +395 -0
  88. package/src/agents/runtime-agent-registry.js.map +1 -0
  89. package/src/agents/skills.d.ts +33 -0
  90. package/src/agents/skills.d.ts.map +1 -0
  91. package/src/agents/skills.js +685 -0
  92. package/src/agents/skills.js.map +1 -0
  93. package/src/api/agents.d.ts +5 -0
  94. package/src/api/agents.d.ts.map +1 -0
  95. package/src/api/agents.js +3 -0
  96. package/src/api/agents.js.map +1 -0
  97. package/src/api/background-work.d.ts +39 -0
  98. package/src/api/background-work.d.ts.map +1 -0
  99. package/src/api/background-work.js +165 -0
  100. package/src/api/background-work.js.map +1 -0
  101. package/src/api/capability-ceiling.d.ts +2 -0
  102. package/src/api/capability-ceiling.d.ts.map +1 -0
  103. package/src/api/capability-ceiling.js +2 -0
  104. package/src/api/capability-ceiling.js.map +1 -0
  105. package/src/api/child-tool-plan.d.ts +2 -0
  106. package/src/api/child-tool-plan.d.ts.map +1 -0
  107. package/src/api/child-tool-plan.js +2 -0
  108. package/src/api/child-tool-plan.js.map +1 -0
  109. package/src/api/control-channel.d.ts +2 -0
  110. package/src/api/control-channel.d.ts.map +1 -0
  111. package/src/api/control-channel.js +2 -0
  112. package/src/api/control-channel.js.map +1 -0
  113. package/src/api/delegation.d.ts +99 -0
  114. package/src/api/delegation.d.ts.map +1 -0
  115. package/src/api/delegation.js +9 -0
  116. package/src/api/delegation.js.map +1 -0
  117. package/src/api/external-job-provider.d.ts +58 -0
  118. package/src/api/external-job-provider.d.ts.map +1 -0
  119. package/src/api/external-job-provider.js +140 -0
  120. package/src/api/external-job-provider.js.map +1 -0
  121. package/src/api/external-runs.d.ts +48 -0
  122. package/src/api/external-runs.d.ts.map +1 -0
  123. package/src/api/external-runs.js +245 -0
  124. package/src/api/external-runs.js.map +1 -0
  125. package/src/api/intercom-bridge.d.ts +2 -0
  126. package/src/api/intercom-bridge.d.ts.map +1 -0
  127. package/src/api/intercom-bridge.js +2 -0
  128. package/src/api/intercom-bridge.js.map +1 -0
  129. package/src/api/preflight.d.ts +173 -0
  130. package/src/api/preflight.d.ts.map +1 -0
  131. package/src/api/preflight.js +362 -0
  132. package/src/api/preflight.js.map +1 -0
  133. package/src/api/project-panes.d.ts +8 -0
  134. package/src/api/project-panes.d.ts.map +1 -0
  135. package/src/api/project-panes.js +8 -0
  136. package/src/api/project-panes.js.map +1 -0
  137. package/src/api/required-child-extensions.d.ts +2 -0
  138. package/src/api/required-child-extensions.d.ts.map +1 -0
  139. package/src/api/required-child-extensions.js +2 -0
  140. package/src/api/required-child-extensions.js.map +1 -0
  141. package/src/api/shared-types.d.ts +2 -0
  142. package/src/api/shared-types.d.ts.map +1 -0
  143. package/src/api/shared-types.js +2 -0
  144. package/src/api/shared-types.js.map +1 -0
  145. package/src/api/workflow-resources.d.ts +3 -0
  146. package/src/api/workflow-resources.d.ts.map +1 -0
  147. package/src/api/workflow-resources.js +2 -0
  148. package/src/api/workflow-resources.js.map +1 -0
  149. package/src/extension/config.d.ts +8 -0
  150. package/src/extension/config.d.ts.map +1 -0
  151. package/src/extension/config.js +245 -0
  152. package/src/extension/config.js.map +1 -0
  153. package/src/extension/control-notices.d.ts +19 -0
  154. package/src/extension/control-notices.d.ts.map +1 -0
  155. package/src/extension/control-notices.js +34 -0
  156. package/src/extension/control-notices.js.map +1 -0
  157. package/src/extension/doctor.d.ts +33 -0
  158. package/src/extension/doctor.d.ts.map +1 -0
  159. package/src/extension/doctor.js +231 -0
  160. package/src/extension/doctor.js.map +1 -0
  161. package/src/extension/fanout-child.d.ts +7 -0
  162. package/src/extension/fanout-child.d.ts.map +1 -0
  163. package/src/extension/fanout-child.js +261 -0
  164. package/src/extension/fanout-child.js.map +1 -0
  165. package/src/extension/herdr-pi-bridge.d.ts +17 -0
  166. package/src/extension/herdr-pi-bridge.d.ts.map +1 -0
  167. package/src/extension/herdr-pi-bridge.js +243 -0
  168. package/src/extension/herdr-pi-bridge.js.map +1 -0
  169. package/src/extension/index.d.ts +20 -0
  170. package/src/extension/index.d.ts.map +1 -0
  171. package/src/extension/index.js +1108 -0
  172. package/src/extension/index.js.map +1 -0
  173. package/src/extension/public-execution.d.ts +62 -0
  174. package/src/extension/public-execution.d.ts.map +1 -0
  175. package/src/extension/public-execution.js +174 -0
  176. package/src/extension/public-execution.js.map +1 -0
  177. package/src/extension/rpc.d.ts +83 -0
  178. package/src/extension/rpc.d.ts.map +1 -0
  179. package/src/extension/rpc.js +687 -0
  180. package/src/extension/rpc.js.map +1 -0
  181. package/src/extension/schemas.d.ts +252 -0
  182. package/src/extension/schemas.d.ts.map +1 -0
  183. package/src/extension/schemas.js +396 -0
  184. package/src/extension/schemas.js.map +1 -0
  185. package/src/extension/steering-notices.d.ts +15 -0
  186. package/src/extension/steering-notices.d.ts.map +1 -0
  187. package/src/extension/steering-notices.js +23 -0
  188. package/src/extension/steering-notices.js.map +1 -0
  189. package/src/extension/subagent-guide.d.ts +4 -0
  190. package/src/extension/subagent-guide.d.ts.map +1 -0
  191. package/src/extension/subagent-guide.js +35 -0
  192. package/src/extension/subagent-guide.js.map +1 -0
  193. package/src/extension/tool-description.d.ts +20 -0
  194. package/src/extension/tool-description.d.ts.map +1 -0
  195. package/src/extension/tool-description.js +160 -0
  196. package/src/extension/tool-description.js.map +1 -0
  197. package/src/extension/tool-result.d.ts +10 -0
  198. package/src/extension/tool-result.d.ts.map +1 -0
  199. package/src/extension/tool-result.js +17 -0
  200. package/src/extension/tool-result.js.map +1 -0
  201. package/src/inspectors/actions.d.ts +23 -0
  202. package/src/inspectors/actions.d.ts.map +1 -0
  203. package/src/inspectors/actions.js +155 -0
  204. package/src/inspectors/actions.js.map +1 -0
  205. package/src/inspectors/ghostty/actions.d.ts +12 -0
  206. package/src/inspectors/ghostty/actions.d.ts.map +1 -0
  207. package/src/inspectors/ghostty/actions.js +63 -0
  208. package/src/inspectors/ghostty/actions.js.map +1 -0
  209. package/src/inspectors/ghostty/plugin.d.ts +8 -0
  210. package/src/inspectors/ghostty/plugin.d.ts.map +1 -0
  211. package/src/inspectors/ghostty/plugin.js +24 -0
  212. package/src/inspectors/ghostty/plugin.js.map +1 -0
  213. package/src/inspectors/herdr/actions.d.ts +26 -0
  214. package/src/inspectors/herdr/actions.d.ts.map +1 -0
  215. package/src/inspectors/herdr/actions.js +134 -0
  216. package/src/inspectors/herdr/actions.js.map +1 -0
  217. package/src/inspectors/herdr/client.d.ts +42 -0
  218. package/src/inspectors/herdr/client.d.ts.map +1 -0
  219. package/src/inspectors/herdr/client.js +130 -0
  220. package/src/inspectors/herdr/client.js.map +1 -0
  221. package/src/inspectors/herdr/focus.d.ts +25 -0
  222. package/src/inspectors/herdr/focus.d.ts.map +1 -0
  223. package/src/inspectors/herdr/focus.js +50 -0
  224. package/src/inspectors/herdr/focus.js.map +1 -0
  225. package/src/inspectors/herdr/plugin.d.ts +7 -0
  226. package/src/inspectors/herdr/plugin.d.ts.map +1 -0
  227. package/src/inspectors/herdr/plugin.js +15 -0
  228. package/src/inspectors/herdr/plugin.js.map +1 -0
  229. package/src/inspectors/herdr/project-panes.d.ts +137 -0
  230. package/src/inspectors/herdr/project-panes.d.ts.map +1 -0
  231. package/src/inspectors/herdr/project-panes.js +608 -0
  232. package/src/inspectors/herdr/project-panes.js.map +1 -0
  233. package/src/inspectors/inspector-runner.d.ts +24 -0
  234. package/src/inspectors/inspector-runner.d.ts.map +1 -0
  235. package/src/inspectors/inspector-runner.js +162 -0
  236. package/src/inspectors/inspector-runner.js.map +1 -0
  237. package/src/inspectors/plugins.d.ts +4 -0
  238. package/src/inspectors/plugins.d.ts.map +1 -0
  239. package/src/inspectors/plugins.js +7 -0
  240. package/src/inspectors/plugins.js.map +1 -0
  241. package/src/inspectors/session-roots-codec.d.ts +16 -0
  242. package/src/inspectors/session-roots-codec.d.ts.map +1 -0
  243. package/src/inspectors/session-roots-codec.js +33 -0
  244. package/src/inspectors/session-roots-codec.js.map +1 -0
  245. package/src/inspectors/shell-command.d.ts +2 -0
  246. package/src/inspectors/shell-command.d.ts.map +1 -0
  247. package/src/inspectors/shell-command.js +17 -0
  248. package/src/inspectors/shell-command.js.map +1 -0
  249. package/src/inspectors/types.d.ts +49 -0
  250. package/src/inspectors/types.d.ts.map +1 -0
  251. package/src/inspectors/types.js +2 -0
  252. package/src/inspectors/types.js.map +1 -0
  253. package/src/integrations/herdr-status.d.ts +46 -0
  254. package/src/integrations/herdr-status.d.ts.map +1 -0
  255. package/src/integrations/herdr-status.js +371 -0
  256. package/src/integrations/herdr-status.js.map +1 -0
  257. package/src/integrations/pi-web-session-liveness.d.ts +20 -0
  258. package/src/integrations/pi-web-session-liveness.d.ts.map +1 -0
  259. package/src/integrations/pi-web-session-liveness.js +54 -0
  260. package/src/integrations/pi-web-session-liveness.js.map +1 -0
  261. package/src/intercom/intercom-bridge.d.ts +59 -0
  262. package/src/intercom/intercom-bridge.d.ts.map +1 -0
  263. package/src/intercom/intercom-bridge.js +192 -0
  264. package/src/intercom/intercom-bridge.js.map +1 -0
  265. package/src/intercom/native-supervisor-channel.d.ts +64 -0
  266. package/src/intercom/native-supervisor-channel.d.ts.map +1 -0
  267. package/src/intercom/native-supervisor-channel.js +894 -0
  268. package/src/intercom/native-supervisor-channel.js.map +1 -0
  269. package/src/intercom/result-intercom.d.ts +36 -0
  270. package/src/intercom/result-intercom.d.ts.map +1 -0
  271. package/src/intercom/result-intercom.js +372 -0
  272. package/src/intercom/result-intercom.js.map +1 -0
  273. package/src/intercom/supervisor-ui.d.ts +40 -0
  274. package/src/intercom/supervisor-ui.d.ts.map +1 -0
  275. package/src/intercom/supervisor-ui.js +202 -0
  276. package/src/intercom/supervisor-ui.js.map +1 -0
  277. package/src/missions/actions.d.ts +55 -0
  278. package/src/missions/actions.d.ts.map +1 -0
  279. package/src/missions/actions.js +396 -0
  280. package/src/missions/actions.js.map +1 -0
  281. package/src/missions/goal-driver.d.ts +16 -0
  282. package/src/missions/goal-driver.d.ts.map +1 -0
  283. package/src/missions/goal-driver.js +157 -0
  284. package/src/missions/goal-driver.js.map +1 -0
  285. package/src/missions/lifecycle.d.ts +40 -0
  286. package/src/missions/lifecycle.d.ts.map +1 -0
  287. package/src/missions/lifecycle.js +352 -0
  288. package/src/missions/lifecycle.js.map +1 -0
  289. package/src/missions/store.d.ts +22 -0
  290. package/src/missions/store.d.ts.map +1 -0
  291. package/src/missions/store.js +573 -0
  292. package/src/missions/store.js.map +1 -0
  293. package/src/missions/types.d.ts +168 -0
  294. package/src/missions/types.d.ts.map +1 -0
  295. package/src/missions/types.js +10 -0
  296. package/src/missions/types.js.map +1 -0
  297. package/src/missions/workflow-state.d.ts +15 -0
  298. package/src/missions/workflow-state.d.ts.map +1 -0
  299. package/src/missions/workflow-state.js +274 -0
  300. package/src/missions/workflow-state.js.map +1 -0
  301. package/src/policy/authority.d.ts +10 -0
  302. package/src/policy/authority.d.ts.map +1 -0
  303. package/src/policy/authority.js +42 -0
  304. package/src/policy/authority.js.map +1 -0
  305. package/src/profiles/profiles.d.ts +135 -0
  306. package/src/profiles/profiles.d.ts.map +1 -0
  307. package/src/profiles/profiles.js +520 -0
  308. package/src/profiles/profiles.js.map +1 -0
  309. package/src/runs/background/active-async-capacity.d.ts +100 -0
  310. package/src/runs/background/active-async-capacity.d.ts.map +1 -0
  311. package/src/runs/background/active-async-capacity.js +492 -0
  312. package/src/runs/background/active-async-capacity.js.map +1 -0
  313. package/src/runs/background/active-run-index.d.ts +13 -0
  314. package/src/runs/background/active-run-index.d.ts.map +1 -0
  315. package/src/runs/background/active-run-index.js +158 -0
  316. package/src/runs/background/active-run-index.js.map +1 -0
  317. package/src/runs/background/async-execution.d.ts +274 -0
  318. package/src/runs/background/async-execution.d.ts.map +1 -0
  319. package/src/runs/background/async-execution.js +1955 -0
  320. package/src/runs/background/async-execution.js.map +1 -0
  321. package/src/runs/background/async-job-tracker.d.ts +28 -0
  322. package/src/runs/background/async-job-tracker.d.ts.map +1 -0
  323. package/src/runs/background/async-job-tracker.js +876 -0
  324. package/src/runs/background/async-job-tracker.js.map +1 -0
  325. package/src/runs/background/async-resume.d.ts +59 -0
  326. package/src/runs/background/async-resume.d.ts.map +1 -0
  327. package/src/runs/background/async-resume.js +667 -0
  328. package/src/runs/background/async-resume.js.map +1 -0
  329. package/src/runs/background/async-retention.d.ts +45 -0
  330. package/src/runs/background/async-retention.d.ts.map +1 -0
  331. package/src/runs/background/async-retention.js +884 -0
  332. package/src/runs/background/async-retention.js.map +1 -0
  333. package/src/runs/background/async-status-snapshot.d.ts +10 -0
  334. package/src/runs/background/async-status-snapshot.d.ts.map +1 -0
  335. package/src/runs/background/async-status-snapshot.js +25 -0
  336. package/src/runs/background/async-status-snapshot.js.map +1 -0
  337. package/src/runs/background/async-status.d.ts +169 -0
  338. package/src/runs/background/async-status.d.ts.map +1 -0
  339. package/src/runs/background/async-status.js +673 -0
  340. package/src/runs/background/async-status.js.map +1 -0
  341. package/src/runs/background/auto-drain.d.ts +17 -0
  342. package/src/runs/background/auto-drain.d.ts.map +1 -0
  343. package/src/runs/background/auto-drain.js +73 -0
  344. package/src/runs/background/auto-drain.js.map +1 -0
  345. package/src/runs/background/binary-bootstrap.d.ts +9 -0
  346. package/src/runs/background/binary-bootstrap.d.ts.map +1 -0
  347. package/src/runs/background/binary-bootstrap.js +41 -0
  348. package/src/runs/background/binary-bootstrap.js.map +1 -0
  349. package/src/runs/background/chain-append.d.ts +35 -0
  350. package/src/runs/background/chain-append.d.ts.map +1 -0
  351. package/src/runs/background/chain-append.js +300 -0
  352. package/src/runs/background/chain-append.js.map +1 -0
  353. package/src/runs/background/chain-root-attachment.d.ts +49 -0
  354. package/src/runs/background/chain-root-attachment.d.ts.map +1 -0
  355. package/src/runs/background/chain-root-attachment.js +184 -0
  356. package/src/runs/background/chain-root-attachment.js.map +1 -0
  357. package/src/runs/background/completion-batcher.d.ts +52 -0
  358. package/src/runs/background/completion-batcher.d.ts.map +1 -0
  359. package/src/runs/background/completion-batcher.js +120 -0
  360. package/src/runs/background/completion-batcher.js.map +1 -0
  361. package/src/runs/background/completion-dedupe.d.ts +14 -0
  362. package/src/runs/background/completion-dedupe.d.ts.map +1 -0
  363. package/src/runs/background/completion-dedupe.js +49 -0
  364. package/src/runs/background/completion-dedupe.js.map +1 -0
  365. package/src/runs/background/completion-replay.d.ts +48 -0
  366. package/src/runs/background/completion-replay.d.ts.map +1 -0
  367. package/src/runs/background/completion-replay.js +267 -0
  368. package/src/runs/background/completion-replay.js.map +1 -0
  369. package/src/runs/background/control-channel.d.ts +156 -0
  370. package/src/runs/background/control-channel.d.ts.map +1 -0
  371. package/src/runs/background/control-channel.js +521 -0
  372. package/src/runs/background/control-channel.js.map +1 -0
  373. package/src/runs/background/fleet-view.d.ts +64 -0
  374. package/src/runs/background/fleet-view.d.ts.map +1 -0
  375. package/src/runs/background/fleet-view.js +648 -0
  376. package/src/runs/background/fleet-view.js.map +1 -0
  377. package/src/runs/background/index-segment.d.ts +16 -0
  378. package/src/runs/background/index-segment.d.ts.map +1 -0
  379. package/src/runs/background/index-segment.js +59 -0
  380. package/src/runs/background/index-segment.js.map +1 -0
  381. package/src/runs/background/inspect-rpc.d.ts +60 -0
  382. package/src/runs/background/inspect-rpc.d.ts.map +1 -0
  383. package/src/runs/background/inspect-rpc.js +406 -0
  384. package/src/runs/background/inspect-rpc.js.map +1 -0
  385. package/src/runs/background/notify.d.ts +162 -0
  386. package/src/runs/background/notify.d.ts.map +1 -0
  387. package/src/runs/background/notify.js +665 -0
  388. package/src/runs/background/notify.js.map +1 -0
  389. package/src/runs/background/owned-process-tree.d.ts +11 -0
  390. package/src/runs/background/owned-process-tree.d.ts.map +1 -0
  391. package/src/runs/background/owned-process-tree.js +117 -0
  392. package/src/runs/background/owned-process-tree.js.map +1 -0
  393. package/src/runs/background/parallel-groups.d.ts +4 -0
  394. package/src/runs/background/parallel-groups.d.ts.map +1 -0
  395. package/src/runs/background/parallel-groups.js +47 -0
  396. package/src/runs/background/parallel-groups.js.map +1 -0
  397. package/src/runs/background/process-terminal.d.ts +34 -0
  398. package/src/runs/background/process-terminal.d.ts.map +1 -0
  399. package/src/runs/background/process-terminal.js +305 -0
  400. package/src/runs/background/process-terminal.js.map +1 -0
  401. package/src/runs/background/result-delivery-ownership.d.ts +11 -0
  402. package/src/runs/background/result-delivery-ownership.d.ts.map +1 -0
  403. package/src/runs/background/result-delivery-ownership.js +37 -0
  404. package/src/runs/background/result-delivery-ownership.js.map +1 -0
  405. package/src/runs/background/result-files.d.ts +33 -0
  406. package/src/runs/background/result-files.d.ts.map +1 -0
  407. package/src/runs/background/result-files.js +528 -0
  408. package/src/runs/background/result-files.js.map +1 -0
  409. package/src/runs/background/result-watcher.d.ts +87 -0
  410. package/src/runs/background/result-watcher.d.ts.map +1 -0
  411. package/src/runs/background/result-watcher.js +764 -0
  412. package/src/runs/background/result-watcher.js.map +1 -0
  413. package/src/runs/background/resume-guidance.d.ts +5 -0
  414. package/src/runs/background/resume-guidance.d.ts.map +1 -0
  415. package/src/runs/background/resume-guidance.js +57 -0
  416. package/src/runs/background/resume-guidance.js.map +1 -0
  417. package/src/runs/background/retained-children.d.ts +25 -0
  418. package/src/runs/background/retained-children.d.ts.map +1 -0
  419. package/src/runs/background/retained-children.js +128 -0
  420. package/src/runs/background/retained-children.js.map +1 -0
  421. package/src/runs/background/retained-nested-route-tracker.d.ts +13 -0
  422. package/src/runs/background/retained-nested-route-tracker.d.ts.map +1 -0
  423. package/src/runs/background/retained-nested-route-tracker.js +91 -0
  424. package/src/runs/background/retained-nested-route-tracker.js.map +1 -0
  425. package/src/runs/background/run-child-session.d.ts +123 -0
  426. package/src/runs/background/run-child-session.d.ts.map +1 -0
  427. package/src/runs/background/run-child-session.js +602 -0
  428. package/src/runs/background/run-child-session.js.map +1 -0
  429. package/src/runs/background/run-id-query.d.ts +4 -0
  430. package/src/runs/background/run-id-query.d.ts.map +1 -0
  431. package/src/runs/background/run-id-query.js +7 -0
  432. package/src/runs/background/run-id-query.js.map +1 -0
  433. package/src/runs/background/run-id-resolver.d.ts +23 -0
  434. package/src/runs/background/run-id-resolver.d.ts.map +1 -0
  435. package/src/runs/background/run-id-resolver.js +170 -0
  436. package/src/runs/background/run-id-resolver.js.map +1 -0
  437. package/src/runs/background/run-status.d.ts +26 -0
  438. package/src/runs/background/run-status.d.ts.map +1 -0
  439. package/src/runs/background/run-status.js +828 -0
  440. package/src/runs/background/run-status.js.map +1 -0
  441. package/src/runs/background/runner-aliases.d.ts +17 -0
  442. package/src/runs/background/runner-aliases.d.ts.map +1 -0
  443. package/src/runs/background/runner-aliases.js +152 -0
  444. package/src/runs/background/runner-aliases.js.map +1 -0
  445. package/src/runs/background/runner-child-launch.d.ts +24 -0
  446. package/src/runs/background/runner-child-launch.d.ts.map +1 -0
  447. package/src/runs/background/runner-child-launch.js +68 -0
  448. package/src/runs/background/runner-child-launch.js.map +1 -0
  449. package/src/runs/background/runner-child-sessions.d.ts +7 -0
  450. package/src/runs/background/runner-child-sessions.d.ts.map +1 -0
  451. package/src/runs/background/runner-child-sessions.js +35 -0
  452. package/src/runs/background/runner-child-sessions.js.map +1 -0
  453. package/src/runs/background/runner-http-dispatcher.d.ts +43 -0
  454. package/src/runs/background/runner-http-dispatcher.d.ts.map +1 -0
  455. package/src/runs/background/runner-http-dispatcher.js +114 -0
  456. package/src/runs/background/runner-http-dispatcher.js.map +1 -0
  457. package/src/runs/background/scheduled-runs.d.ts +116 -0
  458. package/src/runs/background/scheduled-runs.d.ts.map +1 -0
  459. package/src/runs/background/scheduled-runs.js +1024 -0
  460. package/src/runs/background/scheduled-runs.js.map +1 -0
  461. package/src/runs/background/stale-run-reconciler.d.ts +37 -0
  462. package/src/runs/background/stale-run-reconciler.d.ts.map +1 -0
  463. package/src/runs/background/stale-run-reconciler.js +393 -0
  464. package/src/runs/background/stale-run-reconciler.js.map +1 -0
  465. package/src/runs/background/steering.d.ts +52 -0
  466. package/src/runs/background/steering.d.ts.map +1 -0
  467. package/src/runs/background/steering.js +247 -0
  468. package/src/runs/background/steering.js.map +1 -0
  469. package/src/runs/background/subagent-runner.d.ts +197 -0
  470. package/src/runs/background/subagent-runner.d.ts.map +1 -0
  471. package/src/runs/background/subagent-runner.js +5052 -0
  472. package/src/runs/background/subagent-runner.js.map +1 -0
  473. package/src/runs/background/subagent-wait.d.ts +122 -0
  474. package/src/runs/background/subagent-wait.d.ts.map +1 -0
  475. package/src/runs/background/subagent-wait.js +735 -0
  476. package/src/runs/background/subagent-wait.js.map +1 -0
  477. package/src/runs/background/terminal-run-index.d.ts +8 -0
  478. package/src/runs/background/terminal-run-index.d.ts.map +1 -0
  479. package/src/runs/background/terminal-run-index.js +123 -0
  480. package/src/runs/background/terminal-run-index.js.map +1 -0
  481. package/src/runs/background/top-level-async.d.ts +8 -0
  482. package/src/runs/background/top-level-async.d.ts.map +1 -0
  483. package/src/runs/background/top-level-async.js +6 -0
  484. package/src/runs/background/top-level-async.js.map +1 -0
  485. package/src/runs/background/wait-completions.d.ts +29 -0
  486. package/src/runs/background/wait-completions.d.ts.map +1 -0
  487. package/src/runs/background/wait-completions.js +264 -0
  488. package/src/runs/background/wait-completions.js.map +1 -0
  489. package/src/runs/background/wait-config.d.ts +9 -0
  490. package/src/runs/background/wait-config.d.ts.map +1 -0
  491. package/src/runs/background/wait-config.js +47 -0
  492. package/src/runs/background/wait-config.js.map +1 -0
  493. package/src/runs/background/wait-subscriptions.d.ts +27 -0
  494. package/src/runs/background/wait-subscriptions.d.ts.map +1 -0
  495. package/src/runs/background/wait-subscriptions.js +337 -0
  496. package/src/runs/background/wait-subscriptions.js.map +1 -0
  497. package/src/runs/background/wait-tool.d.ts +7 -0
  498. package/src/runs/background/wait-tool.d.ts.map +1 -0
  499. package/src/runs/background/wait-tool.js +36 -0
  500. package/src/runs/background/wait-tool.js.map +1 -0
  501. package/src/runs/foreground/async-dismiss-action.d.ts +7 -0
  502. package/src/runs/foreground/async-dismiss-action.d.ts.map +1 -0
  503. package/src/runs/foreground/async-dismiss-action.js +82 -0
  504. package/src/runs/foreground/async-dismiss-action.js.map +1 -0
  505. package/src/runs/foreground/async-steering-action.d.ts +32 -0
  506. package/src/runs/foreground/async-steering-action.d.ts.map +1 -0
  507. package/src/runs/foreground/async-steering-action.js +270 -0
  508. package/src/runs/foreground/async-steering-action.js.map +1 -0
  509. package/src/runs/foreground/async-stop-action.d.ts +7 -0
  510. package/src/runs/foreground/async-stop-action.d.ts.map +1 -0
  511. package/src/runs/foreground/async-stop-action.js +171 -0
  512. package/src/runs/foreground/async-stop-action.js.map +1 -0
  513. package/src/runs/foreground/execution.d.ts +11 -0
  514. package/src/runs/foreground/execution.d.ts.map +1 -0
  515. package/src/runs/foreground/execution.js +2089 -0
  516. package/src/runs/foreground/execution.js.map +1 -0
  517. package/src/runs/foreground/foreground-control.d.ts +25 -0
  518. package/src/runs/foreground/foreground-control.d.ts.map +1 -0
  519. package/src/runs/foreground/foreground-control.js +139 -0
  520. package/src/runs/foreground/foreground-control.js.map +1 -0
  521. package/src/runs/foreground/foreground-history.d.ts +12 -0
  522. package/src/runs/foreground/foreground-history.d.ts.map +1 -0
  523. package/src/runs/foreground/foreground-history.js +165 -0
  524. package/src/runs/foreground/foreground-history.js.map +1 -0
  525. package/src/runs/foreground/prompt-audit.d.ts +33 -0
  526. package/src/runs/foreground/prompt-audit.d.ts.map +1 -0
  527. package/src/runs/foreground/prompt-audit.js +143 -0
  528. package/src/runs/foreground/prompt-audit.js.map +1 -0
  529. package/src/runs/foreground/subagent-executor.d.ts +296 -0
  530. package/src/runs/foreground/subagent-executor.d.ts.map +1 -0
  531. package/src/runs/foreground/subagent-executor.js +7045 -0
  532. package/src/runs/foreground/subagent-executor.js.map +1 -0
  533. package/src/runs/foreground/workflow-detach-reconcile.d.ts +16 -0
  534. package/src/runs/foreground/workflow-detach-reconcile.d.ts.map +1 -0
  535. package/src/runs/foreground/workflow-detach-reconcile.js +284 -0
  536. package/src/runs/foreground/workflow-detach-reconcile.js.map +1 -0
  537. package/src/runs/foreground/workflow-foreground-steering.d.ts +44 -0
  538. package/src/runs/foreground/workflow-foreground-steering.d.ts.map +1 -0
  539. package/src/runs/foreground/workflow-foreground-steering.js +149 -0
  540. package/src/runs/foreground/workflow-foreground-steering.js.map +1 -0
  541. package/src/runs/shared/abort-recovery.d.ts +27 -0
  542. package/src/runs/shared/abort-recovery.d.ts.map +1 -0
  543. package/src/runs/shared/abort-recovery.js +109 -0
  544. package/src/runs/shared/abort-recovery.js.map +1 -0
  545. package/src/runs/shared/acceptance.d.ts +145 -0
  546. package/src/runs/shared/acceptance.d.ts.map +1 -0
  547. package/src/runs/shared/acceptance.js +1617 -0
  548. package/src/runs/shared/acceptance.js.map +1 -0
  549. package/src/runs/shared/agent-contract.d.ts +6 -0
  550. package/src/runs/shared/agent-contract.d.ts.map +1 -0
  551. package/src/runs/shared/agent-contract.js +36 -0
  552. package/src/runs/shared/agent-contract.js.map +1 -0
  553. package/src/runs/shared/async-status-projection.d.ts +94 -0
  554. package/src/runs/shared/async-status-projection.d.ts.map +1 -0
  555. package/src/runs/shared/async-status-projection.js +542 -0
  556. package/src/runs/shared/async-status-projection.js.map +1 -0
  557. package/src/runs/shared/background-process-options.d.ts +5 -0
  558. package/src/runs/shared/background-process-options.d.ts.map +1 -0
  559. package/src/runs/shared/background-process-options.js +7 -0
  560. package/src/runs/shared/background-process-options.js.map +1 -0
  561. package/src/runs/shared/capability-ceiling.d.ts +58 -0
  562. package/src/runs/shared/capability-ceiling.d.ts.map +1 -0
  563. package/src/runs/shared/capability-ceiling.js +179 -0
  564. package/src/runs/shared/capability-ceiling.js.map +1 -0
  565. package/src/runs/shared/chain-outputs.d.ts +19 -0
  566. package/src/runs/shared/chain-outputs.d.ts.map +1 -0
  567. package/src/runs/shared/chain-outputs.js +105 -0
  568. package/src/runs/shared/chain-outputs.js.map +1 -0
  569. package/src/runs/shared/child-hooks.d.ts +32 -0
  570. package/src/runs/shared/child-hooks.d.ts.map +1 -0
  571. package/src/runs/shared/child-hooks.js +173 -0
  572. package/src/runs/shared/child-hooks.js.map +1 -0
  573. package/src/runs/shared/child-identity.d.ts +24 -0
  574. package/src/runs/shared/child-identity.d.ts.map +1 -0
  575. package/src/runs/shared/child-identity.js +41 -0
  576. package/src/runs/shared/child-identity.js.map +1 -0
  577. package/src/runs/shared/child-launch-plan.d.ts +71 -0
  578. package/src/runs/shared/child-launch-plan.d.ts.map +1 -0
  579. package/src/runs/shared/child-launch-plan.js +89 -0
  580. package/src/runs/shared/child-launch-plan.js.map +1 -0
  581. package/src/runs/shared/child-launch.d.ts +112 -0
  582. package/src/runs/shared/child-launch.d.ts.map +1 -0
  583. package/src/runs/shared/child-launch.js +230 -0
  584. package/src/runs/shared/child-launch.js.map +1 -0
  585. package/src/runs/shared/child-lifecycle.d.ts +14 -0
  586. package/src/runs/shared/child-lifecycle.d.ts.map +1 -0
  587. package/src/runs/shared/child-lifecycle.js +23 -0
  588. package/src/runs/shared/child-lifecycle.js.map +1 -0
  589. package/src/runs/shared/child-runtime-config.d.ts +102 -0
  590. package/src/runs/shared/child-runtime-config.d.ts.map +1 -0
  591. package/src/runs/shared/child-runtime-config.js +39 -0
  592. package/src/runs/shared/child-runtime-config.js.map +1 -0
  593. package/src/runs/shared/child-session.d.ts +154 -0
  594. package/src/runs/shared/child-session.d.ts.map +1 -0
  595. package/src/runs/shared/child-session.js +412 -0
  596. package/src/runs/shared/child-session.js.map +1 -0
  597. package/src/runs/shared/child-tool-plan.d.ts +73 -0
  598. package/src/runs/shared/child-tool-plan.d.ts.map +1 -0
  599. package/src/runs/shared/child-tool-plan.js +380 -0
  600. package/src/runs/shared/child-tool-plan.js.map +1 -0
  601. package/src/runs/shared/claude-code-adapter.d.ts +25 -0
  602. package/src/runs/shared/claude-code-adapter.d.ts.map +1 -0
  603. package/src/runs/shared/claude-code-adapter.js +120 -0
  604. package/src/runs/shared/claude-code-adapter.js.map +1 -0
  605. package/src/runs/shared/codex-exec-adapter.d.ts +26 -0
  606. package/src/runs/shared/codex-exec-adapter.d.ts.map +1 -0
  607. package/src/runs/shared/codex-exec-adapter.js +128 -0
  608. package/src/runs/shared/codex-exec-adapter.js.map +1 -0
  609. package/src/runs/shared/context-mode.d.ts +13 -0
  610. package/src/runs/shared/context-mode.d.ts.map +1 -0
  611. package/src/runs/shared/context-mode.js +39 -0
  612. package/src/runs/shared/context-mode.js.map +1 -0
  613. package/src/runs/shared/cursor-agent-adapter.d.ts +27 -0
  614. package/src/runs/shared/cursor-agent-adapter.d.ts.map +1 -0
  615. package/src/runs/shared/cursor-agent-adapter.js +100 -0
  616. package/src/runs/shared/cursor-agent-adapter.js.map +1 -0
  617. package/src/runs/shared/dynamic-fanout.d.ts +50 -0
  618. package/src/runs/shared/dynamic-fanout.d.ts.map +1 -0
  619. package/src/runs/shared/dynamic-fanout.js +274 -0
  620. package/src/runs/shared/dynamic-fanout.js.map +1 -0
  621. package/src/runs/shared/effective-system-prompt.d.ts +18 -0
  622. package/src/runs/shared/effective-system-prompt.d.ts.map +1 -0
  623. package/src/runs/shared/effective-system-prompt.js +23 -0
  624. package/src/runs/shared/effective-system-prompt.js.map +1 -0
  625. package/src/runs/shared/extension-bindings.d.ts +17 -0
  626. package/src/runs/shared/extension-bindings.d.ts.map +1 -0
  627. package/src/runs/shared/extension-bindings.js +83 -0
  628. package/src/runs/shared/extension-bindings.js.map +1 -0
  629. package/src/runs/shared/external-cli-contract.d.ts +30 -0
  630. package/src/runs/shared/external-cli-contract.d.ts.map +1 -0
  631. package/src/runs/shared/external-cli-contract.js +146 -0
  632. package/src/runs/shared/external-cli-contract.js.map +1 -0
  633. package/src/runs/shared/external-cli-preflight.d.ts +32 -0
  634. package/src/runs/shared/external-cli-preflight.d.ts.map +1 -0
  635. package/src/runs/shared/external-cli-preflight.js +116 -0
  636. package/src/runs/shared/external-cli-preflight.js.map +1 -0
  637. package/src/runs/shared/external-cli-runner.d.ts +66 -0
  638. package/src/runs/shared/external-cli-runner.d.ts.map +1 -0
  639. package/src/runs/shared/external-cli-runner.js +421 -0
  640. package/src/runs/shared/external-cli-runner.js.map +1 -0
  641. package/src/runs/shared/external-job-bridge.d.ts +18 -0
  642. package/src/runs/shared/external-job-bridge.d.ts.map +1 -0
  643. package/src/runs/shared/external-job-bridge.js +424 -0
  644. package/src/runs/shared/external-job-bridge.js.map +1 -0
  645. package/src/runs/shared/external-job-runner.d.ts +45 -0
  646. package/src/runs/shared/external-job-runner.d.ts.map +1 -0
  647. package/src/runs/shared/external-job-runner.js +353 -0
  648. package/src/runs/shared/external-job-runner.js.map +1 -0
  649. package/src/runs/shared/fast-mode-extension.d.ts +4 -0
  650. package/src/runs/shared/fast-mode-extension.d.ts.map +1 -0
  651. package/src/runs/shared/fast-mode-extension.js +9 -0
  652. package/src/runs/shared/fast-mode-extension.js.map +1 -0
  653. package/src/runs/shared/herdr-connection.d.ts +71 -0
  654. package/src/runs/shared/herdr-connection.d.ts.map +1 -0
  655. package/src/runs/shared/herdr-connection.js +258 -0
  656. package/src/runs/shared/herdr-connection.js.map +1 -0
  657. package/src/runs/shared/herdr-external-adapters.d.ts +148 -0
  658. package/src/runs/shared/herdr-external-adapters.d.ts.map +1 -0
  659. package/src/runs/shared/herdr-external-adapters.js +405 -0
  660. package/src/runs/shared/herdr-external-adapters.js.map +1 -0
  661. package/src/runs/shared/herdr-machine.d.ts +48 -0
  662. package/src/runs/shared/herdr-machine.d.ts.map +1 -0
  663. package/src/runs/shared/herdr-machine.js +247 -0
  664. package/src/runs/shared/herdr-machine.js.map +1 -0
  665. package/src/runs/shared/herdr-pi-protocol.d.ts +22 -0
  666. package/src/runs/shared/herdr-pi-protocol.d.ts.map +1 -0
  667. package/src/runs/shared/herdr-pi-protocol.js +58 -0
  668. package/src/runs/shared/herdr-pi-protocol.js.map +1 -0
  669. package/src/runs/shared/herdr-placed-run.d.ts +267 -0
  670. package/src/runs/shared/herdr-placed-run.d.ts.map +1 -0
  671. package/src/runs/shared/herdr-placed-run.js +716 -0
  672. package/src/runs/shared/herdr-placed-run.js.map +1 -0
  673. package/src/runs/shared/host-step-status.d.ts +34 -0
  674. package/src/runs/shared/host-step-status.d.ts.map +1 -0
  675. package/src/runs/shared/host-step-status.js +245 -0
  676. package/src/runs/shared/host-step-status.js.map +1 -0
  677. package/src/runs/shared/lane-metadata.d.ts +24 -0
  678. package/src/runs/shared/lane-metadata.d.ts.map +1 -0
  679. package/src/runs/shared/lane-metadata.js +127 -0
  680. package/src/runs/shared/lane-metadata.js.map +1 -0
  681. package/src/runs/shared/launch-cwd.d.ts +2 -0
  682. package/src/runs/shared/launch-cwd.d.ts.map +1 -0
  683. package/src/runs/shared/launch-cwd.js +17 -0
  684. package/src/runs/shared/launch-cwd.js.map +1 -0
  685. package/src/runs/shared/long-running-guard.d.ts +33 -0
  686. package/src/runs/shared/long-running-guard.d.ts.map +1 -0
  687. package/src/runs/shared/long-running-guard.js +199 -0
  688. package/src/runs/shared/long-running-guard.js.map +1 -0
  689. package/src/runs/shared/mcp-config-sources.d.ts +30 -0
  690. package/src/runs/shared/mcp-config-sources.d.ts.map +1 -0
  691. package/src/runs/shared/mcp-config-sources.js +419 -0
  692. package/src/runs/shared/mcp-config-sources.js.map +1 -0
  693. package/src/runs/shared/mcp-direct-tool-allowlist.d.ts +59 -0
  694. package/src/runs/shared/mcp-direct-tool-allowlist.d.ts.map +1 -0
  695. package/src/runs/shared/mcp-direct-tool-allowlist.js +400 -0
  696. package/src/runs/shared/mcp-direct-tool-allowlist.js.map +1 -0
  697. package/src/runs/shared/mcp-direct-tool-grant.d.ts +41 -0
  698. package/src/runs/shared/mcp-direct-tool-grant.d.ts.map +1 -0
  699. package/src/runs/shared/mcp-direct-tool-grant.js +146 -0
  700. package/src/runs/shared/mcp-direct-tool-grant.js.map +1 -0
  701. package/src/runs/shared/model-resolution-diagnostic.d.ts +22 -0
  702. package/src/runs/shared/model-resolution-diagnostic.d.ts.map +1 -0
  703. package/src/runs/shared/model-resolution-diagnostic.js +65 -0
  704. package/src/runs/shared/model-resolution-diagnostic.js.map +1 -0
  705. package/src/runs/shared/model-resolution.d.ts +92 -0
  706. package/src/runs/shared/model-resolution.d.ts.map +1 -0
  707. package/src/runs/shared/model-resolution.js +343 -0
  708. package/src/runs/shared/model-resolution.js.map +1 -0
  709. package/src/runs/shared/model-scope.d.ts +68 -0
  710. package/src/runs/shared/model-scope.d.ts.map +1 -0
  711. package/src/runs/shared/model-scope.js +156 -0
  712. package/src/runs/shared/model-scope.js.map +1 -0
  713. package/src/runs/shared/mutation-evidence.d.ts +19 -0
  714. package/src/runs/shared/mutation-evidence.d.ts.map +1 -0
  715. package/src/runs/shared/mutation-evidence.js +199 -0
  716. package/src/runs/shared/mutation-evidence.js.map +1 -0
  717. package/src/runs/shared/nested-events.d.ts +134 -0
  718. package/src/runs/shared/nested-events.d.ts.map +1 -0
  719. package/src/runs/shared/nested-events.js +1056 -0
  720. package/src/runs/shared/nested-events.js.map +1 -0
  721. package/src/runs/shared/nested-path.d.ts +9 -0
  722. package/src/runs/shared/nested-path.d.ts.map +1 -0
  723. package/src/runs/shared/nested-path.js +35 -0
  724. package/src/runs/shared/nested-path.js.map +1 -0
  725. package/src/runs/shared/nested-render.d.ts +21 -0
  726. package/src/runs/shared/nested-render.d.ts.map +1 -0
  727. package/src/runs/shared/nested-render.js +116 -0
  728. package/src/runs/shared/nested-render.js.map +1 -0
  729. package/src/runs/shared/orca-progress-tabs.d.ts +33 -0
  730. package/src/runs/shared/orca-progress-tabs.d.ts.map +1 -0
  731. package/src/runs/shared/orca-progress-tabs.js +527 -0
  732. package/src/runs/shared/orca-progress-tabs.js.map +1 -0
  733. package/src/runs/shared/parallel-handoff.d.ts +73 -0
  734. package/src/runs/shared/parallel-handoff.d.ts.map +1 -0
  735. package/src/runs/shared/parallel-handoff.js +733 -0
  736. package/src/runs/shared/parallel-handoff.js.map +1 -0
  737. package/src/runs/shared/parallel-utils.d.ts +164 -0
  738. package/src/runs/shared/parallel-utils.d.ts.map +1 -0
  739. package/src/runs/shared/parallel-utils.js +126 -0
  740. package/src/runs/shared/parallel-utils.js.map +1 -0
  741. package/src/runs/shared/permissions.d.ts +13 -0
  742. package/src/runs/shared/permissions.d.ts.map +1 -0
  743. package/src/runs/shared/permissions.js +93 -0
  744. package/src/runs/shared/permissions.js.map +1 -0
  745. package/src/runs/shared/pi-spawn.d.ts +28 -0
  746. package/src/runs/shared/pi-spawn.d.ts.map +1 -0
  747. package/src/runs/shared/pi-spawn.js +156 -0
  748. package/src/runs/shared/pi-spawn.js.map +1 -0
  749. package/src/runs/shared/process-signal.d.ts +16 -0
  750. package/src/runs/shared/process-signal.d.ts.map +1 -0
  751. package/src/runs/shared/process-signal.js +22 -0
  752. package/src/runs/shared/process-signal.js.map +1 -0
  753. package/src/runs/shared/readonly-drain-observation.d.ts +26 -0
  754. package/src/runs/shared/readonly-drain-observation.d.ts.map +1 -0
  755. package/src/runs/shared/readonly-drain-observation.js +51 -0
  756. package/src/runs/shared/readonly-drain-observation.js.map +1 -0
  757. package/src/runs/shared/run-fanout-budget.d.ts +15 -0
  758. package/src/runs/shared/run-fanout-budget.d.ts.map +1 -0
  759. package/src/runs/shared/run-fanout-budget.js +259 -0
  760. package/src/runs/shared/run-fanout-budget.js.map +1 -0
  761. package/src/runs/shared/run-history.d.ts +20 -0
  762. package/src/runs/shared/run-history.d.ts.map +1 -0
  763. package/src/runs/shared/run-history.js +200 -0
  764. package/src/runs/shared/run-history.js.map +1 -0
  765. package/src/runs/shared/runtime-acknowledged-extensions.d.ts +8 -0
  766. package/src/runs/shared/runtime-acknowledged-extensions.d.ts.map +1 -0
  767. package/src/runs/shared/runtime-acknowledged-extensions.js +45 -0
  768. package/src/runs/shared/runtime-acknowledged-extensions.js.map +1 -0
  769. package/src/runs/shared/session-lease.d.ts +70 -0
  770. package/src/runs/shared/session-lease.d.ts.map +1 -0
  771. package/src/runs/shared/session-lease.js +251 -0
  772. package/src/runs/shared/session-lease.js.map +1 -0
  773. package/src/runs/shared/single-output.d.ts +61 -0
  774. package/src/runs/shared/single-output.d.ts.map +1 -0
  775. package/src/runs/shared/single-output.js +271 -0
  776. package/src/runs/shared/single-output.js.map +1 -0
  777. package/src/runs/shared/spawn-budget.d.ts +21 -0
  778. package/src/runs/shared/spawn-budget.d.ts.map +1 -0
  779. package/src/runs/shared/spawn-budget.js +94 -0
  780. package/src/runs/shared/spawn-budget.js.map +1 -0
  781. package/src/runs/shared/structured-output.d.ts +57 -0
  782. package/src/runs/shared/structured-output.d.ts.map +1 -0
  783. package/src/runs/shared/structured-output.js +391 -0
  784. package/src/runs/shared/structured-output.js.map +1 -0
  785. package/src/runs/shared/subagent-control.d.ts +50 -0
  786. package/src/runs/shared/subagent-control.d.ts.map +1 -0
  787. package/src/runs/shared/subagent-control.js +234 -0
  788. package/src/runs/shared/subagent-control.js.map +1 -0
  789. package/src/runs/shared/subagent-prompt-runtime.d.ts +28 -0
  790. package/src/runs/shared/subagent-prompt-runtime.d.ts.map +1 -0
  791. package/src/runs/shared/subagent-prompt-runtime.js +548 -0
  792. package/src/runs/shared/subagent-prompt-runtime.js.map +1 -0
  793. package/src/runs/shared/tool-availability.d.ts +17 -0
  794. package/src/runs/shared/tool-availability.d.ts.map +1 -0
  795. package/src/runs/shared/tool-availability.js +30 -0
  796. package/src/runs/shared/tool-availability.js.map +1 -0
  797. package/src/runs/shared/tool-budget.d.ts +22 -0
  798. package/src/runs/shared/tool-budget.d.ts.map +1 -0
  799. package/src/runs/shared/tool-budget.js +79 -0
  800. package/src/runs/shared/tool-budget.js.map +1 -0
  801. package/src/runs/shared/tool-timeout.d.ts +32 -0
  802. package/src/runs/shared/tool-timeout.d.ts.map +1 -0
  803. package/src/runs/shared/tool-timeout.js +74 -0
  804. package/src/runs/shared/tool-timeout.js.map +1 -0
  805. package/src/runs/shared/usage-budget.d.ts +8 -0
  806. package/src/runs/shared/usage-budget.d.ts.map +1 -0
  807. package/src/runs/shared/usage-budget.js +75 -0
  808. package/src/runs/shared/usage-budget.js.map +1 -0
  809. package/src/runs/shared/usage-reconciliation.d.ts +9 -0
  810. package/src/runs/shared/usage-reconciliation.d.ts.map +1 -0
  811. package/src/runs/shared/usage-reconciliation.js +72 -0
  812. package/src/runs/shared/usage-reconciliation.js.map +1 -0
  813. package/src/runs/shared/workflow-async-child-guidance.d.ts +4 -0
  814. package/src/runs/shared/workflow-async-child-guidance.d.ts.map +1 -0
  815. package/src/runs/shared/workflow-async-child-guidance.js +18 -0
  816. package/src/runs/shared/workflow-async-child-guidance.js.map +1 -0
  817. package/src/runs/shared/workflow-graph.d.ts +32 -0
  818. package/src/runs/shared/workflow-graph.d.ts.map +1 -0
  819. package/src/runs/shared/workflow-graph.js +222 -0
  820. package/src/runs/shared/workflow-graph.js.map +1 -0
  821. package/src/runs/shared/worktree-cleanup-plan.d.ts +78 -0
  822. package/src/runs/shared/worktree-cleanup-plan.d.ts.map +1 -0
  823. package/src/runs/shared/worktree-cleanup-plan.js +782 -0
  824. package/src/runs/shared/worktree-cleanup-plan.js.map +1 -0
  825. package/src/runs/shared/worktree-setup-command.d.ts +39 -0
  826. package/src/runs/shared/worktree-setup-command.d.ts.map +1 -0
  827. package/src/runs/shared/worktree-setup-command.js +201 -0
  828. package/src/runs/shared/worktree-setup-command.js.map +1 -0
  829. package/src/runs/shared/worktree.d.ts +179 -0
  830. package/src/runs/shared/worktree.d.ts.map +1 -0
  831. package/src/runs/shared/worktree.js +1333 -0
  832. package/src/runs/shared/worktree.js.map +1 -0
  833. package/src/shared/accessible-dir.d.ts +12 -0
  834. package/src/shared/accessible-dir.d.ts.map +1 -0
  835. package/src/shared/accessible-dir.js +37 -0
  836. package/src/shared/accessible-dir.js.map +1 -0
  837. package/src/shared/agent-stream-options.d.ts +6 -0
  838. package/src/shared/agent-stream-options.d.ts.map +1 -0
  839. package/src/shared/agent-stream-options.js +4 -0
  840. package/src/shared/agent-stream-options.js.map +1 -0
  841. package/src/shared/artifacts.d.ts +23 -0
  842. package/src/shared/artifacts.d.ts.map +1 -0
  843. package/src/shared/artifacts.js +273 -0
  844. package/src/shared/artifacts.js.map +1 -0
  845. package/src/shared/atomic-json.d.ts +19 -0
  846. package/src/shared/atomic-json.d.ts.map +1 -0
  847. package/src/shared/atomic-json.js +60 -0
  848. package/src/shared/atomic-json.js.map +1 -0
  849. package/src/shared/capacity-resilient-json.d.ts +27 -0
  850. package/src/shared/capacity-resilient-json.d.ts.map +1 -0
  851. package/src/shared/capacity-resilient-json.js +87 -0
  852. package/src/shared/capacity-resilient-json.js.map +1 -0
  853. package/src/shared/child-cache-retention.d.ts +30 -0
  854. package/src/shared/child-cache-retention.d.ts.map +1 -0
  855. package/src/shared/child-cache-retention.js +41 -0
  856. package/src/shared/child-cache-retention.js.map +1 -0
  857. package/src/shared/child-session-name.d.ts +9 -0
  858. package/src/shared/child-session-name.d.ts.map +1 -0
  859. package/src/shared/child-session-name.js +39 -0
  860. package/src/shared/child-session-name.js.map +1 -0
  861. package/src/shared/child-transcript.d.ts +38 -0
  862. package/src/shared/child-transcript.d.ts.map +1 -0
  863. package/src/shared/child-transcript.js +226 -0
  864. package/src/shared/child-transcript.js.map +1 -0
  865. package/src/shared/completion-owner.d.ts +3 -0
  866. package/src/shared/completion-owner.d.ts.map +1 -0
  867. package/src/shared/completion-owner.js +9 -0
  868. package/src/shared/completion-owner.js.map +1 -0
  869. package/src/shared/display-text.d.ts +6 -0
  870. package/src/shared/display-text.d.ts.map +1 -0
  871. package/src/shared/display-text.js +155 -0
  872. package/src/shared/display-text.js.map +1 -0
  873. package/src/shared/extension-context.d.ts +6 -0
  874. package/src/shared/extension-context.d.ts.map +1 -0
  875. package/src/shared/extension-context.js +22 -0
  876. package/src/shared/extension-context.js.map +1 -0
  877. package/src/shared/file-coalescer.d.ts +12 -0
  878. package/src/shared/file-coalescer.d.ts.map +1 -0
  879. package/src/shared/file-coalescer.js +35 -0
  880. package/src/shared/file-coalescer.js.map +1 -0
  881. package/src/shared/file-system-retry.d.ts +32 -0
  882. package/src/shared/file-system-retry.d.ts.map +1 -0
  883. package/src/shared/file-system-retry.js +85 -0
  884. package/src/shared/file-system-retry.js.map +1 -0
  885. package/src/shared/fork-context.d.ts +59 -0
  886. package/src/shared/fork-context.d.ts.map +1 -0
  887. package/src/shared/fork-context.js +171 -0
  888. package/src/shared/fork-context.js.map +1 -0
  889. package/src/shared/fork-session-cwd.d.ts +3 -0
  890. package/src/shared/fork-session-cwd.d.ts.map +1 -0
  891. package/src/shared/fork-session-cwd.js +24 -0
  892. package/src/shared/fork-session-cwd.js.map +1 -0
  893. package/src/shared/formatters.d.ts +36 -0
  894. package/src/shared/formatters.d.ts.map +1 -0
  895. package/src/shared/formatters.js +143 -0
  896. package/src/shared/formatters.js.map +1 -0
  897. package/src/shared/jsonl-writer.d.ts +21 -0
  898. package/src/shared/jsonl-writer.d.ts.map +1 -0
  899. package/src/shared/jsonl-writer.js +68 -0
  900. package/src/shared/jsonl-writer.js.map +1 -0
  901. package/src/shared/launch-contract.d.ts +64 -0
  902. package/src/shared/launch-contract.d.ts.map +1 -0
  903. package/src/shared/launch-contract.js +140 -0
  904. package/src/shared/launch-contract.js.map +1 -0
  905. package/src/shared/model-info.d.ts +44 -0
  906. package/src/shared/model-info.d.ts.map +1 -0
  907. package/src/shared/model-info.js +73 -0
  908. package/src/shared/model-info.js.map +1 -0
  909. package/src/shared/model-response-aliases.d.ts +2 -0
  910. package/src/shared/model-response-aliases.d.ts.map +1 -0
  911. package/src/shared/model-response-aliases.js +16 -0
  912. package/src/shared/model-response-aliases.js.map +1 -0
  913. package/src/shared/node-executable.d.ts +2 -0
  914. package/src/shared/node-executable.d.ts.map +1 -0
  915. package/src/shared/node-executable.js +21 -0
  916. package/src/shared/node-executable.js.map +1 -0
  917. package/src/shared/opencode-session-headers.d.ts +13 -0
  918. package/src/shared/opencode-session-headers.d.ts.map +1 -0
  919. package/src/shared/opencode-session-headers.js +27 -0
  920. package/src/shared/opencode-session-headers.js.map +1 -0
  921. package/src/shared/prompt-resources.d.ts +6 -0
  922. package/src/shared/prompt-resources.d.ts.map +1 -0
  923. package/src/shared/prompt-resources.js +11 -0
  924. package/src/shared/prompt-resources.js.map +1 -0
  925. package/src/shared/pruned-fork.d.ts +35 -0
  926. package/src/shared/pruned-fork.d.ts.map +1 -0
  927. package/src/shared/pruned-fork.js +417 -0
  928. package/src/shared/pruned-fork.js.map +1 -0
  929. package/src/shared/required-child-extensions.d.ts +20 -0
  930. package/src/shared/required-child-extensions.d.ts.map +1 -0
  931. package/src/shared/required-child-extensions.js +74 -0
  932. package/src/shared/required-child-extensions.js.map +1 -0
  933. package/src/shared/session-file-trust.d.ts +2 -0
  934. package/src/shared/session-file-trust.d.ts.map +1 -0
  935. package/src/shared/session-file-trust.js +21 -0
  936. package/src/shared/session-file-trust.js.map +1 -0
  937. package/src/shared/session-identity.d.ts +7 -0
  938. package/src/shared/session-identity.d.ts.map +1 -0
  939. package/src/shared/session-identity.js +7 -0
  940. package/src/shared/session-identity.js.map +1 -0
  941. package/src/shared/session-tokens.d.ts +3 -0
  942. package/src/shared/session-tokens.d.ts.map +1 -0
  943. package/src/shared/session-tokens.js +59 -0
  944. package/src/shared/session-tokens.js.map +1 -0
  945. package/src/shared/settings.d.ts +147 -0
  946. package/src/shared/settings.d.ts.map +1 -0
  947. package/src/shared/settings.js +248 -0
  948. package/src/shared/settings.js.map +1 -0
  949. package/src/shared/shortcuts.d.ts +2 -0
  950. package/src/shared/shortcuts.d.ts.map +1 -0
  951. package/src/shared/shortcuts.js +18 -0
  952. package/src/shared/shortcuts.js.map +1 -0
  953. package/src/shared/status-format.d.ts +10 -0
  954. package/src/shared/status-format.d.ts.map +1 -0
  955. package/src/shared/status-format.js +61 -0
  956. package/src/shared/status-format.js.map +1 -0
  957. package/src/shared/thinking-ceiling.d.ts +14 -0
  958. package/src/shared/thinking-ceiling.d.ts.map +1 -0
  959. package/src/shared/thinking-ceiling.js +38 -0
  960. package/src/shared/thinking-ceiling.js.map +1 -0
  961. package/src/shared/types.d.ts +2660 -0
  962. package/src/shared/types.d.ts.map +1 -0
  963. package/src/shared/types.js +265 -0
  964. package/src/shared/types.js.map +1 -0
  965. package/src/shared/utf8.d.ts +6 -0
  966. package/src/shared/utf8.d.ts.map +1 -0
  967. package/src/shared/utf8.js +13 -0
  968. package/src/shared/utf8.js.map +1 -0
  969. package/src/shared/utils.d.ts +71 -0
  970. package/src/shared/utils.d.ts.map +1 -0
  971. package/src/shared/utils.js +593 -0
  972. package/src/shared/utils.js.map +1 -0
  973. package/src/shared/watch-strategy.d.ts +3 -0
  974. package/src/shared/watch-strategy.d.ts.map +1 -0
  975. package/src/shared/watch-strategy.js +6 -0
  976. package/src/shared/watch-strategy.js.map +1 -0
  977. package/src/shared/workflow-child-permit.d.ts +59 -0
  978. package/src/shared/workflow-child-permit.d.ts.map +1 -0
  979. package/src/shared/workflow-child-permit.js +160 -0
  980. package/src/shared/workflow-child-permit.js.map +1 -0
  981. package/src/slash/delegation-adapters.d.ts +147 -0
  982. package/src/slash/delegation-adapters.d.ts.map +1 -0
  983. package/src/slash/delegation-adapters.js +293 -0
  984. package/src/slash/delegation-adapters.js.map +1 -0
  985. package/src/slash/delegation-json.d.ts +11 -0
  986. package/src/slash/delegation-json.d.ts.map +1 -0
  987. package/src/slash/delegation-json.js +118 -0
  988. package/src/slash/delegation-json.js.map +1 -0
  989. package/src/slash/delegation-request.d.ts +13 -0
  990. package/src/slash/delegation-request.d.ts.map +1 -0
  991. package/src/slash/delegation-request.js +175 -0
  992. package/src/slash/delegation-request.js.map +1 -0
  993. package/src/slash/prompt-template-bridge.d.ts +27 -0
  994. package/src/slash/prompt-template-bridge.d.ts.map +1 -0
  995. package/src/slash/prompt-template-bridge.js +380 -0
  996. package/src/slash/prompt-template-bridge.js.map +1 -0
  997. package/src/slash/prompt-workflows.d.ts +22 -0
  998. package/src/slash/prompt-workflows.d.ts.map +1 -0
  999. package/src/slash/prompt-workflows.js +261 -0
  1000. package/src/slash/prompt-workflows.js.map +1 -0
  1001. package/src/slash/selector.d.ts +48 -0
  1002. package/src/slash/selector.d.ts.map +1 -0
  1003. package/src/slash/selector.js +118 -0
  1004. package/src/slash/selector.js.map +1 -0
  1005. package/src/slash/slash-bridge.d.ts +31 -0
  1006. package/src/slash/slash-bridge.d.ts.map +1 -0
  1007. package/src/slash/slash-bridge.js +133 -0
  1008. package/src/slash/slash-bridge.js.map +1 -0
  1009. package/src/slash/slash-commands.d.ts +9 -0
  1010. package/src/slash/slash-commands.d.ts.map +1 -0
  1011. package/src/slash/slash-commands.js +1295 -0
  1012. package/src/slash/slash-commands.js.map +1 -0
  1013. package/src/slash/slash-live-state.d.ts +22 -0
  1014. package/src/slash/slash-live-state.d.ts.map +1 -0
  1015. package/src/slash/slash-live-state.js +264 -0
  1016. package/src/slash/slash-live-state.js.map +1 -0
  1017. package/src/slash/subagents-admin.d.ts +3 -0
  1018. package/src/slash/subagents-admin.d.ts.map +1 -0
  1019. package/src/slash/subagents-admin.js +453 -0
  1020. package/src/slash/subagents-admin.js.map +1 -0
  1021. package/src/tui/fleet-status.d.ts +86 -0
  1022. package/src/tui/fleet-status.d.ts.map +1 -0
  1023. package/src/tui/fleet-status.js +1083 -0
  1024. package/src/tui/fleet-status.js.map +1 -0
  1025. package/src/tui/fleet-transcript.d.ts +50 -0
  1026. package/src/tui/fleet-transcript.d.ts.map +1 -0
  1027. package/src/tui/fleet-transcript.js +497 -0
  1028. package/src/tui/fleet-transcript.js.map +1 -0
  1029. package/src/tui/fleet.d.ts +169 -0
  1030. package/src/tui/fleet.d.ts.map +1 -0
  1031. package/src/tui/fleet.js +1412 -0
  1032. package/src/tui/fleet.js.map +1 -0
  1033. package/src/tui/render-helpers.d.ts +24 -0
  1034. package/src/tui/render-helpers.d.ts.map +1 -0
  1035. package/src/tui/render-helpers.js +101 -0
  1036. package/src/tui/render-helpers.js.map +1 -0
  1037. package/src/tui/render.d.ts +61 -0
  1038. package/src/tui/render.d.ts.map +1 -0
  1039. package/src/tui/render.js +3608 -0
  1040. package/src/tui/render.js.map +1 -0
  1041. package/src/watchdog/change-signature.d.ts +8 -0
  1042. package/src/watchdog/change-signature.d.ts.map +1 -0
  1043. package/src/watchdog/change-signature.js +246 -0
  1044. package/src/watchdog/change-signature.js.map +1 -0
  1045. package/src/watchdog/child-status.d.ts +54 -0
  1046. package/src/watchdog/child-status.d.ts.map +1 -0
  1047. package/src/watchdog/child-status.js +188 -0
  1048. package/src/watchdog/child-status.js.map +1 -0
  1049. package/src/watchdog/diff-tool.d.ts +23 -0
  1050. package/src/watchdog/diff-tool.d.ts.map +1 -0
  1051. package/src/watchdog/diff-tool.js +84 -0
  1052. package/src/watchdog/diff-tool.js.map +1 -0
  1053. package/src/watchdog/emission-guard.d.ts +37 -0
  1054. package/src/watchdog/emission-guard.d.ts.map +1 -0
  1055. package/src/watchdog/emission-guard.js +98 -0
  1056. package/src/watchdog/emission-guard.js.map +1 -0
  1057. package/src/watchdog/guidance.d.ts +4 -0
  1058. package/src/watchdog/guidance.d.ts.map +1 -0
  1059. package/src/watchdog/guidance.js +20 -0
  1060. package/src/watchdog/guidance.js.map +1 -0
  1061. package/src/watchdog/lsp-diagnostics.d.ts +18 -0
  1062. package/src/watchdog/lsp-diagnostics.d.ts.map +1 -0
  1063. package/src/watchdog/lsp-diagnostics.js +490 -0
  1064. package/src/watchdog/lsp-diagnostics.js.map +1 -0
  1065. package/src/watchdog/model-selection.d.ts +25 -0
  1066. package/src/watchdog/model-selection.d.ts.map +1 -0
  1067. package/src/watchdog/model-selection.js +168 -0
  1068. package/src/watchdog/model-selection.js.map +1 -0
  1069. package/src/watchdog/permission-arbiter.d.ts +21 -0
  1070. package/src/watchdog/permission-arbiter.d.ts.map +1 -0
  1071. package/src/watchdog/permission-arbiter.js +141 -0
  1072. package/src/watchdog/permission-arbiter.js.map +1 -0
  1073. package/src/watchdog/register-child.d.ts +12 -0
  1074. package/src/watchdog/register-child.d.ts.map +1 -0
  1075. package/src/watchdog/register-child.js +120 -0
  1076. package/src/watchdog/register-child.js.map +1 -0
  1077. package/src/watchdog/register-main.d.ts +10 -0
  1078. package/src/watchdog/register-main.d.ts.map +1 -0
  1079. package/src/watchdog/register-main.js +419 -0
  1080. package/src/watchdog/register-main.js.map +1 -0
  1081. package/src/watchdog/render.d.ts +12 -0
  1082. package/src/watchdog/render.d.ts.map +1 -0
  1083. package/src/watchdog/render.js +52 -0
  1084. package/src/watchdog/render.js.map +1 -0
  1085. package/src/watchdog/review.d.ts +37 -0
  1086. package/src/watchdog/review.d.ts.map +1 -0
  1087. package/src/watchdog/review.js +325 -0
  1088. package/src/watchdog/review.js.map +1 -0
  1089. package/src/watchdog/rules.d.ts +22 -0
  1090. package/src/watchdog/rules.d.ts.map +1 -0
  1091. package/src/watchdog/rules.js +59 -0
  1092. package/src/watchdog/rules.js.map +1 -0
  1093. package/src/watchdog/runtime.d.ts +196 -0
  1094. package/src/watchdog/runtime.d.ts.map +1 -0
  1095. package/src/watchdog/runtime.js +862 -0
  1096. package/src/watchdog/runtime.js.map +1 -0
  1097. package/src/watchdog/scope.d.ts +15 -0
  1098. package/src/watchdog/scope.d.ts.map +1 -0
  1099. package/src/watchdog/scope.js +45 -0
  1100. package/src/watchdog/scope.js.map +1 -0
  1101. package/src/watchdog/settings.d.ts +30 -0
  1102. package/src/watchdog/settings.d.ts.map +1 -0
  1103. package/src/watchdog/settings.js +476 -0
  1104. package/src/watchdog/settings.js.map +1 -0
  1105. package/src/watchdog/tool-actions.d.ts +18 -0
  1106. package/src/watchdog/tool-actions.d.ts.map +1 -0
  1107. package/src/watchdog/tool-actions.js +151 -0
  1108. package/src/watchdog/tool-actions.js.map +1 -0
  1109. package/src/watchdog/turn-delta.d.ts +12 -0
  1110. package/src/watchdog/turn-delta.d.ts.map +1 -0
  1111. package/src/watchdog/turn-delta.js +185 -0
  1112. package/src/watchdog/turn-delta.js.map +1 -0
  1113. package/src/watchdog/types.d.ts +142 -0
  1114. package/src/watchdog/types.d.ts.map +1 -0
  1115. package/src/watchdog/types.js +28 -0
  1116. package/src/watchdog/types.js.map +1 -0
  1117. package/src/watchdog/warning-format.d.ts +8 -0
  1118. package/src/watchdog/warning-format.d.ts.map +1 -0
  1119. package/src/watchdog/warning-format.js +60 -0
  1120. package/src/watchdog/warning-format.js.map +1 -0
  1121. package/src/workflows/chat-progress.d.ts +38 -0
  1122. package/src/workflows/chat-progress.d.ts.map +1 -0
  1123. package/src/workflows/chat-progress.js +130 -0
  1124. package/src/workflows/chat-progress.js.map +1 -0
  1125. package/src/workflows/host-command.d.ts +31 -0
  1126. package/src/workflows/host-command.d.ts.map +1 -0
  1127. package/src/workflows/host-command.js +228 -0
  1128. package/src/workflows/host-command.js.map +1 -0
  1129. package/src/workflows/scripted-workflow.d.ts +195 -0
  1130. package/src/workflows/scripted-workflow.d.ts.map +1 -0
  1131. package/src/workflows/scripted-workflow.js +2634 -0
  1132. package/src/workflows/scripted-workflow.js.map +1 -0
  1133. package/src/workflows/workflow-checklist.d.ts +124 -0
  1134. package/src/workflows/workflow-checklist.d.ts.map +1 -0
  1135. package/src/workflows/workflow-checklist.js +312 -0
  1136. package/src/workflows/workflow-checklist.js.map +1 -0
  1137. package/src/workflows/workflow-child-summary.d.ts +20 -0
  1138. package/src/workflows/workflow-child-summary.d.ts.map +1 -0
  1139. package/src/workflows/workflow-child-summary.js +179 -0
  1140. package/src/workflows/workflow-child-summary.js.map +1 -0
  1141. package/src/workflows/workflow-preflight.d.ts +59 -0
  1142. package/src/workflows/workflow-preflight.d.ts.map +1 -0
  1143. package/src/workflows/workflow-preflight.js +289 -0
  1144. package/src/workflows/workflow-preflight.js.map +1 -0
  1145. package/src/workflows/workflow-receipt.d.ts +35 -0
  1146. package/src/workflows/workflow-receipt.d.ts.map +1 -0
  1147. package/src/workflows/workflow-receipt.js +449 -0
  1148. package/src/workflows/workflow-receipt.js.map +1 -0
  1149. package/src/workflows/workflow-resources.d.ts +43 -0
  1150. package/src/workflows/workflow-resources.d.ts.map +1 -0
  1151. package/src/workflows/workflow-resources.js +230 -0
  1152. package/src/workflows/workflow-resources.js.map +1 -0
  1153. package/src/workflows/workflow-settlement.d.ts +85 -0
  1154. package/src/workflows/workflow-settlement.d.ts.map +1 -0
  1155. package/src/workflows/workflow-settlement.js +204 -0
  1156. package/src/workflows/workflow-settlement.js.map +1 -0
  1157. package/index.ts +0 -13
  1158. package/src/agents/advertised-agent-prompt.ts +0 -94
  1159. package/src/agents/agent-management.ts +0 -1417
  1160. package/src/agents/agent-memory.ts +0 -254
  1161. package/src/agents/agent-refinements.ts +0 -624
  1162. package/src/agents/agent-scope.ts +0 -6
  1163. package/src/agents/agent-selection.ts +0 -25
  1164. package/src/agents/agent-serializer.ts +0 -182
  1165. package/src/agents/agents.ts +0 -2917
  1166. package/src/agents/builtin-names.ts +0 -16
  1167. package/src/agents/chain-serializer.ts +0 -285
  1168. package/src/agents/frontmatter.ts +0 -153
  1169. package/src/agents/identity.ts +0 -30
  1170. package/src/agents/proactive-skills.ts +0 -194
  1171. package/src/agents/runtime-agent-events.ts +0 -70
  1172. package/src/agents/runtime-agent-registry.ts +0 -430
  1173. package/src/agents/skills.ts +0 -754
  1174. package/src/api/agents.ts +0 -12
  1175. package/src/api/background-work.ts +0 -206
  1176. package/src/api/capability-ceiling.ts +0 -16
  1177. package/src/api/child-tool-plan.ts +0 -5
  1178. package/src/api/control-channel.ts +0 -4
  1179. package/src/api/delegation.ts +0 -116
  1180. package/src/api/external-job-provider.ts +0 -195
  1181. package/src/api/external-runs.ts +0 -282
  1182. package/src/api/intercom-bridge.ts +0 -3
  1183. package/src/api/preflight.ts +0 -539
  1184. package/src/api/project-panes.ts +0 -32
  1185. package/src/api/required-child-extensions.ts +0 -6
  1186. package/src/api/shared-types.ts +0 -29
  1187. package/src/api/workflow-resources.ts +0 -6
  1188. package/src/extension/config.ts +0 -230
  1189. package/src/extension/control-notices.ts +0 -58
  1190. package/src/extension/doctor.ts +0 -270
  1191. package/src/extension/fanout-child.ts +0 -265
  1192. package/src/extension/herdr-pi-bridge.ts +0 -160
  1193. package/src/extension/index.ts +0 -1205
  1194. package/src/extension/public-execution.ts +0 -225
  1195. package/src/extension/rpc.ts +0 -848
  1196. package/src/extension/schemas.ts +0 -428
  1197. package/src/extension/steering-notices.ts +0 -35
  1198. package/src/extension/subagent-guide.ts +0 -39
  1199. package/src/extension/tool-description.ts +0 -175
  1200. package/src/extension/tool-result.ts +0 -19
  1201. package/src/inspectors/actions.ts +0 -148
  1202. package/src/inspectors/ghostty/actions.ts +0 -74
  1203. package/src/inspectors/ghostty/plugin.ts +0 -29
  1204. package/src/inspectors/herdr/actions.ts +0 -155
  1205. package/src/inspectors/herdr/client.ts +0 -130
  1206. package/src/inspectors/herdr/focus.ts +0 -55
  1207. package/src/inspectors/herdr/plugin.ts +0 -20
  1208. package/src/inspectors/herdr/project-panes.ts +0 -730
  1209. package/src/inspectors/inspector-runner.ts +0 -153
  1210. package/src/inspectors/plugins.ts +0 -8
  1211. package/src/inspectors/session-roots-codec.ts +0 -31
  1212. package/src/inspectors/shell-command.ts +0 -16
  1213. package/src/inspectors/types.ts +0 -51
  1214. package/src/integrations/herdr-status.ts +0 -400
  1215. package/src/integrations/pi-web-session-liveness.ts +0 -73
  1216. package/src/intercom/intercom-bridge.ts +0 -233
  1217. package/src/intercom/native-supervisor-channel.ts +0 -917
  1218. package/src/intercom/result-intercom.ts +0 -423
  1219. package/src/intercom/supervisor-ui.ts +0 -244
  1220. package/src/missions/actions.ts +0 -433
  1221. package/src/missions/goal-driver.ts +0 -164
  1222. package/src/missions/lifecycle.ts +0 -367
  1223. package/src/missions/store.ts +0 -584
  1224. package/src/missions/types.ts +0 -190
  1225. package/src/missions/workflow-state.ts +0 -281
  1226. package/src/policy/authority.ts +0 -50
  1227. package/src/profiles/profiles.ts +0 -668
  1228. package/src/runs/background/active-async-capacity.ts +0 -520
  1229. package/src/runs/background/active-run-index.ts +0 -155
  1230. package/src/runs/background/async-execution.ts +0 -2278
  1231. package/src/runs/background/async-job-tracker.ts +0 -826
  1232. package/src/runs/background/async-resume.ts +0 -647
  1233. package/src/runs/background/async-retention.ts +0 -912
  1234. package/src/runs/background/async-status-snapshot.ts +0 -46
  1235. package/src/runs/background/async-status.ts +0 -771
  1236. package/src/runs/background/auto-drain.ts +0 -92
  1237. package/src/runs/background/binary-bootstrap.ts +0 -38
  1238. package/src/runs/background/chain-append.ts +0 -321
  1239. package/src/runs/background/chain-root-attachment.ts +0 -259
  1240. package/src/runs/background/completion-batcher.ts +0 -168
  1241. package/src/runs/background/completion-dedupe.ts +0 -58
  1242. package/src/runs/background/completion-replay.ts +0 -287
  1243. package/src/runs/background/control-channel.ts +0 -600
  1244. package/src/runs/background/fleet-view.ts +0 -648
  1245. package/src/runs/background/index-segment.ts +0 -59
  1246. package/src/runs/background/inspect-rpc.ts +0 -443
  1247. package/src/runs/background/notify.ts +0 -819
  1248. package/src/runs/background/owned-process-tree.ts +0 -131
  1249. package/src/runs/background/parallel-groups.ts +0 -45
  1250. package/src/runs/background/process-terminal.ts +0 -310
  1251. package/src/runs/background/result-delivery-ownership.ts +0 -45
  1252. package/src/runs/background/result-files.ts +0 -523
  1253. package/src/runs/background/result-watcher.ts +0 -809
  1254. package/src/runs/background/resume-guidance.ts +0 -56
  1255. package/src/runs/background/retained-children.ts +0 -135
  1256. package/src/runs/background/retained-nested-route-tracker.ts +0 -96
  1257. package/src/runs/background/run-child-session.ts +0 -690
  1258. package/src/runs/background/run-id-query.ts +0 -7
  1259. package/src/runs/background/run-id-resolver.ts +0 -175
  1260. package/src/runs/background/run-status.ts +0 -786
  1261. package/src/runs/background/runner-aliases.ts +0 -142
  1262. package/src/runs/background/runner-child-launch.ts +0 -91
  1263. package/src/runs/background/runner-child-sessions.ts +0 -32
  1264. package/src/runs/background/runner-http-dispatcher.ts +0 -119
  1265. package/src/runs/background/scheduled-runs.ts +0 -1012
  1266. package/src/runs/background/stale-run-reconciler.ts +0 -436
  1267. package/src/runs/background/steering.ts +0 -260
  1268. package/src/runs/background/subagent-runner.ts +0 -5357
  1269. package/src/runs/background/subagent-wait.ts +0 -876
  1270. package/src/runs/background/terminal-run-index.ts +0 -138
  1271. package/src/runs/background/top-level-async.ts +0 -14
  1272. package/src/runs/background/wait-completions.ts +0 -261
  1273. package/src/runs/background/wait-config.ts +0 -50
  1274. package/src/runs/background/wait-subscriptions.ts +0 -354
  1275. package/src/runs/background/wait-tool.ts +0 -45
  1276. package/src/runs/foreground/async-dismiss-action.ts +0 -86
  1277. package/src/runs/foreground/async-steering-action.ts +0 -276
  1278. package/src/runs/foreground/async-stop-action.ts +0 -176
  1279. package/src/runs/foreground/execution.ts +0 -2254
  1280. package/src/runs/foreground/foreground-control.ts +0 -157
  1281. package/src/runs/foreground/foreground-history.ts +0 -163
  1282. package/src/runs/foreground/prompt-audit.ts +0 -178
  1283. package/src/runs/foreground/subagent-executor.ts +0 -7526
  1284. package/src/runs/foreground/workflow-detach-reconcile.ts +0 -304
  1285. package/src/runs/foreground/workflow-foreground-steering.ts +0 -169
  1286. package/src/runs/shared/abort-recovery.ts +0 -119
  1287. package/src/runs/shared/acceptance.ts +0 -1698
  1288. package/src/runs/shared/agent-contract.ts +0 -38
  1289. package/src/runs/shared/async-status-projection.ts +0 -659
  1290. package/src/runs/shared/background-process-options.ts +0 -9
  1291. package/src/runs/shared/capability-ceiling.ts +0 -211
  1292. package/src/runs/shared/chain-outputs.ts +0 -116
  1293. package/src/runs/shared/child-hooks.ts +0 -189
  1294. package/src/runs/shared/child-identity.ts +0 -62
  1295. package/src/runs/shared/child-launch-plan.ts +0 -163
  1296. package/src/runs/shared/child-launch.ts +0 -342
  1297. package/src/runs/shared/child-lifecycle.ts +0 -28
  1298. package/src/runs/shared/child-runtime-config.ts +0 -133
  1299. package/src/runs/shared/child-session.ts +0 -448
  1300. package/src/runs/shared/child-tool-plan.ts +0 -661
  1301. package/src/runs/shared/claude-code-adapter.ts +0 -133
  1302. package/src/runs/shared/codex-exec-adapter.ts +0 -129
  1303. package/src/runs/shared/completion-evidence.ts +0 -89
  1304. package/src/runs/shared/completion-guard.ts +0 -255
  1305. package/src/runs/shared/context-mode.ts +0 -44
  1306. package/src/runs/shared/cursor-agent-adapter.ts +0 -114
  1307. package/src/runs/shared/dynamic-fanout.ts +0 -297
  1308. package/src/runs/shared/effective-system-prompt.ts +0 -33
  1309. package/src/runs/shared/extension-bindings.ts +0 -78
  1310. package/src/runs/shared/external-cli-contract.ts +0 -177
  1311. package/src/runs/shared/external-cli-preflight.ts +0 -142
  1312. package/src/runs/shared/external-cli-runner.ts +0 -431
  1313. package/src/runs/shared/external-job-bridge.ts +0 -460
  1314. package/src/runs/shared/external-job-runner.ts +0 -389
  1315. package/src/runs/shared/fast-mode-extension.ts +0 -10
  1316. package/src/runs/shared/herdr-connection.ts +0 -134
  1317. package/src/runs/shared/herdr-external-adapters.ts +0 -169
  1318. package/src/runs/shared/herdr-machine.ts +0 -279
  1319. package/src/runs/shared/herdr-pi-protocol.ts +0 -59
  1320. package/src/runs/shared/herdr-placed-run.ts +0 -263
  1321. package/src/runs/shared/host-step-status.ts +0 -231
  1322. package/src/runs/shared/lane-metadata.ts +0 -126
  1323. package/src/runs/shared/launch-cwd.ts +0 -16
  1324. package/src/runs/shared/llm-intent-arbiter.ts +0 -321
  1325. package/src/runs/shared/long-running-guard.ts +0 -221
  1326. package/src/runs/shared/mcp-config-sources.ts +0 -422
  1327. package/src/runs/shared/mcp-direct-tool-allowlist.ts +0 -484
  1328. package/src/runs/shared/mcp-direct-tool-grant.ts +0 -194
  1329. package/src/runs/shared/model-resolution-diagnostic.ts +0 -76
  1330. package/src/runs/shared/model-resolution.ts +0 -441
  1331. package/src/runs/shared/model-scope.ts +0 -205
  1332. package/src/runs/shared/mutation-evidence.ts +0 -199
  1333. package/src/runs/shared/nested-events.ts +0 -1079
  1334. package/src/runs/shared/nested-path.ts +0 -38
  1335. package/src/runs/shared/nested-render.ts +0 -127
  1336. package/src/runs/shared/orca-progress-tabs.ts +0 -510
  1337. package/src/runs/shared/parallel-handoff.ts +0 -741
  1338. package/src/runs/shared/parallel-utils.ts +0 -279
  1339. package/src/runs/shared/permissions.ts +0 -86
  1340. package/src/runs/shared/pi-spawn.ts +0 -207
  1341. package/src/runs/shared/process-signal.ts +0 -35
  1342. package/src/runs/shared/readonly-drain-observation.ts +0 -42
  1343. package/src/runs/shared/run-fanout-budget.ts +0 -267
  1344. package/src/runs/shared/run-history.ts +0 -201
  1345. package/src/runs/shared/runtime-acknowledged-extensions.ts +0 -44
  1346. package/src/runs/shared/session-lease.ts +0 -293
  1347. package/src/runs/shared/single-output.ts +0 -304
  1348. package/src/runs/shared/spawn-budget.ts +0 -128
  1349. package/src/runs/shared/structured-output.ts +0 -236
  1350. package/src/runs/shared/subagent-control.ts +0 -294
  1351. package/src/runs/shared/subagent-prompt-runtime.ts +0 -545
  1352. package/src/runs/shared/task-intent.ts +0 -244
  1353. package/src/runs/shared/tool-availability.ts +0 -37
  1354. package/src/runs/shared/tool-budget.ts +0 -66
  1355. package/src/runs/shared/tool-timeout.ts +0 -93
  1356. package/src/runs/shared/usage-budget.ts +0 -65
  1357. package/src/runs/shared/workflow-async-child-guidance.ts +0 -18
  1358. package/src/runs/shared/workflow-graph.ts +0 -225
  1359. package/src/runs/shared/worktree-cleanup-plan.ts +0 -869
  1360. package/src/runs/shared/worktree-setup-command.ts +0 -213
  1361. package/src/runs/shared/worktree.ts +0 -1538
  1362. package/src/shared/accessible-dir.ts +0 -47
  1363. package/src/shared/agent-stream-options.ts +0 -5
  1364. package/src/shared/artifacts.ts +0 -281
  1365. package/src/shared/atomic-json.ts +0 -83
  1366. package/src/shared/capacity-resilient-json.ts +0 -102
  1367. package/src/shared/child-cache-retention.ts +0 -43
  1368. package/src/shared/child-session-name.ts +0 -46
  1369. package/src/shared/child-transcript.ts +0 -264
  1370. package/src/shared/completion-owner.ts +0 -14
  1371. package/src/shared/display-text.ts +0 -150
  1372. package/src/shared/extension-context.ts +0 -24
  1373. package/src/shared/file-coalescer.ts +0 -49
  1374. package/src/shared/file-system-retry.ts +0 -95
  1375. package/src/shared/fork-context.ts +0 -236
  1376. package/src/shared/fork-session-cwd.ts +0 -27
  1377. package/src/shared/formatters.ts +0 -146
  1378. package/src/shared/jsonl-writer.ts +0 -92
  1379. package/src/shared/launch-contract.ts +0 -198
  1380. package/src/shared/model-info.ts +0 -101
  1381. package/src/shared/model-response-aliases.ts +0 -13
  1382. package/src/shared/node-executable.ts +0 -21
  1383. package/src/shared/opencode-session-headers.ts +0 -30
  1384. package/src/shared/prompt-resources.ts +0 -11
  1385. package/src/shared/pruned-fork.ts +0 -450
  1386. package/src/shared/required-child-extensions.ts +0 -81
  1387. package/src/shared/session-file-trust.ts +0 -19
  1388. package/src/shared/session-identity.ts +0 -10
  1389. package/src/shared/session-tokens.ts +0 -55
  1390. package/src/shared/settings.ts +0 -412
  1391. package/src/shared/shortcuts.ts +0 -13
  1392. package/src/shared/status-format.ts +0 -55
  1393. package/src/shared/thinking-ceiling.ts +0 -46
  1394. package/src/shared/types.ts +0 -2983
  1395. package/src/shared/utf8.ts +0 -11
  1396. package/src/shared/utils.ts +0 -608
  1397. package/src/shared/watch-strategy.ts +0 -12
  1398. package/src/shared/workflow-child-permit.ts +0 -212
  1399. package/src/slash/delegation-adapters.ts +0 -428
  1400. package/src/slash/delegation-json.ts +0 -108
  1401. package/src/slash/delegation-request.ts +0 -176
  1402. package/src/slash/prompt-template-bridge.ts +0 -419
  1403. package/src/slash/prompt-workflows.ts +0 -287
  1404. package/src/slash/selector.ts +0 -147
  1405. package/src/slash/slash-bridge.ts +0 -192
  1406. package/src/slash/slash-commands.ts +0 -1325
  1407. package/src/slash/slash-live-state.ts +0 -310
  1408. package/src/slash/subagents-admin.ts +0 -460
  1409. package/src/tui/fleet-status.ts +0 -1109
  1410. package/src/tui/fleet-transcript.ts +0 -536
  1411. package/src/tui/fleet.ts +0 -1448
  1412. package/src/tui/render-helpers.ts +0 -111
  1413. package/src/tui/render.ts +0 -3721
  1414. package/src/types/pi-runtime-compat.d.ts +0 -8
  1415. package/src/watchdog/change-signature.ts +0 -260
  1416. package/src/watchdog/child-status.ts +0 -225
  1417. package/src/watchdog/diff-tool.ts +0 -77
  1418. package/src/watchdog/emission-guard.ts +0 -125
  1419. package/src/watchdog/guidance.ts +0 -20
  1420. package/src/watchdog/lsp-diagnostics.ts +0 -538
  1421. package/src/watchdog/model-selection.ts +0 -187
  1422. package/src/watchdog/permission-arbiter.ts +0 -156
  1423. package/src/watchdog/register-child.ts +0 -128
  1424. package/src/watchdog/register-main.ts +0 -445
  1425. package/src/watchdog/render.ts +0 -53
  1426. package/src/watchdog/review.ts +0 -363
  1427. package/src/watchdog/rules.ts +0 -70
  1428. package/src/watchdog/runtime.ts +0 -924
  1429. package/src/watchdog/scope.ts +0 -51
  1430. package/src/watchdog/settings.ts +0 -515
  1431. package/src/watchdog/tool-actions.ts +0 -156
  1432. package/src/watchdog/turn-delta.ts +0 -184
  1433. package/src/watchdog/types.ts +0 -186
  1434. package/src/watchdog/warning-format.ts +0 -72
  1435. package/src/workflows/chat-progress.ts +0 -152
  1436. package/src/workflows/host-command.ts +0 -235
  1437. package/src/workflows/scripted-workflow.ts +0 -2575
  1438. package/src/workflows/workflow-checklist.ts +0 -436
  1439. package/src/workflows/workflow-child-summary.ts +0 -170
  1440. package/src/workflows/workflow-preflight.ts +0 -297
  1441. package/src/workflows/workflow-receipt.ts +0 -384
  1442. package/src/workflows/workflow-resources.ts +0 -236
  1443. package/src/workflows/workflow-settlement.ts +0 -249
@@ -0,0 +1,1617 @@
1
+ import { spawn } from "node:child_process";
2
+ import { spawnSync } from "node:child_process";
3
+ import { createHash } from "node:crypto";
4
+ import * as fs from "node:fs";
5
+ import * as path from "node:path";
6
+ import { unresolvedChildWatchdogBlockers } from "../../watchdog/child-status.js";
7
+ import { isAgentContract } from "./agent-contract.js";
8
+ import { validateStructuredOutputValue } from "./structured-output.js";
9
+ const LEVEL_RANK = {
10
+ none: 0,
11
+ attested: 1,
12
+ checked: 2,
13
+ verified: 3,
14
+ };
15
+ const VALID_LEVELS = new Set(["auto", "none", "attested", "checked", "verified"]);
16
+ const VALID_EVIDENCE_KINDS = [
17
+ "changed-files",
18
+ "tests-added",
19
+ "commands-run",
20
+ "validation-output",
21
+ "residual-risks",
22
+ "no-staged-files",
23
+ "diff-summary",
24
+ "review-findings",
25
+ "manual-notes",
26
+ ];
27
+ const VALID_EVIDENCE = new Set(VALID_EVIDENCE_KINDS);
28
+ const ACCEPTANCE_EVIDENCE_HELP = `Supported evidence kinds: ${VALID_EVIDENCE_KINDS.join(", ")}. Example: { level: "checked", evidence: ["commands-run", "changed-files"] }.`;
29
+ const ACCEPTANCE_OBJECT_EXAMPLE = "Example: { level: \"checked\", evidence: [\"commands-run\", \"changed-files\"] }.";
30
+ const ACCEPTANCE_CONFIG_KEYS = new Set(["level", "report", "preserveStagedIndex", "criteria", "evidence", "verify", "review", "stopRules", "reason"]);
31
+ const ACCEPTANCE_GATE_KEYS = new Set(["id", "must", "evidence", "severity"]);
32
+ const ACCEPTANCE_VERIFY_KEYS = new Set(["id", "command", "timeoutMs", "cwd", "env", "allowFailure", "output", "schema"]);
33
+ const ACCEPTANCE_REVIEW_KEYS = new Set(["agent", "focus", "required"]);
34
+ const EXPLICIT_REVIEWED_UNAVAILABLE = "is an achieved status, not a requestable acceptance level. For a read-only reviewer call, omit acceptance. To require independent review of a writer result, use acceptance.review.required and orchestrate the reviewer separately.";
35
+ function normalizeLevel(level) {
36
+ return level ?? "auto";
37
+ }
38
+ function unique(items) {
39
+ return [...new Set(items)];
40
+ }
41
+ function requiredEvidenceForLevel(level) {
42
+ switch (level) {
43
+ case "none":
44
+ return [];
45
+ case "attested":
46
+ return ["manual-notes", "residual-risks"];
47
+ case "checked":
48
+ return ["changed-files", "tests-added", "commands-run", "residual-risks", "no-staged-files"];
49
+ case "verified":
50
+ return ["changed-files", "tests-added", "commands-run", "validation-output", "residual-risks", "no-staged-files"];
51
+ }
52
+ }
53
+ function inferLevel(input) {
54
+ if (input.acceptanceRole === "writer" && (input.async || input.dynamic || input.dynamicGroup)) {
55
+ const reasons = [input.async ? "async declared writer" : "dynamic declared writer"];
56
+ if (input.dynamic || input.dynamicGroup)
57
+ reasons.push("dynamic fanout context");
58
+ return {
59
+ level: "checked",
60
+ reasons,
61
+ criteria: ["Implement the requested change without widening scope", "Return evidence sufficient for an independent acceptance review"],
62
+ evidence: requiredEvidenceForLevel("checked"),
63
+ review: { agent: "reviewer", required: true },
64
+ };
65
+ }
66
+ if (input.acceptanceRole === "writer") {
67
+ return {
68
+ level: "checked",
69
+ reasons: ["declared writer acceptance role"],
70
+ criteria: ["Implement the requested change without widening scope"],
71
+ evidence: requiredEvidenceForLevel("checked"),
72
+ };
73
+ }
74
+ if (input.acceptanceRole === "read-only") {
75
+ return {
76
+ level: "none",
77
+ reasons: ["declared read-only acceptance role"],
78
+ criteria: ["Return concrete findings with file paths and severity when applicable"],
79
+ evidence: ["review-findings", "residual-risks"],
80
+ };
81
+ }
82
+ return {
83
+ level: "attested",
84
+ reasons: ["default lightweight attestation"],
85
+ criteria: ["Return a concise result and residual risks when applicable"],
86
+ evidence: ["manual-notes", "residual-risks"],
87
+ };
88
+ }
89
+ function normalizeAcceptanceValue(input, pathLabel = "acceptance") {
90
+ if (typeof input !== "string")
91
+ return { value: input };
92
+ const trimmed = input.trim();
93
+ if (!trimmed.startsWith("{") && !trimmed.startsWith("["))
94
+ return { value: input };
95
+ let parsed;
96
+ try {
97
+ parsed = JSON.parse(trimmed);
98
+ }
99
+ catch (error) {
100
+ return {
101
+ value: input,
102
+ error: `${pathLabel} JSON string must encode a valid acceptance object: ${error instanceof Error ? error.message : String(error)}`,
103
+ };
104
+ }
105
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
106
+ const kind = parsed === null ? "null" : Array.isArray(parsed) ? "an array" : typeof parsed;
107
+ return { value: input, error: `${pathLabel} JSON string must encode an object; got ${kind}.` };
108
+ }
109
+ return { value: parsed };
110
+ }
111
+ export function normalizeAcceptanceInput(input) {
112
+ const normalized = normalizeAcceptanceValue(input);
113
+ if (normalized.error)
114
+ throw new Error(normalized.error);
115
+ input = normalized.value;
116
+ if (input === undefined || input === "auto")
117
+ return { level: "auto" };
118
+ if (input === false)
119
+ return { level: "none", reason: "disabled by deprecated false shorthand" };
120
+ if (typeof input === "string")
121
+ return { level: input };
122
+ return { ...input };
123
+ }
124
+ export function resolveAcceptanceReportMode(input) {
125
+ const normalized = normalizeAcceptanceValue(input);
126
+ if (normalized.error)
127
+ throw new Error(normalized.error);
128
+ const value = normalized.value;
129
+ const report = value && typeof value === "object" && !Array.isArray(value) ? value.report : undefined;
130
+ return value === false || report === "off" ? "off" : report === "on" ? "required" : "optional";
131
+ }
132
+ const GATE_OBJECT_KEYS = new Set(["command", "output", "schema", "timeoutMs"]);
133
+ export const GATE_INPUT_ERROR = "gate must be a non-empty command string or { command, output?: \"json\", schema?, timeoutMs? }.";
134
+ /** Validates the two accepted gate shapes without normalizing them. Shared by preflight and the workflow sandbox mirror. */
135
+ export function parseGateInput(gate) {
136
+ if (typeof gate === "string") {
137
+ return gate.trim() ? { ok: true, gate: { command: gate.trim() } } : { ok: false, error: GATE_INPUT_ERROR };
138
+ }
139
+ if (!gate || typeof gate !== "object" || Array.isArray(gate))
140
+ return { ok: false, error: GATE_INPUT_ERROR };
141
+ const value = gate;
142
+ for (const key of Object.keys(value)) {
143
+ if (!GATE_OBJECT_KEYS.has(key))
144
+ return { ok: false, error: `gate.${key} is not supported.` };
145
+ }
146
+ if (typeof value.command !== "string" || !value.command.trim())
147
+ return { ok: false, error: GATE_INPUT_ERROR };
148
+ if (value.output !== undefined && value.output !== "json")
149
+ return { ok: false, error: "gate.output must be \"json\" when present." };
150
+ if (value.schema !== undefined) {
151
+ if (value.output !== "json")
152
+ return { ok: false, error: "gate.schema requires gate.output: \"json\"." };
153
+ if (!value.schema || typeof value.schema !== "object" || Array.isArray(value.schema))
154
+ return { ok: false, error: "gate.schema must be a JSON Schema object." };
155
+ }
156
+ if (value.timeoutMs !== undefined && (!Number.isInteger(value.timeoutMs) || value.timeoutMs < 1))
157
+ return { ok: false, error: "gate.timeoutMs must be an integer >= 1." };
158
+ const parsed = { command: value.command.trim() };
159
+ if (value.output === "json")
160
+ parsed.output = "json";
161
+ // SAFETY: schema was checked above to be a non-array object; timeoutMs to be an integer >= 1.
162
+ if (value.schema !== undefined)
163
+ parsed.schema = value.schema;
164
+ if (value.timeoutMs !== undefined)
165
+ parsed.timeoutMs = value.timeoutMs;
166
+ return { ok: true, gate: parsed };
167
+ }
168
+ /** True when an acceptance policy declares at least one `output: "json"` verify command, from either the gate shorthand or an explicit verify list. */
169
+ export function acceptanceHasTypedVerify(acceptance) {
170
+ if (!acceptance || typeof acceptance !== "object")
171
+ return false;
172
+ return Array.isArray(acceptance.verify) && acceptance.verify.some((command) => command && typeof command === "object" && command.output === "json");
173
+ }
174
+ export const TYPED_VERIFY_OUTPUT_SCHEMA_CONFLICT = "a typed verify command (output: \"json\") cannot be combined with outputSchema; the child would have two structured-output sources.";
175
+ export function normalizeGateAcceptance(gate, acceptance) {
176
+ if (gate === undefined) {
177
+ if (acceptance === undefined)
178
+ return { ok: true };
179
+ const normalized = normalizeAcceptanceValue(acceptance);
180
+ return normalized.error ? { ok: false, error: normalized.error } : { ok: true, acceptance: normalized.value };
181
+ }
182
+ const parsed = parseGateInput(gate);
183
+ if (!parsed.ok)
184
+ return { ok: false, error: parsed.error };
185
+ if (acceptance !== undefined && acceptance !== false)
186
+ return { ok: false, error: "gate cannot be combined with acceptance; use one gate command or acceptance.verify." + describeGateAcceptanceConflict(gate, acceptance) };
187
+ return { ok: true, acceptance: { level: "verified", verify: [{ id: "gate", ...parsed.gate }] } };
188
+ }
189
+ export function describeGateAcceptanceConflict(gate, acceptance) {
190
+ const render = (value) => {
191
+ let encoded;
192
+ try {
193
+ encoded = JSON.stringify(value) ?? String(value);
194
+ }
195
+ catch {
196
+ encoded = String(value);
197
+ }
198
+ return encoded.length > 120 ? `${encoded.slice(0, 120)}...` : encoded;
199
+ };
200
+ return ` Both fields were present: gate=${render(gate)} acceptance=${render(acceptance)}.`;
201
+ }
202
+ function explicitAcceptanceCanDisable(explicit) {
203
+ return explicit.level === "none" && typeof explicit.reason === "string" && explicit.reason.trim().length > 0;
204
+ }
205
+ function explicitAcceptanceRequestsPolicy(explicit) {
206
+ return (explicit.level !== undefined && explicit.level !== "auto") || Object.keys(explicit).some((key) => key !== "level");
207
+ }
208
+ function unsupportedEvidenceKindMessage(pathLabel, item) {
209
+ const value = typeof item === "string" ? ` "${item}"` : "";
210
+ return `${pathLabel}${value} is not a supported evidence kind. ${ACCEPTANCE_EVIDENCE_HELP}`;
211
+ }
212
+ export function validateAcceptanceInput(input, pathLabel = "acceptance") {
213
+ const errors = [];
214
+ if (input === undefined)
215
+ return errors;
216
+ if (input === false)
217
+ return errors;
218
+ const normalized = normalizeAcceptanceValue(input, pathLabel);
219
+ if (normalized.error)
220
+ return [normalized.error];
221
+ input = normalized.value;
222
+ if (typeof input === "string") {
223
+ if (input === "reviewed")
224
+ errors.push(`${pathLabel} ${EXPLICIT_REVIEWED_UNAVAILABLE}`);
225
+ else if (!VALID_LEVELS.has(input))
226
+ errors.push(`${pathLabel} has invalid level '${input}'.`);
227
+ else if (input === "none")
228
+ errors.push(`${pathLabel} level "none" requires a reason; use { level: "none", reason: "..." }.`);
229
+ else if (input === "verified")
230
+ errors.push(`${pathLabel} level "verified" requires object form with at least one runtime verify command. Use level "checked" or provide a non-empty acceptance.verify array.`);
231
+ return errors;
232
+ }
233
+ if (!input || typeof input !== "object" || Array.isArray(input)) {
234
+ errors.push(`${pathLabel} must be a string level, false, or an object. ${ACCEPTANCE_OBJECT_EXAMPLE}`);
235
+ return errors;
236
+ }
237
+ const value = input;
238
+ for (const key of Object.keys(value)) {
239
+ if (!ACCEPTANCE_CONFIG_KEYS.has(key))
240
+ errors.push(`${pathLabel}.${key} is not supported.`);
241
+ }
242
+ if (value.level === "reviewed") {
243
+ errors.push(`${pathLabel}.level ${EXPLICIT_REVIEWED_UNAVAILABLE}`);
244
+ }
245
+ else if (value.level !== undefined && (typeof value.level !== "string" || !VALID_LEVELS.has(value.level))) {
246
+ errors.push(`${pathLabel}.level must be one of auto, none, attested, checked, verified.`);
247
+ }
248
+ if (value.report !== undefined && value.report !== "on" && value.report !== "off") {
249
+ errors.push(`${pathLabel}.report must be on or off.`);
250
+ }
251
+ if (value.preserveStagedIndex !== undefined && value.preserveStagedIndex !== true) {
252
+ errors.push(`${pathLabel}.preserveStagedIndex must be true when provided.`);
253
+ }
254
+ if (value.preserveStagedIndex === true && value.level !== "checked" && value.level !== "verified") {
255
+ errors.push(`${pathLabel}.preserveStagedIndex requires level checked or verified.`);
256
+ }
257
+ if (value.level === "none" && (typeof value.reason !== "string" || !value.reason.trim())) {
258
+ errors.push(`${pathLabel}.reason is required when level is none.`);
259
+ }
260
+ if (value.reason !== undefined && typeof value.reason !== "string")
261
+ errors.push(`${pathLabel}.reason must be a string.`);
262
+ if (value.criteria !== undefined && !Array.isArray(value.criteria))
263
+ errors.push(`${pathLabel}.criteria must be an array.`);
264
+ if (Array.isArray(value.criteria)) {
265
+ const criterionIds = new Set();
266
+ for (const [index, criterion] of value.criteria.entries()) {
267
+ if (typeof criterion === "string")
268
+ continue;
269
+ const criterionPath = `${pathLabel}.criteria[${index}]`;
270
+ if (!criterion || typeof criterion !== "object" || Array.isArray(criterion)) {
271
+ errors.push(`${criterionPath} must be a string or an object.`);
272
+ continue;
273
+ }
274
+ const gate = criterion;
275
+ for (const key of Object.keys(gate)) {
276
+ if (!ACCEPTANCE_GATE_KEYS.has(key))
277
+ errors.push(`${criterionPath}.${key} is not supported.`);
278
+ }
279
+ if (typeof gate.id !== "string" || !gate.id.trim()) {
280
+ errors.push(`${criterionPath}.id is required.`);
281
+ }
282
+ else {
283
+ const normalizedId = normalizedToken(gate.id);
284
+ if (criterionIds.has(normalizedId))
285
+ errors.push(`${criterionPath}.id duplicates normalized criterion id '${normalizedId}'.`);
286
+ criterionIds.add(normalizedId);
287
+ }
288
+ if (typeof gate.must !== "string" || !gate.must.trim())
289
+ errors.push(`${criterionPath}.must is required.`);
290
+ if (gate.evidence !== undefined && !Array.isArray(gate.evidence))
291
+ errors.push(`${criterionPath}.evidence must be an array. ${ACCEPTANCE_EVIDENCE_HELP}`);
292
+ if (Array.isArray(gate.evidence)) {
293
+ for (const [evidenceIndex, item] of gate.evidence.entries()) {
294
+ if (typeof item !== "string" || !VALID_EVIDENCE.has(item)) {
295
+ errors.push(unsupportedEvidenceKindMessage(`${criterionPath}.evidence[${evidenceIndex}]`, item));
296
+ }
297
+ }
298
+ }
299
+ if (gate.severity !== undefined && gate.severity !== "required" && gate.severity !== "recommended") {
300
+ errors.push(`${criterionPath}.severity must be required or recommended.`);
301
+ }
302
+ }
303
+ }
304
+ if (Array.isArray(value.evidence)) {
305
+ for (const [index, item] of value.evidence.entries()) {
306
+ if (typeof item !== "string" || !VALID_EVIDENCE.has(item)) {
307
+ errors.push(unsupportedEvidenceKindMessage(`${pathLabel}.evidence[${index}]`, item));
308
+ }
309
+ }
310
+ }
311
+ else if (value.evidence !== undefined) {
312
+ errors.push(`${pathLabel}.evidence must be an array. ${ACCEPTANCE_EVIDENCE_HELP}`);
313
+ }
314
+ if (value.level === "verified" && (!Array.isArray(value.verify) || value.verify.length === 0)) {
315
+ errors.push(`${pathLabel}.verify must contain at least one runtime command when level is verified. Use level "checked" or provide a non-empty acceptance.verify array.`);
316
+ }
317
+ else if (value.verify !== undefined && !Array.isArray(value.verify)) {
318
+ errors.push(`${pathLabel}.verify must be an array.`);
319
+ }
320
+ if (Array.isArray(value.verify)) {
321
+ for (const [index, command] of value.verify.entries()) {
322
+ if (!command || typeof command !== "object" || Array.isArray(command)) {
323
+ errors.push(`${pathLabel}.verify[${index}] must be an object.`);
324
+ continue;
325
+ }
326
+ const cmd = command;
327
+ for (const key of Object.keys(cmd)) {
328
+ if (!ACCEPTANCE_VERIFY_KEYS.has(key))
329
+ errors.push(`${pathLabel}.verify[${index}].${key} is not supported.`);
330
+ }
331
+ if (typeof cmd.id !== "string" || !cmd.id.trim())
332
+ errors.push(`${pathLabel}.verify[${index}].id is required.`);
333
+ if (typeof cmd.command !== "string" || !cmd.command.trim())
334
+ errors.push(`${pathLabel}.verify[${index}].command is required.`);
335
+ if (cmd.timeoutMs !== undefined && (typeof cmd.timeoutMs !== "number" || !Number.isInteger(cmd.timeoutMs) || cmd.timeoutMs < 1)) {
336
+ errors.push(`${pathLabel}.verify[${index}].timeoutMs must be an integer >= 1.`);
337
+ }
338
+ if (cmd.cwd !== undefined && typeof cmd.cwd !== "string")
339
+ errors.push(`${pathLabel}.verify[${index}].cwd must be a string.`);
340
+ if (cmd.env !== undefined) {
341
+ if (!cmd.env || typeof cmd.env !== "object" || Array.isArray(cmd.env)) {
342
+ errors.push(`${pathLabel}.verify[${index}].env must be an object.`);
343
+ }
344
+ else {
345
+ for (const [envKey, envValue] of Object.entries(cmd.env)) {
346
+ if (typeof envValue !== "string")
347
+ errors.push(`${pathLabel}.verify[${index}].env.${envKey} must be a string.`);
348
+ }
349
+ }
350
+ }
351
+ if (cmd.allowFailure !== undefined && typeof cmd.allowFailure !== "boolean") {
352
+ errors.push(`${pathLabel}.verify[${index}].allowFailure must be a boolean.`);
353
+ }
354
+ if (cmd.output !== undefined && cmd.output !== "json")
355
+ errors.push(`${pathLabel}.verify[${index}].output must be "json" when present.`);
356
+ if (cmd.schema !== undefined) {
357
+ if (cmd.output !== "json")
358
+ errors.push(`${pathLabel}.verify[${index}].schema requires output: "json".`);
359
+ if (!cmd.schema || typeof cmd.schema !== "object" || Array.isArray(cmd.schema))
360
+ errors.push(`${pathLabel}.verify[${index}].schema must be a JSON Schema object.`);
361
+ }
362
+ }
363
+ }
364
+ if (value.review !== undefined && value.review !== false) {
365
+ if (!value.review || typeof value.review !== "object" || Array.isArray(value.review)) {
366
+ errors.push(`${pathLabel}.review must be false or an object.`);
367
+ }
368
+ else {
369
+ const review = value.review;
370
+ for (const key of Object.keys(review)) {
371
+ if (!ACCEPTANCE_REVIEW_KEYS.has(key))
372
+ errors.push(`${pathLabel}.review.${key} is not supported.`);
373
+ }
374
+ if (review.agent !== undefined && typeof review.agent !== "string")
375
+ errors.push(`${pathLabel}.review.agent must be a string.`);
376
+ if (review.focus !== undefined && typeof review.focus !== "string")
377
+ errors.push(`${pathLabel}.review.focus must be a string.`);
378
+ if (review.required !== undefined && typeof review.required !== "boolean")
379
+ errors.push(`${pathLabel}.review.required must be a boolean.`);
380
+ }
381
+ }
382
+ if (value.stopRules !== undefined && !Array.isArray(value.stopRules))
383
+ errors.push(`${pathLabel}.stopRules must be an array.`);
384
+ if (Array.isArray(value.stopRules)) {
385
+ for (const [index, item] of value.stopRules.entries()) {
386
+ if (typeof item !== "string")
387
+ errors.push(`${pathLabel}.stopRules[${index}] must be a string.`);
388
+ }
389
+ }
390
+ return errors;
391
+ }
392
+ export function validateExecutionAcceptancePolicy(input) {
393
+ const errors = validateAcceptanceInput(input.acceptance, "acceptance");
394
+ for (const [index, task] of (input.tasks ?? []).entries()) {
395
+ errors.push(...validateAcceptanceInput(task.acceptance, `tasks[${index}].acceptance`));
396
+ }
397
+ for (const [stepIndex, step] of (input.chain ?? []).entries()) {
398
+ errors.push(...validateAcceptanceInput(step.acceptance, `chain[${stepIndex}].acceptance`));
399
+ if (Array.isArray(step.parallel)) {
400
+ for (const [taskIndex, task] of step.parallel.entries()) {
401
+ errors.push(...validateAcceptanceInput(task.acceptance, `chain[${stepIndex}].parallel[${taskIndex}].acceptance`));
402
+ }
403
+ }
404
+ else if (step.parallel) {
405
+ errors.push(...validateAcceptanceInput(step.parallel.acceptance, `chain[${stepIndex}].parallel.acceptance`));
406
+ }
407
+ }
408
+ return errors;
409
+ }
410
+ export function validateExecutionAcceptance(input) {
411
+ const errors = validateExecutionAcceptancePolicy(input);
412
+ errors.push(...validateAcceptanceReportMode(input.acceptance, input.outputSchema, "acceptance"));
413
+ for (const [index, task] of (input.tasks ?? []).entries()) {
414
+ errors.push(...validateAcceptanceReportMode(task.acceptance, task.outputSchema, `tasks[${index}].acceptance`));
415
+ }
416
+ for (const [stepIndex, step] of (input.chain ?? []).entries()) {
417
+ errors.push(...validateAcceptanceReportMode(step.acceptance, step.outputSchema, `chain[${stepIndex}].acceptance`));
418
+ if (Array.isArray(step.parallel)) {
419
+ for (const [taskIndex, task] of step.parallel.entries()) {
420
+ errors.push(...validateAcceptanceReportMode(task.acceptance, task.outputSchema, `chain[${stepIndex}].parallel[${taskIndex}].acceptance`));
421
+ }
422
+ }
423
+ else if (step.parallel) {
424
+ errors.push(...validateAcceptanceReportMode(step.parallel.acceptance, step.parallel.outputSchema, `chain[${stepIndex}].parallel.acceptance`));
425
+ }
426
+ }
427
+ return errors;
428
+ }
429
+ function validateAcceptanceReportMode(acceptance, outputSchema, pathLabel) {
430
+ const normalized = normalizeAcceptanceValue(acceptance, pathLabel);
431
+ if (normalized.error)
432
+ return [];
433
+ acceptance = normalized.value;
434
+ if (!acceptance || typeof acceptance !== "object" || Array.isArray(acceptance))
435
+ return [];
436
+ if (!("report" in acceptance))
437
+ return [];
438
+ return outputSchema === undefined || outputSchema === false ? [`${pathLabel}.report requires outputSchema.`] : [];
439
+ }
440
+ function normalizeCriteria(criteria, evidence) {
441
+ return (criteria ?? []).map((criterion, index) => {
442
+ if (typeof criterion === "string") {
443
+ return { id: `criterion-${index + 1}`, must: criterion, evidence, severity: "required" };
444
+ }
445
+ return {
446
+ id: criterion.id?.trim() || `criterion-${index + 1}`,
447
+ must: criterion.must ?? "",
448
+ evidence: criterion.evidence?.filter((item) => VALID_EVIDENCE.has(item)) ?? evidence,
449
+ severity: criterion.severity ?? "required",
450
+ };
451
+ }).filter((criterion) => criterion.must.trim());
452
+ }
453
+ export function resolveEffectiveAcceptance(input) {
454
+ const explicit = normalizeAcceptanceInput(input.explicit);
455
+ const explicitLevel = normalizeLevel(explicit.level);
456
+ if (isAgentContract(input.agentContract)) {
457
+ const level = explicitAcceptanceCanDisable(explicit) || explicitLevel === "auto"
458
+ ? "none"
459
+ : explicitLevel;
460
+ const evidence = unique(explicit.evidence ?? []);
461
+ const criteria = normalizeCriteria(explicit.criteria, evidence);
462
+ return {
463
+ level,
464
+ explicit: input.explicit !== undefined,
465
+ inferredReason: [],
466
+ criteria,
467
+ evidence,
468
+ preserveStagedIndex: explicit.preserveStagedIndex,
469
+ verify: explicit.verify ?? [],
470
+ review: explicit.review,
471
+ stopRules: explicit.stopRules ?? [],
472
+ reason: explicit.reason,
473
+ };
474
+ }
475
+ const inferred = inferLevel(input);
476
+ const inferredLevel = inferred.level === "none" && explicitAcceptanceRequestsPolicy(explicit) ? "attested" : inferred.level;
477
+ const level = explicitAcceptanceCanDisable(explicit)
478
+ ? "none"
479
+ : explicitLevel === "auto"
480
+ ? inferredLevel
481
+ : (LEVEL_RANK[explicitLevel] >= LEVEL_RANK[inferredLevel] ? explicitLevel : inferredLevel);
482
+ const evidence = unique([...(level === inferredLevel ? inferred.evidence : requiredEvidenceForLevel(level)), ...(explicit.evidence ?? [])]);
483
+ const criteria = normalizeCriteria((explicit.criteria?.length ? explicit.criteria : inferred.criteria), evidence);
484
+ const review = explicit.review !== undefined ? explicit.review : inferred.review;
485
+ return {
486
+ level,
487
+ explicit: input.explicit !== undefined,
488
+ inferredReason: inferred.reasons,
489
+ criteria: level === "none" ? [] : criteria,
490
+ evidence: level === "none" ? [] : evidence,
491
+ preserveStagedIndex: explicit.preserveStagedIndex,
492
+ verify: explicit.verify ?? [],
493
+ review,
494
+ stopRules: explicit.stopRules ?? [],
495
+ reason: explicit.reason,
496
+ };
497
+ }
498
+ function acceptanceRequiresChildReport(acceptance) {
499
+ return acceptance.criteria.length > 0 || acceptance.evidence.length > 0;
500
+ }
501
+ /** Label a declared review gate the same way in prompts and capability summaries. */
502
+ export function formatReviewGateLabel(review) {
503
+ const status = review.required === false ? "optional" : "required";
504
+ return review.agent ? `${status} by ${review.agent}` : status;
505
+ }
506
+ export function formatAcceptancePrompt(acceptance, options = {}) {
507
+ if (acceptance.level === "none")
508
+ return "";
509
+ if (options.reportOptional && !acceptanceRequiresChildReport(acceptance))
510
+ return "";
511
+ const lines = [
512
+ "",
513
+ "## Acceptance Contract",
514
+ `Acceptance level: ${acceptance.level}`,
515
+ "Completion is not accepted from prose alone. End with a structured acceptance report.",
516
+ "",
517
+ "Criteria:",
518
+ ...(acceptance.criteria.length ? acceptance.criteria.map((criterion) => `- ${criterion.id}: ${criterion.must}`) : ["- Return the requested result."]),
519
+ "",
520
+ `Required evidence: ${acceptance.evidence.join(", ") || "none"}`,
521
+ ];
522
+ if (acceptance.preserveStagedIndex) {
523
+ lines.push("The host will verify that the staged index is unchanged from launch; report noStagedFiles truthfully even when the preserved index is non-empty.");
524
+ }
525
+ if (acceptance.verify.length > 0) {
526
+ lines.push("", "Runtime verification commands configured by parent:");
527
+ for (const command of acceptance.verify)
528
+ lines.push(`- ${command.id}: ${command.command}`);
529
+ }
530
+ if (acceptance.review) {
531
+ lines.push("", `Review gate: ${formatReviewGateLabel(acceptance.review)}.`);
532
+ if (acceptance.review.focus)
533
+ lines.push(`Review focus: ${acceptance.review.focus}`);
534
+ }
535
+ if (acceptance.stopRules.length > 0) {
536
+ lines.push("", "Stop rules:", ...acceptance.stopRules.map((rule) => `- ${rule}`));
537
+ }
538
+ lines.push("", options.structuredOutput
539
+ ? "Include an `acceptanceReport` object in your final `structured_output` tool call in this shape:"
540
+ : "Finish with a fenced JSON block tagged `acceptance-report` in this shape:", "Use empty arrays when no items apply; array fields contain strings unless object entries are shown.", "Empty-string entries (`[\"\"]`) are ignored; use `[]` when nothing applies.", "`criteriaSatisfied[].status` must be exactly one of: satisfied, not-satisfied, not-applicable.", "`commandsRun[].result` must be exactly one of: passed, failed, not-run.", "`manualNotes` and `notes` are optional strings; an empty string means no note and does not satisfy `manual-notes` evidence.", ...(options.structuredOutput ? [] : ["```acceptance-report"]), JSON.stringify({
541
+ criteriaSatisfied: acceptance.criteria
542
+ .filter((criterion) => criterion.severity !== "recommended")
543
+ .map((criterion) => ({ id: criterion.id, status: "satisfied", evidence: "specific proof" })),
544
+ changedFiles: ["src/file.ts"],
545
+ testsAddedOrUpdated: ["test/file.test.ts"],
546
+ commandsRun: [{ command: "command", result: "passed", summary: "short result" }],
547
+ validationOutput: ["validation output or concise summary"],
548
+ residualRisks: ["none"],
549
+ noStagedFiles: true,
550
+ diffSummary: "short description of the diff",
551
+ reviewFindings: ["blocker: file.ts:12 - issue found, or no blockers"],
552
+ manualNotes: "anything else the parent should know",
553
+ }, null, 2), ...(options.structuredOutput ? [] : ["```"]));
554
+ return lines.join("\n");
555
+ }
556
+ function extractBalancedJson(text, start) {
557
+ let depth = 0;
558
+ let inString = false;
559
+ let escaped = false;
560
+ for (let i = start; i < text.length; i++) {
561
+ const char = text[i];
562
+ if (inString) {
563
+ if (escaped)
564
+ escaped = false;
565
+ else if (char === "\\")
566
+ escaped = true;
567
+ else if (char === "\"")
568
+ inString = false;
569
+ continue;
570
+ }
571
+ if (char === "\"") {
572
+ inString = true;
573
+ continue;
574
+ }
575
+ if (char === "{")
576
+ depth++;
577
+ if (char === "}") {
578
+ depth--;
579
+ if (depth === 0)
580
+ return text.slice(start, i + 1);
581
+ }
582
+ }
583
+ return undefined;
584
+ }
585
+ const ACCEPTANCE_REPORT_WRAPPERS = new Set(["acceptance", "acceptance-report", "acceptance_report", "acceptanceReport"]);
586
+ const ACCEPTANCE_REPORT_FIELDS = {
587
+ criteriaSatisfied: "criteriaSatisfied",
588
+ criteria_satisfied: "criteriaSatisfied",
589
+ changedFiles: "changedFiles",
590
+ changed_files: "changedFiles",
591
+ testsAddedOrUpdated: "testsAddedOrUpdated",
592
+ tests_added_or_updated: "testsAddedOrUpdated",
593
+ commandsRun: "commandsRun",
594
+ commands_run: "commandsRun",
595
+ validationOutput: "validationOutput",
596
+ validation_output: "validationOutput",
597
+ residualRisks: "residualRisks",
598
+ residual_risks: "residualRisks",
599
+ noStagedFiles: "noStagedFiles",
600
+ no_staged_files: "noStagedFiles",
601
+ diffSummary: "diffSummary",
602
+ diff_summary: "diffSummary",
603
+ reviewFindings: "reviewFindings",
604
+ review_findings: "reviewFindings",
605
+ manualNotes: "manualNotes",
606
+ manual_notes: "manualNotes",
607
+ notes: "notes",
608
+ };
609
+ const CRITERION_REPORT_FIELDS = new Set(["id", "status", "evidence"]);
610
+ const COMMAND_REPORT_FIELDS = new Set(["command", "result", "summary"]);
611
+ function normalizedToken(value) {
612
+ return value.trim().toLowerCase().replace(/[\s_]+/g, "-").replace(/-+/g, "-");
613
+ }
614
+ function normalizeCriterionStatus(value) {
615
+ if (typeof value !== "string")
616
+ return value;
617
+ const token = normalizedToken(value);
618
+ if (["satisfied", "met", "complete", "completed", "done", "pass", "passed", "success", "succeeded"].includes(token))
619
+ return "satisfied";
620
+ if (["not-satisfied", "not-met", "unmet", "incomplete", "fail", "failed"].includes(token))
621
+ return "not-satisfied";
622
+ if (["not-applicable", "n-a", "na", "skip", "skipped"].includes(token))
623
+ return "not-applicable";
624
+ return value;
625
+ }
626
+ function normalizeCommandResult(value) {
627
+ if (typeof value !== "string")
628
+ return value;
629
+ const token = normalizedToken(value);
630
+ if (["passed", "pass", "success", "successful", "succeeded", "ok"].includes(token))
631
+ return "passed";
632
+ if (["failed", "fail", "failure", "error"].includes(token))
633
+ return "failed";
634
+ if (["not-run", "not-executed", "skip", "skipped"].includes(token))
635
+ return "not-run";
636
+ return value;
637
+ }
638
+ function normalizeCriterionReport(value, pathLabel, errors) {
639
+ if (!value || typeof value !== "object" || Array.isArray(value))
640
+ return value;
641
+ const normalized = {};
642
+ for (const [key, fieldValue] of Object.entries(value)) {
643
+ if (!CRITERION_REPORT_FIELDS.has(key)) {
644
+ errors.push(`${pathLabel}.${key}: unsupported acceptance criterion field`);
645
+ continue;
646
+ }
647
+ normalized[key] = key === "id" && typeof fieldValue === "string"
648
+ ? normalizedToken(fieldValue)
649
+ : key === "status"
650
+ ? normalizeCriterionStatus(fieldValue)
651
+ : fieldValue;
652
+ }
653
+ return normalized;
654
+ }
655
+ function normalizeCommandReport(value, pathLabel, errors) {
656
+ if (!value || typeof value !== "object" || Array.isArray(value))
657
+ return value;
658
+ const normalized = {};
659
+ for (const [key, fieldValue] of Object.entries(value)) {
660
+ if (!COMMAND_REPORT_FIELDS.has(key)) {
661
+ errors.push(`${pathLabel}.${key}: unsupported acceptance command field`);
662
+ continue;
663
+ }
664
+ normalized[key] = key === "result" ? normalizeCommandResult(fieldValue) : fieldValue;
665
+ }
666
+ return normalized;
667
+ }
668
+ function normalizeAcceptanceReportValue(value, pathLabel = "") {
669
+ const errors = [];
670
+ let reportValue = value;
671
+ let reportPath = pathLabel;
672
+ if (reportValue && typeof reportValue === "object" && !Array.isArray(reportValue)) {
673
+ const record = reportValue;
674
+ const wrapperKeys = Object.keys(record).filter((key) => ACCEPTANCE_REPORT_WRAPPERS.has(key));
675
+ if (wrapperKeys.length > 0) {
676
+ const wrapperKey = wrapperKeys[0];
677
+ if (wrapperKeys.length > 1)
678
+ errors.push(`${pathLabel || "acceptance-report"}: multiple acceptance report wrappers are ambiguous`);
679
+ for (const key of Object.keys(record)) {
680
+ if (key !== wrapperKey)
681
+ errors.push(`${pathFor(pathLabel, key)}: unsupported alongside acceptance report wrapper '${wrapperKey}'`);
682
+ }
683
+ reportValue = record[wrapperKey];
684
+ reportPath = pathFor(pathLabel, wrapperKey);
685
+ }
686
+ }
687
+ if (!reportValue || typeof reportValue !== "object" || Array.isArray(reportValue))
688
+ return { value: reportValue, pathLabel: reportPath, errors };
689
+ const normalized = {};
690
+ for (const [key, fieldValue] of Object.entries(reportValue)) {
691
+ const canonical = ACCEPTANCE_REPORT_FIELDS[key];
692
+ if (!canonical) {
693
+ errors.push(`${pathFor(reportPath, key)}: unsupported acceptance report field`);
694
+ continue;
695
+ }
696
+ if (Object.hasOwn(normalized, canonical)) {
697
+ errors.push(`${pathFor(reportPath, key)}: duplicates normalized field '${canonical}'`);
698
+ continue;
699
+ }
700
+ const fieldPath = pathFor(reportPath, canonical);
701
+ switch (canonical) {
702
+ case "criteriaSatisfied": {
703
+ const items = Array.isArray(fieldValue) ? fieldValue : fieldValue && typeof fieldValue === "object" ? [fieldValue] : fieldValue;
704
+ normalized[canonical] = Array.isArray(items)
705
+ ? items.map((item, index) => normalizeCriterionReport(item, `${fieldPath}[${index}]`, errors))
706
+ : items;
707
+ break;
708
+ }
709
+ case "commandsRun": {
710
+ const items = Array.isArray(fieldValue) ? fieldValue : fieldValue && typeof fieldValue === "object" ? [fieldValue] : fieldValue;
711
+ normalized[canonical] = Array.isArray(items)
712
+ ? items.map((item, index) => normalizeCommandReport(item, `${fieldPath}[${index}]`, errors))
713
+ : items;
714
+ break;
715
+ }
716
+ case "changedFiles":
717
+ case "testsAddedOrUpdated":
718
+ case "validationOutput":
719
+ case "residualRisks":
720
+ case "reviewFindings": {
721
+ // Tolerate empty-string entries ("[\"\"]"): models write them for "no items"
722
+ // and a single empty entry must not reject the whole report. Drop them at
723
+ // parse time; non-string entries are kept so validateStringArrayField still
724
+ // flags structural garbage.
725
+ const items = typeof fieldValue === "string" ? [fieldValue] : fieldValue;
726
+ normalized[canonical] = Array.isArray(items)
727
+ ? items.filter((item) => typeof item !== "string" || item.trim().length > 0)
728
+ : items;
729
+ break;
730
+ }
731
+ case "noStagedFiles": {
732
+ const token = typeof fieldValue === "string" ? fieldValue.trim().toLowerCase() : undefined;
733
+ normalized[canonical] = token === "true" ? true : token === "false" ? false : fieldValue;
734
+ break;
735
+ }
736
+ default:
737
+ normalized[canonical] = fieldValue;
738
+ }
739
+ }
740
+ return { value: normalized, pathLabel: reportPath, errors };
741
+ }
742
+ function hasGenericAcceptanceReportSignal(value) {
743
+ if (!value || typeof value !== "object" || Array.isArray(value))
744
+ return false;
745
+ const record = value;
746
+ return "criteriaSatisfied" in record && [
747
+ "changedFiles",
748
+ "testsAddedOrUpdated",
749
+ "commandsRun",
750
+ "validationOutput",
751
+ "residualRisks",
752
+ "noStagedFiles",
753
+ "diffSummary",
754
+ "reviewFindings",
755
+ "manualNotes",
756
+ ].some((key) => key in record);
757
+ }
758
+ function parseReportJson(body) {
759
+ const trimmed = body.trim();
760
+ try {
761
+ return JSON.parse(trimmed);
762
+ }
763
+ catch (error) {
764
+ const jsonStart = trimmed.indexOf("{");
765
+ if (jsonStart > 0) {
766
+ const json = extractBalancedJson(trimmed, jsonStart);
767
+ if (json)
768
+ return JSON.parse(json);
769
+ }
770
+ throw error;
771
+ }
772
+ }
773
+ function fencedBlocks(output, tag) {
774
+ return [...output.matchAll(new RegExp(`\`\`\`${tag}\\s*\\n([\\s\\S]*?)\`\`\``, "gi"))]
775
+ .map((match) => match[1]?.trim())
776
+ .filter((value) => Boolean(value));
777
+ }
778
+ function parseAcceptanceReportBody(body) {
779
+ return validateAcceptanceReport(parseReportJson(body));
780
+ }
781
+ function parseUnterminatedAcceptanceReportFence(output) {
782
+ const opener = /```acceptance[-_]report\b[^\n]*\n/gi.exec(output);
783
+ if (!opener)
784
+ return {};
785
+ const bodyStart = opener.index + opener[0].length;
786
+ if (output.indexOf("```", bodyStart) !== -1)
787
+ return {};
788
+ try {
789
+ const validation = validateAcceptanceReport(JSON.parse(output.slice(bodyStart).trim()));
790
+ return validation.report
791
+ ? { report: validation.report }
792
+ : { error: `Failed to parse acceptance-report: Invalid acceptance-report: ${validation.errors.join("; ")}`, malformed: true };
793
+ }
794
+ catch (error) {
795
+ return { error: `Failed to parse acceptance-report: ${error instanceof Error ? error.message : String(error)}`, malformed: true };
796
+ }
797
+ }
798
+ function parseGenericJsonAcceptanceReportBody(body) {
799
+ const parsed = parseReportJson(body);
800
+ const normalized = normalizeAcceptanceReportValue(parsed);
801
+ const hasCriteriaMarker = normalized.value !== null
802
+ && typeof normalized.value === "object"
803
+ && !Array.isArray(normalized.value)
804
+ && "criteriaSatisfied" in normalized.value;
805
+ if (!hasGenericAcceptanceReportSignal(normalized.value) && !(hasCriteriaMarker && normalized.errors.length > 0))
806
+ return {};
807
+ const validation = validateAcceptanceReport(parsed);
808
+ return validation.report
809
+ ? { report: validation.report }
810
+ : { error: `Invalid acceptance-report: ${validation.errors.join("; ")}`, malformed: true };
811
+ }
812
+ export const ACCEPTANCE_REPORT_NOT_FOUND = "Structured acceptance report not found.";
813
+ export function parseAcceptanceReport(output) {
814
+ const explicitFencePresent = /```acceptance[-_]report\b/i.test(output);
815
+ const fenced = fencedBlocks(output, "acceptance[-_]report");
816
+ const parseErrors = [];
817
+ for (const body of fenced) {
818
+ try {
819
+ const validation = parseAcceptanceReportBody(body);
820
+ if (validation.report)
821
+ return { report: validation.report };
822
+ parseErrors.push(`Invalid acceptance-report: ${validation.errors.join("; ")}`);
823
+ }
824
+ catch (error) {
825
+ parseErrors.push(error instanceof Error ? error.message : String(error));
826
+ }
827
+ }
828
+ if (parseErrors.length > 0)
829
+ return { error: `Failed to parse acceptance-report: ${parseErrors.join("; ")}`, malformed: true };
830
+ if (explicitFencePresent) {
831
+ const recovered = parseUnterminatedAcceptanceReportFence(output);
832
+ if (recovered.report || recovered.error)
833
+ return recovered;
834
+ return { error: "Failed to parse acceptance-report: Empty or unterminated acceptance-report fence.", malformed: true };
835
+ }
836
+ for (const body of fencedBlocks(output, "(?:json|jsonc|json5)")) {
837
+ try {
838
+ const parsed = parseGenericJsonAcceptanceReportBody(body);
839
+ if (parsed.report)
840
+ return { report: parsed.report };
841
+ if (parsed.error)
842
+ return { error: `Failed to parse acceptance-report: ${parsed.error}`, malformed: parsed.malformed };
843
+ }
844
+ catch {
845
+ // Ignore unrelated malformed generic JSON. A recognizable report shape
846
+ // returns exact validation errors above instead of being mistaken for prose.
847
+ }
848
+ }
849
+ const markerIndex = output.search(/ACCEPTANCE_REPORT\s*:/i);
850
+ if (markerIndex !== -1) {
851
+ const jsonStart = output.indexOf("{", markerIndex);
852
+ if (jsonStart === -1) {
853
+ return { error: "Failed to parse acceptance-report: Expected a JSON object after ACCEPTANCE_REPORT:.", malformed: true };
854
+ }
855
+ const json = extractBalancedJson(output, jsonStart);
856
+ if (!json) {
857
+ return { error: "Failed to parse acceptance-report: Unterminated JSON object after ACCEPTANCE_REPORT:.", malformed: true };
858
+ }
859
+ try {
860
+ const parsed = JSON.parse(json);
861
+ const validation = validateAcceptanceReport(parsed);
862
+ if (validation.report)
863
+ return { report: validation.report };
864
+ return { error: `Failed to parse acceptance-report: Invalid acceptance-report: ${validation.errors.join("; ")}`, malformed: true };
865
+ }
866
+ catch (error) {
867
+ const message = error instanceof Error ? error.message : String(error);
868
+ return { error: `Failed to parse acceptance-report: ${message}`, malformed: true };
869
+ }
870
+ }
871
+ return { error: ACCEPTANCE_REPORT_NOT_FOUND };
872
+ }
873
+ function parseAcceptanceReportSources(output, fileOutput) {
874
+ const fromText = () => parseAcceptanceReport(output);
875
+ const fromFile = () => {
876
+ if (!fileOutput)
877
+ return { error: ACCEPTANCE_REPORT_NOT_FOUND };
878
+ const parsed = parseAcceptanceReport(fileOutput.content);
879
+ return parsed.report || parsed.error === ACCEPTANCE_REPORT_NOT_FOUND
880
+ ? parsed
881
+ : {
882
+ ...parsed,
883
+ error: `${parsed.error} (in configured output ${fileOutput.path})`,
884
+ sourcePath: fileOutput.path,
885
+ };
886
+ };
887
+ const [primary, secondary] = fileOutput?.authoritative ? [fromFile, fromText] : [fromText, fromFile];
888
+ const first = primary();
889
+ // A malformed report in the primary source is a defect to surface, not a
890
+ // miss to paper over with the secondary source; only a genuinely absent
891
+ // report falls through.
892
+ if (first.report || first.error !== ACCEPTANCE_REPORT_NOT_FOUND)
893
+ return first;
894
+ return secondary();
895
+ }
896
+ export function stripAcceptanceReport(output) {
897
+ const trailingFencePattern = /\n?```(acceptance[-_]report|json|jsonc|json5)\s*\n([\s\S]*?)```\s*/gi;
898
+ let trailingFence;
899
+ for (const match of output.matchAll(trailingFencePattern)) {
900
+ const end = (match.index ?? 0) + match[0].length;
901
+ if (output.slice(end).trim().length === 0 && match[1] && match[2]) {
902
+ trailingFence = { index: match.index ?? 0, tag: match[1].toLowerCase(), body: match[2] };
903
+ }
904
+ }
905
+ if (trailingFence) {
906
+ if (trailingFence.tag === "acceptance-report" || trailingFence.tag === "acceptance_report")
907
+ return output.slice(0, trailingFence.index).trimEnd();
908
+ try {
909
+ if (parseGenericJsonAcceptanceReportBody(trailingFence.body).report)
910
+ return output.slice(0, trailingFence.index).trimEnd();
911
+ }
912
+ catch {
913
+ // Leave unrelated or malformed generic JSON fences visible.
914
+ }
915
+ }
916
+ return output
917
+ .replace(/\n?```acceptance[-_]report\s*\n[\s\S]*?```\s*$/i, "")
918
+ .replace(/\n?ACCEPTANCE_REPORT\s*:\s*\{[\s\S]*\}\s*$/i, "")
919
+ .trimEnd();
920
+ }
921
+ function isStringArray(value) {
922
+ return Array.isArray(value) && value.every((item) => typeof item === "string");
923
+ }
924
+ function pathFor(base, segment) {
925
+ return base ? `${base}.${segment}` : segment;
926
+ }
927
+ function describeValidationValue(value) {
928
+ if (value === undefined)
929
+ return "missing";
930
+ if (value === null)
931
+ return "null";
932
+ if (Array.isArray(value))
933
+ return "array";
934
+ if (typeof value === "object")
935
+ return "object";
936
+ if (typeof value === "string") {
937
+ const short = value.length > 80 ? `${value.slice(0, 77)}...` : value;
938
+ return JSON.stringify(short);
939
+ }
940
+ return `${typeof value} ${String(value)}`;
941
+ }
942
+ function pushTypeError(errors, pathLabel, expected, value) {
943
+ errors.push(`${pathLabel}: expected ${expected}; got ${describeValidationValue(value)}`);
944
+ }
945
+ function validateStringArrayField(errors, value, pathLabel) {
946
+ if (!Array.isArray(value)) {
947
+ pushTypeError(errors, pathLabel, "string[]", value);
948
+ return;
949
+ }
950
+ for (const [index, item] of value.entries()) {
951
+ if (typeof item !== "string" || !item.trim())
952
+ pushTypeError(errors, `${pathLabel}[${index}]`, "non-empty string", item);
953
+ }
954
+ }
955
+ export function validateAcceptanceReport(value, pathLabel = "") {
956
+ const normalized = normalizeAcceptanceReportValue(value, pathLabel);
957
+ value = normalized.value;
958
+ pathLabel = normalized.pathLabel;
959
+ const errors = normalized.errors;
960
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
961
+ pushTypeError(errors, pathLabel || "acceptance-report", "object", value);
962
+ return { errors };
963
+ }
964
+ const report = value;
965
+ if (report.criteriaSatisfied !== undefined) {
966
+ if (!Array.isArray(report.criteriaSatisfied)) {
967
+ pushTypeError(errors, pathFor(pathLabel, "criteriaSatisfied"), "array", report.criteriaSatisfied);
968
+ }
969
+ else {
970
+ const criterionIds = new Set();
971
+ for (const [index, item] of report.criteriaSatisfied.entries()) {
972
+ const itemPath = `${pathFor(pathLabel, "criteriaSatisfied")}[${index}]`;
973
+ if (!item || typeof item !== "object" || Array.isArray(item)) {
974
+ pushTypeError(errors, itemPath, "object", item);
975
+ continue;
976
+ }
977
+ const criterion = item;
978
+ if (criterion.id !== undefined && typeof criterion.id !== "string") {
979
+ pushTypeError(errors, `${itemPath}.id`, "string", criterion.id);
980
+ }
981
+ else if (typeof criterion.id === "string" && criterion.id) {
982
+ if (criterionIds.has(criterion.id))
983
+ errors.push(`${itemPath}.id: duplicate normalized criterion id '${criterion.id}'`);
984
+ criterionIds.add(criterion.id);
985
+ }
986
+ if (criterion.status !== "satisfied" && criterion.status !== "not-satisfied" && criterion.status !== "not-applicable") {
987
+ pushTypeError(errors, `${itemPath}.status`, "one of \"satisfied\", \"not-satisfied\", \"not-applicable\"", criterion.status);
988
+ }
989
+ if (typeof criterion.evidence !== "string" || !criterion.evidence.trim())
990
+ pushTypeError(errors, `${itemPath}.evidence`, "non-empty string", criterion.evidence);
991
+ }
992
+ }
993
+ }
994
+ if (report.changedFiles !== undefined)
995
+ validateStringArrayField(errors, report.changedFiles, pathFor(pathLabel, "changedFiles"));
996
+ if (report.testsAddedOrUpdated !== undefined)
997
+ validateStringArrayField(errors, report.testsAddedOrUpdated, pathFor(pathLabel, "testsAddedOrUpdated"));
998
+ if (report.commandsRun !== undefined) {
999
+ if (!Array.isArray(report.commandsRun)) {
1000
+ pushTypeError(errors, pathFor(pathLabel, "commandsRun"), "array", report.commandsRun);
1001
+ }
1002
+ else {
1003
+ for (const [index, item] of report.commandsRun.entries()) {
1004
+ const itemPath = `${pathFor(pathLabel, "commandsRun")}[${index}]`;
1005
+ if (!item || typeof item !== "object" || Array.isArray(item)) {
1006
+ pushTypeError(errors, itemPath, "object", item);
1007
+ continue;
1008
+ }
1009
+ const command = item;
1010
+ if (typeof command.command !== "string" || !command.command.trim())
1011
+ pushTypeError(errors, `${itemPath}.command`, "non-empty string", command.command);
1012
+ if (command.result !== "passed" && command.result !== "failed" && command.result !== "not-run") {
1013
+ pushTypeError(errors, `${itemPath}.result`, "one of \"passed\", \"failed\", \"not-run\"", command.result);
1014
+ }
1015
+ if (typeof command.summary !== "string" || !command.summary.trim())
1016
+ pushTypeError(errors, `${itemPath}.summary`, "non-empty string", command.summary);
1017
+ }
1018
+ }
1019
+ }
1020
+ if (report.validationOutput !== undefined)
1021
+ validateStringArrayField(errors, report.validationOutput, pathFor(pathLabel, "validationOutput"));
1022
+ if (report.residualRisks !== undefined)
1023
+ validateStringArrayField(errors, report.residualRisks, pathFor(pathLabel, "residualRisks"));
1024
+ if (report.noStagedFiles !== undefined && typeof report.noStagedFiles !== "boolean")
1025
+ pushTypeError(errors, pathFor(pathLabel, "noStagedFiles"), "boolean", report.noStagedFiles);
1026
+ if (report.diffSummary !== undefined && (typeof report.diffSummary !== "string" || !report.diffSummary.trim()))
1027
+ pushTypeError(errors, pathFor(pathLabel, "diffSummary"), "non-empty string", report.diffSummary);
1028
+ if (report.reviewFindings !== undefined)
1029
+ validateStringArrayField(errors, report.reviewFindings, pathFor(pathLabel, "reviewFindings"));
1030
+ if (report.manualNotes !== undefined && typeof report.manualNotes !== "string")
1031
+ pushTypeError(errors, pathFor(pathLabel, "manualNotes"), "string", report.manualNotes);
1032
+ if (report.notes !== undefined && typeof report.notes !== "string")
1033
+ pushTypeError(errors, pathFor(pathLabel, "notes"), "string", report.notes);
1034
+ if (errors.length > 0)
1035
+ return { errors };
1036
+ const hasReportField = report.criteriaSatisfied !== undefined
1037
+ || report.changedFiles !== undefined
1038
+ || report.testsAddedOrUpdated !== undefined
1039
+ || report.commandsRun !== undefined
1040
+ || report.validationOutput !== undefined
1041
+ || report.residualRisks !== undefined
1042
+ || report.noStagedFiles !== undefined
1043
+ || report.diffSummary !== undefined
1044
+ || report.manualNotes !== undefined
1045
+ || report.notes !== undefined
1046
+ || report.reviewFindings !== undefined;
1047
+ return hasReportField
1048
+ ? { report, errors }
1049
+ : { errors: [`${pathLabel || "acceptance-report"}: expected at least one acceptance report field`] };
1050
+ }
1051
+ function checkCriteriaSatisfied(criteria, report) {
1052
+ const reports = new Map((report.criteriaSatisfied ?? []).filter((item) => item.id).map((item) => [normalizedToken(item.id), item]));
1053
+ return criteria.filter((criterion) => criterion.severity !== "recommended").map((criterion) => {
1054
+ const item = reports.get(normalizedToken(criterion.id));
1055
+ if (!item)
1056
+ return { id: `criterion:${criterion.id}`, status: "failed", message: `Required criterion '${criterion.id}' was not reported.` };
1057
+ if (item.status !== "satisfied")
1058
+ return { id: `criterion:${criterion.id}`, status: "failed", message: `Required criterion '${criterion.id}' was reported as ${item.status}.` };
1059
+ return { id: `criterion:${criterion.id}`, status: "passed", message: `Required criterion '${criterion.id}' satisfied.` };
1060
+ });
1061
+ }
1062
+ function reportEvidenceStatus(report, kind) {
1063
+ switch (kind) {
1064
+ case "changed-files":
1065
+ if (!isStringArray(report.changedFiles))
1066
+ return "failed";
1067
+ return report.changedFiles.length === 0 ? "not-applicable" : "passed";
1068
+ case "tests-added":
1069
+ if (!isStringArray(report.testsAddedOrUpdated))
1070
+ return "failed";
1071
+ return report.testsAddedOrUpdated.length === 0 ? "not-applicable" : "passed";
1072
+ case "commands-run": return Array.isArray(report.commandsRun) && report.commandsRun.length > 0 ? "passed" : "failed";
1073
+ case "validation-output": return isStringArray(report.validationOutput) && report.validationOutput.length > 0 ? "passed" : "failed";
1074
+ case "residual-risks": return isStringArray(report.residualRisks) ? "passed" : "failed";
1075
+ case "no-staged-files": return report.noStagedFiles === true ? "passed" : "failed";
1076
+ case "diff-summary": return typeof report.diffSummary === "string" && report.diffSummary.trim().length > 0 ? "passed" : "failed";
1077
+ case "review-findings": return isStringArray(report.reviewFindings) ? "passed" : "failed";
1078
+ case "manual-notes": return Boolean((report.manualNotes ?? report.notes)?.trim()) ? "passed" : "failed";
1079
+ }
1080
+ }
1081
+ function checkNoStagedFiles(cwd) {
1082
+ const result = spawnSync("git", ["status", "--short"], { cwd, encoding: "utf-8", windowsHide: true });
1083
+ if (result.status !== 0) {
1084
+ return { id: "no-staged-files", status: "not-applicable", message: "git status unavailable; no staged-files check skipped" };
1085
+ }
1086
+ const staged = result.stdout.split(/\r?\n/).filter((line) => line.length >= 2 && line[0] !== " " && line[0] !== "?");
1087
+ return staged.length === 0
1088
+ ? { id: "no-staged-files", status: "passed", message: "No staged files detected." }
1089
+ : { id: "no-staged-files", status: "failed", message: `Staged files present: ${staged.join(", ")}` };
1090
+ }
1091
+ /** Capture the repository-wide index tree. Throws when Git cannot provide trustworthy evidence. */
1092
+ export function captureStagedIndexBaseline(cwd) {
1093
+ const result = spawnSync("git", ["write-tree"], { cwd, encoding: "utf-8", windowsHide: true });
1094
+ const oid = result.stdout.trim();
1095
+ if (result.status !== 0 || !oid) {
1096
+ const detail = result.stderr.trim();
1097
+ throw new Error(`Unable to capture staged index baseline${detail ? `: ${detail}` : "."}`);
1098
+ }
1099
+ return oid;
1100
+ }
1101
+ function checkStagedIndexUnchanged(cwd, baseline) {
1102
+ try {
1103
+ const terminal = captureStagedIndexBaseline(cwd);
1104
+ return terminal === baseline
1105
+ ? { id: "staged-index-unchanged", status: "passed", message: "Staged index matches the launch baseline." }
1106
+ : { id: "staged-index-unchanged", status: "failed", message: "Staged index changed after launch." };
1107
+ }
1108
+ catch (error) {
1109
+ return { id: "staged-index-unchanged", status: "failed", message: error instanceof Error ? error.message : String(error) };
1110
+ }
1111
+ }
1112
+ function runStructuralChecks(acceptance, report, cwd) {
1113
+ const checks = [];
1114
+ for (const kind of acceptance.evidence) {
1115
+ if (kind === "no-staged-files" && acceptance.preserveStagedIndex)
1116
+ continue;
1117
+ if (kind === "no-staged-files" && report.noStagedFiles === undefined)
1118
+ continue;
1119
+ const status = reportEvidenceStatus(report, kind);
1120
+ checks.push({
1121
+ id: `evidence:${kind}`,
1122
+ status,
1123
+ message: status === "passed"
1124
+ ? `${kind} evidence present.`
1125
+ : status === "not-applicable"
1126
+ ? `${kind} evidence explicitly reported as not applicable.`
1127
+ : `${kind} evidence missing from child report.`,
1128
+ });
1129
+ }
1130
+ if (!acceptance.preserveStagedIndex && acceptance.evidence.includes("no-staged-files"))
1131
+ checks.push(checkNoStagedFiles(cwd));
1132
+ return checks;
1133
+ }
1134
+ function trimOutput(value) {
1135
+ const trimmed = value.trim();
1136
+ if (!trimmed)
1137
+ return undefined;
1138
+ return trimmed.length > 12_000 ? `${trimmed.slice(0, 12_000)}\n...[truncated]` : trimmed;
1139
+ }
1140
+ const SENSITIVE_ENV_KEY_PATTERN = /(?:^|_)(?:TOKEN|SECRET|PASSWORD|PASS|AUTH|CREDENTIAL|COOKIE|SESSION|PRIVATE|API_KEY|ACCESS_KEY)(?:_|$)/i;
1141
+ function effectiveVerifyEnv(env) {
1142
+ const inherited = Object.fromEntries(Object.entries(process.env).flatMap(([key, value]) => {
1143
+ return typeof value === "string" ? [[key, value]] : [];
1144
+ }));
1145
+ return { ...inherited, ...(env ?? {}) };
1146
+ }
1147
+ function verifyRedactionEnv(env) {
1148
+ return Object.fromEntries(Object.entries(effectiveVerifyEnv(env)).filter(([key, value]) => {
1149
+ return value.length >= 4 && SENSITIVE_ENV_KEY_PATTERN.test(key);
1150
+ }));
1151
+ }
1152
+ function redactVerifyEnv(value, env) {
1153
+ let redacted = value;
1154
+ const secrets = [...new Set(Object.values(verifyRedactionEnv(env)).filter(Boolean))].sort((left, right) => right.length - left.length);
1155
+ for (const secret of secrets)
1156
+ redacted = redacted.replaceAll(secret, "[REDACTED]");
1157
+ return redacted;
1158
+ }
1159
+ function uniqueStrings(items) {
1160
+ return unique(items.map((item) => item?.trim()).filter((item) => Boolean(item)));
1161
+ }
1162
+ export function aggregateAcceptanceReport(input) {
1163
+ const childReports = input.results.map((result) => result.acceptance?.childReport).filter((report) => Boolean(report));
1164
+ const blockers = input.results.filter((result) => result.exitCode !== 0 || result.acceptance?.status === "rejected");
1165
+ const successfulChildren = input.results.length > 0 && blockers.length === 0;
1166
+ return {
1167
+ criteriaSatisfied: [
1168
+ { id: "criterion-1", status: successfulChildren ? "satisfied" : "not-satisfied", evidence: successfulChildren ? `All ${input.results.length} dynamic child run(s) completed without child or acceptance blockers.` : "Dynamic fanout produced no accepted child evidence." },
1169
+ { id: "criterion-2", status: successfulChildren ? "satisfied" : "not-satisfied", evidence: successfulChildren ? "Collected child acceptance evidence for aggregate review." : "Dynamic fanout produced no aggregate review evidence." },
1170
+ ...input.results.map((result, index) => ({
1171
+ id: `child-${index + 1}`,
1172
+ status: result.exitCode === 0 && result.acceptance?.status !== "rejected" ? "satisfied" : "not-satisfied",
1173
+ evidence: `${result.agent}: acceptance ${result.acceptance?.status ?? "unreported"}${result.error ? ` (${result.error})` : ""}`,
1174
+ })),
1175
+ ],
1176
+ changedFiles: uniqueStrings(childReports.flatMap((report) => report.changedFiles ?? [])),
1177
+ testsAddedOrUpdated: uniqueStrings(childReports.flatMap((report) => report.testsAddedOrUpdated ?? [])),
1178
+ commandsRun: childReports.flatMap((report) => report.commandsRun ?? []),
1179
+ validationOutput: uniqueStrings(childReports.flatMap((report) => report.validationOutput ?? [])),
1180
+ residualRisks: uniqueStrings([
1181
+ ...childReports.flatMap((report) => report.residualRisks ?? []),
1182
+ ...blockers.map((result) => `${result.agent}: ${result.error ?? "child or acceptance gate failed"}`),
1183
+ ]),
1184
+ noStagedFiles: childReports.length > 0 && childReports.every((report) => report.noStagedFiles === true),
1185
+ reviewFindings: uniqueStrings(childReports.flatMap((report) => report.reviewFindings ?? [])),
1186
+ manualNotes: input.notes ?? `Aggregated acceptance evidence from ${input.results.length} dynamic fanout child run(s).`,
1187
+ notes: input.notes,
1188
+ };
1189
+ }
1190
+ const DEFAULT_VERIFY_TIMEOUT_MS = 120_000;
1191
+ function hash(value) {
1192
+ return createHash("sha256").update(value).digest("hex");
1193
+ }
1194
+ function readVerifyWorkspaceState(cwd) {
1195
+ const repo = spawnSync("git", ["rev-parse", "--show-toplevel"], { cwd, encoding: "utf-8", windowsHide: true });
1196
+ if (repo.status !== 0 || !repo.stdout.trim())
1197
+ return undefined;
1198
+ const repoRoot = fs.realpathSync(repo.stdout.trim());
1199
+ const head = spawnSync("git", ["rev-parse", "HEAD"], { cwd: repoRoot, encoding: "utf-8", windowsHide: true });
1200
+ const diff = spawnSync("git", ["diff", "--binary", "--full-index", "HEAD", "--"], { cwd: repoRoot, encoding: "utf-8", maxBuffer: 50 * 1024 * 1024, windowsHide: true });
1201
+ if (head.status !== 0 || diff.status !== 0 || !head.stdout.trim())
1202
+ return undefined;
1203
+ return {
1204
+ kind: "git-tracked",
1205
+ repoRoot,
1206
+ cwdRelative: path.relative(repoRoot, fs.realpathSync(cwd)) || ".",
1207
+ head: head.stdout.trim(),
1208
+ diffHash: hash(diff.stdout),
1209
+ };
1210
+ }
1211
+ function isCachedVerifyResult(value) {
1212
+ if (!value || typeof value !== "object" || Array.isArray(value))
1213
+ return false;
1214
+ const result = value;
1215
+ return typeof result.id === "string"
1216
+ && typeof result.command === "string"
1217
+ && (typeof result.exitCode === "number" || result.exitCode === null)
1218
+ && (result.status === "passed" || result.status === "failed" || result.status === "timed-out" || result.status === "allowed-failure")
1219
+ && typeof result.durationMs === "number";
1220
+ }
1221
+ const TYPED_VERIFY_OUTPUT_MAX_BYTES = 12_000;
1222
+ /**
1223
+ * A passing `output: "json"` command must print one JSON document on stdout.
1224
+ * The parsed value becomes the run's structured output; anything else turns
1225
+ * the passing run into a failed one so acceptance rejects rather than
1226
+ * silently dropping the verdict. Stdout is already bounded by trimOutput, so a
1227
+ * truncated document is detected by its marker instead of a parse guess.
1228
+ */
1229
+ async function applyTypedVerifyOutput(command, run) {
1230
+ if (run.status !== "passed")
1231
+ return;
1232
+ const stdout = run.stdout ?? "";
1233
+ const fail = (message) => {
1234
+ run.status = "failed";
1235
+ run.structuredOutputError = message;
1236
+ };
1237
+ if (!stdout.trim())
1238
+ return fail("output: \"json\" command printed nothing on stdout.");
1239
+ if (stdout.endsWith("...[truncated]"))
1240
+ return fail(`output: "json" stdout exceeded ${TYPED_VERIFY_OUTPUT_MAX_BYTES} characters and was truncated.`);
1241
+ let value;
1242
+ try {
1243
+ value = JSON.parse(stdout);
1244
+ }
1245
+ catch (error) {
1246
+ return fail(`output: "json" stdout is not valid JSON: ${error instanceof Error ? error.message : String(error)}`);
1247
+ }
1248
+ if (command.schema) {
1249
+ const validation = await validateStructuredOutputValue(command.schema, value);
1250
+ if (validation.status === "invalid")
1251
+ return fail(`output: "json" stdout does not match gate.schema: ${validation.message}`);
1252
+ }
1253
+ run.structuredOutput = value;
1254
+ }
1255
+ /** The first typed verify result on a ledger, if any command produced one. */
1256
+ export function typedVerifyOutput(ledger) {
1257
+ const run = ledger?.verifyRuns?.find((entry) => entry.structuredOutput !== undefined);
1258
+ return run ? { value: run.structuredOutput } : undefined;
1259
+ }
1260
+ async function runMemoizedVerifyCommand(command, defaultCwd, options = {}) {
1261
+ const cwd = command.cwd ? path.resolve(defaultCwd, command.cwd) : defaultCwd;
1262
+ let workspaceState;
1263
+ try {
1264
+ workspaceState = readVerifyWorkspaceState(cwd);
1265
+ }
1266
+ catch {
1267
+ workspaceState = undefined;
1268
+ }
1269
+ // Typed gates read inputs (a report file, a log) that can change without
1270
+ // the tracked tree changing, so their verdicts are never reused.
1271
+ if (!workspaceState || !options.artifactsDir || !options.runId || command.output === "json") {
1272
+ return runVerifyCommand(command, defaultCwd, options);
1273
+ }
1274
+ const envKeys = Object.keys(command.env ?? {}).sort();
1275
+ const envHash = hash(JSON.stringify(Object.fromEntries(Object.entries(effectiveVerifyEnv(command.env)).sort(([left], [right]) => left.localeCompare(right)))));
1276
+ const timeoutMs = command.timeoutMs ?? DEFAULT_VERIFY_TIMEOUT_MS;
1277
+ const cacheKey = hash(JSON.stringify({
1278
+ version: 1,
1279
+ command: command.command,
1280
+ cwdRelative: workspaceState.cwdRelative,
1281
+ envKeys,
1282
+ envHash,
1283
+ timeoutMs,
1284
+ allowFailure: command.allowFailure === true,
1285
+ head: workspaceState.head,
1286
+ diffHash: workspaceState.diffHash,
1287
+ }));
1288
+ const artifactPath = path.join(options.artifactsDir, "acceptance", "verify", options.runId, `${cacheKey}.json`);
1289
+ try {
1290
+ const cached = JSON.parse(fs.readFileSync(artifactPath, "utf-8"));
1291
+ if (cached.cacheKey === cacheKey && isCachedVerifyResult(cached.result)) {
1292
+ return { ...cached.result, id: command.id, command: command.command, cwd, artifactPath, cacheKey, memoized: true, envKeys, envHash, workspaceState };
1293
+ }
1294
+ }
1295
+ catch {
1296
+ // A cache miss or unreadable artifact must not prevent host verification.
1297
+ }
1298
+ const result = await runVerifyCommand(command, defaultCwd, options);
1299
+ const evidenced = { ...result, artifactPath, cacheKey, memoized: false, envKeys, envHash, workspaceState };
1300
+ try {
1301
+ fs.mkdirSync(path.dirname(artifactPath), { recursive: true });
1302
+ fs.writeFileSync(artifactPath, JSON.stringify({
1303
+ version: 1,
1304
+ cacheKey,
1305
+ command: command.command,
1306
+ cwdRelative: workspaceState.cwdRelative,
1307
+ envKeys,
1308
+ envHash,
1309
+ timeoutMs,
1310
+ allowFailure: command.allowFailure === true,
1311
+ workspaceState,
1312
+ result: evidenced,
1313
+ }, null, 2), "utf-8");
1314
+ }
1315
+ catch (error) {
1316
+ evidenced.artifactError = error instanceof Error ? error.message : String(error);
1317
+ delete evidenced.artifactPath;
1318
+ }
1319
+ return evidenced;
1320
+ }
1321
+ /**
1322
+ * On Windows with `shell: true`, cmd.exe parses the command line itself and an
1323
+ * unquoted executable path containing spaces (e.g. `C:\Program Files\...\tool.exe`)
1324
+ * is split at the first space, so cmd tries to run `C:\Program` and fails.
1325
+ *
1326
+ * The command line is ambiguous, so only an unquoted absolute drive path with
1327
+ * a space in a directory component is safe to identify as an executable. That
1328
+ * path is quoted; everything after it is preserved as arguments.
1329
+ *
1330
+ * Commands that already start with a quote, single-token commands, and commands
1331
+ * whose first token already ends in an executable extension are returned
1332
+ * unchanged. Non-Windows platforms pass the command through untouched.
1333
+ */
1334
+ export function quoteExecutableForShell(command, platform = process.platform) {
1335
+ if (platform !== "win32")
1336
+ return command;
1337
+ const trimmed = command.trimStart();
1338
+ if (trimmed.startsWith("\""))
1339
+ return command;
1340
+ const firstToken = trimmed.match(/^\S+/)?.[0];
1341
+ if (/\.(?:exe|bat|cmd|com|ps1)$/i.test(firstToken ?? ""))
1342
+ return command;
1343
+ const match = trimmed.match(/^([A-Za-z]:\\[^"<>|&*?\r\n]*?\s[^"<>|&*?\r\n]*?\\[^"<>|&*?\r\n]*?\.(?:exe|bat|cmd|com|ps1))(?=\s|$)/i);
1344
+ const executable = match?.[1];
1345
+ if (executable && /\s/.test(executable) && !/[A-Za-z]:\\/.test(executable.slice(3))) {
1346
+ const rest = trimmed.slice(executable.length);
1347
+ const leading = command.slice(0, command.length - trimmed.length);
1348
+ return `${leading}"${executable}"${rest}`;
1349
+ }
1350
+ const extensionlessSpacedFilenameMatch = trimmed.match(/^([A-Za-z]:\\[^"<>|&*?\r\n]*?\s[^"<>|&*?\r\n]*?)(?=\s+--|$)/i);
1351
+ const extensionlessSpacedFilename = extensionlessSpacedFilenameMatch?.[1];
1352
+ if (extensionlessSpacedFilename && /\s/.test(extensionlessSpacedFilename.slice(0, extensionlessSpacedFilename.lastIndexOf("\\"))) && !/[A-Za-z]:\\/.test(extensionlessSpacedFilename.slice(3))) {
1353
+ const rest = trimmed.slice(extensionlessSpacedFilename.length);
1354
+ const leading = command.slice(0, command.length - trimmed.length);
1355
+ return `${leading}"${extensionlessSpacedFilename}"${rest}`;
1356
+ }
1357
+ const extensionlessMatch = trimmed.match(/^([A-Za-z]:\\[^"<>|&*?\r\n]*?\s[^"<>|&*?\r\n]*?\\[^"<>|&*?\s\r\n]+)(?=\s|$)/i);
1358
+ const extensionlessExecutable = extensionlessMatch?.[1];
1359
+ if (extensionlessExecutable && /\s/.test(extensionlessExecutable) && !/[A-Za-z]:\\/.test(extensionlessExecutable.slice(3)) && !/\s/.test(extensionlessExecutable.slice(extensionlessExecutable.lastIndexOf("\\") + 1))) {
1360
+ const rest = trimmed.slice(extensionlessExecutable.length);
1361
+ const leading = command.slice(0, command.length - trimmed.length);
1362
+ return `${leading}"${extensionlessExecutable}"${rest}`;
1363
+ }
1364
+ return command;
1365
+ }
1366
+ function runVerifyCommand(command, defaultCwd, options = {}) {
1367
+ return new Promise((resolve) => {
1368
+ const startedAt = Date.now();
1369
+ const cwd = command.cwd ? path.resolve(defaultCwd, command.cwd) : defaultCwd;
1370
+ let stdout = "";
1371
+ let stderr = "";
1372
+ let timedOut = false;
1373
+ let settled = false;
1374
+ let hardKill;
1375
+ const child = spawn(quoteExecutableForShell(command.command), {
1376
+ cwd,
1377
+ env: effectiveVerifyEnv(command.env),
1378
+ shell: true,
1379
+ stdio: ["ignore", "pipe", "pipe"],
1380
+ windowsHide: true,
1381
+ });
1382
+ const finish = (result) => {
1383
+ if (settled)
1384
+ return;
1385
+ settled = true;
1386
+ clearTimeout(timeout);
1387
+ if (hardKill)
1388
+ clearTimeout(hardKill);
1389
+ options.signal?.removeEventListener("abort", abortVerification);
1390
+ resolve({
1391
+ id: command.id,
1392
+ command: command.command,
1393
+ cwd,
1394
+ durationMs: Date.now() - startedAt,
1395
+ ...result,
1396
+ });
1397
+ };
1398
+ const abortVerification = () => {
1399
+ if (settled || timedOut)
1400
+ return;
1401
+ timedOut = true;
1402
+ child.kill("SIGTERM");
1403
+ hardKill = setTimeout(() => {
1404
+ child.kill("SIGKILL");
1405
+ finish({
1406
+ exitCode: null,
1407
+ status: "timed-out",
1408
+ stdout: trimOutput(redactVerifyEnv(stdout, command.env)),
1409
+ stderr: trimOutput(redactVerifyEnv(stderr || options.abortMessage || "Acceptance verification timed out.", command.env)),
1410
+ });
1411
+ }, 1000);
1412
+ hardKill.unref?.();
1413
+ };
1414
+ const timeout = setTimeout(abortVerification, command.timeoutMs ?? DEFAULT_VERIFY_TIMEOUT_MS);
1415
+ timeout.unref?.();
1416
+ if (options.signal?.aborted)
1417
+ abortVerification();
1418
+ else
1419
+ options.signal?.addEventListener("abort", abortVerification, { once: true });
1420
+ child.stdout.on("data", (chunk) => {
1421
+ stdout += chunk.toString();
1422
+ });
1423
+ child.stderr.on("data", (chunk) => {
1424
+ stderr += chunk.toString();
1425
+ });
1426
+ child.on("close", (exitCode) => {
1427
+ const passed = exitCode === 0 && !timedOut;
1428
+ finish({
1429
+ exitCode,
1430
+ status: timedOut ? "timed-out" : passed ? "passed" : command.allowFailure ? "allowed-failure" : "failed",
1431
+ stdout: trimOutput(redactVerifyEnv(stdout, command.env)),
1432
+ stderr: trimOutput(redactVerifyEnv(stderr || (timedOut ? options.abortMessage ?? "" : ""), command.env)),
1433
+ });
1434
+ });
1435
+ child.on("error", (error) => {
1436
+ finish({
1437
+ exitCode: timedOut ? null : 1,
1438
+ status: timedOut ? "timed-out" : command.allowFailure ? "allowed-failure" : "failed",
1439
+ stderr: timedOut
1440
+ ? trimOutput(redactVerifyEnv(stderr || options.abortMessage || "Acceptance verification timed out.", command.env))
1441
+ : redactVerifyEnv(error instanceof Error ? error.message : String(error), command.env),
1442
+ });
1443
+ });
1444
+ });
1445
+ }
1446
+ export async function evaluateAcceptance(input) {
1447
+ const acceptance = input.acceptance;
1448
+ const initialStatus = acceptance.level === "none" ? "not-required" : "claimed";
1449
+ const ledger = {
1450
+ status: initialStatus,
1451
+ evidenceStatus: initialStatus,
1452
+ explicit: acceptance.explicit,
1453
+ effectiveAcceptance: acceptance,
1454
+ inferredReason: acceptance.inferredReason,
1455
+ criteria: acceptance.criteria,
1456
+ runtimeChecks: [],
1457
+ verifyRuns: [],
1458
+ };
1459
+ if (acceptance.level === "none")
1460
+ return ledger;
1461
+ if (input.watchdog) {
1462
+ const unresolved = unresolvedChildWatchdogBlockers(input.watchdog);
1463
+ ledger.runtimeChecks.push(unresolved.length
1464
+ ? { id: "watchdog-blocker", status: "failed", message: "Unresolved watchdog blocker (details are available in child watchdog status)." }
1465
+ : { id: "watchdog-blocker", status: "passed", message: "No unresolved watchdog blockers." });
1466
+ }
1467
+ const parsed = input.reportError
1468
+ ? { error: input.reportError }
1469
+ : input.report !== undefined
1470
+ ? (() => {
1471
+ const validation = validateAcceptanceReport(input.report);
1472
+ return validation.report
1473
+ ? { report: validation.report }
1474
+ : { error: `Failed to parse acceptance-report: Invalid acceptance-report: ${validation.errors.join("; ")}`, malformed: true };
1475
+ })()
1476
+ : parseAcceptanceReportSources(input.output, input.fileOutput);
1477
+ const durableFileOutput = input.fileOutput?.authoritative && input.fileOutput.durable ? input.fileOutput : undefined;
1478
+ if (parsed.malformed && parsed.sourcePath && durableFileOutput) {
1479
+ ledger.recovery = {
1480
+ status: "available-for-review",
1481
+ reason: "acceptance-metadata-rejected",
1482
+ reportPath: parsed.sourcePath,
1483
+ reportHash: hash(durableFileOutput.content),
1484
+ };
1485
+ }
1486
+ const needsReport = acceptanceRequiresChildReport(acceptance);
1487
+ if (parsed.report) {
1488
+ ledger.childReport = parsed.report;
1489
+ ledger.status = "attested";
1490
+ ledger.evidenceStatus = "attested";
1491
+ }
1492
+ else if (!input.reportOptional || needsReport || parsed.error !== ACCEPTANCE_REPORT_NOT_FOUND) {
1493
+ ledger.childReportParseError = parsed.error;
1494
+ ledger.runtimeChecks.push({ id: "attestation", status: "failed", message: parsed.error ?? "Structured acceptance report missing." });
1495
+ if (ledger.recovery) {
1496
+ ledger.status = "rejected";
1497
+ ledger.evidenceStatus = "rejected";
1498
+ }
1499
+ if (!input.reportOptional) {
1500
+ ledger.status = "rejected";
1501
+ ledger.evidenceStatus = "rejected";
1502
+ return ledger;
1503
+ }
1504
+ }
1505
+ else {
1506
+ ledger.childReportParseError = parsed.error;
1507
+ }
1508
+ if (parsed.report && LEVEL_RANK[acceptance.level] >= LEVEL_RANK.checked) {
1509
+ ledger.runtimeChecks = [
1510
+ ...ledger.runtimeChecks,
1511
+ ...checkCriteriaSatisfied(acceptance.criteria, parsed.report),
1512
+ ...runStructuralChecks(acceptance, parsed.report, input.cwd),
1513
+ ];
1514
+ if (!ledger.runtimeChecks.some((check) => check.status === "failed")) {
1515
+ ledger.status = "checked";
1516
+ ledger.evidenceStatus = "checked";
1517
+ }
1518
+ }
1519
+ if (LEVEL_RANK[acceptance.level] >= LEVEL_RANK.verified && (acceptance.level === "verified" || acceptance.verify.length > 0)) {
1520
+ if (acceptance.level === "verified" && acceptance.verify.length === 0) {
1521
+ ledger.runtimeChecks.push({ id: "verification-config", status: "failed", message: "verified acceptance requires runtime verify commands." });
1522
+ ledger.status = "rejected";
1523
+ ledger.evidenceStatus = "rejected";
1524
+ }
1525
+ else {
1526
+ ledger.verifyRuns = [];
1527
+ for (const command of acceptance.verify) {
1528
+ const run = await runMemoizedVerifyCommand(command, input.cwd, {
1529
+ signal: input.signal,
1530
+ abortMessage: input.abortMessage,
1531
+ artifactsDir: input.artifactsDir,
1532
+ runId: input.runId,
1533
+ });
1534
+ if (command.output === "json")
1535
+ await applyTypedVerifyOutput(command, run);
1536
+ ledger.verifyRuns.push(run);
1537
+ if (input.signal?.aborted)
1538
+ break;
1539
+ }
1540
+ if (ledger.verifyRuns.some((run) => run.status === "failed" || run.status === "timed-out")) {
1541
+ ledger.status = "rejected";
1542
+ ledger.evidenceStatus = "rejected";
1543
+ }
1544
+ else if (!ledger.runtimeChecks.some((check) => check.status === "failed")) {
1545
+ ledger.status = "verified";
1546
+ ledger.evidenceStatus = "verified";
1547
+ }
1548
+ }
1549
+ }
1550
+ if (acceptance.preserveStagedIndex) {
1551
+ ledger.runtimeChecks.push(input.stagedIndexBaseline
1552
+ ? checkStagedIndexUnchanged(input.cwd, input.stagedIndexBaseline)
1553
+ : { id: "staged-index-unchanged", status: "failed", message: "Staged index launch baseline is unavailable." });
1554
+ }
1555
+ if (ledger.status === "rejected" || ledger.runtimeChecks.some((check) => check.status === "failed")) {
1556
+ ledger.status = "rejected";
1557
+ ledger.evidenceStatus = "rejected";
1558
+ return ledger;
1559
+ }
1560
+ if (ledger.status === "claimed") {
1561
+ ledger.status = acceptance.level === "verified" ? "verified" : acceptance.level;
1562
+ ledger.evidenceStatus = ledger.status;
1563
+ }
1564
+ if (acceptance.review) {
1565
+ if (input.reviewResult?.status === "reviewed") {
1566
+ ledger.reviewResult = input.reviewResult;
1567
+ ledger.status = "reviewed";
1568
+ }
1569
+ else if (input.reviewResult?.status === "blockers") {
1570
+ ledger.reviewResult = input.reviewResult;
1571
+ ledger.status = "rejected";
1572
+ }
1573
+ else if (acceptance.review.required !== false) {
1574
+ ledger.reviewResult = input.reviewResult ?? {
1575
+ status: "review-required",
1576
+ findings: [{
1577
+ severity: "non-blocking",
1578
+ issue: "Independent review has not been supplied.",
1579
+ rationale: "The run cannot be marked reviewed from child evidence alone.",
1580
+ }],
1581
+ };
1582
+ ledger.status = "review-required";
1583
+ }
1584
+ }
1585
+ return ledger;
1586
+ }
1587
+ export function buildSkippedAcceptanceLedger(acceptance, input) {
1588
+ const status = acceptance.level === "none" ? "not-required" : "rejected";
1589
+ return {
1590
+ status,
1591
+ evidenceStatus: status,
1592
+ explicit: acceptance.explicit,
1593
+ effectiveAcceptance: acceptance,
1594
+ inferredReason: acceptance.inferredReason,
1595
+ criteria: acceptance.criteria,
1596
+ runtimeChecks: acceptance.level === "none"
1597
+ ? []
1598
+ : [{ id: input.id, status: "failed", message: input.message }],
1599
+ verifyRuns: [],
1600
+ };
1601
+ }
1602
+ export function acceptanceFailureMessage(ledger) {
1603
+ if (ledger.status !== "rejected")
1604
+ return undefined;
1605
+ const failedCheck = ledger.runtimeChecks.find((check) => check.status === "failed");
1606
+ if (failedCheck)
1607
+ return `Acceptance rejected: ${failedCheck.message}`;
1608
+ const failedVerify = ledger.verifyRuns.find((run) => run.status === "failed" || run.status === "timed-out");
1609
+ if (failedVerify?.structuredOutputError)
1610
+ return `Acceptance verification '${failedVerify.id}' failed: ${failedVerify.structuredOutputError}`;
1611
+ if (failedVerify)
1612
+ return `Acceptance verification '${failedVerify.id}' ${failedVerify.status}.`;
1613
+ if (ledger.reviewResult?.status === "blockers")
1614
+ return "Acceptance review found blockers.";
1615
+ return "Acceptance rejected.";
1616
+ }
1617
+ //# sourceMappingURL=acceptance.js.map