@code-yeongyu/senpi-agent-core 2026.9.12-3 → 2026.9.12

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 (344) hide show
  1. package/README.md +0 -4
  2. package/dist/harness/agent-harness.d.ts +384 -639
  3. package/dist/harness/agent-harness.d.ts.map +1 -1
  4. package/dist/harness/agent-harness.js +250 -5
  5. package/dist/harness/agent-harness.js.map +1 -1
  6. package/dist/harness/compaction/branch-summarization.d.ts +6 -12
  7. package/dist/harness/compaction/branch-summarization.d.ts.map +1 -1
  8. package/dist/harness/compaction/branch-summarization.js +27 -33
  9. package/dist/harness/compaction/branch-summarization.js.map +1 -1
  10. package/dist/harness/compaction/compaction.d.ts +8 -30
  11. package/dist/harness/compaction/compaction.d.ts.map +1 -1
  12. package/dist/harness/compaction/compaction.js +64 -53
  13. package/dist/harness/compaction/compaction.js.map +1 -1
  14. package/dist/harness/env/nodejs.d.ts +28 -25
  15. package/dist/harness/env/nodejs.d.ts.map +1 -1
  16. package/dist/harness/env/nodejs.js +125 -368
  17. package/dist/harness/env/nodejs.js.map +1 -1
  18. package/dist/harness/events.d.ts +38 -20
  19. package/dist/harness/events.d.ts.map +1 -1
  20. package/dist/harness/events.js +55 -233
  21. package/dist/harness/events.js.map +1 -1
  22. package/dist/harness/messages.d.ts +2 -2
  23. package/dist/harness/messages.d.ts.map +1 -1
  24. package/dist/harness/messages.js.map +1 -1
  25. package/dist/harness/prompt-templates.d.ts +2 -3
  26. package/dist/harness/prompt-templates.d.ts.map +1 -1
  27. package/dist/harness/prompt-templates.js +17 -17
  28. package/dist/harness/prompt-templates.js.map +1 -1
  29. package/dist/harness/reducer.d.ts +100 -0
  30. package/dist/harness/reducer.d.ts.map +1 -0
  31. package/dist/harness/reducer.js +420 -0
  32. package/dist/harness/reducer.js.map +1 -0
  33. package/dist/harness/result.d.ts +0 -93
  34. package/dist/harness/result.d.ts.map +1 -1
  35. package/dist/harness/result.js +0 -39
  36. package/dist/harness/result.js.map +1 -1
  37. package/dist/harness/session/context.d.ts +19 -6
  38. package/dist/harness/session/context.d.ts.map +1 -1
  39. package/dist/harness/session/context.js +53 -31
  40. package/dist/harness/session/context.js.map +1 -1
  41. package/dist/harness/session/index.d.ts +5 -9
  42. package/dist/harness/session/index.d.ts.map +1 -1
  43. package/dist/harness/session/index.js +4 -7
  44. package/dist/harness/session/index.js.map +1 -1
  45. package/dist/harness/session/jsonl/codec.d.ts +8 -19
  46. package/dist/harness/session/jsonl/codec.d.ts.map +1 -1
  47. package/dist/harness/session/jsonl/codec.js +219 -34
  48. package/dist/harness/session/jsonl/codec.js.map +1 -1
  49. package/dist/harness/session/jsonl/errors.d.ts +9 -0
  50. package/dist/harness/session/jsonl/errors.d.ts.map +1 -0
  51. package/dist/harness/session/jsonl/errors.js +18 -0
  52. package/dist/harness/session/jsonl/errors.js.map +1 -0
  53. package/dist/harness/session/jsonl/repo.d.ts +24 -27
  54. package/dist/harness/session/jsonl/repo.d.ts.map +1 -1
  55. package/dist/harness/session/jsonl/repo.js +151 -276
  56. package/dist/harness/session/jsonl/repo.js.map +1 -1
  57. package/dist/harness/session/jsonl/storage.d.ts +41 -39
  58. package/dist/harness/session/jsonl/storage.d.ts.map +1 -1
  59. package/dist/harness/session/jsonl/storage.js +196 -175
  60. package/dist/harness/session/jsonl/storage.js.map +1 -1
  61. package/dist/harness/session/jsonl/types.d.ts +22 -23
  62. package/dist/harness/session/jsonl/types.d.ts.map +1 -1
  63. package/dist/harness/session/jsonl/types.js +1 -2
  64. package/dist/harness/session/jsonl/types.js.map +1 -1
  65. package/dist/harness/session/jsonl.d.ts +3 -0
  66. package/dist/harness/session/jsonl.d.ts.map +1 -0
  67. package/dist/harness/session/jsonl.js +2 -0
  68. package/dist/harness/session/jsonl.js.map +1 -0
  69. package/dist/harness/session/memory.d.ts +40 -44
  70. package/dist/harness/session/memory.d.ts.map +1 -1
  71. package/dist/harness/session/memory.js +115 -333
  72. package/dist/harness/session/memory.js.map +1 -1
  73. package/dist/harness/session/session.d.ts +51 -78
  74. package/dist/harness/session/session.d.ts.map +1 -1
  75. package/dist/harness/session/session.js +207 -327
  76. package/dist/harness/session/session.js.map +1 -1
  77. package/dist/harness/session/state.d.ts +65 -0
  78. package/dist/harness/session/state.d.ts.map +1 -0
  79. package/dist/harness/session/state.js +320 -0
  80. package/dist/harness/session/state.js.map +1 -0
  81. package/dist/harness/session/testing/conformance.d.ts +4 -0
  82. package/dist/harness/session/testing/conformance.d.ts.map +1 -0
  83. package/dist/harness/session/testing/conformance.js +762 -0
  84. package/dist/harness/session/testing/conformance.js.map +1 -0
  85. package/dist/harness/session/testing/index.d.ts +2 -9
  86. package/dist/harness/session/testing/index.d.ts.map +1 -1
  87. package/dist/harness/session/testing/index.js +1 -8
  88. package/dist/harness/session/testing/index.js.map +1 -1
  89. package/dist/harness/session/testing/types.d.ts +7 -5
  90. package/dist/harness/session/testing/types.d.ts.map +1 -1
  91. package/dist/harness/session/testing/types.js.map +1 -1
  92. package/dist/harness/session/types.d.ts +265 -425
  93. package/dist/harness/session/types.d.ts.map +1 -1
  94. package/dist/harness/session/types.js +7 -7
  95. package/dist/harness/session/types.js.map +1 -1
  96. package/dist/harness/skills.d.ts +2 -3
  97. package/dist/harness/skills.d.ts.map +1 -1
  98. package/dist/harness/skills.js +26 -29
  99. package/dist/harness/skills.js.map +1 -1
  100. package/dist/harness/telemetry.d.ts +43 -64
  101. package/dist/harness/telemetry.d.ts.map +1 -1
  102. package/dist/harness/telemetry.js +26 -45
  103. package/dist/harness/telemetry.js.map +1 -1
  104. package/dist/harness/tools/bash.d.ts +4 -4
  105. package/dist/harness/tools/bash.d.ts.map +1 -1
  106. package/dist/harness/tools/bash.js +93 -66
  107. package/dist/harness/tools/bash.js.map +1 -1
  108. package/dist/harness/tools/edit.d.ts.map +1 -1
  109. package/dist/harness/tools/edit.js +13 -17
  110. package/dist/harness/tools/edit.js.map +1 -1
  111. package/dist/harness/tools/file-mutation-queue.d.ts +1 -2
  112. package/dist/harness/tools/file-mutation-queue.d.ts.map +1 -1
  113. package/dist/harness/tools/file-mutation-queue.js +5 -5
  114. package/dist/harness/tools/file-mutation-queue.js.map +1 -1
  115. package/dist/harness/tools/path-utils.d.ts +2 -3
  116. package/dist/harness/tools/path-utils.d.ts.map +1 -1
  117. package/dist/harness/tools/path-utils.js +5 -5
  118. package/dist/harness/tools/path-utils.js.map +1 -1
  119. package/dist/harness/tools/read.d.ts +1 -2
  120. package/dist/harness/tools/read.d.ts.map +1 -1
  121. package/dist/harness/tools/read.js +6 -4
  122. package/dist/harness/tools/read.js.map +1 -1
  123. package/dist/harness/tools/write.d.ts.map +1 -1
  124. package/dist/harness/tools/write.js +8 -12
  125. package/dist/harness/tools/write.js.map +1 -1
  126. package/dist/harness/types.d.ts +45 -128
  127. package/dist/harness/types.d.ts.map +1 -1
  128. package/dist/harness/types.js.map +1 -1
  129. package/dist/harness/utils/shell-output.d.ts +5 -19
  130. package/dist/harness/utils/shell-output.d.ts.map +1 -1
  131. package/dist/harness/utils/shell-output.js +192 -65
  132. package/dist/harness/utils/shell-output.js.map +1 -1
  133. package/dist/harness/utils/truncate.d.ts +0 -1
  134. package/dist/harness/utils/truncate.d.ts.map +1 -1
  135. package/dist/harness/utils/truncate.js +1 -1
  136. package/dist/harness/utils/truncate.js.map +1 -1
  137. package/dist/index.d.ts +1 -4
  138. package/dist/index.d.ts.map +1 -1
  139. package/dist/index.js +6 -3
  140. package/dist/index.js.map +1 -1
  141. package/dist/search/index.d.ts +16 -24
  142. package/dist/search/index.d.ts.map +1 -1
  143. package/dist/search/index.js +1 -1
  144. package/dist/search/index.js.map +1 -1
  145. package/dist/search/scanning.d.ts +29 -0
  146. package/dist/search/scanning.d.ts.map +1 -0
  147. package/dist/search/scanning.js +103 -0
  148. package/dist/search/scanning.js.map +1 -0
  149. package/dist/types.d.ts +0 -2
  150. package/dist/types.d.ts.map +1 -1
  151. package/dist/types.js.map +1 -1
  152. package/package.json +6 -27
  153. package/dist/harness/config.d.ts +0 -9
  154. package/dist/harness/config.d.ts.map +0 -1
  155. package/dist/harness/config.js +0 -35
  156. package/dist/harness/config.js.map +0 -1
  157. package/dist/harness/context.d.ts +0 -9
  158. package/dist/harness/context.d.ts.map +0 -1
  159. package/dist/harness/context.js +0 -13
  160. package/dist/harness/context.js.map +0 -1
  161. package/dist/harness/execution/assistant.d.ts +0 -42
  162. package/dist/harness/execution/assistant.d.ts.map +0 -1
  163. package/dist/harness/execution/assistant.js +0 -82
  164. package/dist/harness/execution/assistant.js.map +0 -1
  165. package/dist/harness/execution/effect-gate.d.ts +0 -22
  166. package/dist/harness/execution/effect-gate.d.ts.map +0 -1
  167. package/dist/harness/execution/effect-gate.js +0 -48
  168. package/dist/harness/execution/effect-gate.js.map +0 -1
  169. package/dist/harness/execution/tools.d.ts +0 -67
  170. package/dist/harness/execution/tools.d.ts.map +0 -1
  171. package/dist/harness/execution/tools.js +0 -121
  172. package/dist/harness/execution/tools.js.map +0 -1
  173. package/dist/harness/hooks.d.ts +0 -38
  174. package/dist/harness/hooks.d.ts.map +0 -1
  175. package/dist/harness/hooks.js +0 -404
  176. package/dist/harness/hooks.js.map +0 -1
  177. package/dist/harness/runtime/drive/boundary.d.ts +0 -28
  178. package/dist/harness/runtime/drive/boundary.d.ts.map +0 -1
  179. package/dist/harness/runtime/drive/boundary.js +0 -173
  180. package/dist/harness/runtime/drive/boundary.js.map +0 -1
  181. package/dist/harness/runtime/drive/checkpoint.d.ts +0 -8
  182. package/dist/harness/runtime/drive/checkpoint.d.ts.map +0 -1
  183. package/dist/harness/runtime/drive/checkpoint.js +0 -133
  184. package/dist/harness/runtime/drive/checkpoint.js.map +0 -1
  185. package/dist/harness/runtime/drive/deferred.d.ts +0 -15
  186. package/dist/harness/runtime/drive/deferred.d.ts.map +0 -1
  187. package/dist/harness/runtime/drive/deferred.js +0 -179
  188. package/dist/harness/runtime/drive/deferred.js.map +0 -1
  189. package/dist/harness/runtime/drive/generation.d.ts +0 -8
  190. package/dist/harness/runtime/drive/generation.d.ts.map +0 -1
  191. package/dist/harness/runtime/drive/generation.js +0 -205
  192. package/dist/harness/runtime/drive/generation.js.map +0 -1
  193. package/dist/harness/runtime/drive/reconcile.d.ts +0 -5
  194. package/dist/harness/runtime/drive/reconcile.d.ts.map +0 -1
  195. package/dist/harness/runtime/drive/reconcile.js +0 -140
  196. package/dist/harness/runtime/drive/reconcile.js.map +0 -1
  197. package/dist/harness/runtime/drive/recovery.d.ts +0 -8
  198. package/dist/harness/runtime/drive/recovery.d.ts.map +0 -1
  199. package/dist/harness/runtime/drive/recovery.js +0 -85
  200. package/dist/harness/runtime/drive/recovery.js.map +0 -1
  201. package/dist/harness/runtime/drive/response.d.ts +0 -23
  202. package/dist/harness/runtime/drive/response.d.ts.map +0 -1
  203. package/dist/harness/runtime/drive/response.js +0 -394
  204. package/dist/harness/runtime/drive/response.js.map +0 -1
  205. package/dist/harness/runtime/drive/retry.d.ts +0 -4
  206. package/dist/harness/runtime/drive/retry.d.ts.map +0 -1
  207. package/dist/harness/runtime/drive/retry.js +0 -34
  208. package/dist/harness/runtime/drive/retry.js.map +0 -1
  209. package/dist/harness/runtime/drive/structural.d.ts +0 -32
  210. package/dist/harness/runtime/drive/structural.d.ts.map +0 -1
  211. package/dist/harness/runtime/drive/structural.js +0 -929
  212. package/dist/harness/runtime/drive/structural.js.map +0 -1
  213. package/dist/harness/runtime/drive/terminal.d.ts +0 -7
  214. package/dist/harness/runtime/drive/terminal.d.ts.map +0 -1
  215. package/dist/harness/runtime/drive/terminal.js +0 -49
  216. package/dist/harness/runtime/drive/terminal.js.map +0 -1
  217. package/dist/harness/runtime/drive/tool-placement.d.ts +0 -14
  218. package/dist/harness/runtime/drive/tool-placement.d.ts.map +0 -1
  219. package/dist/harness/runtime/drive/tool-placement.js +0 -244
  220. package/dist/harness/runtime/drive/tool-placement.js.map +0 -1
  221. package/dist/harness/runtime/drive/tools.d.ts +0 -6
  222. package/dist/harness/runtime/drive/tools.d.ts.map +0 -1
  223. package/dist/harness/runtime/drive/tools.js +0 -449
  224. package/dist/harness/runtime/drive/tools.js.map +0 -1
  225. package/dist/harness/runtime/drive.d.ts +0 -6
  226. package/dist/harness/runtime/drive.d.ts.map +0 -1
  227. package/dist/harness/runtime/drive.js +0 -93
  228. package/dist/harness/runtime/drive.js.map +0 -1
  229. package/dist/harness/runtime/harness.d.ts +0 -59
  230. package/dist/harness/runtime/harness.d.ts.map +0 -1
  231. package/dist/harness/runtime/harness.js +0 -302
  232. package/dist/harness/runtime/harness.js.map +0 -1
  233. package/dist/harness/runtime/index.d.ts +0 -2
  234. package/dist/harness/runtime/index.d.ts.map +0 -1
  235. package/dist/harness/runtime/index.js +0 -2
  236. package/dist/harness/runtime/index.js.map +0 -1
  237. package/dist/harness/runtime/lane.d.ts +0 -118
  238. package/dist/harness/runtime/lane.d.ts.map +0 -1
  239. package/dist/harness/runtime/lane.js +0 -1559
  240. package/dist/harness/runtime/lane.js.map +0 -1
  241. package/dist/harness/runtime/progress.d.ts +0 -15
  242. package/dist/harness/runtime/progress.d.ts.map +0 -1
  243. package/dist/harness/runtime/progress.js +0 -66
  244. package/dist/harness/runtime/progress.js.map +0 -1
  245. package/dist/harness/runtime/reducer.d.ts +0 -5
  246. package/dist/harness/runtime/reducer.d.ts.map +0 -1
  247. package/dist/harness/runtime/reducer.js +0 -240
  248. package/dist/harness/runtime/reducer.js.map +0 -1
  249. package/dist/harness/runtime/restore.d.ts +0 -24
  250. package/dist/harness/runtime/restore.d.ts.map +0 -1
  251. package/dist/harness/runtime/restore.js +0 -117
  252. package/dist/harness/runtime/restore.js.map +0 -1
  253. package/dist/harness/runtime/transcript.d.ts +0 -21
  254. package/dist/harness/runtime/transcript.d.ts.map +0 -1
  255. package/dist/harness/runtime/transcript.js +0 -72
  256. package/dist/harness/runtime/transcript.js.map +0 -1
  257. package/dist/harness/runtime/types.d.ts +0 -105
  258. package/dist/harness/runtime/types.d.ts.map +0 -1
  259. package/dist/harness/runtime/types.js +0 -50
  260. package/dist/harness/runtime/types.js.map +0 -1
  261. package/dist/harness/session/commit.d.ts +0 -53
  262. package/dist/harness/session/commit.d.ts.map +0 -1
  263. package/dist/harness/session/commit.js +0 -57
  264. package/dist/harness/session/commit.js.map +0 -1
  265. package/dist/harness/session/fork-policy.d.ts +0 -21
  266. package/dist/harness/session/fork-policy.d.ts.map +0 -1
  267. package/dist/harness/session/fork-policy.js +0 -55
  268. package/dist/harness/session/fork-policy.js.map +0 -1
  269. package/dist/harness/session/fork.d.ts +0 -16
  270. package/dist/harness/session/fork.d.ts.map +0 -1
  271. package/dist/harness/session/fork.js +0 -79
  272. package/dist/harness/session/fork.js.map +0 -1
  273. package/dist/harness/session/in-memory-storage-state.d.ts +0 -39
  274. package/dist/harness/session/in-memory-storage-state.d.ts.map +0 -1
  275. package/dist/harness/session/in-memory-storage-state.js +0 -269
  276. package/dist/harness/session/in-memory-storage-state.js.map +0 -1
  277. package/dist/harness/session/jsonl/fork.d.ts +0 -38
  278. package/dist/harness/session/jsonl/fork.d.ts.map +0 -1
  279. package/dist/harness/session/jsonl/fork.js +0 -266
  280. package/dist/harness/session/jsonl/fork.js.map +0 -1
  281. package/dist/harness/session/jsonl/index.d.ts +0 -4
  282. package/dist/harness/session/jsonl/index.d.ts.map +0 -1
  283. package/dist/harness/session/jsonl/index.js +0 -4
  284. package/dist/harness/session/jsonl/index.js.map +0 -1
  285. package/dist/harness/session/jsonl/io.d.ts +0 -14
  286. package/dist/harness/session/jsonl/io.d.ts.map +0 -1
  287. package/dist/harness/session/jsonl/io.js +0 -86
  288. package/dist/harness/session/jsonl/io.js.map +0 -1
  289. package/dist/harness/session/jsonl/legacy-v3.d.ts +0 -44
  290. package/dist/harness/session/jsonl/legacy-v3.d.ts.map +0 -1
  291. package/dist/harness/session/jsonl/legacy-v3.js +0 -454
  292. package/dist/harness/session/jsonl/legacy-v3.js.map +0 -1
  293. package/dist/harness/session/mutation-line.d.ts +0 -8
  294. package/dist/harness/session/mutation-line.d.ts.map +0 -1
  295. package/dist/harness/session/mutation-line.js +0 -22
  296. package/dist/harness/session/mutation-line.js.map +0 -1
  297. package/dist/harness/session/testing/benchmark/datasets.d.ts +0 -12
  298. package/dist/harness/session/testing/benchmark/datasets.d.ts.map +0 -1
  299. package/dist/harness/session/testing/benchmark/datasets.js +0 -24
  300. package/dist/harness/session/testing/benchmark/datasets.js.map +0 -1
  301. package/dist/harness/session/testing/benchmark/session-repo.d.ts +0 -42
  302. package/dist/harness/session/testing/benchmark/session-repo.d.ts.map +0 -1
  303. package/dist/harness/session/testing/benchmark/session-repo.js +0 -127
  304. package/dist/harness/session/testing/benchmark/session-repo.js.map +0 -1
  305. package/dist/harness/session/testing/benchmark/storage.d.ts +0 -25
  306. package/dist/harness/session/testing/benchmark/storage.d.ts.map +0 -1
  307. package/dist/harness/session/testing/benchmark/storage.js +0 -114
  308. package/dist/harness/session/testing/benchmark/storage.js.map +0 -1
  309. package/dist/harness/session/testing/conformance/session-repo.d.ts +0 -23
  310. package/dist/harness/session/testing/conformance/session-repo.d.ts.map +0 -1
  311. package/dist/harness/session/testing/conformance/session-repo.js +0 -809
  312. package/dist/harness/session/testing/conformance/session-repo.js.map +0 -1
  313. package/dist/harness/session/testing/conformance/storage.d.ts +0 -4
  314. package/dist/harness/session/testing/conformance/storage.d.ts.map +0 -1
  315. package/dist/harness/session/testing/conformance/storage.js +0 -600
  316. package/dist/harness/session/testing/conformance/storage.js.map +0 -1
  317. package/dist/harness/session/testing/gating-storage.d.ts +0 -26
  318. package/dist/harness/session/testing/gating-storage.d.ts.map +0 -1
  319. package/dist/harness/session/testing/gating-storage.js +0 -103
  320. package/dist/harness/session/testing/gating-storage.js.map +0 -1
  321. package/dist/harness/session/testing/instrumented-storage.d.ts +0 -11
  322. package/dist/harness/session/testing/instrumented-storage.d.ts.map +0 -1
  323. package/dist/harness/session/testing/instrumented-storage.js +0 -19
  324. package/dist/harness/session/testing/instrumented-storage.js.map +0 -1
  325. package/dist/harness/session/testing/storage-decorator.d.ts +0 -20
  326. package/dist/harness/session/testing/storage-decorator.d.ts.map +0 -1
  327. package/dist/harness/session/testing/storage-decorator.js +0 -40
  328. package/dist/harness/session/testing/storage-decorator.js.map +0 -1
  329. package/dist/harness/session/values.d.ts +0 -95
  330. package/dist/harness/session/values.d.ts.map +0 -1
  331. package/dist/harness/session/values.js +0 -81
  332. package/dist/harness/session/values.js.map +0 -1
  333. package/dist/harness/utils/adaptive-publisher.d.ts +0 -24
  334. package/dist/harness/utils/adaptive-publisher.d.ts.map +0 -1
  335. package/dist/harness/utils/adaptive-publisher.js +0 -79
  336. package/dist/harness/utils/adaptive-publisher.js.map +0 -1
  337. package/dist/harness/utils/output-capture.d.ts +0 -31
  338. package/dist/harness/utils/output-capture.d.ts.map +0 -1
  339. package/dist/harness/utils/output-capture.js +0 -217
  340. package/dist/harness/utils/output-capture.js.map +0 -1
  341. package/dist/harness/utils/usage.d.ts +0 -4
  342. package/dist/harness/utils/usage.d.ts.map +0 -1
  343. package/dist/harness/utils/usage.js +0 -33
  344. package/dist/harness/utils/usage.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../../../src/harness/session/testing/conformance/storage.ts"],"names":[],"mappings":"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","sourcesContent":["import { deepStrictEqual, ok, rejects, strictEqual } from \"node:assert/strict\";\nimport type { Usage } from \"@earendil-works/pi-ai\";\nimport { BACKGROUND_CONTEXT } from \"../../../context.ts\";\nimport { insertEntry, insertUsage } from \"../../commit.ts\";\nimport type {\n\tCommitResult,\n\tCompactionEntry,\n\tCustomEntry,\n\tEntry,\n\tEntryStructure,\n\tJsonValue,\n\tMessageEntry,\n\tNewEntry,\n\tStorage,\n\tWrite,\n} from \"../../types.ts\";\nimport {\n\tappendList,\n\tbranchTip,\n\tdeleteList,\n\tdeleteValue,\n\tentryLabel,\n\tlist,\n\tpendingEntry,\n\tsetValue,\n\tvalue,\n} from \"../../values.ts\";\nimport type { ConformanceCase, StorageFixture } from \"../types.ts\";\n\nconst MESSAGE_TIMESTAMP = 1_650_000_000_000;\nconst testName = value<string>(\"test.session.name\");\nconst testValue = (key: string) => value<JsonValue>(\"test.value\", key);\nconst testValuePrefix = (prefix = \"\") => value<JsonValue>(\"test.value\", prefix);\nconst testList = (key: string) => list<JsonValue>(\"test.list\", key);\n\ntype ConformanceTest = (fixture: StorageFixture) => Promise<void>;\n\nfunction createCase(\n\tfactory: () => Promise<StorageFixture>,\n\tgroup: string,\n\tname: string,\n\ttest: ConformanceTest,\n): ConformanceCase {\n\treturn {\n\t\tgroup,\n\t\tname,\n\t\tasync run() {\n\t\t\tawait using fixture = await factory();\n\t\t\tawait test(fixture);\n\t\t},\n\t};\n}\n\nfunction usage(input: number, output: number, options: { cacheWrite1h?: number; reasoning?: number } = {}): Usage {\n\treturn {\n\t\tinput,\n\t\toutput,\n\t\tcacheRead: input + 1,\n\t\tcacheWrite: output + 1,\n\t\t...(options.cacheWrite1h === undefined ? {} : { cacheWrite1h: options.cacheWrite1h }),\n\t\t...(options.reasoning === undefined ? {} : { reasoning: options.reasoning }),\n\t\ttotalTokens: input + output,\n\t\tcost: {\n\t\t\tinput: input / 100,\n\t\t\toutput: output / 100,\n\t\t\tcacheRead: (input + 1) / 100,\n\t\t\tcacheWrite: (output + 1) / 100,\n\t\t\ttotal: (input + output + 2) / 100,\n\t\t},\n\t};\n}\n\nfunction zeroUsage(): Usage {\n\treturn {\n\t\tinput: 0,\n\t\toutput: 0,\n\t\tcacheRead: 0,\n\t\tcacheWrite: 0,\n\t\ttotalTokens: 0,\n\t\tcost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },\n\t};\n}\n\nfunction userEntry(id: string, parentId: string | null = null, text = id): NewEntry<MessageEntry> {\n\treturn {\n\t\tid,\n\t\tparentId,\n\t\ttype: \"message\",\n\t\tmessage: {\n\t\t\trole: \"user\",\n\t\t\tcontent: [{ type: \"text\", text }],\n\t\t\ttimestamp: MESSAGE_TIMESTAMP,\n\t\t},\n\t};\n}\n\nfunction customEntry(\n\tid: string,\n\tparentId: string | null,\n\tcustomType = \"note\",\n\tdata: CustomEntry[\"data\"] = { id },\n): NewEntry<CustomEntry> {\n\treturn { id, parentId, type: \"custom\", customType, data };\n}\n\nfunction compactionEntry(id: string, parentId: string | null): NewEntry<CompactionEntry> {\n\treturn {\n\t\tid,\n\t\tparentId,\n\t\ttype: \"compaction\",\n\t\tsummary: `summary:${id}`,\n\t\tretainedTail: [],\n\t\ttokensBefore: 10,\n\t\tfromHook: false,\n\t};\n}\n\n// EntryStructure is included for scanBranchStructure conformance, especially SQLite's payload-free branch scans.\nfunction ids(entries: readonly (Entry | EntryStructure)[]): string[] {\n\treturn entries.map((entry) => entry.id);\n}\n\nfunction assertStrictlyIncreasing(values: readonly number[]): void {\n\tfor (let index = 1; index < values.length; index++) {\n\t\tok(values[index - 1] < values[index], `Expected ${values.join(\", \")} to be strictly increasing`);\n\t}\n}\n\nasync function assertCommitStats(storage: Storage, result: CommitResult): Promise<void> {\n\tdeepStrictEqual(result.stats, await storage.getStats(BACKGROUND_CONTEXT));\n}\n\n/** Creates fresh, runner-independent cases for the durable Storage contract. */\nexport function createStorageConformance(factory: () => Promise<StorageFixture>): readonly ConformanceCase[] {\n\treturn [\n\t\tcreateCase(factory, \"transactions\", \"commits mixed writes atomically in write order\", async ({ storage }) => {\n\t\t\tconst result = await storage.commit(\n\t\t\t\t[\n\t\t\t\t\tinsertEntry(userEntry(\"entry\")),\n\t\t\t\t\tsetValue(testName, \"session\"),\n\t\t\t\t\tinsertUsage({ id: \"usage\", usage: usage(2, 3), adjustment: false, entryId: \"entry\" }),\n\t\t\t\t],\n\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t);\n\n\t\t\tstrictEqual(result.seqs.length, 3);\n\t\t\tstrictEqual(result.firstSeq, result.seqs[0]);\n\t\t\tawait assertCommitStats(storage, result);\n\t\t\tassertStrictlyIncreasing(result.seqs);\n\t\t\tok(Number.isSafeInteger(result.timestamp) && result.timestamp >= 0);\n\t\t\tdeepStrictEqual(\n\t\t\t\tawait storage.getEntries([\"entry\"], BACKGROUND_CONTEXT),\n\t\t\t\tnew Map([[\"entry\", { ...userEntry(\"entry\"), seq: result.seqs[0], timestamp: result.timestamp }]]),\n\t\t\t);\n\t\t\tdeepStrictEqual(await storage.getValue(testName, BACKGROUND_CONTEXT), {\n\t\t\t\taddress: testName,\n\t\t\t\tvalue: \"session\",\n\t\t\t\tseq: result.seqs[1],\n\t\t\t});\n\t\t\tdeepStrictEqual(await storage.scanUsage({ order: \"asc\" }, BACKGROUND_CONTEXT), [\n\t\t\t\t{ id: \"usage\", seq: result.seqs[2], usage: usage(2, 3), adjustment: false, entryId: \"entry\" },\n\t\t\t]);\n\t\t}),\n\n\t\tcreateCase(\n\t\t\tfactory,\n\t\t\t\"transactions\",\n\t\t\t\"rolls back every store when a mixed transaction fails\",\n\t\t\tasync ({ storage }) => {\n\t\t\t\tawait storage.commit(\n\t\t\t\t\t[insertEntry(userEntry(\"root\")), insertUsage({ id: \"taken\", usage: usage(1, 1), adjustment: false })],\n\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t);\n\t\t\t\tconst entriesBefore = await storage.scanEntries({ order: \"asc\" }, BACKGROUND_CONTEXT);\n\t\t\t\tconst usageBefore = await storage.scanUsage({ order: \"asc\" }, BACKGROUND_CONTEXT);\n\t\t\t\tconst statsBefore = await storage.getStats(BACKGROUND_CONTEXT);\n\n\t\t\t\tawait rejects(\n\t\t\t\t\tstorage.commit(\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\tsetValue(testName, \"transient\"),\n\t\t\t\t\t\t\tinsertEntry(customEntry(\"transient-entry\", \"root\")),\n\t\t\t\t\t\t\tinsertUsage({ id: \"transient-usage\", usage: usage(5, 8), adjustment: true }),\n\t\t\t\t\t\t\tinsertEntry(customEntry(\"taken\", \"root\")),\n\t\t\t\t\t\t],\n\t\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t\t),\n\t\t\t\t);\n\n\t\t\t\tdeepStrictEqual(await storage.scanEntries({ order: \"asc\" }, BACKGROUND_CONTEXT), entriesBefore);\n\t\t\t\tdeepStrictEqual(await storage.scanUsage({ order: \"asc\" }, BACKGROUND_CONTEXT), usageBefore);\n\t\t\t\tdeepStrictEqual(await storage.getStats(BACKGROUND_CONTEXT), statsBefore);\n\t\t\t\tstrictEqual(await storage.getValue(testName, BACKGROUND_CONTEXT), undefined);\n\t\t\t},\n\t\t),\n\n\t\tcreateCase(\n\t\t\tfactory,\n\t\t\t\"transactions\",\n\t\t\t\"preserves overwritten and deleted values when a transaction fails\",\n\t\t\tasync ({ storage }) => {\n\t\t\t\tawait storage.commit(\n\t\t\t\t\t[\n\t\t\t\t\t\tsetValue(testValue(\"overwritten\"), \"original\"),\n\t\t\t\t\t\tsetValue(testValue(\"deleted\"), { kept: true }),\n\t\t\t\t\t\tinsertEntry(userEntry(\"taken\")),\n\t\t\t\t\t],\n\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t);\n\t\t\t\tconst overwrittenBefore = await storage.getValue(testValue(\"overwritten\"), BACKGROUND_CONTEXT);\n\t\t\t\tconst deletedBefore = await storage.getValue(testValue(\"deleted\"), BACKGROUND_CONTEXT);\n\n\t\t\t\tawait rejects(\n\t\t\t\t\tstorage.commit(\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\tsetValue(testValue(\"overwritten\"), \"transient\"),\n\t\t\t\t\t\t\tdeleteValue(testValue(\"deleted\")),\n\t\t\t\t\t\t\tinsertEntry(customEntry(\"transient\", \"taken\")),\n\t\t\t\t\t\t\tinsertEntry(customEntry(\"taken\", null)),\n\t\t\t\t\t\t],\n\t\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t\t),\n\t\t\t\t);\n\n\t\t\t\tdeepStrictEqual(await storage.getValue(testValue(\"overwritten\"), BACKGROUND_CONTEXT), overwrittenBefore);\n\t\t\t\tdeepStrictEqual(await storage.getValue(testValue(\"deleted\"), BACKGROUND_CONTEXT), deletedBefore);\n\t\t\t\tstrictEqual((await storage.getEntries([\"transient\"], BACKGROUND_CONTEXT)).has(\"transient\"), false);\n\t\t\t},\n\t\t),\n\n\t\tcreateCase(factory, \"transactions\", \"enforces one shared entry and usage id namespace\", async ({ storage }) => {\n\t\t\tawait storage.commit(\n\t\t\t\t[\n\t\t\t\t\tinsertEntry(userEntry(\"existing-entry\")),\n\t\t\t\t\tinsertUsage({ id: \"existing-usage\", usage: usage(1, 1), adjustment: false }),\n\t\t\t\t],\n\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t);\n\n\t\t\tawait rejects(\n\t\t\t\tstorage.commit(\n\t\t\t\t\t[insertUsage({ id: \"existing-entry\", usage: usage(2, 2), adjustment: false })],\n\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t),\n\t\t\t);\n\t\t\tawait rejects(storage.commit([insertEntry(customEntry(\"existing-usage\", null))], BACKGROUND_CONTEXT));\n\n\t\t\tfor (const [id, writes] of [\n\t\t\t\t[\n\t\t\t\t\t\"entry-then-usage\",\n\t\t\t\t\t[\n\t\t\t\t\t\tinsertEntry(customEntry(\"entry-then-usage\", null)),\n\t\t\t\t\t\tinsertUsage({ id: \"entry-then-usage\", usage: usage(3, 3), adjustment: false }),\n\t\t\t\t\t],\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\"usage-then-entry\",\n\t\t\t\t\t[\n\t\t\t\t\t\tinsertUsage({ id: \"usage-then-entry\", usage: usage(4, 4), adjustment: false }),\n\t\t\t\t\t\tinsertEntry(customEntry(\"usage-then-entry\", null)),\n\t\t\t\t\t],\n\t\t\t\t],\n\t\t\t] satisfies Array<[string, Write[]]>) {\n\t\t\t\tawait rejects(storage.commit(writes, BACKGROUND_CONTEXT), `Expected duplicate id ${id} to reject`);\n\t\t\t}\n\n\t\t\tdeepStrictEqual(ids(await storage.scanEntries({ order: \"asc\" }, BACKGROUND_CONTEXT)), [\"existing-entry\"]);\n\t\t\tdeepStrictEqual(\n\t\t\t\t(await storage.scanUsage({ order: \"asc\" }, BACKGROUND_CONTEXT)).map((row) => row.id),\n\t\t\t\t[\"existing-usage\"],\n\t\t\t);\n\t\t}),\n\n\t\tcreateCase(\n\t\t\tfactory,\n\t\t\t\"transactions\",\n\t\t\t\"resolves parents only from prior entries and earlier writes\",\n\t\t\tasync ({ storage }) => {\n\t\t\t\tawait storage.commit([insertEntry(userEntry(\"root\"))], BACKGROUND_CONTEXT);\n\t\t\t\tawait storage.commit(\n\t\t\t\t\t[insertEntry(customEntry(\"child\", \"root\")), insertEntry(customEntry(\"grandchild\", \"child\"))],\n\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t);\n\t\t\t\tdeepStrictEqual(\n\t\t\t\t\tids(await storage.scanBranch({ start: \"grandchild\", order: \"oldestFirst\" }, BACKGROUND_CONTEXT)),\n\t\t\t\t\t[\"root\", \"child\", \"grandchild\"],\n\t\t\t\t);\n\n\t\t\t\tawait rejects(\n\t\t\t\t\tstorage.commit(\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\tinsertEntry(customEntry(\"before-parent\", \"later-parent\")),\n\t\t\t\t\t\t\tinsertEntry(customEntry(\"later-parent\", \"root\")),\n\t\t\t\t\t\t\tsetValue(entryLabel(\"before-parent\"), \"transient\"),\n\t\t\t\t\t\t],\n\t\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t\tawait rejects(storage.commit([insertEntry(customEntry(\"orphan\", \"missing\"))], BACKGROUND_CONTEXT));\n\t\t\t\tawait storage.commit(\n\t\t\t\t\t[insertUsage({ id: \"usage-is-not-parent\", usage: usage(1, 1), adjustment: false })],\n\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t);\n\t\t\t\tawait rejects(\n\t\t\t\t\tstorage.commit([insertEntry(customEntry(\"usage-child\", \"usage-is-not-parent\"))], BACKGROUND_CONTEXT),\n\t\t\t\t);\n\n\t\t\t\tdeepStrictEqual(\n\t\t\t\t\tawait storage.getEntries([\"before-parent\", \"later-parent\", \"orphan\", \"usage-child\"], BACKGROUND_CONTEXT),\n\t\t\t\t\tnew Map(),\n\t\t\t\t);\n\t\t\t\tstrictEqual(await storage.getValue(entryLabel(\"before-parent\"), BACKGROUND_CONTEXT), undefined);\n\t\t\t},\n\t\t),\n\n\t\tcreateCase(factory, \"transactions\", \"places pending content under its reserved entry id\", async ({ storage }) => {\n\t\t\tconst entry = userEntry(\"reserved\", null, \"queued\");\n\t\t\tawait storage.commit(\n\t\t\t\t[\n\t\t\t\t\tsetValue(pendingEntry(entry.id), { type: \"message\", payload: entry.message }),\n\t\t\t\t\tsetValue(branchTip(\"main\"), null),\n\t\t\t\t],\n\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t);\n\n\t\t\tstrictEqual((await storage.getEntries([entry.id], BACKGROUND_CONTEXT)).has(entry.id), false);\n\t\t\tdeepStrictEqual((await storage.getValue(pendingEntry(entry.id), BACKGROUND_CONTEXT))?.value, {\n\t\t\t\ttype: \"message\",\n\t\t\t\tpayload: entry.message,\n\t\t\t});\n\t\t\tstrictEqual((await storage.getValue(branchTip(\"main\"), BACKGROUND_CONTEXT))?.value, null);\n\n\t\t\tconst placement = await storage.commit(\n\t\t\t\t[insertEntry(entry), deleteValue(pendingEntry(entry.id)), setValue(branchTip(\"main\"), entry.id)],\n\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t);\n\n\t\t\tdeepStrictEqual(\n\t\t\t\tawait storage.getEntries([entry.id], BACKGROUND_CONTEXT),\n\t\t\t\tnew Map([[entry.id, { ...entry, seq: placement.seqs[0], timestamp: placement.timestamp }]]),\n\t\t\t);\n\t\t\tstrictEqual(await storage.getValue(pendingEntry(entry.id), BACKGROUND_CONTEXT), undefined);\n\t\t\tdeepStrictEqual(await storage.getValue(branchTip(\"main\"), BACKGROUND_CONTEXT), {\n\t\t\t\taddress: branchTip(\"main\"),\n\t\t\t\tvalue: entry.id,\n\t\t\t\tseq: placement.seqs[2],\n\t\t\t});\n\t\t}),\n\n\t\tcreateCase(\n\t\t\tfactory,\n\t\t\t\"values\",\n\t\t\t\"sets, replaces, deletes, and recreates values without tombstones\",\n\t\t\tasync ({ storage }) => {\n\t\t\t\tconst first = await storage.commit(\n\t\t\t\t\t[\n\t\t\t\t\t\tsetValue(testValue(\"prefix/b\"), 1),\n\t\t\t\t\t\tsetValue(testValue(\"prefix/a\"), 2),\n\t\t\t\t\t\tsetValue(testValue(\"other\"), 3),\n\t\t\t\t\t\tsetValue(testValue(\"prefix/\\ue000\"), 4),\n\t\t\t\t\t\tsetValue(testValue(\"prefix/\\u{10000}\"), 5),\n\t\t\t\t\t\tsetValue(testValue(\"prefix/a\"), null),\n\t\t\t\t\t],\n\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t);\n\t\t\t\tdeepStrictEqual(await storage.getValue(testValue(\"prefix/a\"), BACKGROUND_CONTEXT), {\n\t\t\t\t\taddress: testValue(\"prefix/a\"),\n\t\t\t\t\tvalue: null,\n\t\t\t\t\tseq: first.seqs[5],\n\t\t\t\t});\n\n\t\t\t\tconst second = await storage.commit(\n\t\t\t\t\t[\n\t\t\t\t\t\tdeleteValue(testValue(\"prefix/a\")),\n\t\t\t\t\t\tdeleteValue(testValue(\"absent\")),\n\t\t\t\t\t\tsetValue(testValue(\"prefix/a\"), \"recreated\"),\n\t\t\t\t\t],\n\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t);\n\n\t\t\t\tdeepStrictEqual(await storage.scanValues(testValuePrefix(\"prefix/\"), BACKGROUND_CONTEXT), [\n\t\t\t\t\t{ address: testValue(\"prefix/a\"), value: \"recreated\", seq: second.seqs[2] },\n\t\t\t\t\t{ address: testValue(\"prefix/b\"), value: 1, seq: first.seqs[0] },\n\t\t\t\t\t{ address: testValue(\"prefix/\\ue000\"), value: 4, seq: first.seqs[3] },\n\t\t\t\t\t{ address: testValue(\"prefix/\\u{10000}\"), value: 5, seq: first.seqs[4] },\n\t\t\t\t]);\n\t\t\t\tstrictEqual(await storage.getValue(testValue(\"absent\"), BACKGROUND_CONTEXT), undefined);\n\t\t\t},\n\t\t),\n\n\t\tcreateCase(\n\t\t\tfactory,\n\t\t\t\"values\",\n\t\t\t\"applies same-transaction value and list operations in write order\",\n\t\t\tasync ({ storage }) => {\n\t\t\t\tconst keptValue = testValue(\"write-order/kept\");\n\t\t\t\tconst deletedValue = testValue(\"write-order/deleted\");\n\t\t\t\tconst keptList = testList(\"write-order/kept\");\n\t\t\t\tconst deletedList = testList(\"write-order/deleted\");\n\t\t\t\tconst result = await storage.commit(\n\t\t\t\t\t[\n\t\t\t\t\t\tsetValue(deletedValue, \"transient\"),\n\t\t\t\t\t\tdeleteValue(deletedValue),\n\t\t\t\t\t\tsetValue(keptValue, \"transient\"),\n\t\t\t\t\t\tsetValue(keptValue, \"kept\"),\n\t\t\t\t\t\tappendList(keptList, \"transient\"),\n\t\t\t\t\t\tdeleteList(keptList),\n\t\t\t\t\t\tappendList(keptList, \"kept\"),\n\t\t\t\t\t\tappendList(deletedList, \"transient\"),\n\t\t\t\t\t\tdeleteList(deletedList),\n\t\t\t\t\t],\n\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t);\n\n\t\t\t\tstrictEqual(await storage.getValue(deletedValue, BACKGROUND_CONTEXT), undefined);\n\t\t\t\tdeepStrictEqual(await storage.getValue(keptValue, BACKGROUND_CONTEXT), {\n\t\t\t\t\taddress: keptValue,\n\t\t\t\t\tvalue: \"kept\",\n\t\t\t\t\tseq: result.seqs[3],\n\t\t\t\t});\n\t\t\t\tdeepStrictEqual(await storage.readList(keptList, undefined, BACKGROUND_CONTEXT), [\n\t\t\t\t\t{ seq: result.seqs[6], value: \"kept\" },\n\t\t\t\t]);\n\t\t\t\tdeepStrictEqual(await storage.readList(deletedList, undefined, BACKGROUND_CONTEXT), []);\n\t\t\t},\n\t\t),\n\n\t\tcreateCase(\n\t\t\tfactory,\n\t\t\t\"values\",\n\t\t\t\"does not change historical stores during value-only commits\",\n\t\t\tasync ({ storage }) => {\n\t\t\t\tawait storage.commit(\n\t\t\t\t\t[\n\t\t\t\t\t\tinsertEntry(userEntry(\"root\")),\n\t\t\t\t\t\tinsertUsage({ id: \"historical-usage\", usage: usage(2, 3), adjustment: false }),\n\t\t\t\t\t],\n\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t);\n\t\t\t\tconst entriesBefore = await storage.scanEntries({ order: \"asc\" }, BACKGROUND_CONTEXT);\n\t\t\t\tconst usageBefore = await storage.scanUsage({ order: \"asc\" }, BACKGROUND_CONTEXT);\n\t\t\t\tconst statsBefore = await storage.getStats(BACKGROUND_CONTEXT);\n\n\t\t\t\tconst result = await storage.commit(\n\t\t\t\t\t[setValue(testName, \"first\"), setValue(testName, \"second\")],\n\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t);\n\n\t\t\t\tdeepStrictEqual(await storage.scanEntries({ order: \"asc\" }, BACKGROUND_CONTEXT), entriesBefore);\n\t\t\t\tdeepStrictEqual(await storage.scanUsage({ order: \"asc\" }, BACKGROUND_CONTEXT), usageBefore);\n\t\t\t\tdeepStrictEqual(await storage.getStats(BACKGROUND_CONTEXT), statsBefore);\n\t\t\t\tdeepStrictEqual(await storage.getValue(testName, BACKGROUND_CONTEXT), {\n\t\t\t\t\taddress: testName,\n\t\t\t\t\tvalue: \"second\",\n\t\t\t\t\tseq: result.seqs[1],\n\t\t\t\t});\n\t\t\t},\n\t\t),\n\n\t\tcreateCase(factory, \"lists\", \"pages appends by global sequence and deletes whole lists\", async ({ storage }) => {\n\t\t\tconst address = testList(\"events\");\n\t\t\tstrictEqual((await storage.readList(address, undefined, BACKGROUND_CONTEXT)).length, 0);\n\t\t\tconst result = await storage.commit(\n\t\t\t\t[appendList(address, \"a\"), setValue(testName, \"gap\"), appendList(address, \"b\"), appendList(address, \"c\")],\n\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t);\n\t\t\tdeepStrictEqual(await storage.readList(address, undefined, BACKGROUND_CONTEXT), [\n\t\t\t\t{ seq: result.seqs[0], value: \"a\" },\n\t\t\t\t{ seq: result.seqs[2], value: \"b\" },\n\t\t\t\t{ seq: result.seqs[3], value: \"c\" },\n\t\t\t]);\n\t\t\tdeepStrictEqual(await storage.readList(address, { limit: 2 }, BACKGROUND_CONTEXT), [\n\t\t\t\t{ seq: result.seqs[0], value: \"a\" },\n\t\t\t\t{ seq: result.seqs[2], value: \"b\" },\n\t\t\t]);\n\t\t\tdeepStrictEqual(\n\t\t\t\tawait storage.readList(address, { cursor: { seq: result.seqs[0]! }, limit: 2 }, BACKGROUND_CONTEXT),\n\t\t\t\t[\n\t\t\t\t\t{ seq: result.seqs[2], value: \"b\" },\n\t\t\t\t\t{ seq: result.seqs[3], value: \"c\" },\n\t\t\t\t],\n\t\t\t);\n\t\t\tdeepStrictEqual(await storage.readList(address, { order: \"desc\", limit: 2 }, BACKGROUND_CONTEXT), [\n\t\t\t\t{ seq: result.seqs[3], value: \"c\" },\n\t\t\t\t{ seq: result.seqs[2], value: \"b\" },\n\t\t\t]);\n\t\t\tdeepStrictEqual(\n\t\t\t\tawait storage.readList(\n\t\t\t\t\taddress,\n\t\t\t\t\t{ order: \"desc\", cursor: { seq: result.seqs[3]! }, limit: 2 },\n\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t),\n\t\t\t\t[\n\t\t\t\t\t{ seq: result.seqs[2], value: \"b\" },\n\t\t\t\t\t{ seq: result.seqs[0], value: \"a\" },\n\t\t\t\t],\n\t\t\t);\n\t\t\tawait rejects(storage.readList(address, { limit: 0 }, BACKGROUND_CONTEXT));\n\t\t\tawait rejects(storage.readList(address, { limit: Number.MAX_VALUE }, BACKGROUND_CONTEXT));\n\n\t\t\tawait storage.commit(\n\t\t\t\t[deleteList(address), deleteList(testList(\"absent\")), appendList(address, \"new\")],\n\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t);\n\t\t\tdeepStrictEqual(\n\t\t\t\t(await storage.readList(address, undefined, BACKGROUND_CONTEXT)).map(({ value }) => value),\n\t\t\t\t[\"new\"],\n\t\t\t);\n\t\t}),\n\n\t\tcreateCase(factory, \"lists\", \"clamps one read page without limiting list growth\", async ({ storage }) => {\n\t\t\tconst address = testList(\"large\");\n\t\t\tawait storage.commit(\n\t\t\t\tArray.from({ length: 10_001 }, (_, index) => appendList(address, index)),\n\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t);\n\t\t\tconst firstPage = await storage.readList(address, undefined, BACKGROUND_CONTEXT);\n\t\t\tstrictEqual(firstPage.length, 1_000);\n\t\t\tstrictEqual((await storage.readList(address, { limit: 20_000 }, BACKGROUND_CONTEXT)).length, 10_000);\n\t\t\tstrictEqual(\n\t\t\t\t(\n\t\t\t\t\tawait storage.readList(\n\t\t\t\t\t\taddress,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcursor: { seq: firstPage.at(-1)!.seq },\n\t\t\t\t\t\t},\n\t\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t\t)\n\t\t\t\t).length,\n\t\t\t\t1_000,\n\t\t\t);\n\t\t}),\n\n\t\tcreateCase(\n\t\t\tfactory,\n\t\t\t\"lists\",\n\t\t\t\"commits mixed list writes atomically and rolls them back with siblings\",\n\t\t\tasync ({ storage }) => {\n\t\t\t\tconst address = testList(\"atomic\");\n\t\t\t\tconst committed = await storage.commit(\n\t\t\t\t\t[\n\t\t\t\t\t\tinsertEntry(userEntry(\"mixed\")),\n\t\t\t\t\t\tappendList(address, \"kept\"),\n\t\t\t\t\t\tsetValue(testName, \"kept\"),\n\t\t\t\t\t\tinsertUsage({ id: \"mixed-usage\", usage: usage(1, 2), adjustment: false }),\n\t\t\t\t\t],\n\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t);\n\t\t\t\tdeepStrictEqual(await storage.readList(address, undefined, BACKGROUND_CONTEXT), [\n\t\t\t\t\t{ seq: committed.seqs[1], value: \"kept\" },\n\t\t\t\t]);\n\n\t\t\t\tawait rejects(\n\t\t\t\t\tstorage.commit(\n\t\t\t\t\t\t[appendList(address, \"transient\"), deleteValue(testName), insertEntry(userEntry(\"mixed\"))],\n\t\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t\tdeepStrictEqual(await storage.readList(address, undefined, BACKGROUND_CONTEXT), [\n\t\t\t\t\t{ seq: committed.seqs[1], value: \"kept\" },\n\t\t\t\t]);\n\t\t\t\tstrictEqual((await storage.getValue(testName, BACKGROUND_CONTEXT))?.value, \"kept\");\n\t\t\t},\n\t\t),\n\n\t\tcreateCase(factory, \"entry queries\", \"stores custom entries with and without data\", async ({ storage }) => {\n\t\t\tconst result = await storage.commit(\n\t\t\t\t[\n\t\t\t\t\tinsertEntry({ id: \"without-data\", parentId: null, type: \"custom\", customType: \"marker\" }),\n\t\t\t\t\tinsertEntry(customEntry(\"with-data\", \"without-data\", \"note\", { nested: [1, 2] })),\n\t\t\t\t],\n\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t);\n\n\t\t\tdeepStrictEqual(\n\t\t\t\tawait storage.getEntries([\"without-data\", \"with-data\"], BACKGROUND_CONTEXT),\n\t\t\t\tnew Map([\n\t\t\t\t\t[\n\t\t\t\t\t\t\"without-data\",\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: \"without-data\",\n\t\t\t\t\t\t\tparentId: null,\n\t\t\t\t\t\t\ttype: \"custom\",\n\t\t\t\t\t\t\tcustomType: \"marker\",\n\t\t\t\t\t\t\tseq: result.seqs[0],\n\t\t\t\t\t\t\ttimestamp: result.timestamp,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"with-data\",\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t...customEntry(\"with-data\", \"without-data\", \"note\", { nested: [1, 2] }),\n\t\t\t\t\t\t\tseq: result.seqs[1],\n\t\t\t\t\t\t\ttimestamp: result.timestamp,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t]),\n\t\t\t);\n\t\t}),\n\n\t\tcreateCase(\n\t\t\tfactory,\n\t\t\t\"entry queries\",\n\t\t\t\"scans global entries with explicit ranges, filters, orders, and limits\",\n\t\t\tasync ({ storage }) => {\n\t\t\t\tconst result = await storage.commit(\n\t\t\t\t\t[\n\t\t\t\t\t\tinsertEntry(userEntry(\"root\")),\n\t\t\t\t\t\tinsertEntry(customEntry(\"note-1\", \"root\", \"note\")),\n\t\t\t\t\t\tinsertEntry(customEntry(\"other\", \"note-1\", \"other\")),\n\t\t\t\t\t\tinsertEntry(customEntry(\"note-2\", \"other\", \"note\")),\n\t\t\t\t\t\tinsertEntry(userEntry(\"tail\", \"note-2\")),\n\t\t\t\t\t],\n\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t);\n\n\t\t\t\tdeepStrictEqual(\n\t\t\t\t\tids(\n\t\t\t\t\t\tawait storage.scanEntries(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttype: \"custom\",\n\t\t\t\t\t\t\t\tcustomType: \"note\",\n\t\t\t\t\t\t\t\tfromSeq: result.seqs[1],\n\t\t\t\t\t\t\t\ttoSeq: result.seqs[3],\n\t\t\t\t\t\t\t\torder: \"desc\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t\t\t),\n\t\t\t\t\t),\n\t\t\t\t\t[\"note-2\", \"note-1\"],\n\t\t\t\t);\n\t\t\t\tdeepStrictEqual(ids(await storage.scanEntries({ order: \"asc\", limit: 2 }, BACKGROUND_CONTEXT)), [\n\t\t\t\t\t\"root\",\n\t\t\t\t\t\"note-1\",\n\t\t\t\t]);\n\t\t\t\tdeepStrictEqual(ids(await storage.scanEntries({ order: \"desc\", limit: 2 }, BACKGROUND_CONTEXT)), [\n\t\t\t\t\t\"tail\",\n\t\t\t\t\t\"note-2\",\n\t\t\t\t]);\n\t\t\t},\n\t\t),\n\n\t\tcreateCase(\n\t\t\tfactory,\n\t\t\t\"branch queries\",\n\t\t\t\"applies stops before filters and cursors before limits\",\n\t\t\tasync ({ storage }) => {\n\t\t\t\tconst result = await storage.commit(\n\t\t\t\t\t[\n\t\t\t\t\t\tinsertEntry(userEntry(\"root\")),\n\t\t\t\t\t\tinsertEntry(customEntry(\"marker\", \"root\", \"marker\")),\n\t\t\t\t\t\tinsertEntry(userEntry(\"middle\", \"marker\")),\n\t\t\t\t\t\tinsertEntry(compactionEntry(\"compact\", \"middle\")),\n\t\t\t\t\t\tinsertEntry(customEntry(\"note\", \"compact\", \"note\")),\n\t\t\t\t\t\tinsertEntry(userEntry(\"leaf\", \"note\")),\n\t\t\t\t\t],\n\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t);\n\n\t\t\t\tdeepStrictEqual(\n\t\t\t\t\tids(\n\t\t\t\t\t\tawait storage.scanBranch(\n\t\t\t\t\t\t\t{ start: \"leaf\", stopAtType: \"compaction\", type: \"message\" },\n\t\t\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t\t\t),\n\t\t\t\t\t),\n\t\t\t\t\t[\"leaf\"],\n\t\t\t\t);\n\t\t\t\tdeepStrictEqual(\n\t\t\t\t\tids(\n\t\t\t\t\t\tawait storage.scanBranch(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tstart: \"leaf\",\n\t\t\t\t\t\t\t\torder: \"oldestFirst\",\n\t\t\t\t\t\t\t\tstopAtId: \"middle\",\n\t\t\t\t\t\t\t\ttype: \"custom\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t\t\t),\n\t\t\t\t\t),\n\t\t\t\t\t[\"marker\"],\n\t\t\t\t);\n\t\t\t\tdeepStrictEqual(\n\t\t\t\t\tids(\n\t\t\t\t\t\tawait storage.scanBranch(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tstart: \"leaf\",\n\t\t\t\t\t\t\t\torder: \"newestFirst\",\n\t\t\t\t\t\t\t\tcursor: { seq: result.seqs[4] },\n\t\t\t\t\t\t\t\tlimit: 2,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t\t\t),\n\t\t\t\t\t),\n\t\t\t\t\t[\"compact\", \"middle\"],\n\t\t\t\t);\n\t\t\t\tdeepStrictEqual(\n\t\t\t\t\tids(\n\t\t\t\t\t\tawait storage.scanBranch(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tstart: \"leaf\",\n\t\t\t\t\t\t\t\torder: \"oldestFirst\",\n\t\t\t\t\t\t\t\tcursor: { seq: result.seqs[1] },\n\t\t\t\t\t\t\t\tlimit: 2,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t\t\t),\n\t\t\t\t\t),\n\t\t\t\t\t[\"middle\", \"compact\"],\n\t\t\t\t);\n\t\t\t\tdeepStrictEqual(\n\t\t\t\t\tids(await storage.scanBranch({ start: \"leaf\", stopAtId: \"leaf\", type: \"custom\" }, BACKGROUND_CONTEXT)),\n\t\t\t\t\t[],\n\t\t\t\t);\n\t\t\t\tdeepStrictEqual(ids(await storage.scanBranch({ start: \"leaf\", customType: \"note\" }, BACKGROUND_CONTEXT)), [\n\t\t\t\t\t\"note\",\n\t\t\t\t]);\n\t\t\t\tawait rejects(storage.scanBranch({ start: \"missing\" }, BACKGROUND_CONTEXT));\n\t\t\t},\n\t\t),\n\n\t\tcreateCase(factory, \"branch queries\", \"returns branch structure without payload fields\", async ({ storage }) => {\n\t\t\tconst result = await storage.commit(\n\t\t\t\t[insertEntry(userEntry(\"root\")), insertEntry(customEntry(\"child\", \"root\", \"note\"))],\n\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t);\n\n\t\t\tdeepStrictEqual(\n\t\t\t\tawait storage.scanBranchStructure({ start: \"child\", order: \"oldestFirst\" }, BACKGROUND_CONTEXT),\n\t\t\t\t[\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"root\",\n\t\t\t\t\t\tparentId: null,\n\t\t\t\t\t\tseq: result.seqs[0],\n\t\t\t\t\t\ttimestamp: result.timestamp,\n\t\t\t\t\t\ttype: \"message\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"child\",\n\t\t\t\t\t\tparentId: \"root\",\n\t\t\t\t\t\tseq: result.seqs[1],\n\t\t\t\t\t\ttimestamp: result.timestamp,\n\t\t\t\t\t\ttype: \"custom\",\n\t\t\t\t\t\tcustomType: \"note\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t);\n\t\t}),\n\n\t\tcreateCase(\n\t\t\tfactory,\n\t\t\t\"branch queries\",\n\t\t\t\"applies branch query semantics to structure scans\",\n\t\t\tasync ({ storage }) => {\n\t\t\t\tconst result = await storage.commit(\n\t\t\t\t\t[\n\t\t\t\t\t\tinsertEntry(userEntry(\"root\")),\n\t\t\t\t\t\tinsertEntry(customEntry(\"marker\", \"root\", \"marker\")),\n\t\t\t\t\t\tinsertEntry(userEntry(\"middle\", \"marker\")),\n\t\t\t\t\t\tinsertEntry(compactionEntry(\"compact\", \"middle\")),\n\t\t\t\t\t\tinsertEntry(customEntry(\"note\", \"compact\", \"note\")),\n\t\t\t\t\t\tinsertEntry(userEntry(\"leaf\", \"note\")),\n\t\t\t\t\t],\n\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t);\n\n\t\t\t\tdeepStrictEqual(\n\t\t\t\t\tids(\n\t\t\t\t\t\tawait storage.scanBranchStructure(\n\t\t\t\t\t\t\t{ start: \"leaf\", stopAtType: \"compaction\", type: \"message\" },\n\t\t\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t\t\t),\n\t\t\t\t\t),\n\t\t\t\t\t[\"leaf\"],\n\t\t\t\t);\n\t\t\t\tdeepStrictEqual(\n\t\t\t\t\tids(\n\t\t\t\t\t\tawait storage.scanBranchStructure(\n\t\t\t\t\t\t\t{ start: \"leaf\", order: \"oldestFirst\", cursor: { seq: result.seqs[1] }, limit: 2 },\n\t\t\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t\t\t),\n\t\t\t\t\t),\n\t\t\t\t\t[\"middle\", \"compact\"],\n\t\t\t\t);\n\t\t\t\tawait rejects(storage.scanBranchStructure({ start: \"missing\" }, BACKGROUND_CONTEXT));\n\t\t\t},\n\t\t),\n\n\t\tcreateCase(\n\t\t\tfactory,\n\t\t\t\"usage and stats\",\n\t\t\t\"scans the usage ledger with explicit ranges, orders, and limits\",\n\t\t\tasync ({ storage }) => {\n\t\t\t\tconst result = await storage.commit(\n\t\t\t\t\t[\n\t\t\t\t\t\tinsertUsage({ id: \"usage-1\", usage: usage(1, 1), adjustment: false }),\n\t\t\t\t\t\tsetValue(testName, \"sequence gap\"),\n\t\t\t\t\t\tinsertUsage({ id: \"usage-2\", usage: usage(2, 2), adjustment: false }),\n\t\t\t\t\t\tinsertUsage({ id: \"usage-3\", usage: usage(3, 3), adjustment: true }),\n\t\t\t\t\t],\n\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t);\n\n\t\t\t\tdeepStrictEqual(\n\t\t\t\t\t(\n\t\t\t\t\t\tawait storage.scanUsage(\n\t\t\t\t\t\t\t{ fromSeq: result.seqs[1], toSeq: result.seqs[2], order: \"asc\" },\n\t\t\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t\t\t)\n\t\t\t\t\t).map((row) => row.id),\n\t\t\t\t\t[\"usage-2\"],\n\t\t\t\t);\n\t\t\t\tdeepStrictEqual(\n\t\t\t\t\t(await storage.scanUsage({ order: \"desc\", limit: 2 }, BACKGROUND_CONTEXT)).map((row) => row.id),\n\t\t\t\t\t[\"usage-3\", \"usage-2\"],\n\t\t\t\t);\n\t\t\t\tdeepStrictEqual(\n\t\t\t\t\t(await storage.scanUsage({ order: \"asc\", limit: 2 }, BACKGROUND_CONTEXT)).map((row) => row.id),\n\t\t\t\t\t[\"usage-1\", \"usage-2\"],\n\t\t\t\t);\n\t\t\t},\n\t\t),\n\n\t\tcreateCase(\n\t\t\tfactory,\n\t\t\t\"usage and stats\",\n\t\t\t\"keeps stats equal to message count and ledger totals\",\n\t\t\tasync ({ storage }) => {\n\t\t\t\tdeepStrictEqual(await storage.getStats(BACKGROUND_CONTEXT), { messageCount: 0, usage: zeroUsage() });\n\n\t\t\t\tconst firstUsage = usage(2, 3, { cacheWrite1h: 4, reasoning: 1 });\n\t\t\t\tconst first = await storage.commit(\n\t\t\t\t\t[\n\t\t\t\t\t\tinsertEntry(userEntry(\"message\")),\n\t\t\t\t\t\tinsertUsage({ id: \"usage-1\", usage: firstUsage, adjustment: false }),\n\t\t\t\t\t],\n\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t);\n\t\t\t\tawait assertCommitStats(storage, first);\n\t\t\t\tdeepStrictEqual(first.stats, { messageCount: 1, usage: firstUsage });\n\n\t\t\t\tconst secondUsage = usage(5, 7, { cacheWrite1h: 6, reasoning: 2 });\n\t\t\t\tconst second = await storage.commit(\n\t\t\t\t\t[\n\t\t\t\t\t\tinsertEntry(customEntry(\"custom\", \"message\")),\n\t\t\t\t\t\tinsertEntry(compactionEntry(\"compaction\", \"custom\")),\n\t\t\t\t\t\tinsertUsage({ id: \"usage-2\", usage: secondUsage, adjustment: true }),\n\t\t\t\t\t],\n\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t);\n\t\t\t\tawait assertCommitStats(storage, second);\n\t\t\t\tdeepStrictEqual(second.stats, {\n\t\t\t\t\tmessageCount: 1,\n\t\t\t\t\tusage: {\n\t\t\t\t\t\tinput: 7,\n\t\t\t\t\t\toutput: 10,\n\t\t\t\t\t\tcacheRead: 9,\n\t\t\t\t\t\tcacheWrite: 12,\n\t\t\t\t\t\tcacheWrite1h: 10,\n\t\t\t\t\t\treasoning: 3,\n\t\t\t\t\t\ttotalTokens: 17,\n\t\t\t\t\t\tcost: {\n\t\t\t\t\t\t\tinput: firstUsage.cost.input + secondUsage.cost.input,\n\t\t\t\t\t\t\toutput: firstUsage.cost.output + secondUsage.cost.output,\n\t\t\t\t\t\t\tcacheRead: firstUsage.cost.cacheRead + secondUsage.cost.cacheRead,\n\t\t\t\t\t\t\tcacheWrite: firstUsage.cost.cacheWrite + secondUsage.cost.cacheWrite,\n\t\t\t\t\t\t\ttotal: firstUsage.cost.total + secondUsage.cost.total,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t},\n\t\t),\n\n\t\tcreateCase(\n\t\t\tfactory,\n\t\t\t\"serialization\",\n\t\t\t\"serializes back-to-back commits in admission order\",\n\t\t\tasync ({ storage }) => {\n\t\t\t\tconst first = storage.commit([insertEntry(userEntry(\"first\"))], BACKGROUND_CONTEXT);\n\t\t\t\tconst second = storage.commit([insertEntry(userEntry(\"second\", \"first\"))], BACKGROUND_CONTEXT);\n\t\t\t\tconst [firstResult, secondResult] = await Promise.all([first, second]);\n\n\t\t\t\tok(firstResult.seqs[0]! < secondResult.seqs[0]!);\n\t\t\t\tdeepStrictEqual(firstResult.stats, { messageCount: 1, usage: zeroUsage() });\n\t\t\t\tdeepStrictEqual(secondResult.stats, { messageCount: 2, usage: zeroUsage() });\n\t\t\t\tawait assertCommitStats(storage, secondResult);\n\t\t\t\tdeepStrictEqual(ids(await storage.scanEntries({ order: \"asc\" }, BACKGROUND_CONTEXT)), [\"first\", \"second\"]);\n\t\t\t},\n\t\t),\n\n\t\tcreateCase(\n\t\t\tfactory,\n\t\t\t\"lifecycle\",\n\t\t\t\"seals admission, drains admitted commits, and closes idempotently\",\n\t\t\tasync ({ storage }) => {\n\t\t\t\tconst admitted = storage.commit([insertEntry(userEntry(\"admitted\"))], BACKGROUND_CONTEXT);\n\t\t\t\tconst firstClose = storage.close(BACKGROUND_CONTEXT);\n\t\t\t\tconst secondClose = storage.close(BACKGROUND_CONTEXT);\n\n\t\t\t\tawait rejects(storage.getStats(BACKGROUND_CONTEXT));\n\t\t\t\tawait rejects(storage.commit([], BACKGROUND_CONTEXT));\n\t\t\t\tstrictEqual((await admitted).seqs.length, 1);\n\t\t\t\tawait Promise.all([firstClose, secondClose]);\n\n\t\t\t\tconst rejectedReads = [\n\t\t\t\t\tstorage.getEntries([], BACKGROUND_CONTEXT),\n\t\t\t\t\tstorage.getValue(testName, BACKGROUND_CONTEXT),\n\t\t\t\t\tstorage.scanValues(testName, BACKGROUND_CONTEXT),\n\t\t\t\t\tstorage.readList(testList(\"events\"), undefined, BACKGROUND_CONTEXT),\n\t\t\t\t\tstorage.scanBranch({ start: \"admitted\" }, BACKGROUND_CONTEXT),\n\t\t\t\t\tstorage.scanBranchStructure({ start: \"admitted\" }, BACKGROUND_CONTEXT),\n\t\t\t\t\tstorage.scanEntries({ order: \"asc\" }, BACKGROUND_CONTEXT),\n\t\t\t\t\tstorage.scanUsage({ order: \"asc\" }, BACKGROUND_CONTEXT),\n\t\t\t\t\tstorage.getStats(BACKGROUND_CONTEXT),\n\t\t\t\t];\n\t\t\t\tfor (const read of rejectedReads) await rejects(read);\n\t\t\t},\n\t\t),\n\t];\n}\n"]}
@@ -1,26 +0,0 @@
1
- import type { Context } from "../../context.ts";
2
- import type { CommitResult, Write } from "../types.ts";
3
- import { StorageDecorator } from "./storage-decorator.ts";
4
- /** Thrown for every commit rejected after simulated storage loss. */
5
- export declare class CommitDiscarded extends Error {
6
- constructor(message: string);
7
- }
8
- /** Test-only storage decorator that deterministically parks admitted commits. */
9
- export declare class GatingStorage extends StorageDecorator {
10
- private armed;
11
- private discarded;
12
- private readonly queue;
13
- private readonly waiters;
14
- /** Fixture setup bypasses gating until explicitly armed. */
15
- arm(): void;
16
- pending(): number;
17
- /** Wait until at least `count` commits are parked. */
18
- waitPending(count?: number): Promise<void>;
19
- commit(writes: Write[], context: Context): Promise<CommitResult>;
20
- /** Release `count` commits in FIFO order and wait until each write lands. */
21
- next(count?: number): Promise<void>;
22
- /** Drop parked commits and permanently reject every later commit. */
23
- discard(): void;
24
- private notifyWaiters;
25
- }
26
- //# sourceMappingURL=gating-storage.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gating-storage.d.ts","sourceRoot":"","sources":["../../../../src/harness/session/testing/gating-storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,qEAAqE;AACrE,qBAAa,eAAgB,SAAQ,KAAK;IACzC,YAAY,OAAO,EAAE,MAAM,EAG1B;CACD;AAcD,iFAAiF;AACjF,qBAAa,aAAc,SAAQ,gBAAgB;IAClD,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAsB;IAC5C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuB;IAE/C,4DAA4D;IAC5D,GAAG,IAAI,IAAI,CAEV;IAED,OAAO,IAAI,MAAM,CAEhB;IAED,sDAAsD;IACtD,WAAW,CAAC,KAAK,SAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CASpC;IAEc,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CA4B9E;IAED,6EAA6E;IACvE,IAAI,CAAC,KAAK,SAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAWnC;IAED,qEAAqE;IACrE,OAAO,IAAI,IAAI,CAMd;IAED,OAAO,CAAC,aAAa;CAQrB"}
@@ -1,103 +0,0 @@
1
- import { StorageDecorator } from "./storage-decorator.js";
2
- /** Thrown for every commit rejected after simulated storage loss. */
3
- export class CommitDiscarded extends Error {
4
- constructor(message) {
5
- super(message);
6
- this.name = "CommitDiscarded";
7
- }
8
- }
9
- /** Test-only storage decorator that deterministically parks admitted commits. */
10
- export class GatingStorage extends StorageDecorator {
11
- constructor() {
12
- super(...arguments);
13
- this.armed = false;
14
- this.discarded = false;
15
- this.queue = [];
16
- this.waiters = [];
17
- }
18
- /** Fixture setup bypasses gating until explicitly armed. */
19
- arm() {
20
- this.armed = true;
21
- }
22
- pending() {
23
- return this.queue.length;
24
- }
25
- /** Wait until at least `count` commits are parked. */
26
- waitPending(count = 1) {
27
- if (!Number.isSafeInteger(count) || count < 1) {
28
- return Promise.reject(new RangeError("Pending commit count must be a positive safe integer"));
29
- }
30
- if (this.discarded)
31
- return Promise.reject(new CommitDiscarded("storage discarded"));
32
- if (this.queue.length >= count)
33
- return Promise.resolve();
34
- return new Promise((resolve, reject) => {
35
- this.waiters.push({ count, resolve, reject });
36
- });
37
- }
38
- async commit(writes, context) {
39
- if (this.discarded)
40
- throw new CommitDiscarded("commit rejected: storage discarded");
41
- if (!this.armed)
42
- return super.commit(writes, context);
43
- let landed;
44
- let lost;
45
- const landing = new Promise((resolve, reject) => {
46
- landed = resolve;
47
- lost = reject;
48
- });
49
- void landing.catch(() => { });
50
- const released = new Promise((resolve, reject) => {
51
- this.queue.push({ release: resolve, drop: reject, landing });
52
- });
53
- this.notifyWaiters();
54
- try {
55
- await released;
56
- if (this.discarded)
57
- throw new CommitDiscarded("commit rejected: storage discarded");
58
- const result = await super.commit(writes, context);
59
- landed();
60
- return result;
61
- }
62
- catch (error) {
63
- const normalized = error instanceof Error ? error : new Error(String(error));
64
- lost(normalized);
65
- throw error;
66
- }
67
- }
68
- /** Release `count` commits in FIFO order and wait until each write lands. */
69
- async next(count = 1) {
70
- if (!Number.isSafeInteger(count) || count < 1) {
71
- throw new RangeError("Released commit count must be a positive safe integer");
72
- }
73
- for (let index = 0; index < count; index++) {
74
- await this.waitPending();
75
- const parked = this.queue.shift();
76
- if (parked === undefined)
77
- throw new Error("No parked commit");
78
- parked.release();
79
- await parked.landing;
80
- }
81
- }
82
- /** Drop parked commits and permanently reject every later commit. */
83
- discard() {
84
- if (this.discarded)
85
- return;
86
- this.discarded = true;
87
- const error = new CommitDiscarded("commit discarded");
88
- for (const parked of this.queue.splice(0))
89
- parked.drop(error);
90
- for (const waiter of this.waiters.splice(0))
91
- waiter.reject(error);
92
- }
93
- notifyWaiters() {
94
- for (let index = this.waiters.length - 1; index >= 0; index--) {
95
- const waiter = this.waiters[index];
96
- if (this.queue.length < waiter.count)
97
- continue;
98
- this.waiters.splice(index, 1);
99
- waiter.resolve();
100
- }
101
- }
102
- }
103
- //# sourceMappingURL=gating-storage.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gating-storage.js","sourceRoot":"","sources":["../../../../src/harness/session/testing/gating-storage.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Context } from \"../../context.ts\";\nimport type { CommitResult, Write } from \"../types.ts\";\nimport { StorageDecorator } from \"./storage-decorator.ts\";\n\n/** Thrown for every commit rejected after simulated storage loss. */\nexport class CommitDiscarded extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message);\n\t\tthis.name = \"CommitDiscarded\";\n\t}\n}\n\ninterface ParkedCommit {\n\trelease(): void;\n\tdrop(error: Error): void;\n\treadonly landing: Promise<void>;\n}\n\ninterface PendingWaiter {\n\tcount: number;\n\tresolve(): void;\n\treject(error: Error): void;\n}\n\n/** Test-only storage decorator that deterministically parks admitted commits. */\nexport class GatingStorage extends StorageDecorator {\n\tprivate armed = false;\n\tprivate discarded = false;\n\tprivate readonly queue: ParkedCommit[] = [];\n\tprivate readonly waiters: PendingWaiter[] = [];\n\n\t/** Fixture setup bypasses gating until explicitly armed. */\n\tarm(): void {\n\t\tthis.armed = true;\n\t}\n\n\tpending(): number {\n\t\treturn this.queue.length;\n\t}\n\n\t/** Wait until at least `count` commits are parked. */\n\twaitPending(count = 1): Promise<void> {\n\t\tif (!Number.isSafeInteger(count) || count < 1) {\n\t\t\treturn Promise.reject(new RangeError(\"Pending commit count must be a positive safe integer\"));\n\t\t}\n\t\tif (this.discarded) return Promise.reject(new CommitDiscarded(\"storage discarded\"));\n\t\tif (this.queue.length >= count) return Promise.resolve();\n\t\treturn new Promise<void>((resolve, reject) => {\n\t\t\tthis.waiters.push({ count, resolve, reject });\n\t\t});\n\t}\n\n\toverride async commit(writes: Write[], context: Context): Promise<CommitResult> {\n\t\tif (this.discarded) throw new CommitDiscarded(\"commit rejected: storage discarded\");\n\t\tif (!this.armed) return super.commit(writes, context);\n\n\t\tlet landed!: () => void;\n\t\tlet lost!: (error: Error) => void;\n\t\tconst landing = new Promise<void>((resolve, reject) => {\n\t\t\tlanded = resolve;\n\t\t\tlost = reject;\n\t\t});\n\t\tvoid landing.catch(() => {});\n\n\t\tconst released = new Promise<void>((resolve, reject) => {\n\t\t\tthis.queue.push({ release: resolve, drop: reject, landing });\n\t\t});\n\t\tthis.notifyWaiters();\n\n\t\ttry {\n\t\t\tawait released;\n\t\t\tif (this.discarded) throw new CommitDiscarded(\"commit rejected: storage discarded\");\n\t\t\tconst result = await super.commit(writes, context);\n\t\t\tlanded();\n\t\t\treturn result;\n\t\t} catch (error) {\n\t\t\tconst normalized = error instanceof Error ? error : new Error(String(error));\n\t\t\tlost(normalized);\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\t/** Release `count` commits in FIFO order and wait until each write lands. */\n\tasync next(count = 1): Promise<void> {\n\t\tif (!Number.isSafeInteger(count) || count < 1) {\n\t\t\tthrow new RangeError(\"Released commit count must be a positive safe integer\");\n\t\t}\n\t\tfor (let index = 0; index < count; index++) {\n\t\t\tawait this.waitPending();\n\t\t\tconst parked = this.queue.shift();\n\t\t\tif (parked === undefined) throw new Error(\"No parked commit\");\n\t\t\tparked.release();\n\t\t\tawait parked.landing;\n\t\t}\n\t}\n\n\t/** Drop parked commits and permanently reject every later commit. */\n\tdiscard(): void {\n\t\tif (this.discarded) return;\n\t\tthis.discarded = true;\n\t\tconst error = new CommitDiscarded(\"commit discarded\");\n\t\tfor (const parked of this.queue.splice(0)) parked.drop(error);\n\t\tfor (const waiter of this.waiters.splice(0)) waiter.reject(error);\n\t}\n\n\tprivate notifyWaiters(): void {\n\t\tfor (let index = this.waiters.length - 1; index >= 0; index--) {\n\t\t\tconst waiter = this.waiters[index]!;\n\t\t\tif (this.queue.length < waiter.count) continue;\n\t\t\tthis.waiters.splice(index, 1);\n\t\t\twaiter.resolve();\n\t\t}\n\t}\n}\n"]}
@@ -1,11 +0,0 @@
1
- import type { Context } from "../../context.ts";
2
- import type { CommitResult, Write } from "../types.ts";
3
- import { StorageDecorator } from "./storage-decorator.ts";
4
- /** Test-only transparent Storage decorator that records commit admission. */
5
- export declare class InstrumentedStorage extends StorageDecorator {
6
- private readonly commitAttempts;
7
- getCommitAttempts(): readonly Write[][];
8
- clearCommitAttempts(): void;
9
- commit(writes: Write[], context: Context): Promise<CommitResult>;
10
- }
11
- //# sourceMappingURL=instrumented-storage.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"instrumented-storage.d.ts","sourceRoot":"","sources":["../../../../src/harness/session/testing/instrumented-storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,6EAA6E;AAC7E,qBAAa,mBAAoB,SAAQ,gBAAgB;IACxD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAEhD,iBAAiB,IAAI,SAAS,KAAK,EAAE,EAAE,CAEtC;IAED,mBAAmB,IAAI,IAAI,CAE1B;IAEQ,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CAGxE;CACD"}
@@ -1,19 +0,0 @@
1
- import { StorageDecorator } from "./storage-decorator.js";
2
- /** Test-only transparent Storage decorator that records commit admission. */
3
- export class InstrumentedStorage extends StorageDecorator {
4
- constructor() {
5
- super(...arguments);
6
- this.commitAttempts = [];
7
- }
8
- getCommitAttempts() {
9
- return this.commitAttempts.slice();
10
- }
11
- clearCommitAttempts() {
12
- this.commitAttempts.length = 0;
13
- }
14
- commit(writes, context) {
15
- this.commitAttempts.push(writes);
16
- return this.delegate.commit(writes, context);
17
- }
18
- }
19
- //# sourceMappingURL=instrumented-storage.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"instrumented-storage.js","sourceRoot":"","sources":["../../../../src/harness/session/testing/instrumented-storage.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,6EAA6E;AAC7E,MAAM,OAAO,mBAAoB,SAAQ,gBAAgB;IAAzD;;QACkB,mBAAc,GAAc,EAAE,CAAC;IAcjD,CAAC;IAZA,iBAAiB;QAChB,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;IACpC,CAAC;IAED,mBAAmB;QAClB,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;IAChC,CAAC;IAEQ,MAAM,CAAC,MAAe,EAAE,OAAgB;QAChD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjC,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;CACD","sourcesContent":["import type { Context } from \"../../context.ts\";\nimport type { CommitResult, Write } from \"../types.ts\";\nimport { StorageDecorator } from \"./storage-decorator.ts\";\n\n/** Test-only transparent Storage decorator that records commit admission. */\nexport class InstrumentedStorage extends StorageDecorator {\n\tprivate readonly commitAttempts: Write[][] = [];\n\n\tgetCommitAttempts(): readonly Write[][] {\n\t\treturn this.commitAttempts.slice();\n\t}\n\n\tclearCommitAttempts(): void {\n\t\tthis.commitAttempts.length = 0;\n\t}\n\n\toverride commit(writes: Write[], context: Context): Promise<CommitResult> {\n\t\tthis.commitAttempts.push(writes);\n\t\treturn this.delegate.commit(writes, context);\n\t}\n}\n"]}
@@ -1,20 +0,0 @@
1
- import type { Context } from "../../context.ts";
2
- import type { CommitResult, Entry, EntryScan, EntryStructure, SessionStats, Storage, StorageBranchScan, UsageRow, UsageScan, Write } from "../types.ts";
3
- import type { ListElement, ListReadOptions, StoredValue, Value, ValueList } from "../values.ts";
4
- /** Test-only forwarding base for decorators that alter one part of Storage behavior. */
5
- export declare class StorageDecorator implements Storage {
6
- protected readonly delegate: Storage;
7
- constructor(delegate: Storage);
8
- commit(writes: Write[], context: Context): Promise<CommitResult>;
9
- getEntries(ids: string[], context: Context): Promise<Map<string, Entry>>;
10
- getValue<T>(address: Value<T>, context: Context): Promise<StoredValue<T> | undefined>;
11
- scanValues<T>(prefix: Value<T>, context: Context): Promise<StoredValue<T>[]>;
12
- readList<T>(address: ValueList<T>, options: ListReadOptions | undefined, context: Context): Promise<ListElement<T>[]>;
13
- scanBranch(query: StorageBranchScan, context: Context): Promise<Entry[]>;
14
- scanBranchStructure(query: StorageBranchScan, context: Context): Promise<EntryStructure[]>;
15
- scanEntries(query: EntryScan, context: Context): Promise<Entry[]>;
16
- scanUsage(query: UsageScan, context: Context): Promise<UsageRow[]>;
17
- getStats(context: Context): Promise<SessionStats>;
18
- close(context: Context): Promise<void>;
19
- }
20
- //# sourceMappingURL=storage-decorator.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"storage-decorator.d.ts","sourceRoot":"","sources":["../../../../src/harness/session/testing/storage-decorator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,EACX,YAAY,EACZ,KAAK,EACL,SAAS,EACT,cAAc,EACd,YAAY,EACZ,OAAO,EACP,iBAAiB,EACjB,QAAQ,EACR,SAAS,EACT,KAAK,EACL,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEhG,wFAAwF;AACxF,qBAAa,gBAAiB,YAAW,OAAO;IAC/C,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAErC,YAAY,QAAQ,EAAE,OAAO,EAE5B;IAED,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CAE/D;IAED,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAEvE;IAED,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAEpF;IAED,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAE3E;IAED,QAAQ,CAAC,CAAC,EACT,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,EACrB,OAAO,EAAE,eAAe,GAAG,SAAS,EACpC,OAAO,EAAE,OAAO,GACd,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAE3B;IAED,UAAU,CAAC,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAEvE;IAED,mBAAmB,CAAC,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAEzF;IAED,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAEhE;IAED,SAAS,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAEjE;IAED,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CAEhD;IAED,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAErC;CACD"}
@@ -1,40 +0,0 @@
1
- /** Test-only forwarding base for decorators that alter one part of Storage behavior. */
2
- export class StorageDecorator {
3
- constructor(delegate) {
4
- this.delegate = delegate;
5
- }
6
- commit(writes, context) {
7
- return this.delegate.commit(writes, context);
8
- }
9
- getEntries(ids, context) {
10
- return this.delegate.getEntries(ids, context);
11
- }
12
- getValue(address, context) {
13
- return this.delegate.getValue(address, context);
14
- }
15
- scanValues(prefix, context) {
16
- return this.delegate.scanValues(prefix, context);
17
- }
18
- readList(address, options, context) {
19
- return this.delegate.readList(address, options, context);
20
- }
21
- scanBranch(query, context) {
22
- return this.delegate.scanBranch(query, context);
23
- }
24
- scanBranchStructure(query, context) {
25
- return this.delegate.scanBranchStructure(query, context);
26
- }
27
- scanEntries(query, context) {
28
- return this.delegate.scanEntries(query, context);
29
- }
30
- scanUsage(query, context) {
31
- return this.delegate.scanUsage(query, context);
32
- }
33
- getStats(context) {
34
- return this.delegate.getStats(context);
35
- }
36
- close(context) {
37
- return this.delegate.close(context);
38
- }
39
- }
40
- //# sourceMappingURL=storage-decorator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"storage-decorator.js","sourceRoot":"","sources":["../../../../src/harness/session/testing/storage-decorator.ts"],"names":[],"mappings":"AAeA,wFAAwF;AACxF,MAAM,OAAO,gBAAgB;IAG5B,YAAY,QAAiB;QAC5B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC1B,CAAC;IAED,MAAM,CAAC,MAAe,EAAE,OAAgB;QACvC,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED,UAAU,CAAC,GAAa,EAAE,OAAgB;QACzC,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC/C,CAAC;IAED,QAAQ,CAAI,OAAiB,EAAE,OAAgB;QAC9C,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC;IAED,UAAU,CAAI,MAAgB,EAAE,OAAgB;QAC/C,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClD,CAAC;IAED,QAAQ,CACP,OAAqB,EACrB,OAAoC,EACpC,OAAgB;QAEhB,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC1D,CAAC;IAED,UAAU,CAAC,KAAwB,EAAE,OAAgB;QACpD,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC;IAED,mBAAmB,CAAC,KAAwB,EAAE,OAAgB;QAC7D,OAAO,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC1D,CAAC;IAED,WAAW,CAAC,KAAgB,EAAE,OAAgB;QAC7C,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAClD,CAAC;IAED,SAAS,CAAC,KAAgB,EAAE,OAAgB;QAC3C,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAChD,CAAC;IAED,QAAQ,CAAC,OAAgB;QACxB,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,OAAgB;QACrB,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;CACD","sourcesContent":["import type { Context } from \"../../context.ts\";\nimport type {\n\tCommitResult,\n\tEntry,\n\tEntryScan,\n\tEntryStructure,\n\tSessionStats,\n\tStorage,\n\tStorageBranchScan,\n\tUsageRow,\n\tUsageScan,\n\tWrite,\n} from \"../types.ts\";\nimport type { ListElement, ListReadOptions, StoredValue, Value, ValueList } from \"../values.ts\";\n\n/** Test-only forwarding base for decorators that alter one part of Storage behavior. */\nexport class StorageDecorator implements Storage {\n\tprotected readonly delegate: Storage;\n\n\tconstructor(delegate: Storage) {\n\t\tthis.delegate = delegate;\n\t}\n\n\tcommit(writes: Write[], context: Context): Promise<CommitResult> {\n\t\treturn this.delegate.commit(writes, context);\n\t}\n\n\tgetEntries(ids: string[], context: Context): Promise<Map<string, Entry>> {\n\t\treturn this.delegate.getEntries(ids, context);\n\t}\n\n\tgetValue<T>(address: Value<T>, context: Context): Promise<StoredValue<T> | undefined> {\n\t\treturn this.delegate.getValue(address, context);\n\t}\n\n\tscanValues<T>(prefix: Value<T>, context: Context): Promise<StoredValue<T>[]> {\n\t\treturn this.delegate.scanValues(prefix, context);\n\t}\n\n\treadList<T>(\n\t\taddress: ValueList<T>,\n\t\toptions: ListReadOptions | undefined,\n\t\tcontext: Context,\n\t): Promise<ListElement<T>[]> {\n\t\treturn this.delegate.readList(address, options, context);\n\t}\n\n\tscanBranch(query: StorageBranchScan, context: Context): Promise<Entry[]> {\n\t\treturn this.delegate.scanBranch(query, context);\n\t}\n\n\tscanBranchStructure(query: StorageBranchScan, context: Context): Promise<EntryStructure[]> {\n\t\treturn this.delegate.scanBranchStructure(query, context);\n\t}\n\n\tscanEntries(query: EntryScan, context: Context): Promise<Entry[]> {\n\t\treturn this.delegate.scanEntries(query, context);\n\t}\n\n\tscanUsage(query: UsageScan, context: Context): Promise<UsageRow[]> {\n\t\treturn this.delegate.scanUsage(query, context);\n\t}\n\n\tgetStats(context: Context): Promise<SessionStats> {\n\t\treturn this.delegate.getStats(context);\n\t}\n\n\tclose(context: Context): Promise<void> {\n\t\treturn this.delegate.close(context);\n\t}\n}\n"]}
@@ -1,95 +0,0 @@
1
- import type { AssistantMessageFrame } from "@earendil-works/pi-ai";
2
- import type { AgentToolResult } from "../../types.ts";
3
- import type { DurableStructuralPreparation, JsonValue, LaneConfiguration, LaneState, OperationMeta, OperationResultRecord, OperationState, PendingEntry } from "./types.ts";
4
- declare const storedValueType: unique symbol;
5
- export interface StoredAddressBase {
6
- readonly namespace: string;
7
- readonly key: string;
8
- readonly kind: "value" | "list";
9
- }
10
- export interface Value<T> extends StoredAddressBase {
11
- readonly kind: "value";
12
- readonly [storedValueType]?: (value: T) => T;
13
- }
14
- export interface ValueList<T> extends StoredAddressBase {
15
- readonly kind: "list";
16
- readonly [storedValueType]?: (value: T) => T;
17
- }
18
- export interface StoredValue<T> {
19
- address: Value<T>;
20
- value: T;
21
- seq: number;
22
- }
23
- export interface ListElement<T> {
24
- seq: number;
25
- value: T;
26
- }
27
- export interface ListCursor {
28
- seq: number;
29
- }
30
- export interface ListReadOptions {
31
- cursor?: ListCursor;
32
- order?: "asc" | "desc";
33
- limit?: number;
34
- }
35
- export interface ResolvedListReadOptions {
36
- cursor?: ListCursor;
37
- order: "asc" | "desc";
38
- limit: number;
39
- }
40
- export interface ValueSetWrite {
41
- kind: "value";
42
- op: "set";
43
- namespace: string;
44
- key: string;
45
- value: unknown;
46
- }
47
- export interface ValueDeleteWrite {
48
- kind: "value";
49
- op: "delete";
50
- namespace: string;
51
- key: string;
52
- }
53
- export interface ListAppendWrite {
54
- kind: "list";
55
- op: "append";
56
- namespace: string;
57
- key: string;
58
- value: unknown;
59
- }
60
- export interface ListDeleteWrite {
61
- kind: "list";
62
- op: "delete";
63
- namespace: string;
64
- key: string;
65
- }
66
- export type ValueWrite = ValueSetWrite | ValueDeleteWrite;
67
- export type ListWrite = ListAppendWrite | ListDeleteWrite;
68
- export declare function value<T>(namespace: string, key?: string): Value<T>;
69
- export declare function list<T>(namespace: string, key?: string): ValueList<T>;
70
- export declare function setValue<T>(address: Value<T>, next: NoInfer<T>): ValueSetWrite;
71
- export declare function deleteValue<T>(address: Value<T>): ValueDeleteWrite;
72
- export declare function appendList<T>(address: ValueList<T>, element: NoInfer<T>): ListAppendWrite;
73
- export declare function deleteList<T>(address: ValueList<T>): ListDeleteWrite;
74
- export declare function resolveListReadOptions(options?: ListReadOptions): ResolvedListReadOptions;
75
- export declare const branchTip: (branch: string) => Value<string | null>;
76
- export declare const branchTipInventoryPrefix: () => Value<string | null>;
77
- export declare const laneConfig: (lane: string) => Value<LaneConfiguration>;
78
- export declare const laneState: (lane: string) => Value<LaneState>;
79
- export declare const operationResult: (operationId: string) => Value<OperationResultRecord>;
80
- export declare const operationMeta: (operationId: string) => Value<OperationMeta>;
81
- export declare const operationState: (operationId: string) => Value<OperationState>;
82
- export declare const operationToolArgs: (operationId: string, stepId: string, sourceIndex: number) => Value<Record<string, JsonValue>>;
83
- export declare const operationToolMemo: (operationId: string, invocationId: string, name: string) => Value<JsonValue>;
84
- export declare const operationPreparation: (operationId: string, taskId: string) => Value<DurableStructuralPreparation>;
85
- export declare const operationToolArgsPrefix: (operationId: string, stepId?: string) => Value<Record<string, JsonValue>>;
86
- export declare const operationToolMemoPrefix: (operationId: string, invocationId?: string) => Value<JsonValue>;
87
- export declare const operationPreparationPrefix: (operationId: string) => Value<DurableStructuralPreparation>;
88
- export declare const pendingEntry: (entryId: string) => Value<PendingEntry>;
89
- export declare const pendingToolOutput: (operationId: string, invocationId: string) => Value<AgentToolResult<unknown>>;
90
- export declare const pendingAssistantFrames: (operationId: string, responseEntryId: string) => ValueList<AssistantMessageFrame>;
91
- export declare const pendingToolOutputPrefix: (operationId: string) => Value<AgentToolResult<unknown>>;
92
- export declare const sessionName: Value<string>;
93
- export declare const entryLabel: (entryId: string) => Value<string>;
94
- export {};
95
- //# sourceMappingURL=values.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"values.d.ts","sourceRoot":"","sources":["../../../src/harness/session/values.ts"],"names":[],"mappings":"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"}
@@ -1,81 +0,0 @@
1
- function validateAddress(namespace, key) {
2
- if (namespace.length === 0)
3
- throw new TypeError("Value namespace must not be empty");
4
- if (namespace.includes("\u0000"))
5
- throw new TypeError("Value namespace must not contain \\u0000");
6
- if (key.includes("\u0000"))
7
- throw new TypeError("Value key must not contain \\u0000");
8
- }
9
- export function value(namespace, key = "") {
10
- validateAddress(namespace, key);
11
- return Object.freeze({ namespace, key, kind: "value" });
12
- }
13
- export function list(namespace, key = "") {
14
- validateAddress(namespace, key);
15
- return Object.freeze({ namespace, key, kind: "list" });
16
- }
17
- export function setValue(address, next) {
18
- return {
19
- kind: "value",
20
- op: "set",
21
- namespace: address.namespace,
22
- key: address.key,
23
- value: next,
24
- };
25
- }
26
- export function deleteValue(address) {
27
- return {
28
- kind: "value",
29
- op: "delete",
30
- namespace: address.namespace,
31
- key: address.key,
32
- };
33
- }
34
- export function appendList(address, element) {
35
- return {
36
- kind: "list",
37
- op: "append",
38
- namespace: address.namespace,
39
- key: address.key,
40
- value: element,
41
- };
42
- }
43
- export function deleteList(address) {
44
- return {
45
- kind: "list",
46
- op: "delete",
47
- namespace: address.namespace,
48
- key: address.key,
49
- };
50
- }
51
- export function resolveListReadOptions(options = {}) {
52
- const requestedLimit = options.limit ?? 1_000;
53
- if (!Number.isSafeInteger(requestedLimit) || requestedLimit <= 0) {
54
- throw new TypeError("List read limit must be a positive safe integer");
55
- }
56
- return {
57
- ...(options.cursor === undefined ? {} : { cursor: options.cursor }),
58
- order: options.order ?? "asc",
59
- limit: Math.min(requestedLimit, 10_000),
60
- };
61
- }
62
- export const branchTip = (branch) => value("pi.branch.tip", branch);
63
- export const branchTipInventoryPrefix = () => value("pi.branch.tip");
64
- export const laneConfig = (lane) => value("pi.lane.config", lane);
65
- export const laneState = (lane) => value("pi.lane.state", lane);
66
- export const operationResult = (operationId) => value("pi.result", operationId);
67
- export const operationMeta = (operationId) => value("pi.op.meta", operationId);
68
- export const operationState = (operationId) => value("pi.op.state", operationId);
69
- export const operationToolArgs = (operationId, stepId, sourceIndex) => value("pi.op.tool_args", `${operationId}:${stepId}:${sourceIndex}`);
70
- export const operationToolMemo = (operationId, invocationId, name) => value("pi.op.tool_memo", `${operationId}:${invocationId}:${name}`);
71
- export const operationPreparation = (operationId, taskId) => value("pi.op.preparation", `${operationId}:${taskId}`);
72
- export const operationToolArgsPrefix = (operationId, stepId) => value("pi.op.tool_args", stepId === undefined ? `${operationId}:` : `${operationId}:${stepId}:`);
73
- export const operationToolMemoPrefix = (operationId, invocationId) => value("pi.op.tool_memo", invocationId === undefined ? `${operationId}:` : `${operationId}:${invocationId}:`);
74
- export const operationPreparationPrefix = (operationId) => value("pi.op.preparation", `${operationId}:`);
75
- export const pendingEntry = (entryId) => value("pi.pending.entry", entryId);
76
- export const pendingToolOutput = (operationId, invocationId) => value("pi.pending.tool_output", `${operationId}:${invocationId}`);
77
- export const pendingAssistantFrames = (operationId, responseEntryId) => list("pi.pending.assistant_frame", `${operationId}:${responseEntryId}`);
78
- export const pendingToolOutputPrefix = (operationId) => value("pi.pending.tool_output", `${operationId}:`);
79
- export const sessionName = value("pi.session.name");
80
- export const entryLabel = (entryId) => value("pi.entry.label", entryId);
81
- //# sourceMappingURL=values.js.map