pulseed 0.6.3 → 0.6.4

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 (509) 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 +238 -8
  4. package/dist/adapters/datasources/artifact-metric-datasource.js.map +1 -1
  5. package/dist/base/config/global-config.d.ts +4 -4
  6. package/dist/base/protocol/exact-protocol.d.ts +47 -0
  7. package/dist/base/protocol/exact-protocol.d.ts.map +1 -0
  8. package/dist/base/protocol/exact-protocol.js +175 -0
  9. package/dist/base/protocol/exact-protocol.js.map +1 -0
  10. package/dist/base/types/core.d.ts +1 -1
  11. package/dist/base/types/core.d.ts.map +1 -1
  12. package/dist/base/types/core.js +1 -0
  13. package/dist/base/types/core.js.map +1 -1
  14. package/dist/base/utils/workspace-path.d.ts +6 -0
  15. package/dist/base/utils/workspace-path.d.ts.map +1 -0
  16. package/dist/base/utils/workspace-path.js +24 -0
  17. package/dist/base/utils/workspace-path.js.map +1 -0
  18. package/dist/index.d.ts +4 -0
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +2 -0
  21. package/dist/index.js.map +1 -1
  22. package/dist/interface/chat/chat-event-state.d.ts +2 -0
  23. package/dist/interface/chat/chat-event-state.d.ts.map +1 -1
  24. package/dist/interface/chat/chat-event-state.js +22 -41
  25. package/dist/interface/chat/chat-event-state.js.map +1 -1
  26. package/dist/interface/chat/chat-events.d.ts +15 -1
  27. package/dist/interface/chat/chat-events.d.ts.map +1 -1
  28. package/dist/interface/chat/chat-history.d.ts +3816 -192
  29. package/dist/interface/chat/chat-history.d.ts.map +1 -1
  30. package/dist/interface/chat/chat-history.js +529 -5
  31. package/dist/interface/chat/chat-history.js.map +1 -1
  32. package/dist/interface/chat/chat-runner-commands.d.ts.map +1 -1
  33. package/dist/interface/chat/chat-runner-commands.js +22 -18
  34. package/dist/interface/chat/chat-runner-commands.js.map +1 -1
  35. package/dist/interface/chat/chat-runner-contracts.d.ts +5 -1
  36. package/dist/interface/chat/chat-runner-contracts.d.ts.map +1 -1
  37. package/dist/interface/chat/chat-runner-event-bridge.d.ts +13 -1
  38. package/dist/interface/chat/chat-runner-event-bridge.d.ts.map +1 -1
  39. package/dist/interface/chat/chat-runner-event-bridge.js +51 -3
  40. package/dist/interface/chat/chat-runner-event-bridge.js.map +1 -1
  41. package/dist/interface/chat/chat-runner-routes.d.ts +5 -17
  42. package/dist/interface/chat/chat-runner-routes.d.ts.map +1 -1
  43. package/dist/interface/chat/chat-runner-routes.js +80 -51
  44. package/dist/interface/chat/chat-runner-routes.js.map +1 -1
  45. package/dist/interface/chat/chat-runner-runtime.d.ts.map +1 -1
  46. package/dist/interface/chat/chat-runner-runtime.js +4 -0
  47. package/dist/interface/chat/chat-runner-runtime.js.map +1 -1
  48. package/dist/interface/chat/chat-runner.d.ts +7 -1
  49. package/dist/interface/chat/chat-runner.d.ts.map +1 -1
  50. package/dist/interface/chat/chat-runner.js +135 -49
  51. package/dist/interface/chat/chat-runner.js.map +1 -1
  52. package/dist/interface/chat/chat-session-store.d.ts +3 -0
  53. package/dist/interface/chat/chat-session-store.d.ts.map +1 -1
  54. package/dist/interface/chat/chat-session-store.js +12 -0
  55. package/dist/interface/chat/chat-session-store.js.map +1 -1
  56. package/dist/interface/chat/cross-platform-session.d.ts +15 -0
  57. package/dist/interface/chat/cross-platform-session.d.ts.map +1 -1
  58. package/dist/interface/chat/cross-platform-session.js +260 -42
  59. package/dist/interface/chat/cross-platform-session.js.map +1 -1
  60. package/dist/interface/chat/failure-recovery.d.ts.map +1 -1
  61. package/dist/interface/chat/failure-recovery.js +15 -1
  62. package/dist/interface/chat/failure-recovery.js.map +1 -1
  63. package/dist/interface/chat/freeform-route-classifier.d.ts +2 -2
  64. package/dist/interface/chat/ingress-router.d.ts +3 -0
  65. package/dist/interface/chat/ingress-router.d.ts.map +1 -1
  66. package/dist/interface/chat/ingress-router.js +3 -0
  67. package/dist/interface/chat/ingress-router.js.map +1 -1
  68. package/dist/interface/chat/model-request-builder.d.ts +37 -0
  69. package/dist/interface/chat/model-request-builder.d.ts.map +1 -0
  70. package/dist/interface/chat/model-request-builder.js +76 -0
  71. package/dist/interface/chat/model-request-builder.js.map +1 -0
  72. package/dist/interface/chat/turn-context.d.ts +200 -0
  73. package/dist/interface/chat/turn-context.d.ts.map +1 -0
  74. package/dist/interface/chat/turn-context.js +249 -0
  75. package/dist/interface/chat/turn-context.js.map +1 -0
  76. package/dist/interface/chat/turn-protocol.d.ts +35 -0
  77. package/dist/interface/chat/turn-protocol.d.ts.map +1 -0
  78. package/dist/interface/chat/turn-protocol.js +27 -0
  79. package/dist/interface/chat/turn-protocol.js.map +1 -0
  80. package/dist/interface/chat/user-input.d.ts +55 -0
  81. package/dist/interface/chat/user-input.d.ts.map +1 -0
  82. package/dist/interface/chat/user-input.js +52 -0
  83. package/dist/interface/chat/user-input.js.map +1 -0
  84. package/dist/interface/cli/cli-command-registry.d.ts +1 -1
  85. package/dist/interface/cli/cli-command-registry.d.ts.map +1 -1
  86. package/dist/interface/cli/cli-command-registry.js +12 -16
  87. package/dist/interface/cli/cli-command-registry.js.map +1 -1
  88. package/dist/interface/cli/commands/daemon-shared.d.ts +8 -0
  89. package/dist/interface/cli/commands/daemon-shared.d.ts.map +1 -1
  90. package/dist/interface/cli/commands/daemon-shared.js +18 -2
  91. package/dist/interface/cli/commands/daemon-shared.js.map +1 -1
  92. package/dist/interface/cli/commands/daemon.d.ts.map +1 -1
  93. package/dist/interface/cli/commands/daemon.js +5 -1
  94. package/dist/interface/cli/commands/daemon.js.map +1 -1
  95. package/dist/interface/cli/commands/doctor.d.ts.map +1 -1
  96. package/dist/interface/cli/commands/doctor.js +14 -1
  97. package/dist/interface/cli/commands/doctor.js.map +1 -1
  98. package/dist/interface/cli/commands/goal-dispatch.d.ts.map +1 -1
  99. package/dist/interface/cli/commands/goal-dispatch.js +10 -6
  100. package/dist/interface/cli/commands/goal-dispatch.js.map +1 -1
  101. package/dist/interface/cli/commands/goal-utils.d.ts.map +1 -1
  102. package/dist/interface/cli/commands/goal-utils.js +3 -5
  103. package/dist/interface/cli/commands/goal-utils.js.map +1 -1
  104. package/dist/interface/cli/commands/run.d.ts.map +1 -1
  105. package/dist/interface/cli/commands/run.js +50 -0
  106. package/dist/interface/cli/commands/run.js.map +1 -1
  107. package/dist/interface/cli/setup.d.ts +1 -1
  108. package/dist/interface/cli/setup.d.ts.map +1 -1
  109. package/dist/interface/cli/setup.js +4 -3
  110. package/dist/interface/cli/setup.js.map +1 -1
  111. package/dist/interface/cli/utils/loop-runner.d.ts +1 -0
  112. package/dist/interface/cli/utils/loop-runner.d.ts.map +1 -1
  113. package/dist/interface/cli/utils/loop-runner.js +12 -3
  114. package/dist/interface/cli/utils/loop-runner.js.map +1 -1
  115. package/dist/interface/tui/app.d.ts +6 -1
  116. package/dist/interface/tui/app.d.ts.map +1 -1
  117. package/dist/interface/tui/app.js +29 -12
  118. package/dist/interface/tui/app.js.map +1 -1
  119. package/dist/interface/tui/bash-mode.d.ts.map +1 -1
  120. package/dist/interface/tui/bash-mode.js +2 -9
  121. package/dist/interface/tui/bash-mode.js.map +1 -1
  122. package/dist/interface/tui/chat/viewport.d.ts.map +1 -1
  123. package/dist/interface/tui/chat/viewport.js +57 -11
  124. package/dist/interface/tui/chat/viewport.js.map +1 -1
  125. package/dist/interface/tui/entry-deps.d.ts +6 -1
  126. package/dist/interface/tui/entry-deps.d.ts.map +1 -1
  127. package/dist/interface/tui/entry-deps.js +3 -0
  128. package/dist/interface/tui/entry-deps.js.map +1 -1
  129. package/dist/interface/tui/entry.d.ts.map +1 -1
  130. package/dist/interface/tui/entry.js +6 -2
  131. package/dist/interface/tui/entry.js.map +1 -1
  132. package/dist/interface/tui/input-action.d.ts.map +1 -1
  133. package/dist/interface/tui/input-action.js +3 -2
  134. package/dist/interface/tui/input-action.js.map +1 -1
  135. package/dist/interface/tui/intent-recognizer.d.ts.map +1 -1
  136. package/dist/interface/tui/intent-recognizer.js +21 -33
  137. package/dist/interface/tui/intent-recognizer.js.map +1 -1
  138. package/dist/orchestrator/execution/adapter-layer.d.ts +6 -1
  139. package/dist/orchestrator/execution/adapter-layer.d.ts.map +1 -1
  140. package/dist/orchestrator/execution/adapter-layer.js.map +1 -1
  141. package/dist/orchestrator/execution/agent-loop/agent-loop-command-classifier.d.ts +12 -1
  142. package/dist/orchestrator/execution/agent-loop/agent-loop-command-classifier.d.ts.map +1 -1
  143. package/dist/orchestrator/execution/agent-loop/agent-loop-command-classifier.js +16 -31
  144. package/dist/orchestrator/execution/agent-loop/agent-loop-command-classifier.js.map +1 -1
  145. package/dist/orchestrator/execution/agent-loop/agent-loop-compaction-record.d.ts +75 -0
  146. package/dist/orchestrator/execution/agent-loop/agent-loop-compaction-record.d.ts.map +1 -0
  147. package/dist/orchestrator/execution/agent-loop/agent-loop-compaction-record.js +10 -0
  148. package/dist/orchestrator/execution/agent-loop/agent-loop-compaction-record.js.map +1 -0
  149. package/dist/orchestrator/execution/agent-loop/agent-loop-compactor.d.ts +3 -2
  150. package/dist/orchestrator/execution/agent-loop/agent-loop-compactor.d.ts.map +1 -1
  151. package/dist/orchestrator/execution/agent-loop/agent-loop-compactor.js +185 -22
  152. package/dist/orchestrator/execution/agent-loop/agent-loop-compactor.js.map +1 -1
  153. package/dist/orchestrator/execution/agent-loop/agent-loop-default-profile.d.ts.map +1 -1
  154. package/dist/orchestrator/execution/agent-loop/agent-loop-default-profile.js +7 -1
  155. package/dist/orchestrator/execution/agent-loop/agent-loop-default-profile.js.map +1 -1
  156. package/dist/orchestrator/execution/agent-loop/agent-loop-events.d.ts +8 -1
  157. package/dist/orchestrator/execution/agent-loop/agent-loop-events.d.ts.map +1 -1
  158. package/dist/orchestrator/execution/agent-loop/agent-loop-events.js.map +1 -1
  159. package/dist/orchestrator/execution/agent-loop/agent-loop-history.d.ts +3 -1
  160. package/dist/orchestrator/execution/agent-loop/agent-loop-history.d.ts.map +1 -1
  161. package/dist/orchestrator/execution/agent-loop/agent-loop-history.js +12 -3
  162. package/dist/orchestrator/execution/agent-loop/agent-loop-history.js.map +1 -1
  163. package/dist/orchestrator/execution/agent-loop/agent-loop-model-client.d.ts.map +1 -1
  164. package/dist/orchestrator/execution/agent-loop/agent-loop-model-client.js +7 -1
  165. package/dist/orchestrator/execution/agent-loop/agent-loop-model-client.js.map +1 -1
  166. package/dist/orchestrator/execution/agent-loop/agent-loop-model.d.ts +37 -0
  167. package/dist/orchestrator/execution/agent-loop/agent-loop-model.d.ts.map +1 -1
  168. package/dist/orchestrator/execution/agent-loop/agent-loop-model.js +21 -0
  169. package/dist/orchestrator/execution/agent-loop/agent-loop-model.js.map +1 -1
  170. package/dist/orchestrator/execution/agent-loop/agent-loop-result.d.ts +17 -11
  171. package/dist/orchestrator/execution/agent-loop/agent-loop-result.d.ts.map +1 -1
  172. package/dist/orchestrator/execution/agent-loop/agent-loop-session-state.d.ts +4 -0
  173. package/dist/orchestrator/execution/agent-loop/agent-loop-session-state.d.ts.map +1 -1
  174. package/dist/orchestrator/execution/agent-loop/agent-loop-session-state.js +135 -0
  175. package/dist/orchestrator/execution/agent-loop/agent-loop-session-state.js.map +1 -1
  176. package/dist/orchestrator/execution/agent-loop/agent-loop-tool-runtime.d.ts +3 -2
  177. package/dist/orchestrator/execution/agent-loop/agent-loop-tool-runtime.d.ts.map +1 -1
  178. package/dist/orchestrator/execution/agent-loop/agent-loop-tool-runtime.js +68 -61
  179. package/dist/orchestrator/execution/agent-loop/agent-loop-tool-runtime.js.map +1 -1
  180. package/dist/orchestrator/execution/agent-loop/agent-loop-turn-context.d.ts +3 -1
  181. package/dist/orchestrator/execution/agent-loop/agent-loop-turn-context.d.ts.map +1 -1
  182. package/dist/orchestrator/execution/agent-loop/agent-loop-turn-context.js.map +1 -1
  183. package/dist/orchestrator/execution/agent-loop/agent-timeline.d.ts +12 -1
  184. package/dist/orchestrator/execution/agent-loop/agent-timeline.d.ts.map +1 -1
  185. package/dist/orchestrator/execution/agent-loop/agent-timeline.js +19 -56
  186. package/dist/orchestrator/execution/agent-loop/agent-timeline.js.map +1 -1
  187. package/dist/orchestrator/execution/agent-loop/anthropic-messages-agent-loop-model-client.d.ts.map +1 -1
  188. package/dist/orchestrator/execution/agent-loop/anthropic-messages-agent-loop-model-client.js +8 -2
  189. package/dist/orchestrator/execution/agent-loop/anthropic-messages-agent-loop-model-client.js.map +1 -1
  190. package/dist/orchestrator/execution/agent-loop/bounded-agent-loop-runner.d.ts +12 -0
  191. package/dist/orchestrator/execution/agent-loop/bounded-agent-loop-runner.d.ts.map +1 -1
  192. package/dist/orchestrator/execution/agent-loop/bounded-agent-loop-runner.js +400 -80
  193. package/dist/orchestrator/execution/agent-loop/bounded-agent-loop-runner.js.map +1 -1
  194. package/dist/orchestrator/execution/agent-loop/chat-agent-loop-runner.d.ts +1 -1
  195. package/dist/orchestrator/execution/agent-loop/chat-agent-loop-runner.d.ts.map +1 -1
  196. package/dist/orchestrator/execution/agent-loop/chat-agent-loop-runner.js +80 -12
  197. package/dist/orchestrator/execution/agent-loop/chat-agent-loop-runner.js.map +1 -1
  198. package/dist/orchestrator/execution/agent-loop/chat-display-output.d.ts +1 -0
  199. package/dist/orchestrator/execution/agent-loop/chat-display-output.d.ts.map +1 -1
  200. package/dist/orchestrator/execution/agent-loop/chat-display-output.js +3 -1
  201. package/dist/orchestrator/execution/agent-loop/chat-display-output.js.map +1 -1
  202. package/dist/orchestrator/execution/agent-loop/index.d.ts +3 -0
  203. package/dist/orchestrator/execution/agent-loop/index.d.ts.map +1 -1
  204. package/dist/orchestrator/execution/agent-loop/index.js +3 -0
  205. package/dist/orchestrator/execution/agent-loop/index.js.map +1 -1
  206. package/dist/orchestrator/execution/agent-loop/openai-responses-agent-loop-model-client.d.ts +1 -0
  207. package/dist/orchestrator/execution/agent-loop/openai-responses-agent-loop-model-client.d.ts.map +1 -1
  208. package/dist/orchestrator/execution/agent-loop/openai-responses-agent-loop-model-client.js +51 -9
  209. package/dist/orchestrator/execution/agent-loop/openai-responses-agent-loop-model-client.js.map +1 -1
  210. package/dist/orchestrator/execution/agent-loop/response-item-tool-router.d.ts +20 -0
  211. package/dist/orchestrator/execution/agent-loop/response-item-tool-router.d.ts.map +1 -0
  212. package/dist/orchestrator/execution/agent-loop/response-item-tool-router.js +180 -0
  213. package/dist/orchestrator/execution/agent-loop/response-item-tool-router.js.map +1 -0
  214. package/dist/orchestrator/execution/agent-loop/response-item.d.ts +805 -0
  215. package/dist/orchestrator/execution/agent-loop/response-item.d.ts.map +1 -0
  216. package/dist/orchestrator/execution/agent-loop/response-item.js +104 -0
  217. package/dist/orchestrator/execution/agent-loop/response-item.js.map +1 -0
  218. package/dist/orchestrator/execution/agent-loop/task-agent-loop-context.d.ts +7 -2
  219. package/dist/orchestrator/execution/agent-loop/task-agent-loop-context.d.ts.map +1 -1
  220. package/dist/orchestrator/execution/agent-loop/task-agent-loop-context.js +20 -1
  221. package/dist/orchestrator/execution/agent-loop/task-agent-loop-context.js.map +1 -1
  222. package/dist/orchestrator/execution/agent-loop/task-agent-loop-result.d.ts +5 -3
  223. package/dist/orchestrator/execution/agent-loop/task-agent-loop-result.d.ts.map +1 -1
  224. package/dist/orchestrator/execution/agent-loop/task-agent-loop-result.js +109 -10
  225. package/dist/orchestrator/execution/agent-loop/task-agent-loop-result.js.map +1 -1
  226. package/dist/orchestrator/execution/agent-loop/task-agent-loop-runner.d.ts +2 -0
  227. package/dist/orchestrator/execution/agent-loop/task-agent-loop-runner.d.ts.map +1 -1
  228. package/dist/orchestrator/execution/agent-loop/task-agent-loop-runner.js +9 -4
  229. package/dist/orchestrator/execution/agent-loop/task-agent-loop-runner.js.map +1 -1
  230. package/dist/orchestrator/execution/agent-loop/task-agent-loop-verification.d.ts +0 -1
  231. package/dist/orchestrator/execution/agent-loop/task-agent-loop-verification.d.ts.map +1 -1
  232. package/dist/orchestrator/execution/agent-loop/task-agent-loop-verification.js +7 -87
  233. package/dist/orchestrator/execution/agent-loop/task-agent-loop-verification.js.map +1 -1
  234. package/dist/orchestrator/execution/agent-loop/task-agent-loop-worktree.d.ts.map +1 -1
  235. package/dist/orchestrator/execution/agent-loop/task-agent-loop-worktree.js +25 -0
  236. package/dist/orchestrator/execution/agent-loop/task-agent-loop-worktree.js.map +1 -1
  237. package/dist/orchestrator/execution/context/issue-context-fetcher.d.ts +5 -1
  238. package/dist/orchestrator/execution/context/issue-context-fetcher.d.ts.map +1 -1
  239. package/dist/orchestrator/execution/context/issue-context-fetcher.js +7 -4
  240. package/dist/orchestrator/execution/context/issue-context-fetcher.js.map +1 -1
  241. package/dist/orchestrator/execution/task/task-artifact-contract.d.ts +18 -0
  242. package/dist/orchestrator/execution/task/task-artifact-contract.d.ts.map +1 -0
  243. package/dist/orchestrator/execution/task/task-artifact-contract.js +176 -0
  244. package/dist/orchestrator/execution/task/task-artifact-contract.js.map +1 -0
  245. package/dist/orchestrator/execution/task/task-diff-capture.d.ts +14 -1
  246. package/dist/orchestrator/execution/task/task-diff-capture.d.ts.map +1 -1
  247. package/dist/orchestrator/execution/task/task-diff-capture.js +269 -17
  248. package/dist/orchestrator/execution/task/task-diff-capture.js.map +1 -1
  249. package/dist/orchestrator/execution/task/task-execution-helpers.d.ts +1 -0
  250. package/dist/orchestrator/execution/task/task-execution-helpers.d.ts.map +1 -1
  251. package/dist/orchestrator/execution/task/task-execution-helpers.js +76 -17
  252. package/dist/orchestrator/execution/task/task-execution-helpers.js.map +1 -1
  253. package/dist/orchestrator/execution/task/task-executor.d.ts +16 -1
  254. package/dist/orchestrator/execution/task/task-executor.d.ts.map +1 -1
  255. package/dist/orchestrator/execution/task/task-executor.js +55 -50
  256. package/dist/orchestrator/execution/task/task-executor.js.map +1 -1
  257. package/dist/orchestrator/execution/task/task-generation.d.ts +54 -1
  258. package/dist/orchestrator/execution/task/task-generation.d.ts.map +1 -1
  259. package/dist/orchestrator/execution/task/task-generation.js +19 -3
  260. package/dist/orchestrator/execution/task/task-generation.js.map +1 -1
  261. package/dist/orchestrator/execution/task/task-lifecycle-runner.d.ts +2 -2
  262. package/dist/orchestrator/execution/task/task-lifecycle-runner.d.ts.map +1 -1
  263. package/dist/orchestrator/execution/task/task-lifecycle-runner.js +31 -4
  264. package/dist/orchestrator/execution/task/task-lifecycle-runner.js.map +1 -1
  265. package/dist/orchestrator/execution/task/task-lifecycle.d.ts +3 -3
  266. package/dist/orchestrator/execution/task/task-lifecycle.d.ts.map +1 -1
  267. package/dist/orchestrator/execution/task/task-lifecycle.js +51 -10
  268. package/dist/orchestrator/execution/task/task-lifecycle.js.map +1 -1
  269. package/dist/orchestrator/execution/task/task-outcome-ledger.d.ts +8 -0
  270. package/dist/orchestrator/execution/task/task-outcome-ledger.d.ts.map +1 -1
  271. package/dist/orchestrator/execution/task/task-outcome-ledger.js +59 -3
  272. package/dist/orchestrator/execution/task/task-outcome-ledger.js.map +1 -1
  273. package/dist/orchestrator/execution/task/task-prompt-builder.d.ts +3 -1
  274. package/dist/orchestrator/execution/task/task-prompt-builder.d.ts.map +1 -1
  275. package/dist/orchestrator/execution/task/task-prompt-builder.js +23 -12
  276. package/dist/orchestrator/execution/task/task-prompt-builder.js.map +1 -1
  277. package/dist/orchestrator/execution/task/task-verifier-rules.d.ts +3 -2
  278. package/dist/orchestrator/execution/task/task-verifier-rules.d.ts.map +1 -1
  279. package/dist/orchestrator/execution/task/task-verifier-rules.js +328 -90
  280. package/dist/orchestrator/execution/task/task-verifier-rules.js.map +1 -1
  281. package/dist/orchestrator/execution/task/task-verifier-types.d.ts +13 -0
  282. package/dist/orchestrator/execution/task/task-verifier-types.d.ts.map +1 -1
  283. package/dist/orchestrator/execution/task/task-verifier-types.js.map +1 -1
  284. package/dist/orchestrator/execution/task/task-verifier.d.ts +5 -4
  285. package/dist/orchestrator/execution/task/task-verifier.d.ts.map +1 -1
  286. package/dist/orchestrator/execution/task/task-verifier.js +229 -22
  287. package/dist/orchestrator/execution/task/task-verifier.js.map +1 -1
  288. package/dist/orchestrator/execution/task/task-workspace.d.ts +5 -0
  289. package/dist/orchestrator/execution/task/task-workspace.d.ts.map +1 -1
  290. package/dist/orchestrator/execution/task/task-workspace.js +20 -10
  291. package/dist/orchestrator/execution/task/task-workspace.js.map +1 -1
  292. package/dist/orchestrator/execution/types/task-group.d.ts +76 -5
  293. package/dist/orchestrator/execution/types/task-group.d.ts.map +1 -1
  294. package/dist/orchestrator/execution/types/task.d.ts +117 -3
  295. package/dist/orchestrator/execution/types/task.d.ts.map +1 -1
  296. package/dist/orchestrator/execution/types/task.js +12 -0
  297. package/dist/orchestrator/execution/types/task.js.map +1 -1
  298. package/dist/orchestrator/loop/durable-loop/preparation.d.ts.map +1 -1
  299. package/dist/orchestrator/loop/durable-loop/preparation.js +7 -1
  300. package/dist/orchestrator/loop/durable-loop/preparation.js.map +1 -1
  301. package/dist/platform/corrections/memory-correction-ledger.d.ts +30 -30
  302. package/dist/platform/corrections/memory-governance.d.ts +2 -2
  303. package/dist/platform/knowledge/types/agent-memory.d.ts +30 -30
  304. package/dist/platform/observation/context-provider/collector.d.ts.map +1 -1
  305. package/dist/platform/observation/context-provider/collector.js +89 -24
  306. package/dist/platform/observation/context-provider/collector.js.map +1 -1
  307. package/dist/platform/observation/data-source-adapter.d.ts +2 -0
  308. package/dist/platform/observation/data-source-adapter.d.ts.map +1 -1
  309. package/dist/platform/observation/data-source-adapter.js.map +1 -1
  310. package/dist/platform/observation/observation-apply.d.ts.map +1 -1
  311. package/dist/platform/observation/observation-apply.js +8 -2
  312. package/dist/platform/observation/observation-apply.js.map +1 -1
  313. package/dist/platform/observation/observation-engine.d.ts.map +1 -1
  314. package/dist/platform/observation/observation-engine.js +118 -70
  315. package/dist/platform/observation/observation-engine.js.map +1 -1
  316. package/dist/platform/observation/observation-helpers.d.ts +2 -0
  317. package/dist/platform/observation/observation-helpers.d.ts.map +1 -1
  318. package/dist/platform/observation/observation-helpers.js.map +1 -1
  319. package/dist/platform/observation/types/data-source.d.ts +48 -0
  320. package/dist/platform/observation/types/data-source.d.ts.map +1 -1
  321. package/dist/platform/observation/types/data-source.js +4 -0
  322. package/dist/platform/observation/types/data-source.js.map +1 -1
  323. package/dist/platform/observation/workspace-context.d.ts.map +1 -1
  324. package/dist/platform/observation/workspace-context.js +13 -18
  325. package/dist/platform/observation/workspace-context.js.map +1 -1
  326. package/dist/platform/soil/contracts.d.ts +56 -56
  327. package/dist/reporting/types/report.d.ts +7 -0
  328. package/dist/reporting/types/report.d.ts.map +1 -1
  329. package/dist/runtime/approval-broker.d.ts +12 -0
  330. package/dist/runtime/approval-broker.d.ts.map +1 -1
  331. package/dist/runtime/approval-broker.js +27 -7
  332. package/dist/runtime/approval-broker.js.map +1 -1
  333. package/dist/runtime/control/daemon-runtime-control-executor.d.ts.map +1 -1
  334. package/dist/runtime/control/daemon-runtime-control-executor.js +9 -4
  335. package/dist/runtime/control/daemon-runtime-control-executor.js.map +1 -1
  336. package/dist/runtime/control/runtime-control-intent.d.ts.map +1 -1
  337. package/dist/runtime/control/runtime-control-intent.js +3 -2
  338. package/dist/runtime/control/runtime-control-intent.js.map +1 -1
  339. package/dist/runtime/control/runtime-control-service.d.ts +2 -1
  340. package/dist/runtime/control/runtime-control-service.d.ts.map +1 -1
  341. package/dist/runtime/control/runtime-control-service.js +9 -2
  342. package/dist/runtime/control/runtime-control-service.js.map +1 -1
  343. package/dist/runtime/control/runtime-target-resolver.js +2 -0
  344. package/dist/runtime/control/runtime-target-resolver.js.map +1 -1
  345. package/dist/runtime/daemon/runner-goal-cycle.d.ts.map +1 -1
  346. package/dist/runtime/daemon/runner-goal-cycle.js +1 -2
  347. package/dist/runtime/daemon/runner-goal-cycle.js.map +1 -1
  348. package/dist/runtime/daemon/runner-recovery.d.ts +17 -3
  349. package/dist/runtime/daemon/runner-recovery.d.ts.map +1 -1
  350. package/dist/runtime/daemon/runner-recovery.js +50 -12
  351. package/dist/runtime/daemon/runner-recovery.js.map +1 -1
  352. package/dist/runtime/daemon/runner-startup.d.ts.map +1 -1
  353. package/dist/runtime/daemon/runner-startup.js +18 -1
  354. package/dist/runtime/daemon/runner-startup.js.map +1 -1
  355. package/dist/runtime/daemon/runner.d.ts.map +1 -1
  356. package/dist/runtime/daemon/runner.js +3 -2
  357. package/dist/runtime/daemon/runner.js.map +1 -1
  358. package/dist/runtime/daemon/runtime-ownership.d.ts +0 -1
  359. package/dist/runtime/daemon/runtime-ownership.d.ts.map +1 -1
  360. package/dist/runtime/daemon/runtime-ownership.js +18 -18
  361. package/dist/runtime/daemon/runtime-ownership.js.map +1 -1
  362. package/dist/runtime/daemon/wait-deadline-resolver.d.ts.map +1 -1
  363. package/dist/runtime/daemon/wait-deadline-resolver.js +2 -0
  364. package/dist/runtime/daemon/wait-deadline-resolver.js.map +1 -1
  365. package/dist/runtime/evidence-answer.d.ts.map +1 -1
  366. package/dist/runtime/evidence-answer.js +34 -7
  367. package/dist/runtime/evidence-answer.js.map +1 -1
  368. package/dist/runtime/gateway/channel-adapter.d.ts +3 -0
  369. package/dist/runtime/gateway/channel-adapter.d.ts.map +1 -1
  370. package/dist/runtime/gateway/channel-display-policy.d.ts +42 -0
  371. package/dist/runtime/gateway/channel-display-policy.d.ts.map +1 -0
  372. package/dist/runtime/gateway/channel-display-policy.js +85 -0
  373. package/dist/runtime/gateway/channel-display-policy.js.map +1 -0
  374. package/dist/runtime/gateway/chat-event-rendering.d.ts +2 -1
  375. package/dist/runtime/gateway/chat-event-rendering.d.ts.map +1 -1
  376. package/dist/runtime/gateway/chat-event-rendering.js +2 -0
  377. package/dist/runtime/gateway/chat-event-rendering.js.map +1 -1
  378. package/dist/runtime/gateway/chat-session-dispatch.d.ts.map +1 -1
  379. package/dist/runtime/gateway/chat-session-dispatch.js +4 -9
  380. package/dist/runtime/gateway/chat-session-dispatch.js.map +1 -1
  381. package/dist/runtime/gateway/chat-session-port.d.ts +2 -0
  382. package/dist/runtime/gateway/chat-session-port.d.ts.map +1 -1
  383. package/dist/runtime/gateway/chat-session-port.js.map +1 -1
  384. package/dist/runtime/gateway/discord-gateway-adapter.d.ts +4 -0
  385. package/dist/runtime/gateway/discord-gateway-adapter.d.ts.map +1 -1
  386. package/dist/runtime/gateway/discord-gateway-adapter.js +100 -31
  387. package/dist/runtime/gateway/discord-gateway-adapter.js.map +1 -1
  388. package/dist/runtime/gateway/index.d.ts +4 -0
  389. package/dist/runtime/gateway/index.d.ts.map +1 -1
  390. package/dist/runtime/gateway/index.js +2 -0
  391. package/dist/runtime/gateway/index.js.map +1 -1
  392. package/dist/runtime/gateway/non-tui-display-projector.d.ts +40 -0
  393. package/dist/runtime/gateway/non-tui-display-projector.d.ts.map +1 -0
  394. package/dist/runtime/gateway/non-tui-display-projector.js +166 -0
  395. package/dist/runtime/gateway/non-tui-display-projector.js.map +1 -0
  396. package/dist/runtime/gateway/signal-gateway-adapter.d.ts +1 -0
  397. package/dist/runtime/gateway/signal-gateway-adapter.d.ts.map +1 -1
  398. package/dist/runtime/gateway/signal-gateway-adapter.js +47 -4
  399. package/dist/runtime/gateway/signal-gateway-adapter.js.map +1 -1
  400. package/dist/runtime/gateway/slack-channel-adapter.d.ts +1 -0
  401. package/dist/runtime/gateway/slack-channel-adapter.d.ts.map +1 -1
  402. package/dist/runtime/gateway/slack-channel-adapter.js +93 -18
  403. package/dist/runtime/gateway/slack-channel-adapter.js.map +1 -1
  404. package/dist/runtime/gateway/telegram-gateway-adapter.d.ts +2 -0
  405. package/dist/runtime/gateway/telegram-gateway-adapter.d.ts.map +1 -1
  406. package/dist/runtime/gateway/telegram-gateway-adapter.js +61 -113
  407. package/dist/runtime/gateway/telegram-gateway-adapter.js.map +1 -1
  408. package/dist/runtime/gateway/whatsapp-gateway-adapter.d.ts +1 -0
  409. package/dist/runtime/gateway/whatsapp-gateway-adapter.d.ts.map +1 -1
  410. package/dist/runtime/gateway/whatsapp-gateway-adapter.js +49 -4
  411. package/dist/runtime/gateway/whatsapp-gateway-adapter.js.map +1 -1
  412. package/dist/runtime/permission-dialogue.d.ts +113 -0
  413. package/dist/runtime/permission-dialogue.d.ts.map +1 -0
  414. package/dist/runtime/permission-dialogue.js +82 -0
  415. package/dist/runtime/permission-dialogue.js.map +1 -0
  416. package/dist/runtime/run-spec/derive.d.ts +14 -14
  417. package/dist/runtime/run-spec/handoff.js +2 -0
  418. package/dist/runtime/run-spec/handoff.js.map +1 -1
  419. package/dist/runtime/run-spec/types.d.ts +16 -16
  420. package/dist/runtime/session-registry/types.d.ts +12 -12
  421. package/dist/runtime/store/artifact-retention.d.ts +2 -0
  422. package/dist/runtime/store/artifact-retention.d.ts.map +1 -1
  423. package/dist/runtime/store/artifact-retention.js +24 -21
  424. package/dist/runtime/store/artifact-retention.js.map +1 -1
  425. package/dist/runtime/store/budget-store.d.ts +8 -8
  426. package/dist/runtime/store/evidence-ledger.d.ts.map +1 -1
  427. package/dist/runtime/store/evidence-ledger.js +39 -1
  428. package/dist/runtime/store/evidence-ledger.js.map +1 -1
  429. package/dist/runtime/store/evidence-types.d.ts +118 -118
  430. package/dist/runtime/store/experiment-queue-store.d.ts +20 -20
  431. package/dist/runtime/store/reproducibility-manifest.d.ts +20 -20
  432. package/dist/runtime/store/runtime-operation-schemas.d.ts +18 -18
  433. package/dist/runtime/store/runtime-operation-schemas.d.ts.map +1 -1
  434. package/dist/runtime/store/runtime-operation-schemas.js +1 -0
  435. package/dist/runtime/store/runtime-operation-schemas.js.map +1 -1
  436. package/dist/runtime/store/runtime-schemas.d.ts +58 -28
  437. package/dist/runtime/store/runtime-schemas.d.ts.map +1 -1
  438. package/dist/runtime/store/runtime-schemas.js +1 -0
  439. package/dist/runtime/store/runtime-schemas.js.map +1 -1
  440. package/dist/tools/execution/MemorySaveTool/MemorySaveTool.d.ts +8 -8
  441. package/dist/tools/execution/RunAdapterTool/RunAdapterTool.d.ts +6 -0
  442. package/dist/tools/execution/RunAdapterTool/RunAdapterTool.d.ts.map +1 -1
  443. package/dist/tools/execution/RunAdapterTool/RunAdapterTool.js +2 -0
  444. package/dist/tools/execution/RunAdapterTool/RunAdapterTool.js.map +1 -1
  445. package/dist/tools/execution-orchestrator.d.ts +29 -0
  446. package/dist/tools/execution-orchestrator.d.ts.map +1 -0
  447. package/dist/tools/execution-orchestrator.js +153 -0
  448. package/dist/tools/execution-orchestrator.js.map +1 -0
  449. package/dist/tools/executor.d.ts +6 -0
  450. package/dist/tools/executor.d.ts.map +1 -1
  451. package/dist/tools/executor.js +48 -11
  452. package/dist/tools/executor.js.map +1 -1
  453. package/dist/tools/fs/ApplyPatchTool/ApplyPatchTool.d.ts.map +1 -1
  454. package/dist/tools/fs/ApplyPatchTool/ApplyPatchTool.js +130 -17
  455. package/dist/tools/fs/ApplyPatchTool/ApplyPatchTool.js.map +1 -1
  456. package/dist/tools/mutation/TaskStopTool/TaskStopTool.d.ts.map +1 -1
  457. package/dist/tools/mutation/TaskStopTool/TaskStopTool.js +8 -0
  458. package/dist/tools/mutation/TaskStopTool/TaskStopTool.js.map +1 -1
  459. package/dist/tools/mutation/TaskUpdateTool/TaskUpdateTool.d.ts +6 -6
  460. package/dist/tools/network/GitHubCliTool/GitHubCliTool.d.ts +4 -4
  461. package/dist/tools/network/McpStdioTool/McpStdioTool.d.ts +4 -4
  462. package/dist/tools/permission.d.ts +0 -1
  463. package/dist/tools/permission.d.ts.map +1 -1
  464. package/dist/tools/permission.js +9 -33
  465. package/dist/tools/permission.js.map +1 -1
  466. package/dist/tools/query/CodeReadContextTool/CodeReadContextTool.d.ts +4 -4
  467. package/dist/tools/query/CodeSearchRepairTool/CodeSearchRepairTool.d.ts +8 -8
  468. package/dist/tools/query/CodeSearchTool/CodeSearchTool.d.ts +4 -4
  469. package/dist/tools/query/MemoryRecallTool/MemoryRecallTool.d.ts +4 -4
  470. package/dist/tools/query/runtime-session-tools.d.ts +73 -5
  471. package/dist/tools/query/runtime-session-tools.d.ts.map +1 -1
  472. package/dist/tools/query/runtime-session-tools.js +114 -0
  473. package/dist/tools/query/runtime-session-tools.js.map +1 -1
  474. package/dist/tools/runtime/LongRunningRuntimeTools.d.ts +60 -42
  475. package/dist/tools/runtime/LongRunningRuntimeTools.d.ts.map +1 -1
  476. package/dist/tools/runtime/LongRunningRuntimeTools.js +4 -1
  477. package/dist/tools/runtime/LongRunningRuntimeTools.js.map +1 -1
  478. package/dist/tools/runtime/RunSpecHandoffTools.d.ts.map +1 -1
  479. package/dist/tools/runtime/RunSpecHandoffTools.js +162 -2
  480. package/dist/tools/runtime/RunSpecHandoffTools.js.map +1 -1
  481. package/dist/tools/runtime/SetupRuntimeControlTools.d.ts.map +1 -1
  482. package/dist/tools/runtime/SetupRuntimeControlTools.js +169 -17
  483. package/dist/tools/runtime/SetupRuntimeControlTools.js.map +1 -1
  484. package/dist/tools/system/GitDiffTool/GitDiffTool.d.ts +4 -4
  485. package/dist/tools/system/ShellCommandTool/ShellCommandTool.d.ts.map +1 -1
  486. package/dist/tools/system/ShellCommandTool/ShellCommandTool.js +7 -1
  487. package/dist/tools/system/ShellCommandTool/ShellCommandTool.js.map +1 -1
  488. package/dist/tools/system/ShellTool/ShellTool.d.ts.map +1 -1
  489. package/dist/tools/system/ShellTool/ShellTool.js +24 -10
  490. package/dist/tools/system/ShellTool/ShellTool.js.map +1 -1
  491. package/dist/tools/system/ShellTool/command-policy.d.ts +11 -8
  492. package/dist/tools/system/ShellTool/command-policy.d.ts.map +1 -1
  493. package/dist/tools/system/ShellTool/command-policy.js +402 -98
  494. package/dist/tools/system/ShellTool/command-policy.js.map +1 -1
  495. package/dist/tools/system/TestRunnerTool/TestRunnerTool.d.ts +1 -1
  496. package/dist/tools/system/TestRunnerTool/TestRunnerTool.d.ts.map +1 -1
  497. package/dist/tools/system/TestRunnerTool/TestRunnerTool.js +152 -8
  498. package/dist/tools/system/TestRunnerTool/TestRunnerTool.js.map +1 -1
  499. package/dist/tools/system/UpdatePlanTool/UpdatePlanTool.js +1 -1
  500. package/dist/tools/system/UpdatePlanTool/UpdatePlanTool.js.map +1 -1
  501. package/dist/tools/types.d.ts +34 -12
  502. package/dist/tools/types.d.ts.map +1 -1
  503. package/dist/tools/types.js +26 -3
  504. package/dist/tools/types.js.map +1 -1
  505. package/dist/tools/workspace-scope.d.ts +11 -0
  506. package/dist/tools/workspace-scope.d.ts.map +1 -0
  507. package/dist/tools/workspace-scope.js +77 -0
  508. package/dist/tools/workspace-scope.js.map +1 -0
  509. package/package.json +1 -1
@@ -5,6 +5,7 @@ import { SessionManager } from "../session-manager.js";
5
5
  import { TrustManager } from "../../../platform/traits/trust-manager.js";
6
6
  import { StallDetector } from "../../../platform/drive/stall-detector.js";
7
7
  import { AdapterRegistry } from "../adapter-layer.js";
8
+ import type { AgentResult } from "../adapter-layer.js";
8
9
  import type { Logger } from "../../../runtime/logger.js";
9
10
  import type { IPromptGateway } from "../../../prompt/gateway.js";
10
11
  import type { ToolExecutor } from "../../../tools/executor.js";
@@ -28,6 +29,18 @@ export interface FailureResult {
28
29
  action: "keep" | "discard" | "escalate";
29
30
  task: import("../../../base/types/task.js").Task;
30
31
  }
32
+ export interface RevertAttemptResult {
33
+ success: boolean;
34
+ concretePaths: string[];
35
+ unsafePaths?: string[];
36
+ reason: string;
37
+ method?: "git_restore_tool" | "git_restore_child_process";
38
+ }
39
+ export interface VerdictHandlingContext {
40
+ stoppedReason?: AgentResult["stopped_reason"] | null;
41
+ verificationGuardsApplied?: boolean;
42
+ agentLoopWorkspace?: Pick<NonNullable<AgentResult["agentLoop"]>, "requestedCwd" | "executionCwd" | "isolatedWorkspace" | "workspaceCleanupStatus" | "workspaceCleanupReason" | "workspaceDirty" | "workspaceDisposition">;
43
+ }
31
44
  export declare const CompletionJudgerResponseSchema: z.ZodObject<{
32
45
  verdict: z.ZodDefault<z.ZodEnum<["pass", "partial", "fail"]>>;
33
46
  reasoning: z.ZodDefault<z.ZodString>;
@@ -1 +1 @@
1
- {"version":3,"file":"task-verifier-types.d.ts","sourceRoot":"","sources":["../../../../src/orchestrator/execution/task/task-verifier-types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"task-verifier-types.d.ts","sourceRoot":"","sources":["../../../../src/orchestrator/execution/task/task-verifier-types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"task-verifier-types.js","sourceRoot":"","sources":["../../../../src/orchestrator/execution/task/task-verifier-types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAoCxB,0FAA0F;AAE1F,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,CAAC,MAAM,CAAC;IACrD,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IAC5D,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IACjC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAChD,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;CACnD,CAAC,CAAC"}
1
+ {"version":3,"file":"task-verifier-types.js","sourceRoot":"","sources":["../../../../src/orchestrator/execution/task/task-verifier-types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA4DxB,0FAA0F;AAE1F,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,CAAC,MAAM,CAAC;IACrD,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IAC5D,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IACjC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAChD,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;CACnD,CAAC,CAAC"}
@@ -17,10 +17,11 @@
17
17
  */
18
18
  import type { Task, VerificationResult } from "../../../base/types/task.js";
19
19
  import type { AgentResult } from "../adapter-layer.js";
20
- export type { ExecutorReport, VerdictResult, FailureResult, CompletionJudgerConfig, VerifierDeps, } from "./task-verifier-types.js";
20
+ export type { ExecutorReport, VerdictResult, FailureResult, VerdictHandlingContext, CompletionJudgerConfig, VerifierDeps, } from "./task-verifier-types.js";
21
21
  export { CompletionJudgerResponseSchema } from "./task-verifier-types.js";
22
22
  export { clampDimensionUpdate, checkDimensionDirection, } from "./task-verifier-rules.js";
23
- import type { VerifierDeps, VerdictResult, FailureResult } from "./task-verifier-types.js";
23
+ import type { VerifierDeps, VerdictResult, FailureResult, VerdictHandlingContext } from "./task-verifier-types.js";
24
+ export declare function applyVerdictHandlingContextGuards(verificationResult: VerificationResult, context: VerdictHandlingContext): VerificationResult;
24
25
  /**
25
26
  * Verify task execution results using 3-layer verification.
26
27
  *
@@ -39,10 +40,10 @@ export declare function verifyTask(deps: VerifierDeps, task: Task, executionResu
39
40
  /**
40
41
  * Handle a verification verdict (pass/partial/fail).
41
42
  */
42
- export declare function handleVerdict(deps: VerifierDeps, task: Task, verificationResult: VerificationResult): Promise<VerdictResult>;
43
+ export declare function handleVerdict(deps: VerifierDeps, task: Task, verificationResult: VerificationResult, context?: VerdictHandlingContext): Promise<VerdictResult>;
43
44
  /**
44
45
  * Handle a task failure: increment failure count, record failure,
45
46
  * decide keep/discard/escalate.
46
47
  */
47
- export declare function handleFailure(deps: VerifierDeps, task: Task, verificationResult: VerificationResult): Promise<FailureResult>;
48
+ export declare function handleFailure(deps: VerifierDeps, task: Task, verificationResult: VerificationResult, context?: VerdictHandlingContext): Promise<FailureResult>;
48
49
  //# sourceMappingURL=task-verifier.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"task-verifier.d.ts","sourceRoot":"","sources":["../../../../src/orchestrator/execution/task/task-verifier.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,OAAO,KAAK,EAAE,IAAI,EAAE,kBAAkB,EAAwB,MAAM,6BAA6B,CAAC;AAClG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAMvD,YAAY,EACV,cAAc,EACd,aAAa,EACb,aAAa,EACb,sBAAsB,EACtB,YAAY,GACb,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,8BAA8B,EAAE,MAAM,0BAA0B,CAAC;AAG1E,OAAO,EACL,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AA8I3F;;;;;;;;;;;;;GAaG;AACH,wBAAsB,UAAU,CAC9B,IAAI,EAAE,YAAY,EAClB,IAAI,EAAE,IAAI,EACV,eAAe,EAAE,WAAW,GAC3B,OAAO,CAAC,kBAAkB,CAAC,CAsQ7B;AAID;;GAEG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,YAAY,EAClB,IAAI,EAAE,IAAI,EACV,kBAAkB,EAAE,kBAAkB,GACrC,OAAO,CAAC,aAAa,CAAC,CA+LxB;AAID;;;GAGG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,YAAY,EAClB,IAAI,EAAE,IAAI,EACV,kBAAkB,EAAE,kBAAkB,GACrC,OAAO,CAAC,aAAa,CAAC,CAsGxB"}
1
+ {"version":3,"file":"task-verifier.d.ts","sourceRoot":"","sources":["../../../../src/orchestrator/execution/task/task-verifier.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,OAAO,KAAK,EAAE,IAAI,EAAE,kBAAkB,EAAwB,MAAM,6BAA6B,CAAC;AAClG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAMvD,YAAY,EACV,cAAc,EACd,aAAa,EACb,aAAa,EACb,sBAAsB,EACtB,sBAAsB,EACtB,YAAY,GACb,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,8BAA8B,EAAE,MAAM,0BAA0B,CAAC;AAG1E,OAAO,EACL,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAyInH,wBAAgB,iCAAiC,CAC/C,kBAAkB,EAAE,kBAAkB,EACtC,OAAO,EAAE,sBAAsB,GAC9B,kBAAkB,CAmBpB;AA2ID;;;;;;;;;;;;;GAaG;AACH,wBAAsB,UAAU,CAC9B,IAAI,EAAE,YAAY,EAClB,IAAI,EAAE,IAAI,EACV,eAAe,EAAE,WAAW,GAC3B,OAAO,CAAC,kBAAkB,CAAC,CA8R7B;AAID;;GAEG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,YAAY,EAClB,IAAI,EAAE,IAAI,EACV,kBAAkB,EAAE,kBAAkB,EACtC,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,aAAa,CAAC,CAiNxB;AAID;;;GAGG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,YAAY,EAClB,IAAI,EAAE,IAAI,EACV,kBAAkB,EAAE,kBAAkB,EACtC,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,aAAa,CAAC,CAkKxB"}
@@ -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,112 @@ 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 (!mechanical.applicable) {
139
+ return {
140
+ applicable: true,
141
+ passed: artifact.passed,
142
+ description: artifact.description,
143
+ };
144
+ }
145
+ return {
146
+ applicable: true,
147
+ passed: mechanical.passed && artifact.passed,
148
+ description: `${mechanical.description}; ${artifact.description}`,
149
+ };
150
+ }
44
151
  function quoteShellArg(value) {
45
152
  return `'${value.replace(/'/g, `'\\''`)}'`;
46
153
  }
@@ -48,16 +155,20 @@ async function collectVerificationDiffs(deps, task, executionResult) {
48
155
  if (executionResult.fileDiffs && executionResult.fileDiffs.length > 0) {
49
156
  return executionResult.fileDiffs;
50
157
  }
158
+ if (!shouldCollectDiffsFromRequestedWorkspace(executionResult))
159
+ return [];
51
160
  if (!deps.toolExecutor)
52
161
  return [];
53
162
  const cwd = executionResult.agentLoop?.requestedCwd ??
54
163
  executionResult.agentLoop?.executionCwd ??
55
- await resolveTaskWorkspacePath({ stateManager: deps.stateManager, task }) ??
164
+ await resolveTaskWorkspacePath({ stateManager: deps.stateManager, task, fallbackCwd: deps.revertCwd }) ??
56
165
  process.cwd();
57
166
  const changedPaths = [
58
167
  ...(executionResult.filesChangedPaths ?? []),
59
168
  ...(executionResult.agentLoop?.filesChangedPaths ?? []),
60
169
  ].filter((path, index, all) => path.length > 0 && all.indexOf(path) === index);
170
+ const hasExplicitExecutionDiffPaths = executionResult.filesChangedPaths !== undefined ||
171
+ executionResult.agentLoop?.filesChangedPaths !== undefined;
61
172
  const toolContext = {
62
173
  cwd,
63
174
  goalId: task.goal_id,
@@ -102,6 +213,9 @@ async function collectVerificationDiffs(deps, task, executionResult) {
102
213
  const diffs = await Promise.all(changedPaths.slice(0, 5).map((path) => collectForPath(path)));
103
214
  return diffs.filter((diff) => diff !== null);
104
215
  }
216
+ if (hasExplicitExecutionDiffPaths) {
217
+ return [];
218
+ }
105
219
  try {
106
220
  const result = await deps.toolExecutor.execute("git_diff", { target: "unstaged", maxLines: 240 }, toolContext);
107
221
  if (!result.success || typeof result.data !== "string" || !result.data.trim())
@@ -139,6 +253,16 @@ async function collectVerificationDiffs(deps, task, executionResult) {
139
253
  * - L1 SKIP → use L2 only (lower confidence)
140
254
  */
141
255
  export async function verifyTask(deps, task, executionResult) {
256
+ let goalForArtifactContract = null;
257
+ try {
258
+ goalForArtifactContract = await deps.stateManager.loadGoal(task.goal_id);
259
+ }
260
+ catch {
261
+ goalForArtifactContract = null;
262
+ }
263
+ const artifactResult = await verifyTaskArtifactContract(task, executionResult.agentLoop?.executionCwd
264
+ ?? executionResult.agentLoop?.requestedCwd
265
+ ?? await resolveTaskWorkspacePath({ stateManager: deps.stateManager, task, fallbackCwd: deps.revertCwd }), { goal: goalForArtifactContract });
142
266
  // ─── Short-circuit: GitHub issue URL evidence ───
143
267
  // When execution succeeded and output contains a GitHub issue URL,
144
268
  // treat as mechanical pass without running full L1/L2 verification.
@@ -146,7 +270,8 @@ export async function verifyTask(deps, task, executionResult) {
146
270
  const githubIssueUrlPattern = /github\.com\/.+\/issues\/\d+/;
147
271
  if (executionResult.success === true &&
148
272
  executionResult.output &&
149
- githubIssueUrlPattern.test(executionResult.output)) {
273
+ githubIssueUrlPattern.test(executionResult.output) &&
274
+ (!artifactResult.applicable || artifactResult.passed)) {
150
275
  const scResult = VerificationResultSchema.parse({
151
276
  task_id: task.id,
152
277
  verdict: "pass",
@@ -157,6 +282,13 @@ export async function verifyTask(deps, task, executionResult) {
157
282
  description: "GitHub issue URL found in execution output — mechanical evidence of successful issue creation",
158
283
  confidence: 0.95,
159
284
  },
285
+ ...(artifactResult.applicable
286
+ ? [{
287
+ layer: "mechanical",
288
+ description: artifactResult.description,
289
+ confidence: 0.9,
290
+ }]
291
+ : []),
160
292
  ],
161
293
  dimension_updates: [],
162
294
  timestamp: new Date().toISOString(),
@@ -165,6 +297,7 @@ export async function verifyTask(deps, task, executionResult) {
165
297
  }
166
298
  // ─── Layer 1: Mechanical verification ───
167
299
  const l1Result = await runMechanicalVerification(deps, task);
300
+ const effectiveL1Result = mergeMechanicalAndArtifactVerification(l1Result, artifactResult);
168
301
  // ─── Build optional enrichment blocks for LLM review ───
169
302
  let knowledgeBlock = "";
170
303
  if (deps.knowledgeManager?.getRelevantKnowledge) {
@@ -200,17 +333,17 @@ export async function verifyTask(deps, task, executionResult) {
200
333
  let verdict;
201
334
  let confidence;
202
335
  let l2Retry;
203
- if (l1Result.applicable) {
204
- if (l1Result.passed && l2Result.passed) {
336
+ if (effectiveL1Result.applicable) {
337
+ if (effectiveL1Result.passed && l2Result.passed) {
205
338
  verdict = "pass";
206
339
  confidence = 0.9;
207
340
  }
208
- else if (l1Result.passed && l2Result.partial) {
341
+ else if (effectiveL1Result.passed && l2Result.partial) {
209
342
  // L1 pass + L2 partial → partial
210
343
  verdict = "partial";
211
344
  confidence = 0.7;
212
345
  }
213
- else if (l1Result.passed && !l2Result.passed && !l2Result.partial) {
346
+ else if (effectiveL1Result.passed && !l2Result.passed && !l2Result.partial) {
214
347
  // L1 pass + L2 fail → re-review
215
348
  l2Retry = await runLLMReview(deps, task, executionResult, knowledgeBlock, stateBlock, 'main');
216
349
  if (l2Retry.passed) {
@@ -226,7 +359,7 @@ export async function verifyTask(deps, task, executionResult) {
226
359
  confidence = 0.8;
227
360
  }
228
361
  }
229
- else if (!l1Result.passed && l2Result.passed) {
362
+ else if (!effectiveL1Result.passed && l2Result.passed) {
230
363
  // Mechanical verification takes priority
231
364
  verdict = "fail";
232
365
  confidence = 0.85;
@@ -253,18 +386,18 @@ export async function verifyTask(deps, task, executionResult) {
253
386
  }
254
387
  }
255
388
  // Handle partial from L2 when L1 is applicable but didn't fail
256
- if (l1Result.applicable && l2Result.partial && verdict !== "fail") {
389
+ if (effectiveL1Result.applicable && l2Result.partial && verdict !== "fail") {
257
390
  verdict = "partial";
258
391
  }
259
392
  // Use retry result for evidence when a retry occurred, to keep audit trail accurate
260
393
  const effectiveL2 = l2Retry ?? l2Result;
261
394
  const now = new Date().toISOString();
262
395
  const evidence = [
263
- ...(l1Result.applicable
396
+ ...(effectiveL1Result.applicable
264
397
  ? [
265
398
  {
266
399
  layer: "mechanical",
267
- description: l1Result.description,
400
+ description: effectiveL1Result.description,
268
401
  confidence: 0.9,
269
402
  },
270
403
  ]
@@ -320,7 +453,8 @@ export async function verifyTask(deps, task, executionResult) {
320
453
  scaledDelta = progressDelta * (threshold.high - threshold.low);
321
454
  }
322
455
  }
323
- const newVal = prevVal !== null ? prevVal + scaledDelta : scaledDelta;
456
+ const thresholdType = threshold?.type;
457
+ const newVal = applyThresholdProgressDelta(prevVal, scaledDelta, thresholdType);
324
458
  return {
325
459
  dimension_name: dimName,
326
460
  previous_value: prevVal,
@@ -374,7 +508,7 @@ export async function verifyTask(deps, task, executionResult) {
374
508
  /**
375
509
  * Handle a verification verdict (pass/partial/fail).
376
510
  */
377
- export async function handleVerdict(deps, task, verificationResult) {
511
+ export async function handleVerdict(deps, task, verificationResult, context = {}) {
378
512
  // P0: Progress-verdict contradiction check (§4.1)
379
513
  if (verificationResult.verdict === "pass" && verificationResult.dimension_updates?.length > 0) {
380
514
  const goalRawForGuard = await deps.stateManager.readRaw(`goals/${task.goal_id}/goal.json`);
@@ -405,6 +539,9 @@ export async function handleVerdict(deps, task, verificationResult) {
405
539
  verificationResult = { ...verificationResult, verdict: "partial" };
406
540
  }
407
541
  }
542
+ if (context.verificationGuardsApplied !== true) {
543
+ verificationResult = applyVerdictHandlingContextGuards(verificationResult, context);
544
+ }
408
545
  // Save failure context for fail/partial verdicts (§4.7)
409
546
  if (verificationResult.verdict === "fail" || verificationResult.verdict === "partial") {
410
547
  const firstEvidence = verificationResult.evidence?.[0];
@@ -466,7 +603,13 @@ export async function handleVerdict(deps, task, verificationResult) {
466
603
  const update = verificationResult.dimension_updates.find((u) => u.dimension_name === dim.name);
467
604
  if (update !== undefined && typeof update.new_value === "number") {
468
605
  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))) {
606
+ if (!isDimensionUpdateDirectionAllowed({
607
+ intendedDirection: task.intended_direction,
608
+ dim,
609
+ previousValue: prev,
610
+ newValue: update.new_value,
611
+ logger: deps.logger,
612
+ })) {
470
613
  continue;
471
614
  }
472
615
  dim.current_value = clampDimensionUpdate(prev, update.new_value, deps.logger, String(dim.name));
@@ -505,7 +648,13 @@ export async function handleVerdict(deps, task, verificationResult) {
505
648
  const update = verificationResult.dimension_updates.find((u) => u.dimension_name === dim.name);
506
649
  if (update !== undefined && typeof update.new_value === "number") {
507
650
  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))) {
651
+ if (!isDimensionUpdateDirectionAllowed({
652
+ intendedDirection: task.intended_direction,
653
+ dim,
654
+ previousValue: prev,
655
+ newValue: update.new_value,
656
+ logger: deps.logger,
657
+ })) {
509
658
  continue;
510
659
  }
511
660
  dim.current_value = clampDimensionUpdate(prev, update.new_value, deps.logger, String(dim.name));
@@ -518,6 +667,7 @@ export async function handleVerdict(deps, task, verificationResult) {
518
667
  }
519
668
  const partialTask = {
520
669
  ...task,
670
+ status: statusAfterIncompleteVerification(task),
521
671
  verification_verdict: verificationResult.verdict,
522
672
  verification_evidence: verificationResult.evidence?.map((e) => e.description ?? String(e)) ?? [],
523
673
  };
@@ -530,13 +680,14 @@ export async function handleVerdict(deps, task, verificationResult) {
530
680
  action: "keep",
531
681
  verificationResult,
532
682
  reason: "partial progress kept for follow-up work",
683
+ stoppedReason: context.stoppedReason ?? undefined,
533
684
  });
534
685
  return { action: "keep", task: partialTask };
535
686
  }
536
- return handleFailure(deps, task, verificationResult);
687
+ return handleFailure(deps, task, verificationResult, context);
537
688
  }
538
689
  case "fail": {
539
- return handleFailure(deps, task, verificationResult);
690
+ return handleFailure(deps, task, verificationResult, context);
540
691
  }
541
692
  }
542
693
  }
@@ -545,9 +696,10 @@ export async function handleVerdict(deps, task, verificationResult) {
545
696
  * Handle a task failure: increment failure count, record failure,
546
697
  * decide keep/discard/escalate.
547
698
  */
548
- export async function handleFailure(deps, task, verificationResult) {
699
+ export async function handleFailure(deps, task, verificationResult, context = {}) {
549
700
  const updatedTask = {
550
701
  ...task,
702
+ status: statusAfterIncompleteVerification(task),
551
703
  consecutive_failure_count: task.consecutive_failure_count + 1,
552
704
  verification_verdict: verificationResult.verdict,
553
705
  verification_evidence: verificationResult.evidence?.map((e) => e.description ?? String(e)) ?? [],
@@ -559,6 +711,7 @@ export async function handleFailure(deps, task, verificationResult) {
559
711
  type: "failed",
560
712
  attempt: updatedTask.consecutive_failure_count,
561
713
  verificationResult,
714
+ stoppedReason: context.stoppedReason ?? undefined,
562
715
  });
563
716
  if (updatedTask.consecutive_failure_count >= 3) {
564
717
  deps.stallDetector.checkConsecutiveFailures(task.goal_id, task.primary_dimension, updatedTask.consecutive_failure_count);
@@ -570,9 +723,40 @@ export async function handleFailure(deps, task, verificationResult) {
570
723
  action: "escalate",
571
724
  verificationResult,
572
725
  reason: "consecutive failure threshold reached",
726
+ stoppedReason: context.stoppedReason ?? undefined,
727
+ });
728
+ return { action: "escalate", task: updatedTask };
729
+ }
730
+ const handoffWorkspace = isolatedWorkspaceHandoff(context);
731
+ if (handoffWorkspace) {
732
+ const reason = formatIsolatedWorkspaceHandoffReason(handoffWorkspace);
733
+ await appendTaskHistory(deps, task.goal_id, updatedTask);
734
+ await appendTaskOutcomeEvent(deps.stateManager, {
735
+ task: updatedTask,
736
+ type: "abandoned",
737
+ attempt: updatedTask.consecutive_failure_count,
738
+ action: "escalate",
739
+ verificationResult,
740
+ reason,
741
+ stoppedReason: context.stoppedReason ?? undefined,
573
742
  });
574
743
  return { action: "escalate", task: updatedTask };
575
744
  }
745
+ const discardedWorkspace = discardedDirtyIsolatedWorkspace(context);
746
+ if (discardedWorkspace) {
747
+ const reason = formatDiscardedDirtyIsolatedWorkspaceReason(discardedWorkspace);
748
+ await appendTaskHistory(deps, task.goal_id, updatedTask);
749
+ await appendTaskOutcomeEvent(deps.stateManager, {
750
+ task: updatedTask,
751
+ type: "abandoned",
752
+ attempt: updatedTask.consecutive_failure_count,
753
+ action: "discard",
754
+ verificationResult,
755
+ reason,
756
+ stoppedReason: context.stoppedReason ?? undefined,
757
+ });
758
+ return { action: "discard", task: updatedTask };
759
+ }
576
760
  const directionCorrect = isDirectionCorrect(verificationResult);
577
761
  if (directionCorrect) {
578
762
  await appendTaskHistory(deps, task.goal_id, updatedTask);
@@ -583,20 +767,36 @@ export async function handleFailure(deps, task, verificationResult) {
583
767
  action: "keep",
584
768
  verificationResult,
585
769
  reason: "failure kept for retry because direction remained correct",
770
+ stoppedReason: context.stoppedReason ?? undefined,
586
771
  });
587
772
  return { action: "keep", task: updatedTask };
588
773
  }
589
774
  if (updatedTask.reversibility === "reversible") {
775
+ const fileDiffs = verificationResult.file_diffs ?? [];
590
776
  const concreteRevertPaths = [
591
- ...new Set((verificationResult.file_diffs ?? [])
777
+ ...new Set(fileDiffs
778
+ .filter((diff) => diff.safe_to_revert !== false)
779
+ .map((diff) => diff.path)
780
+ .filter((filePath) => filePath.trim().length > 0)),
781
+ ];
782
+ const unsafeRevertPaths = [
783
+ ...new Set(fileDiffs
784
+ .filter((diff) => diff.safe_to_revert === false)
592
785
  .map((diff) => diff.path)
593
786
  .filter((filePath) => filePath.trim().length > 0)),
594
787
  ];
595
788
  const revertSuccess = await attemptRevert(deps, updatedTask, {
596
789
  concretePaths: concreteRevertPaths,
790
+ unsafePaths: unsafeRevertPaths,
791
+ });
792
+ deps.logger?.warn(`[task] revert attempted`, {
793
+ taskId: task.id,
794
+ success: revertSuccess.success,
795
+ reason: revertSuccess.reason,
796
+ concretePaths: revertSuccess.concretePaths,
797
+ unsafePaths: revertSuccess.unsafePaths,
597
798
  });
598
- deps.logger?.warn(`[task] revert attempted`, { taskId: task.id, success: revertSuccess });
599
- if (revertSuccess) {
799
+ if (revertSuccess.success) {
600
800
  await appendTaskHistory(deps, task.goal_id, updatedTask);
601
801
  await appendTaskOutcomeEvent(deps.stateManager, {
602
802
  task: updatedTask,
@@ -604,7 +804,8 @@ export async function handleFailure(deps, task, verificationResult) {
604
804
  attempt: updatedTask.consecutive_failure_count,
605
805
  action: "discard",
606
806
  verificationResult,
607
- reason: "task discarded after successful revert",
807
+ reason: `task discarded after successful ${revertSuccess.method ?? "revert"} for ${revertSuccess.concretePaths.length} concrete paths`,
808
+ stoppedReason: context.stoppedReason ?? undefined,
608
809
  });
609
810
  return { action: "discard", task: updatedTask };
610
811
  }
@@ -617,7 +818,12 @@ export async function handleFailure(deps, task, verificationResult) {
617
818
  attempt: updatedTask.consecutive_failure_count,
618
819
  action: "escalate",
619
820
  verificationResult,
620
- reason: "revert failed after wrong-direction result",
821
+ reason: (revertSuccess.unsafePaths?.length ?? 0) > 0
822
+ ? `revert could not safely discard all task changes because some share pre-existing dirty paths: ${revertSuccess.unsafePaths?.join(", ")}`
823
+ : revertSuccess.concretePaths.length === 0
824
+ ? "revert skipped because no concrete changed paths were captured; task output requires operator review"
825
+ : `revert failed after wrong-direction result: ${revertSuccess.reason}`,
826
+ stoppedReason: context.stoppedReason ?? undefined,
621
827
  });
622
828
  return { action: "escalate", task: updatedTask };
623
829
  }
@@ -629,6 +835,7 @@ export async function handleFailure(deps, task, verificationResult) {
629
835
  action: "escalate",
630
836
  verificationResult,
631
837
  reason: "task cannot be safely retried or reverted",
838
+ stoppedReason: context.stoppedReason ?? undefined,
632
839
  });
633
840
  return { action: "escalate", task: updatedTask };
634
841
  }