pulseed 0.6.3 → 0.6.5

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 (615) hide show
  1. package/dist/adapters/datasources/artifact-metric-datasource.d.ts +11 -1
  2. package/dist/adapters/datasources/artifact-metric-datasource.d.ts.map +1 -1
  3. package/dist/adapters/datasources/artifact-metric-datasource.js +256 -9
  4. package/dist/adapters/datasources/artifact-metric-datasource.js.map +1 -1
  5. package/dist/base/config/global-config.d.ts +7 -4
  6. package/dist/base/config/global-config.d.ts.map +1 -1
  7. package/dist/base/config/global-config.js +3 -1
  8. package/dist/base/config/global-config.js.map +1 -1
  9. package/dist/base/protocol/exact-protocol.d.ts +47 -0
  10. package/dist/base/protocol/exact-protocol.d.ts.map +1 -0
  11. package/dist/base/protocol/exact-protocol.js +175 -0
  12. package/dist/base/protocol/exact-protocol.js.map +1 -0
  13. package/dist/base/types/core.d.ts +1 -1
  14. package/dist/base/types/core.d.ts.map +1 -1
  15. package/dist/base/types/core.js +1 -0
  16. package/dist/base/types/core.js.map +1 -1
  17. package/dist/base/utils/paths.d.ts +5 -0
  18. package/dist/base/utils/paths.d.ts.map +1 -1
  19. package/dist/base/utils/paths.js +7 -0
  20. package/dist/base/utils/paths.js.map +1 -1
  21. package/dist/base/utils/workspace-path.d.ts +6 -0
  22. package/dist/base/utils/workspace-path.d.ts.map +1 -0
  23. package/dist/base/utils/workspace-path.js +24 -0
  24. package/dist/base/utils/workspace-path.js.map +1 -0
  25. package/dist/base/utils/workspace-root.d.ts +6 -0
  26. package/dist/base/utils/workspace-root.d.ts.map +1 -0
  27. package/dist/base/utils/workspace-root.js +87 -0
  28. package/dist/base/utils/workspace-root.js.map +1 -0
  29. package/dist/index.d.ts +4 -0
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +2 -0
  32. package/dist/index.js.map +1 -1
  33. package/dist/interface/chat/chat-event-state.d.ts +2 -0
  34. package/dist/interface/chat/chat-event-state.d.ts.map +1 -1
  35. package/dist/interface/chat/chat-event-state.js +22 -41
  36. package/dist/interface/chat/chat-event-state.js.map +1 -1
  37. package/dist/interface/chat/chat-events.d.ts +15 -1
  38. package/dist/interface/chat/chat-events.d.ts.map +1 -1
  39. package/dist/interface/chat/chat-history.d.ts +3816 -192
  40. package/dist/interface/chat/chat-history.d.ts.map +1 -1
  41. package/dist/interface/chat/chat-history.js +529 -5
  42. package/dist/interface/chat/chat-history.js.map +1 -1
  43. package/dist/interface/chat/chat-runner-commands.d.ts +2 -0
  44. package/dist/interface/chat/chat-runner-commands.d.ts.map +1 -1
  45. package/dist/interface/chat/chat-runner-commands.js +83 -22
  46. package/dist/interface/chat/chat-runner-commands.js.map +1 -1
  47. package/dist/interface/chat/chat-runner-contracts.d.ts +5 -1
  48. package/dist/interface/chat/chat-runner-contracts.d.ts.map +1 -1
  49. package/dist/interface/chat/chat-runner-event-bridge.d.ts +13 -1
  50. package/dist/interface/chat/chat-runner-event-bridge.d.ts.map +1 -1
  51. package/dist/interface/chat/chat-runner-event-bridge.js +51 -3
  52. package/dist/interface/chat/chat-runner-event-bridge.js.map +1 -1
  53. package/dist/interface/chat/chat-runner-routes.d.ts +5 -17
  54. package/dist/interface/chat/chat-runner-routes.d.ts.map +1 -1
  55. package/dist/interface/chat/chat-runner-routes.js +80 -51
  56. package/dist/interface/chat/chat-runner-routes.js.map +1 -1
  57. package/dist/interface/chat/chat-runner-runtime.d.ts.map +1 -1
  58. package/dist/interface/chat/chat-runner-runtime.js +4 -0
  59. package/dist/interface/chat/chat-runner-runtime.js.map +1 -1
  60. package/dist/interface/chat/chat-runner.d.ts +7 -1
  61. package/dist/interface/chat/chat-runner.d.ts.map +1 -1
  62. package/dist/interface/chat/chat-runner.js +135 -49
  63. package/dist/interface/chat/chat-runner.js.map +1 -1
  64. package/dist/interface/chat/chat-session-store.d.ts +3 -0
  65. package/dist/interface/chat/chat-session-store.d.ts.map +1 -1
  66. package/dist/interface/chat/chat-session-store.js +12 -0
  67. package/dist/interface/chat/chat-session-store.js.map +1 -1
  68. package/dist/interface/chat/cross-platform-session.d.ts +15 -0
  69. package/dist/interface/chat/cross-platform-session.d.ts.map +1 -1
  70. package/dist/interface/chat/cross-platform-session.js +260 -42
  71. package/dist/interface/chat/cross-platform-session.js.map +1 -1
  72. package/dist/interface/chat/failure-recovery.d.ts.map +1 -1
  73. package/dist/interface/chat/failure-recovery.js +15 -1
  74. package/dist/interface/chat/failure-recovery.js.map +1 -1
  75. package/dist/interface/chat/freeform-route-classifier.d.ts +4 -4
  76. package/dist/interface/chat/ingress-router.d.ts +3 -0
  77. package/dist/interface/chat/ingress-router.d.ts.map +1 -1
  78. package/dist/interface/chat/ingress-router.js +3 -0
  79. package/dist/interface/chat/ingress-router.js.map +1 -1
  80. package/dist/interface/chat/model-request-builder.d.ts +37 -0
  81. package/dist/interface/chat/model-request-builder.d.ts.map +1 -0
  82. package/dist/interface/chat/model-request-builder.js +76 -0
  83. package/dist/interface/chat/model-request-builder.js.map +1 -0
  84. package/dist/interface/chat/turn-context.d.ts +200 -0
  85. package/dist/interface/chat/turn-context.d.ts.map +1 -0
  86. package/dist/interface/chat/turn-context.js +249 -0
  87. package/dist/interface/chat/turn-context.js.map +1 -0
  88. package/dist/interface/chat/turn-protocol.d.ts +35 -0
  89. package/dist/interface/chat/turn-protocol.d.ts.map +1 -0
  90. package/dist/interface/chat/turn-protocol.js +27 -0
  91. package/dist/interface/chat/turn-protocol.js.map +1 -0
  92. package/dist/interface/chat/user-input.d.ts +55 -0
  93. package/dist/interface/chat/user-input.d.ts.map +1 -0
  94. package/dist/interface/chat/user-input.js +52 -0
  95. package/dist/interface/chat/user-input.js.map +1 -0
  96. package/dist/interface/cli/cli-command-registry.d.ts +1 -1
  97. package/dist/interface/cli/cli-command-registry.d.ts.map +1 -1
  98. package/dist/interface/cli/cli-command-registry.js +12 -16
  99. package/dist/interface/cli/cli-command-registry.js.map +1 -1
  100. package/dist/interface/cli/cli-runner.js +0 -0
  101. package/dist/interface/cli/commands/daemon-shared.d.ts +12 -1
  102. package/dist/interface/cli/commands/daemon-shared.d.ts.map +1 -1
  103. package/dist/interface/cli/commands/daemon-shared.js +26 -4
  104. package/dist/interface/cli/commands/daemon-shared.js.map +1 -1
  105. package/dist/interface/cli/commands/daemon.d.ts.map +1 -1
  106. package/dist/interface/cli/commands/daemon.js +66 -8
  107. package/dist/interface/cli/commands/daemon.js.map +1 -1
  108. package/dist/interface/cli/commands/doctor.d.ts +1 -1
  109. package/dist/interface/cli/commands/doctor.d.ts.map +1 -1
  110. package/dist/interface/cli/commands/doctor.js +61 -29
  111. package/dist/interface/cli/commands/doctor.js.map +1 -1
  112. package/dist/interface/cli/commands/goal-dispatch.d.ts.map +1 -1
  113. package/dist/interface/cli/commands/goal-dispatch.js +10 -6
  114. package/dist/interface/cli/commands/goal-dispatch.js.map +1 -1
  115. package/dist/interface/cli/commands/goal-utils.d.ts.map +1 -1
  116. package/dist/interface/cli/commands/goal-utils.js +3 -5
  117. package/dist/interface/cli/commands/goal-utils.js.map +1 -1
  118. package/dist/interface/cli/commands/run.d.ts.map +1 -1
  119. package/dist/interface/cli/commands/run.js +50 -0
  120. package/dist/interface/cli/commands/run.js.map +1 -1
  121. package/dist/interface/cli/setup.d.ts +1 -1
  122. package/dist/interface/cli/setup.d.ts.map +1 -1
  123. package/dist/interface/cli/setup.js +4 -3
  124. package/dist/interface/cli/setup.js.map +1 -1
  125. package/dist/interface/cli/utils/loop-runner.d.ts +1 -0
  126. package/dist/interface/cli/utils/loop-runner.d.ts.map +1 -1
  127. package/dist/interface/cli/utils/loop-runner.js +12 -3
  128. package/dist/interface/cli/utils/loop-runner.js.map +1 -1
  129. package/dist/interface/tui/app.d.ts +6 -1
  130. package/dist/interface/tui/app.d.ts.map +1 -1
  131. package/dist/interface/tui/app.js +29 -12
  132. package/dist/interface/tui/app.js.map +1 -1
  133. package/dist/interface/tui/bash-mode.d.ts.map +1 -1
  134. package/dist/interface/tui/bash-mode.js +2 -9
  135. package/dist/interface/tui/bash-mode.js.map +1 -1
  136. package/dist/interface/tui/chat/viewport.d.ts.map +1 -1
  137. package/dist/interface/tui/chat/viewport.js +57 -11
  138. package/dist/interface/tui/chat/viewport.js.map +1 -1
  139. package/dist/interface/tui/entry-deps.d.ts +6 -1
  140. package/dist/interface/tui/entry-deps.d.ts.map +1 -1
  141. package/dist/interface/tui/entry-deps.js +3 -0
  142. package/dist/interface/tui/entry-deps.js.map +1 -1
  143. package/dist/interface/tui/entry.d.ts.map +1 -1
  144. package/dist/interface/tui/entry.js +6 -2
  145. package/dist/interface/tui/entry.js.map +1 -1
  146. package/dist/interface/tui/input-action.d.ts.map +1 -1
  147. package/dist/interface/tui/input-action.js +3 -2
  148. package/dist/interface/tui/input-action.js.map +1 -1
  149. package/dist/interface/tui/intent-recognizer.d.ts.map +1 -1
  150. package/dist/interface/tui/intent-recognizer.js +21 -33
  151. package/dist/interface/tui/intent-recognizer.js.map +1 -1
  152. package/dist/orchestrator/execution/adapter-layer.d.ts +10 -1
  153. package/dist/orchestrator/execution/adapter-layer.d.ts.map +1 -1
  154. package/dist/orchestrator/execution/adapter-layer.js.map +1 -1
  155. package/dist/orchestrator/execution/agent-loop/agent-loop-command-classifier.d.ts +12 -1
  156. package/dist/orchestrator/execution/agent-loop/agent-loop-command-classifier.d.ts.map +1 -1
  157. package/dist/orchestrator/execution/agent-loop/agent-loop-command-classifier.js +16 -31
  158. package/dist/orchestrator/execution/agent-loop/agent-loop-command-classifier.js.map +1 -1
  159. package/dist/orchestrator/execution/agent-loop/agent-loop-compaction-record.d.ts +75 -0
  160. package/dist/orchestrator/execution/agent-loop/agent-loop-compaction-record.d.ts.map +1 -0
  161. package/dist/orchestrator/execution/agent-loop/agent-loop-compaction-record.js +10 -0
  162. package/dist/orchestrator/execution/agent-loop/agent-loop-compaction-record.js.map +1 -0
  163. package/dist/orchestrator/execution/agent-loop/agent-loop-compactor.d.ts +3 -2
  164. package/dist/orchestrator/execution/agent-loop/agent-loop-compactor.d.ts.map +1 -1
  165. package/dist/orchestrator/execution/agent-loop/agent-loop-compactor.js +185 -22
  166. package/dist/orchestrator/execution/agent-loop/agent-loop-compactor.js.map +1 -1
  167. package/dist/orchestrator/execution/agent-loop/agent-loop-context-assembler.d.ts.map +1 -1
  168. package/dist/orchestrator/execution/agent-loop/agent-loop-context-assembler.js +18 -1
  169. package/dist/orchestrator/execution/agent-loop/agent-loop-context-assembler.js.map +1 -1
  170. package/dist/orchestrator/execution/agent-loop/agent-loop-default-profile.d.ts.map +1 -1
  171. package/dist/orchestrator/execution/agent-loop/agent-loop-default-profile.js +7 -1
  172. package/dist/orchestrator/execution/agent-loop/agent-loop-default-profile.js.map +1 -1
  173. package/dist/orchestrator/execution/agent-loop/agent-loop-events.d.ts +8 -1
  174. package/dist/orchestrator/execution/agent-loop/agent-loop-events.d.ts.map +1 -1
  175. package/dist/orchestrator/execution/agent-loop/agent-loop-events.js.map +1 -1
  176. package/dist/orchestrator/execution/agent-loop/agent-loop-history.d.ts +3 -1
  177. package/dist/orchestrator/execution/agent-loop/agent-loop-history.d.ts.map +1 -1
  178. package/dist/orchestrator/execution/agent-loop/agent-loop-history.js +12 -3
  179. package/dist/orchestrator/execution/agent-loop/agent-loop-history.js.map +1 -1
  180. package/dist/orchestrator/execution/agent-loop/agent-loop-model-client.d.ts.map +1 -1
  181. package/dist/orchestrator/execution/agent-loop/agent-loop-model-client.js +7 -1
  182. package/dist/orchestrator/execution/agent-loop/agent-loop-model-client.js.map +1 -1
  183. package/dist/orchestrator/execution/agent-loop/agent-loop-model.d.ts +37 -0
  184. package/dist/orchestrator/execution/agent-loop/agent-loop-model.d.ts.map +1 -1
  185. package/dist/orchestrator/execution/agent-loop/agent-loop-model.js +21 -0
  186. package/dist/orchestrator/execution/agent-loop/agent-loop-model.js.map +1 -1
  187. package/dist/orchestrator/execution/agent-loop/agent-loop-prompts.d.ts.map +1 -1
  188. package/dist/orchestrator/execution/agent-loop/agent-loop-prompts.js +1 -0
  189. package/dist/orchestrator/execution/agent-loop/agent-loop-prompts.js.map +1 -1
  190. package/dist/orchestrator/execution/agent-loop/agent-loop-result.d.ts +19 -11
  191. package/dist/orchestrator/execution/agent-loop/agent-loop-result.d.ts.map +1 -1
  192. package/dist/orchestrator/execution/agent-loop/agent-loop-session-state.d.ts +4 -0
  193. package/dist/orchestrator/execution/agent-loop/agent-loop-session-state.d.ts.map +1 -1
  194. package/dist/orchestrator/execution/agent-loop/agent-loop-session-state.js +135 -0
  195. package/dist/orchestrator/execution/agent-loop/agent-loop-session-state.js.map +1 -1
  196. package/dist/orchestrator/execution/agent-loop/agent-loop-tool-runtime.d.ts +3 -2
  197. package/dist/orchestrator/execution/agent-loop/agent-loop-tool-runtime.d.ts.map +1 -1
  198. package/dist/orchestrator/execution/agent-loop/agent-loop-tool-runtime.js +68 -61
  199. package/dist/orchestrator/execution/agent-loop/agent-loop-tool-runtime.js.map +1 -1
  200. package/dist/orchestrator/execution/agent-loop/agent-loop-turn-context.d.ts +3 -1
  201. package/dist/orchestrator/execution/agent-loop/agent-loop-turn-context.d.ts.map +1 -1
  202. package/dist/orchestrator/execution/agent-loop/agent-loop-turn-context.js.map +1 -1
  203. package/dist/orchestrator/execution/agent-loop/agent-timeline.d.ts +12 -1
  204. package/dist/orchestrator/execution/agent-loop/agent-timeline.d.ts.map +1 -1
  205. package/dist/orchestrator/execution/agent-loop/agent-timeline.js +19 -56
  206. package/dist/orchestrator/execution/agent-loop/agent-timeline.js.map +1 -1
  207. package/dist/orchestrator/execution/agent-loop/anthropic-messages-agent-loop-model-client.d.ts.map +1 -1
  208. package/dist/orchestrator/execution/agent-loop/anthropic-messages-agent-loop-model-client.js +8 -2
  209. package/dist/orchestrator/execution/agent-loop/anthropic-messages-agent-loop-model-client.js.map +1 -1
  210. package/dist/orchestrator/execution/agent-loop/bounded-agent-loop-runner.d.ts +14 -0
  211. package/dist/orchestrator/execution/agent-loop/bounded-agent-loop-runner.d.ts.map +1 -1
  212. package/dist/orchestrator/execution/agent-loop/bounded-agent-loop-runner.js +440 -81
  213. package/dist/orchestrator/execution/agent-loop/bounded-agent-loop-runner.js.map +1 -1
  214. package/dist/orchestrator/execution/agent-loop/chat-agent-loop-runner.d.ts +1 -1
  215. package/dist/orchestrator/execution/agent-loop/chat-agent-loop-runner.d.ts.map +1 -1
  216. package/dist/orchestrator/execution/agent-loop/chat-agent-loop-runner.js +80 -12
  217. package/dist/orchestrator/execution/agent-loop/chat-agent-loop-runner.js.map +1 -1
  218. package/dist/orchestrator/execution/agent-loop/chat-display-output.d.ts +1 -0
  219. package/dist/orchestrator/execution/agent-loop/chat-display-output.d.ts.map +1 -1
  220. package/dist/orchestrator/execution/agent-loop/chat-display-output.js +3 -1
  221. package/dist/orchestrator/execution/agent-loop/chat-display-output.js.map +1 -1
  222. package/dist/orchestrator/execution/agent-loop/index.d.ts +3 -0
  223. package/dist/orchestrator/execution/agent-loop/index.d.ts.map +1 -1
  224. package/dist/orchestrator/execution/agent-loop/index.js +3 -0
  225. package/dist/orchestrator/execution/agent-loop/index.js.map +1 -1
  226. package/dist/orchestrator/execution/agent-loop/openai-responses-agent-loop-model-client.d.ts +1 -0
  227. package/dist/orchestrator/execution/agent-loop/openai-responses-agent-loop-model-client.d.ts.map +1 -1
  228. package/dist/orchestrator/execution/agent-loop/openai-responses-agent-loop-model-client.js +51 -9
  229. package/dist/orchestrator/execution/agent-loop/openai-responses-agent-loop-model-client.js.map +1 -1
  230. package/dist/orchestrator/execution/agent-loop/response-item-tool-router.d.ts +20 -0
  231. package/dist/orchestrator/execution/agent-loop/response-item-tool-router.d.ts.map +1 -0
  232. package/dist/orchestrator/execution/agent-loop/response-item-tool-router.js +181 -0
  233. package/dist/orchestrator/execution/agent-loop/response-item-tool-router.js.map +1 -0
  234. package/dist/orchestrator/execution/agent-loop/response-item.d.ts +805 -0
  235. package/dist/orchestrator/execution/agent-loop/response-item.d.ts.map +1 -0
  236. package/dist/orchestrator/execution/agent-loop/response-item.js +104 -0
  237. package/dist/orchestrator/execution/agent-loop/response-item.js.map +1 -0
  238. package/dist/orchestrator/execution/agent-loop/task-agent-loop-context.d.ts +7 -2
  239. package/dist/orchestrator/execution/agent-loop/task-agent-loop-context.d.ts.map +1 -1
  240. package/dist/orchestrator/execution/agent-loop/task-agent-loop-context.js +33 -1
  241. package/dist/orchestrator/execution/agent-loop/task-agent-loop-context.js.map +1 -1
  242. package/dist/orchestrator/execution/agent-loop/task-agent-loop-result.d.ts +32 -17
  243. package/dist/orchestrator/execution/agent-loop/task-agent-loop-result.d.ts.map +1 -1
  244. package/dist/orchestrator/execution/agent-loop/task-agent-loop-result.js +174 -16
  245. package/dist/orchestrator/execution/agent-loop/task-agent-loop-result.js.map +1 -1
  246. package/dist/orchestrator/execution/agent-loop/task-agent-loop-runner.d.ts +2 -0
  247. package/dist/orchestrator/execution/agent-loop/task-agent-loop-runner.d.ts.map +1 -1
  248. package/dist/orchestrator/execution/agent-loop/task-agent-loop-runner.js +10 -4
  249. package/dist/orchestrator/execution/agent-loop/task-agent-loop-runner.js.map +1 -1
  250. package/dist/orchestrator/execution/agent-loop/task-agent-loop-verification.d.ts +0 -1
  251. package/dist/orchestrator/execution/agent-loop/task-agent-loop-verification.d.ts.map +1 -1
  252. package/dist/orchestrator/execution/agent-loop/task-agent-loop-verification.js +7 -87
  253. package/dist/orchestrator/execution/agent-loop/task-agent-loop-verification.js.map +1 -1
  254. package/dist/orchestrator/execution/agent-loop/task-agent-loop-worktree.d.ts.map +1 -1
  255. package/dist/orchestrator/execution/agent-loop/task-agent-loop-worktree.js +25 -0
  256. package/dist/orchestrator/execution/agent-loop/task-agent-loop-worktree.js.map +1 -1
  257. package/dist/orchestrator/execution/context/issue-context-fetcher.d.ts +5 -1
  258. package/dist/orchestrator/execution/context/issue-context-fetcher.d.ts.map +1 -1
  259. package/dist/orchestrator/execution/context/issue-context-fetcher.js +7 -4
  260. package/dist/orchestrator/execution/context/issue-context-fetcher.js.map +1 -1
  261. package/dist/orchestrator/execution/task/task-artifact-contract.d.ts +18 -0
  262. package/dist/orchestrator/execution/task/task-artifact-contract.d.ts.map +1 -0
  263. package/dist/orchestrator/execution/task/task-artifact-contract.js +199 -0
  264. package/dist/orchestrator/execution/task/task-artifact-contract.js.map +1 -0
  265. package/dist/orchestrator/execution/task/task-diff-capture.d.ts +15 -1
  266. package/dist/orchestrator/execution/task/task-diff-capture.d.ts.map +1 -1
  267. package/dist/orchestrator/execution/task/task-diff-capture.js +271 -18
  268. package/dist/orchestrator/execution/task/task-diff-capture.js.map +1 -1
  269. package/dist/orchestrator/execution/task/task-execution-helpers.d.ts +1 -0
  270. package/dist/orchestrator/execution/task/task-execution-helpers.d.ts.map +1 -1
  271. package/dist/orchestrator/execution/task/task-execution-helpers.js +76 -17
  272. package/dist/orchestrator/execution/task/task-execution-helpers.js.map +1 -1
  273. package/dist/orchestrator/execution/task/task-execution-types.d.ts +2 -0
  274. package/dist/orchestrator/execution/task/task-execution-types.d.ts.map +1 -1
  275. package/dist/orchestrator/execution/task/task-execution-types.js.map +1 -1
  276. package/dist/orchestrator/execution/task/task-executor.d.ts +16 -1
  277. package/dist/orchestrator/execution/task/task-executor.d.ts.map +1 -1
  278. package/dist/orchestrator/execution/task/task-executor.js +56 -50
  279. package/dist/orchestrator/execution/task/task-executor.js.map +1 -1
  280. package/dist/orchestrator/execution/task/task-generation.d.ts +62 -2
  281. package/dist/orchestrator/execution/task/task-generation.d.ts.map +1 -1
  282. package/dist/orchestrator/execution/task/task-generation.js +30 -13
  283. package/dist/orchestrator/execution/task/task-generation.js.map +1 -1
  284. package/dist/orchestrator/execution/task/task-lifecycle-runner.d.ts +2 -2
  285. package/dist/orchestrator/execution/task/task-lifecycle-runner.d.ts.map +1 -1
  286. package/dist/orchestrator/execution/task/task-lifecycle-runner.js +32 -4
  287. package/dist/orchestrator/execution/task/task-lifecycle-runner.js.map +1 -1
  288. package/dist/orchestrator/execution/task/task-lifecycle.d.ts +3 -3
  289. package/dist/orchestrator/execution/task/task-lifecycle.d.ts.map +1 -1
  290. package/dist/orchestrator/execution/task/task-lifecycle.js +109 -10
  291. package/dist/orchestrator/execution/task/task-lifecycle.js.map +1 -1
  292. package/dist/orchestrator/execution/task/task-outcome-ledger.d.ts +9 -0
  293. package/dist/orchestrator/execution/task/task-outcome-ledger.d.ts.map +1 -1
  294. package/dist/orchestrator/execution/task/task-outcome-ledger.js +64 -3
  295. package/dist/orchestrator/execution/task/task-outcome-ledger.js.map +1 -1
  296. package/dist/orchestrator/execution/task/task-prompt-builder.d.ts +3 -1
  297. package/dist/orchestrator/execution/task/task-prompt-builder.d.ts.map +1 -1
  298. package/dist/orchestrator/execution/task/task-prompt-builder.js +28 -13
  299. package/dist/orchestrator/execution/task/task-prompt-builder.js.map +1 -1
  300. package/dist/orchestrator/execution/task/task-verifier-rules.d.ts +3 -2
  301. package/dist/orchestrator/execution/task/task-verifier-rules.d.ts.map +1 -1
  302. package/dist/orchestrator/execution/task/task-verifier-rules.js +377 -90
  303. package/dist/orchestrator/execution/task/task-verifier-rules.js.map +1 -1
  304. package/dist/orchestrator/execution/task/task-verifier-types.d.ts +13 -0
  305. package/dist/orchestrator/execution/task/task-verifier-types.d.ts.map +1 -1
  306. package/dist/orchestrator/execution/task/task-verifier-types.js.map +1 -1
  307. package/dist/orchestrator/execution/task/task-verifier.d.ts +5 -4
  308. package/dist/orchestrator/execution/task/task-verifier.d.ts.map +1 -1
  309. package/dist/orchestrator/execution/task/task-verifier.js +396 -25
  310. package/dist/orchestrator/execution/task/task-verifier.js.map +1 -1
  311. package/dist/orchestrator/execution/task/task-workspace.d.ts +5 -0
  312. package/dist/orchestrator/execution/task/task-workspace.d.ts.map +1 -1
  313. package/dist/orchestrator/execution/task/task-workspace.js +20 -10
  314. package/dist/orchestrator/execution/task/task-workspace.js.map +1 -1
  315. package/dist/orchestrator/execution/types/task-group.d.ts +85 -5
  316. package/dist/orchestrator/execution/types/task-group.d.ts.map +1 -1
  317. package/dist/orchestrator/execution/types/task.d.ts +155 -3
  318. package/dist/orchestrator/execution/types/task.d.ts.map +1 -1
  319. package/dist/orchestrator/execution/types/task.js +18 -0
  320. package/dist/orchestrator/execution/types/task.js.map +1 -1
  321. package/dist/orchestrator/loop/durable-loop/contracts.d.ts +2 -0
  322. package/dist/orchestrator/loop/durable-loop/contracts.d.ts.map +1 -1
  323. package/dist/orchestrator/loop/durable-loop/contracts.js.map +1 -1
  324. package/dist/orchestrator/loop/durable-loop/phase-specs.d.ts +12 -12
  325. package/dist/orchestrator/loop/durable-loop/preparation.d.ts.map +1 -1
  326. package/dist/orchestrator/loop/durable-loop/preparation.js +7 -1
  327. package/dist/orchestrator/loop/durable-loop/preparation.js.map +1 -1
  328. package/dist/orchestrator/loop/loop-report-helper.d.ts.map +1 -1
  329. package/dist/orchestrator/loop/loop-report-helper.js +2 -0
  330. package/dist/orchestrator/loop/loop-report-helper.js.map +1 -1
  331. package/dist/platform/corrections/memory-correction-ledger.d.ts +30 -30
  332. package/dist/platform/corrections/memory-governance.d.ts +2 -2
  333. package/dist/platform/corrections/memory-quarantine.d.ts +2 -2
  334. package/dist/platform/dream/playbook-memory.d.ts +4 -4
  335. package/dist/platform/knowledge/types/agent-memory.d.ts +46 -46
  336. package/dist/platform/observation/context-provider/collector.d.ts.map +1 -1
  337. package/dist/platform/observation/context-provider/collector.js +89 -24
  338. package/dist/platform/observation/context-provider/collector.js.map +1 -1
  339. package/dist/platform/observation/data-source-adapter.d.ts +2 -0
  340. package/dist/platform/observation/data-source-adapter.d.ts.map +1 -1
  341. package/dist/platform/observation/data-source-adapter.js.map +1 -1
  342. package/dist/platform/observation/observation-apply.d.ts.map +1 -1
  343. package/dist/platform/observation/observation-apply.js +8 -2
  344. package/dist/platform/observation/observation-apply.js.map +1 -1
  345. package/dist/platform/observation/observation-engine.d.ts.map +1 -1
  346. package/dist/platform/observation/observation-engine.js +118 -70
  347. package/dist/platform/observation/observation-engine.js.map +1 -1
  348. package/dist/platform/observation/observation-helpers.d.ts +2 -0
  349. package/dist/platform/observation/observation-helpers.d.ts.map +1 -1
  350. package/dist/platform/observation/observation-helpers.js.map +1 -1
  351. package/dist/platform/observation/types/data-source.d.ts +48 -0
  352. package/dist/platform/observation/types/data-source.d.ts.map +1 -1
  353. package/dist/platform/observation/types/data-source.js +4 -0
  354. package/dist/platform/observation/types/data-source.js.map +1 -1
  355. package/dist/platform/observation/workspace-context.d.ts.map +1 -1
  356. package/dist/platform/observation/workspace-context.js +13 -18
  357. package/dist/platform/observation/workspace-context.js.map +1 -1
  358. package/dist/platform/soil/contracts.d.ts +58 -58
  359. package/dist/prompt/purposes/verification.d.ts +2 -2
  360. package/dist/reporting/report-formatters.d.ts.map +1 -1
  361. package/dist/reporting/report-formatters.js +26 -1
  362. package/dist/reporting/report-formatters.js.map +1 -1
  363. package/dist/reporting/reporting-engine.d.ts.map +1 -1
  364. package/dist/reporting/reporting-engine.js +1 -0
  365. package/dist/reporting/reporting-engine.js.map +1 -1
  366. package/dist/reporting/reporting-types.d.ts +7 -0
  367. package/dist/reporting/reporting-types.d.ts.map +1 -1
  368. package/dist/reporting/types/report.d.ts +12 -0
  369. package/dist/reporting/types/report.d.ts.map +1 -1
  370. package/dist/reporting/types/report.js +1 -0
  371. package/dist/reporting/types/report.js.map +1 -1
  372. package/dist/runtime/approval-broker.d.ts +12 -0
  373. package/dist/runtime/approval-broker.d.ts.map +1 -1
  374. package/dist/runtime/approval-broker.js +27 -7
  375. package/dist/runtime/approval-broker.js.map +1 -1
  376. package/dist/runtime/control/daemon-runtime-control-executor.d.ts.map +1 -1
  377. package/dist/runtime/control/daemon-runtime-control-executor.js +9 -4
  378. package/dist/runtime/control/daemon-runtime-control-executor.js.map +1 -1
  379. package/dist/runtime/control/runtime-control-intent.d.ts.map +1 -1
  380. package/dist/runtime/control/runtime-control-intent.js +3 -2
  381. package/dist/runtime/control/runtime-control-intent.js.map +1 -1
  382. package/dist/runtime/control/runtime-control-service.d.ts +27 -1
  383. package/dist/runtime/control/runtime-control-service.d.ts.map +1 -1
  384. package/dist/runtime/control/runtime-control-service.js +181 -2
  385. package/dist/runtime/control/runtime-control-service.js.map +1 -1
  386. package/dist/runtime/control/runtime-target-resolver.js +2 -0
  387. package/dist/runtime/control/runtime-target-resolver.js.map +1 -1
  388. package/dist/runtime/daemon/browser-backpressure-policy.d.ts +22 -0
  389. package/dist/runtime/daemon/browser-backpressure-policy.d.ts.map +1 -0
  390. package/dist/runtime/daemon/browser-backpressure-policy.js +95 -0
  391. package/dist/runtime/daemon/browser-backpressure-policy.js.map +1 -0
  392. package/dist/runtime/daemon/client.d.ts +1 -0
  393. package/dist/runtime/daemon/client.d.ts.map +1 -1
  394. package/dist/runtime/daemon/client.js.map +1 -1
  395. package/dist/runtime/daemon/runner-goal-cycle.d.ts.map +1 -1
  396. package/dist/runtime/daemon/runner-goal-cycle.js +1 -2
  397. package/dist/runtime/daemon/runner-goal-cycle.js.map +1 -1
  398. package/dist/runtime/daemon/runner-recovery.d.ts +17 -3
  399. package/dist/runtime/daemon/runner-recovery.d.ts.map +1 -1
  400. package/dist/runtime/daemon/runner-recovery.js +50 -12
  401. package/dist/runtime/daemon/runner-recovery.js.map +1 -1
  402. package/dist/runtime/daemon/runner-startup.d.ts.map +1 -1
  403. package/dist/runtime/daemon/runner-startup.js +18 -1
  404. package/dist/runtime/daemon/runner-startup.js.map +1 -1
  405. package/dist/runtime/daemon/runner.d.ts.map +1 -1
  406. package/dist/runtime/daemon/runner.js +13 -3
  407. package/dist/runtime/daemon/runner.js.map +1 -1
  408. package/dist/runtime/daemon/runtime-ownership.d.ts +7 -1
  409. package/dist/runtime/daemon/runtime-ownership.d.ts.map +1 -1
  410. package/dist/runtime/daemon/runtime-ownership.js +171 -25
  411. package/dist/runtime/daemon/runtime-ownership.js.map +1 -1
  412. package/dist/runtime/daemon/wait-deadline-resolver.d.ts.map +1 -1
  413. package/dist/runtime/daemon/wait-deadline-resolver.js +2 -0
  414. package/dist/runtime/daemon/wait-deadline-resolver.js.map +1 -1
  415. package/dist/runtime/event/server-snapshot-reader.d.ts +3 -1
  416. package/dist/runtime/event/server-snapshot-reader.d.ts.map +1 -1
  417. package/dist/runtime/event/server-snapshot-reader.js +68 -2
  418. package/dist/runtime/event/server-snapshot-reader.js.map +1 -1
  419. package/dist/runtime/event/server-types.d.ts +2 -0
  420. package/dist/runtime/event/server-types.d.ts.map +1 -1
  421. package/dist/runtime/evidence-answer.d.ts.map +1 -1
  422. package/dist/runtime/evidence-answer.js +34 -7
  423. package/dist/runtime/evidence-answer.js.map +1 -1
  424. package/dist/runtime/gateway/channel-adapter.d.ts +3 -0
  425. package/dist/runtime/gateway/channel-adapter.d.ts.map +1 -1
  426. package/dist/runtime/gateway/channel-display-policy.d.ts +42 -0
  427. package/dist/runtime/gateway/channel-display-policy.d.ts.map +1 -0
  428. package/dist/runtime/gateway/channel-display-policy.js +85 -0
  429. package/dist/runtime/gateway/channel-display-policy.js.map +1 -0
  430. package/dist/runtime/gateway/chat-event-rendering.d.ts +2 -1
  431. package/dist/runtime/gateway/chat-event-rendering.d.ts.map +1 -1
  432. package/dist/runtime/gateway/chat-event-rendering.js +2 -0
  433. package/dist/runtime/gateway/chat-event-rendering.js.map +1 -1
  434. package/dist/runtime/gateway/chat-session-dispatch.d.ts.map +1 -1
  435. package/dist/runtime/gateway/chat-session-dispatch.js +4 -9
  436. package/dist/runtime/gateway/chat-session-dispatch.js.map +1 -1
  437. package/dist/runtime/gateway/chat-session-port.d.ts +2 -0
  438. package/dist/runtime/gateway/chat-session-port.d.ts.map +1 -1
  439. package/dist/runtime/gateway/chat-session-port.js.map +1 -1
  440. package/dist/runtime/gateway/discord-gateway-adapter.d.ts +4 -0
  441. package/dist/runtime/gateway/discord-gateway-adapter.d.ts.map +1 -1
  442. package/dist/runtime/gateway/discord-gateway-adapter.js +100 -31
  443. package/dist/runtime/gateway/discord-gateway-adapter.js.map +1 -1
  444. package/dist/runtime/gateway/index.d.ts +4 -0
  445. package/dist/runtime/gateway/index.d.ts.map +1 -1
  446. package/dist/runtime/gateway/index.js +2 -0
  447. package/dist/runtime/gateway/index.js.map +1 -1
  448. package/dist/runtime/gateway/non-tui-display-projector.d.ts +40 -0
  449. package/dist/runtime/gateway/non-tui-display-projector.d.ts.map +1 -0
  450. package/dist/runtime/gateway/non-tui-display-projector.js +166 -0
  451. package/dist/runtime/gateway/non-tui-display-projector.js.map +1 -0
  452. package/dist/runtime/gateway/signal-gateway-adapter.d.ts +1 -0
  453. package/dist/runtime/gateway/signal-gateway-adapter.d.ts.map +1 -1
  454. package/dist/runtime/gateway/signal-gateway-adapter.js +47 -4
  455. package/dist/runtime/gateway/signal-gateway-adapter.js.map +1 -1
  456. package/dist/runtime/gateway/slack-channel-adapter.d.ts +1 -0
  457. package/dist/runtime/gateway/slack-channel-adapter.d.ts.map +1 -1
  458. package/dist/runtime/gateway/slack-channel-adapter.js +93 -18
  459. package/dist/runtime/gateway/slack-channel-adapter.js.map +1 -1
  460. package/dist/runtime/gateway/telegram-gateway-adapter.d.ts +2 -0
  461. package/dist/runtime/gateway/telegram-gateway-adapter.d.ts.map +1 -1
  462. package/dist/runtime/gateway/telegram-gateway-adapter.js +61 -113
  463. package/dist/runtime/gateway/telegram-gateway-adapter.js.map +1 -1
  464. package/dist/runtime/gateway/whatsapp-gateway-adapter.d.ts +1 -0
  465. package/dist/runtime/gateway/whatsapp-gateway-adapter.d.ts.map +1 -1
  466. package/dist/runtime/gateway/whatsapp-gateway-adapter.js +49 -4
  467. package/dist/runtime/gateway/whatsapp-gateway-adapter.js.map +1 -1
  468. package/dist/runtime/interactive-automation/browser-session-resolver.d.ts +26 -0
  469. package/dist/runtime/interactive-automation/browser-session-resolver.d.ts.map +1 -0
  470. package/dist/runtime/interactive-automation/browser-session-resolver.js +75 -0
  471. package/dist/runtime/interactive-automation/browser-session-resolver.js.map +1 -0
  472. package/dist/runtime/interactive-automation/index.d.ts +2 -0
  473. package/dist/runtime/interactive-automation/index.d.ts.map +1 -1
  474. package/dist/runtime/interactive-automation/index.js +2 -0
  475. package/dist/runtime/interactive-automation/index.js.map +1 -1
  476. package/dist/runtime/interactive-automation/runtime-auth-handoff-store.d.ts +35 -0
  477. package/dist/runtime/interactive-automation/runtime-auth-handoff-store.d.ts.map +1 -0
  478. package/dist/runtime/interactive-automation/runtime-auth-handoff-store.js +125 -0
  479. package/dist/runtime/interactive-automation/runtime-auth-handoff-store.js.map +1 -0
  480. package/dist/runtime/permission-dialogue.d.ts +113 -0
  481. package/dist/runtime/permission-dialogue.d.ts.map +1 -0
  482. package/dist/runtime/permission-dialogue.js +82 -0
  483. package/dist/runtime/permission-dialogue.js.map +1 -0
  484. package/dist/runtime/run-spec/derive.d.ts +14 -14
  485. package/dist/runtime/run-spec/handoff.d.ts.map +1 -1
  486. package/dist/runtime/run-spec/handoff.js +33 -0
  487. package/dist/runtime/run-spec/handoff.js.map +1 -1
  488. package/dist/runtime/run-spec/types.d.ts +16 -16
  489. package/dist/runtime/session-registry/types.d.ts +12 -12
  490. package/dist/runtime/store/artifact-retention.d.ts +2 -0
  491. package/dist/runtime/store/artifact-retention.d.ts.map +1 -1
  492. package/dist/runtime/store/artifact-retention.js +24 -21
  493. package/dist/runtime/store/artifact-retention.js.map +1 -1
  494. package/dist/runtime/store/budget-store.d.ts +8 -8
  495. package/dist/runtime/store/evidence-ledger.d.ts.map +1 -1
  496. package/dist/runtime/store/evidence-ledger.js +39 -1
  497. package/dist/runtime/store/evidence-ledger.js.map +1 -1
  498. package/dist/runtime/store/evidence-types.d.ts +204 -204
  499. package/dist/runtime/store/experiment-queue-store.d.ts +20 -20
  500. package/dist/runtime/store/index.d.ts +2 -2
  501. package/dist/runtime/store/index.d.ts.map +1 -1
  502. package/dist/runtime/store/index.js +1 -1
  503. package/dist/runtime/store/index.js.map +1 -1
  504. package/dist/runtime/store/operator-handoff-store.d.ts +3 -3
  505. package/dist/runtime/store/reproducibility-manifest.d.ts +20 -20
  506. package/dist/runtime/store/runtime-operation-schemas.d.ts +95 -62
  507. package/dist/runtime/store/runtime-operation-schemas.d.ts.map +1 -1
  508. package/dist/runtime/store/runtime-operation-schemas.js +9 -0
  509. package/dist/runtime/store/runtime-operation-schemas.js.map +1 -1
  510. package/dist/runtime/store/runtime-paths.d.ts +2 -0
  511. package/dist/runtime/store/runtime-paths.d.ts.map +1 -1
  512. package/dist/runtime/store/runtime-paths.js +6 -0
  513. package/dist/runtime/store/runtime-paths.js.map +1 -1
  514. package/dist/runtime/store/runtime-schemas.d.ts +2256 -46
  515. package/dist/runtime/store/runtime-schemas.d.ts.map +1 -1
  516. package/dist/runtime/store/runtime-schemas.js +85 -0
  517. package/dist/runtime/store/runtime-schemas.js.map +1 -1
  518. package/dist/runtime/types/companion.d.ts +52 -52
  519. package/dist/runtime/types/daemon.d.ts +31 -31
  520. package/dist/tools/automation/InteractiveAutomationTools.d.ts +22 -2
  521. package/dist/tools/automation/InteractiveAutomationTools.d.ts.map +1 -1
  522. package/dist/tools/automation/InteractiveAutomationTools.js +75 -10
  523. package/dist/tools/automation/InteractiveAutomationTools.js.map +1 -1
  524. package/dist/tools/builtin/factory.d.ts +2 -1
  525. package/dist/tools/builtin/factory.d.ts.map +1 -1
  526. package/dist/tools/builtin/factory.js +6 -2
  527. package/dist/tools/builtin/factory.js.map +1 -1
  528. package/dist/tools/execution/MemorySaveTool/MemorySaveTool.d.ts +20 -20
  529. package/dist/tools/execution/RunAdapterTool/RunAdapterTool.d.ts +6 -0
  530. package/dist/tools/execution/RunAdapterTool/RunAdapterTool.d.ts.map +1 -1
  531. package/dist/tools/execution/RunAdapterTool/RunAdapterTool.js +2 -0
  532. package/dist/tools/execution/RunAdapterTool/RunAdapterTool.js.map +1 -1
  533. package/dist/tools/execution-orchestrator.d.ts +29 -0
  534. package/dist/tools/execution-orchestrator.d.ts.map +1 -0
  535. package/dist/tools/execution-orchestrator.js +153 -0
  536. package/dist/tools/execution-orchestrator.js.map +1 -0
  537. package/dist/tools/executor.d.ts +6 -0
  538. package/dist/tools/executor.d.ts.map +1 -1
  539. package/dist/tools/executor.js +48 -11
  540. package/dist/tools/executor.js.map +1 -1
  541. package/dist/tools/fs/ApplyPatchTool/ApplyPatchTool.d.ts.map +1 -1
  542. package/dist/tools/fs/ApplyPatchTool/ApplyPatchTool.js +130 -17
  543. package/dist/tools/fs/ApplyPatchTool/ApplyPatchTool.js.map +1 -1
  544. package/dist/tools/kaggle/KaggleExperimentTools.js +4 -3
  545. package/dist/tools/kaggle/KaggleExperimentTools.js.map +1 -1
  546. package/dist/tools/kaggle/KaggleSubmissionTools.js +6 -5
  547. package/dist/tools/kaggle/KaggleSubmissionTools.js.map +1 -1
  548. package/dist/tools/kaggle/KaggleWorkspacePrepareTool.js +6 -5
  549. package/dist/tools/kaggle/KaggleWorkspacePrepareTool.js.map +1 -1
  550. package/dist/tools/kaggle/paths.d.ts.map +1 -1
  551. package/dist/tools/kaggle/paths.js +12 -8
  552. package/dist/tools/kaggle/paths.js.map +1 -1
  553. package/dist/tools/mutation/TaskStopTool/TaskStopTool.d.ts.map +1 -1
  554. package/dist/tools/mutation/TaskStopTool/TaskStopTool.js +8 -0
  555. package/dist/tools/mutation/TaskStopTool/TaskStopTool.js.map +1 -1
  556. package/dist/tools/mutation/TaskUpdateTool/TaskUpdateTool.d.ts +8 -8
  557. package/dist/tools/mutation/TaskUpdateTool/TaskUpdateTool.d.ts.map +1 -1
  558. package/dist/tools/mutation/TaskUpdateTool/TaskUpdateTool.js +49 -7
  559. package/dist/tools/mutation/TaskUpdateTool/TaskUpdateTool.js.map +1 -1
  560. package/dist/tools/network/GitHubCliTool/GitHubCliTool.d.ts +4 -4
  561. package/dist/tools/network/McpStdioTool/McpStdioTool.d.ts +4 -4
  562. package/dist/tools/permission.d.ts +0 -1
  563. package/dist/tools/permission.d.ts.map +1 -1
  564. package/dist/tools/permission.js +9 -33
  565. package/dist/tools/permission.js.map +1 -1
  566. package/dist/tools/query/CodeReadContextTool/CodeReadContextTool.d.ts +4 -4
  567. package/dist/tools/query/CodeSearchRepairTool/CodeSearchRepairTool.d.ts +8 -8
  568. package/dist/tools/query/CodeSearchTool/CodeSearchTool.d.ts +4 -4
  569. package/dist/tools/query/MemoryRecallTool/MemoryRecallTool.d.ts +4 -4
  570. package/dist/tools/query/runtime-session-tools.d.ts +73 -5
  571. package/dist/tools/query/runtime-session-tools.d.ts.map +1 -1
  572. package/dist/tools/query/runtime-session-tools.js +114 -0
  573. package/dist/tools/query/runtime-session-tools.js.map +1 -1
  574. package/dist/tools/runtime/LongRunningRuntimeTools.d.ts +72 -54
  575. package/dist/tools/runtime/LongRunningRuntimeTools.d.ts.map +1 -1
  576. package/dist/tools/runtime/LongRunningRuntimeTools.js +4 -1
  577. package/dist/tools/runtime/LongRunningRuntimeTools.js.map +1 -1
  578. package/dist/tools/runtime/RunSpecHandoffTools.d.ts.map +1 -1
  579. package/dist/tools/runtime/RunSpecHandoffTools.js +162 -2
  580. package/dist/tools/runtime/RunSpecHandoffTools.js.map +1 -1
  581. package/dist/tools/runtime/SetupRuntimeControlTools.d.ts.map +1 -1
  582. package/dist/tools/runtime/SetupRuntimeControlTools.js +169 -17
  583. package/dist/tools/runtime/SetupRuntimeControlTools.js.map +1 -1
  584. package/dist/tools/system/EnvTool/EnvTool.d.ts +4 -4
  585. package/dist/tools/system/GitDiffTool/GitDiffTool.d.ts +4 -4
  586. package/dist/tools/system/GitLogTool/GitLogTool.d.ts +4 -4
  587. package/dist/tools/system/ShellCommandTool/ShellCommandTool.d.ts.map +1 -1
  588. package/dist/tools/system/ShellCommandTool/ShellCommandTool.js +8 -2
  589. package/dist/tools/system/ShellCommandTool/ShellCommandTool.js.map +1 -1
  590. package/dist/tools/system/ShellTool/ShellTool.d.ts.map +1 -1
  591. package/dist/tools/system/ShellTool/ShellTool.js +29 -11
  592. package/dist/tools/system/ShellTool/ShellTool.js.map +1 -1
  593. package/dist/tools/system/ShellTool/command-policy.d.ts +12 -8
  594. package/dist/tools/system/ShellTool/command-policy.d.ts.map +1 -1
  595. package/dist/tools/system/ShellTool/command-policy.js +412 -98
  596. package/dist/tools/system/ShellTool/command-policy.js.map +1 -1
  597. package/dist/tools/system/ShellTool/prompt.d.ts +1 -1
  598. package/dist/tools/system/ShellTool/prompt.d.ts.map +1 -1
  599. package/dist/tools/system/ShellTool/prompt.js +1 -1
  600. package/dist/tools/system/ShellTool/prompt.js.map +1 -1
  601. package/dist/tools/system/TestRunnerTool/TestRunnerTool.d.ts +1 -1
  602. package/dist/tools/system/TestRunnerTool/TestRunnerTool.d.ts.map +1 -1
  603. package/dist/tools/system/TestRunnerTool/TestRunnerTool.js +152 -8
  604. package/dist/tools/system/TestRunnerTool/TestRunnerTool.js.map +1 -1
  605. package/dist/tools/system/UpdatePlanTool/UpdatePlanTool.js +1 -1
  606. package/dist/tools/system/UpdatePlanTool/UpdatePlanTool.js.map +1 -1
  607. package/dist/tools/types.d.ts +36 -12
  608. package/dist/tools/types.d.ts.map +1 -1
  609. package/dist/tools/types.js +26 -3
  610. package/dist/tools/types.js.map +1 -1
  611. package/dist/tools/workspace-scope.d.ts +11 -0
  612. package/dist/tools/workspace-scope.d.ts.map +1 -0
  613. package/dist/tools/workspace-scope.js +77 -0
  614. package/dist/tools/workspace-scope.js.map +1 -0
  615. package/package.json +2 -2
@@ -25,6 +25,7 @@ import { runMechanicalVerification, clampDimensionUpdate, checkDimensionDirectio
25
25
  import { runLLMReview } from "./task-verifier-llm.js";
26
26
  import { appendTaskOutcomeEvent } from "./task-outcome-ledger.js";
27
27
  import { resolveTaskWorkspacePath } from "./task-workspace.js";
28
+ import { verifyTaskArtifactContract } from "./task-artifact-contract.js";
28
29
  function formatSelfReportEvidence(executorReport) {
29
30
  const segments = [
30
31
  executorReport.summary.trim(),
@@ -41,6 +42,166 @@ function formatSelfReportEvidence(executorReport) {
41
42
  ].filter((segment) => segment.length > 0);
42
43
  return segments.join("\n");
43
44
  }
45
+ function statusAfterIncompleteVerification(task) {
46
+ if (task.status === "timed_out" || task.status === "cancelled" || task.status === "blocked")
47
+ return task.status;
48
+ return "error";
49
+ }
50
+ function getDimensionThresholdType(dim) {
51
+ return dim && typeof dim.threshold === "object" && dim.threshold !== null
52
+ ? dim.threshold.type
53
+ : undefined;
54
+ }
55
+ function applyThresholdProgressDelta(prevVal, scaledDelta, thresholdType) {
56
+ const directionalDelta = thresholdType === "max" ? -scaledDelta : scaledDelta;
57
+ return prevVal !== null ? prevVal + directionalDelta : directionalDelta;
58
+ }
59
+ function isDimensionUpdateDirectionAllowed(input) {
60
+ const thresholdType = getDimensionThresholdType(input.dim);
61
+ if (thresholdType === "min" && input.newValue < input.previousValue) {
62
+ input.logger?.warn?.(`[handleVerdict] Skipping dimension update for ${String(input.dim.name)}: update moves away from min threshold`);
63
+ return false;
64
+ }
65
+ if (thresholdType === "max" && input.newValue > input.previousValue) {
66
+ input.logger?.warn?.(`[handleVerdict] Skipping dimension update for ${String(input.dim.name)}: update moves away from max threshold`);
67
+ return false;
68
+ }
69
+ return checkDimensionDirection(input.intendedDirection, input.previousValue, input.newValue, input.logger, String(input.dim.name));
70
+ }
71
+ function isolatedWorkspaceHandoff(context) {
72
+ const workspace = context.agentLoopWorkspace;
73
+ if (workspace?.isolatedWorkspace === true &&
74
+ workspace.workspaceDisposition === "handoff_required") {
75
+ return workspace;
76
+ }
77
+ return null;
78
+ }
79
+ function discardedDirtyIsolatedWorkspace(context) {
80
+ const workspace = context.agentLoopWorkspace;
81
+ if (workspace?.isolatedWorkspace === true &&
82
+ workspace.workspaceDirty === true &&
83
+ workspace.workspaceDisposition === "discarded") {
84
+ return workspace;
85
+ }
86
+ return null;
87
+ }
88
+ function shouldCollectDiffsFromRequestedWorkspace(executionResult) {
89
+ if (executionResult.agentLoop?.isolatedWorkspace !== true)
90
+ return true;
91
+ if (executionResult.agentLoop.workspaceDirty !== true)
92
+ return true;
93
+ return executionResult.agentLoop.workspaceDisposition !== "handoff_required" &&
94
+ executionResult.agentLoop.workspaceDisposition !== "discarded";
95
+ }
96
+ function formatIsolatedWorkspaceHandoffReason(workspace) {
97
+ const executionCwd = workspace.executionCwd ?? "unknown isolated worktree";
98
+ const requestedCwd = workspace.requestedCwd ?? "unknown requested workspace";
99
+ return [
100
+ `dirty isolated worktree retained at ${executionCwd}`,
101
+ `requested workspace ${requestedCwd} was not reverted or discarded`,
102
+ "operator review is required before completion",
103
+ ].join("; ");
104
+ }
105
+ function formatDiscardedDirtyIsolatedWorkspaceReason(workspace) {
106
+ const executionCwd = workspace.executionCwd ?? "unknown isolated worktree";
107
+ const requestedCwd = workspace.requestedCwd ?? "unknown requested workspace";
108
+ return [
109
+ `dirty isolated worktree changes were discarded from ${executionCwd}`,
110
+ `requested workspace ${requestedCwd} was not reverted or discarded`,
111
+ "task must be retried from the requested workspace",
112
+ ].join("; ");
113
+ }
114
+ export function applyVerdictHandlingContextGuards(verificationResult, context) {
115
+ const workspace = isolatedWorkspaceHandoff(context) ?? discardedDirtyIsolatedWorkspace(context);
116
+ if (!workspace)
117
+ return verificationResult;
118
+ const reason = workspace.workspaceDisposition === "discarded"
119
+ ? formatDiscardedDirtyIsolatedWorkspaceReason(workspace)
120
+ : formatIsolatedWorkspaceHandoffReason(workspace);
121
+ return {
122
+ ...verificationResult,
123
+ verdict: "fail",
124
+ confidence: Math.max(verificationResult.confidence ?? 0, 0.95),
125
+ evidence: [
126
+ {
127
+ layer: "mechanical",
128
+ description: reason,
129
+ confidence: 0.95,
130
+ },
131
+ ...(verificationResult.evidence ?? []),
132
+ ],
133
+ };
134
+ }
135
+ function mergeMechanicalAndArtifactVerification(mechanical, artifact) {
136
+ if (!artifact.applicable)
137
+ return mechanical;
138
+ if (isArtifactFreshnessDisagreement(mechanical, artifact)) {
139
+ return {
140
+ applicable: true,
141
+ passed: true,
142
+ description: `${artifact.description}; mechanical --check-contract reported a stale-artifact freshness failure, but PulSeed artifact_contract passed using task-start freshness: ${mechanical.description}`,
143
+ };
144
+ }
145
+ if (!mechanical.applicable) {
146
+ return {
147
+ applicable: true,
148
+ passed: artifact.passed,
149
+ description: artifact.description,
150
+ };
151
+ }
152
+ return {
153
+ applicable: true,
154
+ passed: mechanical.passed && artifact.passed,
155
+ description: `${mechanical.description}; ${artifact.description}`,
156
+ };
157
+ }
158
+ function isArtifactFreshnessDisagreement(mechanical, artifact) {
159
+ return artifact.applicable &&
160
+ artifact.passed &&
161
+ mechanical.applicable &&
162
+ !mechanical.passed &&
163
+ /\bstale artifact:/i.test(mechanical.description);
164
+ }
165
+ function isTimedOutAgentLoopResult(executionResult) {
166
+ return executionResult.stopped_reason === "timeout" || executionResult.agentLoop?.stopReason === "timeout";
167
+ }
168
+ function isRecoverableAgentLoopFinalizationFailure(executionResult) {
169
+ if (executionResult.success)
170
+ return false;
171
+ const stopReason = executionResult.agentLoop?.stopReason;
172
+ return stopReason === "max_model_turns" ||
173
+ stopReason === "schema_error" ||
174
+ stopReason === "completion_gate_failed";
175
+ }
176
+ function formatTimeoutBudgetEvidence(executionResult) {
177
+ const details = [
178
+ "AgentLoop stopped because the wall-clock budget timed out",
179
+ typeof executionResult.agentLoop?.generatedEstimateMs === "number"
180
+ ? `generated estimate: ${executionResult.agentLoop.generatedEstimateMs}ms`
181
+ : "",
182
+ typeof executionResult.agentLoop?.activeBudgetMs === "number"
183
+ ? `active budget: ${executionResult.agentLoop.activeBudgetMs}ms`
184
+ : "",
185
+ ].filter(Boolean);
186
+ return details.join("; ");
187
+ }
188
+ function isCompletionJudgerUnavailable(result) {
189
+ return result.passed === false &&
190
+ result.partial === false &&
191
+ result.confidence === 0 &&
192
+ result.description.startsWith("completion_judger failed after ");
193
+ }
194
+ function boundCompletionJudgerForTimedOutTask(deps) {
195
+ const existing = deps.completionJudgerConfig;
196
+ return {
197
+ ...deps,
198
+ completionJudgerConfig: {
199
+ timeoutMs: Math.min(existing?.timeoutMs ?? 30_000, 5_000),
200
+ maxRetries: 0,
201
+ retryBackoffMs: 0,
202
+ },
203
+ };
204
+ }
44
205
  function quoteShellArg(value) {
45
206
  return `'${value.replace(/'/g, `'\\''`)}'`;
46
207
  }
@@ -48,16 +209,20 @@ async function collectVerificationDiffs(deps, task, executionResult) {
48
209
  if (executionResult.fileDiffs && executionResult.fileDiffs.length > 0) {
49
210
  return executionResult.fileDiffs;
50
211
  }
212
+ if (!shouldCollectDiffsFromRequestedWorkspace(executionResult))
213
+ return [];
51
214
  if (!deps.toolExecutor)
52
215
  return [];
53
216
  const cwd = executionResult.agentLoop?.requestedCwd ??
54
217
  executionResult.agentLoop?.executionCwd ??
55
- await resolveTaskWorkspacePath({ stateManager: deps.stateManager, task }) ??
218
+ await resolveTaskWorkspacePath({ stateManager: deps.stateManager, task, fallbackCwd: deps.revertCwd }) ??
56
219
  process.cwd();
57
220
  const changedPaths = [
58
221
  ...(executionResult.filesChangedPaths ?? []),
59
222
  ...(executionResult.agentLoop?.filesChangedPaths ?? []),
60
223
  ].filter((path, index, all) => path.length > 0 && all.indexOf(path) === index);
224
+ const hasExplicitExecutionDiffPaths = executionResult.filesChangedPaths !== undefined ||
225
+ executionResult.agentLoop?.filesChangedPaths !== undefined;
61
226
  const toolContext = {
62
227
  cwd,
63
228
  goalId: task.goal_id,
@@ -102,6 +267,9 @@ async function collectVerificationDiffs(deps, task, executionResult) {
102
267
  const diffs = await Promise.all(changedPaths.slice(0, 5).map((path) => collectForPath(path)));
103
268
  return diffs.filter((diff) => diff !== null);
104
269
  }
270
+ if (hasExplicitExecutionDiffPaths) {
271
+ return [];
272
+ }
105
273
  try {
106
274
  const result = await deps.toolExecutor.execute("git_diff", { target: "unstaged", maxLines: 240 }, toolContext);
107
275
  if (!result.success || typeof result.data !== "string" || !result.data.trim())
@@ -139,6 +307,16 @@ async function collectVerificationDiffs(deps, task, executionResult) {
139
307
  * - L1 SKIP → use L2 only (lower confidence)
140
308
  */
141
309
  export async function verifyTask(deps, task, executionResult) {
310
+ let goalForArtifactContract = null;
311
+ try {
312
+ goalForArtifactContract = await deps.stateManager.loadGoal(task.goal_id);
313
+ }
314
+ catch {
315
+ goalForArtifactContract = null;
316
+ }
317
+ const artifactResult = await verifyTaskArtifactContract(task, executionResult.agentLoop?.executionCwd
318
+ ?? executionResult.agentLoop?.requestedCwd
319
+ ?? await resolveTaskWorkspacePath({ stateManager: deps.stateManager, task, fallbackCwd: deps.revertCwd }), { goal: goalForArtifactContract });
142
320
  // ─── Short-circuit: GitHub issue URL evidence ───
143
321
  // When execution succeeded and output contains a GitHub issue URL,
144
322
  // treat as mechanical pass without running full L1/L2 verification.
@@ -146,7 +324,8 @@ export async function verifyTask(deps, task, executionResult) {
146
324
  const githubIssueUrlPattern = /github\.com\/.+\/issues\/\d+/;
147
325
  if (executionResult.success === true &&
148
326
  executionResult.output &&
149
- githubIssueUrlPattern.test(executionResult.output)) {
327
+ githubIssueUrlPattern.test(executionResult.output) &&
328
+ (!artifactResult.applicable || artifactResult.passed)) {
150
329
  const scResult = VerificationResultSchema.parse({
151
330
  task_id: task.id,
152
331
  verdict: "pass",
@@ -157,14 +336,98 @@ export async function verifyTask(deps, task, executionResult) {
157
336
  description: "GitHub issue URL found in execution output — mechanical evidence of successful issue creation",
158
337
  confidence: 0.95,
159
338
  },
339
+ ...(artifactResult.applicable
340
+ ? [{
341
+ layer: "mechanical",
342
+ description: artifactResult.description,
343
+ confidence: 0.9,
344
+ }]
345
+ : []),
160
346
  ],
161
347
  dimension_updates: [],
348
+ artifact_contract_status: artifactResult,
162
349
  timestamp: new Date().toISOString(),
163
350
  });
164
351
  return scResult;
165
352
  }
166
353
  // ─── Layer 1: Mechanical verification ───
167
354
  const l1Result = await runMechanicalVerification(deps, task);
355
+ const artifactFreshnessDisagreement = isArtifactFreshnessDisagreement(l1Result, artifactResult);
356
+ const effectiveL1Result = mergeMechanicalAndArtifactVerification(l1Result, artifactResult);
357
+ if (isRecoverableAgentLoopFinalizationFailure(executionResult) &&
358
+ effectiveL1Result.applicable &&
359
+ effectiveL1Result.passed &&
360
+ (artifactResult.passed || (executionResult.agentLoop?.completionEvidence?.length ?? 0) > 0)) {
361
+ deps.logger?.info?.("[completion_judger] Skipping completion judging for AgentLoop finalization failure with mechanical salvage evidence", {
362
+ taskId: task.id,
363
+ stoppedReason: executionResult.stopped_reason,
364
+ agentLoopStopReason: executionResult.agentLoop?.stopReason,
365
+ });
366
+ return VerificationResultSchema.parse({
367
+ task_id: task.id,
368
+ verdict: "pass",
369
+ confidence: 0.85,
370
+ evidence: [
371
+ {
372
+ layer: "mechanical",
373
+ description: effectiveL1Result.description,
374
+ confidence: 0.9,
375
+ },
376
+ {
377
+ layer: "independent_review",
378
+ description: `completion judging skipped because AgentLoop stopped with ${executionResult.agentLoop?.stopReason ?? executionResult.stopped_reason} after mechanical/artifact evidence passed`,
379
+ confidence: 0.85,
380
+ },
381
+ {
382
+ layer: "self_report",
383
+ description: formatSelfReportEvidence(parseExecutorReport(executionResult)),
384
+ confidence: 0.3,
385
+ },
386
+ ],
387
+ dimension_updates: [],
388
+ file_diffs: await collectVerificationDiffs(deps, task, executionResult),
389
+ artifact_contract_status: artifactResult,
390
+ timestamp: new Date().toISOString(),
391
+ });
392
+ }
393
+ const timedOutAgentLoop = isTimedOutAgentLoopResult(executionResult);
394
+ if (timedOutAgentLoop && !effectiveL1Result.passed) {
395
+ deps.logger?.info?.("[completion_judger] Skipping completion judging for timed-out AgentLoop task without mechanical salvage evidence", {
396
+ taskId: task.id,
397
+ stoppedReason: executionResult.stopped_reason,
398
+ generatedEstimateMs: executionResult.agentLoop?.generatedEstimateMs,
399
+ activeBudgetMs: executionResult.agentLoop?.activeBudgetMs,
400
+ });
401
+ const evidence = [
402
+ ...(effectiveL1Result.applicable
403
+ ? [{
404
+ layer: "mechanical",
405
+ description: effectiveL1Result.description,
406
+ confidence: 0.9,
407
+ }]
408
+ : []),
409
+ {
410
+ layer: "independent_review",
411
+ description: `${formatTimeoutBudgetEvidence(executionResult)}; completion judging skipped because timeout is the primary terminal reason and no mechanical salvage evidence passed`,
412
+ confidence: 0,
413
+ },
414
+ {
415
+ layer: "self_report",
416
+ description: formatSelfReportEvidence(parseExecutorReport(executionResult)),
417
+ confidence: 0.3,
418
+ },
419
+ ];
420
+ return VerificationResultSchema.parse({
421
+ task_id: task.id,
422
+ verdict: "fail",
423
+ confidence: 0.9,
424
+ evidence,
425
+ dimension_updates: [],
426
+ file_diffs: await collectVerificationDiffs(deps, task, executionResult),
427
+ artifact_contract_status: artifactResult,
428
+ timestamp: new Date().toISOString(),
429
+ });
430
+ }
168
431
  // ─── Build optional enrichment blocks for LLM review ───
169
432
  let knowledgeBlock = "";
170
433
  if (deps.knowledgeManager?.getRelevantKnowledge) {
@@ -193,26 +456,54 @@ export async function verifyTask(deps, task, executionResult) {
193
456
  }
194
457
  catch { /* state enrichment is optional */ }
195
458
  // ─── Layer 2: LLM task reviewer (independent) ───
196
- const l2Result = await runLLMReview(deps, task, executionResult, knowledgeBlock, stateBlock);
459
+ const reviewDeps = timedOutAgentLoop ? boundCompletionJudgerForTimedOutTask(deps) : deps;
460
+ if (timedOutAgentLoop) {
461
+ deps.logger?.info?.("[completion_judger] Running sharply bounded completion judging for timed-out AgentLoop task with mechanical salvage evidence", {
462
+ taskId: task.id,
463
+ stoppedReason: executionResult.stopped_reason,
464
+ generatedEstimateMs: executionResult.agentLoop?.generatedEstimateMs,
465
+ activeBudgetMs: executionResult.agentLoop?.activeBudgetMs,
466
+ timeoutMs: reviewDeps.completionJudgerConfig?.timeoutMs,
467
+ maxRetries: reviewDeps.completionJudgerConfig?.maxRetries,
468
+ });
469
+ }
470
+ const l2Result = artifactFreshnessDisagreement && executionResult.success === true
471
+ ? {
472
+ passed: true,
473
+ partial: false,
474
+ description: "completion judging skipped because PulSeed artifact_contract is authoritative for fresh_after_task_start and the contract passed",
475
+ confidence: 0.85,
476
+ tokensUsed: 0,
477
+ }
478
+ : await runLLMReview(reviewDeps, task, executionResult, knowledgeBlock, stateBlock);
197
479
  // ─── Layer 3: Executor self-report (reference only) ───
198
480
  const executorReport = parseExecutorReport(executionResult);
199
481
  // ─── Contradiction resolution ───
200
482
  let verdict;
201
483
  let confidence;
202
484
  let l2Retry;
203
- if (l1Result.applicable) {
204
- if (l1Result.passed && l2Result.passed) {
485
+ const l2Unavailable = isCompletionJudgerUnavailable(l2Result);
486
+ const l2UnavailableButMechanicallyPassed = l2Unavailable &&
487
+ executionResult.success === true &&
488
+ effectiveL1Result.applicable &&
489
+ effectiveL1Result.passed;
490
+ if (effectiveL1Result.applicable) {
491
+ if (l2UnavailableButMechanicallyPassed) {
492
+ verdict = "pass";
493
+ confidence = 0.85;
494
+ }
495
+ else if (effectiveL1Result.passed && l2Result.passed) {
205
496
  verdict = "pass";
206
497
  confidence = 0.9;
207
498
  }
208
- else if (l1Result.passed && l2Result.partial) {
499
+ else if (effectiveL1Result.passed && l2Result.partial) {
209
500
  // L1 pass + L2 partial → partial
210
501
  verdict = "partial";
211
502
  confidence = 0.7;
212
503
  }
213
- else if (l1Result.passed && !l2Result.passed && !l2Result.partial) {
504
+ else if (effectiveL1Result.passed && !l2Result.passed && !l2Result.partial) {
214
505
  // L1 pass + L2 fail → re-review
215
- l2Retry = await runLLMReview(deps, task, executionResult, knowledgeBlock, stateBlock, 'main');
506
+ l2Retry = timedOutAgentLoop ? l2Result : await runLLMReview(deps, task, executionResult, knowledgeBlock, stateBlock, 'main');
216
507
  if (l2Retry.passed) {
217
508
  verdict = "pass";
218
509
  confidence = 0.75;
@@ -226,7 +517,7 @@ export async function verifyTask(deps, task, executionResult) {
226
517
  confidence = 0.8;
227
518
  }
228
519
  }
229
- else if (!l1Result.passed && l2Result.passed) {
520
+ else if (!effectiveL1Result.passed && l2Result.passed) {
230
521
  // Mechanical verification takes priority
231
522
  verdict = "fail";
232
523
  confidence = 0.85;
@@ -253,25 +544,28 @@ export async function verifyTask(deps, task, executionResult) {
253
544
  }
254
545
  }
255
546
  // Handle partial from L2 when L1 is applicable but didn't fail
256
- if (l1Result.applicable && l2Result.partial && verdict !== "fail") {
547
+ if (effectiveL1Result.applicable && l2Result.partial && verdict !== "fail") {
257
548
  verdict = "partial";
258
549
  }
259
550
  // Use retry result for evidence when a retry occurred, to keep audit trail accurate
260
551
  const effectiveL2 = l2Retry ?? l2Result;
552
+ const independentReviewDescription = l2UnavailableButMechanicallyPassed
553
+ ? `${effectiveL2.description}; using passing mechanical/artifact evidence because completion judging was unavailable`
554
+ : effectiveL2.description;
261
555
  const now = new Date().toISOString();
262
556
  const evidence = [
263
- ...(l1Result.applicable
557
+ ...(effectiveL1Result.applicable
264
558
  ? [
265
559
  {
266
560
  layer: "mechanical",
267
- description: l1Result.description,
561
+ description: effectiveL1Result.description,
268
562
  confidence: 0.9,
269
563
  },
270
564
  ]
271
565
  : []),
272
566
  {
273
567
  layer: "independent_review",
274
- description: effectiveL2.description,
568
+ description: independentReviewDescription,
275
569
  confidence: effectiveL2.confidence,
276
570
  },
277
571
  {
@@ -320,7 +614,8 @@ export async function verifyTask(deps, task, executionResult) {
320
614
  scaledDelta = progressDelta * (threshold.high - threshold.low);
321
615
  }
322
616
  }
323
- const newVal = prevVal !== null ? prevVal + scaledDelta : scaledDelta;
617
+ const thresholdType = threshold?.type;
618
+ const newVal = applyThresholdProgressDelta(prevVal, scaledDelta, thresholdType);
324
619
  return {
325
620
  dimension_name: dimName,
326
621
  previous_value: prevVal,
@@ -335,6 +630,7 @@ export async function verifyTask(deps, task, executionResult) {
335
630
  evidence,
336
631
  dimension_updates,
337
632
  file_diffs: await collectVerificationDiffs(deps, task, executionResult),
633
+ artifact_contract_status: artifactResult,
338
634
  timestamp: now,
339
635
  });
340
636
  // Post-verification: analyze impact for unintended side effects (opt-in)
@@ -374,7 +670,7 @@ export async function verifyTask(deps, task, executionResult) {
374
670
  /**
375
671
  * Handle a verification verdict (pass/partial/fail).
376
672
  */
377
- export async function handleVerdict(deps, task, verificationResult) {
673
+ export async function handleVerdict(deps, task, verificationResult, context = {}) {
378
674
  // P0: Progress-verdict contradiction check (§4.1)
379
675
  if (verificationResult.verdict === "pass" && verificationResult.dimension_updates?.length > 0) {
380
676
  const goalRawForGuard = await deps.stateManager.readRaw(`goals/${task.goal_id}/goal.json`);
@@ -405,6 +701,9 @@ export async function handleVerdict(deps, task, verificationResult) {
405
701
  verificationResult = { ...verificationResult, verdict: "partial" };
406
702
  }
407
703
  }
704
+ if (context.verificationGuardsApplied !== true) {
705
+ verificationResult = applyVerdictHandlingContextGuards(verificationResult, context);
706
+ }
408
707
  // Save failure context for fail/partial verdicts (§4.7)
409
708
  if (verificationResult.verdict === "fail" || verificationResult.verdict === "partial") {
410
709
  const firstEvidence = verificationResult.evidence?.[0];
@@ -466,7 +765,13 @@ export async function handleVerdict(deps, task, verificationResult) {
466
765
  const update = verificationResult.dimension_updates.find((u) => u.dimension_name === dim.name);
467
766
  if (update !== undefined && typeof update.new_value === "number") {
468
767
  const prev = typeof dim.current_value === "number" ? dim.current_value : 0;
469
- if (!checkDimensionDirection(task.intended_direction, prev, update.new_value, deps.logger, String(dim.name))) {
768
+ if (!isDimensionUpdateDirectionAllowed({
769
+ intendedDirection: task.intended_direction,
770
+ dim,
771
+ previousValue: prev,
772
+ newValue: update.new_value,
773
+ logger: deps.logger,
774
+ })) {
470
775
  continue;
471
776
  }
472
777
  dim.current_value = clampDimensionUpdate(prev, update.new_value, deps.logger, String(dim.name));
@@ -505,7 +810,13 @@ export async function handleVerdict(deps, task, verificationResult) {
505
810
  const update = verificationResult.dimension_updates.find((u) => u.dimension_name === dim.name);
506
811
  if (update !== undefined && typeof update.new_value === "number") {
507
812
  const prev = typeof dim.current_value === "number" ? dim.current_value : 0;
508
- if (!checkDimensionDirection(task.intended_direction, prev, update.new_value, deps.logger, String(dim.name))) {
813
+ if (!isDimensionUpdateDirectionAllowed({
814
+ intendedDirection: task.intended_direction,
815
+ dim,
816
+ previousValue: prev,
817
+ newValue: update.new_value,
818
+ logger: deps.logger,
819
+ })) {
509
820
  continue;
510
821
  }
511
822
  dim.current_value = clampDimensionUpdate(prev, update.new_value, deps.logger, String(dim.name));
@@ -518,6 +829,7 @@ export async function handleVerdict(deps, task, verificationResult) {
518
829
  }
519
830
  const partialTask = {
520
831
  ...task,
832
+ status: statusAfterIncompleteVerification(task),
521
833
  verification_verdict: verificationResult.verdict,
522
834
  verification_evidence: verificationResult.evidence?.map((e) => e.description ?? String(e)) ?? [],
523
835
  };
@@ -530,13 +842,14 @@ export async function handleVerdict(deps, task, verificationResult) {
530
842
  action: "keep",
531
843
  verificationResult,
532
844
  reason: "partial progress kept for follow-up work",
845
+ stoppedReason: context.stoppedReason ?? undefined,
533
846
  });
534
847
  return { action: "keep", task: partialTask };
535
848
  }
536
- return handleFailure(deps, task, verificationResult);
849
+ return handleFailure(deps, task, verificationResult, context);
537
850
  }
538
851
  case "fail": {
539
- return handleFailure(deps, task, verificationResult);
852
+ return handleFailure(deps, task, verificationResult, context);
540
853
  }
541
854
  }
542
855
  }
@@ -545,9 +858,10 @@ export async function handleVerdict(deps, task, verificationResult) {
545
858
  * Handle a task failure: increment failure count, record failure,
546
859
  * decide keep/discard/escalate.
547
860
  */
548
- export async function handleFailure(deps, task, verificationResult) {
861
+ export async function handleFailure(deps, task, verificationResult, context = {}) {
549
862
  const updatedTask = {
550
863
  ...task,
864
+ status: statusAfterIncompleteVerification(task),
551
865
  consecutive_failure_count: task.consecutive_failure_count + 1,
552
866
  verification_verdict: verificationResult.verdict,
553
867
  verification_evidence: verificationResult.evidence?.map((e) => e.description ?? String(e)) ?? [],
@@ -559,6 +873,7 @@ export async function handleFailure(deps, task, verificationResult) {
559
873
  type: "failed",
560
874
  attempt: updatedTask.consecutive_failure_count,
561
875
  verificationResult,
876
+ stoppedReason: context.stoppedReason ?? undefined,
562
877
  });
563
878
  if (updatedTask.consecutive_failure_count >= 3) {
564
879
  deps.stallDetector.checkConsecutiveFailures(task.goal_id, task.primary_dimension, updatedTask.consecutive_failure_count);
@@ -570,9 +885,40 @@ export async function handleFailure(deps, task, verificationResult) {
570
885
  action: "escalate",
571
886
  verificationResult,
572
887
  reason: "consecutive failure threshold reached",
888
+ stoppedReason: context.stoppedReason ?? undefined,
889
+ });
890
+ return { action: "escalate", task: updatedTask };
891
+ }
892
+ const handoffWorkspace = isolatedWorkspaceHandoff(context);
893
+ if (handoffWorkspace) {
894
+ const reason = formatIsolatedWorkspaceHandoffReason(handoffWorkspace);
895
+ await appendTaskHistory(deps, task.goal_id, updatedTask);
896
+ await appendTaskOutcomeEvent(deps.stateManager, {
897
+ task: updatedTask,
898
+ type: "abandoned",
899
+ attempt: updatedTask.consecutive_failure_count,
900
+ action: "escalate",
901
+ verificationResult,
902
+ reason,
903
+ stoppedReason: context.stoppedReason ?? undefined,
573
904
  });
574
905
  return { action: "escalate", task: updatedTask };
575
906
  }
907
+ const discardedWorkspace = discardedDirtyIsolatedWorkspace(context);
908
+ if (discardedWorkspace) {
909
+ const reason = formatDiscardedDirtyIsolatedWorkspaceReason(discardedWorkspace);
910
+ await appendTaskHistory(deps, task.goal_id, updatedTask);
911
+ await appendTaskOutcomeEvent(deps.stateManager, {
912
+ task: updatedTask,
913
+ type: "abandoned",
914
+ attempt: updatedTask.consecutive_failure_count,
915
+ action: "discard",
916
+ verificationResult,
917
+ reason,
918
+ stoppedReason: context.stoppedReason ?? undefined,
919
+ });
920
+ return { action: "discard", task: updatedTask };
921
+ }
576
922
  const directionCorrect = isDirectionCorrect(verificationResult);
577
923
  if (directionCorrect) {
578
924
  await appendTaskHistory(deps, task.goal_id, updatedTask);
@@ -583,20 +929,36 @@ export async function handleFailure(deps, task, verificationResult) {
583
929
  action: "keep",
584
930
  verificationResult,
585
931
  reason: "failure kept for retry because direction remained correct",
932
+ stoppedReason: context.stoppedReason ?? undefined,
586
933
  });
587
934
  return { action: "keep", task: updatedTask };
588
935
  }
589
936
  if (updatedTask.reversibility === "reversible") {
937
+ const fileDiffs = verificationResult.file_diffs ?? [];
590
938
  const concreteRevertPaths = [
591
- ...new Set((verificationResult.file_diffs ?? [])
939
+ ...new Set(fileDiffs
940
+ .filter((diff) => diff.safe_to_revert !== false)
941
+ .map((diff) => diff.path)
942
+ .filter((filePath) => filePath.trim().length > 0)),
943
+ ];
944
+ const unsafeRevertPaths = [
945
+ ...new Set(fileDiffs
946
+ .filter((diff) => diff.safe_to_revert === false)
592
947
  .map((diff) => diff.path)
593
948
  .filter((filePath) => filePath.trim().length > 0)),
594
949
  ];
595
950
  const revertSuccess = await attemptRevert(deps, updatedTask, {
596
951
  concretePaths: concreteRevertPaths,
952
+ unsafePaths: unsafeRevertPaths,
953
+ });
954
+ deps.logger?.warn(`[task] revert attempted`, {
955
+ taskId: task.id,
956
+ success: revertSuccess.success,
957
+ reason: revertSuccess.reason,
958
+ concretePaths: revertSuccess.concretePaths,
959
+ unsafePaths: revertSuccess.unsafePaths,
597
960
  });
598
- deps.logger?.warn(`[task] revert attempted`, { taskId: task.id, success: revertSuccess });
599
- if (revertSuccess) {
961
+ if (revertSuccess.success) {
600
962
  await appendTaskHistory(deps, task.goal_id, updatedTask);
601
963
  await appendTaskOutcomeEvent(deps.stateManager, {
602
964
  task: updatedTask,
@@ -604,7 +966,8 @@ export async function handleFailure(deps, task, verificationResult) {
604
966
  attempt: updatedTask.consecutive_failure_count,
605
967
  action: "discard",
606
968
  verificationResult,
607
- reason: "task discarded after successful revert",
969
+ reason: `task discarded after successful ${revertSuccess.method ?? "revert"} for ${revertSuccess.concretePaths.length} concrete paths`,
970
+ stoppedReason: context.stoppedReason ?? undefined,
608
971
  });
609
972
  return { action: "discard", task: updatedTask };
610
973
  }
@@ -617,7 +980,14 @@ export async function handleFailure(deps, task, verificationResult) {
617
980
  attempt: updatedTask.consecutive_failure_count,
618
981
  action: "escalate",
619
982
  verificationResult,
620
- reason: "revert failed after wrong-direction result",
983
+ reason: revertSuccess.method === "git_unavailable"
984
+ ? `${revertSuccess.reason}; git restore is unavailable for this non-git workspace, so changed filesystem paths and artifacts require operator handoff`
985
+ : (revertSuccess.unsafePaths?.length ?? 0) > 0
986
+ ? `revert could not safely discard all task changes because some share pre-existing dirty paths: ${revertSuccess.unsafePaths?.join(", ")}`
987
+ : revertSuccess.concretePaths.length === 0
988
+ ? "revert skipped because no concrete changed paths were captured; task output requires operator review"
989
+ : `revert failed after wrong-direction result: ${revertSuccess.reason}`,
990
+ stoppedReason: context.stoppedReason ?? undefined,
621
991
  });
622
992
  return { action: "escalate", task: updatedTask };
623
993
  }
@@ -629,6 +999,7 @@ export async function handleFailure(deps, task, verificationResult) {
629
999
  action: "escalate",
630
1000
  verificationResult,
631
1001
  reason: "task cannot be safely retried or reverted",
1002
+ stoppedReason: context.stoppedReason ?? undefined,
632
1003
  });
633
1004
  return { action: "escalate", task: updatedTask };
634
1005
  }