@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,600 +0,0 @@
1
- var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) {
2
- if (value !== null && value !== void 0) {
3
- if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
4
- var dispose, inner;
5
- if (async) {
6
- if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
7
- dispose = value[Symbol.asyncDispose];
8
- }
9
- if (dispose === void 0) {
10
- if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
11
- dispose = value[Symbol.dispose];
12
- if (async) inner = dispose;
13
- }
14
- if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
15
- if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };
16
- env.stack.push({ value: value, dispose: dispose, async: async });
17
- }
18
- else if (async) {
19
- env.stack.push({ async: true });
20
- }
21
- return value;
22
- };
23
- var __disposeResources = (this && this.__disposeResources) || (function (SuppressedError) {
24
- return function (env) {
25
- function fail(e) {
26
- env.error = env.hasError ? new SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;
27
- env.hasError = true;
28
- }
29
- var r, s = 0;
30
- function next() {
31
- while (r = env.stack.pop()) {
32
- try {
33
- if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);
34
- if (r.dispose) {
35
- var result = r.dispose.call(r.value);
36
- if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });
37
- }
38
- else s |= 1;
39
- }
40
- catch (e) {
41
- fail(e);
42
- }
43
- }
44
- if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();
45
- if (env.hasError) throw env.error;
46
- }
47
- return next();
48
- };
49
- })(typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
50
- var e = new Error(message);
51
- return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
52
- });
53
- import { deepStrictEqual, ok, rejects, strictEqual } from "node:assert/strict";
54
- import { BACKGROUND_CONTEXT } from "../../../context.js";
55
- import { insertEntry, insertUsage } from "../../commit.js";
56
- import { appendList, branchTip, deleteList, deleteValue, entryLabel, list, pendingEntry, setValue, value, } from "../../values.js";
57
- const MESSAGE_TIMESTAMP = 1_650_000_000_000;
58
- const testName = value("test.session.name");
59
- const testValue = (key) => value("test.value", key);
60
- const testValuePrefix = (prefix = "") => value("test.value", prefix);
61
- const testList = (key) => list("test.list", key);
62
- function createCase(factory, group, name, test) {
63
- return {
64
- group,
65
- name,
66
- async run() {
67
- const env_1 = { stack: [], error: void 0, hasError: false };
68
- try {
69
- const fixture = __addDisposableResource(env_1, await factory(), true);
70
- await test(fixture);
71
- }
72
- catch (e_1) {
73
- env_1.error = e_1;
74
- env_1.hasError = true;
75
- }
76
- finally {
77
- const result_1 = __disposeResources(env_1);
78
- if (result_1)
79
- await result_1;
80
- }
81
- },
82
- };
83
- }
84
- function usage(input, output, options = {}) {
85
- return {
86
- input,
87
- output,
88
- cacheRead: input + 1,
89
- cacheWrite: output + 1,
90
- ...(options.cacheWrite1h === undefined ? {} : { cacheWrite1h: options.cacheWrite1h }),
91
- ...(options.reasoning === undefined ? {} : { reasoning: options.reasoning }),
92
- totalTokens: input + output,
93
- cost: {
94
- input: input / 100,
95
- output: output / 100,
96
- cacheRead: (input + 1) / 100,
97
- cacheWrite: (output + 1) / 100,
98
- total: (input + output + 2) / 100,
99
- },
100
- };
101
- }
102
- function zeroUsage() {
103
- return {
104
- input: 0,
105
- output: 0,
106
- cacheRead: 0,
107
- cacheWrite: 0,
108
- totalTokens: 0,
109
- cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },
110
- };
111
- }
112
- function userEntry(id, parentId = null, text = id) {
113
- return {
114
- id,
115
- parentId,
116
- type: "message",
117
- message: {
118
- role: "user",
119
- content: [{ type: "text", text }],
120
- timestamp: MESSAGE_TIMESTAMP,
121
- },
122
- };
123
- }
124
- function customEntry(id, parentId, customType = "note", data = { id }) {
125
- return { id, parentId, type: "custom", customType, data };
126
- }
127
- function compactionEntry(id, parentId) {
128
- return {
129
- id,
130
- parentId,
131
- type: "compaction",
132
- summary: `summary:${id}`,
133
- retainedTail: [],
134
- tokensBefore: 10,
135
- fromHook: false,
136
- };
137
- }
138
- // EntryStructure is included for scanBranchStructure conformance, especially SQLite's payload-free branch scans.
139
- function ids(entries) {
140
- return entries.map((entry) => entry.id);
141
- }
142
- function assertStrictlyIncreasing(values) {
143
- for (let index = 1; index < values.length; index++) {
144
- ok(values[index - 1] < values[index], `Expected ${values.join(", ")} to be strictly increasing`);
145
- }
146
- }
147
- async function assertCommitStats(storage, result) {
148
- deepStrictEqual(result.stats, await storage.getStats(BACKGROUND_CONTEXT));
149
- }
150
- /** Creates fresh, runner-independent cases for the durable Storage contract. */
151
- export function createStorageConformance(factory) {
152
- return [
153
- createCase(factory, "transactions", "commits mixed writes atomically in write order", async ({ storage }) => {
154
- const result = await storage.commit([
155
- insertEntry(userEntry("entry")),
156
- setValue(testName, "session"),
157
- insertUsage({ id: "usage", usage: usage(2, 3), adjustment: false, entryId: "entry" }),
158
- ], BACKGROUND_CONTEXT);
159
- strictEqual(result.seqs.length, 3);
160
- strictEqual(result.firstSeq, result.seqs[0]);
161
- await assertCommitStats(storage, result);
162
- assertStrictlyIncreasing(result.seqs);
163
- ok(Number.isSafeInteger(result.timestamp) && result.timestamp >= 0);
164
- deepStrictEqual(await storage.getEntries(["entry"], BACKGROUND_CONTEXT), new Map([["entry", { ...userEntry("entry"), seq: result.seqs[0], timestamp: result.timestamp }]]));
165
- deepStrictEqual(await storage.getValue(testName, BACKGROUND_CONTEXT), {
166
- address: testName,
167
- value: "session",
168
- seq: result.seqs[1],
169
- });
170
- deepStrictEqual(await storage.scanUsage({ order: "asc" }, BACKGROUND_CONTEXT), [
171
- { id: "usage", seq: result.seqs[2], usage: usage(2, 3), adjustment: false, entryId: "entry" },
172
- ]);
173
- }),
174
- createCase(factory, "transactions", "rolls back every store when a mixed transaction fails", async ({ storage }) => {
175
- await storage.commit([insertEntry(userEntry("root")), insertUsage({ id: "taken", usage: usage(1, 1), adjustment: false })], BACKGROUND_CONTEXT);
176
- const entriesBefore = await storage.scanEntries({ order: "asc" }, BACKGROUND_CONTEXT);
177
- const usageBefore = await storage.scanUsage({ order: "asc" }, BACKGROUND_CONTEXT);
178
- const statsBefore = await storage.getStats(BACKGROUND_CONTEXT);
179
- await rejects(storage.commit([
180
- setValue(testName, "transient"),
181
- insertEntry(customEntry("transient-entry", "root")),
182
- insertUsage({ id: "transient-usage", usage: usage(5, 8), adjustment: true }),
183
- insertEntry(customEntry("taken", "root")),
184
- ], BACKGROUND_CONTEXT));
185
- deepStrictEqual(await storage.scanEntries({ order: "asc" }, BACKGROUND_CONTEXT), entriesBefore);
186
- deepStrictEqual(await storage.scanUsage({ order: "asc" }, BACKGROUND_CONTEXT), usageBefore);
187
- deepStrictEqual(await storage.getStats(BACKGROUND_CONTEXT), statsBefore);
188
- strictEqual(await storage.getValue(testName, BACKGROUND_CONTEXT), undefined);
189
- }),
190
- createCase(factory, "transactions", "preserves overwritten and deleted values when a transaction fails", async ({ storage }) => {
191
- await storage.commit([
192
- setValue(testValue("overwritten"), "original"),
193
- setValue(testValue("deleted"), { kept: true }),
194
- insertEntry(userEntry("taken")),
195
- ], BACKGROUND_CONTEXT);
196
- const overwrittenBefore = await storage.getValue(testValue("overwritten"), BACKGROUND_CONTEXT);
197
- const deletedBefore = await storage.getValue(testValue("deleted"), BACKGROUND_CONTEXT);
198
- await rejects(storage.commit([
199
- setValue(testValue("overwritten"), "transient"),
200
- deleteValue(testValue("deleted")),
201
- insertEntry(customEntry("transient", "taken")),
202
- insertEntry(customEntry("taken", null)),
203
- ], BACKGROUND_CONTEXT));
204
- deepStrictEqual(await storage.getValue(testValue("overwritten"), BACKGROUND_CONTEXT), overwrittenBefore);
205
- deepStrictEqual(await storage.getValue(testValue("deleted"), BACKGROUND_CONTEXT), deletedBefore);
206
- strictEqual((await storage.getEntries(["transient"], BACKGROUND_CONTEXT)).has("transient"), false);
207
- }),
208
- createCase(factory, "transactions", "enforces one shared entry and usage id namespace", async ({ storage }) => {
209
- await storage.commit([
210
- insertEntry(userEntry("existing-entry")),
211
- insertUsage({ id: "existing-usage", usage: usage(1, 1), adjustment: false }),
212
- ], BACKGROUND_CONTEXT);
213
- await rejects(storage.commit([insertUsage({ id: "existing-entry", usage: usage(2, 2), adjustment: false })], BACKGROUND_CONTEXT));
214
- await rejects(storage.commit([insertEntry(customEntry("existing-usage", null))], BACKGROUND_CONTEXT));
215
- for (const [id, writes] of [
216
- [
217
- "entry-then-usage",
218
- [
219
- insertEntry(customEntry("entry-then-usage", null)),
220
- insertUsage({ id: "entry-then-usage", usage: usage(3, 3), adjustment: false }),
221
- ],
222
- ],
223
- [
224
- "usage-then-entry",
225
- [
226
- insertUsage({ id: "usage-then-entry", usage: usage(4, 4), adjustment: false }),
227
- insertEntry(customEntry("usage-then-entry", null)),
228
- ],
229
- ],
230
- ]) {
231
- await rejects(storage.commit(writes, BACKGROUND_CONTEXT), `Expected duplicate id ${id} to reject`);
232
- }
233
- deepStrictEqual(ids(await storage.scanEntries({ order: "asc" }, BACKGROUND_CONTEXT)), ["existing-entry"]);
234
- deepStrictEqual((await storage.scanUsage({ order: "asc" }, BACKGROUND_CONTEXT)).map((row) => row.id), ["existing-usage"]);
235
- }),
236
- createCase(factory, "transactions", "resolves parents only from prior entries and earlier writes", async ({ storage }) => {
237
- await storage.commit([insertEntry(userEntry("root"))], BACKGROUND_CONTEXT);
238
- await storage.commit([insertEntry(customEntry("child", "root")), insertEntry(customEntry("grandchild", "child"))], BACKGROUND_CONTEXT);
239
- deepStrictEqual(ids(await storage.scanBranch({ start: "grandchild", order: "oldestFirst" }, BACKGROUND_CONTEXT)), ["root", "child", "grandchild"]);
240
- await rejects(storage.commit([
241
- insertEntry(customEntry("before-parent", "later-parent")),
242
- insertEntry(customEntry("later-parent", "root")),
243
- setValue(entryLabel("before-parent"), "transient"),
244
- ], BACKGROUND_CONTEXT));
245
- await rejects(storage.commit([insertEntry(customEntry("orphan", "missing"))], BACKGROUND_CONTEXT));
246
- await storage.commit([insertUsage({ id: "usage-is-not-parent", usage: usage(1, 1), adjustment: false })], BACKGROUND_CONTEXT);
247
- await rejects(storage.commit([insertEntry(customEntry("usage-child", "usage-is-not-parent"))], BACKGROUND_CONTEXT));
248
- deepStrictEqual(await storage.getEntries(["before-parent", "later-parent", "orphan", "usage-child"], BACKGROUND_CONTEXT), new Map());
249
- strictEqual(await storage.getValue(entryLabel("before-parent"), BACKGROUND_CONTEXT), undefined);
250
- }),
251
- createCase(factory, "transactions", "places pending content under its reserved entry id", async ({ storage }) => {
252
- const entry = userEntry("reserved", null, "queued");
253
- await storage.commit([
254
- setValue(pendingEntry(entry.id), { type: "message", payload: entry.message }),
255
- setValue(branchTip("main"), null),
256
- ], BACKGROUND_CONTEXT);
257
- strictEqual((await storage.getEntries([entry.id], BACKGROUND_CONTEXT)).has(entry.id), false);
258
- deepStrictEqual((await storage.getValue(pendingEntry(entry.id), BACKGROUND_CONTEXT))?.value, {
259
- type: "message",
260
- payload: entry.message,
261
- });
262
- strictEqual((await storage.getValue(branchTip("main"), BACKGROUND_CONTEXT))?.value, null);
263
- const placement = await storage.commit([insertEntry(entry), deleteValue(pendingEntry(entry.id)), setValue(branchTip("main"), entry.id)], BACKGROUND_CONTEXT);
264
- deepStrictEqual(await storage.getEntries([entry.id], BACKGROUND_CONTEXT), new Map([[entry.id, { ...entry, seq: placement.seqs[0], timestamp: placement.timestamp }]]));
265
- strictEqual(await storage.getValue(pendingEntry(entry.id), BACKGROUND_CONTEXT), undefined);
266
- deepStrictEqual(await storage.getValue(branchTip("main"), BACKGROUND_CONTEXT), {
267
- address: branchTip("main"),
268
- value: entry.id,
269
- seq: placement.seqs[2],
270
- });
271
- }),
272
- createCase(factory, "values", "sets, replaces, deletes, and recreates values without tombstones", async ({ storage }) => {
273
- const first = await storage.commit([
274
- setValue(testValue("prefix/b"), 1),
275
- setValue(testValue("prefix/a"), 2),
276
- setValue(testValue("other"), 3),
277
- setValue(testValue("prefix/\ue000"), 4),
278
- setValue(testValue("prefix/\u{10000}"), 5),
279
- setValue(testValue("prefix/a"), null),
280
- ], BACKGROUND_CONTEXT);
281
- deepStrictEqual(await storage.getValue(testValue("prefix/a"), BACKGROUND_CONTEXT), {
282
- address: testValue("prefix/a"),
283
- value: null,
284
- seq: first.seqs[5],
285
- });
286
- const second = await storage.commit([
287
- deleteValue(testValue("prefix/a")),
288
- deleteValue(testValue("absent")),
289
- setValue(testValue("prefix/a"), "recreated"),
290
- ], BACKGROUND_CONTEXT);
291
- deepStrictEqual(await storage.scanValues(testValuePrefix("prefix/"), BACKGROUND_CONTEXT), [
292
- { address: testValue("prefix/a"), value: "recreated", seq: second.seqs[2] },
293
- { address: testValue("prefix/b"), value: 1, seq: first.seqs[0] },
294
- { address: testValue("prefix/\ue000"), value: 4, seq: first.seqs[3] },
295
- { address: testValue("prefix/\u{10000}"), value: 5, seq: first.seqs[4] },
296
- ]);
297
- strictEqual(await storage.getValue(testValue("absent"), BACKGROUND_CONTEXT), undefined);
298
- }),
299
- createCase(factory, "values", "applies same-transaction value and list operations in write order", async ({ storage }) => {
300
- const keptValue = testValue("write-order/kept");
301
- const deletedValue = testValue("write-order/deleted");
302
- const keptList = testList("write-order/kept");
303
- const deletedList = testList("write-order/deleted");
304
- const result = await storage.commit([
305
- setValue(deletedValue, "transient"),
306
- deleteValue(deletedValue),
307
- setValue(keptValue, "transient"),
308
- setValue(keptValue, "kept"),
309
- appendList(keptList, "transient"),
310
- deleteList(keptList),
311
- appendList(keptList, "kept"),
312
- appendList(deletedList, "transient"),
313
- deleteList(deletedList),
314
- ], BACKGROUND_CONTEXT);
315
- strictEqual(await storage.getValue(deletedValue, BACKGROUND_CONTEXT), undefined);
316
- deepStrictEqual(await storage.getValue(keptValue, BACKGROUND_CONTEXT), {
317
- address: keptValue,
318
- value: "kept",
319
- seq: result.seqs[3],
320
- });
321
- deepStrictEqual(await storage.readList(keptList, undefined, BACKGROUND_CONTEXT), [
322
- { seq: result.seqs[6], value: "kept" },
323
- ]);
324
- deepStrictEqual(await storage.readList(deletedList, undefined, BACKGROUND_CONTEXT), []);
325
- }),
326
- createCase(factory, "values", "does not change historical stores during value-only commits", async ({ storage }) => {
327
- await storage.commit([
328
- insertEntry(userEntry("root")),
329
- insertUsage({ id: "historical-usage", usage: usage(2, 3), adjustment: false }),
330
- ], BACKGROUND_CONTEXT);
331
- const entriesBefore = await storage.scanEntries({ order: "asc" }, BACKGROUND_CONTEXT);
332
- const usageBefore = await storage.scanUsage({ order: "asc" }, BACKGROUND_CONTEXT);
333
- const statsBefore = await storage.getStats(BACKGROUND_CONTEXT);
334
- const result = await storage.commit([setValue(testName, "first"), setValue(testName, "second")], BACKGROUND_CONTEXT);
335
- deepStrictEqual(await storage.scanEntries({ order: "asc" }, BACKGROUND_CONTEXT), entriesBefore);
336
- deepStrictEqual(await storage.scanUsage({ order: "asc" }, BACKGROUND_CONTEXT), usageBefore);
337
- deepStrictEqual(await storage.getStats(BACKGROUND_CONTEXT), statsBefore);
338
- deepStrictEqual(await storage.getValue(testName, BACKGROUND_CONTEXT), {
339
- address: testName,
340
- value: "second",
341
- seq: result.seqs[1],
342
- });
343
- }),
344
- createCase(factory, "lists", "pages appends by global sequence and deletes whole lists", async ({ storage }) => {
345
- const address = testList("events");
346
- strictEqual((await storage.readList(address, undefined, BACKGROUND_CONTEXT)).length, 0);
347
- const result = await storage.commit([appendList(address, "a"), setValue(testName, "gap"), appendList(address, "b"), appendList(address, "c")], BACKGROUND_CONTEXT);
348
- deepStrictEqual(await storage.readList(address, undefined, BACKGROUND_CONTEXT), [
349
- { seq: result.seqs[0], value: "a" },
350
- { seq: result.seqs[2], value: "b" },
351
- { seq: result.seqs[3], value: "c" },
352
- ]);
353
- deepStrictEqual(await storage.readList(address, { limit: 2 }, BACKGROUND_CONTEXT), [
354
- { seq: result.seqs[0], value: "a" },
355
- { seq: result.seqs[2], value: "b" },
356
- ]);
357
- deepStrictEqual(await storage.readList(address, { cursor: { seq: result.seqs[0] }, limit: 2 }, BACKGROUND_CONTEXT), [
358
- { seq: result.seqs[2], value: "b" },
359
- { seq: result.seqs[3], value: "c" },
360
- ]);
361
- deepStrictEqual(await storage.readList(address, { order: "desc", limit: 2 }, BACKGROUND_CONTEXT), [
362
- { seq: result.seqs[3], value: "c" },
363
- { seq: result.seqs[2], value: "b" },
364
- ]);
365
- deepStrictEqual(await storage.readList(address, { order: "desc", cursor: { seq: result.seqs[3] }, limit: 2 }, BACKGROUND_CONTEXT), [
366
- { seq: result.seqs[2], value: "b" },
367
- { seq: result.seqs[0], value: "a" },
368
- ]);
369
- await rejects(storage.readList(address, { limit: 0 }, BACKGROUND_CONTEXT));
370
- await rejects(storage.readList(address, { limit: Number.MAX_VALUE }, BACKGROUND_CONTEXT));
371
- await storage.commit([deleteList(address), deleteList(testList("absent")), appendList(address, "new")], BACKGROUND_CONTEXT);
372
- deepStrictEqual((await storage.readList(address, undefined, BACKGROUND_CONTEXT)).map(({ value }) => value), ["new"]);
373
- }),
374
- createCase(factory, "lists", "clamps one read page without limiting list growth", async ({ storage }) => {
375
- const address = testList("large");
376
- await storage.commit(Array.from({ length: 10_001 }, (_, index) => appendList(address, index)), BACKGROUND_CONTEXT);
377
- const firstPage = await storage.readList(address, undefined, BACKGROUND_CONTEXT);
378
- strictEqual(firstPage.length, 1_000);
379
- strictEqual((await storage.readList(address, { limit: 20_000 }, BACKGROUND_CONTEXT)).length, 10_000);
380
- strictEqual((await storage.readList(address, {
381
- cursor: { seq: firstPage.at(-1).seq },
382
- }, BACKGROUND_CONTEXT)).length, 1_000);
383
- }),
384
- createCase(factory, "lists", "commits mixed list writes atomically and rolls them back with siblings", async ({ storage }) => {
385
- const address = testList("atomic");
386
- const committed = await storage.commit([
387
- insertEntry(userEntry("mixed")),
388
- appendList(address, "kept"),
389
- setValue(testName, "kept"),
390
- insertUsage({ id: "mixed-usage", usage: usage(1, 2), adjustment: false }),
391
- ], BACKGROUND_CONTEXT);
392
- deepStrictEqual(await storage.readList(address, undefined, BACKGROUND_CONTEXT), [
393
- { seq: committed.seqs[1], value: "kept" },
394
- ]);
395
- await rejects(storage.commit([appendList(address, "transient"), deleteValue(testName), insertEntry(userEntry("mixed"))], BACKGROUND_CONTEXT));
396
- deepStrictEqual(await storage.readList(address, undefined, BACKGROUND_CONTEXT), [
397
- { seq: committed.seqs[1], value: "kept" },
398
- ]);
399
- strictEqual((await storage.getValue(testName, BACKGROUND_CONTEXT))?.value, "kept");
400
- }),
401
- createCase(factory, "entry queries", "stores custom entries with and without data", async ({ storage }) => {
402
- const result = await storage.commit([
403
- insertEntry({ id: "without-data", parentId: null, type: "custom", customType: "marker" }),
404
- insertEntry(customEntry("with-data", "without-data", "note", { nested: [1, 2] })),
405
- ], BACKGROUND_CONTEXT);
406
- deepStrictEqual(await storage.getEntries(["without-data", "with-data"], BACKGROUND_CONTEXT), new Map([
407
- [
408
- "without-data",
409
- {
410
- id: "without-data",
411
- parentId: null,
412
- type: "custom",
413
- customType: "marker",
414
- seq: result.seqs[0],
415
- timestamp: result.timestamp,
416
- },
417
- ],
418
- [
419
- "with-data",
420
- {
421
- ...customEntry("with-data", "without-data", "note", { nested: [1, 2] }),
422
- seq: result.seqs[1],
423
- timestamp: result.timestamp,
424
- },
425
- ],
426
- ]));
427
- }),
428
- createCase(factory, "entry queries", "scans global entries with explicit ranges, filters, orders, and limits", async ({ storage }) => {
429
- const result = await storage.commit([
430
- insertEntry(userEntry("root")),
431
- insertEntry(customEntry("note-1", "root", "note")),
432
- insertEntry(customEntry("other", "note-1", "other")),
433
- insertEntry(customEntry("note-2", "other", "note")),
434
- insertEntry(userEntry("tail", "note-2")),
435
- ], BACKGROUND_CONTEXT);
436
- deepStrictEqual(ids(await storage.scanEntries({
437
- type: "custom",
438
- customType: "note",
439
- fromSeq: result.seqs[1],
440
- toSeq: result.seqs[3],
441
- order: "desc",
442
- }, BACKGROUND_CONTEXT)), ["note-2", "note-1"]);
443
- deepStrictEqual(ids(await storage.scanEntries({ order: "asc", limit: 2 }, BACKGROUND_CONTEXT)), [
444
- "root",
445
- "note-1",
446
- ]);
447
- deepStrictEqual(ids(await storage.scanEntries({ order: "desc", limit: 2 }, BACKGROUND_CONTEXT)), [
448
- "tail",
449
- "note-2",
450
- ]);
451
- }),
452
- createCase(factory, "branch queries", "applies stops before filters and cursors before limits", async ({ storage }) => {
453
- const result = await storage.commit([
454
- insertEntry(userEntry("root")),
455
- insertEntry(customEntry("marker", "root", "marker")),
456
- insertEntry(userEntry("middle", "marker")),
457
- insertEntry(compactionEntry("compact", "middle")),
458
- insertEntry(customEntry("note", "compact", "note")),
459
- insertEntry(userEntry("leaf", "note")),
460
- ], BACKGROUND_CONTEXT);
461
- deepStrictEqual(ids(await storage.scanBranch({ start: "leaf", stopAtType: "compaction", type: "message" }, BACKGROUND_CONTEXT)), ["leaf"]);
462
- deepStrictEqual(ids(await storage.scanBranch({
463
- start: "leaf",
464
- order: "oldestFirst",
465
- stopAtId: "middle",
466
- type: "custom",
467
- }, BACKGROUND_CONTEXT)), ["marker"]);
468
- deepStrictEqual(ids(await storage.scanBranch({
469
- start: "leaf",
470
- order: "newestFirst",
471
- cursor: { seq: result.seqs[4] },
472
- limit: 2,
473
- }, BACKGROUND_CONTEXT)), ["compact", "middle"]);
474
- deepStrictEqual(ids(await storage.scanBranch({
475
- start: "leaf",
476
- order: "oldestFirst",
477
- cursor: { seq: result.seqs[1] },
478
- limit: 2,
479
- }, BACKGROUND_CONTEXT)), ["middle", "compact"]);
480
- deepStrictEqual(ids(await storage.scanBranch({ start: "leaf", stopAtId: "leaf", type: "custom" }, BACKGROUND_CONTEXT)), []);
481
- deepStrictEqual(ids(await storage.scanBranch({ start: "leaf", customType: "note" }, BACKGROUND_CONTEXT)), [
482
- "note",
483
- ]);
484
- await rejects(storage.scanBranch({ start: "missing" }, BACKGROUND_CONTEXT));
485
- }),
486
- createCase(factory, "branch queries", "returns branch structure without payload fields", async ({ storage }) => {
487
- const result = await storage.commit([insertEntry(userEntry("root")), insertEntry(customEntry("child", "root", "note"))], BACKGROUND_CONTEXT);
488
- deepStrictEqual(await storage.scanBranchStructure({ start: "child", order: "oldestFirst" }, BACKGROUND_CONTEXT), [
489
- {
490
- id: "root",
491
- parentId: null,
492
- seq: result.seqs[0],
493
- timestamp: result.timestamp,
494
- type: "message",
495
- },
496
- {
497
- id: "child",
498
- parentId: "root",
499
- seq: result.seqs[1],
500
- timestamp: result.timestamp,
501
- type: "custom",
502
- customType: "note",
503
- },
504
- ]);
505
- }),
506
- createCase(factory, "branch queries", "applies branch query semantics to structure scans", async ({ storage }) => {
507
- const result = await storage.commit([
508
- insertEntry(userEntry("root")),
509
- insertEntry(customEntry("marker", "root", "marker")),
510
- insertEntry(userEntry("middle", "marker")),
511
- insertEntry(compactionEntry("compact", "middle")),
512
- insertEntry(customEntry("note", "compact", "note")),
513
- insertEntry(userEntry("leaf", "note")),
514
- ], BACKGROUND_CONTEXT);
515
- deepStrictEqual(ids(await storage.scanBranchStructure({ start: "leaf", stopAtType: "compaction", type: "message" }, BACKGROUND_CONTEXT)), ["leaf"]);
516
- deepStrictEqual(ids(await storage.scanBranchStructure({ start: "leaf", order: "oldestFirst", cursor: { seq: result.seqs[1] }, limit: 2 }, BACKGROUND_CONTEXT)), ["middle", "compact"]);
517
- await rejects(storage.scanBranchStructure({ start: "missing" }, BACKGROUND_CONTEXT));
518
- }),
519
- createCase(factory, "usage and stats", "scans the usage ledger with explicit ranges, orders, and limits", async ({ storage }) => {
520
- const result = await storage.commit([
521
- insertUsage({ id: "usage-1", usage: usage(1, 1), adjustment: false }),
522
- setValue(testName, "sequence gap"),
523
- insertUsage({ id: "usage-2", usage: usage(2, 2), adjustment: false }),
524
- insertUsage({ id: "usage-3", usage: usage(3, 3), adjustment: true }),
525
- ], BACKGROUND_CONTEXT);
526
- deepStrictEqual((await storage.scanUsage({ fromSeq: result.seqs[1], toSeq: result.seqs[2], order: "asc" }, BACKGROUND_CONTEXT)).map((row) => row.id), ["usage-2"]);
527
- deepStrictEqual((await storage.scanUsage({ order: "desc", limit: 2 }, BACKGROUND_CONTEXT)).map((row) => row.id), ["usage-3", "usage-2"]);
528
- deepStrictEqual((await storage.scanUsage({ order: "asc", limit: 2 }, BACKGROUND_CONTEXT)).map((row) => row.id), ["usage-1", "usage-2"]);
529
- }),
530
- createCase(factory, "usage and stats", "keeps stats equal to message count and ledger totals", async ({ storage }) => {
531
- deepStrictEqual(await storage.getStats(BACKGROUND_CONTEXT), { messageCount: 0, usage: zeroUsage() });
532
- const firstUsage = usage(2, 3, { cacheWrite1h: 4, reasoning: 1 });
533
- const first = await storage.commit([
534
- insertEntry(userEntry("message")),
535
- insertUsage({ id: "usage-1", usage: firstUsage, adjustment: false }),
536
- ], BACKGROUND_CONTEXT);
537
- await assertCommitStats(storage, first);
538
- deepStrictEqual(first.stats, { messageCount: 1, usage: firstUsage });
539
- const secondUsage = usage(5, 7, { cacheWrite1h: 6, reasoning: 2 });
540
- const second = await storage.commit([
541
- insertEntry(customEntry("custom", "message")),
542
- insertEntry(compactionEntry("compaction", "custom")),
543
- insertUsage({ id: "usage-2", usage: secondUsage, adjustment: true }),
544
- ], BACKGROUND_CONTEXT);
545
- await assertCommitStats(storage, second);
546
- deepStrictEqual(second.stats, {
547
- messageCount: 1,
548
- usage: {
549
- input: 7,
550
- output: 10,
551
- cacheRead: 9,
552
- cacheWrite: 12,
553
- cacheWrite1h: 10,
554
- reasoning: 3,
555
- totalTokens: 17,
556
- cost: {
557
- input: firstUsage.cost.input + secondUsage.cost.input,
558
- output: firstUsage.cost.output + secondUsage.cost.output,
559
- cacheRead: firstUsage.cost.cacheRead + secondUsage.cost.cacheRead,
560
- cacheWrite: firstUsage.cost.cacheWrite + secondUsage.cost.cacheWrite,
561
- total: firstUsage.cost.total + secondUsage.cost.total,
562
- },
563
- },
564
- });
565
- }),
566
- createCase(factory, "serialization", "serializes back-to-back commits in admission order", async ({ storage }) => {
567
- const first = storage.commit([insertEntry(userEntry("first"))], BACKGROUND_CONTEXT);
568
- const second = storage.commit([insertEntry(userEntry("second", "first"))], BACKGROUND_CONTEXT);
569
- const [firstResult, secondResult] = await Promise.all([first, second]);
570
- ok(firstResult.seqs[0] < secondResult.seqs[0]);
571
- deepStrictEqual(firstResult.stats, { messageCount: 1, usage: zeroUsage() });
572
- deepStrictEqual(secondResult.stats, { messageCount: 2, usage: zeroUsage() });
573
- await assertCommitStats(storage, secondResult);
574
- deepStrictEqual(ids(await storage.scanEntries({ order: "asc" }, BACKGROUND_CONTEXT)), ["first", "second"]);
575
- }),
576
- createCase(factory, "lifecycle", "seals admission, drains admitted commits, and closes idempotently", async ({ storage }) => {
577
- const admitted = storage.commit([insertEntry(userEntry("admitted"))], BACKGROUND_CONTEXT);
578
- const firstClose = storage.close(BACKGROUND_CONTEXT);
579
- const secondClose = storage.close(BACKGROUND_CONTEXT);
580
- await rejects(storage.getStats(BACKGROUND_CONTEXT));
581
- await rejects(storage.commit([], BACKGROUND_CONTEXT));
582
- strictEqual((await admitted).seqs.length, 1);
583
- await Promise.all([firstClose, secondClose]);
584
- const rejectedReads = [
585
- storage.getEntries([], BACKGROUND_CONTEXT),
586
- storage.getValue(testName, BACKGROUND_CONTEXT),
587
- storage.scanValues(testName, BACKGROUND_CONTEXT),
588
- storage.readList(testList("events"), undefined, BACKGROUND_CONTEXT),
589
- storage.scanBranch({ start: "admitted" }, BACKGROUND_CONTEXT),
590
- storage.scanBranchStructure({ start: "admitted" }, BACKGROUND_CONTEXT),
591
- storage.scanEntries({ order: "asc" }, BACKGROUND_CONTEXT),
592
- storage.scanUsage({ order: "asc" }, BACKGROUND_CONTEXT),
593
- storage.getStats(BACKGROUND_CONTEXT),
594
- ];
595
- for (const read of rejectedReads)
596
- await rejects(read);
597
- }),
598
- ];
599
- }
600
- //# sourceMappingURL=storage.js.map