@m4ike1/ion-agent-core 0.1.0

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 (370) hide show
  1. package/README.md +622 -0
  2. package/dist/agent-loop.d.ts +24 -0
  3. package/dist/agent-loop.d.ts.map +1 -0
  4. package/dist/agent-loop.js +560 -0
  5. package/dist/agent-loop.js.map +1 -0
  6. package/dist/agent.d.ts +122 -0
  7. package/dist/agent.d.ts.map +1 -0
  8. package/dist/agent.js +422 -0
  9. package/dist/agent.js.map +1 -0
  10. package/dist/harness/agent-harness.d.ts +716 -0
  11. package/dist/harness/agent-harness.d.ts.map +1 -0
  12. package/dist/harness/agent-harness.js +6 -0
  13. package/dist/harness/agent-harness.js.map +1 -0
  14. package/dist/harness/compaction/branch-summarization.d.ts +68 -0
  15. package/dist/harness/compaction/branch-summarization.d.ts.map +1 -0
  16. package/dist/harness/compaction/branch-summarization.js +176 -0
  17. package/dist/harness/compaction/branch-summarization.js.map +1 -0
  18. package/dist/harness/compaction/compaction.d.ts +126 -0
  19. package/dist/harness/compaction/compaction.d.ts.map +1 -0
  20. package/dist/harness/compaction/compaction.js +560 -0
  21. package/dist/harness/compaction/compaction.js.map +1 -0
  22. package/dist/harness/compaction/utils.d.ts +25 -0
  23. package/dist/harness/compaction/utils.d.ts.map +1 -0
  24. package/dist/harness/compaction/utils.js +120 -0
  25. package/dist/harness/compaction/utils.js.map +1 -0
  26. package/dist/harness/config.d.ts +9 -0
  27. package/dist/harness/config.d.ts.map +1 -0
  28. package/dist/harness/config.js +35 -0
  29. package/dist/harness/config.js.map +1 -0
  30. package/dist/harness/context.d.ts +9 -0
  31. package/dist/harness/context.d.ts.map +1 -0
  32. package/dist/harness/context.js +13 -0
  33. package/dist/harness/context.js.map +1 -0
  34. package/dist/harness/env/nodejs.d.ts +43 -0
  35. package/dist/harness/env/nodejs.d.ts.map +1 -0
  36. package/dist/harness/env/nodejs.js +865 -0
  37. package/dist/harness/env/nodejs.js.map +1 -0
  38. package/dist/harness/events.d.ts +25 -0
  39. package/dist/harness/events.d.ts.map +1 -0
  40. package/dist/harness/events.js +250 -0
  41. package/dist/harness/events.js.map +1 -0
  42. package/dist/harness/execution/assistant.d.ts +42 -0
  43. package/dist/harness/execution/assistant.d.ts.map +1 -0
  44. package/dist/harness/execution/assistant.js +82 -0
  45. package/dist/harness/execution/assistant.js.map +1 -0
  46. package/dist/harness/execution/effect-gate.d.ts +22 -0
  47. package/dist/harness/execution/effect-gate.d.ts.map +1 -0
  48. package/dist/harness/execution/effect-gate.js +49 -0
  49. package/dist/harness/execution/effect-gate.js.map +1 -0
  50. package/dist/harness/execution/tools.d.ts +67 -0
  51. package/dist/harness/execution/tools.d.ts.map +1 -0
  52. package/dist/harness/execution/tools.js +121 -0
  53. package/dist/harness/execution/tools.js.map +1 -0
  54. package/dist/harness/hooks.d.ts +38 -0
  55. package/dist/harness/hooks.d.ts.map +1 -0
  56. package/dist/harness/hooks.js +406 -0
  57. package/dist/harness/hooks.js.map +1 -0
  58. package/dist/harness/messages.d.ts +51 -0
  59. package/dist/harness/messages.d.ts.map +1 -0
  60. package/dist/harness/messages.js +102 -0
  61. package/dist/harness/messages.js.map +1 -0
  62. package/dist/harness/prompt-templates.d.ts +49 -0
  63. package/dist/harness/prompt-templates.d.ts.map +1 -0
  64. package/dist/harness/prompt-templates.js +225 -0
  65. package/dist/harness/prompt-templates.js.map +1 -0
  66. package/dist/harness/result.d.ts +133 -0
  67. package/dist/harness/result.d.ts.map +1 -0
  68. package/dist/harness/result.js +81 -0
  69. package/dist/harness/result.js.map +1 -0
  70. package/dist/harness/runtime/drive/boundary.d.ts +28 -0
  71. package/dist/harness/runtime/drive/boundary.d.ts.map +1 -0
  72. package/dist/harness/runtime/drive/boundary.js +173 -0
  73. package/dist/harness/runtime/drive/boundary.js.map +1 -0
  74. package/dist/harness/runtime/drive/checkpoint.d.ts +8 -0
  75. package/dist/harness/runtime/drive/checkpoint.d.ts.map +1 -0
  76. package/dist/harness/runtime/drive/checkpoint.js +133 -0
  77. package/dist/harness/runtime/drive/checkpoint.js.map +1 -0
  78. package/dist/harness/runtime/drive/deferred.d.ts +15 -0
  79. package/dist/harness/runtime/drive/deferred.d.ts.map +1 -0
  80. package/dist/harness/runtime/drive/deferred.js +179 -0
  81. package/dist/harness/runtime/drive/deferred.js.map +1 -0
  82. package/dist/harness/runtime/drive/generation.d.ts +8 -0
  83. package/dist/harness/runtime/drive/generation.d.ts.map +1 -0
  84. package/dist/harness/runtime/drive/generation.js +205 -0
  85. package/dist/harness/runtime/drive/generation.js.map +1 -0
  86. package/dist/harness/runtime/drive/reconcile.d.ts +5 -0
  87. package/dist/harness/runtime/drive/reconcile.d.ts.map +1 -0
  88. package/dist/harness/runtime/drive/reconcile.js +140 -0
  89. package/dist/harness/runtime/drive/reconcile.js.map +1 -0
  90. package/dist/harness/runtime/drive/recovery.d.ts +8 -0
  91. package/dist/harness/runtime/drive/recovery.d.ts.map +1 -0
  92. package/dist/harness/runtime/drive/recovery.js +85 -0
  93. package/dist/harness/runtime/drive/recovery.js.map +1 -0
  94. package/dist/harness/runtime/drive/response.d.ts +23 -0
  95. package/dist/harness/runtime/drive/response.d.ts.map +1 -0
  96. package/dist/harness/runtime/drive/response.js +394 -0
  97. package/dist/harness/runtime/drive/response.js.map +1 -0
  98. package/dist/harness/runtime/drive/retry.d.ts +4 -0
  99. package/dist/harness/runtime/drive/retry.d.ts.map +1 -0
  100. package/dist/harness/runtime/drive/retry.js +34 -0
  101. package/dist/harness/runtime/drive/retry.js.map +1 -0
  102. package/dist/harness/runtime/drive/structural.d.ts +32 -0
  103. package/dist/harness/runtime/drive/structural.d.ts.map +1 -0
  104. package/dist/harness/runtime/drive/structural.js +929 -0
  105. package/dist/harness/runtime/drive/structural.js.map +1 -0
  106. package/dist/harness/runtime/drive/terminal.d.ts +7 -0
  107. package/dist/harness/runtime/drive/terminal.d.ts.map +1 -0
  108. package/dist/harness/runtime/drive/terminal.js +49 -0
  109. package/dist/harness/runtime/drive/terminal.js.map +1 -0
  110. package/dist/harness/runtime/drive/tool-placement.d.ts +14 -0
  111. package/dist/harness/runtime/drive/tool-placement.d.ts.map +1 -0
  112. package/dist/harness/runtime/drive/tool-placement.js +244 -0
  113. package/dist/harness/runtime/drive/tool-placement.js.map +1 -0
  114. package/dist/harness/runtime/drive/tools.d.ts +6 -0
  115. package/dist/harness/runtime/drive/tools.d.ts.map +1 -0
  116. package/dist/harness/runtime/drive/tools.js +449 -0
  117. package/dist/harness/runtime/drive/tools.js.map +1 -0
  118. package/dist/harness/runtime/drive.d.ts +6 -0
  119. package/dist/harness/runtime/drive.d.ts.map +1 -0
  120. package/dist/harness/runtime/drive.js +93 -0
  121. package/dist/harness/runtime/drive.js.map +1 -0
  122. package/dist/harness/runtime/harness.d.ts +59 -0
  123. package/dist/harness/runtime/harness.d.ts.map +1 -0
  124. package/dist/harness/runtime/harness.js +311 -0
  125. package/dist/harness/runtime/harness.js.map +1 -0
  126. package/dist/harness/runtime/index.d.ts +2 -0
  127. package/dist/harness/runtime/index.d.ts.map +1 -0
  128. package/dist/harness/runtime/index.js +2 -0
  129. package/dist/harness/runtime/index.js.map +1 -0
  130. package/dist/harness/runtime/lane.d.ts +101 -0
  131. package/dist/harness/runtime/lane.d.ts.map +1 -0
  132. package/dist/harness/runtime/lane.js +1575 -0
  133. package/dist/harness/runtime/lane.js.map +1 -0
  134. package/dist/harness/runtime/progress.d.ts +15 -0
  135. package/dist/harness/runtime/progress.d.ts.map +1 -0
  136. package/dist/harness/runtime/progress.js +66 -0
  137. package/dist/harness/runtime/progress.js.map +1 -0
  138. package/dist/harness/runtime/reducer.d.ts +5 -0
  139. package/dist/harness/runtime/reducer.d.ts.map +1 -0
  140. package/dist/harness/runtime/reducer.js +240 -0
  141. package/dist/harness/runtime/reducer.js.map +1 -0
  142. package/dist/harness/runtime/restore.d.ts +24 -0
  143. package/dist/harness/runtime/restore.d.ts.map +1 -0
  144. package/dist/harness/runtime/restore.js +117 -0
  145. package/dist/harness/runtime/restore.js.map +1 -0
  146. package/dist/harness/runtime/transcript.d.ts +21 -0
  147. package/dist/harness/runtime/transcript.d.ts.map +1 -0
  148. package/dist/harness/runtime/transcript.js +72 -0
  149. package/dist/harness/runtime/transcript.js.map +1 -0
  150. package/dist/harness/runtime/types.d.ts +105 -0
  151. package/dist/harness/runtime/types.d.ts.map +1 -0
  152. package/dist/harness/runtime/types.js +61 -0
  153. package/dist/harness/runtime/types.js.map +1 -0
  154. package/dist/harness/session/commit.d.ts +53 -0
  155. package/dist/harness/session/commit.d.ts.map +1 -0
  156. package/dist/harness/session/commit.js +57 -0
  157. package/dist/harness/session/commit.js.map +1 -0
  158. package/dist/harness/session/context.d.ts +10 -0
  159. package/dist/harness/session/context.d.ts.map +1 -0
  160. package/dist/harness/session/context.js +49 -0
  161. package/dist/harness/session/context.js.map +1 -0
  162. package/dist/harness/session/fork-policy.d.ts +21 -0
  163. package/dist/harness/session/fork-policy.d.ts.map +1 -0
  164. package/dist/harness/session/fork-policy.js +55 -0
  165. package/dist/harness/session/fork-policy.js.map +1 -0
  166. package/dist/harness/session/fork.d.ts +16 -0
  167. package/dist/harness/session/fork.d.ts.map +1 -0
  168. package/dist/harness/session/fork.js +79 -0
  169. package/dist/harness/session/fork.js.map +1 -0
  170. package/dist/harness/session/in-memory-storage-state.d.ts +39 -0
  171. package/dist/harness/session/in-memory-storage-state.d.ts.map +1 -0
  172. package/dist/harness/session/in-memory-storage-state.js +276 -0
  173. package/dist/harness/session/in-memory-storage-state.js.map +1 -0
  174. package/dist/harness/session/index.d.ts +11 -0
  175. package/dist/harness/session/index.d.ts.map +1 -0
  176. package/dist/harness/session/index.js +9 -0
  177. package/dist/harness/session/index.js.map +1 -0
  178. package/dist/harness/session/jsonl/codec.d.ts +21 -0
  179. package/dist/harness/session/jsonl/codec.d.ts.map +1 -0
  180. package/dist/harness/session/jsonl/codec.js +45 -0
  181. package/dist/harness/session/jsonl/codec.js.map +1 -0
  182. package/dist/harness/session/jsonl/fork.d.ts +38 -0
  183. package/dist/harness/session/jsonl/fork.d.ts.map +1 -0
  184. package/dist/harness/session/jsonl/fork.js +264 -0
  185. package/dist/harness/session/jsonl/fork.js.map +1 -0
  186. package/dist/harness/session/jsonl/index.d.ts +4 -0
  187. package/dist/harness/session/jsonl/index.d.ts.map +1 -0
  188. package/dist/harness/session/jsonl/index.js +4 -0
  189. package/dist/harness/session/jsonl/index.js.map +1 -0
  190. package/dist/harness/session/jsonl/io.d.ts +14 -0
  191. package/dist/harness/session/jsonl/io.d.ts.map +1 -0
  192. package/dist/harness/session/jsonl/io.js +86 -0
  193. package/dist/harness/session/jsonl/io.js.map +1 -0
  194. package/dist/harness/session/jsonl/legacy-v3.d.ts +43 -0
  195. package/dist/harness/session/jsonl/legacy-v3.d.ts.map +1 -0
  196. package/dist/harness/session/jsonl/legacy-v3.js +462 -0
  197. package/dist/harness/session/jsonl/legacy-v3.js.map +1 -0
  198. package/dist/harness/session/jsonl/repo.d.ts +35 -0
  199. package/dist/harness/session/jsonl/repo.d.ts.map +1 -0
  200. package/dist/harness/session/jsonl/repo.js +301 -0
  201. package/dist/harness/session/jsonl/repo.js.map +1 -0
  202. package/dist/harness/session/jsonl/storage.d.ts +40 -0
  203. package/dist/harness/session/jsonl/storage.d.ts.map +1 -0
  204. package/dist/harness/session/jsonl/storage.js +200 -0
  205. package/dist/harness/session/jsonl/storage.js.map +1 -0
  206. package/dist/harness/session/jsonl/types.d.ts +39 -0
  207. package/dist/harness/session/jsonl/types.d.ts.map +1 -0
  208. package/dist/harness/session/jsonl/types.js +3 -0
  209. package/dist/harness/session/jsonl/types.js.map +1 -0
  210. package/dist/harness/session/memory.d.ts +48 -0
  211. package/dist/harness/session/memory.d.ts.map +1 -0
  212. package/dist/harness/session/memory.js +369 -0
  213. package/dist/harness/session/memory.js.map +1 -0
  214. package/dist/harness/session/mutation-line.d.ts +8 -0
  215. package/dist/harness/session/mutation-line.d.ts.map +1 -0
  216. package/dist/harness/session/mutation-line.js +21 -0
  217. package/dist/harness/session/mutation-line.js.map +1 -0
  218. package/dist/harness/session/session.d.ts +82 -0
  219. package/dist/harness/session/session.d.ts.map +1 -0
  220. package/dist/harness/session/session.js +361 -0
  221. package/dist/harness/session/session.js.map +1 -0
  222. package/dist/harness/session/testing/benchmark/datasets.d.ts +12 -0
  223. package/dist/harness/session/testing/benchmark/datasets.d.ts.map +1 -0
  224. package/dist/harness/session/testing/benchmark/datasets.js +24 -0
  225. package/dist/harness/session/testing/benchmark/datasets.js.map +1 -0
  226. package/dist/harness/session/testing/benchmark/session-repo.d.ts +42 -0
  227. package/dist/harness/session/testing/benchmark/session-repo.d.ts.map +1 -0
  228. package/dist/harness/session/testing/benchmark/session-repo.js +127 -0
  229. package/dist/harness/session/testing/benchmark/session-repo.js.map +1 -0
  230. package/dist/harness/session/testing/benchmark/storage.d.ts +25 -0
  231. package/dist/harness/session/testing/benchmark/storage.d.ts.map +1 -0
  232. package/dist/harness/session/testing/benchmark/storage.js +114 -0
  233. package/dist/harness/session/testing/benchmark/storage.js.map +1 -0
  234. package/dist/harness/session/testing/conformance/session-repo.d.ts +23 -0
  235. package/dist/harness/session/testing/conformance/session-repo.d.ts.map +1 -0
  236. package/dist/harness/session/testing/conformance/session-repo.js +809 -0
  237. package/dist/harness/session/testing/conformance/session-repo.js.map +1 -0
  238. package/dist/harness/session/testing/conformance/storage.d.ts +4 -0
  239. package/dist/harness/session/testing/conformance/storage.d.ts.map +1 -0
  240. package/dist/harness/session/testing/conformance/storage.js +600 -0
  241. package/dist/harness/session/testing/conformance/storage.js.map +1 -0
  242. package/dist/harness/session/testing/gating-storage.d.ts +26 -0
  243. package/dist/harness/session/testing/gating-storage.d.ts.map +1 -0
  244. package/dist/harness/session/testing/gating-storage.js +100 -0
  245. package/dist/harness/session/testing/gating-storage.js.map +1 -0
  246. package/dist/harness/session/testing/index.d.ts +10 -0
  247. package/dist/harness/session/testing/index.d.ts.map +1 -0
  248. package/dist/harness/session/testing/index.js +9 -0
  249. package/dist/harness/session/testing/index.js.map +1 -0
  250. package/dist/harness/session/testing/instrumented-storage.d.ts +11 -0
  251. package/dist/harness/session/testing/instrumented-storage.d.ts.map +1 -0
  252. package/dist/harness/session/testing/instrumented-storage.js +16 -0
  253. package/dist/harness/session/testing/instrumented-storage.js.map +1 -0
  254. package/dist/harness/session/testing/storage-decorator.d.ts +20 -0
  255. package/dist/harness/session/testing/storage-decorator.d.ts.map +1 -0
  256. package/dist/harness/session/testing/storage-decorator.js +41 -0
  257. package/dist/harness/session/testing/storage-decorator.js.map +1 -0
  258. package/dist/harness/session/testing/types.d.ts +12 -0
  259. package/dist/harness/session/testing/types.d.ts.map +1 -0
  260. package/dist/harness/session/testing/types.js +2 -0
  261. package/dist/harness/session/testing/types.js.map +1 -0
  262. package/dist/harness/session/types.d.ts +512 -0
  263. package/dist/harness/session/types.d.ts.map +1 -0
  264. package/dist/harness/session/types.js +9 -0
  265. package/dist/harness/session/types.js.map +1 -0
  266. package/dist/harness/session/values.d.ts +95 -0
  267. package/dist/harness/session/values.d.ts.map +1 -0
  268. package/dist/harness/session/values.js +81 -0
  269. package/dist/harness/session/values.js.map +1 -0
  270. package/dist/harness/skills.d.ts +46 -0
  271. package/dist/harness/skills.d.ts.map +1 -0
  272. package/dist/harness/skills.js +326 -0
  273. package/dist/harness/skills.js.map +1 -0
  274. package/dist/harness/system-prompt.d.ts +3 -0
  275. package/dist/harness/system-prompt.d.ts.map +1 -0
  276. package/dist/harness/system-prompt.js +30 -0
  277. package/dist/harness/system-prompt.js.map +1 -0
  278. package/dist/harness/telemetry.d.ts +1242 -0
  279. package/dist/harness/telemetry.d.ts.map +1 -0
  280. package/dist/harness/telemetry.js +527 -0
  281. package/dist/harness/telemetry.js.map +1 -0
  282. package/dist/harness/tools/bash.d.ts +27 -0
  283. package/dist/harness/tools/bash.d.ts.map +1 -0
  284. package/dist/harness/tools/bash.js +105 -0
  285. package/dist/harness/tools/bash.js.map +1 -0
  286. package/dist/harness/tools/edit-diff.d.ts +89 -0
  287. package/dist/harness/tools/edit-diff.d.ts.map +1 -0
  288. package/dist/harness/tools/edit-diff.js +386 -0
  289. package/dist/harness/tools/edit-diff.js.map +1 -0
  290. package/dist/harness/tools/edit.d.ts +19 -0
  291. package/dist/harness/tools/edit.d.ts.map +1 -0
  292. package/dist/harness/tools/edit.js +108 -0
  293. package/dist/harness/tools/edit.js.map +1 -0
  294. package/dist/harness/tools/file-mutation-queue.d.ts +5 -0
  295. package/dist/harness/tools/file-mutation-queue.d.ts.map +1 -0
  296. package/dist/harness/tools/file-mutation-queue.js +46 -0
  297. package/dist/harness/tools/file-mutation-queue.js.map +1 -0
  298. package/dist/harness/tools/image.d.ts +3 -0
  299. package/dist/harness/tools/image.d.ts.map +1 -0
  300. package/dist/harness/tools/image.js +106 -0
  301. package/dist/harness/tools/image.js.map +1 -0
  302. package/dist/harness/tools/index.d.ts +6 -0
  303. package/dist/harness/tools/index.d.ts.map +1 -0
  304. package/dist/harness/tools/index.js +5 -0
  305. package/dist/harness/tools/index.js.map +1 -0
  306. package/dist/harness/tools/path-utils.d.ts +5 -0
  307. package/dist/harness/tools/path-utils.d.ts.map +1 -0
  308. package/dist/harness/tools/path-utils.js +26 -0
  309. package/dist/harness/tools/path-utils.js.map +1 -0
  310. package/dist/harness/tools/read.d.ts +35 -0
  311. package/dist/harness/tools/read.d.ts.map +1 -0
  312. package/dist/harness/tools/read.js +108 -0
  313. package/dist/harness/tools/read.js.map +1 -0
  314. package/dist/harness/tools/tool-context.d.ts +6 -0
  315. package/dist/harness/tools/tool-context.d.ts.map +1 -0
  316. package/dist/harness/tools/tool-context.js +2 -0
  317. package/dist/harness/tools/tool-context.js.map +1 -0
  318. package/dist/harness/tools/write.d.ts +11 -0
  319. package/dist/harness/tools/write.d.ts.map +1 -0
  320. package/dist/harness/tools/write.js +31 -0
  321. package/dist/harness/tools/write.js.map +1 -0
  322. package/dist/harness/types.d.ts +305 -0
  323. package/dist/harness/types.d.ts.map +1 -0
  324. package/dist/harness/types.js +75 -0
  325. package/dist/harness/types.js.map +1 -0
  326. package/dist/harness/utils/adaptive-publisher.d.ts +24 -0
  327. package/dist/harness/utils/adaptive-publisher.d.ts.map +1 -0
  328. package/dist/harness/utils/adaptive-publisher.js +79 -0
  329. package/dist/harness/utils/adaptive-publisher.js.map +1 -0
  330. package/dist/harness/utils/output-capture.d.ts +31 -0
  331. package/dist/harness/utils/output-capture.d.ts.map +1 -0
  332. package/dist/harness/utils/output-capture.js +217 -0
  333. package/dist/harness/utils/output-capture.js.map +1 -0
  334. package/dist/harness/utils/shell-output.d.ts +29 -0
  335. package/dist/harness/utils/shell-output.d.ts.map +1 -0
  336. package/dist/harness/utils/shell-output.js +71 -0
  337. package/dist/harness/utils/shell-output.js.map +1 -0
  338. package/dist/harness/utils/truncate.d.ts +71 -0
  339. package/dist/harness/utils/truncate.d.ts.map +1 -0
  340. package/dist/harness/utils/truncate.js +296 -0
  341. package/dist/harness/utils/truncate.js.map +1 -0
  342. package/dist/harness/utils/usage.d.ts +4 -0
  343. package/dist/harness/utils/usage.d.ts.map +1 -0
  344. package/dist/harness/utils/usage.js +33 -0
  345. package/dist/harness/utils/usage.js.map +1 -0
  346. package/dist/index.d.ts +28 -0
  347. package/dist/index.d.ts.map +1 -0
  348. package/dist/index.js +26 -0
  349. package/dist/index.js.map +1 -0
  350. package/dist/node.d.ts +3 -0
  351. package/dist/node.d.ts.map +1 -0
  352. package/dist/node.js +3 -0
  353. package/dist/node.js.map +1 -0
  354. package/dist/proxy.d.ts +72 -0
  355. package/dist/proxy.d.ts.map +1 -0
  356. package/dist/proxy.js +310 -0
  357. package/dist/proxy.js.map +1 -0
  358. package/dist/search/index.d.ts +29 -0
  359. package/dist/search/index.d.ts.map +1 -0
  360. package/dist/search/index.js +2 -0
  361. package/dist/search/index.js.map +1 -0
  362. package/dist/stream-fn.d.ts +10 -0
  363. package/dist/stream-fn.d.ts.map +1 -0
  364. package/dist/stream-fn.js +17 -0
  365. package/dist/stream-fn.js.map +1 -0
  366. package/dist/types.d.ts +416 -0
  367. package/dist/types.d.ts.map +1 -0
  368. package/dist/types.js +2 -0
  369. package/dist/types.js.map +1 -0
  370. package/package.json +89 -0
@@ -0,0 +1,512 @@
1
+ import type { JsonValue } from "@m4ike1/chord";
2
+ import type { AssistantMessage, StopReason, Usage } from "@m4ike1/ion-ai";
3
+ import type { AgentMessage, QueueMode, ThinkingLevel } from "../../types.ts";
4
+ import type { BranchPreparation } from "../compaction/branch-summarization.ts";
5
+ import type { CompactionPreparation, CompactionSettings } from "../compaction/compaction.ts";
6
+ import type { Context } from "../context.ts";
7
+ import type { AgentHarnessStreamOptions } from "../types.ts";
8
+ import type { ListElement, ListReadOptions, ListWrite, StoredValue, Value, ValueList, ValueWrite } from "./values.ts";
9
+ export type { JsonValue } from "@m4ike1/chord";
10
+ export type SettledAssistantMessage = AssistantMessage & {
11
+ stopReason: Exclude<StopReason, "pending">;
12
+ };
13
+ export type EntryType = "message" | "compaction" | "branch_summary" | "custom";
14
+ export interface EntryBase {
15
+ id: string;
16
+ parentId: string | null;
17
+ seq: number;
18
+ timestamp: number;
19
+ type: EntryType;
20
+ customType?: string;
21
+ }
22
+ export interface MessageEntry extends EntryBase {
23
+ type: "message";
24
+ message: AgentMessage;
25
+ terminate?: true;
26
+ }
27
+ export interface CompactionEntry extends EntryBase {
28
+ type: "compaction";
29
+ summary: string;
30
+ retainedTail: AgentMessage[];
31
+ tokensBefore: number;
32
+ details?: JsonValue;
33
+ usage?: Usage;
34
+ fromHook: boolean;
35
+ }
36
+ export interface BranchSummaryEntry extends EntryBase {
37
+ type: "branch_summary";
38
+ fromId: string | null;
39
+ summary: string;
40
+ details?: JsonValue;
41
+ usage?: Usage;
42
+ fromHook: boolean;
43
+ }
44
+ export interface CustomEntry extends EntryBase {
45
+ type: "custom";
46
+ customType: string;
47
+ data?: JsonValue;
48
+ }
49
+ /** Convert an application-defined custom entry into model context. */
50
+ export type EntryProjector = (entry: CustomEntry, context: Context) => AgentMessage[] | undefined | Promise<AgentMessage[] | undefined>;
51
+ export type Entry = MessageEntry | CompactionEntry | BranchSummaryEntry | CustomEntry;
52
+ /** Entry supplied to a transaction before storage assigns sequence and timestamp. */
53
+ export type NewEntry<TEntry extends Entry = Entry> = TEntry extends Entry ? Omit<TEntry, "seq" | "timestamp"> : never;
54
+ export interface LaneConfiguration {
55
+ model: {
56
+ provider: string;
57
+ modelId: string;
58
+ };
59
+ thinkingLevel: ThinkingLevel;
60
+ activeToolNames: string[];
61
+ }
62
+ export interface OperationMeta {
63
+ operationId: string;
64
+ lane: string;
65
+ sourceTipId: string | null;
66
+ startedAt: number;
67
+ intent: {
68
+ kind: "run";
69
+ promptEntryIds: string[];
70
+ } | {
71
+ kind: "compaction";
72
+ customInstructions?: string;
73
+ } | {
74
+ kind: "navigation";
75
+ targetId: string | null;
76
+ summarize: boolean;
77
+ label?: string;
78
+ customInstructions?: string;
79
+ };
80
+ }
81
+ export type Control = {
82
+ status: "running";
83
+ } | {
84
+ status: "cancel_requested";
85
+ requestedAt: number;
86
+ };
87
+ export interface OperationError {
88
+ code: string;
89
+ message: string;
90
+ details?: JsonValue;
91
+ }
92
+ export type TerminalStatus = "completed" | "declined" | "aborted" | "failed";
93
+ /** Immutable lane-lived observation record written by one terminal transaction. */
94
+ export interface OperationResultRecord {
95
+ operationId: string;
96
+ kind: OperationMeta["intent"]["kind"];
97
+ status: TerminalStatus;
98
+ error?: OperationError;
99
+ fromTipId: string | null;
100
+ tipId: string | null;
101
+ startedAt: number;
102
+ endedAt: number;
103
+ }
104
+ export type Continuation = {
105
+ kind: "need_assistant";
106
+ overflowRecoveryUsed: boolean;
107
+ } | {
108
+ kind: "may_finish";
109
+ includeFinalAssistant: boolean;
110
+ };
111
+ /** Checkpoint payload; the flat leaf literal replaces the old nested phase tag. */
112
+ export interface CheckpointData {
113
+ continuation: Continuation;
114
+ triggerEntryId: string;
115
+ }
116
+ export type InboxItemKind = "steer" | "followUp" | "nextRun" | "write";
117
+ export interface InboxItem {
118
+ entryId: string;
119
+ kind: InboxItemKind;
120
+ }
121
+ export interface NormalizedRetryPolicy {
122
+ maxAttempts: number;
123
+ baseDelayMs: number;
124
+ maxAgentDelayMs: number;
125
+ }
126
+ export interface GenerationContext {
127
+ stepId: string;
128
+ triggerEntryId: string;
129
+ configuration: LaneConfiguration;
130
+ streamOptions: AgentHarnessStreamOptions;
131
+ retryPolicy: NormalizedRetryPolicy;
132
+ overflowRecoveryUsed: boolean;
133
+ }
134
+ interface ToolCallSource {
135
+ /** Zero-based index in the assistant message's complete content array, not a filtered tool-call ordinal. */
136
+ sourceIndex: number;
137
+ resultEntryId: string;
138
+ }
139
+ export type ToolCall = ToolCallSource & ({
140
+ status: "planned";
141
+ } | {
142
+ status: "effect_pending";
143
+ replay: "never" | "safe";
144
+ } | {
145
+ status: "outcome_ready";
146
+ terminate: boolean;
147
+ } | {
148
+ status: "completed";
149
+ terminate: boolean;
150
+ });
151
+ export interface ToolBatch {
152
+ assistantEntryId: string;
153
+ configuration: LaneConfiguration;
154
+ turnId: string;
155
+ calls: ToolCall[];
156
+ }
157
+ export interface SummaryContext {
158
+ resultEntryId: string;
159
+ configuration: LaneConfiguration;
160
+ streamOptions: AgentHarnessStreamOptions;
161
+ retryPolicy: NormalizedRetryPolicy;
162
+ }
163
+ export interface Cancellable {
164
+ control: Control;
165
+ }
166
+ export interface RunSettings {
167
+ compaction: CompactionSettings;
168
+ steeringMode: QueueMode;
169
+ followUpMode: QueueMode;
170
+ toolExecution: "sequential" | "parallel";
171
+ }
172
+ /** Uniform scope carried by every operation leaf. */
173
+ export interface OperationScope extends Cancellable {
174
+ settings: RunSettings;
175
+ latestAssistantEntryId: string | null;
176
+ }
177
+ /** Shared backoff data for every retry-wait leaf. */
178
+ export interface RetryWait {
179
+ nextAttempt: number;
180
+ notBefore: number;
181
+ errorMessage: string;
182
+ }
183
+ export interface AssistantGenerationScope {
184
+ generationContext: GenerationContext;
185
+ }
186
+ export type ResultBoundary = {
187
+ kind: "resume_checkpoint";
188
+ resumeAfter: CheckpointData;
189
+ } | {
190
+ kind: "finish";
191
+ } | {
192
+ kind: "commit_navigation";
193
+ targetId: string;
194
+ label?: string;
195
+ };
196
+ export interface SummaryTask {
197
+ taskId: string;
198
+ reason?: "manual" | "threshold" | "overflow";
199
+ customInstructions?: string;
200
+ boundary: ResultBoundary;
201
+ }
202
+ export interface SummaryGenerationScope {
203
+ task: SummaryTask;
204
+ summaryContext: SummaryContext;
205
+ }
206
+ export interface SummaryGenerationReady extends SummaryGenerationScope {
207
+ nextAttempt: number;
208
+ }
209
+ export interface SummaryGenerationEffectPending extends SummaryGenerationScope {
210
+ attempt: number;
211
+ request?: {
212
+ index: number;
213
+ usageId: string;
214
+ };
215
+ usageIds: string[];
216
+ }
217
+ export interface SummaryGenerationRetryWait extends SummaryGenerationScope, RetryWait {
218
+ }
219
+ export interface DeferredScope extends OperationScope {
220
+ stepId: string;
221
+ sourceEntryId: string;
222
+ poll: number;
223
+ configuration: LaneConfiguration;
224
+ streamOptions: AgentHarnessStreamOptions;
225
+ }
226
+ export interface StartingOperation extends OperationScope {
227
+ at: "starting";
228
+ }
229
+ export interface CheckpointOperation extends OperationScope, CheckpointData {
230
+ at: "checkpoint";
231
+ }
232
+ export interface AssistantReadyOperation extends OperationScope, AssistantGenerationScope {
233
+ at: "assistant.ready";
234
+ nextAttempt: number;
235
+ }
236
+ export interface AssistantEffectPendingOperation extends OperationScope, AssistantGenerationScope {
237
+ at: "assistant.effect_pending";
238
+ attempt: number;
239
+ responseEntryId: string;
240
+ usageId: string;
241
+ intendedOutputLimit: number;
242
+ contextWindow: number;
243
+ }
244
+ export interface AssistantRetryWaitOperation extends OperationScope, AssistantGenerationScope, RetryWait {
245
+ at: "assistant.retry_wait";
246
+ }
247
+ export interface ToolsOperation extends OperationScope {
248
+ at: "tools";
249
+ batch: ToolBatch;
250
+ }
251
+ export interface DeferredSuspendedOperation extends DeferredScope {
252
+ at: "deferred.suspended";
253
+ }
254
+ export interface DeferredEffectPendingOperation extends DeferredScope {
255
+ at: "deferred.effect_pending";
256
+ responseEntryId: string;
257
+ usageId: string;
258
+ }
259
+ export interface SummaryDecidingOperation extends OperationScope {
260
+ at: "summary.deciding";
261
+ task: SummaryTask;
262
+ }
263
+ export interface SummaryReadyOperation extends OperationScope, SummaryGenerationReady {
264
+ at: "summary.ready";
265
+ }
266
+ export interface SummaryEffectPendingOperation extends OperationScope, SummaryGenerationEffectPending {
267
+ at: "summary.effect_pending";
268
+ }
269
+ export interface SummaryRetryWaitOperation extends OperationScope, SummaryGenerationRetryWait {
270
+ at: "summary.retry_wait";
271
+ }
272
+ export interface NavigationReadyToCommitOperation extends OperationScope {
273
+ at: "navigation.ready_to_commit";
274
+ /** Unsummarized navigation may target the branch root (null). */
275
+ targetId: string | null;
276
+ label?: string;
277
+ }
278
+ /** Flat durable operation state: exactly 13 family-neutral dispatcher leaves. */
279
+ export type OperationState = StartingOperation | CheckpointOperation | AssistantReadyOperation | AssistantEffectPendingOperation | AssistantRetryWaitOperation | ToolsOperation | DeferredSuspendedOperation | DeferredEffectPendingOperation | SummaryDecidingOperation | SummaryReadyOperation | SummaryEffectPendingOperation | SummaryRetryWaitOperation | NavigationReadyToCommitOperation;
280
+ export type OperationAt = OperationState["at"];
281
+ /** Copy only the uniform operation scope when constructing a successor leaf. */
282
+ export declare function operationScopeOf(state: OperationState): OperationScope;
283
+ export type Operation = {
284
+ meta: OperationMeta;
285
+ state: OperationState;
286
+ };
287
+ export interface LaneState {
288
+ currentOperationId: string | null;
289
+ lastOperationId: string | null;
290
+ inbox: InboxItem[];
291
+ }
292
+ export type PendingEntry = {
293
+ type: "message";
294
+ payload: AgentMessage;
295
+ } | {
296
+ type: "custom";
297
+ customType: string;
298
+ payload?: JsonValue;
299
+ };
300
+ export interface DurableFileOperations {
301
+ read: string[];
302
+ written: string[];
303
+ edited: string[];
304
+ }
305
+ export type DurableStructuralPreparation = {
306
+ kind: "compaction";
307
+ messagesToSummarize: CompactionPreparation["messagesToSummarize"];
308
+ turnPrefixMessages: CompactionPreparation["turnPrefixMessages"];
309
+ retainedTail: CompactionPreparation["retainedTail"];
310
+ isSplitTurn: boolean;
311
+ tokensBefore: number;
312
+ previousSummary?: string;
313
+ fileOps: DurableFileOperations;
314
+ settings: CompactionSettings;
315
+ } | {
316
+ kind: "branch_summary";
317
+ messages: BranchPreparation["messages"];
318
+ fileOps: DurableFileOperations;
319
+ totalTokens: number;
320
+ };
321
+ export interface UsageRow {
322
+ id: string;
323
+ seq: number;
324
+ usage: Usage;
325
+ entryId?: string;
326
+ adjustment: boolean;
327
+ details?: JsonValue;
328
+ }
329
+ export interface EntryWrite {
330
+ kind: "entry";
331
+ entry: NewEntry;
332
+ }
333
+ export interface UsageWrite {
334
+ kind: "usage";
335
+ row: Omit<UsageRow, "seq">;
336
+ }
337
+ export type Write = EntryWrite | UsageWrite | ValueWrite | ListWrite;
338
+ export interface CommitResult {
339
+ firstSeq: number;
340
+ seqs: number[];
341
+ timestamp: number;
342
+ /** Session totals immediately after this commit was applied. */
343
+ stats: SessionStats;
344
+ }
345
+ export interface EntryStructure {
346
+ id: string;
347
+ parentId: string | null;
348
+ seq: number;
349
+ timestamp: number;
350
+ type: EntryType;
351
+ customType?: string;
352
+ }
353
+ export interface EntryCursor {
354
+ seq: number;
355
+ }
356
+ export interface BranchScan {
357
+ start?: string;
358
+ stopAtType?: EntryType;
359
+ stopAtId?: string;
360
+ type?: EntryType;
361
+ customType?: string;
362
+ order?: "newestFirst" | "oldestFirst";
363
+ limit?: number;
364
+ cursor?: EntryCursor;
365
+ }
366
+ export type StorageBranchScan = BranchScan & {
367
+ start: string;
368
+ };
369
+ export interface EntryScan {
370
+ type?: EntryType;
371
+ customType?: string;
372
+ fromSeq?: number;
373
+ toSeq?: number;
374
+ order?: "asc" | "desc";
375
+ limit?: number;
376
+ }
377
+ export interface UsageScan {
378
+ fromSeq?: number;
379
+ toSeq?: number;
380
+ order?: "asc" | "desc";
381
+ limit?: number;
382
+ }
383
+ export interface SessionStats {
384
+ messageCount: number;
385
+ usage: Usage;
386
+ }
387
+ export interface Storage {
388
+ commit(writes: Write[], context: Context): Promise<CommitResult>;
389
+ getEntries(ids: string[], context: Context): Promise<Map<string, Entry>>;
390
+ getValue<T>(address: Value<T>, context: Context): Promise<StoredValue<T> | undefined>;
391
+ scanValues<T>(prefix: Value<T>, context: Context): Promise<StoredValue<T>[]>;
392
+ readList<T>(address: ValueList<T>, options: ListReadOptions | undefined, context: Context): Promise<ListElement<T>[]>;
393
+ scanBranch(query: StorageBranchScan, context: Context): Promise<Entry[]>;
394
+ scanBranchStructure(query: StorageBranchScan, context: Context): Promise<EntryStructure[]>;
395
+ scanEntries(query: EntryScan, context: Context): Promise<Entry[]>;
396
+ scanUsage(query: UsageScan, context: Context): Promise<UsageRow[]>;
397
+ getStats(context: Context): Promise<SessionStats>;
398
+ close(context: Context): Promise<void>;
399
+ }
400
+ export interface SessionMetadata {
401
+ id: string;
402
+ createdAt: number;
403
+ storageVersion: number;
404
+ cwd?: string;
405
+ parentSessionId?: string;
406
+ legacyParentSessionPath?: string;
407
+ }
408
+ export interface IdGenerator {
409
+ next(timestampMs?: number): string;
410
+ }
411
+ export interface EntryQuery {
412
+ type?: EntryType;
413
+ customType?: string;
414
+ order?: "asc" | "desc";
415
+ limit?: number;
416
+ cursor?: EntryCursor;
417
+ }
418
+ export interface SessionReader {
419
+ getEntries(ids: string[], context: Context): Promise<Map<string, Entry>>;
420
+ getStats(context: Context): Promise<SessionStats>;
421
+ getValue<T>(address: Value<T>, context: Context): Promise<StoredValue<T> | undefined>;
422
+ scanValues<T>(prefix: Value<T>, context: Context): Promise<StoredValue<T>[]>;
423
+ readList<T>(address: ValueList<T>, options: ListReadOptions | undefined, context: Context): Promise<ListElement<T>[]>;
424
+ /** Scan a branch from an explicit entry while this reader capability remains valid. */
425
+ scanBranch(query: StorageBranchScan, context: Context): Promise<Entry[]>;
426
+ }
427
+ /** Exclusive keyless mutation barrier for one Session. */
428
+ export interface SessionMutation extends SessionReader {
429
+ /** Exactly zero or one commit attempt. A second attempt rejects. */
430
+ commit(writes: Write[], context: Context): Promise<CommitResult>;
431
+ /** Wait for any commit attempt, invalidate the capability, and release the barrier. */
432
+ end(context: Context): Promise<void>;
433
+ }
434
+ /** Callback-scoped mutation capability without authority to release its Session barrier. */
435
+ export type SessionMutator = Omit<SessionMutation, "end">;
436
+ export type SessionMutationCallback<T> = (mutator: SessionMutator, context: Context) => T | Promise<T>;
437
+ export interface Branch {
438
+ readonly name: string;
439
+ getTipId(context: Context): Promise<string | null>;
440
+ findEntries(query: BranchScan | undefined, context: Context): Promise<Entry[]>;
441
+ findEntry(query: BranchScan | undefined, context: Context): Promise<Entry | undefined>;
442
+ appendMessage(message: AgentMessage, context: Context): Promise<string>;
443
+ appendCustomEntry(customType: string, data: JsonValue | undefined, context: Context): Promise<string>;
444
+ }
445
+ export interface Session<TMetadata extends SessionMetadata = SessionMetadata> extends SessionReader {
446
+ readonly metadata: TMetadata;
447
+ readonly idGenerator: IdGenerator;
448
+ getEntry(id: string, context: Context): Promise<Entry | undefined>;
449
+ getStats(context: Context): Promise<SessionStats>;
450
+ getName(context: Context): Promise<string | undefined>;
451
+ getLabel(targetId: string, context: Context): Promise<string | undefined>;
452
+ findEntries(query: EntryQuery | undefined, context: Context): Promise<Entry[]>;
453
+ findEntry(query: EntryQuery | undefined, context: Context): Promise<Entry | undefined>;
454
+ branch(name: string, context: Context): Promise<Branch | undefined>;
455
+ createBranch(name: string, at: string | null, context: Context): Promise<Branch>;
456
+ beginMutation(context: Context): Promise<SessionMutation>;
457
+ /**
458
+ * Trusted exclusive callback over the Session mutation line. Calling a public Session writer from
459
+ * this callback queues it behind the callback; awaiting that nested writer therefore deadlocks.
460
+ * Use the supplied mutator for the callback's sole commit.
461
+ */
462
+ mutate<T>(mutation: SessionMutationCallback<T>, context: Context): Promise<T>;
463
+ setValue<T>(address: Value<T>, next: NoInfer<T>, context: Context): Promise<void>;
464
+ deleteValue<T>(address: Value<T>, context: Context): Promise<void>;
465
+ appendList<T>(address: ValueList<T>, element: NoInfer<T>, context: Context): Promise<void>;
466
+ deleteList<T>(address: ValueList<T>, context: Context): Promise<void>;
467
+ setName(name: string | undefined, context: Context): Promise<void>;
468
+ setLabel(targetId: string, label: string | undefined, context: Context): Promise<void>;
469
+ close(context: Context): Promise<void>;
470
+ }
471
+ export interface SessionCreateOptions {
472
+ id?: string;
473
+ parentSessionId?: string;
474
+ }
475
+ export type ForkOptions = {
476
+ /**
477
+ * Copy one path from a complete configured source AgentLane under the same
478
+ * Branch name, with copied configuration and fresh idle lane state.
479
+ */
480
+ scope: "branch";
481
+ /** Source Branch to copy. */
482
+ branch: string;
483
+ /** Entry on the source Branch's current tip ancestry. Defaults to the current tip. */
484
+ entryId?: string;
485
+ /**
486
+ * Whether the fork includes the selected entry or stops at its parent.
487
+ * Defaults to including the selected entry.
488
+ */
489
+ position?: "before" | "at";
490
+ /** Optional destination session id. */
491
+ id?: string;
492
+ } | {
493
+ /**
494
+ * Copy the whole conversation tree and every Branch tip. Each configured
495
+ * AgentLane copies configuration plus fresh idle state; data-only Branches
496
+ * remain data-only. Operation/pending/result/usage state is excluded.
497
+ */
498
+ scope: "tree";
499
+ /** Optional destination session id. */
500
+ id?: string;
501
+ };
502
+ export interface SessionRepo<TMetadata extends SessionMetadata = SessionMetadata, TCreateOptions extends {
503
+ id?: string;
504
+ parentSessionId?: string;
505
+ } = SessionCreateOptions, TListOptions = void> {
506
+ create(options: TCreateOptions, context: Context): Promise<Session<TMetadata>>;
507
+ open(metadata: TMetadata, context: Context): Promise<Session<TMetadata>>;
508
+ list(options: TListOptions | undefined, context: Context): Promise<TMetadata[]>;
509
+ delete(metadata: TMetadata, context: Context): Promise<void>;
510
+ fork(source: TMetadata, options: ForkOptions, context: Context): Promise<Session<TMetadata>>;
511
+ }
512
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/harness/session/types.ts"],"names":[],"mappings":"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","sourcesContent":["import type { JsonValue } from \"@m4ike1/chord\";\nimport type { AssistantMessage, StopReason, Usage } from \"@m4ike1/ion-ai\";\nimport type { AgentMessage, QueueMode, ThinkingLevel } from \"../../types.ts\";\nimport type { BranchPreparation } from \"../compaction/branch-summarization.ts\";\nimport type { CompactionPreparation, CompactionSettings } from \"../compaction/compaction.ts\";\nimport type { Context } from \"../context.ts\";\nimport type { AgentHarnessStreamOptions } from \"../types.ts\";\nimport type { ListElement, ListReadOptions, ListWrite, StoredValue, Value, ValueList, ValueWrite } from \"./values.ts\";\n\nexport type { JsonValue } from \"@m4ike1/chord\";\n\nexport type SettledAssistantMessage = AssistantMessage & {\n\tstopReason: Exclude<StopReason, \"pending\">;\n};\n\nexport type EntryType = \"message\" | \"compaction\" | \"branch_summary\" | \"custom\";\n\nexport interface EntryBase {\n\tid: string;\n\tparentId: string | null;\n\tseq: number;\n\ttimestamp: number;\n\ttype: EntryType;\n\tcustomType?: string;\n}\n\nexport interface MessageEntry extends EntryBase {\n\ttype: \"message\";\n\tmessage: AgentMessage;\n\tterminate?: true;\n}\n\nexport interface CompactionEntry extends EntryBase {\n\ttype: \"compaction\";\n\tsummary: string;\n\tretainedTail: AgentMessage[];\n\ttokensBefore: number;\n\tdetails?: JsonValue;\n\tusage?: Usage;\n\tfromHook: boolean;\n}\n\nexport interface BranchSummaryEntry extends EntryBase {\n\ttype: \"branch_summary\";\n\tfromId: string | null;\n\tsummary: string;\n\tdetails?: JsonValue;\n\tusage?: Usage;\n\tfromHook: boolean;\n}\n\nexport interface CustomEntry extends EntryBase {\n\ttype: \"custom\";\n\tcustomType: string;\n\tdata?: JsonValue;\n}\n\n/** Convert an application-defined custom entry into model context. */\nexport type EntryProjector = (\n\tentry: CustomEntry,\n\tcontext: Context,\n) => AgentMessage[] | undefined | Promise<AgentMessage[] | undefined>;\n\nexport type Entry = MessageEntry | CompactionEntry | BranchSummaryEntry | CustomEntry;\n\n/** Entry supplied to a transaction before storage assigns sequence and timestamp. */\nexport type NewEntry<TEntry extends Entry = Entry> = TEntry extends Entry ? Omit<TEntry, \"seq\" | \"timestamp\"> : never;\n\nexport interface LaneConfiguration {\n\tmodel: { provider: string; modelId: string };\n\tthinkingLevel: ThinkingLevel;\n\tactiveToolNames: string[];\n}\n\nexport interface OperationMeta {\n\toperationId: string;\n\tlane: string;\n\tsourceTipId: string | null;\n\tstartedAt: number;\n\tintent:\n\t\t| { kind: \"run\"; promptEntryIds: string[] }\n\t\t| { kind: \"compaction\"; customInstructions?: string }\n\t\t| {\n\t\t\t\tkind: \"navigation\";\n\t\t\t\ttargetId: string | null;\n\t\t\t\tsummarize: boolean;\n\t\t\t\tlabel?: string;\n\t\t\t\tcustomInstructions?: string;\n\t\t };\n}\n\nexport type Control =\n\t| { status: \"running\" }\n\t| {\n\t\t\tstatus: \"cancel_requested\";\n\t\t\trequestedAt: number;\n\t };\n\nexport interface OperationError {\n\tcode: string;\n\tmessage: string;\n\tdetails?: JsonValue;\n}\n\nexport type TerminalStatus = \"completed\" | \"declined\" | \"aborted\" | \"failed\";\n\n/** Immutable lane-lived observation record written by one terminal transaction. */\nexport interface OperationResultRecord {\n\toperationId: string;\n\tkind: OperationMeta[\"intent\"][\"kind\"];\n\tstatus: TerminalStatus;\n\terror?: OperationError;\n\tfromTipId: string | null;\n\ttipId: string | null;\n\tstartedAt: number;\n\tendedAt: number;\n}\n\nexport type Continuation =\n\t| { kind: \"need_assistant\"; overflowRecoveryUsed: boolean }\n\t| { kind: \"may_finish\"; includeFinalAssistant: boolean };\n\n/** Checkpoint payload; the flat leaf literal replaces the old nested phase tag. */\nexport interface CheckpointData {\n\tcontinuation: Continuation;\n\ttriggerEntryId: string;\n}\n\nexport type InboxItemKind = \"steer\" | \"followUp\" | \"nextRun\" | \"write\";\n\nexport interface InboxItem {\n\tentryId: string;\n\tkind: InboxItemKind;\n}\n\nexport interface NormalizedRetryPolicy {\n\tmaxAttempts: number;\n\tbaseDelayMs: number;\n\tmaxAgentDelayMs: number;\n}\n\nexport interface GenerationContext {\n\tstepId: string;\n\ttriggerEntryId: string;\n\tconfiguration: LaneConfiguration;\n\tstreamOptions: AgentHarnessStreamOptions;\n\tretryPolicy: NormalizedRetryPolicy;\n\toverflowRecoveryUsed: boolean;\n}\n\ninterface ToolCallSource {\n\t/** Zero-based index in the assistant message's complete content array, not a filtered tool-call ordinal. */\n\tsourceIndex: number;\n\tresultEntryId: string;\n}\n\nexport type ToolCall = ToolCallSource &\n\t(\n\t\t| { status: \"planned\" }\n\t\t| { status: \"effect_pending\"; replay: \"never\" | \"safe\" }\n\t\t| { status: \"outcome_ready\"; terminate: boolean }\n\t\t| { status: \"completed\"; terminate: boolean }\n\t);\n\nexport interface ToolBatch {\n\tassistantEntryId: string;\n\tconfiguration: LaneConfiguration;\n\tturnId: string;\n\tcalls: ToolCall[];\n}\n\nexport interface SummaryContext {\n\tresultEntryId: string;\n\tconfiguration: LaneConfiguration;\n\tstreamOptions: AgentHarnessStreamOptions;\n\tretryPolicy: NormalizedRetryPolicy;\n}\n\n/*\n * Durable operation state is one flat union with one family-neutral discriminator\n * per dispatcher leaf. ToolBatch/ToolCall remain the nested child collection state\n * machine, and cancellation stays orthogonal via Control.\n */\n\nexport interface Cancellable {\n\tcontrol: Control;\n}\n\nexport interface RunSettings {\n\tcompaction: CompactionSettings;\n\tsteeringMode: QueueMode;\n\tfollowUpMode: QueueMode;\n\ttoolExecution: \"sequential\" | \"parallel\";\n}\n\n/** Uniform scope carried by every operation leaf. */\nexport interface OperationScope extends Cancellable {\n\tsettings: RunSettings;\n\tlatestAssistantEntryId: string | null;\n}\n\n/** Shared backoff data for every retry-wait leaf. */\nexport interface RetryWait {\n\tnextAttempt: number;\n\tnotBefore: number;\n\terrorMessage: string;\n}\n\nexport interface AssistantGenerationScope {\n\tgenerationContext: GenerationContext;\n}\n\nexport type ResultBoundary =\n\t| { kind: \"resume_checkpoint\"; resumeAfter: CheckpointData }\n\t| { kind: \"finish\" }\n\t| { kind: \"commit_navigation\"; targetId: string; label?: string };\n\nexport interface SummaryTask {\n\ttaskId: string;\n\treason?: \"manual\" | \"threshold\" | \"overflow\";\n\tcustomInstructions?: string;\n\tboundary: ResultBoundary;\n}\n\nexport interface SummaryGenerationScope {\n\ttask: SummaryTask;\n\tsummaryContext: SummaryContext;\n}\n\nexport interface SummaryGenerationReady extends SummaryGenerationScope {\n\tnextAttempt: number;\n}\n\nexport interface SummaryGenerationEffectPending extends SummaryGenerationScope {\n\tattempt: number;\n\trequest?: { index: number; usageId: string };\n\tusageIds: string[];\n}\n\nexport interface SummaryGenerationRetryWait extends SummaryGenerationScope, RetryWait {}\n\nexport interface DeferredScope extends OperationScope {\n\tstepId: string;\n\tsourceEntryId: string;\n\tpoll: number;\n\tconfiguration: LaneConfiguration;\n\tstreamOptions: AgentHarnessStreamOptions;\n}\n\nexport interface StartingOperation extends OperationScope {\n\tat: \"starting\";\n}\n\nexport interface CheckpointOperation extends OperationScope, CheckpointData {\n\tat: \"checkpoint\";\n}\n\nexport interface AssistantReadyOperation extends OperationScope, AssistantGenerationScope {\n\tat: \"assistant.ready\";\n\tnextAttempt: number;\n}\n\nexport interface AssistantEffectPendingOperation extends OperationScope, AssistantGenerationScope {\n\tat: \"assistant.effect_pending\";\n\tattempt: number;\n\tresponseEntryId: string;\n\tusageId: string;\n\tintendedOutputLimit: number;\n\tcontextWindow: number;\n}\n\nexport interface AssistantRetryWaitOperation extends OperationScope, AssistantGenerationScope, RetryWait {\n\tat: \"assistant.retry_wait\";\n}\n\nexport interface ToolsOperation extends OperationScope {\n\tat: \"tools\";\n\tbatch: ToolBatch;\n}\n\nexport interface DeferredSuspendedOperation extends DeferredScope {\n\tat: \"deferred.suspended\";\n}\n\nexport interface DeferredEffectPendingOperation extends DeferredScope {\n\tat: \"deferred.effect_pending\";\n\tresponseEntryId: string;\n\tusageId: string;\n}\n\nexport interface SummaryDecidingOperation extends OperationScope {\n\tat: \"summary.deciding\";\n\ttask: SummaryTask;\n}\n\nexport interface SummaryReadyOperation extends OperationScope, SummaryGenerationReady {\n\tat: \"summary.ready\";\n}\n\nexport interface SummaryEffectPendingOperation extends OperationScope, SummaryGenerationEffectPending {\n\tat: \"summary.effect_pending\";\n}\n\nexport interface SummaryRetryWaitOperation extends OperationScope, SummaryGenerationRetryWait {\n\tat: \"summary.retry_wait\";\n}\n\nexport interface NavigationReadyToCommitOperation extends OperationScope {\n\tat: \"navigation.ready_to_commit\";\n\t/** Unsummarized navigation may target the branch root (null). */\n\ttargetId: string | null;\n\tlabel?: string;\n}\n\n/** Flat durable operation state: exactly 13 family-neutral dispatcher leaves. */\nexport type OperationState =\n\t| StartingOperation\n\t| CheckpointOperation\n\t| AssistantReadyOperation\n\t| AssistantEffectPendingOperation\n\t| AssistantRetryWaitOperation\n\t| ToolsOperation\n\t| DeferredSuspendedOperation\n\t| DeferredEffectPendingOperation\n\t| SummaryDecidingOperation\n\t| SummaryReadyOperation\n\t| SummaryEffectPendingOperation\n\t| SummaryRetryWaitOperation\n\t| NavigationReadyToCommitOperation;\n\nexport type OperationAt = OperationState[\"at\"];\n\n/** Copy only the uniform operation scope when constructing a successor leaf. */\nexport function operationScopeOf(state: OperationState): OperationScope {\n\treturn {\n\t\tcontrol: state.control,\n\t\tsettings: state.settings,\n\t\tlatestAssistantEntryId: state.latestAssistantEntryId,\n\t};\n}\n\nexport type Operation = { meta: OperationMeta; state: OperationState };\n\nexport interface LaneState {\n\tcurrentOperationId: string | null;\n\tlastOperationId: string | null;\n\tinbox: InboxItem[];\n}\n\nexport type PendingEntry =\n\t| { type: \"message\"; payload: AgentMessage }\n\t| { type: \"custom\"; customType: string; payload?: JsonValue };\n\nexport interface DurableFileOperations {\n\tread: string[];\n\twritten: string[];\n\tedited: string[];\n}\n\nexport type DurableStructuralPreparation =\n\t| {\n\t\t\tkind: \"compaction\";\n\t\t\tmessagesToSummarize: CompactionPreparation[\"messagesToSummarize\"];\n\t\t\tturnPrefixMessages: CompactionPreparation[\"turnPrefixMessages\"];\n\t\t\tretainedTail: CompactionPreparation[\"retainedTail\"];\n\t\t\tisSplitTurn: boolean;\n\t\t\ttokensBefore: number;\n\t\t\tpreviousSummary?: string;\n\t\t\tfileOps: DurableFileOperations;\n\t\t\tsettings: CompactionSettings;\n\t }\n\t| {\n\t\t\tkind: \"branch_summary\";\n\t\t\tmessages: BranchPreparation[\"messages\"];\n\t\t\tfileOps: DurableFileOperations;\n\t\t\ttotalTokens: number;\n\t };\n\nexport interface UsageRow {\n\tid: string;\n\tseq: number;\n\tusage: Usage;\n\tentryId?: string;\n\tadjustment: boolean;\n\tdetails?: JsonValue;\n}\n\nexport interface EntryWrite {\n\tkind: \"entry\";\n\tentry: NewEntry;\n}\n\nexport interface UsageWrite {\n\tkind: \"usage\";\n\trow: Omit<UsageRow, \"seq\">;\n}\n\nexport type Write = EntryWrite | UsageWrite | ValueWrite | ListWrite;\n\nexport interface CommitResult {\n\tfirstSeq: number;\n\tseqs: number[];\n\ttimestamp: number;\n\t/** Session totals immediately after this commit was applied. */\n\tstats: SessionStats;\n}\n\nexport interface EntryStructure {\n\tid: string;\n\tparentId: string | null;\n\tseq: number;\n\ttimestamp: number;\n\ttype: EntryType;\n\tcustomType?: string;\n}\n\nexport interface EntryCursor {\n\tseq: number;\n}\n\nexport interface BranchScan {\n\tstart?: string;\n\tstopAtType?: EntryType;\n\tstopAtId?: string;\n\ttype?: EntryType;\n\tcustomType?: string;\n\torder?: \"newestFirst\" | \"oldestFirst\";\n\tlimit?: number;\n\tcursor?: EntryCursor;\n}\n\nexport type StorageBranchScan = BranchScan & { start: string };\n\nexport interface EntryScan {\n\ttype?: EntryType;\n\tcustomType?: string;\n\tfromSeq?: number;\n\ttoSeq?: number;\n\torder?: \"asc\" | \"desc\";\n\tlimit?: number;\n}\n\nexport interface UsageScan {\n\tfromSeq?: number;\n\ttoSeq?: number;\n\torder?: \"asc\" | \"desc\";\n\tlimit?: number;\n}\n\nexport interface SessionStats {\n\tmessageCount: number;\n\tusage: Usage;\n}\n\nexport interface Storage {\n\tcommit(writes: Write[], context: Context): Promise<CommitResult>;\n\tgetEntries(ids: string[], context: Context): Promise<Map<string, Entry>>;\n\tgetValue<T>(address: Value<T>, context: Context): Promise<StoredValue<T> | undefined>;\n\tscanValues<T>(prefix: Value<T>, context: Context): Promise<StoredValue<T>[]>;\n\treadList<T>(\n\t\taddress: ValueList<T>,\n\t\toptions: ListReadOptions | undefined,\n\t\tcontext: Context,\n\t): Promise<ListElement<T>[]>;\n\tscanBranch(query: StorageBranchScan, context: Context): Promise<Entry[]>;\n\tscanBranchStructure(query: StorageBranchScan, context: Context): Promise<EntryStructure[]>;\n\tscanEntries(query: EntryScan, context: Context): Promise<Entry[]>;\n\tscanUsage(query: UsageScan, context: Context): Promise<UsageRow[]>;\n\tgetStats(context: Context): Promise<SessionStats>;\n\tclose(context: Context): Promise<void>;\n}\n\nexport interface SessionMetadata {\n\tid: string;\n\tcreatedAt: number;\n\tstorageVersion: number;\n\tcwd?: string;\n\tparentSessionId?: string;\n\tlegacyParentSessionPath?: string;\n}\n\nexport interface IdGenerator {\n\tnext(timestampMs?: number): string;\n}\n\nexport interface EntryQuery {\n\ttype?: EntryType;\n\tcustomType?: string;\n\torder?: \"asc\" | \"desc\";\n\tlimit?: number;\n\tcursor?: EntryCursor;\n}\n\nexport interface SessionReader {\n\tgetEntries(ids: string[], context: Context): Promise<Map<string, Entry>>;\n\tgetStats(context: Context): Promise<SessionStats>;\n\tgetValue<T>(address: Value<T>, context: Context): Promise<StoredValue<T> | undefined>;\n\tscanValues<T>(prefix: Value<T>, context: Context): Promise<StoredValue<T>[]>;\n\treadList<T>(\n\t\taddress: ValueList<T>,\n\t\toptions: ListReadOptions | undefined,\n\t\tcontext: Context,\n\t): Promise<ListElement<T>[]>;\n\t/** Scan a branch from an explicit entry while this reader capability remains valid. */\n\tscanBranch(query: StorageBranchScan, context: Context): Promise<Entry[]>;\n}\n\n/** Exclusive keyless mutation barrier for one Session. */\nexport interface SessionMutation extends SessionReader {\n\t/** Exactly zero or one commit attempt. A second attempt rejects. */\n\tcommit(writes: Write[], context: Context): Promise<CommitResult>;\n\t/** Wait for any commit attempt, invalidate the capability, and release the barrier. */\n\tend(context: Context): Promise<void>;\n}\n\n/** Callback-scoped mutation capability without authority to release its Session barrier. */\nexport type SessionMutator = Omit<SessionMutation, \"end\">;\n\nexport type SessionMutationCallback<T> = (mutator: SessionMutator, context: Context) => T | Promise<T>;\n\nexport interface Branch {\n\treadonly name: string;\n\tgetTipId(context: Context): Promise<string | null>;\n\tfindEntries(query: BranchScan | undefined, context: Context): Promise<Entry[]>;\n\tfindEntry(query: BranchScan | undefined, context: Context): Promise<Entry | undefined>;\n\tappendMessage(message: AgentMessage, context: Context): Promise<string>;\n\tappendCustomEntry(customType: string, data: JsonValue | undefined, context: Context): Promise<string>;\n}\n\nexport interface Session<TMetadata extends SessionMetadata = SessionMetadata> extends SessionReader {\n\treadonly metadata: TMetadata;\n\treadonly idGenerator: IdGenerator;\n\tgetEntry(id: string, context: Context): Promise<Entry | undefined>;\n\tgetStats(context: Context): Promise<SessionStats>;\n\tgetName(context: Context): Promise<string | undefined>;\n\tgetLabel(targetId: string, context: Context): Promise<string | undefined>;\n\tfindEntries(query: EntryQuery | undefined, context: Context): Promise<Entry[]>;\n\tfindEntry(query: EntryQuery | undefined, context: Context): Promise<Entry | undefined>;\n\tbranch(name: string, context: Context): Promise<Branch | undefined>;\n\tcreateBranch(name: string, at: string | null, context: Context): Promise<Branch>;\n\tbeginMutation(context: Context): Promise<SessionMutation>;\n\t/**\n\t * Trusted exclusive callback over the Session mutation line. Calling a public Session writer from\n\t * this callback queues it behind the callback; awaiting that nested writer therefore deadlocks.\n\t * Use the supplied mutator for the callback's sole commit.\n\t */\n\tmutate<T>(mutation: SessionMutationCallback<T>, context: Context): Promise<T>;\n\tsetValue<T>(address: Value<T>, next: NoInfer<T>, context: Context): Promise<void>;\n\tdeleteValue<T>(address: Value<T>, context: Context): Promise<void>;\n\tappendList<T>(address: ValueList<T>, element: NoInfer<T>, context: Context): Promise<void>;\n\tdeleteList<T>(address: ValueList<T>, context: Context): Promise<void>;\n\tsetName(name: string | undefined, context: Context): Promise<void>;\n\tsetLabel(targetId: string, label: string | undefined, context: Context): Promise<void>;\n\tclose(context: Context): Promise<void>;\n}\n\nexport interface SessionCreateOptions {\n\tid?: string;\n\tparentSessionId?: string;\n}\n\nexport type ForkOptions =\n\t| {\n\t\t\t/**\n\t\t\t * Copy one path from a complete configured source AgentLane under the same\n\t\t\t * Branch name, with copied configuration and fresh idle lane state.\n\t\t\t */\n\t\t\tscope: \"branch\";\n\t\t\t/** Source Branch to copy. */\n\t\t\tbranch: string;\n\t\t\t/** Entry on the source Branch's current tip ancestry. Defaults to the current tip. */\n\t\t\tentryId?: string;\n\t\t\t/**\n\t\t\t * Whether the fork includes the selected entry or stops at its parent.\n\t\t\t * Defaults to including the selected entry.\n\t\t\t */\n\t\t\tposition?: \"before\" | \"at\";\n\t\t\t/** Optional destination session id. */\n\t\t\tid?: string;\n\t }\n\t| {\n\t\t\t/**\n\t\t\t * Copy the whole conversation tree and every Branch tip. Each configured\n\t\t\t * AgentLane copies configuration plus fresh idle state; data-only Branches\n\t\t\t * remain data-only. Operation/pending/result/usage state is excluded.\n\t\t\t */\n\t\t\tscope: \"tree\";\n\t\t\t/** Optional destination session id. */\n\t\t\tid?: string;\n\t };\n\nexport interface SessionRepo<\n\tTMetadata extends SessionMetadata = SessionMetadata,\n\tTCreateOptions extends { id?: string; parentSessionId?: string } = SessionCreateOptions,\n\tTListOptions = void,\n> {\n\tcreate(options: TCreateOptions, context: Context): Promise<Session<TMetadata>>;\n\topen(metadata: TMetadata, context: Context): Promise<Session<TMetadata>>;\n\tlist(options: TListOptions | undefined, context: Context): Promise<TMetadata[]>;\n\tdelete(metadata: TMetadata, context: Context): Promise<void>;\n\tfork(source: TMetadata, options: ForkOptions, context: Context): Promise<Session<TMetadata>>;\n}\n"]}
@@ -0,0 +1,9 @@
1
+ /** Copy only the uniform operation scope when constructing a successor leaf. */
2
+ export function operationScopeOf(state) {
3
+ return {
4
+ control: state.control,
5
+ settings: state.settings,
6
+ latestAssistantEntryId: state.latestAssistantEntryId,
7
+ };
8
+ }
9
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/harness/session/types.ts"],"names":[],"mappings":"AA4UA,gFAAgF;AAChF,MAAM,UAAU,gBAAgB,CAAC,KAAqB,EAAkB;IACvE,OAAO;QACN,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,sBAAsB,EAAE,KAAK,CAAC,sBAAsB;KACpD,CAAC;AAAA,CACF","sourcesContent":["import type { JsonValue } from \"@m4ike1/chord\";\nimport type { AssistantMessage, StopReason, Usage } from \"@m4ike1/ion-ai\";\nimport type { AgentMessage, QueueMode, ThinkingLevel } from \"../../types.ts\";\nimport type { BranchPreparation } from \"../compaction/branch-summarization.ts\";\nimport type { CompactionPreparation, CompactionSettings } from \"../compaction/compaction.ts\";\nimport type { Context } from \"../context.ts\";\nimport type { AgentHarnessStreamOptions } from \"../types.ts\";\nimport type { ListElement, ListReadOptions, ListWrite, StoredValue, Value, ValueList, ValueWrite } from \"./values.ts\";\n\nexport type { JsonValue } from \"@m4ike1/chord\";\n\nexport type SettledAssistantMessage = AssistantMessage & {\n\tstopReason: Exclude<StopReason, \"pending\">;\n};\n\nexport type EntryType = \"message\" | \"compaction\" | \"branch_summary\" | \"custom\";\n\nexport interface EntryBase {\n\tid: string;\n\tparentId: string | null;\n\tseq: number;\n\ttimestamp: number;\n\ttype: EntryType;\n\tcustomType?: string;\n}\n\nexport interface MessageEntry extends EntryBase {\n\ttype: \"message\";\n\tmessage: AgentMessage;\n\tterminate?: true;\n}\n\nexport interface CompactionEntry extends EntryBase {\n\ttype: \"compaction\";\n\tsummary: string;\n\tretainedTail: AgentMessage[];\n\ttokensBefore: number;\n\tdetails?: JsonValue;\n\tusage?: Usage;\n\tfromHook: boolean;\n}\n\nexport interface BranchSummaryEntry extends EntryBase {\n\ttype: \"branch_summary\";\n\tfromId: string | null;\n\tsummary: string;\n\tdetails?: JsonValue;\n\tusage?: Usage;\n\tfromHook: boolean;\n}\n\nexport interface CustomEntry extends EntryBase {\n\ttype: \"custom\";\n\tcustomType: string;\n\tdata?: JsonValue;\n}\n\n/** Convert an application-defined custom entry into model context. */\nexport type EntryProjector = (\n\tentry: CustomEntry,\n\tcontext: Context,\n) => AgentMessage[] | undefined | Promise<AgentMessage[] | undefined>;\n\nexport type Entry = MessageEntry | CompactionEntry | BranchSummaryEntry | CustomEntry;\n\n/** Entry supplied to a transaction before storage assigns sequence and timestamp. */\nexport type NewEntry<TEntry extends Entry = Entry> = TEntry extends Entry ? Omit<TEntry, \"seq\" | \"timestamp\"> : never;\n\nexport interface LaneConfiguration {\n\tmodel: { provider: string; modelId: string };\n\tthinkingLevel: ThinkingLevel;\n\tactiveToolNames: string[];\n}\n\nexport interface OperationMeta {\n\toperationId: string;\n\tlane: string;\n\tsourceTipId: string | null;\n\tstartedAt: number;\n\tintent:\n\t\t| { kind: \"run\"; promptEntryIds: string[] }\n\t\t| { kind: \"compaction\"; customInstructions?: string }\n\t\t| {\n\t\t\t\tkind: \"navigation\";\n\t\t\t\ttargetId: string | null;\n\t\t\t\tsummarize: boolean;\n\t\t\t\tlabel?: string;\n\t\t\t\tcustomInstructions?: string;\n\t\t };\n}\n\nexport type Control =\n\t| { status: \"running\" }\n\t| {\n\t\t\tstatus: \"cancel_requested\";\n\t\t\trequestedAt: number;\n\t };\n\nexport interface OperationError {\n\tcode: string;\n\tmessage: string;\n\tdetails?: JsonValue;\n}\n\nexport type TerminalStatus = \"completed\" | \"declined\" | \"aborted\" | \"failed\";\n\n/** Immutable lane-lived observation record written by one terminal transaction. */\nexport interface OperationResultRecord {\n\toperationId: string;\n\tkind: OperationMeta[\"intent\"][\"kind\"];\n\tstatus: TerminalStatus;\n\terror?: OperationError;\n\tfromTipId: string | null;\n\ttipId: string | null;\n\tstartedAt: number;\n\tendedAt: number;\n}\n\nexport type Continuation =\n\t| { kind: \"need_assistant\"; overflowRecoveryUsed: boolean }\n\t| { kind: \"may_finish\"; includeFinalAssistant: boolean };\n\n/** Checkpoint payload; the flat leaf literal replaces the old nested phase tag. */\nexport interface CheckpointData {\n\tcontinuation: Continuation;\n\ttriggerEntryId: string;\n}\n\nexport type InboxItemKind = \"steer\" | \"followUp\" | \"nextRun\" | \"write\";\n\nexport interface InboxItem {\n\tentryId: string;\n\tkind: InboxItemKind;\n}\n\nexport interface NormalizedRetryPolicy {\n\tmaxAttempts: number;\n\tbaseDelayMs: number;\n\tmaxAgentDelayMs: number;\n}\n\nexport interface GenerationContext {\n\tstepId: string;\n\ttriggerEntryId: string;\n\tconfiguration: LaneConfiguration;\n\tstreamOptions: AgentHarnessStreamOptions;\n\tretryPolicy: NormalizedRetryPolicy;\n\toverflowRecoveryUsed: boolean;\n}\n\ninterface ToolCallSource {\n\t/** Zero-based index in the assistant message's complete content array, not a filtered tool-call ordinal. */\n\tsourceIndex: number;\n\tresultEntryId: string;\n}\n\nexport type ToolCall = ToolCallSource &\n\t(\n\t\t| { status: \"planned\" }\n\t\t| { status: \"effect_pending\"; replay: \"never\" | \"safe\" }\n\t\t| { status: \"outcome_ready\"; terminate: boolean }\n\t\t| { status: \"completed\"; terminate: boolean }\n\t);\n\nexport interface ToolBatch {\n\tassistantEntryId: string;\n\tconfiguration: LaneConfiguration;\n\tturnId: string;\n\tcalls: ToolCall[];\n}\n\nexport interface SummaryContext {\n\tresultEntryId: string;\n\tconfiguration: LaneConfiguration;\n\tstreamOptions: AgentHarnessStreamOptions;\n\tretryPolicy: NormalizedRetryPolicy;\n}\n\n/*\n * Durable operation state is one flat union with one family-neutral discriminator\n * per dispatcher leaf. ToolBatch/ToolCall remain the nested child collection state\n * machine, and cancellation stays orthogonal via Control.\n */\n\nexport interface Cancellable {\n\tcontrol: Control;\n}\n\nexport interface RunSettings {\n\tcompaction: CompactionSettings;\n\tsteeringMode: QueueMode;\n\tfollowUpMode: QueueMode;\n\ttoolExecution: \"sequential\" | \"parallel\";\n}\n\n/** Uniform scope carried by every operation leaf. */\nexport interface OperationScope extends Cancellable {\n\tsettings: RunSettings;\n\tlatestAssistantEntryId: string | null;\n}\n\n/** Shared backoff data for every retry-wait leaf. */\nexport interface RetryWait {\n\tnextAttempt: number;\n\tnotBefore: number;\n\terrorMessage: string;\n}\n\nexport interface AssistantGenerationScope {\n\tgenerationContext: GenerationContext;\n}\n\nexport type ResultBoundary =\n\t| { kind: \"resume_checkpoint\"; resumeAfter: CheckpointData }\n\t| { kind: \"finish\" }\n\t| { kind: \"commit_navigation\"; targetId: string; label?: string };\n\nexport interface SummaryTask {\n\ttaskId: string;\n\treason?: \"manual\" | \"threshold\" | \"overflow\";\n\tcustomInstructions?: string;\n\tboundary: ResultBoundary;\n}\n\nexport interface SummaryGenerationScope {\n\ttask: SummaryTask;\n\tsummaryContext: SummaryContext;\n}\n\nexport interface SummaryGenerationReady extends SummaryGenerationScope {\n\tnextAttempt: number;\n}\n\nexport interface SummaryGenerationEffectPending extends SummaryGenerationScope {\n\tattempt: number;\n\trequest?: { index: number; usageId: string };\n\tusageIds: string[];\n}\n\nexport interface SummaryGenerationRetryWait extends SummaryGenerationScope, RetryWait {}\n\nexport interface DeferredScope extends OperationScope {\n\tstepId: string;\n\tsourceEntryId: string;\n\tpoll: number;\n\tconfiguration: LaneConfiguration;\n\tstreamOptions: AgentHarnessStreamOptions;\n}\n\nexport interface StartingOperation extends OperationScope {\n\tat: \"starting\";\n}\n\nexport interface CheckpointOperation extends OperationScope, CheckpointData {\n\tat: \"checkpoint\";\n}\n\nexport interface AssistantReadyOperation extends OperationScope, AssistantGenerationScope {\n\tat: \"assistant.ready\";\n\tnextAttempt: number;\n}\n\nexport interface AssistantEffectPendingOperation extends OperationScope, AssistantGenerationScope {\n\tat: \"assistant.effect_pending\";\n\tattempt: number;\n\tresponseEntryId: string;\n\tusageId: string;\n\tintendedOutputLimit: number;\n\tcontextWindow: number;\n}\n\nexport interface AssistantRetryWaitOperation extends OperationScope, AssistantGenerationScope, RetryWait {\n\tat: \"assistant.retry_wait\";\n}\n\nexport interface ToolsOperation extends OperationScope {\n\tat: \"tools\";\n\tbatch: ToolBatch;\n}\n\nexport interface DeferredSuspendedOperation extends DeferredScope {\n\tat: \"deferred.suspended\";\n}\n\nexport interface DeferredEffectPendingOperation extends DeferredScope {\n\tat: \"deferred.effect_pending\";\n\tresponseEntryId: string;\n\tusageId: string;\n}\n\nexport interface SummaryDecidingOperation extends OperationScope {\n\tat: \"summary.deciding\";\n\ttask: SummaryTask;\n}\n\nexport interface SummaryReadyOperation extends OperationScope, SummaryGenerationReady {\n\tat: \"summary.ready\";\n}\n\nexport interface SummaryEffectPendingOperation extends OperationScope, SummaryGenerationEffectPending {\n\tat: \"summary.effect_pending\";\n}\n\nexport interface SummaryRetryWaitOperation extends OperationScope, SummaryGenerationRetryWait {\n\tat: \"summary.retry_wait\";\n}\n\nexport interface NavigationReadyToCommitOperation extends OperationScope {\n\tat: \"navigation.ready_to_commit\";\n\t/** Unsummarized navigation may target the branch root (null). */\n\ttargetId: string | null;\n\tlabel?: string;\n}\n\n/** Flat durable operation state: exactly 13 family-neutral dispatcher leaves. */\nexport type OperationState =\n\t| StartingOperation\n\t| CheckpointOperation\n\t| AssistantReadyOperation\n\t| AssistantEffectPendingOperation\n\t| AssistantRetryWaitOperation\n\t| ToolsOperation\n\t| DeferredSuspendedOperation\n\t| DeferredEffectPendingOperation\n\t| SummaryDecidingOperation\n\t| SummaryReadyOperation\n\t| SummaryEffectPendingOperation\n\t| SummaryRetryWaitOperation\n\t| NavigationReadyToCommitOperation;\n\nexport type OperationAt = OperationState[\"at\"];\n\n/** Copy only the uniform operation scope when constructing a successor leaf. */\nexport function operationScopeOf(state: OperationState): OperationScope {\n\treturn {\n\t\tcontrol: state.control,\n\t\tsettings: state.settings,\n\t\tlatestAssistantEntryId: state.latestAssistantEntryId,\n\t};\n}\n\nexport type Operation = { meta: OperationMeta; state: OperationState };\n\nexport interface LaneState {\n\tcurrentOperationId: string | null;\n\tlastOperationId: string | null;\n\tinbox: InboxItem[];\n}\n\nexport type PendingEntry =\n\t| { type: \"message\"; payload: AgentMessage }\n\t| { type: \"custom\"; customType: string; payload?: JsonValue };\n\nexport interface DurableFileOperations {\n\tread: string[];\n\twritten: string[];\n\tedited: string[];\n}\n\nexport type DurableStructuralPreparation =\n\t| {\n\t\t\tkind: \"compaction\";\n\t\t\tmessagesToSummarize: CompactionPreparation[\"messagesToSummarize\"];\n\t\t\tturnPrefixMessages: CompactionPreparation[\"turnPrefixMessages\"];\n\t\t\tretainedTail: CompactionPreparation[\"retainedTail\"];\n\t\t\tisSplitTurn: boolean;\n\t\t\ttokensBefore: number;\n\t\t\tpreviousSummary?: string;\n\t\t\tfileOps: DurableFileOperations;\n\t\t\tsettings: CompactionSettings;\n\t }\n\t| {\n\t\t\tkind: \"branch_summary\";\n\t\t\tmessages: BranchPreparation[\"messages\"];\n\t\t\tfileOps: DurableFileOperations;\n\t\t\ttotalTokens: number;\n\t };\n\nexport interface UsageRow {\n\tid: string;\n\tseq: number;\n\tusage: Usage;\n\tentryId?: string;\n\tadjustment: boolean;\n\tdetails?: JsonValue;\n}\n\nexport interface EntryWrite {\n\tkind: \"entry\";\n\tentry: NewEntry;\n}\n\nexport interface UsageWrite {\n\tkind: \"usage\";\n\trow: Omit<UsageRow, \"seq\">;\n}\n\nexport type Write = EntryWrite | UsageWrite | ValueWrite | ListWrite;\n\nexport interface CommitResult {\n\tfirstSeq: number;\n\tseqs: number[];\n\ttimestamp: number;\n\t/** Session totals immediately after this commit was applied. */\n\tstats: SessionStats;\n}\n\nexport interface EntryStructure {\n\tid: string;\n\tparentId: string | null;\n\tseq: number;\n\ttimestamp: number;\n\ttype: EntryType;\n\tcustomType?: string;\n}\n\nexport interface EntryCursor {\n\tseq: number;\n}\n\nexport interface BranchScan {\n\tstart?: string;\n\tstopAtType?: EntryType;\n\tstopAtId?: string;\n\ttype?: EntryType;\n\tcustomType?: string;\n\torder?: \"newestFirst\" | \"oldestFirst\";\n\tlimit?: number;\n\tcursor?: EntryCursor;\n}\n\nexport type StorageBranchScan = BranchScan & { start: string };\n\nexport interface EntryScan {\n\ttype?: EntryType;\n\tcustomType?: string;\n\tfromSeq?: number;\n\ttoSeq?: number;\n\torder?: \"asc\" | \"desc\";\n\tlimit?: number;\n}\n\nexport interface UsageScan {\n\tfromSeq?: number;\n\ttoSeq?: number;\n\torder?: \"asc\" | \"desc\";\n\tlimit?: number;\n}\n\nexport interface SessionStats {\n\tmessageCount: number;\n\tusage: Usage;\n}\n\nexport interface Storage {\n\tcommit(writes: Write[], context: Context): Promise<CommitResult>;\n\tgetEntries(ids: string[], context: Context): Promise<Map<string, Entry>>;\n\tgetValue<T>(address: Value<T>, context: Context): Promise<StoredValue<T> | undefined>;\n\tscanValues<T>(prefix: Value<T>, context: Context): Promise<StoredValue<T>[]>;\n\treadList<T>(\n\t\taddress: ValueList<T>,\n\t\toptions: ListReadOptions | undefined,\n\t\tcontext: Context,\n\t): Promise<ListElement<T>[]>;\n\tscanBranch(query: StorageBranchScan, context: Context): Promise<Entry[]>;\n\tscanBranchStructure(query: StorageBranchScan, context: Context): Promise<EntryStructure[]>;\n\tscanEntries(query: EntryScan, context: Context): Promise<Entry[]>;\n\tscanUsage(query: UsageScan, context: Context): Promise<UsageRow[]>;\n\tgetStats(context: Context): Promise<SessionStats>;\n\tclose(context: Context): Promise<void>;\n}\n\nexport interface SessionMetadata {\n\tid: string;\n\tcreatedAt: number;\n\tstorageVersion: number;\n\tcwd?: string;\n\tparentSessionId?: string;\n\tlegacyParentSessionPath?: string;\n}\n\nexport interface IdGenerator {\n\tnext(timestampMs?: number): string;\n}\n\nexport interface EntryQuery {\n\ttype?: EntryType;\n\tcustomType?: string;\n\torder?: \"asc\" | \"desc\";\n\tlimit?: number;\n\tcursor?: EntryCursor;\n}\n\nexport interface SessionReader {\n\tgetEntries(ids: string[], context: Context): Promise<Map<string, Entry>>;\n\tgetStats(context: Context): Promise<SessionStats>;\n\tgetValue<T>(address: Value<T>, context: Context): Promise<StoredValue<T> | undefined>;\n\tscanValues<T>(prefix: Value<T>, context: Context): Promise<StoredValue<T>[]>;\n\treadList<T>(\n\t\taddress: ValueList<T>,\n\t\toptions: ListReadOptions | undefined,\n\t\tcontext: Context,\n\t): Promise<ListElement<T>[]>;\n\t/** Scan a branch from an explicit entry while this reader capability remains valid. */\n\tscanBranch(query: StorageBranchScan, context: Context): Promise<Entry[]>;\n}\n\n/** Exclusive keyless mutation barrier for one Session. */\nexport interface SessionMutation extends SessionReader {\n\t/** Exactly zero or one commit attempt. A second attempt rejects. */\n\tcommit(writes: Write[], context: Context): Promise<CommitResult>;\n\t/** Wait for any commit attempt, invalidate the capability, and release the barrier. */\n\tend(context: Context): Promise<void>;\n}\n\n/** Callback-scoped mutation capability without authority to release its Session barrier. */\nexport type SessionMutator = Omit<SessionMutation, \"end\">;\n\nexport type SessionMutationCallback<T> = (mutator: SessionMutator, context: Context) => T | Promise<T>;\n\nexport interface Branch {\n\treadonly name: string;\n\tgetTipId(context: Context): Promise<string | null>;\n\tfindEntries(query: BranchScan | undefined, context: Context): Promise<Entry[]>;\n\tfindEntry(query: BranchScan | undefined, context: Context): Promise<Entry | undefined>;\n\tappendMessage(message: AgentMessage, context: Context): Promise<string>;\n\tappendCustomEntry(customType: string, data: JsonValue | undefined, context: Context): Promise<string>;\n}\n\nexport interface Session<TMetadata extends SessionMetadata = SessionMetadata> extends SessionReader {\n\treadonly metadata: TMetadata;\n\treadonly idGenerator: IdGenerator;\n\tgetEntry(id: string, context: Context): Promise<Entry | undefined>;\n\tgetStats(context: Context): Promise<SessionStats>;\n\tgetName(context: Context): Promise<string | undefined>;\n\tgetLabel(targetId: string, context: Context): Promise<string | undefined>;\n\tfindEntries(query: EntryQuery | undefined, context: Context): Promise<Entry[]>;\n\tfindEntry(query: EntryQuery | undefined, context: Context): Promise<Entry | undefined>;\n\tbranch(name: string, context: Context): Promise<Branch | undefined>;\n\tcreateBranch(name: string, at: string | null, context: Context): Promise<Branch>;\n\tbeginMutation(context: Context): Promise<SessionMutation>;\n\t/**\n\t * Trusted exclusive callback over the Session mutation line. Calling a public Session writer from\n\t * this callback queues it behind the callback; awaiting that nested writer therefore deadlocks.\n\t * Use the supplied mutator for the callback's sole commit.\n\t */\n\tmutate<T>(mutation: SessionMutationCallback<T>, context: Context): Promise<T>;\n\tsetValue<T>(address: Value<T>, next: NoInfer<T>, context: Context): Promise<void>;\n\tdeleteValue<T>(address: Value<T>, context: Context): Promise<void>;\n\tappendList<T>(address: ValueList<T>, element: NoInfer<T>, context: Context): Promise<void>;\n\tdeleteList<T>(address: ValueList<T>, context: Context): Promise<void>;\n\tsetName(name: string | undefined, context: Context): Promise<void>;\n\tsetLabel(targetId: string, label: string | undefined, context: Context): Promise<void>;\n\tclose(context: Context): Promise<void>;\n}\n\nexport interface SessionCreateOptions {\n\tid?: string;\n\tparentSessionId?: string;\n}\n\nexport type ForkOptions =\n\t| {\n\t\t\t/**\n\t\t\t * Copy one path from a complete configured source AgentLane under the same\n\t\t\t * Branch name, with copied configuration and fresh idle lane state.\n\t\t\t */\n\t\t\tscope: \"branch\";\n\t\t\t/** Source Branch to copy. */\n\t\t\tbranch: string;\n\t\t\t/** Entry on the source Branch's current tip ancestry. Defaults to the current tip. */\n\t\t\tentryId?: string;\n\t\t\t/**\n\t\t\t * Whether the fork includes the selected entry or stops at its parent.\n\t\t\t * Defaults to including the selected entry.\n\t\t\t */\n\t\t\tposition?: \"before\" | \"at\";\n\t\t\t/** Optional destination session id. */\n\t\t\tid?: string;\n\t }\n\t| {\n\t\t\t/**\n\t\t\t * Copy the whole conversation tree and every Branch tip. Each configured\n\t\t\t * AgentLane copies configuration plus fresh idle state; data-only Branches\n\t\t\t * remain data-only. Operation/pending/result/usage state is excluded.\n\t\t\t */\n\t\t\tscope: \"tree\";\n\t\t\t/** Optional destination session id. */\n\t\t\tid?: string;\n\t };\n\nexport interface SessionRepo<\n\tTMetadata extends SessionMetadata = SessionMetadata,\n\tTCreateOptions extends { id?: string; parentSessionId?: string } = SessionCreateOptions,\n\tTListOptions = void,\n> {\n\tcreate(options: TCreateOptions, context: Context): Promise<Session<TMetadata>>;\n\topen(metadata: TMetadata, context: Context): Promise<Session<TMetadata>>;\n\tlist(options: TListOptions | undefined, context: Context): Promise<TMetadata[]>;\n\tdelete(metadata: TMetadata, context: Context): Promise<void>;\n\tfork(source: TMetadata, options: ForkOptions, context: Context): Promise<Session<TMetadata>>;\n}\n"]}