@draht/agent-core 2026.10.20 → 2026.10.23

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 (468) hide show
  1. package/dist/agent-loop.d.ts +6 -1
  2. package/dist/agent-loop.d.ts.map +1 -1
  3. package/dist/agent-loop.js +16 -2
  4. package/dist/agent-loop.js.map +1 -1
  5. package/dist/agent.d.ts +8 -1
  6. package/dist/agent.d.ts.map +1 -1
  7. package/dist/agent.js +4 -0
  8. package/dist/agent.js.map +1 -1
  9. package/dist/index.d.ts +0 -22
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +0 -20
  12. package/dist/index.js.map +1 -1
  13. package/dist/proxy.d.ts +2 -5
  14. package/dist/proxy.d.ts.map +1 -1
  15. package/dist/proxy.js +2 -14
  16. package/dist/proxy.js.map +1 -1
  17. package/dist/types.d.ts +4 -0
  18. package/dist/types.d.ts.map +1 -1
  19. package/dist/types.js.map +1 -1
  20. package/package.json +4 -47
  21. package/dist/harness/agent-harness.d.ts +0 -716
  22. package/dist/harness/agent-harness.d.ts.map +0 -1
  23. package/dist/harness/agent-harness.js +0 -6
  24. package/dist/harness/agent-harness.js.map +0 -1
  25. package/dist/harness/compaction/branch-summarization.d.ts +0 -68
  26. package/dist/harness/compaction/branch-summarization.d.ts.map +0 -1
  27. package/dist/harness/compaction/branch-summarization.js +0 -176
  28. package/dist/harness/compaction/branch-summarization.js.map +0 -1
  29. package/dist/harness/compaction/compaction.d.ts +0 -126
  30. package/dist/harness/compaction/compaction.d.ts.map +0 -1
  31. package/dist/harness/compaction/compaction.js +0 -561
  32. package/dist/harness/compaction/compaction.js.map +0 -1
  33. package/dist/harness/compaction/utils.d.ts +0 -28
  34. package/dist/harness/compaction/utils.d.ts.map +0 -1
  35. package/dist/harness/compaction/utils.js +0 -123
  36. package/dist/harness/compaction/utils.js.map +0 -1
  37. package/dist/harness/config.d.ts +0 -9
  38. package/dist/harness/config.d.ts.map +0 -1
  39. package/dist/harness/config.js +0 -35
  40. package/dist/harness/config.js.map +0 -1
  41. package/dist/harness/context.d.ts +0 -9
  42. package/dist/harness/context.d.ts.map +0 -1
  43. package/dist/harness/context.js +0 -13
  44. package/dist/harness/context.js.map +0 -1
  45. package/dist/harness/env/nodejs.d.ts +0 -43
  46. package/dist/harness/env/nodejs.d.ts.map +0 -1
  47. package/dist/harness/env/nodejs.js +0 -865
  48. package/dist/harness/env/nodejs.js.map +0 -1
  49. package/dist/harness/events.d.ts +0 -24
  50. package/dist/harness/events.d.ts.map +0 -1
  51. package/dist/harness/events.js +0 -233
  52. package/dist/harness/events.js.map +0 -1
  53. package/dist/harness/execution/assistant.d.ts +0 -42
  54. package/dist/harness/execution/assistant.d.ts.map +0 -1
  55. package/dist/harness/execution/assistant.js +0 -82
  56. package/dist/harness/execution/assistant.js.map +0 -1
  57. package/dist/harness/execution/effect-gate.d.ts +0 -22
  58. package/dist/harness/execution/effect-gate.d.ts.map +0 -1
  59. package/dist/harness/execution/effect-gate.js +0 -49
  60. package/dist/harness/execution/effect-gate.js.map +0 -1
  61. package/dist/harness/execution/tools.d.ts +0 -67
  62. package/dist/harness/execution/tools.d.ts.map +0 -1
  63. package/dist/harness/execution/tools.js +0 -119
  64. package/dist/harness/execution/tools.js.map +0 -1
  65. package/dist/harness/execution-env.d.ts +0 -4
  66. package/dist/harness/execution-env.d.ts.map +0 -1
  67. package/dist/harness/execution-env.js +0 -3
  68. package/dist/harness/execution-env.js.map +0 -1
  69. package/dist/harness/hooks.d.ts +0 -38
  70. package/dist/harness/hooks.d.ts.map +0 -1
  71. package/dist/harness/hooks.js +0 -406
  72. package/dist/harness/hooks.js.map +0 -1
  73. package/dist/harness/messages.d.ts +0 -51
  74. package/dist/harness/messages.d.ts.map +0 -1
  75. package/dist/harness/messages.js +0 -103
  76. package/dist/harness/messages.js.map +0 -1
  77. package/dist/harness/pico3/bash.d.ts +0 -10
  78. package/dist/harness/pico3/bash.d.ts.map +0 -1
  79. package/dist/harness/pico3/bash.js +0 -25
  80. package/dist/harness/pico3/bash.js.map +0 -1
  81. package/dist/harness/pico3/bounded.d.ts +0 -21
  82. package/dist/harness/pico3/bounded.d.ts.map +0 -1
  83. package/dist/harness/pico3/bounded.js +0 -98
  84. package/dist/harness/pico3/bounded.js.map +0 -1
  85. package/dist/harness/pico3/chord.d.ts +0 -41
  86. package/dist/harness/pico3/chord.d.ts.map +0 -1
  87. package/dist/harness/pico3/chord.js +0 -147
  88. package/dist/harness/pico3/chord.js.map +0 -1
  89. package/dist/harness/pico3/context.d.ts +0 -16
  90. package/dist/harness/pico3/context.d.ts.map +0 -1
  91. package/dist/harness/pico3/context.js +0 -88
  92. package/dist/harness/pico3/context.js.map +0 -1
  93. package/dist/harness/pico3/harness.d.ts +0 -198
  94. package/dist/harness/pico3/harness.d.ts.map +0 -1
  95. package/dist/harness/pico3/harness.js +0 -654
  96. package/dist/harness/pico3/harness.js.map +0 -1
  97. package/dist/harness/pico3/hooks.d.ts +0 -10
  98. package/dist/harness/pico3/hooks.d.ts.map +0 -1
  99. package/dist/harness/pico3/hooks.js +0 -33
  100. package/dist/harness/pico3/hooks.js.map +0 -1
  101. package/dist/harness/pico3/index.d.ts +0 -19
  102. package/dist/harness/pico3/index.d.ts.map +0 -1
  103. package/dist/harness/pico3/index.js +0 -15
  104. package/dist/harness/pico3/index.js.map +0 -1
  105. package/dist/harness/pico3/jsonl.d.ts +0 -58
  106. package/dist/harness/pico3/jsonl.d.ts.map +0 -1
  107. package/dist/harness/pico3/jsonl.js +0 -325
  108. package/dist/harness/pico3/jsonl.js.map +0 -1
  109. package/dist/harness/pico3/kinds/collapse.d.ts +0 -49
  110. package/dist/harness/pico3/kinds/collapse.d.ts.map +0 -1
  111. package/dist/harness/pico3/kinds/collapse.js +0 -191
  112. package/dist/harness/pico3/kinds/collapse.js.map +0 -1
  113. package/dist/harness/pico3/kinds/entries.d.ts +0 -78
  114. package/dist/harness/pico3/kinds/entries.d.ts.map +0 -1
  115. package/dist/harness/pico3/kinds/entries.js +0 -13
  116. package/dist/harness/pico3/kinds/entries.js.map +0 -1
  117. package/dist/harness/pico3/kinds/frames.d.ts +0 -9
  118. package/dist/harness/pico3/kinds/frames.d.ts.map +0 -1
  119. package/dist/harness/pico3/kinds/frames.js +0 -75
  120. package/dist/harness/pico3/kinds/frames.js.map +0 -1
  121. package/dist/harness/pico3/kinds/generation.d.ts +0 -94
  122. package/dist/harness/pico3/kinds/generation.d.ts.map +0 -1
  123. package/dist/harness/pico3/kinds/generation.js +0 -504
  124. package/dist/harness/pico3/kinds/generation.js.map +0 -1
  125. package/dist/harness/pico3/kinds/job.d.ts +0 -44
  126. package/dist/harness/pico3/kinds/job.d.ts.map +0 -1
  127. package/dist/harness/pico3/kinds/job.js +0 -143
  128. package/dist/harness/pico3/kinds/job.js.map +0 -1
  129. package/dist/harness/pico3/kinds/plugin.d.ts +0 -15
  130. package/dist/harness/pico3/kinds/plugin.d.ts.map +0 -1
  131. package/dist/harness/pico3/kinds/plugin.js +0 -35
  132. package/dist/harness/pico3/kinds/plugin.js.map +0 -1
  133. package/dist/harness/pico3/kinds/post-tools.d.ts +0 -22
  134. package/dist/harness/pico3/kinds/post-tools.d.ts.map +0 -1
  135. package/dist/harness/pico3/kinds/post-tools.js +0 -145
  136. package/dist/harness/pico3/kinds/post-tools.js.map +0 -1
  137. package/dist/harness/pico3/kinds/task-api.d.ts +0 -3
  138. package/dist/harness/pico3/kinds/task-api.d.ts.map +0 -1
  139. package/dist/harness/pico3/kinds/task-api.js +0 -45
  140. package/dist/harness/pico3/kinds/task-api.js.map +0 -1
  141. package/dist/harness/pico3/kinds/tool.d.ts +0 -43
  142. package/dist/harness/pico3/kinds/tool.d.ts.map +0 -1
  143. package/dist/harness/pico3/kinds/tool.js +0 -373
  144. package/dist/harness/pico3/kinds/tool.js.map +0 -1
  145. package/dist/harness/pico3/legacy-tracker.d.ts +0 -11
  146. package/dist/harness/pico3/legacy-tracker.d.ts.map +0 -1
  147. package/dist/harness/pico3/legacy-tracker.js +0 -41
  148. package/dist/harness/pico3/legacy-tracker.js.map +0 -1
  149. package/dist/harness/pico3/membrane.d.ts +0 -23
  150. package/dist/harness/pico3/membrane.d.ts.map +0 -1
  151. package/dist/harness/pico3/membrane.js +0 -141
  152. package/dist/harness/pico3/membrane.js.map +0 -1
  153. package/dist/harness/pico3/memory.d.ts +0 -53
  154. package/dist/harness/pico3/memory.d.ts.map +0 -1
  155. package/dist/harness/pico3/memory.js +0 -264
  156. package/dist/harness/pico3/memory.js.map +0 -1
  157. package/dist/harness/pico3/scheduler.d.ts +0 -49
  158. package/dist/harness/pico3/scheduler.d.ts.map +0 -1
  159. package/dist/harness/pico3/scheduler.js +0 -438
  160. package/dist/harness/pico3/scheduler.js.map +0 -1
  161. package/dist/harness/pico3/session.d.ts +0 -264
  162. package/dist/harness/pico3/session.d.ts.map +0 -1
  163. package/dist/harness/pico3/session.js +0 -1348
  164. package/dist/harness/pico3/session.js.map +0 -1
  165. package/dist/harness/pico3/system.d.ts +0 -126
  166. package/dist/harness/pico3/system.d.ts.map +0 -1
  167. package/dist/harness/pico3/system.js +0 -244
  168. package/dist/harness/pico3/system.js.map +0 -1
  169. package/dist/harness/pico3/types.d.ts +0 -973
  170. package/dist/harness/pico3/types.d.ts.map +0 -1
  171. package/dist/harness/pico3/types.js +0 -106
  172. package/dist/harness/pico3/types.js.map +0 -1
  173. package/dist/harness/pico3/view.d.ts +0 -34
  174. package/dist/harness/pico3/view.d.ts.map +0 -1
  175. package/dist/harness/pico3/view.js +0 -411
  176. package/dist/harness/pico3/view.js.map +0 -1
  177. package/dist/harness/prompt-templates.d.ts +0 -49
  178. package/dist/harness/prompt-templates.d.ts.map +0 -1
  179. package/dist/harness/prompt-templates.js +0 -225
  180. package/dist/harness/prompt-templates.js.map +0 -1
  181. package/dist/harness/result.d.ts +0 -133
  182. package/dist/harness/result.d.ts.map +0 -1
  183. package/dist/harness/result.js +0 -81
  184. package/dist/harness/result.js.map +0 -1
  185. package/dist/harness/runtime/drive/boundary.d.ts +0 -28
  186. package/dist/harness/runtime/drive/boundary.d.ts.map +0 -1
  187. package/dist/harness/runtime/drive/boundary.js +0 -173
  188. package/dist/harness/runtime/drive/boundary.js.map +0 -1
  189. package/dist/harness/runtime/drive/checkpoint.d.ts +0 -8
  190. package/dist/harness/runtime/drive/checkpoint.d.ts.map +0 -1
  191. package/dist/harness/runtime/drive/checkpoint.js +0 -133
  192. package/dist/harness/runtime/drive/checkpoint.js.map +0 -1
  193. package/dist/harness/runtime/drive/deferred.d.ts +0 -15
  194. package/dist/harness/runtime/drive/deferred.d.ts.map +0 -1
  195. package/dist/harness/runtime/drive/deferred.js +0 -179
  196. package/dist/harness/runtime/drive/deferred.js.map +0 -1
  197. package/dist/harness/runtime/drive/generation.d.ts +0 -8
  198. package/dist/harness/runtime/drive/generation.d.ts.map +0 -1
  199. package/dist/harness/runtime/drive/generation.js +0 -205
  200. package/dist/harness/runtime/drive/generation.js.map +0 -1
  201. package/dist/harness/runtime/drive/reconcile.d.ts +0 -5
  202. package/dist/harness/runtime/drive/reconcile.d.ts.map +0 -1
  203. package/dist/harness/runtime/drive/reconcile.js +0 -140
  204. package/dist/harness/runtime/drive/reconcile.js.map +0 -1
  205. package/dist/harness/runtime/drive/recovery.d.ts +0 -8
  206. package/dist/harness/runtime/drive/recovery.d.ts.map +0 -1
  207. package/dist/harness/runtime/drive/recovery.js +0 -85
  208. package/dist/harness/runtime/drive/recovery.js.map +0 -1
  209. package/dist/harness/runtime/drive/response.d.ts +0 -23
  210. package/dist/harness/runtime/drive/response.d.ts.map +0 -1
  211. package/dist/harness/runtime/drive/response.js +0 -394
  212. package/dist/harness/runtime/drive/response.js.map +0 -1
  213. package/dist/harness/runtime/drive/retry.d.ts +0 -4
  214. package/dist/harness/runtime/drive/retry.d.ts.map +0 -1
  215. package/dist/harness/runtime/drive/retry.js +0 -34
  216. package/dist/harness/runtime/drive/retry.js.map +0 -1
  217. package/dist/harness/runtime/drive/structural.d.ts +0 -32
  218. package/dist/harness/runtime/drive/structural.d.ts.map +0 -1
  219. package/dist/harness/runtime/drive/structural.js +0 -929
  220. package/dist/harness/runtime/drive/structural.js.map +0 -1
  221. package/dist/harness/runtime/drive/terminal.d.ts +0 -7
  222. package/dist/harness/runtime/drive/terminal.d.ts.map +0 -1
  223. package/dist/harness/runtime/drive/terminal.js +0 -49
  224. package/dist/harness/runtime/drive/terminal.js.map +0 -1
  225. package/dist/harness/runtime/drive/tool-placement.d.ts +0 -14
  226. package/dist/harness/runtime/drive/tool-placement.d.ts.map +0 -1
  227. package/dist/harness/runtime/drive/tool-placement.js +0 -219
  228. package/dist/harness/runtime/drive/tool-placement.js.map +0 -1
  229. package/dist/harness/runtime/drive/tools.d.ts +0 -6
  230. package/dist/harness/runtime/drive/tools.d.ts.map +0 -1
  231. package/dist/harness/runtime/drive/tools.js +0 -449
  232. package/dist/harness/runtime/drive/tools.js.map +0 -1
  233. package/dist/harness/runtime/drive.d.ts +0 -6
  234. package/dist/harness/runtime/drive.d.ts.map +0 -1
  235. package/dist/harness/runtime/drive.js +0 -93
  236. package/dist/harness/runtime/drive.js.map +0 -1
  237. package/dist/harness/runtime/harness.d.ts +0 -59
  238. package/dist/harness/runtime/harness.d.ts.map +0 -1
  239. package/dist/harness/runtime/harness.js +0 -311
  240. package/dist/harness/runtime/harness.js.map +0 -1
  241. package/dist/harness/runtime/index.d.ts +0 -2
  242. package/dist/harness/runtime/index.d.ts.map +0 -1
  243. package/dist/harness/runtime/index.js +0 -2
  244. package/dist/harness/runtime/index.js.map +0 -1
  245. package/dist/harness/runtime/lane.d.ts +0 -118
  246. package/dist/harness/runtime/lane.d.ts.map +0 -1
  247. package/dist/harness/runtime/lane.js +0 -1575
  248. package/dist/harness/runtime/lane.js.map +0 -1
  249. package/dist/harness/runtime/progress.d.ts +0 -15
  250. package/dist/harness/runtime/progress.d.ts.map +0 -1
  251. package/dist/harness/runtime/progress.js +0 -66
  252. package/dist/harness/runtime/progress.js.map +0 -1
  253. package/dist/harness/runtime/reducer.d.ts +0 -5
  254. package/dist/harness/runtime/reducer.d.ts.map +0 -1
  255. package/dist/harness/runtime/reducer.js +0 -240
  256. package/dist/harness/runtime/reducer.js.map +0 -1
  257. package/dist/harness/runtime/restore.d.ts +0 -24
  258. package/dist/harness/runtime/restore.d.ts.map +0 -1
  259. package/dist/harness/runtime/restore.js +0 -117
  260. package/dist/harness/runtime/restore.js.map +0 -1
  261. package/dist/harness/runtime/transcript.d.ts +0 -21
  262. package/dist/harness/runtime/transcript.d.ts.map +0 -1
  263. package/dist/harness/runtime/transcript.js +0 -72
  264. package/dist/harness/runtime/transcript.js.map +0 -1
  265. package/dist/harness/runtime/types.d.ts +0 -105
  266. package/dist/harness/runtime/types.d.ts.map +0 -1
  267. package/dist/harness/runtime/types.js +0 -61
  268. package/dist/harness/runtime/types.js.map +0 -1
  269. package/dist/harness/session/commit.d.ts +0 -53
  270. package/dist/harness/session/commit.d.ts.map +0 -1
  271. package/dist/harness/session/commit.js +0 -57
  272. package/dist/harness/session/commit.js.map +0 -1
  273. package/dist/harness/session/context.d.ts +0 -10
  274. package/dist/harness/session/context.d.ts.map +0 -1
  275. package/dist/harness/session/context.js +0 -49
  276. package/dist/harness/session/context.js.map +0 -1
  277. package/dist/harness/session/fork-policy.d.ts +0 -21
  278. package/dist/harness/session/fork-policy.d.ts.map +0 -1
  279. package/dist/harness/session/fork-policy.js +0 -55
  280. package/dist/harness/session/fork-policy.js.map +0 -1
  281. package/dist/harness/session/fork.d.ts +0 -16
  282. package/dist/harness/session/fork.d.ts.map +0 -1
  283. package/dist/harness/session/fork.js +0 -79
  284. package/dist/harness/session/fork.js.map +0 -1
  285. package/dist/harness/session/in-memory-storage-state.d.ts +0 -39
  286. package/dist/harness/session/in-memory-storage-state.d.ts.map +0 -1
  287. package/dist/harness/session/in-memory-storage-state.js +0 -276
  288. package/dist/harness/session/in-memory-storage-state.js.map +0 -1
  289. package/dist/harness/session/index.d.ts +0 -11
  290. package/dist/harness/session/index.d.ts.map +0 -1
  291. package/dist/harness/session/index.js +0 -9
  292. package/dist/harness/session/index.js.map +0 -1
  293. package/dist/harness/session/jsonl/codec.d.ts +0 -21
  294. package/dist/harness/session/jsonl/codec.d.ts.map +0 -1
  295. package/dist/harness/session/jsonl/codec.js +0 -45
  296. package/dist/harness/session/jsonl/codec.js.map +0 -1
  297. package/dist/harness/session/jsonl/fork.d.ts +0 -38
  298. package/dist/harness/session/jsonl/fork.d.ts.map +0 -1
  299. package/dist/harness/session/jsonl/fork.js +0 -264
  300. package/dist/harness/session/jsonl/fork.js.map +0 -1
  301. package/dist/harness/session/jsonl/index.d.ts +0 -4
  302. package/dist/harness/session/jsonl/index.d.ts.map +0 -1
  303. package/dist/harness/session/jsonl/index.js +0 -4
  304. package/dist/harness/session/jsonl/index.js.map +0 -1
  305. package/dist/harness/session/jsonl/io.d.ts +0 -14
  306. package/dist/harness/session/jsonl/io.d.ts.map +0 -1
  307. package/dist/harness/session/jsonl/io.js +0 -86
  308. package/dist/harness/session/jsonl/io.js.map +0 -1
  309. package/dist/harness/session/jsonl/legacy-v3.d.ts +0 -44
  310. package/dist/harness/session/jsonl/legacy-v3.d.ts.map +0 -1
  311. package/dist/harness/session/jsonl/legacy-v3.js +0 -462
  312. package/dist/harness/session/jsonl/legacy-v3.js.map +0 -1
  313. package/dist/harness/session/jsonl/repo.d.ts +0 -35
  314. package/dist/harness/session/jsonl/repo.d.ts.map +0 -1
  315. package/dist/harness/session/jsonl/repo.js +0 -301
  316. package/dist/harness/session/jsonl/repo.js.map +0 -1
  317. package/dist/harness/session/jsonl/storage.d.ts +0 -41
  318. package/dist/harness/session/jsonl/storage.d.ts.map +0 -1
  319. package/dist/harness/session/jsonl/storage.js +0 -200
  320. package/dist/harness/session/jsonl/storage.js.map +0 -1
  321. package/dist/harness/session/jsonl/types.d.ts +0 -39
  322. package/dist/harness/session/jsonl/types.d.ts.map +0 -1
  323. package/dist/harness/session/jsonl/types.js +0 -3
  324. package/dist/harness/session/jsonl/types.js.map +0 -1
  325. package/dist/harness/session/memory.d.ts +0 -48
  326. package/dist/harness/session/memory.d.ts.map +0 -1
  327. package/dist/harness/session/memory.js +0 -369
  328. package/dist/harness/session/memory.js.map +0 -1
  329. package/dist/harness/session/mutation-line.d.ts +0 -8
  330. package/dist/harness/session/mutation-line.d.ts.map +0 -1
  331. package/dist/harness/session/mutation-line.js +0 -21
  332. package/dist/harness/session/mutation-line.js.map +0 -1
  333. package/dist/harness/session/session.d.ts +0 -82
  334. package/dist/harness/session/session.d.ts.map +0 -1
  335. package/dist/harness/session/session.js +0 -361
  336. package/dist/harness/session/session.js.map +0 -1
  337. package/dist/harness/session/testing/benchmark/datasets.d.ts +0 -12
  338. package/dist/harness/session/testing/benchmark/datasets.d.ts.map +0 -1
  339. package/dist/harness/session/testing/benchmark/datasets.js +0 -24
  340. package/dist/harness/session/testing/benchmark/datasets.js.map +0 -1
  341. package/dist/harness/session/testing/benchmark/session-repo.d.ts +0 -42
  342. package/dist/harness/session/testing/benchmark/session-repo.d.ts.map +0 -1
  343. package/dist/harness/session/testing/benchmark/session-repo.js +0 -127
  344. package/dist/harness/session/testing/benchmark/session-repo.js.map +0 -1
  345. package/dist/harness/session/testing/benchmark/storage.d.ts +0 -25
  346. package/dist/harness/session/testing/benchmark/storage.d.ts.map +0 -1
  347. package/dist/harness/session/testing/benchmark/storage.js +0 -114
  348. package/dist/harness/session/testing/benchmark/storage.js.map +0 -1
  349. package/dist/harness/session/testing/conformance/session-repo.d.ts +0 -23
  350. package/dist/harness/session/testing/conformance/session-repo.d.ts.map +0 -1
  351. package/dist/harness/session/testing/conformance/session-repo.js +0 -809
  352. package/dist/harness/session/testing/conformance/session-repo.js.map +0 -1
  353. package/dist/harness/session/testing/conformance/storage.d.ts +0 -4
  354. package/dist/harness/session/testing/conformance/storage.d.ts.map +0 -1
  355. package/dist/harness/session/testing/conformance/storage.js +0 -600
  356. package/dist/harness/session/testing/conformance/storage.js.map +0 -1
  357. package/dist/harness/session/testing/gating-storage.d.ts +0 -26
  358. package/dist/harness/session/testing/gating-storage.d.ts.map +0 -1
  359. package/dist/harness/session/testing/gating-storage.js +0 -100
  360. package/dist/harness/session/testing/gating-storage.js.map +0 -1
  361. package/dist/harness/session/testing/index.d.ts +0 -10
  362. package/dist/harness/session/testing/index.d.ts.map +0 -1
  363. package/dist/harness/session/testing/index.js +0 -9
  364. package/dist/harness/session/testing/index.js.map +0 -1
  365. package/dist/harness/session/testing/instrumented-storage.d.ts +0 -11
  366. package/dist/harness/session/testing/instrumented-storage.d.ts.map +0 -1
  367. package/dist/harness/session/testing/instrumented-storage.js +0 -16
  368. package/dist/harness/session/testing/instrumented-storage.js.map +0 -1
  369. package/dist/harness/session/testing/storage-decorator.d.ts +0 -20
  370. package/dist/harness/session/testing/storage-decorator.d.ts.map +0 -1
  371. package/dist/harness/session/testing/storage-decorator.js +0 -41
  372. package/dist/harness/session/testing/storage-decorator.js.map +0 -1
  373. package/dist/harness/session/testing/types.d.ts +0 -12
  374. package/dist/harness/session/testing/types.d.ts.map +0 -1
  375. package/dist/harness/session/testing/types.js +0 -2
  376. package/dist/harness/session/testing/types.js.map +0 -1
  377. package/dist/harness/session/types.d.ts +0 -512
  378. package/dist/harness/session/types.d.ts.map +0 -1
  379. package/dist/harness/session/types.js +0 -9
  380. package/dist/harness/session/types.js.map +0 -1
  381. package/dist/harness/session/values.d.ts +0 -95
  382. package/dist/harness/session/values.d.ts.map +0 -1
  383. package/dist/harness/session/values.js +0 -81
  384. package/dist/harness/session/values.js.map +0 -1
  385. package/dist/harness/skills.d.ts +0 -46
  386. package/dist/harness/skills.d.ts.map +0 -1
  387. package/dist/harness/skills.js +0 -326
  388. package/dist/harness/skills.js.map +0 -1
  389. package/dist/harness/system-prompt.d.ts +0 -3
  390. package/dist/harness/system-prompt.d.ts.map +0 -1
  391. package/dist/harness/system-prompt.js +0 -30
  392. package/dist/harness/system-prompt.js.map +0 -1
  393. package/dist/harness/telemetry.d.ts +0 -1242
  394. package/dist/harness/telemetry.d.ts.map +0 -1
  395. package/dist/harness/telemetry.js +0 -527
  396. package/dist/harness/telemetry.js.map +0 -1
  397. package/dist/harness/tools/bash.d.ts +0 -27
  398. package/dist/harness/tools/bash.d.ts.map +0 -1
  399. package/dist/harness/tools/bash.js +0 -105
  400. package/dist/harness/tools/bash.js.map +0 -1
  401. package/dist/harness/tools/edit-diff.d.ts +0 -89
  402. package/dist/harness/tools/edit-diff.d.ts.map +0 -1
  403. package/dist/harness/tools/edit-diff.js +0 -386
  404. package/dist/harness/tools/edit-diff.js.map +0 -1
  405. package/dist/harness/tools/edit.d.ts +0 -19
  406. package/dist/harness/tools/edit.d.ts.map +0 -1
  407. package/dist/harness/tools/edit.js +0 -108
  408. package/dist/harness/tools/edit.js.map +0 -1
  409. package/dist/harness/tools/file-mutation-queue.d.ts +0 -5
  410. package/dist/harness/tools/file-mutation-queue.d.ts.map +0 -1
  411. package/dist/harness/tools/file-mutation-queue.js +0 -46
  412. package/dist/harness/tools/file-mutation-queue.js.map +0 -1
  413. package/dist/harness/tools/image.d.ts +0 -3
  414. package/dist/harness/tools/image.d.ts.map +0 -1
  415. package/dist/harness/tools/image.js +0 -106
  416. package/dist/harness/tools/image.js.map +0 -1
  417. package/dist/harness/tools/index.d.ts +0 -6
  418. package/dist/harness/tools/index.d.ts.map +0 -1
  419. package/dist/harness/tools/index.js +0 -5
  420. package/dist/harness/tools/index.js.map +0 -1
  421. package/dist/harness/tools/path-utils.d.ts +0 -5
  422. package/dist/harness/tools/path-utils.d.ts.map +0 -1
  423. package/dist/harness/tools/path-utils.js +0 -26
  424. package/dist/harness/tools/path-utils.js.map +0 -1
  425. package/dist/harness/tools/read.d.ts +0 -35
  426. package/dist/harness/tools/read.d.ts.map +0 -1
  427. package/dist/harness/tools/read.js +0 -108
  428. package/dist/harness/tools/read.js.map +0 -1
  429. package/dist/harness/tools/tool-context.d.ts +0 -6
  430. package/dist/harness/tools/tool-context.d.ts.map +0 -1
  431. package/dist/harness/tools/tool-context.js +0 -2
  432. package/dist/harness/tools/tool-context.js.map +0 -1
  433. package/dist/harness/tools/write.d.ts +0 -11
  434. package/dist/harness/tools/write.d.ts.map +0 -1
  435. package/dist/harness/tools/write.js +0 -31
  436. package/dist/harness/tools/write.js.map +0 -1
  437. package/dist/harness/types.d.ts +0 -305
  438. package/dist/harness/types.d.ts.map +0 -1
  439. package/dist/harness/types.js +0 -75
  440. package/dist/harness/types.js.map +0 -1
  441. package/dist/harness/utils/adaptive-publisher.d.ts +0 -24
  442. package/dist/harness/utils/adaptive-publisher.d.ts.map +0 -1
  443. package/dist/harness/utils/adaptive-publisher.js +0 -79
  444. package/dist/harness/utils/adaptive-publisher.js.map +0 -1
  445. package/dist/harness/utils/output-capture.d.ts +0 -31
  446. package/dist/harness/utils/output-capture.d.ts.map +0 -1
  447. package/dist/harness/utils/output-capture.js +0 -217
  448. package/dist/harness/utils/output-capture.js.map +0 -1
  449. package/dist/harness/utils/shell-output.d.ts +0 -29
  450. package/dist/harness/utils/shell-output.d.ts.map +0 -1
  451. package/dist/harness/utils/shell-output.js +0 -71
  452. package/dist/harness/utils/shell-output.js.map +0 -1
  453. package/dist/harness/utils/truncate.d.ts +0 -71
  454. package/dist/harness/utils/truncate.d.ts.map +0 -1
  455. package/dist/harness/utils/truncate.js +0 -296
  456. package/dist/harness/utils/truncate.js.map +0 -1
  457. package/dist/harness/utils/usage.d.ts +0 -4
  458. package/dist/harness/utils/usage.d.ts.map +0 -1
  459. package/dist/harness/utils/usage.js +0 -33
  460. package/dist/harness/utils/usage.js.map +0 -1
  461. package/dist/node.d.ts +0 -3
  462. package/dist/node.d.ts.map +0 -1
  463. package/dist/node.js +0 -3
  464. package/dist/node.js.map +0 -1
  465. package/dist/search/index.d.ts +0 -29
  466. package/dist/search/index.d.ts.map +0 -1
  467. package/dist/search/index.js +0 -2
  468. package/dist/search/index.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"deferred.js","sourceRoot":"","sources":["../../../../src/harness/runtime/drive/deferred.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Api, DeferredHandle, Model } from \"@draht/ai\";\nimport { type Context, getTelemetryContext, withAbortSignal } from \"../../context.ts\";\nimport { consumeAssistantStream } from \"../../execution/assistant.ts\";\nimport { applyStreamOptionsPatch } from \"../../hooks.ts\";\nimport { SessionInvariantError } from \"../../session/session.ts\";\nimport {\n\ttype DeferredEffectPendingOperation,\n\ttype DeferredSuspendedOperation,\n\ttype LaneConfiguration,\n\ttype OperationError,\n\ttype OperationScope,\n\toperationScopeOf,\n\ttype SessionReader,\n\ttype SettledAssistantMessage,\n} from \"../../session/types.ts\";\nimport { deleteList, pendingAssistantFrames } from \"../../session/values.ts\";\nimport type { AgentHarnessStreamOptions } from \"../../types.ts\";\nimport type { Lane } from \"../lane.ts\";\nimport type { ContinueOperationResult, Drive, ProcedureResult } from \"../types.ts\";\nimport { openAssistantResponse, publishConfigurationFailure, publishResponse } from \"./response.ts\";\n\ntype DeferredLeaf = DeferredSuspendedOperation | DeferredEffectPendingOperation;\n/** Deferred effect payload without the run-wide scope fields. */\ntype EffectPendingFields = Omit<DeferredEffectPendingOperation, keyof OperationScope>;\n\ntype PreparedDeferredPoll = {\n\tkind: \"ready\";\n\tsource: DeferredHandle;\n\tmodel: Model<Api>;\n\tpoll: number;\n\tstreamOptions: AgentHarnessStreamOptions;\n};\n\ntype DeferredPreparation =\n\t| PreparedDeferredPoll\n\t| { kind: \"cancel_requested\" }\n\t| { kind: \"waiting\"; source: DeferredHandle }\n\t| { kind: \"configuration_failure\" };\n\nfunction configurationError(identity: LaneConfiguration[\"model\"]): OperationError {\n\treturn {\n\t\tcode: \"model_unavailable\",\n\t\tmessage: \"The configured model is unavailable in this process\",\n\t\tdetails: identity,\n\t};\n}\n\nexport async function readDeferredSourceHandle(\n\treader: SessionReader,\n\tdeferred: DeferredLeaf,\n\tcontext: Context,\n): Promise<DeferredHandle> {\n\tconst source = (await reader.getEntries([deferred.sourceEntryId], context)).get(deferred.sourceEntryId);\n\tif (\n\t\tsource?.type !== \"message\" ||\n\t\tsource.message.role !== \"assistant\" ||\n\t\tsource.message.stopReason !== \"deferred\" ||\n\t\tsource.message.deferred === undefined\n\t) {\n\t\tthrow new SessionInvariantError(`Deferred source ${deferred.sourceEntryId} is missing its assistant handle`);\n\t}\n\tconst handle = source.message.deferred;\n\tconst identity = deferred.configuration.model;\n\tif (\n\t\thandle.id.length === 0 ||\n\t\thandle.provider !== identity.provider ||\n\t\thandle.modelId !== identity.modelId ||\n\t\thandle.api !== source.message.api\n\t) {\n\t\tthrow new SessionInvariantError(`Deferred source ${deferred.sourceEntryId} has an invalid handle`);\n\t}\n\treturn handle;\n}\n\nasync function readSourceHandle<TContext extends object | undefined>(\n\tlane: Lane<TContext>,\n\tdrive: Drive,\n\tdeferred: DeferredLeaf,\n): Promise<ContinueOperationResult<DeferredHandle>> {\n\treturn lane.continueOperation(\n\t\tdeferred,\n\t\tasync (_state, _current, _meta, reader) => ({\n\t\t\tkind: \"return\",\n\t\t\tresult: await readDeferredSourceHandle(reader, deferred, drive.context),\n\t\t}),\n\t\tdrive.context,\n\t);\n}\n\nasync function prepareDeferredPoll<TContext extends object | undefined>(\n\tlane: Lane<TContext>,\n\tdrive: Drive,\n\texpected: DeferredLeaf,\n): Promise<DeferredPreparation> {\n\tconst source = await readSourceHandle(lane, drive, expected);\n\tif (source.kind === \"cancel_requested\") return source;\n\tif (drive.deferredPermits === 0) return { kind: \"waiting\", source: source.value };\n\n\tconst identity = expected.configuration.model;\n\tconst model = lane.models.getModel(identity.provider, identity.modelId);\n\tif (model === undefined) return { kind: \"configuration_failure\" };\n\tconst baseOptions: AgentHarnessStreamOptions = { ...expected.streamOptions, deferred: false };\n\tconst poll = expected.at === \"deferred.suspended\" ? expected.poll + 1 : expected.poll;\n\tconst beforeRequest = await lane.hooks.runWithGate(\n\t\t\"before_request\",\n\t\t{\n\t\t\tlane: lane.name,\n\t\t\trunId: drive.operationId,\n\t\t\tmodel,\n\t\t\tstep: \"deferred\",\n\t\t\tattempt: poll,\n\t\t\tstreamOptions: baseOptions,\n\t\t},\n\t\tdrive.gate,\n\t\tdrive.context,\n\t);\n\treturn {\n\t\tkind: \"ready\",\n\t\tsource: source.value,\n\t\tmodel,\n\t\tpoll,\n\t\tstreamOptions: {\n\t\t\t...(beforeRequest?.streamOptions === undefined\n\t\t\t\t? baseOptions\n\t\t\t\t: applyStreamOptionsPatch(baseOptions, beforeRequest.streamOptions)),\n\t\t\tdeferred: false,\n\t\t},\n\t};\n}\n\nasync function publishPollIntent<TContext extends object | undefined>(\n\tlane: Lane<TContext>,\n\tdrive: Drive,\n\tdeferred: DeferredLeaf,\n\tprepared: PreparedDeferredPoll,\n\trecovery: boolean,\n): Promise<ContinueOperationResult<DeferredEffectPendingOperation>> {\n\tconst at = Date.now();\n\tconst next: EffectPendingFields = {\n\t\tat: \"deferred.effect_pending\",\n\t\tstepId: deferred.stepId,\n\t\tsourceEntryId: deferred.sourceEntryId,\n\t\tpoll: prepared.poll,\n\t\tresponseEntryId: lane.session.idGenerator.next(at),\n\t\tusageId: lane.session.idGenerator.next(at),\n\t\tconfiguration: deferred.configuration,\n\t\tstreamOptions: deferred.streamOptions,\n\t};\n\treturn lane.continueOperation(\n\t\tdeferred,\n\t\t(_state, current) => {\n\t\t\tconst nextState: DeferredEffectPendingOperation = { ...operationScopeOf(current), ...next };\n\t\t\treturn {\n\t\t\t\tkind: \"commit\",\n\t\t\t\twrites:\n\t\t\t\t\tdeferred.at === \"deferred.effect_pending\"\n\t\t\t\t\t\t? [deleteList(pendingAssistantFrames(drive.operationId, deferred.responseEntryId))]\n\t\t\t\t\t\t: [],\n\t\t\t\toperationState: nextState,\n\t\t\t\tmaterialize: () => {\n\t\t\t\t\tdrive.deferredPermits--;\n\t\t\t\t\treturn nextState;\n\t\t\t\t},\n\t\t\t\tevents: () => [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"run_resume\",\n\t\t\t\t\t\tlane: lane.name,\n\t\t\t\t\t\trunId: drive.operationId,\n\t\t\t\t\t\t...(recovery ? { recovery: true as const } : {}),\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"turn_start\",\n\t\t\t\t\t\tlane: lane.name,\n\t\t\t\t\t\trunId: drive.operationId,\n\t\t\t\t\t\tturnId: `${next.stepId}:poll:${next.poll}`,\n\t\t\t\t\t\t...(recovery ? { recovery: true as const } : {}),\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t};\n\t\t},\n\t\tdrive.context,\n\t);\n}\n\nasync function performDeferredPoll<TContext extends object | undefined>(\n\tlane: Lane<TContext>,\n\tdrive: Drive,\n\tprepared: PreparedDeferredPoll,\n\tintent: DeferredEffectPendingOperation,\n\trecovery: boolean,\n): Promise<SettledAssistantMessage> {\n\tconst response = openAssistantResponse(lane, drive, intent.responseEntryId, recovery);\n\tlet metadata: { status?: number; headers?: Record<string, string> } = {};\n\tconst admitted = withAbortSignal(drive.gate.signal, drive.context);\n\tconst stream = drive.gate.admit(() =>\n\t\tlane.models.streamDeferred(prepared.model, prepared.source, {\n\t\t\twait: 0,\n\t\t\tsignal: admitted.abortSignal,\n\t\t\ttelemetryContext: getTelemetryContext(admitted),\n\t\t\ttimeoutMs: prepared.streamOptions.timeoutMs,\n\t\t\tmaxRetries: prepared.streamOptions.maxRetries,\n\t\t\tmaxRetryDelayMs: prepared.streamOptions.maxRetryDelayMs,\n\t\t\theaders: prepared.streamOptions.headers,\n\t\t\tonPayload: async (payload, requestModel) => {\n\t\t\t\tconst result = await lane.hooks.runWithGate(\n\t\t\t\t\t\"before_payload\",\n\t\t\t\t\t{ lane: lane.name, runId: drive.operationId, model: requestModel, payload },\n\t\t\t\t\tdrive.gate,\n\t\t\t\t\tdrive.context,\n\t\t\t\t);\n\t\t\t\treturn result?.payload;\n\t\t\t},\n\t\t\tonResponse: (response) => {\n\t\t\t\tmetadata = { status: response.status, headers: response.headers };\n\t\t\t},\n\t\t}),\n\t);\n\n\ttry {\n\t\treturn await consumeAssistantStream(\n\t\t\tstream,\n\t\t\tresponse.observer,\n\t\t\t(message, context) => response.afterResponse(message, metadata, context),\n\t\t\tdrive.context,\n\t\t);\n\t} finally {\n\t\tawait response.close();\n\t}\n}\n\nasync function pollDeferred<TContext extends object | undefined>(\n\tlane: Lane<TContext>,\n\tdrive: Drive,\n\texpected: DeferredLeaf,\n\trecovery: boolean,\n): Promise<ProcedureResult> {\n\tconst prepared = await prepareDeferredPoll(lane, drive, expected);\n\tif (prepared.kind === \"cancel_requested\") return { kind: \"continue\" };\n\tif (prepared.kind === \"waiting\") {\n\t\treturn {\n\t\t\tkind: \"waiting\",\n\t\t\toutcome: {\n\t\t\t\tkind: \"waiting\",\n\t\t\t\toperationId: drive.operationId,\n\t\t\t\treason: \"deferred\",\n\t\t\t\tdeferred: prepared.source,\n\t\t\t},\n\t\t};\n\t}\n\tif (prepared.kind === \"configuration_failure\") {\n\t\treturn publishConfigurationFailure(lane, drive, expected, configurationError(expected.configuration.model));\n\t}\n\n\tconst intent = await publishPollIntent(lane, drive, expected, prepared, recovery);\n\tif (intent.kind === \"cancel_requested\") return { kind: \"continue\" };\n\tconst response = await performDeferredPoll(lane, drive, prepared, intent.value, recovery);\n\treturn publishResponse(lane, drive, intent.value, response, recovery ? { recovery: true } : {});\n}\n\n/** Poll one durably suspended deferred response when this pass carries a permit. */\nexport function runDeferredSuspended<TContext extends object | undefined>(\n\tlane: Lane<TContext>,\n\tdrive: Drive,\n\tdeferred: DeferredSuspendedOperation,\n): Promise<ProcedureResult> {\n\treturn pollDeferred(lane, drive, deferred, false);\n}\n\n/** Replace one orphaned unknown-outcome poll under fresh ids when this pass carries a permit. */\nexport function recoverDeferredPoll<TContext extends object | undefined>(\n\tlane: Lane<TContext>,\n\tdrive: Drive,\n\tdeferred: DeferredEffectPendingOperation,\n): Promise<ProcedureResult> {\n\treturn pollDeferred(lane, drive, deferred, true);\n}\n\n/** Advance or report the wait for one deferred run phase. */\nexport function runDeferred<TContext extends object | undefined>(\n\tlane: Lane<TContext>,\n\tdrive: Drive,\n\tdeferred: DeferredSuspendedOperation | DeferredEffectPendingOperation,\n): Promise<ProcedureResult> {\n\treturn deferred.at === \"deferred.suspended\"\n\t\t? runDeferredSuspended(lane, drive, deferred)\n\t\t: recoverDeferredPoll(lane, drive, deferred);\n}\n"]}
@@ -1,8 +0,0 @@
1
- import { type AssistantReadyOperation, type AssistantRetryWaitOperation } from "../../session/types.ts";
2
- import type { Lane } from "../lane.ts";
3
- import type { Drive, ProcedureResult } from "../types.ts";
4
- /** Advance one durable assistant retry wait according to this pass's local wait policy. */
5
- export declare function runRetryWait<TContext extends object | undefined>(lane: Lane<TContext>, drive: Drive, generation: AssistantRetryWaitOperation): Promise<ProcedureResult>;
6
- /** Execute one ready assistant generation or advance its durable retry wait. */
7
- export declare function runGeneration<TContext extends object | undefined>(lane: Lane<TContext>, drive: Drive, generation: AssistantReadyOperation | AssistantRetryWaitOperation): Promise<ProcedureResult>;
8
- //# sourceMappingURL=generation.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"generation.d.ts","sourceRoot":"","sources":["../../../../src/harness/runtime/drive/generation.ts"],"names":[],"mappings":"AAMA,OAAO,EAEN,KAAK,uBAAuB,EAC5B,KAAK,2BAA2B,EAMhC,MAAM,wBAAwB,CAAC;AAEhC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,KAAK,EAA2B,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAqNnF,2FAA2F;AAC3F,wBAAsB,YAAY,CAAC,QAAQ,SAAS,MAAM,GAAG,SAAS,EACrE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,EACpB,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,2BAA2B,GACrC,OAAO,CAAC,eAAe,CAAC,CA4C1B;AAED,gFAAgF;AAChF,wBAAsB,aAAa,CAAC,QAAQ,SAAS,MAAM,GAAG,SAAS,EACtE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,EACpB,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,uBAAuB,GAAG,2BAA2B,GAC/D,OAAO,CAAC,eAAe,CAAC,CAa1B"}
@@ -1,205 +0,0 @@
1
- import { getTelemetryContext, withAbortSignal } from "../../context.js";
2
- import { streamHarnessAssistant } from "../../execution/assistant.js";
3
- import { applyStreamOptionsPatch } from "../../hooks.js";
4
- import { SessionInvariantError } from "../../session/session.js";
5
- import { operationScopeOf, } from "../../session/types.js";
6
- import { readBoundedContext } from "../transcript.js";
7
- import { openAssistantResponse, publishConfigurationFailure, publishResponse } from "./response.js";
8
- import { waitUntil } from "./retry.js";
9
- function configurationError(code, details) {
10
- return {
11
- code,
12
- message: code === "model_unavailable"
13
- ? "The configured model is unavailable in this process"
14
- : "One or more configured tools are unavailable in this process",
15
- details,
16
- };
17
- }
18
- async function resolveSystemPrompt(lane, context) {
19
- const config = lane.readConfig();
20
- if (config.systemPrompt === undefined)
21
- return "";
22
- if (typeof config.systemPrompt === "string")
23
- return config.systemPrompt;
24
- const source = config.toolContext;
25
- const toolContext = typeof source === "function" ? await source(context) : source;
26
- return config.systemPrompt(toolContext, context);
27
- }
28
- async function prepareGeneration(lane, drive, generation) {
29
- const identity = generation.generationContext.configuration.model;
30
- const model = lane.models.getModel(identity.provider, identity.modelId);
31
- if (model === undefined) {
32
- return { kind: "configuration_failure", error: configurationError("model_unavailable", identity) };
33
- }
34
- const config = lane.readConfig();
35
- const toolsByName = new Map(config.tools.map((tool) => [tool.name, tool]));
36
- const missingTools = generation.generationContext.configuration.activeToolNames.filter((name) => !toolsByName.has(name));
37
- if (missingTools.length !== 0) {
38
- return {
39
- kind: "configuration_failure",
40
- error: configurationError("configured_tools_unavailable", { tools: missingTools }),
41
- };
42
- }
43
- const tools = generation.generationContext.configuration.activeToolNames.map((name) => {
44
- const tool = toolsByName.get(name);
45
- if (tool === undefined)
46
- throw new SessionInvariantError(`Configured tool ${name} disappeared during resolution`);
47
- return {
48
- name: tool.name,
49
- description: tool.description,
50
- parameters: tool.parameters,
51
- ...(tool.constrainedSampling === undefined ? {} : { constrainedSampling: tool.constrainedSampling }),
52
- };
53
- });
54
- const messages = await readBoundedContext(lane, drive, generation);
55
- if (messages.kind === "cancel_requested")
56
- return messages;
57
- const systemPrompt = await resolveSystemPrompt(lane, drive.context);
58
- const beforeRequest = await lane.hooks.runWithGate("before_request", {
59
- lane: lane.name,
60
- runId: drive.operationId,
61
- model,
62
- step: "assistant",
63
- attempt: generation.nextAttempt,
64
- streamOptions: generation.generationContext.streamOptions,
65
- }, drive.gate, drive.context);
66
- const streamOptions = beforeRequest?.streamOptions === undefined
67
- ? generation.generationContext.streamOptions
68
- : applyStreamOptionsPatch(generation.generationContext.streamOptions, beforeRequest.streamOptions);
69
- return {
70
- kind: "ready",
71
- model,
72
- tools,
73
- messages: messages.value,
74
- systemPrompt,
75
- streamOptions,
76
- toProviderMessages: config.toProviderMessages,
77
- };
78
- }
79
- async function publishGenerationIntent(lane, drive, ready, prepared) {
80
- const at = Date.now();
81
- const pending = {
82
- at: "assistant.effect_pending",
83
- generationContext: ready.generationContext,
84
- attempt: ready.nextAttempt,
85
- responseEntryId: lane.session.idGenerator.next(at),
86
- usageId: lane.session.idGenerator.next(at),
87
- intendedOutputLimit: prepared.model.maxTokens,
88
- contextWindow: prepared.model.contextWindow,
89
- };
90
- return lane.continueOperation(ready, (_state, current) => {
91
- const nextState = { ...operationScopeOf(current), ...pending };
92
- return {
93
- kind: "commit",
94
- writes: [],
95
- operationState: nextState,
96
- materialize: () => nextState,
97
- events: () => ready.nextAttempt === 1
98
- ? [
99
- {
100
- type: "turn_start",
101
- lane: lane.name,
102
- runId: drive.operationId,
103
- turnId: ready.generationContext.stepId,
104
- },
105
- ]
106
- : [],
107
- };
108
- }, drive.context);
109
- }
110
- async function performGeneration(lane, drive, intent, prepared) {
111
- const response = openAssistantResponse(lane, drive, intent.responseEntryId);
112
- try {
113
- return await streamHarnessAssistant(prepared.messages, {
114
- model: prepared.model,
115
- systemPrompt: prepared.systemPrompt,
116
- tools: prepared.tools,
117
- thinkingLevel: intent.generationContext.configuration.thinkingLevel,
118
- streamOptions: prepared.streamOptions,
119
- transformContext: async (requestContext, context) => {
120
- const result = await lane.hooks.runWithGate("transform_context", { lane: lane.name, runId: drive.operationId, ...requestContext }, drive.gate, context);
121
- return {
122
- messages: result?.messages ?? requestContext.messages,
123
- systemPrompt: result?.systemPrompt ?? requestContext.systemPrompt,
124
- };
125
- },
126
- toProviderMessages: prepared.toProviderMessages,
127
- beforePayload: async (payload, requestModel, context) => {
128
- const result = await lane.hooks.runWithGate("before_payload", { lane: lane.name, runId: drive.operationId, model: requestModel, payload }, drive.gate, context);
129
- return result?.payload;
130
- },
131
- afterResponse: response.afterResponse,
132
- request: (aiContext, options, context) => {
133
- const admitted = withAbortSignal(drive.gate.signal, context);
134
- return drive.gate.admit(() => lane.models.streamSimple(prepared.model, aiContext, {
135
- ...options,
136
- sessionId: `${lane.session.metadata.id}:${lane.name}`,
137
- signal: admitted.abortSignal,
138
- telemetryContext: getTelemetryContext(admitted),
139
- }));
140
- },
141
- observer: response.observer,
142
- }, drive.context);
143
- }
144
- finally {
145
- await response.close();
146
- }
147
- }
148
- /** Advance one durable assistant retry wait according to this pass's local wait policy. */
149
- export async function runRetryWait(lane, drive, generation) {
150
- if (Date.now() < generation.notBefore) {
151
- if (!drive.waitForRetry) {
152
- return {
153
- kind: "waiting",
154
- outcome: {
155
- kind: "waiting",
156
- operationId: drive.operationId,
157
- reason: "retry",
158
- notBefore: generation.notBefore,
159
- },
160
- };
161
- }
162
- await drive.gate.admit(() => waitUntil(generation.notBefore, drive.gate.signal));
163
- }
164
- const result = await lane.continueOperation(generation, (_state, current) => {
165
- const nextState = {
166
- ...operationScopeOf(current),
167
- at: "assistant.ready",
168
- generationContext: generation.generationContext,
169
- nextAttempt: generation.nextAttempt,
170
- };
171
- return {
172
- kind: "commit",
173
- writes: [],
174
- operationState: nextState,
175
- materialize: () => ({ kind: "continue" }),
176
- events: () => [
177
- {
178
- type: "retry_start",
179
- lane: lane.name,
180
- runId: drive.operationId,
181
- step: generation.generationContext.stepId,
182
- attempt: generation.nextAttempt,
183
- },
184
- ],
185
- };
186
- }, drive.context);
187
- return result.kind === "cancel_requested" ? { kind: "continue" } : result.value;
188
- }
189
- /** Execute one ready assistant generation or advance its durable retry wait. */
190
- export async function runGeneration(lane, drive, generation) {
191
- if (generation.at === "assistant.retry_wait")
192
- return runRetryWait(lane, drive, generation);
193
- const prepared = await prepareGeneration(lane, drive, generation);
194
- if (prepared.kind === "configuration_failure") {
195
- return publishConfigurationFailure(lane, drive, generation, prepared.error);
196
- }
197
- if (prepared.kind === "cancel_requested")
198
- return { kind: "continue" };
199
- const intent = await publishGenerationIntent(lane, drive, generation, prepared);
200
- if (intent.kind === "cancel_requested")
201
- return { kind: "continue" };
202
- const response = await performGeneration(lane, drive, intent.value, prepared);
203
- return publishResponse(lane, drive, intent.value, response);
204
- }
205
- //# sourceMappingURL=generation.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"generation.js","sourceRoot":"","sources":["../../../../src/harness/runtime/drive/generation.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Api, Model, Tool } from \"@draht/ai\";\nimport type { AgentMessage } from \"../../../types.ts\";\nimport { type Context, getTelemetryContext, withAbortSignal } from \"../../context.ts\";\nimport { type HarnessAssistantStreamConfig, streamHarnessAssistant } from \"../../execution/assistant.ts\";\nimport { applyStreamOptionsPatch } from \"../../hooks.ts\";\nimport { SessionInvariantError } from \"../../session/session.ts\";\nimport {\n\ttype AssistantEffectPendingOperation,\n\ttype AssistantReadyOperation,\n\ttype AssistantRetryWaitOperation,\n\ttype JsonValue,\n\ttype OperationError,\n\ttype OperationScope,\n\toperationScopeOf,\n\ttype SettledAssistantMessage,\n} from \"../../session/types.ts\";\nimport type { AgentHarnessStreamOptions } from \"../../types.ts\";\nimport type { Lane } from \"../lane.ts\";\nimport { readBoundedContext } from \"../transcript.ts\";\nimport type { ContinueOperationResult, Drive, ProcedureResult } from \"../types.ts\";\nimport { openAssistantResponse, publishConfigurationFailure, publishResponse } from \"./response.ts\";\nimport { waitUntil } from \"./retry.ts\";\n\n/** Assistant effect-pending payload without the run-wide scope fields. */\ntype AssistantEffectPending = Omit<AssistantEffectPendingOperation, keyof OperationScope>;\n\ntype PreparedGeneration = {\n\tkind: \"ready\";\n\tmodel: Model<Api>;\n\ttools: Tool[];\n\tmessages: AgentMessage[];\n\tsystemPrompt: string;\n\tstreamOptions: AgentHarnessStreamOptions;\n\ttoProviderMessages: HarnessAssistantStreamConfig[\"toProviderMessages\"];\n};\n\ntype GenerationPreparation =\n\t| PreparedGeneration\n\t| { kind: \"configuration_failure\"; error: OperationError }\n\t| { kind: \"cancel_requested\" };\n\nfunction configurationError(\n\tcode: \"model_unavailable\" | \"configured_tools_unavailable\",\n\tdetails: JsonValue,\n): OperationError {\n\treturn {\n\t\tcode,\n\t\tmessage:\n\t\t\tcode === \"model_unavailable\"\n\t\t\t\t? \"The configured model is unavailable in this process\"\n\t\t\t\t: \"One or more configured tools are unavailable in this process\",\n\t\tdetails,\n\t};\n}\n\nasync function resolveSystemPrompt<TContext extends object | undefined>(\n\tlane: Lane<TContext>,\n\tcontext: Context,\n): Promise<string> {\n\tconst config = lane.readConfig();\n\tif (config.systemPrompt === undefined) return \"\";\n\tif (typeof config.systemPrompt === \"string\") return config.systemPrompt;\n\tconst source = config.toolContext;\n\tconst toolContext = typeof source === \"function\" ? await source(context) : source;\n\treturn config.systemPrompt(toolContext as TContext, context);\n}\n\nasync function prepareGeneration<TContext extends object | undefined>(\n\tlane: Lane<TContext>,\n\tdrive: Drive,\n\tgeneration: AssistantReadyOperation,\n): Promise<GenerationPreparation> {\n\tconst identity = generation.generationContext.configuration.model;\n\tconst model = lane.models.getModel(identity.provider, identity.modelId);\n\tif (model === undefined) {\n\t\treturn { kind: \"configuration_failure\", error: configurationError(\"model_unavailable\", identity) };\n\t}\n\n\tconst config = lane.readConfig();\n\tconst toolsByName = new Map(config.tools.map((tool) => [tool.name, tool]));\n\tconst missingTools = generation.generationContext.configuration.activeToolNames.filter(\n\t\t(name) => !toolsByName.has(name),\n\t);\n\tif (missingTools.length !== 0) {\n\t\treturn {\n\t\t\tkind: \"configuration_failure\",\n\t\t\terror: configurationError(\"configured_tools_unavailable\", { tools: missingTools }),\n\t\t};\n\t}\n\tconst tools: Tool[] = generation.generationContext.configuration.activeToolNames.map((name) => {\n\t\tconst tool = toolsByName.get(name);\n\t\tif (tool === undefined) throw new SessionInvariantError(`Configured tool ${name} disappeared during resolution`);\n\t\treturn {\n\t\t\tname: tool.name,\n\t\t\tdescription: tool.description,\n\t\t\tparameters: tool.parameters,\n\t\t\t...(tool.constrainedSampling === undefined ? {} : { constrainedSampling: tool.constrainedSampling }),\n\t\t};\n\t});\n\n\tconst messages = await readBoundedContext(lane, drive, generation);\n\tif (messages.kind === \"cancel_requested\") return messages;\n\tconst systemPrompt = await resolveSystemPrompt(lane, drive.context);\n\tconst beforeRequest = await lane.hooks.runWithGate(\n\t\t\"before_request\",\n\t\t{\n\t\t\tlane: lane.name,\n\t\t\trunId: drive.operationId,\n\t\t\tmodel,\n\t\t\tstep: \"assistant\",\n\t\t\tattempt: generation.nextAttempt,\n\t\t\tstreamOptions: generation.generationContext.streamOptions,\n\t\t},\n\t\tdrive.gate,\n\t\tdrive.context,\n\t);\n\tconst streamOptions =\n\t\tbeforeRequest?.streamOptions === undefined\n\t\t\t? generation.generationContext.streamOptions\n\t\t\t: applyStreamOptionsPatch(generation.generationContext.streamOptions, beforeRequest.streamOptions);\n\treturn {\n\t\tkind: \"ready\",\n\t\tmodel,\n\t\ttools,\n\t\tmessages: messages.value,\n\t\tsystemPrompt,\n\t\tstreamOptions,\n\t\ttoProviderMessages: config.toProviderMessages,\n\t};\n}\n\nasync function publishGenerationIntent<TContext extends object | undefined>(\n\tlane: Lane<TContext>,\n\tdrive: Drive,\n\tready: AssistantReadyOperation,\n\tprepared: PreparedGeneration,\n): Promise<ContinueOperationResult<AssistantEffectPendingOperation>> {\n\tconst at = Date.now();\n\tconst pending: AssistantEffectPending = {\n\t\tat: \"assistant.effect_pending\",\n\t\tgenerationContext: ready.generationContext,\n\t\tattempt: ready.nextAttempt,\n\t\tresponseEntryId: lane.session.idGenerator.next(at),\n\t\tusageId: lane.session.idGenerator.next(at),\n\t\tintendedOutputLimit: prepared.model.maxTokens,\n\t\tcontextWindow: prepared.model.contextWindow,\n\t};\n\treturn lane.continueOperation(\n\t\tready,\n\t\t(_state, current) => {\n\t\t\tconst nextState: AssistantEffectPendingOperation = { ...operationScopeOf(current), ...pending };\n\t\t\treturn {\n\t\t\t\tkind: \"commit\",\n\t\t\t\twrites: [],\n\t\t\t\toperationState: nextState,\n\t\t\t\tmaterialize: () => nextState,\n\t\t\t\tevents: () =>\n\t\t\t\t\tready.nextAttempt === 1\n\t\t\t\t\t\t? [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\ttype: \"turn_start\",\n\t\t\t\t\t\t\t\t\tlane: lane.name,\n\t\t\t\t\t\t\t\t\trunId: drive.operationId,\n\t\t\t\t\t\t\t\t\tturnId: ready.generationContext.stepId,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t: [],\n\t\t\t};\n\t\t},\n\t\tdrive.context,\n\t);\n}\n\nasync function performGeneration<TContext extends object | undefined>(\n\tlane: Lane<TContext>,\n\tdrive: Drive,\n\tintent: AssistantEffectPendingOperation,\n\tprepared: PreparedGeneration,\n): Promise<SettledAssistantMessage> {\n\tconst response = openAssistantResponse(lane, drive, intent.responseEntryId);\n\ttry {\n\t\treturn await streamHarnessAssistant(\n\t\t\tprepared.messages,\n\t\t\t{\n\t\t\t\tmodel: prepared.model,\n\t\t\t\tsystemPrompt: prepared.systemPrompt,\n\t\t\t\ttools: prepared.tools,\n\t\t\t\tthinkingLevel: intent.generationContext.configuration.thinkingLevel,\n\t\t\t\tstreamOptions: prepared.streamOptions,\n\t\t\t\ttransformContext: async (requestContext, context) => {\n\t\t\t\t\tconst result = await lane.hooks.runWithGate(\n\t\t\t\t\t\t\"transform_context\",\n\t\t\t\t\t\t{ lane: lane.name, runId: drive.operationId, ...requestContext },\n\t\t\t\t\t\tdrive.gate,\n\t\t\t\t\t\tcontext,\n\t\t\t\t\t);\n\t\t\t\t\treturn {\n\t\t\t\t\t\tmessages: result?.messages ?? requestContext.messages,\n\t\t\t\t\t\tsystemPrompt: result?.systemPrompt ?? requestContext.systemPrompt,\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t\ttoProviderMessages: prepared.toProviderMessages,\n\t\t\t\tbeforePayload: async (payload, requestModel, context) => {\n\t\t\t\t\tconst result = await lane.hooks.runWithGate(\n\t\t\t\t\t\t\"before_payload\",\n\t\t\t\t\t\t{ lane: lane.name, runId: drive.operationId, model: requestModel, payload },\n\t\t\t\t\t\tdrive.gate,\n\t\t\t\t\t\tcontext,\n\t\t\t\t\t);\n\t\t\t\t\treturn result?.payload;\n\t\t\t\t},\n\t\t\t\tafterResponse: response.afterResponse,\n\t\t\t\trequest: (aiContext, options, context) => {\n\t\t\t\t\tconst admitted = withAbortSignal(drive.gate.signal, context);\n\t\t\t\t\treturn drive.gate.admit(() =>\n\t\t\t\t\t\tlane.models.streamSimple(prepared.model, aiContext, {\n\t\t\t\t\t\t\t...options,\n\t\t\t\t\t\t\tsessionId: `${lane.session.metadata.id}:${lane.name}`,\n\t\t\t\t\t\t\tsignal: admitted.abortSignal,\n\t\t\t\t\t\t\ttelemetryContext: getTelemetryContext(admitted),\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tobserver: response.observer,\n\t\t\t},\n\t\t\tdrive.context,\n\t\t);\n\t} finally {\n\t\tawait response.close();\n\t}\n}\n\n/** Advance one durable assistant retry wait according to this pass's local wait policy. */\nexport async function runRetryWait<TContext extends object | undefined>(\n\tlane: Lane<TContext>,\n\tdrive: Drive,\n\tgeneration: AssistantRetryWaitOperation,\n): Promise<ProcedureResult> {\n\tif (Date.now() < generation.notBefore) {\n\t\tif (!drive.waitForRetry) {\n\t\t\treturn {\n\t\t\t\tkind: \"waiting\",\n\t\t\t\toutcome: {\n\t\t\t\t\tkind: \"waiting\",\n\t\t\t\t\toperationId: drive.operationId,\n\t\t\t\t\treason: \"retry\",\n\t\t\t\t\tnotBefore: generation.notBefore,\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t\tawait drive.gate.admit(() => waitUntil(generation.notBefore, drive.gate.signal));\n\t}\n\n\tconst result = await lane.continueOperation(\n\t\tgeneration,\n\t\t(_state, current) => {\n\t\t\tconst nextState: AssistantReadyOperation = {\n\t\t\t\t...operationScopeOf(current),\n\t\t\t\tat: \"assistant.ready\",\n\t\t\t\tgenerationContext: generation.generationContext,\n\t\t\t\tnextAttempt: generation.nextAttempt,\n\t\t\t};\n\t\t\treturn {\n\t\t\t\tkind: \"commit\",\n\t\t\t\twrites: [],\n\t\t\t\toperationState: nextState,\n\t\t\t\tmaterialize: () => ({ kind: \"continue\" }) as const,\n\t\t\t\tevents: () => [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"retry_start\",\n\t\t\t\t\t\tlane: lane.name,\n\t\t\t\t\t\trunId: drive.operationId,\n\t\t\t\t\t\tstep: generation.generationContext.stepId,\n\t\t\t\t\t\tattempt: generation.nextAttempt,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t};\n\t\t},\n\t\tdrive.context,\n\t);\n\treturn result.kind === \"cancel_requested\" ? { kind: \"continue\" } : result.value;\n}\n\n/** Execute one ready assistant generation or advance its durable retry wait. */\nexport async function runGeneration<TContext extends object | undefined>(\n\tlane: Lane<TContext>,\n\tdrive: Drive,\n\tgeneration: AssistantReadyOperation | AssistantRetryWaitOperation,\n): Promise<ProcedureResult> {\n\tif (generation.at === \"assistant.retry_wait\") return runRetryWait(lane, drive, generation);\n\n\tconst prepared = await prepareGeneration(lane, drive, generation);\n\tif (prepared.kind === \"configuration_failure\") {\n\t\treturn publishConfigurationFailure(lane, drive, generation, prepared.error);\n\t}\n\tif (prepared.kind === \"cancel_requested\") return { kind: \"continue\" };\n\n\tconst intent = await publishGenerationIntent(lane, drive, generation, prepared);\n\tif (intent.kind === \"cancel_requested\") return { kind: \"continue\" };\n\tconst response = await performGeneration(lane, drive, intent.value, prepared);\n\treturn publishResponse(lane, drive, intent.value, response);\n}\n"]}
@@ -1,5 +0,0 @@
1
- import type { Lane } from "../lane.ts";
2
- import type { Drive, ProcedureResult } from "../types.ts";
3
- /** Advance one cancelled durable leaf without starting new ordinary work. */
4
- export declare function reconcileOperation<TContext extends object | undefined>(lane: Lane<TContext>, drive: Drive): Promise<ProcedureResult>;
5
- //# sourceMappingURL=reconcile.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"reconcile.d.ts","sourceRoot":"","sources":["../../../../src/harness/runtime/drive/reconcile.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAwH1D,6EAA6E;AAC7E,wBAAsB,kBAAkB,CAAC,QAAQ,SAAS,MAAM,GAAG,SAAS,EAC3E,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,EACpB,KAAK,EAAE,KAAK,GACV,OAAO,CAAC,eAAe,CAAC,CAsC1B"}
@@ -1,140 +0,0 @@
1
- import { getTelemetryContext } from "../../context.js";
2
- import { SessionInvariantError } from "../../session/session.js";
3
- import { readDeferredSourceHandle } from "./deferred.js";
4
- import { recoverCancelledAssistantEffect } from "./recovery.js";
5
- import { operationCleanupWrites, operationResultRecord } from "./terminal.js";
6
- import { runTools } from "./tools.js";
7
- async function cancelDeferredBestEffort(lane, drive, deferred, handle) {
8
- const identity = deferred.configuration.model;
9
- const model = lane.models.getModel(identity.provider, identity.modelId);
10
- if (model === undefined)
11
- return;
12
- try {
13
- await lane.models.cancelDeferred(model, handle, {
14
- signal: drive.closeSignal,
15
- telemetryContext: getTelemetryContext(drive.context),
16
- timeoutMs: deferred.streamOptions.timeoutMs,
17
- maxRetries: deferred.streamOptions.maxRetries,
18
- maxRetryDelayMs: deferred.streamOptions.maxRetryDelayMs,
19
- headers: deferred.streamOptions.headers,
20
- });
21
- }
22
- catch {
23
- // Remote cancellation is best-effort; durable local reconciliation must continue.
24
- }
25
- }
26
- async function readDeferredHandle(lane, drive, deferred) {
27
- return lane.settleOperation(deferred, async (_state, _current, _meta, reader) => ({
28
- kind: "return",
29
- result: await readDeferredSourceHandle(reader, deferred, drive.context),
30
- }), drive.context);
31
- }
32
- async function publishAbortedTerminal(lane, drive, capability) {
33
- return lane.settleOperation(capability, async (state, current, meta, reader) => {
34
- if (current.control.status !== "cancel_requested") {
35
- throw new SessionInvariantError("Cancellation reconciliation requires cancelled durable control");
36
- }
37
- const record = operationResultRecord(meta, "aborted", state.tipId);
38
- const cleanup = await operationCleanupWrites(reader, drive.operationId, current, drive.context);
39
- const events = [];
40
- if (meta.intent.kind === "run") {
41
- switch (current.at) {
42
- case "summary.deciding":
43
- case "summary.ready":
44
- case "summary.effect_pending":
45
- case "summary.retry_wait":
46
- if (current.task.boundary.kind !== "resume_checkpoint" || current.task.reason === undefined) {
47
- throw new SessionInvariantError("Cancelled run summary has an invalid result boundary");
48
- }
49
- events.push({
50
- type: "compaction_end",
51
- lane: lane.name,
52
- runId: drive.operationId,
53
- reason: current.task.reason,
54
- status: "aborted",
55
- endedAt: record.endedAt,
56
- });
57
- break;
58
- default:
59
- break;
60
- }
61
- events.push({
62
- type: "run_end",
63
- lane: lane.name,
64
- runId: drive.operationId,
65
- status: "aborted",
66
- fromTipId: meta.sourceTipId,
67
- tipId: state.tipId,
68
- endedAt: record.endedAt,
69
- });
70
- }
71
- else if (meta.intent.kind === "compaction") {
72
- events.push({
73
- type: "compaction_end",
74
- lane: lane.name,
75
- runId: drive.operationId,
76
- reason: "manual",
77
- status: "aborted",
78
- endedAt: record.endedAt,
79
- });
80
- }
81
- else {
82
- events.push({
83
- type: "navigation_end",
84
- lane: lane.name,
85
- runId: drive.operationId,
86
- status: "aborted",
87
- fromTipId: meta.sourceTipId,
88
- tipId: state.tipId,
89
- endedAt: record.endedAt,
90
- });
91
- }
92
- return {
93
- kind: "finish",
94
- writes: cleanup,
95
- record,
96
- materialize: () => ({ kind: "settled", outcome: record }),
97
- events: () => events,
98
- };
99
- }, drive.context);
100
- }
101
- /** Advance one cancelled durable leaf without starting new ordinary work. */
102
- export async function reconcileOperation(lane, drive) {
103
- const operation = lane.state.operation;
104
- if (operation === null || operation.meta.operationId !== drive.operationId) {
105
- throw new SessionInvariantError(`Drive ${drive.operationId} has no matching operation to reconcile`);
106
- }
107
- if (operation.state.control.status !== "cancel_requested") {
108
- throw new SessionInvariantError(`Operation ${drive.operationId} is not cancelled`);
109
- }
110
- drive.beginAbort(Promise.resolve());
111
- drive.signalAbort();
112
- const state = operation.state;
113
- switch (state.at) {
114
- case "assistant.effect_pending":
115
- return recoverCancelledAssistantEffect(lane, drive, state);
116
- case "tools":
117
- return runTools(lane, drive, state);
118
- case "deferred.suspended": {
119
- const handle = await readDeferredHandle(lane, drive, state);
120
- await cancelDeferredBestEffort(lane, drive, state, handle);
121
- return publishAbortedTerminal(lane, drive, state);
122
- }
123
- case "deferred.effect_pending": {
124
- const handle = await readDeferredHandle(lane, drive, state);
125
- await cancelDeferredBestEffort(lane, drive, state, handle);
126
- return recoverCancelledAssistantEffect(lane, drive, state);
127
- }
128
- case "starting":
129
- case "checkpoint":
130
- case "assistant.ready":
131
- case "assistant.retry_wait":
132
- case "summary.deciding":
133
- case "summary.ready":
134
- case "summary.effect_pending":
135
- case "summary.retry_wait":
136
- case "navigation.ready_to_commit":
137
- return publishAbortedTerminal(lane, drive, state);
138
- }
139
- }
140
- //# sourceMappingURL=reconcile.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"reconcile.js","sourceRoot":"","sources":["../../../../src/harness/runtime/drive/reconcile.ts"],"names":[],"mappings":"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","sourcesContent":["import type { DeferredHandle } from \"@draht/ai\";\nimport type { HarnessEvent } from \"../../agent-harness.ts\";\nimport { getTelemetryContext } from \"../../context.ts\";\nimport { SessionInvariantError } from \"../../session/session.ts\";\nimport type {\n\tDeferredEffectPendingOperation,\n\tDeferredSuspendedOperation,\n\tOperationState,\n} from \"../../session/types.ts\";\nimport type { Lane } from \"../lane.ts\";\nimport type { Drive, ProcedureResult } from \"../types.ts\";\nimport { readDeferredSourceHandle } from \"./deferred.ts\";\nimport { recoverCancelledAssistantEffect } from \"./recovery.ts\";\nimport { operationCleanupWrites, operationResultRecord } from \"./terminal.ts\";\nimport { runTools } from \"./tools.ts\";\n\nasync function cancelDeferredBestEffort<TContext extends object | undefined>(\n\tlane: Lane<TContext>,\n\tdrive: Drive,\n\tdeferred: DeferredSuspendedOperation | DeferredEffectPendingOperation,\n\thandle: DeferredHandle,\n): Promise<void> {\n\tconst identity = deferred.configuration.model;\n\tconst model = lane.models.getModel(identity.provider, identity.modelId);\n\tif (model === undefined) return;\n\ttry {\n\t\tawait lane.models.cancelDeferred(model, handle, {\n\t\t\tsignal: drive.closeSignal,\n\t\t\ttelemetryContext: getTelemetryContext(drive.context),\n\t\t\ttimeoutMs: deferred.streamOptions.timeoutMs,\n\t\t\tmaxRetries: deferred.streamOptions.maxRetries,\n\t\t\tmaxRetryDelayMs: deferred.streamOptions.maxRetryDelayMs,\n\t\t\theaders: deferred.streamOptions.headers,\n\t\t});\n\t} catch {\n\t\t// Remote cancellation is best-effort; durable local reconciliation must continue.\n\t}\n}\n\nasync function readDeferredHandle<TContext extends object | undefined>(\n\tlane: Lane<TContext>,\n\tdrive: Drive,\n\tdeferred: DeferredSuspendedOperation | DeferredEffectPendingOperation,\n): Promise<DeferredHandle> {\n\treturn lane.settleOperation(\n\t\tdeferred,\n\t\tasync (_state, _current, _meta, reader) => ({\n\t\t\tkind: \"return\",\n\t\t\tresult: await readDeferredSourceHandle(reader, deferred, drive.context),\n\t\t}),\n\t\tdrive.context,\n\t);\n}\n\nasync function publishAbortedTerminal<TContext extends object | undefined>(\n\tlane: Lane<TContext>,\n\tdrive: Drive,\n\tcapability: OperationState,\n): Promise<ProcedureResult> {\n\treturn lane.settleOperation(\n\t\tcapability,\n\t\tasync (state, current, meta, reader) => {\n\t\t\tif (current.control.status !== \"cancel_requested\") {\n\t\t\t\tthrow new SessionInvariantError(\"Cancellation reconciliation requires cancelled durable control\");\n\t\t\t}\n\t\t\tconst record = operationResultRecord(meta, \"aborted\", state.tipId);\n\t\t\tconst cleanup = await operationCleanupWrites(reader, drive.operationId, current, drive.context);\n\t\t\tconst events: HarnessEvent[] = [];\n\t\t\tif (meta.intent.kind === \"run\") {\n\t\t\t\tswitch (current.at) {\n\t\t\t\t\tcase \"summary.deciding\":\n\t\t\t\t\tcase \"summary.ready\":\n\t\t\t\t\tcase \"summary.effect_pending\":\n\t\t\t\t\tcase \"summary.retry_wait\":\n\t\t\t\t\t\tif (current.task.boundary.kind !== \"resume_checkpoint\" || current.task.reason === undefined) {\n\t\t\t\t\t\t\tthrow new SessionInvariantError(\"Cancelled run summary has an invalid result boundary\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\tevents.push({\n\t\t\t\t\t\t\ttype: \"compaction_end\",\n\t\t\t\t\t\t\tlane: lane.name,\n\t\t\t\t\t\t\trunId: drive.operationId,\n\t\t\t\t\t\t\treason: current.task.reason,\n\t\t\t\t\t\t\tstatus: \"aborted\",\n\t\t\t\t\t\t\tendedAt: record.endedAt,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tevents.push({\n\t\t\t\t\ttype: \"run_end\",\n\t\t\t\t\tlane: lane.name,\n\t\t\t\t\trunId: drive.operationId,\n\t\t\t\t\tstatus: \"aborted\",\n\t\t\t\t\tfromTipId: meta.sourceTipId,\n\t\t\t\t\ttipId: state.tipId,\n\t\t\t\t\tendedAt: record.endedAt,\n\t\t\t\t});\n\t\t\t} else if (meta.intent.kind === \"compaction\") {\n\t\t\t\tevents.push({\n\t\t\t\t\ttype: \"compaction_end\",\n\t\t\t\t\tlane: lane.name,\n\t\t\t\t\trunId: drive.operationId,\n\t\t\t\t\treason: \"manual\",\n\t\t\t\t\tstatus: \"aborted\",\n\t\t\t\t\tendedAt: record.endedAt,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tevents.push({\n\t\t\t\t\ttype: \"navigation_end\",\n\t\t\t\t\tlane: lane.name,\n\t\t\t\t\trunId: drive.operationId,\n\t\t\t\t\tstatus: \"aborted\",\n\t\t\t\t\tfromTipId: meta.sourceTipId,\n\t\t\t\t\ttipId: state.tipId,\n\t\t\t\t\tendedAt: record.endedAt,\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tkind: \"finish\",\n\t\t\t\twrites: cleanup,\n\t\t\t\trecord,\n\t\t\t\tmaterialize: () => ({ kind: \"settled\", outcome: record }) as const,\n\t\t\t\tevents: () => events,\n\t\t\t};\n\t\t},\n\t\tdrive.context,\n\t);\n}\n\n/** Advance one cancelled durable leaf without starting new ordinary work. */\nexport async function reconcileOperation<TContext extends object | undefined>(\n\tlane: Lane<TContext>,\n\tdrive: Drive,\n): Promise<ProcedureResult> {\n\tconst operation = lane.state.operation;\n\tif (operation === null || operation.meta.operationId !== drive.operationId) {\n\t\tthrow new SessionInvariantError(`Drive ${drive.operationId} has no matching operation to reconcile`);\n\t}\n\tif (operation.state.control.status !== \"cancel_requested\") {\n\t\tthrow new SessionInvariantError(`Operation ${drive.operationId} is not cancelled`);\n\t}\n\tdrive.beginAbort(Promise.resolve());\n\tdrive.signalAbort();\n\n\tconst state = operation.state;\n\tswitch (state.at) {\n\t\tcase \"assistant.effect_pending\":\n\t\t\treturn recoverCancelledAssistantEffect(lane, drive, state);\n\t\tcase \"tools\":\n\t\t\treturn runTools(lane, drive, state);\n\t\tcase \"deferred.suspended\": {\n\t\t\tconst handle = await readDeferredHandle(lane, drive, state);\n\t\t\tawait cancelDeferredBestEffort(lane, drive, state, handle);\n\t\t\treturn publishAbortedTerminal(lane, drive, state);\n\t\t}\n\t\tcase \"deferred.effect_pending\": {\n\t\t\tconst handle = await readDeferredHandle(lane, drive, state);\n\t\t\tawait cancelDeferredBestEffort(lane, drive, state, handle);\n\t\t\treturn recoverCancelledAssistantEffect(lane, drive, state);\n\t\t}\n\t\tcase \"starting\":\n\t\tcase \"checkpoint\":\n\t\tcase \"assistant.ready\":\n\t\tcase \"assistant.retry_wait\":\n\t\tcase \"summary.deciding\":\n\t\tcase \"summary.ready\":\n\t\tcase \"summary.effect_pending\":\n\t\tcase \"summary.retry_wait\":\n\t\tcase \"navigation.ready_to_commit\":\n\t\t\treturn publishAbortedTerminal(lane, drive, state);\n\t}\n}\n"]}
@@ -1,8 +0,0 @@
1
- import type { AssistantEffectPendingOperation, DeferredEffectPendingOperation } from "../../session/types.ts";
2
- import type { Lane } from "../lane.ts";
3
- import type { Drive, ProcedureResult } from "../types.ts";
4
- /** Settle an orphaned assistant request from its bounded committed frame prefix without another provider call. */
5
- export declare function recoverAssistantGeneration<TContext extends object | undefined>(lane: Lane<TContext>, drive: Drive, generation: AssistantEffectPendingOperation): Promise<ProcedureResult>;
6
- /** Synthetically settle one cancelled orphaned assistant or deferred effect under its reserved ids. */
7
- export declare function recoverCancelledAssistantEffect<TContext extends object | undefined>(lane: Lane<TContext>, drive: Drive, effect: AssistantEffectPendingOperation | DeferredEffectPendingOperation): Promise<ProcedureResult>;
8
- //# sourceMappingURL=recovery.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"recovery.d.ts","sourceRoot":"","sources":["../../../../src/harness/runtime/drive/recovery.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACX,+BAA+B,EAC/B,8BAA8B,EAG9B,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAiC1D,kHAAkH;AAClH,wBAAsB,0BAA0B,CAAC,QAAQ,SAAS,MAAM,GAAG,SAAS,EACnF,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,EACpB,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,+BAA+B,GACzC,OAAO,CAAC,eAAe,CAAC,CAoC1B;AAED,uGAAuG;AACvG,wBAAsB,+BAA+B,CAAC,QAAQ,SAAS,MAAM,GAAG,SAAS,EACxF,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,EACpB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,+BAA+B,GAAG,8BAA8B,GACtE,OAAO,CAAC,eAAe,CAAC,CAmC1B"}
@@ -1,85 +0,0 @@
1
- import { reduceAssistantMessageFrames } from "@draht/ai";
2
- import { readAssistantFrames } from "../progress.js";
3
- import { publishResponse } from "./response.js";
4
- const ZERO_USAGE = {
5
- input: 0,
6
- output: 0,
7
- cacheRead: 0,
8
- cacheWrite: 0,
9
- totalTokens: 0,
10
- cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },
11
- };
12
- function interruptedAssistantMessage(identity, partial) {
13
- const warning = "Assistant request was interrupted. The preceding content is the latest committed partial; newer live output may be missing and the external outcome is unknown.";
14
- return partial === undefined
15
- ? {
16
- role: "assistant",
17
- content: [],
18
- api: "unknown",
19
- provider: identity.provider,
20
- model: identity.modelId,
21
- usage: ZERO_USAGE,
22
- stopReason: "error",
23
- errorMessage: warning,
24
- timestamp: Date.now(),
25
- }
26
- : { ...partial, usage: ZERO_USAGE, stopReason: "error", errorMessage: warning };
27
- }
28
- /** Settle an orphaned assistant request from its bounded committed frame prefix without another provider call. */
29
- export async function recoverAssistantGeneration(lane, drive, generation) {
30
- const frames = await lane.continueOperation(generation, async (_state, _current, _meta, reader) => ({
31
- kind: "return",
32
- result: await readAssistantFrames(reader, drive.operationId, generation.responseEntryId, drive.context),
33
- }), drive.context);
34
- if (frames.kind === "cancel_requested")
35
- return { kind: "continue" };
36
- const message = interruptedAssistantMessage(generation.generationContext.configuration.model, reduceAssistantMessageFrames(frames.value));
37
- await lane.emitBatch([
38
- {
39
- type: "message_start",
40
- lane: lane.name,
41
- runId: drive.operationId,
42
- message,
43
- recovery: true,
44
- },
45
- {
46
- type: "message_end",
47
- lane: lane.name,
48
- runId: drive.operationId,
49
- message,
50
- entryId: generation.responseEntryId,
51
- recovery: true,
52
- },
53
- ], drive.context);
54
- return publishResponse(lane, drive, generation, message, { recovery: true });
55
- }
56
- /** Synthetically settle one cancelled orphaned assistant or deferred effect under its reserved ids. */
57
- export async function recoverCancelledAssistantEffect(lane, drive, effect) {
58
- const frames = await lane.settleOperation(effect, async (_state, _current, _meta, reader) => ({
59
- kind: "return",
60
- result: await readAssistantFrames(reader, drive.operationId, effect.responseEntryId, drive.context),
61
- }), drive.context);
62
- const identity = effect.at === "assistant.effect_pending"
63
- ? effect.generationContext.configuration.model
64
- : effect.configuration.model;
65
- const message = interruptedAssistantMessage(identity, reduceAssistantMessageFrames(frames));
66
- await lane.emitBatch([
67
- {
68
- type: "message_start",
69
- lane: lane.name,
70
- runId: drive.operationId,
71
- message,
72
- recovery: true,
73
- },
74
- {
75
- type: "message_end",
76
- lane: lane.name,
77
- runId: drive.operationId,
78
- message,
79
- entryId: effect.responseEntryId,
80
- recovery: true,
81
- },
82
- ], drive.context);
83
- return publishResponse(lane, drive, effect, message, { recovery: true });
84
- }
85
- //# sourceMappingURL=recovery.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"recovery.js","sourceRoot":"","sources":["../../../../src/harness/runtime/drive/recovery.ts"],"names":[],"mappings":"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","sourcesContent":["import { type AssistantMessage, reduceAssistantMessageFrames } from \"@draht/ai\";\nimport type {\n\tAssistantEffectPendingOperation,\n\tDeferredEffectPendingOperation,\n\tLaneConfiguration,\n\tSettledAssistantMessage,\n} from \"../../session/types.ts\";\nimport type { Lane } from \"../lane.ts\";\nimport { readAssistantFrames } from \"../progress.ts\";\nimport type { Drive, ProcedureResult } from \"../types.ts\";\nimport { publishResponse } from \"./response.ts\";\n\nconst ZERO_USAGE = {\n\tinput: 0,\n\toutput: 0,\n\tcacheRead: 0,\n\tcacheWrite: 0,\n\ttotalTokens: 0,\n\tcost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },\n};\n\nfunction interruptedAssistantMessage(\n\tidentity: LaneConfiguration[\"model\"],\n\tpartial: AssistantMessage | undefined,\n): SettledAssistantMessage {\n\tconst warning =\n\t\t\"Assistant request was interrupted. The preceding content is the latest committed partial; newer live output may be missing and the external outcome is unknown.\";\n\treturn partial === undefined\n\t\t? {\n\t\t\t\trole: \"assistant\",\n\t\t\t\tcontent: [],\n\t\t\t\tapi: \"unknown\",\n\t\t\t\tprovider: identity.provider,\n\t\t\t\tmodel: identity.modelId,\n\t\t\t\tusage: ZERO_USAGE,\n\t\t\t\tstopReason: \"error\",\n\t\t\t\terrorMessage: warning,\n\t\t\t\ttimestamp: Date.now(),\n\t\t\t}\n\t\t: { ...partial, usage: ZERO_USAGE, stopReason: \"error\", errorMessage: warning };\n}\n\n/** Settle an orphaned assistant request from its bounded committed frame prefix without another provider call. */\nexport async function recoverAssistantGeneration<TContext extends object | undefined>(\n\tlane: Lane<TContext>,\n\tdrive: Drive,\n\tgeneration: AssistantEffectPendingOperation,\n): Promise<ProcedureResult> {\n\tconst frames = await lane.continueOperation(\n\t\tgeneration,\n\t\tasync (_state, _current, _meta, reader) => ({\n\t\t\tkind: \"return\",\n\t\t\tresult: await readAssistantFrames(reader, drive.operationId, generation.responseEntryId, drive.context),\n\t\t}),\n\t\tdrive.context,\n\t);\n\tif (frames.kind === \"cancel_requested\") return { kind: \"continue\" };\n\n\tconst message = interruptedAssistantMessage(\n\t\tgeneration.generationContext.configuration.model,\n\t\treduceAssistantMessageFrames(frames.value),\n\t);\n\tawait lane.emitBatch(\n\t\t[\n\t\t\t{\n\t\t\t\ttype: \"message_start\",\n\t\t\t\tlane: lane.name,\n\t\t\t\trunId: drive.operationId,\n\t\t\t\tmessage,\n\t\t\t\trecovery: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: \"message_end\",\n\t\t\t\tlane: lane.name,\n\t\t\t\trunId: drive.operationId,\n\t\t\t\tmessage,\n\t\t\t\tentryId: generation.responseEntryId,\n\t\t\t\trecovery: true,\n\t\t\t},\n\t\t],\n\t\tdrive.context,\n\t);\n\treturn publishResponse(lane, drive, generation, message, { recovery: true });\n}\n\n/** Synthetically settle one cancelled orphaned assistant or deferred effect under its reserved ids. */\nexport async function recoverCancelledAssistantEffect<TContext extends object | undefined>(\n\tlane: Lane<TContext>,\n\tdrive: Drive,\n\teffect: AssistantEffectPendingOperation | DeferredEffectPendingOperation,\n): Promise<ProcedureResult> {\n\tconst frames = await lane.settleOperation(\n\t\teffect,\n\t\tasync (_state, _current, _meta, reader) => ({\n\t\t\tkind: \"return\",\n\t\t\tresult: await readAssistantFrames(reader, drive.operationId, effect.responseEntryId, drive.context),\n\t\t}),\n\t\tdrive.context,\n\t);\n\tconst identity =\n\t\teffect.at === \"assistant.effect_pending\"\n\t\t\t? effect.generationContext.configuration.model\n\t\t\t: effect.configuration.model;\n\tconst message = interruptedAssistantMessage(identity, reduceAssistantMessageFrames(frames));\n\tawait lane.emitBatch(\n\t\t[\n\t\t\t{\n\t\t\t\ttype: \"message_start\",\n\t\t\t\tlane: lane.name,\n\t\t\t\trunId: drive.operationId,\n\t\t\t\tmessage,\n\t\t\t\trecovery: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: \"message_end\",\n\t\t\t\tlane: lane.name,\n\t\t\t\trunId: drive.operationId,\n\t\t\t\tmessage,\n\t\t\t\tentryId: effect.responseEntryId,\n\t\t\t\trecovery: true,\n\t\t\t},\n\t\t],\n\t\tdrive.context,\n\t);\n\treturn publishResponse(lane, drive, effect, message, { recovery: true });\n}\n"]}
@@ -1,23 +0,0 @@
1
- import type { Context } from "../../context.ts";
2
- import type { AssistantResponseMetadata, AssistantStreamObserver } from "../../execution/assistant.ts";
3
- import { type AssistantEffectPendingOperation, type DeferredEffectPendingOperation, type OperationError, type OperationState, type SettledAssistantMessage } from "../../session/types.ts";
4
- import type { Lane } from "../lane.ts";
5
- import type { Drive, ProcedureResult } from "../types.ts";
6
- export type AssistantResponseLifecycle = {
7
- observer: AssistantStreamObserver;
8
- afterResponse(message: SettledAssistantMessage, metadata: AssistantResponseMetadata, context: Context): Promise<SettledAssistantMessage>;
9
- close(): Promise<void>;
10
- };
11
- export declare function openAssistantResponse<TContext extends object | undefined>(lane: Lane<TContext>, drive: Drive, responseEntryId: string, recovery?: boolean): AssistantResponseLifecycle;
12
- type ResponseIntent = AssistantEffectPendingOperation | DeferredEffectPendingOperation;
13
- type ConfigurationFailureState = Extract<OperationState, {
14
- at: "assistant.ready" | "assistant.retry_wait" | "deferred.suspended" | "deferred.effect_pending";
15
- }>;
16
- /** Publish a non-retryable request-configuration failure before reserving response ids. */
17
- export declare function publishConfigurationFailure<TContext extends object | undefined, TState extends ConfigurationFailureState>(lane: Lane<TContext>, drive: Drive, capability: TState, error: OperationError): Promise<ProcedureResult>;
18
- /** Classify and atomically settle one assistant-generation or deferred-poll response. */
19
- export declare function publishResponse<TContext extends object | undefined>(lane: Lane<TContext>, drive: Drive, intent: ResponseIntent, response: SettledAssistantMessage, options?: {
20
- recovery?: true;
21
- }): Promise<ProcedureResult>;
22
- export {};
23
- //# sourceMappingURL=response.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../../../src/harness/runtime/drive/response.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAGvG,OAAO,EACN,KAAK,+BAA+B,EAEpC,KAAK,8BAA8B,EAGnC,KAAK,cAAc,EACnB,KAAK,cAAc,EAEnB,KAAK,uBAAuB,EAI5B,MAAM,wBAAwB,CAAC;AAEhC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAK1D,MAAM,MAAM,0BAA0B,GAAG;IACxC,QAAQ,EAAE,uBAAuB,CAAC;IAClC,aAAa,CACZ,OAAO,EAAE,uBAAuB,EAChC,QAAQ,EAAE,yBAAyB,EACnC,OAAO,EAAE,OAAO,GACd,OAAO,CAAC,uBAAuB,CAAC,CAAC;IACpC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB,CAAC;AAEF,wBAAgB,qBAAqB,CAAC,QAAQ,SAAS,MAAM,GAAG,SAAS,EACxE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,EACpB,KAAK,EAAE,KAAK,EACZ,eAAe,EAAE,MAAM,EACvB,QAAQ,UAAQ,GACd,0BAA0B,CA8C5B;AAED,KAAK,cAAc,GAAG,+BAA+B,GAAG,8BAA8B,CAAC;AACvF,KAAK,yBAAyB,GAAG,OAAO,CACvC,cAAc,EACd;IAAE,EAAE,EAAE,iBAAiB,GAAG,sBAAsB,GAAG,oBAAoB,GAAG,yBAAyB,CAAA;CAAE,CACrG,CAAC;AAEF,2FAA2F;AAC3F,wBAAsB,2BAA2B,CAChD,QAAQ,SAAS,MAAM,GAAG,SAAS,EACnC,MAAM,SAAS,yBAAyB,EACvC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,CA6BzG;AA2CD,yFAAyF;AACzF,wBAAsB,eAAe,CAAC,QAAQ,SAAS,MAAM,GAAG,SAAS,EACxE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,EACpB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,uBAAuB,EACjC,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,IAAI,CAAA;CAAO,GAC/B,OAAO,CAAC,eAAe,CAAC,CAyS1B"}