@greppleai/grip 0.1.5 → 0.1.7

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 (587) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/README.md +1 -1
  3. package/dist/bun/cli.d.ts.map +1 -1
  4. package/dist/bun/cli.js.map +1 -1
  5. package/dist/bun/embedded-assets.d.ts.map +1 -1
  6. package/dist/bun/embedded-assets.js.map +1 -1
  7. package/dist/bun/register-bedrock.d.ts.map +1 -1
  8. package/dist/bun/restore-sandbox-env.d.ts.map +1 -1
  9. package/dist/bun/restore-sandbox-env.js.map +1 -1
  10. package/dist/cli/args.d.ts.map +1 -1
  11. package/dist/cli/args.js.map +1 -1
  12. package/dist/cli/config-selector.d.ts.map +1 -1
  13. package/dist/cli/config-selector.js.map +1 -1
  14. package/dist/cli/file-processor.d.ts.map +1 -1
  15. package/dist/cli/file-processor.js.map +1 -1
  16. package/dist/cli/initial-message.d.ts +1 -1
  17. package/dist/cli/initial-message.d.ts.map +1 -1
  18. package/dist/cli/initial-message.js.map +1 -1
  19. package/dist/cli/list-models.d.ts.map +1 -1
  20. package/dist/cli/list-models.js.map +1 -1
  21. package/dist/cli/session-picker.d.ts.map +1 -1
  22. package/dist/cli/session-picker.js.map +1 -1
  23. package/dist/cli.d.ts.map +1 -1
  24. package/dist/cli.js.map +1 -1
  25. package/dist/config.d.ts.map +1 -1
  26. package/dist/config.js +2 -0
  27. package/dist/config.js.map +1 -1
  28. package/dist/core/agent-session.d.ts +38 -1
  29. package/dist/core/agent-session.d.ts.map +1 -1
  30. package/dist/core/agent-session.js +289 -154
  31. package/dist/core/agent-session.js.map +1 -1
  32. package/dist/core/auth-guidance.d.ts.map +1 -1
  33. package/dist/core/auth-guidance.js.map +1 -1
  34. package/dist/core/auth-storage.d.ts +4 -0
  35. package/dist/core/auth-storage.d.ts.map +1 -1
  36. package/dist/core/auth-storage.js +3 -10
  37. package/dist/core/auth-storage.js.map +1 -1
  38. package/dist/core/bash-executor.d.ts.map +1 -1
  39. package/dist/core/bash-executor.js +19 -23
  40. package/dist/core/bash-executor.js.map +1 -1
  41. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  42. package/dist/core/compaction/branch-summarization.js.map +1 -1
  43. package/dist/core/compaction/compaction.d.ts.map +1 -1
  44. package/dist/core/compaction/compaction.js +9 -2
  45. package/dist/core/compaction/compaction.js.map +1 -1
  46. package/dist/core/compaction/compression-detection-ledger.d.ts.map +1 -1
  47. package/dist/core/compaction/compression-detection-ledger.js.map +1 -1
  48. package/dist/core/compaction/compression-detector.d.ts +1 -0
  49. package/dist/core/compaction/compression-detector.d.ts.map +1 -1
  50. package/dist/core/compaction/compression-detector.js +10 -21
  51. package/dist/core/compaction/compression-detector.js.map +1 -1
  52. package/dist/core/compaction/compression-economics.d.ts.map +1 -1
  53. package/dist/core/compaction/compression-economics.js.map +1 -1
  54. package/dist/core/compaction/utils.d.ts.map +1 -1
  55. package/dist/core/compaction/utils.js.map +1 -1
  56. package/dist/core/defaults.d.ts.map +1 -1
  57. package/dist/core/diagnostics.d.ts.map +1 -1
  58. package/dist/core/event-bus.d.ts.map +1 -1
  59. package/dist/core/event-bus.js.map +1 -1
  60. package/dist/core/exec.d.ts.map +1 -1
  61. package/dist/core/exec.js.map +1 -1
  62. package/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
  63. package/dist/core/export-html/ansi-to-html.js.map +1 -1
  64. package/dist/core/export-html/index.d.ts.map +1 -1
  65. package/dist/core/export-html/index.js.map +1 -1
  66. package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
  67. package/dist/core/export-html/tool-renderer.js.map +1 -1
  68. package/dist/core/extensions/loader.d.ts.map +1 -1
  69. package/dist/core/extensions/loader.js.map +1 -1
  70. package/dist/core/extensions/runner.d.ts +3 -0
  71. package/dist/core/extensions/runner.d.ts.map +1 -1
  72. package/dist/core/extensions/runner.js +40 -30
  73. package/dist/core/extensions/runner.js.map +1 -1
  74. package/dist/core/extensions/types.d.ts +21 -1
  75. package/dist/core/extensions/types.d.ts.map +1 -1
  76. package/dist/core/extensions/types.js.map +1 -1
  77. package/dist/core/extensions/wrapper.d.ts.map +1 -1
  78. package/dist/core/extensions/wrapper.js.map +1 -1
  79. package/dist/core/footer-data-provider.d.ts.map +1 -1
  80. package/dist/core/footer-data-provider.js +15 -16
  81. package/dist/core/footer-data-provider.js.map +1 -1
  82. package/dist/core/grip-agent.d.ts.map +1 -1
  83. package/dist/core/grip-agent.js +7 -21
  84. package/dist/core/grip-agent.js.map +1 -1
  85. package/dist/core/grip-manifest.d.ts.map +1 -1
  86. package/dist/core/grip-manifest.js.map +1 -1
  87. package/dist/core/hooks/aggregate.d.ts.map +1 -1
  88. package/dist/core/hooks/aggregate.js.map +1 -1
  89. package/dist/core/hooks/config.d.ts.map +1 -1
  90. package/dist/core/hooks/config.js.map +1 -1
  91. package/dist/core/hooks/executor.d.ts.map +1 -1
  92. package/dist/core/hooks/executor.js.map +1 -1
  93. package/dist/core/hooks/index.d.ts.map +1 -1
  94. package/dist/core/hooks/index.js.map +1 -1
  95. package/dist/core/hooks/matcher.d.ts.map +1 -1
  96. package/dist/core/hooks/matcher.js.map +1 -1
  97. package/dist/core/hooks/trust-store.d.ts.map +1 -1
  98. package/dist/core/hooks/trust-store.js +0 -3
  99. package/dist/core/hooks/trust-store.js.map +1 -1
  100. package/dist/core/hooks/types.d.ts.map +1 -1
  101. package/dist/core/hooks/types.js.map +1 -1
  102. package/dist/core/http-dispatcher.d.ts.map +1 -1
  103. package/dist/core/http-dispatcher.js.map +1 -1
  104. package/dist/core/instruction-resource-loader.d.ts +1 -0
  105. package/dist/core/instruction-resource-loader.d.ts.map +1 -1
  106. package/dist/core/instruction-resource-loader.js +2 -4
  107. package/dist/core/instruction-resource-loader.js.map +1 -1
  108. package/dist/core/keybindings.d.ts.map +1 -1
  109. package/dist/core/keybindings.js +0 -1
  110. package/dist/core/keybindings.js.map +1 -1
  111. package/dist/core/lsp/abort.d.ts.map +1 -1
  112. package/dist/core/lsp/abort.js.map +1 -1
  113. package/dist/core/lsp/client.d.ts.map +1 -1
  114. package/dist/core/lsp/client.js +8 -22
  115. package/dist/core/lsp/client.js.map +1 -1
  116. package/dist/core/lsp/config-loader.d.ts.map +1 -1
  117. package/dist/core/lsp/config-loader.js.map +1 -1
  118. package/dist/core/lsp/config.d.ts.map +1 -1
  119. package/dist/core/lsp/config.js.map +1 -1
  120. package/dist/core/lsp/diagnostics.d.ts.map +1 -1
  121. package/dist/core/lsp/diagnostics.js.map +1 -1
  122. package/dist/core/lsp/file-sync.d.ts.map +1 -1
  123. package/dist/core/lsp/file-sync.js +7 -9
  124. package/dist/core/lsp/file-sync.js.map +1 -1
  125. package/dist/core/lsp/integration.d.ts.map +1 -1
  126. package/dist/core/lsp/integration.js.map +1 -1
  127. package/dist/core/lsp/language-map.d.ts.map +1 -1
  128. package/dist/core/lsp/language-map.js +2 -7
  129. package/dist/core/lsp/language-map.js.map +1 -1
  130. package/dist/core/lsp/manager.d.ts.map +1 -1
  131. package/dist/core/lsp/manager.js +18 -29
  132. package/dist/core/lsp/manager.js.map +1 -1
  133. package/dist/core/lsp/navigation.d.ts.map +1 -1
  134. package/dist/core/lsp/navigation.js.map +1 -1
  135. package/dist/core/lsp/portable-path.d.ts.map +1 -1
  136. package/dist/core/lsp/portable-path.js.map +1 -1
  137. package/dist/core/lsp/refactor.d.ts.map +1 -1
  138. package/dist/core/lsp/refactor.js.map +1 -1
  139. package/dist/core/lsp/transport.d.ts.map +1 -1
  140. package/dist/core/lsp/transport.js.map +1 -1
  141. package/dist/core/messages.d.ts.map +1 -1
  142. package/dist/core/messages.js +30 -1
  143. package/dist/core/messages.js.map +1 -1
  144. package/dist/core/model-registry.d.ts.map +1 -1
  145. package/dist/core/model-registry.js +5 -7
  146. package/dist/core/model-registry.js.map +1 -1
  147. package/dist/core/model-resolver.d.ts.map +1 -1
  148. package/dist/core/model-resolver.js.map +1 -1
  149. package/dist/core/output-guard.d.ts.map +1 -1
  150. package/dist/core/output-guard.js.map +1 -1
  151. package/dist/core/package-manager.d.ts.map +1 -1
  152. package/dist/core/package-manager.js +0 -6
  153. package/dist/core/package-manager.js.map +1 -1
  154. package/dist/core/prompt-templates.d.ts.map +1 -1
  155. package/dist/core/prompt-templates.js.map +1 -1
  156. package/dist/core/provider-display-names.d.ts.map +1 -1
  157. package/dist/core/remote-workspace-protocol/contract.d.ts.map +1 -1
  158. package/dist/core/remote-workspace-protocol/contract.js +4 -2
  159. package/dist/core/remote-workspace-protocol/contract.js.map +1 -1
  160. package/dist/core/remote-workspace-protocol/guest-shared-client.d.ts.map +1 -1
  161. package/dist/core/remote-workspace-protocol/guest-shared-client.js +1 -5
  162. package/dist/core/remote-workspace-protocol/guest-shared-client.js.map +1 -1
  163. package/dist/core/remote-workspace-protocol/guest-shared-outbound-scheduler.d.ts.map +1 -1
  164. package/dist/core/remote-workspace-protocol/guest-shared-outbound-scheduler.js +5 -10
  165. package/dist/core/remote-workspace-protocol/guest-shared-outbound-scheduler.js.map +1 -1
  166. package/dist/core/remote-workspace-protocol/guest-shared-uplink.d.ts.map +1 -1
  167. package/dist/core/remote-workspace-protocol/guest-shared-uplink.js +2 -9
  168. package/dist/core/remote-workspace-protocol/guest-shared-uplink.js.map +1 -1
  169. package/dist/core/remote-workspace-protocol/lima-owner-directory.d.ts.map +1 -1
  170. package/dist/core/remote-workspace-protocol/lima-owner-directory.js.map +1 -1
  171. package/dist/core/remote-workspace-protocol/lima-owner-lock.d.ts.map +1 -1
  172. package/dist/core/remote-workspace-protocol/lima-owner-lock.js.map +1 -1
  173. package/dist/core/remote-workspace-protocol/session.d.ts.map +1 -1
  174. package/dist/core/remote-workspace-protocol/session.js +27 -65
  175. package/dist/core/remote-workspace-protocol/session.js.map +1 -1
  176. package/dist/core/remote-workspace-protocol/shared-transport.d.ts.map +1 -1
  177. package/dist/core/remote-workspace-protocol/shared-transport.js.map +1 -1
  178. package/dist/core/resolve-config-value.d.ts.map +1 -1
  179. package/dist/core/resolve-config-value.js.map +1 -1
  180. package/dist/core/resource-loader.d.ts.map +1 -1
  181. package/dist/core/resource-loader.js +0 -48
  182. package/dist/core/resource-loader.js.map +1 -1
  183. package/dist/core/rules.d.ts.map +1 -1
  184. package/dist/core/rules.js.map +1 -1
  185. package/dist/core/sandbox/command.d.ts.map +1 -1
  186. package/dist/core/sandbox/command.js.map +1 -1
  187. package/dist/core/sandbox/config.d.ts.map +1 -1
  188. package/dist/core/sandbox/config.js.map +1 -1
  189. package/dist/core/sandbox/lima-guest-binary.d.ts.map +1 -1
  190. package/dist/core/sandbox/lima-guest-binary.js.map +1 -1
  191. package/dist/core/sandbox/lima.d.ts +2 -0
  192. package/dist/core/sandbox/lima.d.ts.map +1 -1
  193. package/dist/core/sandbox/lima.js +3 -9
  194. package/dist/core/sandbox/lima.js.map +1 -1
  195. package/dist/core/sandbox/shared-lima-roots.d.ts.map +1 -1
  196. package/dist/core/sandbox/shared-lima-roots.js.map +1 -1
  197. package/dist/core/sandbox/update-shared-guest-binary.d.ts.map +1 -1
  198. package/dist/core/sandbox/update-shared-guest-binary.js.map +1 -1
  199. package/dist/core/session/constants.d.ts.map +1 -1
  200. package/dist/core/session/context-metadata.d.ts.map +1 -1
  201. package/dist/core/session/context-metadata.js.map +1 -1
  202. package/dist/core/session/context.d.ts.map +1 -1
  203. package/dist/core/session/context.js.map +1 -1
  204. package/dist/core/session/ids.d.ts.map +1 -1
  205. package/dist/core/session/ids.js.map +1 -1
  206. package/dist/core/session/in-memory-session-manager.d.ts.map +1 -1
  207. package/dist/core/session/in-memory-session-manager.js +0 -1
  208. package/dist/core/session/in-memory-session-manager.js.map +1 -1
  209. package/dist/core/session/in-memory-session.d.ts.map +1 -1
  210. package/dist/core/session/in-memory-session.js.map +1 -1
  211. package/dist/core/session/jsonl-errors.d.ts.map +1 -1
  212. package/dist/core/session/jsonl-errors.js +0 -11
  213. package/dist/core/session/jsonl-errors.js.map +1 -1
  214. package/dist/core/session/jsonl-helpers.d.ts.map +1 -1
  215. package/dist/core/session/jsonl-helpers.js.map +1 -1
  216. package/dist/core/session/local-session-manager.d.ts.map +1 -1
  217. package/dist/core/session/local-session-manager.js +4 -6
  218. package/dist/core/session/local-session-manager.js.map +1 -1
  219. package/dist/core/session/local-session.d.ts.map +1 -1
  220. package/dist/core/session/local-session.js.map +1 -1
  221. package/dist/core/session/migrations.d.ts.map +1 -1
  222. package/dist/core/session/migrations.js.map +1 -1
  223. package/dist/core/session/remote-session-client.d.ts.map +1 -1
  224. package/dist/core/session/remote-session-client.js +0 -6
  225. package/dist/core/session/remote-session-client.js.map +1 -1
  226. package/dist/core/session/remote-session-manager.d.ts.map +1 -1
  227. package/dist/core/session/remote-session-manager.js +0 -3
  228. package/dist/core/session/remote-session-manager.js.map +1 -1
  229. package/dist/core/session/remote-session.d.ts.map +1 -1
  230. package/dist/core/session/remote-session.js +0 -1
  231. package/dist/core/session/remote-session.js.map +1 -1
  232. package/dist/core/session/session-manager.d.ts.map +1 -1
  233. package/dist/core/session/session.d.ts.map +1 -1
  234. package/dist/core/session/session.js +1 -5
  235. package/dist/core/session/session.js.map +1 -1
  236. package/dist/core/session/stores/in-memory-session-store.d.ts.map +1 -1
  237. package/dist/core/session/stores/in-memory-session-store.js +7 -6
  238. package/dist/core/session/stores/in-memory-session-store.js.map +1 -1
  239. package/dist/core/session/stores/jsonl-session-store.d.ts.map +1 -1
  240. package/dist/core/session/stores/jsonl-session-store.js +6 -14
  241. package/dist/core/session/stores/jsonl-session-store.js.map +1 -1
  242. package/dist/core/session/stores/remote-session-store.d.ts.map +1 -1
  243. package/dist/core/session/stores/remote-session-store.js +3 -8
  244. package/dist/core/session/stores/remote-session-store.js.map +1 -1
  245. package/dist/core/session/stores/session-store.d.ts.map +1 -1
  246. package/dist/core/session/types.d.ts.map +1 -1
  247. package/dist/core/session/usage-ledger.d.ts.map +1 -1
  248. package/dist/core/session/usage-ledger.js.map +1 -1
  249. package/dist/core/session-cwd.d.ts.map +1 -1
  250. package/dist/core/session-cwd.js +0 -1
  251. package/dist/core/session-cwd.js.map +1 -1
  252. package/dist/core/settings-manager.d.ts.map +1 -1
  253. package/dist/core/settings-manager.js +9 -17
  254. package/dist/core/settings-manager.js.map +1 -1
  255. package/dist/core/skills.d.ts.map +1 -1
  256. package/dist/core/skills.js +3 -2
  257. package/dist/core/skills.js.map +1 -1
  258. package/dist/core/slash-commands.d.ts.map +1 -1
  259. package/dist/core/source-info.d.ts.map +1 -1
  260. package/dist/core/source-info.js.map +1 -1
  261. package/dist/core/system-prompt.d.ts +1 -1
  262. package/dist/core/system-prompt.d.ts.map +1 -1
  263. package/dist/core/system-prompt.js +3 -2
  264. package/dist/core/system-prompt.js.map +1 -1
  265. package/dist/core/telemetry.d.ts.map +1 -1
  266. package/dist/core/telemetry.js.map +1 -1
  267. package/dist/core/timings.d.ts.map +1 -1
  268. package/dist/core/timings.js.map +1 -1
  269. package/dist/core/tools/bash.d.ts +1 -0
  270. package/dist/core/tools/bash.d.ts.map +1 -1
  271. package/dist/core/tools/bash.js +34 -28
  272. package/dist/core/tools/bash.js.map +1 -1
  273. package/dist/core/tools/compress-context.d.ts.map +1 -1
  274. package/dist/core/tools/compress-context.js.map +1 -1
  275. package/dist/core/tools/edit-diff.d.ts.map +1 -1
  276. package/dist/core/tools/edit-diff.js.map +1 -1
  277. package/dist/core/tools/edit.d.ts.map +1 -1
  278. package/dist/core/tools/edit.js.map +1 -1
  279. package/dist/core/tools/file-mutation-queue.d.ts.map +1 -1
  280. package/dist/core/tools/file-mutation-queue.js.map +1 -1
  281. package/dist/core/tools/find.d.ts.map +1 -1
  282. package/dist/core/tools/find.js.map +1 -1
  283. package/dist/core/tools/grep.d.ts.map +1 -1
  284. package/dist/core/tools/grep.js.map +1 -1
  285. package/dist/core/tools/hash-store.d.ts.map +1 -1
  286. package/dist/core/tools/hash-store.js.map +1 -1
  287. package/dist/core/tools/hashline/apply.d.ts.map +1 -1
  288. package/dist/core/tools/hashline/apply.js.map +1 -1
  289. package/dist/core/tools/hashline/hash.d.ts.map +1 -1
  290. package/dist/core/tools/hashline/hash.js.map +1 -1
  291. package/dist/core/tools/hashline/parse.d.ts.map +1 -1
  292. package/dist/core/tools/hashline/parse.js.map +1 -1
  293. package/dist/core/tools/hashline/resolve.d.ts.map +1 -1
  294. package/dist/core/tools/hashline/resolve.js.map +1 -1
  295. package/dist/core/tools/hashline-utils.d.ts.map +1 -1
  296. package/dist/core/tools/hashline-utils.js.map +1 -1
  297. package/dist/core/tools/index.d.ts.map +1 -1
  298. package/dist/core/tools/index.js.map +1 -1
  299. package/dist/core/tools/ls.d.ts.map +1 -1
  300. package/dist/core/tools/ls.js.map +1 -1
  301. package/dist/core/tools/operations.d.ts +11 -0
  302. package/dist/core/tools/operations.d.ts.map +1 -1
  303. package/dist/core/tools/operations.js +54 -28
  304. package/dist/core/tools/operations.js.map +1 -1
  305. package/dist/core/tools/output-accumulator.d.ts.map +1 -1
  306. package/dist/core/tools/output-accumulator.js +12 -18
  307. package/dist/core/tools/output-accumulator.js.map +1 -1
  308. package/dist/core/tools/path-utils.d.ts.map +1 -1
  309. package/dist/core/tools/path-utils.js.map +1 -1
  310. package/dist/core/tools/read.d.ts.map +1 -1
  311. package/dist/core/tools/read.js.map +1 -1
  312. package/dist/core/tools/render-utils.d.ts.map +1 -1
  313. package/dist/core/tools/render-utils.js.map +1 -1
  314. package/dist/core/tools/replace-diff.d.ts.map +1 -1
  315. package/dist/core/tools/replace-diff.js.map +1 -1
  316. package/dist/core/tools/replace-normalize.d.ts.map +1 -1
  317. package/dist/core/tools/replace-normalize.js.map +1 -1
  318. package/dist/core/tools/replace-render.d.ts +1 -1
  319. package/dist/core/tools/replace-render.d.ts.map +1 -1
  320. package/dist/core/tools/replace-render.js.map +1 -1
  321. package/dist/core/tools/runtime.d.ts.map +1 -1
  322. package/dist/core/tools/runtime.js.map +1 -1
  323. package/dist/core/tools/session-history.d.ts.map +1 -1
  324. package/dist/core/tools/session-history.js.map +1 -1
  325. package/dist/core/tools/subagent-agents.d.ts.map +1 -1
  326. package/dist/core/tools/subagent-agents.js.map +1 -1
  327. package/dist/core/tools/subagent.d.ts.map +1 -1
  328. package/dist/core/tools/subagent.js.map +1 -1
  329. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
  330. package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
  331. package/dist/core/tools/truncate.d.ts.map +1 -1
  332. package/dist/core/tools/truncate.js.map +1 -1
  333. package/dist/core/tools/websearch.d.ts.map +1 -1
  334. package/dist/core/tools/websearch.js.map +1 -1
  335. package/dist/core/tools/workspace-tool-host.d.ts +1 -0
  336. package/dist/core/tools/workspace-tool-host.d.ts.map +1 -1
  337. package/dist/core/tools/workspace-tool-host.js +36 -22
  338. package/dist/core/tools/workspace-tool-host.js.map +1 -1
  339. package/dist/core/tools/write.d.ts.map +1 -1
  340. package/dist/core/tools/write.js +0 -1
  341. package/dist/core/tools/write.js.map +1 -1
  342. package/dist/core/workspace-identity.d.ts.map +1 -1
  343. package/dist/daemon/activity-budget.d.ts.map +1 -1
  344. package/dist/daemon/activity-budget.js +2 -3
  345. package/dist/daemon/activity-budget.js.map +1 -1
  346. package/dist/daemon/command.d.ts.map +1 -1
  347. package/dist/daemon/command.js.map +1 -1
  348. package/dist/daemon/config.d.ts +2 -0
  349. package/dist/daemon/config.d.ts.map +1 -1
  350. package/dist/daemon/config.js +4 -0
  351. package/dist/daemon/config.js.map +1 -1
  352. package/dist/daemon/help.d.ts.map +1 -1
  353. package/dist/daemon/help.js +4 -3
  354. package/dist/daemon/help.js.map +1 -1
  355. package/dist/daemon/lsp-config.d.ts.map +1 -1
  356. package/dist/daemon/lsp-config.js.map +1 -1
  357. package/dist/daemon/outbound-budget.d.ts.map +1 -1
  358. package/dist/daemon/outbound-budget.js +2 -4
  359. package/dist/daemon/outbound-budget.js.map +1 -1
  360. package/dist/daemon/security.d.ts.map +1 -1
  361. package/dist/daemon/security.js.map +1 -1
  362. package/dist/daemon/server.d.ts.map +1 -1
  363. package/dist/daemon/server.js.map +1 -1
  364. package/dist/daemon/shared-connection.d.ts.map +1 -1
  365. package/dist/daemon/shared-connection.js +10 -15
  366. package/dist/daemon/shared-connection.js.map +1 -1
  367. package/dist/daemon/shared-revision.d.ts.map +1 -1
  368. package/dist/daemon/shared-revision.js +2 -1
  369. package/dist/daemon/shared-revision.js.map +1 -1
  370. package/dist/daemon/shared-roots.d.ts.map +1 -1
  371. package/dist/daemon/shared-roots.js +0 -1
  372. package/dist/daemon/shared-roots.js.map +1 -1
  373. package/dist/daemon/workspace-runtime.d.ts +2 -0
  374. package/dist/daemon/workspace-runtime.d.ts.map +1 -1
  375. package/dist/daemon/workspace-runtime.js +43 -15
  376. package/dist/daemon/workspace-runtime.js.map +1 -1
  377. package/dist/index.d.ts +1 -1
  378. package/dist/index.d.ts.map +1 -1
  379. package/dist/index.js.map +1 -1
  380. package/dist/main.d.ts.map +1 -1
  381. package/dist/main.js +8 -3
  382. package/dist/main.js.map +1 -1
  383. package/dist/migrations.d.ts.map +1 -1
  384. package/dist/migrations.js.map +1 -1
  385. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  386. package/dist/modes/interactive/components/assistant-message.js +3 -10
  387. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  388. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
  389. package/dist/modes/interactive/components/bash-execution.js +4 -9
  390. package/dist/modes/interactive/components/bash-execution.js.map +1 -1
  391. package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -1
  392. package/dist/modes/interactive/components/bordered-loader.js +0 -3
  393. package/dist/modes/interactive/components/bordered-loader.js.map +1 -1
  394. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
  395. package/dist/modes/interactive/components/branch-summary-message.js +1 -3
  396. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
  397. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
  398. package/dist/modes/interactive/components/compaction-summary-message.js +1 -3
  399. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
  400. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
  401. package/dist/modes/interactive/components/config-selector.js +6 -16
  402. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  403. package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -1
  404. package/dist/modes/interactive/components/countdown-timer.js +0 -5
  405. package/dist/modes/interactive/components/countdown-timer.js.map +1 -1
  406. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
  407. package/dist/modes/interactive/components/custom-editor.js +1 -8
  408. package/dist/modes/interactive/components/custom-editor.js.map +1 -1
  409. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
  410. package/dist/modes/interactive/components/custom-message.js +1 -6
  411. package/dist/modes/interactive/components/custom-message.js.map +1 -1
  412. package/dist/modes/interactive/components/diff.d.ts.map +1 -1
  413. package/dist/modes/interactive/components/diff.js.map +1 -1
  414. package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -1
  415. package/dist/modes/interactive/components/dynamic-border.js +0 -1
  416. package/dist/modes/interactive/components/dynamic-border.js.map +1 -1
  417. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
  418. package/dist/modes/interactive/components/extension-editor.js +1 -7
  419. package/dist/modes/interactive/components/extension-editor.js.map +1 -1
  420. package/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
  421. package/dist/modes/interactive/components/extension-input.js +2 -8
  422. package/dist/modes/interactive/components/extension-input.js.map +1 -1
  423. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
  424. package/dist/modes/interactive/components/extension-selector.js +1 -9
  425. package/dist/modes/interactive/components/extension-selector.js.map +1 -1
  426. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  427. package/dist/modes/interactive/components/footer.js +8 -4
  428. package/dist/modes/interactive/components/footer.js.map +1 -1
  429. package/dist/modes/interactive/components/hook-execution.d.ts.map +1 -1
  430. package/dist/modes/interactive/components/hook-execution.js +2 -5
  431. package/dist/modes/interactive/components/hook-execution.js.map +1 -1
  432. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
  433. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
  434. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  435. package/dist/modes/interactive/components/login-dialog.js +3 -9
  436. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  437. package/dist/modes/interactive/components/markdown-transform.d.ts.map +1 -1
  438. package/dist/modes/interactive/components/markdown-transform.js.map +1 -1
  439. package/dist/modes/interactive/components/mermaid.d.ts.map +1 -1
  440. package/dist/modes/interactive/components/mermaid.js.map +1 -1
  441. package/dist/modes/interactive/components/message-card.d.ts.map +1 -1
  442. package/dist/modes/interactive/components/message-card.js +0 -1
  443. package/dist/modes/interactive/components/message-card.js.map +1 -1
  444. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  445. package/dist/modes/interactive/components/model-selector.js +13 -28
  446. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  447. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
  448. package/dist/modes/interactive/components/oauth-selector.js +3 -12
  449. package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  450. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
  451. package/dist/modes/interactive/components/scoped-models-selector.js +9 -13
  452. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
  453. package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
  454. package/dist/modes/interactive/components/session-selector-search.js.map +1 -1
  455. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  456. package/dist/modes/interactive/components/session-selector.js +33 -58
  457. package/dist/modes/interactive/components/session-selector.js.map +1 -1
  458. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  459. package/dist/modes/interactive/components/settings-selector.js +0 -4
  460. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  461. package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -1
  462. package/dist/modes/interactive/components/show-images-selector.js +0 -1
  463. package/dist/modes/interactive/components/show-images-selector.js.map +1 -1
  464. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
  465. package/dist/modes/interactive/components/skill-invocation-message.js +1 -3
  466. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
  467. package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -1
  468. package/dist/modes/interactive/components/theme-selector.js +0 -2
  469. package/dist/modes/interactive/components/theme-selector.js.map +1 -1
  470. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  471. package/dist/modes/interactive/components/thinking-selector.js +0 -1
  472. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  473. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  474. package/dist/modes/interactive/components/tool-execution.js +9 -24
  475. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  476. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
  477. package/dist/modes/interactive/components/tree-selector.js +18 -34
  478. package/dist/modes/interactive/components/tree-selector.js.map +1 -1
  479. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -1
  480. package/dist/modes/interactive/components/user-message-selector.js +3 -6
  481. package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
  482. package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  483. package/dist/modes/interactive/components/user-message.js +0 -4
  484. package/dist/modes/interactive/components/user-message.js.map +1 -1
  485. package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -1
  486. package/dist/modes/interactive/components/visual-truncate.js.map +1 -1
  487. package/dist/modes/interactive/interactive-mode.d.ts +13 -0
  488. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  489. package/dist/modes/interactive/interactive-mode.js +162 -136
  490. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  491. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  492. package/dist/modes/interactive/theme/theme.js +0 -7
  493. package/dist/modes/interactive/theme/theme.js.map +1 -1
  494. package/dist/modes/json-event.d.ts.map +1 -1
  495. package/dist/modes/json-event.js.map +1 -1
  496. package/dist/modes/print-mode.d.ts.map +1 -1
  497. package/dist/modes/print-mode.js.map +1 -1
  498. package/dist/modes/rpc/jsonl.d.ts.map +1 -1
  499. package/dist/modes/rpc/jsonl.js.map +1 -1
  500. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  501. package/dist/modes/rpc/rpc-client.js +10 -11
  502. package/dist/modes/rpc/rpc-client.js.map +1 -1
  503. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  504. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  505. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  506. package/dist/package-manager-cli.d.ts.map +1 -1
  507. package/dist/package-manager-cli.js +33 -2
  508. package/dist/package-manager-cli.js.map +1 -1
  509. package/dist/utils/ansi.d.ts.map +1 -1
  510. package/dist/utils/ansi.js.map +1 -1
  511. package/dist/utils/binary-self-update.d.ts +25 -0
  512. package/dist/utils/binary-self-update.d.ts.map +1 -0
  513. package/dist/utils/binary-self-update.js +159 -0
  514. package/dist/utils/binary-self-update.js.map +1 -0
  515. package/dist/utils/changelog.d.ts.map +1 -1
  516. package/dist/utils/changelog.js.map +1 -1
  517. package/dist/utils/child-process.d.ts.map +1 -1
  518. package/dist/utils/child-process.js.map +1 -1
  519. package/dist/utils/clipboard-image.d.ts.map +1 -1
  520. package/dist/utils/clipboard-image.js.map +1 -1
  521. package/dist/utils/clipboard-native.d.ts.map +1 -1
  522. package/dist/utils/clipboard-native.js.map +1 -1
  523. package/dist/utils/clipboard.d.ts.map +1 -1
  524. package/dist/utils/clipboard.js.map +1 -1
  525. package/dist/utils/deprecation.d.ts.map +1 -1
  526. package/dist/utils/deprecation.js.map +1 -1
  527. package/dist/utils/directory-completions.d.ts +8 -0
  528. package/dist/utils/directory-completions.d.ts.map +1 -1
  529. package/dist/utils/directory-completions.js +42 -1
  530. package/dist/utils/directory-completions.js.map +1 -1
  531. package/dist/utils/exif-orientation.d.ts.map +1 -1
  532. package/dist/utils/exif-orientation.js.map +1 -1
  533. package/dist/utils/frontmatter.d.ts.map +1 -1
  534. package/dist/utils/frontmatter.js.map +1 -1
  535. package/dist/utils/fs-watch.d.ts.map +1 -1
  536. package/dist/utils/fs-watch.js.map +1 -1
  537. package/dist/utils/git.d.ts.map +1 -1
  538. package/dist/utils/git.js.map +1 -1
  539. package/dist/utils/grip-user-agent.d.ts.map +1 -1
  540. package/dist/utils/grip-user-agent.js.map +1 -1
  541. package/dist/utils/html.d.ts.map +1 -1
  542. package/dist/utils/html.js.map +1 -1
  543. package/dist/utils/image-convert.d.ts.map +1 -1
  544. package/dist/utils/image-convert.js.map +1 -1
  545. package/dist/utils/image-process.d.ts.map +1 -1
  546. package/dist/utils/image-process.js.map +1 -1
  547. package/dist/utils/image-resize-core.d.ts.map +1 -1
  548. package/dist/utils/image-resize-core.js.map +1 -1
  549. package/dist/utils/image-resize-worker.d.ts.map +1 -1
  550. package/dist/utils/image-resize-worker.js.map +1 -1
  551. package/dist/utils/image-resize.d.ts.map +1 -1
  552. package/dist/utils/image-resize.js.map +1 -1
  553. package/dist/utils/json.d.ts.map +1 -1
  554. package/dist/utils/json.js.map +1 -1
  555. package/dist/utils/mime.d.ts.map +1 -1
  556. package/dist/utils/mime.js.map +1 -1
  557. package/dist/utils/open-browser.d.ts.map +1 -1
  558. package/dist/utils/open-browser.js.map +1 -1
  559. package/dist/utils/paths.d.ts.map +1 -1
  560. package/dist/utils/paths.js.map +1 -1
  561. package/dist/utils/photon.d.ts.map +1 -1
  562. package/dist/utils/photon.js +10 -5
  563. package/dist/utils/photon.js.map +1 -1
  564. package/dist/utils/shell.d.ts.map +1 -1
  565. package/dist/utils/shell.js.map +1 -1
  566. package/dist/utils/sleep.d.ts.map +1 -1
  567. package/dist/utils/sleep.js.map +1 -1
  568. package/dist/utils/syntax-highlight.d.ts.map +1 -1
  569. package/dist/utils/syntax-highlight.js +1 -1
  570. package/dist/utils/syntax-highlight.js.map +1 -1
  571. package/dist/utils/tools-manager.d.ts.map +1 -1
  572. package/dist/utils/tools-manager.js.map +1 -1
  573. package/dist/utils/version-check.d.ts.map +1 -1
  574. package/dist/utils/version-check.js.map +1 -1
  575. package/dist/utils/windows-self-update.d.ts.map +1 -1
  576. package/dist/utils/windows-self-update.js.map +1 -1
  577. package/docs/extensions.md +31 -1
  578. package/docs/sandbox.md +6 -0
  579. package/docs/sessions.md +1 -1
  580. package/docs/skills.md +4 -4
  581. package/docs/usage.md +2 -1
  582. package/examples/extensions/custom-provider-anthropic/package.json +2 -2
  583. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  584. package/examples/extensions/sandbox/package.json +2 -2
  585. package/examples/extensions/with-deps/package.json +1 -1
  586. package/npm-shrinkwrap.json +602 -834
  587. package/package.json +20 -21
@@ -1 +1 @@
1
- {"version":3,"file":"jsonl-session-store.js","sourceRoot":"","sources":["../../../../src/core/session/stores/jsonl-session-store.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport type { AgentMessage, JsonlPhysicalRecord } from \"@greppleai/grip-agent-core\";\nimport type { Message, TextContent } from \"@greppleai/grip-ai\";\nimport {\n\tappendFileSync,\n\tcloseSync,\n\tcreateReadStream,\n\texistsSync,\n\tlstatSync,\n\tmkdirSync,\n\topenSync,\n\treaddirSync,\n\treadFileSync,\n\treadSync,\n\trenameSync,\n\trmSync,\n\tstatSync,\n\twriteFileSync,\n} from \"fs\";\nimport { readdir, stat } from \"fs/promises\";\nimport { basename, dirname, join, resolve } from \"path\";\nimport { createInterface } from \"readline\";\nimport { getAgentDir as getDefaultAgentDir, getSessionsDir } from \"../../../config.ts\";\nimport {\n\tJsonlDecodeError as JsonlDecodeFailure,\n\ttype JsonlErrorPhase,\n\tJsonlSessionError,\n\ttype JsonlWriteOutcome,\n} from \"../jsonl-errors.ts\";\nimport type {\n\tFileEntry,\n\tSessionEntry,\n\tSessionHeader,\n\tSessionInfo,\n\tSessionListProgress,\n\tSessionMessageEntry,\n} from \"../types.ts\";\nimport { InMemorySessionStore } from \"./in-memory-session-store.ts\";\n\nfunction isMessageWithContent(message: AgentMessage): message is Message {\n\treturn typeof (message as Message).role === \"string\" && \"content\" in message;\n}\n\nfunction extractTextContent(message: Message): string {\n\tconst content = message.content;\n\tif (content == null) {\n\t\treturn \"\";\n\t}\n\tif (typeof content === \"string\") {\n\t\treturn content;\n\t}\n\treturn content\n\t\t.filter((block): block is TextContent => block.type === \"text\")\n\t\t.map((block) => block.text)\n\t\t.join(\" \");\n}\n\nfunction getMessageActivityTime(entry: SessionMessageEntry): number | undefined {\n\tconst message = entry.message;\n\tif (!isMessageWithContent(message)) return undefined;\n\tif (message.role !== \"user\" && message.role !== \"assistant\") return undefined;\n\n\tconst msgTimestamp = message.timestamp;\n\tif (typeof msgTimestamp === \"number\") {\n\t\treturn msgTimestamp;\n\t}\n\n\tconst t = new Date(entry.timestamp).getTime();\n\treturn Number.isNaN(t) ? undefined : t;\n}\n\nconst SESSION_READ_BUFFER_SIZE = 1024 * 1024;\nconst SESSION_HEADER_READ_BUFFER_SIZE = 4096;\n/** Bound synchronous header discovery while allowing large cwd and custom metadata fields. */\nconst MAX_SESSION_HEADER_SCAN_BYTES = 1024 * 1024;\nconst SAFE_ID_PATTERN = /^[A-Za-z0-9](?:[A-Za-z0-9._-]*[A-Za-z0-9])?$/;\n\ninterface JsonlRecordLocation {\n\tline: number;\n\tbyteOffset: number;\n}\n\nfunction parseSessionEntryLine(line: string): FileEntry | null {\n\tif (!line.trim()) return null;\n\ttry {\n\t\treturn JSON.parse(line) as FileEntry;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nfunction* readPhysicalRecords(filePath: string): Generator<JsonlPhysicalRecord> {\n\tconst fd = openSync(filePath, \"r\");\n\tconst buffer = Buffer.allocUnsafe(SESSION_READ_BUFFER_SIZE);\n\tlet pending = Buffer.alloc(0);\n\tlet consumedBytes = 0;\n\tlet recordStart = 0;\n\tlet line = 1;\n\ttry {\n\t\twhile (true) {\n\t\t\tconst bytesRead = readSync(fd, buffer, 0, buffer.length, null);\n\t\t\tif (bytesRead === 0) break;\n\t\t\tconst chunk = buffer.subarray(0, bytesRead);\n\t\t\tconst data = pending.length === 0 ? chunk : Buffer.concat([pending, chunk]);\n\t\t\tlet start = 0;\n\t\t\tlet newline = data.indexOf(0x0a, start);\n\t\t\twhile (newline !== -1) {\n\t\t\t\tyield { bytes: data.subarray(start, newline), line, start: recordStart, terminated: true };\n\t\t\t\tline++;\n\t\t\t\tstart = newline + 1;\n\t\t\t\trecordStart = consumedBytes + bytesRead - (data.length - start);\n\t\t\t\tnewline = data.indexOf(0x0a, start);\n\t\t\t}\n\t\t\tpending = Buffer.from(data.subarray(start));\n\t\t\tconsumedBytes += bytesRead;\n\t\t}\n\t\tif (pending.length > 0) yield { bytes: pending, line, start: recordStart, terminated: false };\n\t} finally {\n\t\tcloseSync(fd);\n\t}\n}\n\nconst jsonlEntryLocations = new WeakMap<FileEntry[], ReadonlyArray<JsonlRecordLocation | undefined>>();\n\nexport function getJsonlEntryLocations(\n\tentries: FileEntry[],\n): ReadonlyArray<JsonlRecordLocation | undefined> | undefined {\n\treturn jsonlEntryLocations.get(entries);\n}\n\nfunction decodePhysicalRecord(record: JsonlPhysicalRecord): string {\n\tlet bytes = record.bytes;\n\tif (bytes.at(-1) === 0x0d) bytes = bytes.subarray(0, bytes.length - 1);\n\ttry {\n\t\treturn new TextDecoder(\"utf-8\", { fatal: true }).decode(bytes);\n\t} catch (error) {\n\t\tthrow new JsonlDecodeFailure(\n\t\t\t\"utf8\",\n\t\t\t\"contains invalid UTF-8\",\n\t\t\terror instanceof Error ? error : new Error(String(error)),\n\t\t);\n\t}\n}\n\nfunction parseJsonObject(record: JsonlPhysicalRecord): Record<string, unknown> {\n\tlet parsed: unknown;\n\ttry {\n\t\tparsed = JSON.parse(decodePhysicalRecord(record));\n\t} catch (error) {\n\t\tif (error instanceof JsonlDecodeFailure) throw error;\n\t\tthrow new JsonlDecodeFailure(\n\t\t\t\"syntax\",\n\t\t\t\"is not valid JSON\",\n\t\t\terror instanceof Error ? error : new Error(String(error)),\n\t\t);\n\t}\n\tif (typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed)) {\n\t\tthrow new JsonlDecodeFailure(\"schema\", \"is not a JSON object\");\n\t}\n\treturn parsed as Record<string, unknown>;\n}\n\nfunction requireString(value: unknown, field: string): string {\n\tif (typeof value !== \"string\" || value.length === 0) {\n\t\tthrow new JsonlDecodeFailure(\"schema\", `has invalid ${field}`);\n\t}\n\treturn value;\n}\n\nfunction requireId(value: unknown, field: string): string {\n\tconst id = requireString(value, field);\n\tif (!SAFE_ID_PATTERN.test(id)) throw new JsonlDecodeFailure(\"schema\", `has invalid ${field}`);\n\treturn id;\n}\n\nfunction requireTimestamp(value: unknown): string {\n\tconst timestamp = requireString(value, \"timestamp\");\n\tif (Number.isNaN(Date.parse(timestamp))) throw new JsonlDecodeFailure(\"schema\", \"has invalid timestamp\");\n\treturn timestamp;\n}\n\nconst MESSAGE_ROLES = new Set([\n\t\"user\",\n\t\"assistant\",\n\t\"toolResult\",\n\t\"bashExecution\",\n\t\"custom\",\n\t\"branchSummary\",\n\t\"compactionSummary\",\n\t\"hookMessage\",\n]);\n\nfunction validatePersistedMessageRole(message: Record<string, unknown>, role: string): void {\n\tswitch (role) {\n\t\tcase \"toolResult\":\n\t\t\trequireString(message.toolCallId, \"toolCallId\");\n\t\t\trequireString(message.toolName, \"toolName\");\n\t\t\tif (typeof message.isError !== \"boolean\") throw new JsonlDecodeFailure(\"schema\", \"has invalid isError\");\n\t\t\tbreak;\n\t\tcase \"custom\":\n\t\tcase \"hookMessage\":\n\t\t\trequireString(message.customType, \"customType\");\n\t\t\tif (typeof message.display !== \"boolean\") throw new JsonlDecodeFailure(\"schema\", \"has invalid display\");\n\t\t\tbreak;\n\t\tcase \"bashExecution\":\n\t\t\trequireString(message.command, \"command\");\n\t\t\tif (typeof message.output !== \"string\") throw new JsonlDecodeFailure(\"schema\", \"has invalid output\");\n\t\t\tif (typeof message.cancelled !== \"boolean\" || typeof message.truncated !== \"boolean\") {\n\t\t\t\tthrow new JsonlDecodeFailure(\"schema\", \"has invalid bash state\");\n\t\t\t}\n\t\t\tbreak;\n\t\tcase \"branchSummary\":\n\t\tcase \"compactionSummary\":\n\t\t\trequireString(message.summary, \"summary\");\n\t}\n}\n\nfunction validatePersistedMessage(value: unknown): void {\n\tif (typeof value !== \"object\" || value === null) throw new JsonlDecodeFailure(\"schema\", \"has invalid message\");\n\tconst message = value as Record<string, unknown>;\n\tconst role = requireString(message.role, \"message role\");\n\tif (!MESSAGE_ROLES.has(role)) throw new JsonlDecodeFailure(\"schema\", `has unknown message role ${role}`);\n\tif (typeof message.timestamp !== \"number\" || !Number.isFinite(message.timestamp)) {\n\t\tthrow new JsonlDecodeFailure(\"schema\", \"has invalid message timestamp\");\n\t}\n\tif (message.content != null && typeof message.content !== \"string\" && !Array.isArray(message.content)) {\n\t\tthrow new JsonlDecodeFailure(\"schema\", \"has invalid message content\");\n\t}\n\tvalidatePersistedMessageRole(message, role);\n}\n\nconst SESSION_ENTRY_TYPES = new Set<SessionEntry[\"type\"]>([\n\t\"message\",\n\t\"thinking_level_change\",\n\t\"model_change\",\n\t\"compaction\",\n\t\"branch_summary\",\n\t\"custom\",\n\t\"custom_message\",\n\t\"label\",\n\t\"session_info\",\n]);\n\nfunction parseStrictHeader(record: JsonlPhysicalRecord): SessionHeader {\n\tconst value = parseJsonObject(record);\n\tif (value.type !== \"session\") throw new JsonlDecodeFailure(\"schema\", \"is not a session header\");\n\tconst version = value.version ?? 1;\n\tif (version !== 1 && version !== 2 && version !== 3) {\n\t\tthrow new JsonlDecodeFailure(\"schema\", \"has unsupported session version\");\n\t}\n\trequireId(value.id, \"session id\");\n\trequireTimestamp(value.timestamp);\n\trequireString(value.cwd, \"cwd\");\n\tif (value.parentSession !== undefined && typeof value.parentSession !== \"string\") {\n\t\tthrow new JsonlDecodeFailure(\"schema\", \"has invalid parentSession\");\n\t}\n\treturn value as unknown as SessionHeader;\n}\nfunction validateVersionedEntryLinks(value: Record<string, unknown>, version: number): void {\n\tif (version < 2) return;\n\trequireId(value.id, \"entry id\");\n\tif (value.parentId !== null && (typeof value.parentId !== \"string\" || !SAFE_ID_PATTERN.test(value.parentId))) {\n\t\tthrow new JsonlDecodeFailure(\"schema\", \"has invalid parentId\");\n\t}\n}\n\nfunction validateCompactionEntry(value: Record<string, unknown>, version: number): void {\n\trequireString(value.summary, \"summary\");\n\tif (version === 1) {\n\t\tif (value.firstKeptEntryId === undefined && !Number.isInteger(value.firstKeptEntryIndex)) {\n\t\t\tthrow new JsonlDecodeFailure(\"schema\", \"has invalid compaction target\");\n\t\t}\n\t} else requireId(value.firstKeptEntryId, \"firstKeptEntryId\");\n\tif (typeof value.tokensBefore !== \"number\" || !Number.isFinite(value.tokensBefore)) {\n\t\tthrow new JsonlDecodeFailure(\"schema\", \"has invalid tokensBefore\");\n\t}\n}\n\nfunction validateCustomMessageEntry(value: Record<string, unknown>): void {\n\trequireString(value.customType, \"customType\");\n\tif (value.content != null && typeof value.content !== \"string\" && !Array.isArray(value.content)) {\n\t\tthrow new JsonlDecodeFailure(\"schema\", \"has invalid content\");\n\t}\n\tif (typeof value.display !== \"boolean\") throw new JsonlDecodeFailure(\"schema\", \"has invalid display\");\n}\n\nfunction parseStrictEntry(record: JsonlPhysicalRecord, version: number): SessionEntry {\n\tconst value = parseJsonObject(record);\n\tconst type = requireString(value.type, \"entry type\");\n\tif (!SESSION_ENTRY_TYPES.has(type as SessionEntry[\"type\"])) {\n\t\tthrow new JsonlDecodeFailure(\"schema\", `has unknown entry type ${type}`);\n\t}\n\trequireTimestamp(value.timestamp);\n\tvalidateVersionedEntryLinks(value, version);\n\tswitch (type) {\n\t\tcase \"message\":\n\t\t\tvalidatePersistedMessage(value.message);\n\t\t\tbreak;\n\t\tcase \"thinking_level_change\":\n\t\t\trequireString(value.thinkingLevel, \"thinkingLevel\");\n\t\t\tbreak;\n\t\tcase \"model_change\":\n\t\t\trequireString(value.provider, \"provider\");\n\t\t\trequireString(value.modelId, \"modelId\");\n\t\t\tbreak;\n\t\tcase \"compaction\":\n\t\t\tvalidateCompactionEntry(value, version);\n\t\t\tbreak;\n\t\tcase \"branch_summary\":\n\t\t\trequireId(value.fromId, \"fromId\");\n\t\t\trequireString(value.summary, \"summary\");\n\t\t\tbreak;\n\t\tcase \"custom\":\n\t\t\trequireString(value.customType, \"customType\");\n\t\t\tbreak;\n\t\tcase \"custom_message\":\n\t\t\tvalidateCustomMessageEntry(value);\n\t\t\tif (typeof value.display !== \"boolean\") throw new JsonlDecodeFailure(\"schema\", \"has invalid display\");\n\t\t\tbreak;\n\t\tcase \"label\":\n\t\t\trequireId(value.targetId, \"targetId\");\n\t\t\tif (value.label !== undefined && typeof value.label !== \"string\") {\n\t\t\t\tthrow new JsonlDecodeFailure(\"schema\", \"has invalid label\");\n\t\t\t}\n\t\t\tbreak;\n\t\tcase \"session_info\":\n\t\t\tif (value.name !== undefined && typeof value.name !== \"string\") {\n\t\t\t\tthrow new JsonlDecodeFailure(\"schema\", \"has invalid name\");\n\t\t\t}\n\t\t\tbreak;\n\t}\n\treturn value as unknown as SessionEntry;\n}\n\nfunction invalidJsonl(\n\tfilePath: string,\n\trecord: JsonlPhysicalRecord,\n\tfailure: Error,\n\tphase: JsonlErrorPhase,\n): JsonlSessionError {\n\tconst decodeFailure =\n\t\tfailure instanceof JsonlDecodeFailure ? failure : new JsonlDecodeFailure(\"state\", failure.message, failure);\n\treturn new JsonlSessionError({\n\t\tcode: \"invalid_jsonl\",\n\t\treference: filePath,\n\t\tphase,\n\t\tline: record.line,\n\t\tbyteOffset: record.start,\n\t\tdecodeKind: decodeFailure.decodeKind,\n\t\tmessage: `Invalid JSONL session file ${filePath}: line ${record.line} ${failure.message}`,\n\t\tcause: decodeFailure,\n\t});\n}\n\nfunction jsonlStorageError(\n\treference: string,\n\tphase: JsonlErrorPhase,\n\tmessage: string,\n\tcause: Error,\n\toutcome?: JsonlWriteOutcome,\n): JsonlSessionError {\n\tif (cause instanceof JsonlSessionError && cause.phase === phase) return cause;\n\treturn new JsonlSessionError({\n\t\tcode: cause instanceof JsonlSessionError ? cause.code : \"storage\",\n\t\treference,\n\t\tphase,\n\t\tline: cause instanceof JsonlSessionError ? cause.line : undefined,\n\t\tbyteOffset: cause instanceof JsonlSessionError ? cause.byteOffset : undefined,\n\t\tdecodeKind: cause instanceof JsonlSessionError ? cause.decodeKind : undefined,\n\t\tmessage,\n\t\toutcome: outcome ?? (cause instanceof JsonlSessionError ? cause.outcome : undefined),\n\t\tcause,\n\t});\n}\n\nexport class SessionHeaderScanLimitError extends Error {\n\tconstructor(filePath: string) {\n\t\tsuper(`Session header exceeds ${MAX_SESSION_HEADER_SCAN_BYTES}-byte scan limit: ${filePath}`);\n\t\tthis.name = \"SessionHeaderScanLimitError\";\n\t}\n}\n\n/**\n * Inspect a physical line while searching for the first parsed session entry.\n * Blank lines are skipped; a malformed non-blank candidate quarantines the file.\n */\nfunction parseSessionHeaderCandidate(line: string): SessionHeader | null | undefined {\n\tif (!line.trim()) return undefined;\n\ttry {\n\t\tconst bytes = new TextEncoder().encode(line);\n\t\treturn parseStrictHeader({ bytes, line: 1, start: 0, terminated: true });\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nfunction parseSessionHeaderBytes(bytes: Uint8Array): SessionHeader | null | undefined {\n\ttry {\n\t\treturn parseSessionHeaderCandidate(new TextDecoder(\"utf-8\", { fatal: true }).decode(bytes));\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nexport function readSessionHeader(filePath: string): SessionHeader | null {\n\tconst fd = openSync(filePath, \"r\");\n\ttry {\n\t\tconst buffer = Buffer.allocUnsafe(SESSION_HEADER_READ_BUFFER_SIZE);\n\t\tlet pending = Buffer.alloc(0);\n\t\tlet scannedBytes = 0;\n\t\twhile (scannedBytes < MAX_SESSION_HEADER_SCAN_BYTES) {\n\t\t\tconst readLength = Math.min(buffer.length, MAX_SESSION_HEADER_SCAN_BYTES - scannedBytes);\n\t\t\tconst bytesRead = readSync(fd, buffer, 0, readLength, null);\n\t\t\tif (bytesRead === 0) return parseSessionHeaderBytes(pending) ?? null;\n\t\t\tscannedBytes += bytesRead;\n\t\t\tconst data =\n\t\t\t\tpending.length === 0\n\t\t\t\t\t? buffer.subarray(0, bytesRead)\n\t\t\t\t\t: Buffer.concat([pending, buffer.subarray(0, bytesRead)]);\n\t\t\tlet lineStart = 0;\n\t\t\tlet newlineIndex = data.indexOf(0x0a, lineStart);\n\t\t\twhile (newlineIndex !== -1) {\n\t\t\t\tconst header = parseSessionHeaderBytes(data.subarray(lineStart, newlineIndex));\n\t\t\t\tif (header !== undefined) return header;\n\t\t\t\tlineStart = newlineIndex + 1;\n\t\t\t\tnewlineIndex = data.indexOf(0x0a, lineStart);\n\t\t\t}\n\t\t\tpending = Buffer.from(data.subarray(lineStart));\n\t\t}\n\t\tconst probe = Buffer.allocUnsafe(1);\n\t\tif (readSync(fd, probe, 0, probe.length, null) === 0) return parseSessionHeaderBytes(pending) ?? null;\n\t\tthrow new SessionHeaderScanLimitError(filePath);\n\t} finally {\n\t\tcloseSync(fd);\n\t}\n}\n\nfunction readSessionHeaderForDiscovery(filePath: string): SessionHeader | null {\n\ttry {\n\t\treturn readSessionHeader(filePath);\n\t} catch (error) {\n\t\tif (error instanceof SessionHeaderScanLimitError) return null;\n\t\tthrow error;\n\t}\n}\n\nfunction getSessionHeaderCwd(header: SessionHeader): string | undefined {\n\tconst cwd = (header as { cwd?: unknown }).cwd;\n\treturn typeof cwd === \"string\" ? cwd : undefined;\n}\n\nfunction sessionCwdMatches(cwd: string | undefined, resolvedCwd: string): boolean {\n\treturn cwd !== undefined && cwd !== \"\" && resolve(cwd) === resolvedCwd;\n}\ninterface SessionInfoScanResult {\n\tmessageCount: number;\n\tfirstMessage: string;\n\tallMessages: string[];\n\tname: string | undefined;\n\tlastActivityTime: number | undefined;\n}\n\nfunction recordSessionInfoEntry(result: SessionInfoScanResult, entry: FileEntry): void {\n\tif (entry.type === \"session_info\") result.name = entry.name?.trim() || undefined;\n\tif (entry.type !== \"message\") return;\n\n\tresult.messageCount++;\n\tconst activityTime = getMessageActivityTime(entry);\n\tif (typeof activityTime === \"number\") {\n\t\tresult.lastActivityTime = Math.max(result.lastActivityTime ?? 0, activityTime);\n\t}\n\n\tconst message = entry.message;\n\tif (!isMessageWithContent(message)) return;\n\tif (message.role !== \"user\" && message.role !== \"assistant\") return;\n\tconst textContent = extractTextContent(message);\n\tif (!textContent) return;\n\n\tresult.allMessages.push(textContent);\n\tif (!result.firstMessage && message.role === \"user\") result.firstMessage = textContent;\n}\n\nasync function scanSessionInfo(filePath: string): Promise<SessionInfoScanResult> {\n\tconst result: SessionInfoScanResult = {\n\t\tmessageCount: 0,\n\t\tfirstMessage: \"\",\n\t\tallMessages: [],\n\t\tname: undefined,\n\t\tlastActivityTime: undefined,\n\t};\n\tconst lines = createInterface({\n\t\tinput: createReadStream(filePath, { encoding: \"utf8\" }),\n\t\tcrlfDelay: Infinity,\n\t});\n\tfor await (const line of lines) {\n\t\tconst entry = parseSessionEntryLine(line);\n\t\tif (entry && entry.type !== \"session\") recordSessionInfoEntry(result, entry);\n\t}\n\treturn result;\n}\n\nfunction resolveSessionModifiedDate(header: SessionHeader, lastActivityTime: number | undefined, fallback: Date): Date {\n\tif (typeof lastActivityTime === \"number\" && lastActivityTime > 0) return new Date(lastActivityTime);\n\tconst headerTime = typeof header.timestamp === \"string\" ? new Date(header.timestamp).getTime() : NaN;\n\treturn Number.isNaN(headerTime) ? fallback : new Date(headerTime);\n}\n\nasync function buildSessionInfo(filePath: string): Promise<SessionInfo | null> {\n\ttry {\n\t\tconst stats = await stat(filePath);\n\t\tconst header = readSessionHeaderForDiscovery(filePath);\n\t\tif (!header) return null;\n\t\tconst scan = await scanSessionInfo(filePath);\n\t\tconst cwd = typeof header.cwd === \"string\" ? header.cwd : \"\";\n\n\t\treturn {\n\t\t\treference: filePath,\n\t\t\tpath: filePath,\n\t\t\tid: header.id,\n\t\t\tcwd,\n\t\t\tname: scan.name,\n\t\t\tparentSessionPath: header.parentSession,\n\t\t\tcreated: new Date(header.timestamp),\n\t\t\tmodified: resolveSessionModifiedDate(header, scan.lastActivityTime, stats.mtime),\n\t\t\tmessageCount: scan.messageCount,\n\t\t\tfirstMessage: scan.firstMessage || \"(no messages)\",\n\t\t\tallMessagesText: scan.allMessages.join(\" \"),\n\t\t};\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nconst MAX_CONCURRENT_SESSION_INFO_LOADS = 10;\n\nexport function getSessionDirForReference(reference: string): string {\n\treturn resolve(reference, \"..\");\n}\n\nexport function getDefaultSessionDirPath(cwd: string, agentDir: string = getDefaultAgentDir()): string {\n\tconst resolvedCwd = resolve(cwd);\n\tconst safePath = `--${resolvedCwd.replace(/^[/\\\\]/, \"\").replace(/[/\\\\:]/g, \"-\")}--`;\n\treturn join(resolve(agentDir), \"sessions\", safePath);\n}\n\nexport function getDefaultSessionDir(cwd: string, agentDir: string = getDefaultAgentDir()): string {\n\tconst sessionDir = getDefaultSessionDirPath(cwd, agentDir);\n\tensureDir(sessionDir);\n\treturn sessionDir;\n}\n\nexport function getSessionsRoot(): string {\n\treturn getSessionsDir();\n}\n\nexport function prepareSessionReference(sessionDir: string, sessionId: string, timestamp: string): string {\n\tconst fileTimestamp = timestamp.replace(/[:.]/g, \"-\");\n\treturn join(sessionDir, `${fileTimestamp}_${sessionId}.jsonl`);\n}\n\nexport function exists(path: string): boolean {\n\treturn existsSync(path);\n}\n\nexport function ensureDir(path: string): void {\n\tif (!existsSync(path)) {\n\t\tmkdirSync(path, { recursive: true });\n\t}\n}\nexport interface JsonlValidationContext {\n\tphase?: JsonlErrorPhase;\n\tlocations?: ReadonlyArray<JsonlRecordLocation | undefined>;\n}\ninterface CurrentSessionValidationState {\n\tfilePath: string;\n\tphase: JsonlErrorPhase;\n\tlocations: ReadonlyArray<JsonlRecordLocation | undefined> | undefined;\n\tentriesById: Map<string, SessionEntry>;\n}\n\nfunction failCurrentSessionValidation(\n\tstate: CurrentSessionValidationState,\n\tindex: number,\n\tfailure: JsonlDecodeFailure,\n): never {\n\tconst location = state.locations?.[index];\n\tthrow new JsonlSessionError({\n\t\tcode: \"invalid_jsonl\",\n\t\treference: state.filePath,\n\t\tphase: state.phase,\n\t\tline: location?.line ?? index + 1,\n\t\tbyteOffset: location?.byteOffset,\n\t\tdecodeKind: failure.decodeKind,\n\t\tmessage: `Invalid JSONL session file ${state.filePath}: line ${location?.line ?? index + 1} ${failure.message}`,\n\t\tcause: failure,\n\t});\n}\n\nfunction validateCurrentSessionHeader(header: FileEntry | undefined, state: CurrentSessionValidationState): void {\n\tif (header?.type !== \"session\" || header.version !== 3) {\n\t\tfailCurrentSessionValidation(\n\t\t\tstate,\n\t\t\t0,\n\t\t\tnew JsonlDecodeFailure(\"state\", \"does not have a current version-3 header\"),\n\t\t);\n\t}\n\ttry {\n\t\tconst encodedHeader = new TextEncoder().encode(JSON.stringify(header));\n\t\tparseStrictHeader({ bytes: encodedHeader, line: 1, start: 0, terminated: true });\n\t} catch (error) {\n\t\tif (error instanceof JsonlDecodeFailure) failCurrentSessionValidation(state, 0, error);\n\t\tthrow error;\n\t}\n}\n\nfunction validateCurrentSessionEntrySchema(\n\tentry: FileEntry | undefined,\n\tindex: number,\n\tstate: CurrentSessionValidationState,\n): asserts entry is SessionEntry {\n\tif (!entry || entry.type === \"session\") {\n\t\tfailCurrentSessionValidation(\n\t\t\tstate,\n\t\t\tindex,\n\t\t\tnew JsonlDecodeFailure(\"state\", `has an unexpected session header at logical entry ${index + 1}`),\n\t\t);\n\t}\n\ttry {\n\t\tconst encodedEntry = new TextEncoder().encode(JSON.stringify(entry));\n\t\tparseStrictEntry({ bytes: encodedEntry, line: index + 1, start: 0, terminated: true }, 3);\n\t} catch (error) {\n\t\tif (error instanceof JsonlDecodeFailure) failCurrentSessionValidation(state, index, error);\n\t\tthrow error;\n\t}\n}\n\nfunction getCurrentSessionEntryTarget(entry: SessionEntry): string | undefined {\n\tswitch (entry.type) {\n\t\tcase \"label\":\n\t\t\treturn entry.targetId;\n\t\tcase \"compaction\":\n\t\t\treturn entry.firstKeptEntryId;\n\t\tcase \"branch_summary\":\n\t\t\treturn entry.fromId;\n\t\tdefault:\n\t\t\treturn undefined;\n\t}\n}\n\nfunction validateCurrentSessionEntryLinks(\n\tentry: SessionEntry,\n\tindex: number,\n\tstate: CurrentSessionValidationState,\n): void {\n\tif (state.entriesById.has(entry.id)) {\n\t\tfailCurrentSessionValidation(state, index, new JsonlDecodeFailure(\"state\", `duplicates entry id ${entry.id}`));\n\t}\n\tif (entry.parentId !== null && !state.entriesById.has(entry.parentId)) {\n\t\tfailCurrentSessionValidation(\n\t\t\tstate,\n\t\t\tindex,\n\t\t\tnew JsonlDecodeFailure(\"state\", `references missing parent ${entry.parentId}`),\n\t\t);\n\t}\n\tconst targetId = getCurrentSessionEntryTarget(entry);\n\tif (targetId !== undefined && !state.entriesById.has(targetId)) {\n\t\tfailCurrentSessionValidation(\n\t\t\tstate,\n\t\t\tindex,\n\t\t\tnew JsonlDecodeFailure(\"state\", `references missing target ${targetId}`),\n\t\t);\n\t}\n\tstate.entriesById.set(entry.id, entry);\n}\n\nexport function validateCurrentSessionEntries(\n\tentries: FileEntry[],\n\tfilePath = \"session\",\n\tcontext: JsonlValidationContext = {},\n): void {\n\tconst state: CurrentSessionValidationState = {\n\t\tfilePath,\n\t\tphase: context.phase ?? \"open\",\n\t\tlocations: context.locations,\n\t\tentriesById: new Map(),\n\t};\n\tvalidateCurrentSessionHeader(entries[0], state);\n\tfor (let index = 1; index < entries.length; index++) {\n\t\tconst entry = entries[index];\n\t\tvalidateCurrentSessionEntrySchema(entry, index, state);\n\t\tvalidateCurrentSessionEntryLinks(entry, index, state);\n\t}\n}\n\ninterface JsonlLoadContext {\n\tfilePath: string;\n\tpublicationOptions: JsonlAtomicPublicationOptions;\n\trepair: boolean;\n\tphase: JsonlErrorPhase;\n}\n\ninterface JsonlLoadState {\n\tentries: FileEntry[];\n\tlocations: JsonlRecordLocation[];\n\theader: SessionHeader | undefined;\n\theaderRecord: JsonlPhysicalRecord | undefined;\n\tfinalRecord: JsonlPhysicalRecord | undefined;\n}\n\ntype JsonlRecordScanAction = \"continue\" | \"stop\";\n\nfunction repairTornJsonlRecord(context: JsonlLoadContext, record: JsonlPhysicalRecord): void {\n\tpublishJsonlContentAtomically(context.filePath, readFileSync(context.filePath).subarray(0, record.start), {\n\t\t...context.publicationOptions,\n\t\tphase: \"repair\",\n\t});\n}\n\nfunction isRepairableDecodeFailure(\n\tcontext: JsonlLoadContext,\n\tstate: JsonlLoadState,\n\trecord: JsonlPhysicalRecord,\n\tfailure: Error,\n): boolean {\n\treturn context.repair && state.header !== undefined && !record.terminated && failure instanceof JsonlDecodeFailure;\n}\n\nfunction isRepairableSyntaxFailure(\n\tcontext: JsonlLoadContext,\n\tstate: JsonlLoadState,\n\trecord: JsonlPhysicalRecord,\n\tfailure: Error,\n): boolean {\n\treturn (\n\t\tcontext.repair &&\n\t\tstate.header !== undefined &&\n\t\t!record.terminated &&\n\t\tfailure instanceof JsonlDecodeFailure &&\n\t\tfailure.kind === \"syntax\"\n\t);\n}\n\nfunction scanJsonlRecord(\n\tcontext: JsonlLoadContext,\n\tstate: JsonlLoadState,\n\trecord: JsonlPhysicalRecord,\n): JsonlRecordScanAction {\n\tstate.finalRecord = record;\n\tlet line: string;\n\ttry {\n\t\tline = decodePhysicalRecord(record);\n\t} catch (error) {\n\t\tconst failure = error instanceof Error ? error : new Error(String(error));\n\t\tif (isRepairableDecodeFailure(context, state, record, failure)) {\n\t\t\trepairTornJsonlRecord(context, record);\n\t\t\treturn \"stop\";\n\t\t}\n\t\tthrow invalidJsonl(context.filePath, record, failure, context.phase);\n\t}\n\tif (!line.trim()) return \"continue\";\n\n\ttry {\n\t\tif (!state.header) {\n\t\t\tstate.header = parseStrictHeader(record);\n\t\t\tstate.headerRecord = record;\n\t\t\tstate.entries.push(state.header);\n\t\t} else {\n\t\t\tstate.entries.push(parseStrictEntry(record, state.header.version ?? 1));\n\t\t}\n\t\tstate.locations.push({ line: record.line, byteOffset: record.start });\n\t\treturn \"continue\";\n\t} catch (error) {\n\t\tconst failure = error instanceof Error ? error : new Error(String(error));\n\t\tif (isRepairableSyntaxFailure(context, state, record, failure)) {\n\t\t\trepairTornJsonlRecord(context, record);\n\t\t\treturn \"stop\";\n\t\t}\n\t\tthrow invalidJsonl(context.filePath, record, failure, context.phase);\n\t}\n}\n\nfunction requireLoadedSessionHeader(context: JsonlLoadContext, state: JsonlLoadState): SessionHeader {\n\tif (state.header && state.headerRecord) return state.header;\n\tconst failure = new JsonlDecodeFailure(\"schema\", \"does not contain a session header\");\n\tthrow new JsonlSessionError({\n\t\tcode: \"invalid_jsonl\",\n\t\treference: context.filePath,\n\t\tphase: context.phase,\n\t\tline: state.finalRecord?.line ?? 1,\n\t\tbyteOffset: state.finalRecord?.start ?? 0,\n\t\tdecodeKind: failure.decodeKind,\n\t\tmessage: `Session file is not a valid grip session: ${context.filePath}`,\n\t\tcause: failure,\n\t});\n}\n\nfunction repairMissingFinalNewline(context: JsonlLoadContext, state: JsonlLoadState): void {\n\tif (!context.repair || state.finalRecord?.terminated !== false || state.entries.at(-1) === undefined) return;\n\tconst original = readFileSync(context.filePath);\n\tif (original.length === 0 || original.at(-1) === 0x0a) return;\n\tconst repaired = Buffer.allocUnsafe(original.length + 1);\n\toriginal.copy(repaired);\n\trepaired[original.length] = 0x0a;\n\tpublishJsonlContentAtomically(context.filePath, repaired, {\n\t\t...context.publicationOptions,\n\t\tphase: \"repair\",\n\t});\n}\n\nfunction validateLoadedSessionEntries(context: JsonlLoadContext, state: JsonlLoadState, header: SessionHeader): void {\n\tif ((header.version ?? 1) < 2) return;\n\tconst validationContext: JsonlValidationContext = { phase: context.phase, locations: state.locations };\n\tif (header.version === 2) {\n\t\t// Version 2 has current tree fields; validate via a non-mutating header projection.\n\t\tvalidateCurrentSessionEntries(\n\t\t\t[{ ...header, version: 3 }, ...state.entries.slice(1)],\n\t\t\tcontext.filePath,\n\t\t\tvalidationContext,\n\t\t);\n\t\treturn;\n\t}\n\tvalidateCurrentSessionEntries(state.entries, context.filePath, validationContext);\n}\n\nfunction loadJsonlSession(\n\tfilePath: string,\n\tpublicationOptions: JsonlAtomicPublicationOptions = {},\n\trepair = true,\n\tphase: JsonlErrorPhase = \"open\",\n): FileEntry[] {\n\tif (!existsSync(filePath)) return [];\n\tif (lstatSync(filePath).size === 0) return [];\n\tconst context: JsonlLoadContext = { filePath, publicationOptions, repair, phase };\n\tconst state: JsonlLoadState = {\n\t\tentries: [],\n\t\tlocations: [],\n\t\theader: undefined,\n\t\theaderRecord: undefined,\n\t\tfinalRecord: undefined,\n\t};\n\n\tfor (const record of readPhysicalRecords(filePath)) {\n\t\tif (scanJsonlRecord(context, state, record) === \"stop\") break;\n\t}\n\tconst header = requireLoadedSessionHeader(context, state);\n\trepairMissingFinalNewline(context, state);\n\tvalidateLoadedSessionEntries(context, state, header);\n\tjsonlEntryLocations.set(state.entries, state.locations);\n\treturn state.entries;\n}\n\nexport function load(\n\tfilePath: string,\n\tpublicationOptions: JsonlAtomicPublicationOptions = {},\n\trepair = true,\n\tphase: JsonlErrorPhase = \"open\",\n): FileEntry[] {\n\ttry {\n\t\treturn loadJsonlSession(filePath, publicationOptions, repair, phase);\n\t} catch (error) {\n\t\tif (error instanceof JsonlSessionError) throw error;\n\t\tconst cause = error instanceof Error ? error : new Error(String(error));\n\t\tthrow jsonlStorageError(filePath, phase, `Failed to ${phase} JSONL session ${filePath}: ${cause.message}`, cause);\n\t}\n}\n\nfunction getNextAppendPosition(bytes: Uint8Array): JsonlRecordLocation {\n\tlet line = 1;\n\tfor (const byte of bytes) {\n\t\tif (byte === 0x0a) line++;\n\t}\n\treturn { line, byteOffset: bytes.length };\n}\n\nfunction serializeJsonlEntries(entries: FileEntry[]): string {\n\treturn `${entries.map((entry) => JSON.stringify(entry)).join(\"\\n\")}\\n`;\n}\n\nexport function append(filePath: string, entry: FileEntry): void {\n\tappendFileSync(filePath, `${JSON.stringify(entry)}\\n`);\n}\n\nexport interface JsonlAtomicPublicationOptions {\n\trename?: (source: string, destination: string) => void;\n\tremove?: (path: string) => void;\n\tplatform?: NodeJS.Platform;\n\tphase?: JsonlErrorPhase;\n}\n\nfunction isWindowsRenameSharingError(error: unknown): boolean {\n\tif (!(error instanceof Error) || !(\"code\" in error)) return false;\n\tconst code = (error as NodeJS.ErrnoException).code;\n\treturn code === \"EPERM\" || code === \"EACCES\" || code === \"EBUSY\";\n}\n\nfunction renameWithRetry(\n\tsource: string,\n\tdestination: string,\n\trename: (source: string, destination: string) => void,\n\tplatform: NodeJS.Platform,\n): void {\n\tfor (let attempt = 0; attempt < 5; attempt++) {\n\t\ttry {\n\t\t\trename(source, destination);\n\t\t\treturn;\n\t\t} catch (error) {\n\t\t\tif (platform !== \"win32\" || !isWindowsRenameSharingError(error) || attempt === 4) throw error;\n\t\t\tAtomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, 10 * 2 ** attempt);\n\t\t}\n\t}\n}\n\nfunction assertJsonlDestinationReplaceable(filePath: string): void {\n\ttry {\n\t\tconst destinationInfo = lstatSync(filePath);\n\t\tif (!destinationInfo.isFile()) throw new Error(`Refusing to replace non-file session path: ${filePath}`);\n\t} catch (error) {\n\t\tif (!(error instanceof Error) || !(\"code\" in error) || (error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n\t\t\tthrow error;\n\t\t}\n\t}\n}\n\nfunction allocateJsonlStagingPath(filePath: string): string {\n\tconst parentDir = dirname(filePath);\n\tensureDir(parentDir);\n\tfor (let attempt = 0; attempt < 100; attempt++) {\n\t\tconst candidate = join(parentDir, `.${basename(filePath)}.tmp-${randomUUID()}`);\n\t\tif (!existsSync(candidate)) return candidate;\n\t}\n\tthrow new Error(`Failed to allocate staging path for session: ${filePath}`);\n}\n\nfunction stageJsonlContent(\n\ttempPath: string,\n\tfilePath: string,\n\tcontent: string | Uint8Array,\n\toptions: JsonlAtomicPublicationOptions,\n): void {\n\ttry {\n\t\twriteFileSync(tempPath, content);\n\t} catch (error) {\n\t\tconst cause = error instanceof Error ? error : new Error(String(error));\n\t\tthrow jsonlStorageError(\n\t\t\tfilePath,\n\t\t\toptions.phase ?? \"replace\",\n\t\t\t`Failed to stage JSONL session ${filePath}: ${cause.message}`,\n\t\t\tcause,\n\t\t\t\"not_written\",\n\t\t);\n\t}\n}\n\nfunction publishJsonlStagingPath(tempPath: string, filePath: string, options: JsonlAtomicPublicationOptions): void {\n\ttry {\n\t\trenameWithRetry(tempPath, filePath, options.rename ?? renameSync, options.platform ?? process.platform);\n\t} catch (error) {\n\t\tconst cause = error instanceof Error ? error : new Error(String(error));\n\t\tthrow jsonlStorageError(\n\t\t\tfilePath,\n\t\t\toptions.phase ?? \"replace\",\n\t\t\t`Failed to publish JSONL session ${filePath}: ${cause.message}`,\n\t\t\tcause,\n\t\t\t\"unknown\",\n\t\t);\n\t}\n}\n\nfunction removeUnpublishedJsonlStagingPath(tempPath: string, options: JsonlAtomicPublicationOptions): void {\n\ttry {\n\t\t(options.remove ?? ((path) => rmSync(path, { force: true })))(tempPath);\n\t} catch {\n\t\t// Preserve the staging or rename failure; stale temps are undiscoverable.\n\t}\n}\n\nfunction publishJsonlContentAtomicallyUnsafe(\n\tfilePath: string,\n\tcontent: string | Uint8Array,\n\toptions: JsonlAtomicPublicationOptions = {},\n): void {\n\tassertJsonlDestinationReplaceable(filePath);\n\tconst tempPath = allocateJsonlStagingPath(filePath);\n\tlet published = false;\n\ttry {\n\t\tstageJsonlContent(tempPath, filePath, content, options);\n\t\tpublishJsonlStagingPath(tempPath, filePath, options);\n\t\tpublished = true;\n\t} finally {\n\t\tif (!published) removeUnpublishedJsonlStagingPath(tempPath, options);\n\t}\n}\n\nfunction publishJsonlContentAtomically(\n\tfilePath: string,\n\tcontent: string | Uint8Array,\n\toptions: JsonlAtomicPublicationOptions = {},\n): void {\n\ttry {\n\t\tpublishJsonlContentAtomicallyUnsafe(filePath, content, options);\n\t} catch (error) {\n\t\tif (error instanceof JsonlSessionError) throw error;\n\t\tconst cause = error instanceof Error ? error : new Error(String(error));\n\t\tthrow jsonlStorageError(\n\t\t\tfilePath,\n\t\t\toptions.phase ?? \"replace\",\n\t\t\t`Failed to publish JSONL session ${filePath}: ${cause.message}`,\n\t\t\tcause,\n\t\t\t\"not_written\",\n\t\t);\n\t}\n}\n\nexport function publishJsonlAtomically(\n\tfilePath: string,\n\tentries: FileEntry[],\n\toptions: JsonlAtomicPublicationOptions = {},\n): void {\n\tpublishJsonlContentAtomically(filePath, serializeJsonlEntries(entries), options);\n}\n\nexport function rewrite(filePath: string, entries: FileEntry[]): void {\n\tpublishJsonlAtomically(filePath, entries);\n}\n\nexport function forkSession(sessionDir: string, header: SessionHeader, sourceEntries: FileEntry[]): string {\n\tconst reference = prepareSessionReference(sessionDir, header.id, header.timestamp);\n\tpublishJsonlAtomically(reference, [header, ...sourceEntries.filter((entry) => entry.type !== \"session\")], {\n\t\tphase: \"fork\",\n\t});\n\treturn reference;\n}\n\nexport function findMostRecent(sessionDir: string, cwd?: string): string | null {\n\tconst resolvedCwd = cwd ? resolve(cwd) : undefined;\n\tlet names: string[];\n\ttry {\n\t\tnames = readdirSync(sessionDir).filter((file) => file.endsWith(\".jsonl\"));\n\t} catch (error) {\n\t\tif (error instanceof Error && \"code\" in error && (error as NodeJS.ErrnoException).code === \"ENOENT\") return null;\n\t\tthrow error;\n\t}\n\tconst files: Array<{ path: string; mtime: Date }> = [];\n\tfor (const name of names) {\n\t\tconst path = join(sessionDir, name);\n\t\ttry {\n\t\t\tconst header = readSessionHeaderForDiscovery(path);\n\t\t\tif (!header) continue;\n\t\t\tif (resolvedCwd && !sessionCwdMatches(getSessionHeaderCwd(header), resolvedCwd)) continue;\n\t\t\tfiles.push({ path, mtime: statSync(path).mtime });\n\t\t} catch {\n\t\t\t// Quarantine a candidate that disappeared or became unreadable without hiding valid siblings.\n\t\t}\n\t}\n\tfiles.sort((a, b) => b.mtime.getTime() - a.mtime.getTime());\n\treturn files[0]?.path ?? null;\n}\n\nexport async function list(dir: string, onProgress?: SessionListProgress): Promise<SessionInfo[]> {\n\tconst sessions: SessionInfo[] = [];\n\tif (!existsSync(dir)) {\n\t\treturn sessions;\n\t}\n\n\tconst dirEntries = await readdir(dir);\n\tconst files = dirEntries.filter((file) => file.endsWith(\".jsonl\")).map((file) => join(dir, file));\n\tlet loaded = 0;\n\tconst results = await buildSessionInfosWithConcurrency(files, () => {\n\t\tloaded++;\n\t\tonProgress?.(loaded, files.length);\n\t});\n\tfor (const info of results) {\n\t\tif (info) sessions.push(info);\n\t}\n\n\treturn sessions;\n}\n\nexport async function listAll(sessionsDir: string, onProgress?: SessionListProgress): Promise<SessionInfo[]> {\n\tif (!existsSync(sessionsDir)) return [];\n\tconst entries = await readdir(sessionsDir, { withFileTypes: true });\n\tconst dirs = entries.filter((entry) => entry.isDirectory()).map((entry) => join(sessionsDir, entry.name));\n\tlet totalFiles = 0;\n\tconst dirFiles: string[][] = [];\n\tfor (const dir of dirs) {\n\t\tconst files = (await readdir(dir)).filter((file) => file.endsWith(\".jsonl\"));\n\t\tdirFiles.push(files.map((file) => join(dir, file)));\n\t\ttotalFiles += files.length;\n\t}\n\tlet loaded = 0;\n\tconst sessions: SessionInfo[] = [];\n\tconst results = await buildSessionInfosWithConcurrency(dirFiles.flat(), () => {\n\t\tloaded++;\n\t\tonProgress?.(loaded, totalFiles);\n\t});\n\tfor (const info of results) {\n\t\tif (info) sessions.push(info);\n\t}\n\treturn sessions;\n}\n\nasync function buildSessionInfosWithConcurrency(\n\tfiles: string[],\n\tonLoaded: () => void,\n): Promise<(SessionInfo | null)[]> {\n\tconst results: (SessionInfo | null)[] = new Array(files.length).fill(null);\n\tconst inFlight = new Set<Promise<void>>();\n\tlet nextIndex = 0;\n\n\tconst startNext = (): void => {\n\t\tconst index = nextIndex++;\n\t\tconst file = files[index];\n\t\tif (!file) return;\n\n\t\tlet task: Promise<void>;\n\t\ttask = buildSessionInfo(file)\n\t\t\t.then((info) => {\n\t\t\t\tresults[index] = info;\n\t\t\t})\n\t\t\t.catch(() => {\n\t\t\t\tresults[index] = null;\n\t\t\t})\n\t\t\t.finally(() => {\n\t\t\t\tinFlight.delete(task);\n\t\t\t\tonLoaded();\n\t\t\t});\n\t\tinFlight.add(task);\n\t};\n\n\twhile (nextIndex < files.length || inFlight.size > 0) {\n\t\twhile (nextIndex < files.length && inFlight.size < MAX_CONCURRENT_SESSION_INFO_LOADS) {\n\t\t\tstartNext();\n\t\t}\n\t\tif (inFlight.size > 0) {\n\t\t\tawait Promise.race(inFlight);\n\t\t}\n\t}\n\n\treturn results;\n}\n\ninterface PreloadedSessionEntries {\n\treference: string;\n\tentries: FileEntry[];\n}\n\ntype JsonlNewSessionPublicationPhase = \"create\" | \"fork\";\nexport type JsonlFirstPublicationPhase = JsonlNewSessionPublicationPhase | \"import\";\n\ninterface JsonlFirstPublicationOptions {\n\tallowExistingEmptyFile: boolean;\n\tphase: JsonlFirstPublicationPhase;\n}\n\ninterface JsonlSessionReferenceOptions {\n\tallowExistingEmptyFile?: boolean;\n}\n\ninterface JsonlSnapshotOptions {\n\tphase?: JsonlErrorPhase;\n}\n\nexport interface JsonlStoreWriteOperations {\n\tappend(filePath: string, serializedEntry: string): void;\n\tpublish(filePath: string, entries: FileEntry[], options?: JsonlAtomicPublicationOptions): void;\n}\n\nexport interface JsonlFirstPublicationCoordinator {\n\tpublish(filePath: string, entries: FileEntry[], operation: () => void, options: JsonlFirstPublicationOptions): void;\n}\n\nexport class SessionAlreadyExistsError extends Error {\n\treadonly code = \"already_exists\";\n\treadonly reference: string;\n\treadonly path: string;\n\treadonly phase: JsonlFirstPublicationPhase;\n\treadonly outcome = \"not_written\";\n\n\tconstructor(reference: string, sessionId: string, phase: JsonlFirstPublicationPhase = \"create\") {\n\t\tsuper(`Session already exists: ${sessionId}`);\n\t\tthis.name = \"SessionAlreadyExistsError\";\n\t\tthis.reference = reference;\n\t\tthis.path = reference;\n\t\tthis.phase = phase;\n\t}\n}\n\nfunction isDefinitelyNotWritten(error: unknown): boolean {\n\tif (!(error instanceof Error) || !(\"code\" in error)) return false;\n\treturn new Set([\"ENOENT\", \"EACCES\", \"EPERM\", \"EISDIR\", \"ENOTDIR\", \"EINVAL\", \"EROFS\"]).has(\n\t\tString((error as NodeJS.ErrnoException).code),\n\t);\n}\n\nfunction getFirstPublicationPhase(entries: FileEntry[]): JsonlNewSessionPublicationPhase {\n\tconst header = entries[0];\n\treturn header?.type === \"session\" && header.parentSession ? \"fork\" : \"create\";\n}\n\nconst defaultWriteOperations: JsonlStoreWriteOperations = {\n\tappend: appendFileSync,\n\tpublish: publishJsonlAtomically,\n};\n\nexport class JsonlSessionStore extends InMemorySessionStore {\n\tprivate reference: string | undefined;\n\tprivate flushed = false;\n\tprivate preloaded: PreloadedSessionEntries | undefined;\n\tprivate allowExistingEmptyFile = false;\n\tprivate readonly writeOperations: JsonlStoreWriteOperations;\n\tprivate readonly firstPublicationCoordinator: JsonlFirstPublicationCoordinator | undefined;\n\tprivate writeFence: Error | undefined;\n\tprivate nextAppendLine = 1;\n\tprivate nextAppendOffset = 0;\n\n\tconstructor(\n\t\tpreloaded?: PreloadedSessionEntries,\n\t\twriteOperations: JsonlStoreWriteOperations = defaultWriteOperations,\n\t\tfirstPublicationCoordinator?: JsonlFirstPublicationCoordinator,\n\t) {\n\t\tsuper();\n\t\tthis.preloaded = preloaded ? { ...preloaded, reference: resolve(preloaded.reference) } : undefined;\n\t\tthis.writeOperations = writeOperations;\n\t\tthis.firstPublicationCoordinator = firstPublicationCoordinator;\n\t}\n\tisPersisted(): boolean {\n\t\treturn true;\n\t}\n\n\tgetSessionReference(): string | undefined {\n\t\treturn this.reference;\n\t}\n\n\tsetSessionReference(reference: string, options: JsonlSessionReferenceOptions = {}): void {\n\t\tconst resolvedReference = resolve(reference);\n\t\tif (this.reference !== resolvedReference) {\n\t\t\tthis.writeFence = undefined;\n\t\t\tthis.allowExistingEmptyFile = false;\n\t\t}\n\t\tthis.reference = resolvedReference;\n\t\tif (options.allowExistingEmptyFile) this.allowExistingEmptyFile = true;\n\t\tthis.flushed = false;\n\t}\n\n\texists(path: string): boolean {\n\t\treturn exists(path);\n\t}\n\n\tensureDir(path: string): void {\n\t\tensureDir(path);\n\t}\n\n\tload(filePath: string): FileEntry[] {\n\t\tif (!exists(filePath)) return [];\n\t\tconst info = lstatSync(filePath);\n\t\tthis.allowExistingEmptyFile = info.isFile() && info.size === 0;\n\t\tthis.flushed = true;\n\t\tconst resolvedFilePath = resolve(filePath);\n\t\tif (!this.writeFence && this.preloaded?.reference === resolvedFilePath) {\n\t\t\tconst entries = this.preloaded.entries;\n\t\t\tthis.preloaded = undefined;\n\t\t\tthis.updateNextAppendPosition(resolvedFilePath);\n\t\t\treturn entries;\n\t\t}\n\t\tconst entries = load(resolvedFilePath);\n\t\tthis.updateNextAppendPosition(resolvedFilePath);\n\t\tthis.writeFence = undefined;\n\t\tthis.preloaded = undefined;\n\t\treturn entries;\n\t}\n\n\tprivate updateNextAppendPosition(filePath: string): void {\n\t\tconst position = getNextAppendPosition(readFileSync(filePath));\n\t\tthis.nextAppendLine = position.line;\n\t\tthis.nextAppendOffset = position.byteOffset;\n\t}\n\n\tprivate persistAppendedEntry(\n\t\treference: string,\n\t\tprospectiveEntries: FileEntry[],\n\t\tserializedEntry: string | undefined,\n\t): void {\n\t\ttry {\n\t\t\tif (this.flushed) this.writeOperations.append(reference, serializedEntry!);\n\t\t\telse this.publishFirstSnapshot(prospectiveEntries);\n\t\t} catch (error) {\n\t\t\tif (error instanceof SessionAlreadyExistsError) throw error;\n\t\t\tconst cause = error instanceof Error ? error : new Error(String(error));\n\t\t\tif (this.flushed && isDefinitelyNotWritten(error)) {\n\t\t\t\tthrow jsonlStorageError(reference, \"append\", cause.message, cause, \"not_written\");\n\t\t\t}\n\t\t\tthis.writeFence = jsonlStorageError(\n\t\t\t\treference,\n\t\t\t\tthis.flushed ? \"append\" : getFirstPublicationPhase(prospectiveEntries),\n\t\t\t\tcause.message,\n\t\t\t\tcause,\n\t\t\t\tcause instanceof JsonlSessionError ? undefined : \"unknown\",\n\t\t\t);\n\t\t\tthrow this.writeFence;\n\t\t}\n\t}\n\n\tprivate recordAppendedEntryPosition(\n\t\twasFlushed: boolean,\n\t\tserializedEntry: string | undefined,\n\t\tprospectiveEntries: FileEntry[],\n\t): void {\n\t\tif (wasFlushed) {\n\t\t\tthis.nextAppendLine++;\n\t\t\tthis.nextAppendOffset += Buffer.byteLength(serializedEntry!);\n\t\t\treturn;\n\t\t}\n\t\tconst position = getNextAppendPosition(new TextEncoder().encode(serializeJsonlEntries(prospectiveEntries)));\n\t\tthis.nextAppendLine = position.line;\n\t\tthis.nextAppendOffset = position.byteOffset;\n\t}\n\n\tappendEntry(entry: SessionEntry): void {\n\t\tif (!this.reference) {\n\t\t\tsuper.appendEntry(entry);\n\t\t\treturn;\n\t\t}\n\t\tthis.assertWritable();\n\t\tconst prospectiveEntries = [...this.getFileEntries(), entry];\n\t\tconst wasFlushed = this.flushed;\n\t\tconst appendPosition = wasFlushed\n\t\t\t? { line: this.nextAppendLine, byteOffset: this.nextAppendOffset }\n\t\t\t: getNextAppendPosition(new TextEncoder().encode(serializeJsonlEntries(this.getFileEntries())));\n\t\tconst locations: Array<JsonlRecordLocation | undefined> = [];\n\t\tlocations[prospectiveEntries.length - 1] = appendPosition;\n\t\tvalidateCurrentSessionEntries(prospectiveEntries, this.reference, { phase: \"append\", locations });\n\t\tconst hasAssistantMessage = prospectiveEntries.some(\n\t\t\t(fileEntry) => fileEntry.type === \"message\" && fileEntry.message.role === \"assistant\",\n\t\t);\n\t\tif (!hasAssistantMessage) {\n\t\t\tsuper.appendEntry(entry);\n\t\t\tthis.flushed = false;\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this.flushed) serializeJsonlEntries(prospectiveEntries);\n\t\tconst serializedEntry = this.flushed ? `${JSON.stringify(entry)}\\n` : undefined;\n\t\tthis.persistAppendedEntry(this.reference, prospectiveEntries, serializedEntry);\n\t\tsuper.appendEntry(entry);\n\t\tthis.recordAppendedEntryPosition(wasFlushed, serializedEntry, prospectiveEntries);\n\t\tthis.flushed = true;\n\t\tthis.allowExistingEmptyFile = false;\n\t}\n\n\tprivate assertWritable(): void {\n\t\tif (this.writeFence) {\n\t\t\tthrow new JsonlSessionError({\n\t\t\t\tcode: \"fenced\",\n\t\t\t\treference: this.reference ?? \"\",\n\t\t\t\tphase: \"append\",\n\t\t\t\tmessage: `Session writes are fenced after a persistence failure: ${this.reference}`,\n\t\t\t\toutcome: \"unknown\",\n\t\t\t\tcause: this.writeFence,\n\t\t\t});\n\t\t}\n\t}\n\tprivate publishFirstSnapshot(entries: FileEntry[]): void {\n\t\tif (!this.reference) return;\n\t\tconst phase = getFirstPublicationPhase(entries);\n\t\tconst operation = () => this.writeOperations.publish(this.reference!, entries, { phase });\n\t\tif (this.firstPublicationCoordinator) {\n\t\t\tthis.firstPublicationCoordinator.publish(this.reference, entries, operation, {\n\t\t\t\tallowExistingEmptyFile: this.allowExistingEmptyFile,\n\t\t\t\tphase,\n\t\t\t});\n\t\t} else {\n\t\t\toperation();\n\t\t}\n\t}\n\n\tsaveSnapshot(options: JsonlSnapshotOptions = {}): void {\n\t\tif (!this.reference) return;\n\t\tthis.assertWritable();\n\t\tserializeJsonlEntries(this.getFileEntries());\n\t\ttry {\n\t\t\tif (this.flushed) {\n\t\t\t\tthis.writeOperations.publish(this.reference, this.getFileEntries(), {\n\t\t\t\t\tphase: options.phase ?? \"replace\",\n\t\t\t\t});\n\t\t\t} else this.publishFirstSnapshot(this.getFileEntries());\n\t\t} catch (error) {\n\t\t\tif (error instanceof SessionAlreadyExistsError) throw error;\n\t\t\tconst cause = error instanceof Error ? error : new Error(String(error));\n\t\t\tthis.writeFence = jsonlStorageError(\n\t\t\t\tthis.reference,\n\t\t\t\toptions.phase ?? (this.flushed ? \"replace\" : getFirstPublicationPhase(this.getFileEntries())),\n\t\t\t\tcause.message,\n\t\t\t\tcause,\n\t\t\t\tcause instanceof JsonlSessionError ? undefined : \"unknown\",\n\t\t\t);\n\t\t\tthrow this.writeFence;\n\t\t}\n\t\tconst position = getNextAppendPosition(new TextEncoder().encode(serializeJsonlEntries(this.getFileEntries())));\n\t\tthis.nextAppendLine = position.line;\n\t\tthis.nextAppendOffset = position.byteOffset;\n\t\tthis.flushed = true;\n\t\tthis.allowExistingEmptyFile = false;\n\t}\n\n\tcommitSnapshot(): void {\n\t\tif (!this.hasAssistantMessage()) {\n\t\t\tthis.flushed = false;\n\t\t\treturn;\n\t\t}\n\t\tthis.saveSnapshot();\n\t}\n}\n"]}
1
+ {"version":3,"file":"jsonl-session-store.js","sourceRoot":"","sources":["../../../../src/core/session/stores/jsonl-session-store.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport type { AgentMessage, JsonlPhysicalRecord } from \"@greppleai/grip-agent-core\";\nimport type { Message, TextContent } from \"@greppleai/grip-ai\";\nimport {\n\tappendFileSync,\n\tcloseSync,\n\tcreateReadStream,\n\texistsSync,\n\tlstatSync,\n\tmkdirSync,\n\topenSync,\n\treaddirSync,\n\treadFileSync,\n\treadSync,\n\trenameSync,\n\trmSync,\n\tstatSync,\n\twriteFileSync,\n} from \"fs\";\nimport { readdir, stat } from \"fs/promises\";\nimport { basename, dirname, join, resolve } from \"path\";\nimport { createInterface } from \"readline\";\nimport { getAgentDir as getDefaultAgentDir, getSessionsDir } from \"../../../config.ts\";\nimport {\n\tJsonlDecodeError as JsonlDecodeFailure,\n\ttype JsonlErrorPhase,\n\tJsonlSessionError,\n\ttype JsonlWriteOutcome,\n} from \"../jsonl-errors.ts\";\nimport type {\n\tFileEntry,\n\tSessionEntry,\n\tSessionHeader,\n\tSessionInfo,\n\tSessionListProgress,\n\tSessionMessageEntry,\n} from \"../types.ts\";\nimport { InMemorySessionStore } from \"./in-memory-session-store.ts\";\n\nfunction isMessageWithContent(message: AgentMessage): message is Message {\n\treturn typeof (message as Message).role === \"string\" && \"content\" in message;\n}\n\nfunction extractTextContent(message: Message): string {\n\tconst content = message.content;\n\tif (content == null) {\n\t\treturn \"\";\n\t}\n\tif (typeof content === \"string\") {\n\t\treturn content;\n\t}\n\treturn content\n\t\t.filter((block): block is TextContent => block.type === \"text\")\n\t\t.map((block) => block.text)\n\t\t.join(\" \");\n}\n\nfunction getMessageActivityTime(entry: SessionMessageEntry): number | undefined {\n\tconst message = entry.message;\n\tif (!isMessageWithContent(message)) return undefined;\n\tif (message.role !== \"user\" && message.role !== \"assistant\") return undefined;\n\n\tconst msgTimestamp = message.timestamp;\n\tif (typeof msgTimestamp === \"number\") {\n\t\treturn msgTimestamp;\n\t}\n\n\tconst t = new Date(entry.timestamp).getTime();\n\treturn Number.isNaN(t) ? undefined : t;\n}\n\nconst SESSION_READ_BUFFER_SIZE = 1024 * 1024;\nconst SESSION_HEADER_READ_BUFFER_SIZE = 4096;\n/** Bound synchronous header discovery while allowing large cwd and custom metadata fields. */\nconst MAX_SESSION_HEADER_SCAN_BYTES = 1024 * 1024;\nconst SAFE_ID_PATTERN = /^[A-Za-z0-9](?:[A-Za-z0-9._-]*[A-Za-z0-9])?$/;\n\ninterface JsonlRecordLocation {\n\tline: number;\n\tbyteOffset: number;\n}\n\nfunction parseSessionEntryLine(line: string): FileEntry | null {\n\tif (!line.trim()) return null;\n\ttry {\n\t\treturn JSON.parse(line) as FileEntry;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nfunction* readPhysicalRecords(filePath: string): Generator<JsonlPhysicalRecord> {\n\tconst fd = openSync(filePath, \"r\");\n\tconst buffer = Buffer.allocUnsafe(SESSION_READ_BUFFER_SIZE);\n\tlet pending = Buffer.alloc(0);\n\tlet consumedBytes = 0;\n\tlet recordStart = 0;\n\tlet line = 1;\n\ttry {\n\t\twhile (true) {\n\t\t\tconst bytesRead = readSync(fd, buffer, 0, buffer.length, null);\n\t\t\tif (bytesRead === 0) break;\n\t\t\tconst chunk = buffer.subarray(0, bytesRead);\n\t\t\tconst data = pending.length === 0 ? chunk : Buffer.concat([pending, chunk]);\n\t\t\tlet start = 0;\n\t\t\tlet newline = data.indexOf(0x0a, start);\n\t\t\twhile (newline !== -1) {\n\t\t\t\tyield { bytes: data.subarray(start, newline), line, start: recordStart, terminated: true };\n\t\t\t\tline++;\n\t\t\t\tstart = newline + 1;\n\t\t\t\trecordStart = consumedBytes + bytesRead - (data.length - start);\n\t\t\t\tnewline = data.indexOf(0x0a, start);\n\t\t\t}\n\t\t\tpending = Buffer.from(data.subarray(start));\n\t\t\tconsumedBytes += bytesRead;\n\t\t}\n\t\tif (pending.length > 0) yield { bytes: pending, line, start: recordStart, terminated: false };\n\t} finally {\n\t\tcloseSync(fd);\n\t}\n}\n\nconst jsonlEntryLocations = new WeakMap<FileEntry[], ReadonlyArray<JsonlRecordLocation | undefined>>();\n\nexport function getJsonlEntryLocations(\n\tentries: FileEntry[],\n): ReadonlyArray<JsonlRecordLocation | undefined> | undefined {\n\treturn jsonlEntryLocations.get(entries);\n}\n\nfunction decodePhysicalRecord(record: JsonlPhysicalRecord): string {\n\tlet bytes = record.bytes;\n\tif (bytes.at(-1) === 0x0d) bytes = bytes.subarray(0, bytes.length - 1);\n\ttry {\n\t\treturn new TextDecoder(\"utf-8\", { fatal: true }).decode(bytes);\n\t} catch (error) {\n\t\tthrow new JsonlDecodeFailure(\n\t\t\t\"utf8\",\n\t\t\t\"contains invalid UTF-8\",\n\t\t\terror instanceof Error ? error : new Error(String(error)),\n\t\t);\n\t}\n}\n\nfunction parseJsonObject(record: JsonlPhysicalRecord): Record<string, unknown> {\n\tlet parsed: unknown;\n\ttry {\n\t\tparsed = JSON.parse(decodePhysicalRecord(record));\n\t} catch (error) {\n\t\tif (error instanceof JsonlDecodeFailure) throw error;\n\t\tthrow new JsonlDecodeFailure(\n\t\t\t\"syntax\",\n\t\t\t\"is not valid JSON\",\n\t\t\terror instanceof Error ? error : new Error(String(error)),\n\t\t);\n\t}\n\tif (typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed)) {\n\t\tthrow new JsonlDecodeFailure(\"schema\", \"is not a JSON object\");\n\t}\n\treturn parsed as Record<string, unknown>;\n}\n\nfunction requireString(value: unknown, field: string): string {\n\tif (typeof value !== \"string\" || value.length === 0) {\n\t\tthrow new JsonlDecodeFailure(\"schema\", `has invalid ${field}`);\n\t}\n\treturn value;\n}\n\nfunction requireId(value: unknown, field: string): string {\n\tconst id = requireString(value, field);\n\tif (!SAFE_ID_PATTERN.test(id)) throw new JsonlDecodeFailure(\"schema\", `has invalid ${field}`);\n\treturn id;\n}\n\nfunction requireTimestamp(value: unknown): string {\n\tconst timestamp = requireString(value, \"timestamp\");\n\tif (Number.isNaN(Date.parse(timestamp))) throw new JsonlDecodeFailure(\"schema\", \"has invalid timestamp\");\n\treturn timestamp;\n}\n\nconst MESSAGE_ROLES = new Set([\n\t\"user\",\n\t\"assistant\",\n\t\"toolResult\",\n\t\"bashExecution\",\n\t\"custom\",\n\t\"branchSummary\",\n\t\"compactionSummary\",\n\t\"hookMessage\",\n]);\n\nfunction validatePersistedMessageRole(message: Record<string, unknown>, role: string): void {\n\tswitch (role) {\n\t\tcase \"toolResult\":\n\t\t\trequireString(message.toolCallId, \"toolCallId\");\n\t\t\trequireString(message.toolName, \"toolName\");\n\t\t\tif (typeof message.isError !== \"boolean\") throw new JsonlDecodeFailure(\"schema\", \"has invalid isError\");\n\t\t\tbreak;\n\t\tcase \"custom\":\n\t\tcase \"hookMessage\":\n\t\t\trequireString(message.customType, \"customType\");\n\t\t\tif (typeof message.display !== \"boolean\") throw new JsonlDecodeFailure(\"schema\", \"has invalid display\");\n\t\t\tbreak;\n\t\tcase \"bashExecution\":\n\t\t\trequireString(message.command, \"command\");\n\t\t\tif (typeof message.output !== \"string\") throw new JsonlDecodeFailure(\"schema\", \"has invalid output\");\n\t\t\tif (typeof message.cancelled !== \"boolean\" || typeof message.truncated !== \"boolean\") {\n\t\t\t\tthrow new JsonlDecodeFailure(\"schema\", \"has invalid bash state\");\n\t\t\t}\n\t\t\tbreak;\n\t\tcase \"branchSummary\":\n\t\tcase \"compactionSummary\":\n\t\t\trequireString(message.summary, \"summary\");\n\t}\n}\n\nfunction validatePersistedMessage(value: unknown): void {\n\tif (typeof value !== \"object\" || value === null) throw new JsonlDecodeFailure(\"schema\", \"has invalid message\");\n\tconst message = value as Record<string, unknown>;\n\tconst role = requireString(message.role, \"message role\");\n\tif (!MESSAGE_ROLES.has(role)) throw new JsonlDecodeFailure(\"schema\", `has unknown message role ${role}`);\n\tif (typeof message.timestamp !== \"number\" || !Number.isFinite(message.timestamp)) {\n\t\tthrow new JsonlDecodeFailure(\"schema\", \"has invalid message timestamp\");\n\t}\n\tif (message.content != null && typeof message.content !== \"string\" && !Array.isArray(message.content)) {\n\t\tthrow new JsonlDecodeFailure(\"schema\", \"has invalid message content\");\n\t}\n\tvalidatePersistedMessageRole(message, role);\n}\n\nconst SESSION_ENTRY_TYPES = new Set<SessionEntry[\"type\"]>([\n\t\"message\",\n\t\"thinking_level_change\",\n\t\"model_change\",\n\t\"compaction\",\n\t\"branch_summary\",\n\t\"custom\",\n\t\"custom_message\",\n\t\"label\",\n\t\"session_info\",\n]);\n\nfunction parseStrictHeader(record: JsonlPhysicalRecord): SessionHeader {\n\tconst value = parseJsonObject(record);\n\tif (value.type !== \"session\") throw new JsonlDecodeFailure(\"schema\", \"is not a session header\");\n\tconst version = value.version ?? 1;\n\tif (version !== 1 && version !== 2 && version !== 3) {\n\t\tthrow new JsonlDecodeFailure(\"schema\", \"has unsupported session version\");\n\t}\n\trequireId(value.id, \"session id\");\n\trequireTimestamp(value.timestamp);\n\trequireString(value.cwd, \"cwd\");\n\tif (value.parentSession !== undefined && typeof value.parentSession !== \"string\") {\n\t\tthrow new JsonlDecodeFailure(\"schema\", \"has invalid parentSession\");\n\t}\n\treturn value as unknown as SessionHeader;\n}\nfunction validateVersionedEntryLinks(value: Record<string, unknown>, version: number): void {\n\tif (version < 2) return;\n\trequireId(value.id, \"entry id\");\n\tif (value.parentId !== null && (typeof value.parentId !== \"string\" || !SAFE_ID_PATTERN.test(value.parentId))) {\n\t\tthrow new JsonlDecodeFailure(\"schema\", \"has invalid parentId\");\n\t}\n}\n\nfunction validateCompactionEntry(value: Record<string, unknown>, version: number): void {\n\trequireString(value.summary, \"summary\");\n\tif (version === 1) {\n\t\tif (value.firstKeptEntryId === undefined && !Number.isInteger(value.firstKeptEntryIndex)) {\n\t\t\tthrow new JsonlDecodeFailure(\"schema\", \"has invalid compaction target\");\n\t\t}\n\t} else requireId(value.firstKeptEntryId, \"firstKeptEntryId\");\n\tif (typeof value.tokensBefore !== \"number\" || !Number.isFinite(value.tokensBefore)) {\n\t\tthrow new JsonlDecodeFailure(\"schema\", \"has invalid tokensBefore\");\n\t}\n}\n\nfunction validateCustomMessageEntry(value: Record<string, unknown>): void {\n\trequireString(value.customType, \"customType\");\n\tif (value.content != null && typeof value.content !== \"string\" && !Array.isArray(value.content)) {\n\t\tthrow new JsonlDecodeFailure(\"schema\", \"has invalid content\");\n\t}\n\tif (typeof value.display !== \"boolean\") throw new JsonlDecodeFailure(\"schema\", \"has invalid display\");\n}\n\nfunction parseStrictEntry(record: JsonlPhysicalRecord, version: number): SessionEntry {\n\tconst value = parseJsonObject(record);\n\tconst type = requireString(value.type, \"entry type\");\n\tif (!SESSION_ENTRY_TYPES.has(type as SessionEntry[\"type\"])) {\n\t\tthrow new JsonlDecodeFailure(\"schema\", `has unknown entry type ${type}`);\n\t}\n\trequireTimestamp(value.timestamp);\n\tvalidateVersionedEntryLinks(value, version);\n\tswitch (type) {\n\t\tcase \"message\":\n\t\t\tvalidatePersistedMessage(value.message);\n\t\t\tbreak;\n\t\tcase \"thinking_level_change\":\n\t\t\trequireString(value.thinkingLevel, \"thinkingLevel\");\n\t\t\tbreak;\n\t\tcase \"model_change\":\n\t\t\trequireString(value.provider, \"provider\");\n\t\t\trequireString(value.modelId, \"modelId\");\n\t\t\tbreak;\n\t\tcase \"compaction\":\n\t\t\tvalidateCompactionEntry(value, version);\n\t\t\tbreak;\n\t\tcase \"branch_summary\":\n\t\t\trequireId(value.fromId, \"fromId\");\n\t\t\trequireString(value.summary, \"summary\");\n\t\t\tbreak;\n\t\tcase \"custom\":\n\t\t\trequireString(value.customType, \"customType\");\n\t\t\tbreak;\n\t\tcase \"custom_message\":\n\t\t\tvalidateCustomMessageEntry(value);\n\t\t\tif (typeof value.display !== \"boolean\") throw new JsonlDecodeFailure(\"schema\", \"has invalid display\");\n\t\t\tbreak;\n\t\tcase \"label\":\n\t\t\trequireId(value.targetId, \"targetId\");\n\t\t\tif (value.label !== undefined && typeof value.label !== \"string\") {\n\t\t\t\tthrow new JsonlDecodeFailure(\"schema\", \"has invalid label\");\n\t\t\t}\n\t\t\tbreak;\n\t\tcase \"session_info\":\n\t\t\tif (value.name !== undefined && typeof value.name !== \"string\") {\n\t\t\t\tthrow new JsonlDecodeFailure(\"schema\", \"has invalid name\");\n\t\t\t}\n\t\t\tbreak;\n\t}\n\treturn value as unknown as SessionEntry;\n}\n\nfunction invalidJsonl(\n\tfilePath: string,\n\trecord: JsonlPhysicalRecord,\n\tfailure: Error,\n\tphase: JsonlErrorPhase,\n): JsonlSessionError {\n\tconst decodeFailure =\n\t\tfailure instanceof JsonlDecodeFailure ? failure : new JsonlDecodeFailure(\"state\", failure.message, failure);\n\treturn new JsonlSessionError({\n\t\tcode: \"invalid_jsonl\",\n\t\treference: filePath,\n\t\tphase,\n\t\tline: record.line,\n\t\tbyteOffset: record.start,\n\t\tdecodeKind: decodeFailure.decodeKind,\n\t\tmessage: `Invalid JSONL session file ${filePath}: line ${record.line} ${failure.message}`,\n\t\tcause: decodeFailure,\n\t});\n}\n\nfunction jsonlStorageError(\n\treference: string,\n\tphase: JsonlErrorPhase,\n\tmessage: string,\n\tcause: Error,\n\toutcome?: JsonlWriteOutcome,\n): JsonlSessionError {\n\tif (cause instanceof JsonlSessionError && cause.phase === phase) return cause;\n\treturn new JsonlSessionError({\n\t\tcode: cause instanceof JsonlSessionError ? cause.code : \"storage\",\n\t\treference,\n\t\tphase,\n\t\tline: cause instanceof JsonlSessionError ? cause.line : undefined,\n\t\tbyteOffset: cause instanceof JsonlSessionError ? cause.byteOffset : undefined,\n\t\tdecodeKind: cause instanceof JsonlSessionError ? cause.decodeKind : undefined,\n\t\tmessage,\n\t\toutcome: outcome ?? (cause instanceof JsonlSessionError ? cause.outcome : undefined),\n\t\tcause,\n\t});\n}\n\nexport class SessionHeaderScanLimitError extends Error {\n\tconstructor(filePath: string) {\n\t\tsuper(`Session header exceeds ${MAX_SESSION_HEADER_SCAN_BYTES}-byte scan limit: ${filePath}`);\n\t\tthis.name = \"SessionHeaderScanLimitError\";\n\t}\n}\n\n/**\n * Inspect a physical line while searching for the first parsed session entry.\n * Blank lines are skipped; a malformed non-blank candidate quarantines the file.\n */\nfunction parseSessionHeaderCandidate(line: string): SessionHeader | null | undefined {\n\tif (!line.trim()) return undefined;\n\ttry {\n\t\tconst bytes = new TextEncoder().encode(line);\n\t\treturn parseStrictHeader({ bytes, line: 1, start: 0, terminated: true });\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nfunction parseSessionHeaderBytes(bytes: Uint8Array): SessionHeader | null | undefined {\n\ttry {\n\t\treturn parseSessionHeaderCandidate(new TextDecoder(\"utf-8\", { fatal: true }).decode(bytes));\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nexport function readSessionHeader(filePath: string): SessionHeader | null {\n\tconst fd = openSync(filePath, \"r\");\n\ttry {\n\t\tconst buffer = Buffer.allocUnsafe(SESSION_HEADER_READ_BUFFER_SIZE);\n\t\tlet pending = Buffer.alloc(0);\n\t\tlet scannedBytes = 0;\n\t\twhile (scannedBytes < MAX_SESSION_HEADER_SCAN_BYTES) {\n\t\t\tconst readLength = Math.min(buffer.length, MAX_SESSION_HEADER_SCAN_BYTES - scannedBytes);\n\t\t\tconst bytesRead = readSync(fd, buffer, 0, readLength, null);\n\t\t\tif (bytesRead === 0) return parseSessionHeaderBytes(pending) ?? null;\n\t\t\tscannedBytes += bytesRead;\n\t\t\tconst data =\n\t\t\t\tpending.length === 0\n\t\t\t\t\t? buffer.subarray(0, bytesRead)\n\t\t\t\t\t: Buffer.concat([pending, buffer.subarray(0, bytesRead)]);\n\t\t\tlet lineStart = 0;\n\t\t\tlet newlineIndex = data.indexOf(0x0a, lineStart);\n\t\t\twhile (newlineIndex !== -1) {\n\t\t\t\tconst header = parseSessionHeaderBytes(data.subarray(lineStart, newlineIndex));\n\t\t\t\tif (header !== undefined) return header;\n\t\t\t\tlineStart = newlineIndex + 1;\n\t\t\t\tnewlineIndex = data.indexOf(0x0a, lineStart);\n\t\t\t}\n\t\t\tpending = Buffer.from(data.subarray(lineStart));\n\t\t}\n\t\tconst probe = Buffer.allocUnsafe(1);\n\t\tif (readSync(fd, probe, 0, probe.length, null) === 0) return parseSessionHeaderBytes(pending) ?? null;\n\t\tthrow new SessionHeaderScanLimitError(filePath);\n\t} finally {\n\t\tcloseSync(fd);\n\t}\n}\n\nfunction readSessionHeaderForDiscovery(filePath: string): SessionHeader | null {\n\ttry {\n\t\treturn readSessionHeader(filePath);\n\t} catch (error) {\n\t\tif (error instanceof SessionHeaderScanLimitError) return null;\n\t\tthrow error;\n\t}\n}\n\nfunction getSessionHeaderCwd(header: SessionHeader): string | undefined {\n\tconst cwd = (header as { cwd?: unknown }).cwd;\n\treturn typeof cwd === \"string\" ? cwd : undefined;\n}\n\nfunction sessionCwdMatches(cwd: string | undefined, resolvedCwd: string): boolean {\n\treturn cwd !== undefined && cwd !== \"\" && resolve(cwd) === resolvedCwd;\n}\ninterface SessionInfoScanResult {\n\tmessageCount: number;\n\tfirstMessage: string;\n\tallMessages: string[];\n\tname: string | undefined;\n\tlastActivityTime: number | undefined;\n}\n\nfunction recordSessionInfoEntry(result: SessionInfoScanResult, entry: FileEntry): void {\n\tif (entry.type === \"session_info\") result.name = entry.name?.trim() || undefined;\n\tif (entry.type !== \"message\") return;\n\n\tresult.messageCount++;\n\tconst activityTime = getMessageActivityTime(entry);\n\tif (typeof activityTime === \"number\") {\n\t\tresult.lastActivityTime = Math.max(result.lastActivityTime ?? 0, activityTime);\n\t}\n\n\tconst message = entry.message;\n\tif (!isMessageWithContent(message)) return;\n\tif (message.role !== \"user\" && message.role !== \"assistant\") return;\n\tconst textContent = extractTextContent(message);\n\tif (!textContent) return;\n\n\tresult.allMessages.push(textContent);\n\tif (!result.firstMessage && message.role === \"user\") result.firstMessage = textContent;\n}\n\nasync function scanSessionInfo(filePath: string): Promise<SessionInfoScanResult> {\n\tconst result: SessionInfoScanResult = {\n\t\tmessageCount: 0,\n\t\tfirstMessage: \"\",\n\t\tallMessages: [],\n\t\tname: undefined,\n\t\tlastActivityTime: undefined,\n\t};\n\tconst lines = createInterface({\n\t\tinput: createReadStream(filePath, { encoding: \"utf8\" }),\n\t\tcrlfDelay: Infinity,\n\t});\n\tfor await (const line of lines) {\n\t\tconst entry = parseSessionEntryLine(line);\n\t\tif (entry && entry.type !== \"session\") recordSessionInfoEntry(result, entry);\n\t}\n\treturn result;\n}\n\nfunction resolveSessionModifiedDate(header: SessionHeader, lastActivityTime: number | undefined, fallback: Date): Date {\n\tif (typeof lastActivityTime === \"number\" && lastActivityTime > 0) return new Date(lastActivityTime);\n\tconst headerTime = typeof header.timestamp === \"string\" ? new Date(header.timestamp).getTime() : NaN;\n\treturn Number.isNaN(headerTime) ? fallback : new Date(headerTime);\n}\n\nasync function buildSessionInfo(filePath: string): Promise<SessionInfo | null> {\n\ttry {\n\t\tconst stats = await stat(filePath);\n\t\tconst header = readSessionHeaderForDiscovery(filePath);\n\t\tif (!header) return null;\n\t\tconst scan = await scanSessionInfo(filePath);\n\t\tconst cwd = typeof header.cwd === \"string\" ? header.cwd : \"\";\n\n\t\treturn {\n\t\t\treference: filePath,\n\t\t\tpath: filePath,\n\t\t\tid: header.id,\n\t\t\tcwd,\n\t\t\tname: scan.name,\n\t\t\tparentSessionPath: header.parentSession,\n\t\t\tcreated: new Date(header.timestamp),\n\t\t\tmodified: resolveSessionModifiedDate(header, scan.lastActivityTime, stats.mtime),\n\t\t\tmessageCount: scan.messageCount,\n\t\t\tfirstMessage: scan.firstMessage || \"(no messages)\",\n\t\t\tallMessagesText: scan.allMessages.join(\" \"),\n\t\t};\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nconst MAX_CONCURRENT_SESSION_INFO_LOADS = 10;\n\nexport function getSessionDirForReference(reference: string): string {\n\treturn resolve(reference, \"..\");\n}\n\nexport function getDefaultSessionDirPath(cwd: string, agentDir: string = getDefaultAgentDir()): string {\n\tconst resolvedCwd = resolve(cwd);\n\tconst safePath = `--${resolvedCwd.replace(/^[/\\\\]/, \"\").replace(/[/\\\\:]/g, \"-\")}--`;\n\treturn join(resolve(agentDir), \"sessions\", safePath);\n}\n\nexport function getDefaultSessionDir(cwd: string, agentDir: string = getDefaultAgentDir()): string {\n\tconst sessionDir = getDefaultSessionDirPath(cwd, agentDir);\n\tensureDir(sessionDir);\n\treturn sessionDir;\n}\n\nexport function getSessionsRoot(): string {\n\treturn getSessionsDir();\n}\n\nexport function prepareSessionReference(sessionDir: string, sessionId: string, timestamp: string): string {\n\tconst fileTimestamp = timestamp.replace(/[:.]/g, \"-\");\n\treturn join(sessionDir, `${fileTimestamp}_${sessionId}.jsonl`);\n}\n\nexport function exists(path: string): boolean {\n\treturn existsSync(path);\n}\n\nexport function ensureDir(path: string): void {\n\tif (!existsSync(path)) {\n\t\tmkdirSync(path, { recursive: true });\n\t}\n}\nexport interface JsonlValidationContext {\n\tphase?: JsonlErrorPhase;\n\tlocations?: ReadonlyArray<JsonlRecordLocation | undefined>;\n}\ninterface CurrentSessionValidationState {\n\tfilePath: string;\n\tphase: JsonlErrorPhase;\n\tlocations: ReadonlyArray<JsonlRecordLocation | undefined> | undefined;\n\tentriesById: Map<string, SessionEntry>;\n}\n\nfunction failCurrentSessionValidation(\n\tstate: CurrentSessionValidationState,\n\tindex: number,\n\tfailure: JsonlDecodeFailure,\n): never {\n\tconst location = state.locations?.[index];\n\tthrow new JsonlSessionError({\n\t\tcode: \"invalid_jsonl\",\n\t\treference: state.filePath,\n\t\tphase: state.phase,\n\t\tline: location?.line ?? index + 1,\n\t\tbyteOffset: location?.byteOffset,\n\t\tdecodeKind: failure.decodeKind,\n\t\tmessage: `Invalid JSONL session file ${state.filePath}: line ${location?.line ?? index + 1} ${failure.message}`,\n\t\tcause: failure,\n\t});\n}\n\nfunction validateCurrentSessionHeader(header: FileEntry | undefined, state: CurrentSessionValidationState): void {\n\tif (header?.type !== \"session\" || header.version !== 3) {\n\t\tfailCurrentSessionValidation(\n\t\t\tstate,\n\t\t\t0,\n\t\t\tnew JsonlDecodeFailure(\"state\", \"does not have a current version-3 header\"),\n\t\t);\n\t}\n\ttry {\n\t\tconst encodedHeader = new TextEncoder().encode(JSON.stringify(header));\n\t\tparseStrictHeader({ bytes: encodedHeader, line: 1, start: 0, terminated: true });\n\t} catch (error) {\n\t\tif (error instanceof JsonlDecodeFailure) failCurrentSessionValidation(state, 0, error);\n\t\tthrow error;\n\t}\n}\n\nfunction validateCurrentSessionEntrySchema(\n\tentry: FileEntry | undefined,\n\tindex: number,\n\tstate: CurrentSessionValidationState,\n): asserts entry is SessionEntry {\n\tif (!entry || entry.type === \"session\") {\n\t\tfailCurrentSessionValidation(\n\t\t\tstate,\n\t\t\tindex,\n\t\t\tnew JsonlDecodeFailure(\"state\", `has an unexpected session header at logical entry ${index + 1}`),\n\t\t);\n\t}\n\ttry {\n\t\tconst encodedEntry = new TextEncoder().encode(JSON.stringify(entry));\n\t\tparseStrictEntry({ bytes: encodedEntry, line: index + 1, start: 0, terminated: true }, 3);\n\t} catch (error) {\n\t\tif (error instanceof JsonlDecodeFailure) failCurrentSessionValidation(state, index, error);\n\t\tthrow error;\n\t}\n}\n\nfunction getCurrentSessionEntryTarget(entry: SessionEntry): string | undefined {\n\tswitch (entry.type) {\n\t\tcase \"label\":\n\t\t\treturn entry.targetId;\n\t\tcase \"compaction\":\n\t\t\treturn entry.firstKeptEntryId;\n\t\tcase \"branch_summary\":\n\t\t\treturn entry.fromId;\n\t\tdefault:\n\t\t\treturn undefined;\n\t}\n}\n\nfunction validateCurrentSessionEntryLinks(\n\tentry: SessionEntry,\n\tindex: number,\n\tstate: CurrentSessionValidationState,\n): void {\n\tif (state.entriesById.has(entry.id)) {\n\t\tfailCurrentSessionValidation(state, index, new JsonlDecodeFailure(\"state\", `duplicates entry id ${entry.id}`));\n\t}\n\tif (entry.parentId !== null && !state.entriesById.has(entry.parentId)) {\n\t\tfailCurrentSessionValidation(\n\t\t\tstate,\n\t\t\tindex,\n\t\t\tnew JsonlDecodeFailure(\"state\", `references missing parent ${entry.parentId}`),\n\t\t);\n\t}\n\tconst targetId = getCurrentSessionEntryTarget(entry);\n\tif (targetId !== undefined && !state.entriesById.has(targetId)) {\n\t\tfailCurrentSessionValidation(\n\t\t\tstate,\n\t\t\tindex,\n\t\t\tnew JsonlDecodeFailure(\"state\", `references missing target ${targetId}`),\n\t\t);\n\t}\n\tstate.entriesById.set(entry.id, entry);\n}\n\nexport function validateCurrentSessionEntries(\n\tentries: FileEntry[],\n\tfilePath = \"session\",\n\tcontext: JsonlValidationContext = {},\n): void {\n\tconst state: CurrentSessionValidationState = {\n\t\tfilePath,\n\t\tphase: context.phase ?? \"open\",\n\t\tlocations: context.locations,\n\t\tentriesById: new Map(),\n\t};\n\tvalidateCurrentSessionHeader(entries[0], state);\n\tfor (let index = 1; index < entries.length; index++) {\n\t\tconst entry = entries[index];\n\t\tvalidateCurrentSessionEntrySchema(entry, index, state);\n\t\tvalidateCurrentSessionEntryLinks(entry, index, state);\n\t}\n}\n\ninterface JsonlLoadContext {\n\tfilePath: string;\n\tpublicationOptions: JsonlAtomicPublicationOptions;\n\trepair: boolean;\n\tphase: JsonlErrorPhase;\n}\n\ninterface JsonlLoadState {\n\tentries: FileEntry[];\n\tlocations: JsonlRecordLocation[];\n\theader: SessionHeader | undefined;\n\theaderRecord: JsonlPhysicalRecord | undefined;\n\tfinalRecord: JsonlPhysicalRecord | undefined;\n}\n\ntype JsonlRecordScanAction = \"continue\" | \"stop\";\n\nfunction repairTornJsonlRecord(context: JsonlLoadContext, record: JsonlPhysicalRecord): void {\n\tpublishJsonlContentAtomically(context.filePath, readFileSync(context.filePath).subarray(0, record.start), {\n\t\t...context.publicationOptions,\n\t\tphase: \"repair\",\n\t});\n}\n\nfunction isRepairableDecodeFailure(\n\tcontext: JsonlLoadContext,\n\tstate: JsonlLoadState,\n\trecord: JsonlPhysicalRecord,\n\tfailure: Error,\n): boolean {\n\treturn context.repair && state.header !== undefined && !record.terminated && failure instanceof JsonlDecodeFailure;\n}\n\nfunction isRepairableSyntaxFailure(\n\tcontext: JsonlLoadContext,\n\tstate: JsonlLoadState,\n\trecord: JsonlPhysicalRecord,\n\tfailure: Error,\n): boolean {\n\treturn (\n\t\tcontext.repair &&\n\t\tstate.header !== undefined &&\n\t\t!record.terminated &&\n\t\tfailure instanceof JsonlDecodeFailure &&\n\t\tfailure.kind === \"syntax\"\n\t);\n}\n\nfunction scanJsonlRecord(\n\tcontext: JsonlLoadContext,\n\tstate: JsonlLoadState,\n\trecord: JsonlPhysicalRecord,\n): JsonlRecordScanAction {\n\tstate.finalRecord = record;\n\tlet line: string;\n\ttry {\n\t\tline = decodePhysicalRecord(record);\n\t} catch (error) {\n\t\tconst failure = error instanceof Error ? error : new Error(String(error));\n\t\tif (isRepairableDecodeFailure(context, state, record, failure)) {\n\t\t\trepairTornJsonlRecord(context, record);\n\t\t\treturn \"stop\";\n\t\t}\n\t\tthrow invalidJsonl(context.filePath, record, failure, context.phase);\n\t}\n\tif (!line.trim()) return \"continue\";\n\n\ttry {\n\t\tif (!state.header) {\n\t\t\tstate.header = parseStrictHeader(record);\n\t\t\tstate.headerRecord = record;\n\t\t\tstate.entries.push(state.header);\n\t\t} else {\n\t\t\tstate.entries.push(parseStrictEntry(record, state.header.version ?? 1));\n\t\t}\n\t\tstate.locations.push({ line: record.line, byteOffset: record.start });\n\t\treturn \"continue\";\n\t} catch (error) {\n\t\tconst failure = error instanceof Error ? error : new Error(String(error));\n\t\tif (isRepairableSyntaxFailure(context, state, record, failure)) {\n\t\t\trepairTornJsonlRecord(context, record);\n\t\t\treturn \"stop\";\n\t\t}\n\t\tthrow invalidJsonl(context.filePath, record, failure, context.phase);\n\t}\n}\n\nfunction requireLoadedSessionHeader(context: JsonlLoadContext, state: JsonlLoadState): SessionHeader {\n\tif (state.header && state.headerRecord) return state.header;\n\tconst failure = new JsonlDecodeFailure(\"schema\", \"does not contain a session header\");\n\tthrow new JsonlSessionError({\n\t\tcode: \"invalid_jsonl\",\n\t\treference: context.filePath,\n\t\tphase: context.phase,\n\t\tline: state.finalRecord?.line ?? 1,\n\t\tbyteOffset: state.finalRecord?.start ?? 0,\n\t\tdecodeKind: failure.decodeKind,\n\t\tmessage: `Session file is not a valid grip session: ${context.filePath}`,\n\t\tcause: failure,\n\t});\n}\n\nfunction repairMissingFinalNewline(context: JsonlLoadContext, state: JsonlLoadState): void {\n\tif (!context.repair || state.finalRecord?.terminated !== false || state.entries.at(-1) === undefined) return;\n\tconst original = readFileSync(context.filePath);\n\tif (original.length === 0 || original.at(-1) === 0x0a) return;\n\tconst repaired = Buffer.allocUnsafe(original.length + 1);\n\toriginal.copy(repaired);\n\trepaired[original.length] = 0x0a;\n\tpublishJsonlContentAtomically(context.filePath, repaired, {\n\t\t...context.publicationOptions,\n\t\tphase: \"repair\",\n\t});\n}\n\nfunction validateLoadedSessionEntries(context: JsonlLoadContext, state: JsonlLoadState, header: SessionHeader): void {\n\tif ((header.version ?? 1) < 2) return;\n\tconst validationContext: JsonlValidationContext = { phase: context.phase, locations: state.locations };\n\tif (header.version === 2) {\n\t\t// Version 2 has current tree fields; validate via a non-mutating header projection.\n\t\tvalidateCurrentSessionEntries(\n\t\t\t[{ ...header, version: 3 }, ...state.entries.slice(1)],\n\t\t\tcontext.filePath,\n\t\t\tvalidationContext,\n\t\t);\n\t\treturn;\n\t}\n\tvalidateCurrentSessionEntries(state.entries, context.filePath, validationContext);\n}\n\nfunction loadJsonlSession(\n\tfilePath: string,\n\tpublicationOptions: JsonlAtomicPublicationOptions = {},\n\trepair = true,\n\tphase: JsonlErrorPhase = \"open\",\n): FileEntry[] {\n\tif (!existsSync(filePath)) return [];\n\tif (lstatSync(filePath).size === 0) return [];\n\tconst context: JsonlLoadContext = { filePath, publicationOptions, repair, phase };\n\tconst state: JsonlLoadState = {\n\t\tentries: [],\n\t\tlocations: [],\n\t\theader: undefined,\n\t\theaderRecord: undefined,\n\t\tfinalRecord: undefined,\n\t};\n\n\tfor (const record of readPhysicalRecords(filePath)) {\n\t\tif (scanJsonlRecord(context, state, record) === \"stop\") break;\n\t}\n\tconst header = requireLoadedSessionHeader(context, state);\n\trepairMissingFinalNewline(context, state);\n\tvalidateLoadedSessionEntries(context, state, header);\n\tjsonlEntryLocations.set(state.entries, state.locations);\n\treturn state.entries;\n}\n\nexport function load(\n\tfilePath: string,\n\tpublicationOptions: JsonlAtomicPublicationOptions = {},\n\trepair = true,\n\tphase: JsonlErrorPhase = \"open\",\n): FileEntry[] {\n\ttry {\n\t\treturn loadJsonlSession(filePath, publicationOptions, repair, phase);\n\t} catch (error) {\n\t\tif (error instanceof JsonlSessionError) throw error;\n\t\tconst cause = error instanceof Error ? error : new Error(String(error));\n\t\tthrow jsonlStorageError(filePath, phase, `Failed to ${phase} JSONL session ${filePath}: ${cause.message}`, cause);\n\t}\n}\n\nfunction getNextAppendPosition(bytes: Uint8Array): JsonlRecordLocation {\n\tlet line = 1;\n\tfor (const byte of bytes) {\n\t\tif (byte === 0x0a) line++;\n\t}\n\treturn { line, byteOffset: bytes.length };\n}\n\nfunction serializeJsonlEntries(entries: FileEntry[]): string {\n\treturn `${entries.map((entry) => JSON.stringify(entry)).join(\"\\n\")}\\n`;\n}\n\nexport function append(filePath: string, entry: FileEntry): void {\n\tappendFileSync(filePath, `${JSON.stringify(entry)}\\n`);\n}\n\nexport interface JsonlAtomicPublicationOptions {\n\trename?: (source: string, destination: string) => void;\n\tremove?: (path: string) => void;\n\tplatform?: NodeJS.Platform;\n\tphase?: JsonlErrorPhase;\n}\n\nfunction isWindowsRenameSharingError(error: unknown): boolean {\n\tif (!(error instanceof Error) || !(\"code\" in error)) return false;\n\tconst code = (error as NodeJS.ErrnoException).code;\n\treturn code === \"EPERM\" || code === \"EACCES\" || code === \"EBUSY\";\n}\n\nfunction renameWithRetry(\n\tsource: string,\n\tdestination: string,\n\trename: (source: string, destination: string) => void,\n\tplatform: NodeJS.Platform,\n): void {\n\tfor (let attempt = 0; attempt < 5; attempt++) {\n\t\ttry {\n\t\t\trename(source, destination);\n\t\t\treturn;\n\t\t} catch (error) {\n\t\t\tif (platform !== \"win32\" || !isWindowsRenameSharingError(error) || attempt === 4) throw error;\n\t\t\tAtomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, 10 * 2 ** attempt);\n\t\t}\n\t}\n}\n\nfunction assertJsonlDestinationReplaceable(filePath: string): void {\n\ttry {\n\t\tconst destinationInfo = lstatSync(filePath);\n\t\tif (!destinationInfo.isFile()) throw new Error(`Refusing to replace non-file session path: ${filePath}`);\n\t} catch (error) {\n\t\tif (!(error instanceof Error) || !(\"code\" in error) || (error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n\t\t\tthrow error;\n\t\t}\n\t}\n}\n\nfunction allocateJsonlStagingPath(filePath: string): string {\n\tconst parentDir = dirname(filePath);\n\tensureDir(parentDir);\n\tfor (let attempt = 0; attempt < 100; attempt++) {\n\t\tconst candidate = join(parentDir, `.${basename(filePath)}.tmp-${randomUUID()}`);\n\t\tif (!existsSync(candidate)) return candidate;\n\t}\n\tthrow new Error(`Failed to allocate staging path for session: ${filePath}`);\n}\n\nfunction stageJsonlContent(\n\ttempPath: string,\n\tfilePath: string,\n\tcontent: string | Uint8Array,\n\toptions: JsonlAtomicPublicationOptions,\n): void {\n\ttry {\n\t\twriteFileSync(tempPath, content);\n\t} catch (error) {\n\t\tconst cause = error instanceof Error ? error : new Error(String(error));\n\t\tthrow jsonlStorageError(\n\t\t\tfilePath,\n\t\t\toptions.phase ?? \"replace\",\n\t\t\t`Failed to stage JSONL session ${filePath}: ${cause.message}`,\n\t\t\tcause,\n\t\t\t\"not_written\",\n\t\t);\n\t}\n}\n\nfunction publishJsonlStagingPath(tempPath: string, filePath: string, options: JsonlAtomicPublicationOptions): void {\n\ttry {\n\t\trenameWithRetry(tempPath, filePath, options.rename ?? renameSync, options.platform ?? process.platform);\n\t} catch (error) {\n\t\tconst cause = error instanceof Error ? error : new Error(String(error));\n\t\tthrow jsonlStorageError(\n\t\t\tfilePath,\n\t\t\toptions.phase ?? \"replace\",\n\t\t\t`Failed to publish JSONL session ${filePath}: ${cause.message}`,\n\t\t\tcause,\n\t\t\t\"unknown\",\n\t\t);\n\t}\n}\n\nfunction removeUnpublishedJsonlStagingPath(tempPath: string, options: JsonlAtomicPublicationOptions): void {\n\ttry {\n\t\t(options.remove ?? ((path) => rmSync(path, { force: true })))(tempPath);\n\t} catch {\n\t\t// Preserve the staging or rename failure; stale temps are undiscoverable.\n\t}\n}\n\nfunction publishJsonlContentAtomicallyUnsafe(\n\tfilePath: string,\n\tcontent: string | Uint8Array,\n\toptions: JsonlAtomicPublicationOptions = {},\n): void {\n\tassertJsonlDestinationReplaceable(filePath);\n\tconst tempPath = allocateJsonlStagingPath(filePath);\n\tlet published = false;\n\ttry {\n\t\tstageJsonlContent(tempPath, filePath, content, options);\n\t\tpublishJsonlStagingPath(tempPath, filePath, options);\n\t\tpublished = true;\n\t} finally {\n\t\tif (!published) removeUnpublishedJsonlStagingPath(tempPath, options);\n\t}\n}\n\nfunction publishJsonlContentAtomically(\n\tfilePath: string,\n\tcontent: string | Uint8Array,\n\toptions: JsonlAtomicPublicationOptions = {},\n): void {\n\ttry {\n\t\tpublishJsonlContentAtomicallyUnsafe(filePath, content, options);\n\t} catch (error) {\n\t\tif (error instanceof JsonlSessionError) throw error;\n\t\tconst cause = error instanceof Error ? error : new Error(String(error));\n\t\tthrow jsonlStorageError(\n\t\t\tfilePath,\n\t\t\toptions.phase ?? \"replace\",\n\t\t\t`Failed to publish JSONL session ${filePath}: ${cause.message}`,\n\t\t\tcause,\n\t\t\t\"not_written\",\n\t\t);\n\t}\n}\n\nexport function publishJsonlAtomically(\n\tfilePath: string,\n\tentries: FileEntry[],\n\toptions: JsonlAtomicPublicationOptions = {},\n): void {\n\tpublishJsonlContentAtomically(filePath, serializeJsonlEntries(entries), options);\n}\n\nexport function rewrite(filePath: string, entries: FileEntry[]): void {\n\tpublishJsonlAtomically(filePath, entries);\n}\n\nexport function forkSession(sessionDir: string, header: SessionHeader, sourceEntries: FileEntry[]): string {\n\tconst reference = prepareSessionReference(sessionDir, header.id, header.timestamp);\n\tpublishJsonlAtomically(reference, [header, ...sourceEntries.filter((entry) => entry.type !== \"session\")], {\n\t\tphase: \"fork\",\n\t});\n\treturn reference;\n}\n\nexport function findMostRecent(sessionDir: string, cwd?: string): string | null {\n\tconst resolvedCwd = cwd ? resolve(cwd) : undefined;\n\tlet names: string[];\n\ttry {\n\t\tnames = readdirSync(sessionDir).filter((file) => file.endsWith(\".jsonl\"));\n\t} catch (error) {\n\t\tif (error instanceof Error && \"code\" in error && (error as NodeJS.ErrnoException).code === \"ENOENT\") return null;\n\t\tthrow error;\n\t}\n\tconst files: Array<{ path: string; mtime: Date }> = [];\n\tfor (const name of names) {\n\t\tconst path = join(sessionDir, name);\n\t\ttry {\n\t\t\tconst header = readSessionHeaderForDiscovery(path);\n\t\t\tif (!header) continue;\n\t\t\tif (resolvedCwd && !sessionCwdMatches(getSessionHeaderCwd(header), resolvedCwd)) continue;\n\t\t\tfiles.push({ path, mtime: statSync(path).mtime });\n\t\t} catch {\n\t\t\t// Quarantine a candidate that disappeared or became unreadable without hiding valid siblings.\n\t\t}\n\t}\n\tfiles.sort((a, b) => b.mtime.getTime() - a.mtime.getTime());\n\treturn files[0]?.path ?? null;\n}\n\nexport async function list(dir: string, onProgress?: SessionListProgress): Promise<SessionInfo[]> {\n\tconst sessions: SessionInfo[] = [];\n\tif (!existsSync(dir)) {\n\t\treturn sessions;\n\t}\n\n\tconst dirEntries = await readdir(dir);\n\tconst files = dirEntries.filter((file) => file.endsWith(\".jsonl\")).map((file) => join(dir, file));\n\tlet loaded = 0;\n\tconst results = await buildSessionInfosWithConcurrency(files, () => {\n\t\tloaded++;\n\t\tonProgress?.(loaded, files.length);\n\t});\n\tfor (const info of results) {\n\t\tif (info) sessions.push(info);\n\t}\n\n\treturn sessions;\n}\n\nexport async function listAll(sessionsDir: string, onProgress?: SessionListProgress): Promise<SessionInfo[]> {\n\tif (!existsSync(sessionsDir)) return [];\n\tconst entries = await readdir(sessionsDir, { withFileTypes: true });\n\tconst dirs = entries.filter((entry) => entry.isDirectory()).map((entry) => join(sessionsDir, entry.name));\n\tlet totalFiles = 0;\n\tconst dirFiles: string[][] = [];\n\tfor (const dir of dirs) {\n\t\tconst files = (await readdir(dir)).filter((file) => file.endsWith(\".jsonl\"));\n\t\tdirFiles.push(files.map((file) => join(dir, file)));\n\t\ttotalFiles += files.length;\n\t}\n\tlet loaded = 0;\n\tconst sessions: SessionInfo[] = [];\n\tconst results = await buildSessionInfosWithConcurrency(dirFiles.flat(), () => {\n\t\tloaded++;\n\t\tonProgress?.(loaded, totalFiles);\n\t});\n\tfor (const info of results) {\n\t\tif (info) sessions.push(info);\n\t}\n\treturn sessions;\n}\n\nasync function buildSessionInfosWithConcurrency(\n\tfiles: string[],\n\tonLoaded: () => void,\n): Promise<(SessionInfo | null)[]> {\n\tconst results: (SessionInfo | null)[] = new Array(files.length).fill(null);\n\tconst inFlight = new Set<Promise<void>>();\n\tlet nextIndex = 0;\n\n\tconst startNext = (): void => {\n\t\tconst index = nextIndex++;\n\t\tconst file = files[index];\n\t\tif (!file) return;\n\n\t\tlet task: Promise<void>;\n\t\ttask = buildSessionInfo(file)\n\t\t\t.then((info) => {\n\t\t\t\tresults[index] = info;\n\t\t\t})\n\t\t\t.catch(() => {\n\t\t\t\tresults[index] = null;\n\t\t\t})\n\t\t\t.finally(() => {\n\t\t\t\tinFlight.delete(task);\n\t\t\t\tonLoaded();\n\t\t\t});\n\t\tinFlight.add(task);\n\t};\n\n\twhile (nextIndex < files.length || inFlight.size > 0) {\n\t\twhile (nextIndex < files.length && inFlight.size < MAX_CONCURRENT_SESSION_INFO_LOADS) {\n\t\t\tstartNext();\n\t\t}\n\t\tif (inFlight.size > 0) {\n\t\t\tawait Promise.race(inFlight);\n\t\t}\n\t}\n\n\treturn results;\n}\n\ninterface PreloadedSessionEntries {\n\treference: string;\n\tentries: FileEntry[];\n}\n\ntype JsonlNewSessionPublicationPhase = \"create\" | \"fork\";\nexport type JsonlFirstPublicationPhase = JsonlNewSessionPublicationPhase | \"import\";\n\ninterface JsonlFirstPublicationOptions {\n\tallowExistingEmptyFile: boolean;\n\tphase: JsonlFirstPublicationPhase;\n}\n\ninterface JsonlSessionReferenceOptions {\n\tallowExistingEmptyFile?: boolean;\n}\n\ninterface JsonlSnapshotOptions {\n\tphase?: JsonlErrorPhase;\n}\n\nexport interface JsonlStoreWriteOperations {\n\tappend(filePath: string, serializedEntry: string): void;\n\tpublish(filePath: string, entries: FileEntry[], options?: JsonlAtomicPublicationOptions): void;\n}\n\nexport interface JsonlFirstPublicationCoordinator {\n\tpublish(filePath: string, entries: FileEntry[], operation: () => void, options: JsonlFirstPublicationOptions): void;\n}\n\nexport class SessionAlreadyExistsError extends Error {\n\treadonly code = \"already_exists\";\n\treadonly reference: string;\n\treadonly path: string;\n\treadonly phase: JsonlFirstPublicationPhase;\n\treadonly outcome = \"not_written\";\n\n\tconstructor(reference: string, sessionId: string, phase: JsonlFirstPublicationPhase = \"create\") {\n\t\tsuper(`Session already exists: ${sessionId}`);\n\t\tthis.name = \"SessionAlreadyExistsError\";\n\t\tthis.reference = reference;\n\t\tthis.path = reference;\n\t\tthis.phase = phase;\n\t}\n}\n\nfunction isDefinitelyNotWritten(error: unknown): boolean {\n\tif (!(error instanceof Error) || !(\"code\" in error)) return false;\n\treturn new Set([\"ENOENT\", \"EACCES\", \"EPERM\", \"EISDIR\", \"ENOTDIR\", \"EINVAL\", \"EROFS\"]).has(\n\t\tString((error as NodeJS.ErrnoException).code),\n\t);\n}\n\nfunction getFirstPublicationPhase(entries: FileEntry[]): JsonlNewSessionPublicationPhase {\n\tconst header = entries[0];\n\treturn header?.type === \"session\" && header.parentSession ? \"fork\" : \"create\";\n}\n\nconst defaultWriteOperations: JsonlStoreWriteOperations = {\n\tappend: appendFileSync,\n\tpublish: publishJsonlAtomically,\n};\n\nexport class JsonlSessionStore extends InMemorySessionStore {\n\tprivate reference: string | undefined;\n\tprivate flushed = false;\n\tprivate preloaded: PreloadedSessionEntries | undefined;\n\tprivate allowExistingEmptyFile = false;\n\tprivate readonly writeOperations: JsonlStoreWriteOperations;\n\tprivate readonly firstPublicationCoordinator: JsonlFirstPublicationCoordinator | undefined;\n\tprivate writeFence: Error | undefined;\n\tprivate nextAppendLine = 1;\n\tprivate nextAppendOffset = 0;\n\n\tconstructor(\n\t\tpreloaded?: PreloadedSessionEntries,\n\t\twriteOperations: JsonlStoreWriteOperations = defaultWriteOperations,\n\t\tfirstPublicationCoordinator?: JsonlFirstPublicationCoordinator,\n\t) {\n\t\tsuper();\n\t\tthis.preloaded = preloaded ? { ...preloaded, reference: resolve(preloaded.reference) } : undefined;\n\t\tthis.writeOperations = writeOperations;\n\t\tthis.firstPublicationCoordinator = firstPublicationCoordinator;\n\t}\n\tisPersisted(): boolean {\n\t\treturn true;\n\t}\n\n\tgetSessionReference(): string | undefined {\n\t\treturn this.reference;\n\t}\n\n\tsetSessionReference(reference: string, options: JsonlSessionReferenceOptions = {}): void {\n\t\tconst resolvedReference = resolve(reference);\n\t\tif (this.reference !== resolvedReference) {\n\t\t\tthis.writeFence = undefined;\n\t\t\tthis.allowExistingEmptyFile = false;\n\t\t}\n\t\tthis.reference = resolvedReference;\n\t\tif (options.allowExistingEmptyFile) this.allowExistingEmptyFile = true;\n\t\tthis.flushed = false;\n\t}\n\n\texists(path: string): boolean {\n\t\treturn exists(path);\n\t}\n\n\tensureDir(path: string): void {\n\t\tensureDir(path);\n\t}\n\n\tload(filePath: string): FileEntry[] {\n\t\tif (!exists(filePath)) return [];\n\t\tconst info = lstatSync(filePath);\n\t\tthis.allowExistingEmptyFile = info.isFile() && info.size === 0;\n\t\tthis.flushed = true;\n\t\tconst resolvedFilePath = resolve(filePath);\n\t\tif (!this.writeFence && this.preloaded?.reference === resolvedFilePath) {\n\t\t\tconst entries = this.preloaded.entries;\n\t\t\tthis.preloaded = undefined;\n\t\t\tthis.updateNextAppendPosition(resolvedFilePath);\n\t\t\treturn entries;\n\t\t}\n\t\tconst entries = load(resolvedFilePath);\n\t\tthis.updateNextAppendPosition(resolvedFilePath);\n\t\tthis.writeFence = undefined;\n\t\tthis.preloaded = undefined;\n\t\treturn entries;\n\t}\n\n\tprivate updateNextAppendPosition(filePath: string): void {\n\t\tconst position = getNextAppendPosition(readFileSync(filePath));\n\t\tthis.nextAppendLine = position.line;\n\t\tthis.nextAppendOffset = position.byteOffset;\n\t}\n\n\tprivate persistAppendedEntry(\n\t\treference: string,\n\t\tprospectiveEntries: FileEntry[],\n\t\tserializedEntry: string | undefined,\n\t): void {\n\t\ttry {\n\t\t\tif (this.flushed) this.writeOperations.append(reference, serializedEntry!);\n\t\t\telse this.publishFirstSnapshot(prospectiveEntries);\n\t\t} catch (error) {\n\t\t\tif (error instanceof SessionAlreadyExistsError) throw error;\n\t\t\tconst cause = error instanceof Error ? error : new Error(String(error));\n\t\t\tif (this.flushed && isDefinitelyNotWritten(error)) {\n\t\t\t\tthrow jsonlStorageError(reference, \"append\", cause.message, cause, \"not_written\");\n\t\t\t}\n\t\t\tthis.writeFence = jsonlStorageError(\n\t\t\t\treference,\n\t\t\t\tthis.flushed ? \"append\" : getFirstPublicationPhase(prospectiveEntries),\n\t\t\t\tcause.message,\n\t\t\t\tcause,\n\t\t\t\tcause instanceof JsonlSessionError ? undefined : \"unknown\",\n\t\t\t);\n\t\t\tthrow this.writeFence;\n\t\t}\n\t}\n\n\tprivate recordAppendedEntryPosition(\n\t\twasFlushed: boolean,\n\t\tserializedEntry: string | undefined,\n\t\tprospectiveEntries: FileEntry[],\n\t): void {\n\t\tif (wasFlushed) {\n\t\t\tthis.nextAppendLine++;\n\t\t\tthis.nextAppendOffset += Buffer.byteLength(serializedEntry!);\n\t\t\treturn;\n\t\t}\n\t\tconst position = getNextAppendPosition(new TextEncoder().encode(serializeJsonlEntries(prospectiveEntries)));\n\t\tthis.nextAppendLine = position.line;\n\t\tthis.nextAppendOffset = position.byteOffset;\n\t}\n\n\tappendEntry(entry: SessionEntry): void {\n\t\tif (!this.reference) {\n\t\t\tsuper.appendEntry(entry);\n\t\t\treturn;\n\t\t}\n\t\tthis.assertWritable();\n\t\tconst prospectiveEntries = [...this.getFileEntries(), entry];\n\t\tconst wasFlushed = this.flushed;\n\t\tconst appendPosition = wasFlushed\n\t\t\t? { line: this.nextAppendLine, byteOffset: this.nextAppendOffset }\n\t\t\t: getNextAppendPosition(new TextEncoder().encode(serializeJsonlEntries(this.getFileEntries())));\n\t\tconst locations: Array<JsonlRecordLocation | undefined> = [];\n\t\tlocations[prospectiveEntries.length - 1] = appendPosition;\n\t\tvalidateCurrentSessionEntries(prospectiveEntries, this.reference, { phase: \"append\", locations });\n\t\tconst hasAssistantMessage = prospectiveEntries.some(\n\t\t\t(fileEntry) => fileEntry.type === \"message\" && fileEntry.message.role === \"assistant\",\n\t\t);\n\t\tif (!hasAssistantMessage) {\n\t\t\tsuper.appendEntry(entry);\n\t\t\tthis.flushed = false;\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this.flushed) serializeJsonlEntries(prospectiveEntries);\n\t\tconst serializedEntry = this.flushed ? `${JSON.stringify(entry)}\\n` : undefined;\n\t\tthis.persistAppendedEntry(this.reference, prospectiveEntries, serializedEntry);\n\t\tsuper.appendEntry(entry);\n\t\tthis.recordAppendedEntryPosition(wasFlushed, serializedEntry, prospectiveEntries);\n\t\tthis.flushed = true;\n\t\tthis.allowExistingEmptyFile = false;\n\t}\n\n\tprivate assertWritable(): void {\n\t\tif (this.writeFence) {\n\t\t\tthrow new JsonlSessionError({\n\t\t\t\tcode: \"fenced\",\n\t\t\t\treference: this.reference ?? \"\",\n\t\t\t\tphase: \"append\",\n\t\t\t\tmessage: `Session writes are fenced after a persistence failure: ${this.reference}`,\n\t\t\t\toutcome: \"unknown\",\n\t\t\t\tcause: this.writeFence,\n\t\t\t});\n\t\t}\n\t}\n\tprivate publishFirstSnapshot(entries: FileEntry[]): void {\n\t\tif (!this.reference) return;\n\t\tconst phase = getFirstPublicationPhase(entries);\n\t\tconst operation = () => this.writeOperations.publish(this.reference!, entries, { phase });\n\t\tif (this.firstPublicationCoordinator) {\n\t\t\tthis.firstPublicationCoordinator.publish(this.reference, entries, operation, {\n\t\t\t\tallowExistingEmptyFile: this.allowExistingEmptyFile,\n\t\t\t\tphase,\n\t\t\t});\n\t\t} else {\n\t\t\toperation();\n\t\t}\n\t}\n\n\tsaveSnapshot(options: JsonlSnapshotOptions = {}): void {\n\t\tif (!this.reference) return;\n\t\tthis.assertWritable();\n\t\tserializeJsonlEntries(this.getFileEntries());\n\t\ttry {\n\t\t\tif (this.flushed) {\n\t\t\t\tthis.writeOperations.publish(this.reference, this.getFileEntries(), {\n\t\t\t\t\tphase: options.phase ?? \"replace\",\n\t\t\t\t});\n\t\t\t} else this.publishFirstSnapshot(this.getFileEntries());\n\t\t} catch (error) {\n\t\t\tif (error instanceof SessionAlreadyExistsError) throw error;\n\t\t\tconst cause = error instanceof Error ? error : new Error(String(error));\n\t\t\tthis.writeFence = jsonlStorageError(\n\t\t\t\tthis.reference,\n\t\t\t\toptions.phase ?? (this.flushed ? \"replace\" : getFirstPublicationPhase(this.getFileEntries())),\n\t\t\t\tcause.message,\n\t\t\t\tcause,\n\t\t\t\tcause instanceof JsonlSessionError ? undefined : \"unknown\",\n\t\t\t);\n\t\t\tthrow this.writeFence;\n\t\t}\n\t\tconst position = getNextAppendPosition(new TextEncoder().encode(serializeJsonlEntries(this.getFileEntries())));\n\t\tthis.nextAppendLine = position.line;\n\t\tthis.nextAppendOffset = position.byteOffset;\n\t\tthis.flushed = true;\n\t\tthis.allowExistingEmptyFile = false;\n\t}\n\n\tcommitSnapshot(): void {\n\t\tif (!this.hasAssistantMessage()) {\n\t\t\tthis.flushed = false;\n\t\t\treturn;\n\t\t}\n\t\tthis.saveSnapshot();\n\t}\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"remote-session-store.d.ts","sourceRoot":"","sources":["../../../../src/core/session/stores/remote-session-store.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAE9F,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAEpE,MAAM,WAAW,yBAAyB;IACzC,MAAM,EAAE,mBAAmB,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,qBAAqB,CAAC;CACjC;AAMD;;;;;;;GAOG;AACH,qBAAa,kBAAmB,SAAQ,oBAAoB;IAC3D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsB;IAC7C,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,IAAI,CAAqB;IACjC,OAAO,CAAC,WAAW,CAAoC;IACvD,OAAO,CAAC,YAAY,CAAmB;IACvC,OAAO,CAAC,aAAa,CAAU;IAC/B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAoC;IAEpD,YAAY,OAAO,EAAE,yBAAyB,EAM7C;IAEQ,WAAW,IAAI,OAAO,CAE9B;IAEQ,mBAAmB,IAAI,MAAM,GAAG,SAAS,CAEjD;IAEQ,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAEpD;IAEQ,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAI1C;IAEQ,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,CAO5C;IAEQ,WAAW,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAG9C;IAEQ,YAAY,IAAI,IAAI,CAE5B;IAEQ,cAAc,IAAI,IAAI,CAE9B;IAEK,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAetC;IAED,gBAAgB,IAAI,OAAO,CAE1B;IAED,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,oBAAoB;IAS5B,OAAO,CAAC,oBAAoB;IAc5B,OAAO,CAAC,6BAA6B;YAIvB,iBAAiB;YA0BjB,eAAe;CAa7B","sourcesContent":["import { JsonlSessionError } from \"../jsonl-errors.ts\";\nimport type { RemoteSessionClient, RemoteSessionSnapshot } from \"../remote-session-client.ts\";\nimport { formatRemoteSessionReference, parseRemoteSessionId } from \"../remote-session-client.ts\";\nimport type { FileEntry, SessionEntry } from \"../types.ts\";\nimport { InMemorySessionStore } from \"./in-memory-session-store.ts\";\n\nexport interface RemoteSessionStoreOptions {\n\tclient: RemoteSessionClient;\n\treference?: string;\n\tsnapshot?: RemoteSessionSnapshot;\n}\n\nfunction getSnapshotReference(snapshot: RemoteSessionSnapshot): string {\n\treturn snapshot.reference || formatRemoteSessionReference(snapshot.id);\n}\n\n/**\n * Remote session store.\n *\n * The active session state is kept in memory for synchronous Session access.\n * Mutations are serialized to the remote service in the background, and\n * snapshots fetched by RemoteSessionManager are used to hydrate the store before\n * Session starts reading from it.\n */\nexport class RemoteSessionStore extends InMemorySessionStore {\n\tprivate readonly client: RemoteSessionClient;\n\tprivate reference: string | undefined;\n\tprivate etag: string | undefined;\n\tprivate pendingSync: Promise<void> = Promise.resolve();\n\tprivate dirtyEntries: FileEntry[] = [];\n\tprivate lastSyncError: unknown;\n\tprivate syncFenced = false;\n\tprivate snapshot: RemoteSessionSnapshot | undefined;\n\n\tconstructor(options: RemoteSessionStoreOptions) {\n\t\tsuper();\n\t\tthis.client = options.client;\n\t\tthis.snapshot = options.snapshot;\n\t\tthis.reference = options.reference ?? (options.snapshot ? getSnapshotReference(options.snapshot) : undefined);\n\t\tthis.etag = options.snapshot?.etag;\n\t}\n\n\toverride isPersisted(): boolean {\n\t\treturn true;\n\t}\n\n\toverride getSessionReference(): string | undefined {\n\t\treturn this.reference;\n\t}\n\n\toverride setSessionReference(reference: string): void {\n\t\tthis.reference = formatRemoteSessionReference(parseRemoteSessionId(reference));\n\t}\n\n\toverride exists(reference: string): boolean {\n\t\tif (!this.snapshot) return false;\n\t\tconst snapshotReference = getSnapshotReference(this.snapshot);\n\t\treturn parseRemoteSessionId(reference) === parseRemoteSessionId(snapshotReference);\n\t}\n\n\toverride load(reference: string): FileEntry[] {\n\t\tif (!this.snapshot || !this.exists(reference)) return [];\n\t\tthis.reference = getSnapshotReference(this.snapshot);\n\t\tthis.etag = this.snapshot.etag;\n\t\tconst entries = [...this.snapshot.entries];\n\t\tthis.snapshot = undefined;\n\t\treturn entries;\n\t}\n\n\toverride appendEntry(entry: SessionEntry): void {\n\t\tsuper.appendEntry(entry);\n\t\tthis.queueAppend([entry]);\n\t}\n\n\toverride saveSnapshot(): void {\n\t\tthis.queueReplaceSnapshot();\n\t}\n\n\toverride commitSnapshot(): void {\n\t\tthis.queueReplaceSnapshot();\n\t}\n\n\tasync flushPendingSync(): Promise<void> {\n\t\twhile (true) {\n\t\t\tconst pending = this.pendingSync;\n\t\t\tawait pending;\n\t\t\tif (this.lastSyncError) {\n\t\t\t\tthrow this.lastSyncError;\n\t\t\t}\n\t\t\tif (pending !== this.pendingSync) continue;\n\t\t\tif (this.dirtyEntries.length > 0) {\n\t\t\t\tconst error = new Error(`Remote session synchronization left ${this.dirtyEntries.length} unsaved entries`);\n\t\t\t\tthis.lastSyncError = error;\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t}\n\n\tgetLastSyncError(): unknown {\n\t\treturn this.lastSyncError;\n\t}\n\n\tprivate queueAppend(entries: FileEntry[]): void {\n\t\tthis.dirtyEntries.push(...entries);\n\t\tif (this.syncFenced) return;\n\t\tthis.pendingSync = this.pendingSync\n\t\t\t.then(() => this.flushDirtyEntries())\n\t\t\t.catch((error: unknown) => {\n\t\t\t\tthis.fenceSynchronization(error);\n\t\t\t});\n\t}\n\n\tprivate queueReplaceSnapshot(): void {\n\t\tif (this.syncFenced) return;\n\t\tthis.pendingSync = this.pendingSync\n\t\t\t.then(() => this.replaceSnapshot())\n\t\t\t.catch((error: unknown) => {\n\t\t\t\tthis.fenceSynchronization(error);\n\t\t\t});\n\t}\n\n\tprivate fenceSynchronization(error: unknown): void {\n\t\tif (this.syncFenced) return;\n\t\tconst cause = error instanceof Error ? error : new Error(String(error));\n\t\tthis.syncFenced = true;\n\t\tthis.lastSyncError = new JsonlSessionError({\n\t\t\tcode: \"fenced\",\n\t\t\treference: this.reference ?? \"remote:unknown\",\n\t\t\tphase: \"sync\",\n\t\t\tmessage: `Remote session synchronization is fenced: ${cause.message}`,\n\t\t\toutcome: \"unknown\",\n\t\t\tcause,\n\t\t});\n\t}\n\n\tprivate assertSynchronizationWritable(): void {\n\t\tif (this.syncFenced) throw this.lastSyncError;\n\t}\n\n\tprivate async flushDirtyEntries(): Promise<void> {\n\t\tthis.assertSynchronizationWritable();\n\t\tif (this.dirtyEntries.length === 0) return;\n\t\tif (!this.reference) {\n\t\t\tthrow new Error(\"Cannot synchronize remote session entries without a session reference\");\n\t\t}\n\n\t\twhile (this.dirtyEntries.length > 0) {\n\t\t\tconst entries = [...this.dirtyEntries];\n\t\t\tconst response = await this.client.appendEntries(this.reference, {\n\t\t\t\tbaseEtag: this.etag,\n\t\t\t\tentries,\n\t\t\t});\n\t\t\tif (!Number.isInteger(response.accepted) || response.accepted <= 0 || response.accepted > entries.length) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Remote session append accepted ${response.accepted} of ${entries.length} entries without valid progress`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tthis.etag = response.etag;\n\t\t\tthis.dirtyEntries = this.dirtyEntries.slice(response.accepted);\n\t\t\tif (this.dirtyEntries.length > 0 && !response.etag) {\n\t\t\t\tthrow new Error(\"Remote session append partially accepted entries without returning an updated ETag\");\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async replaceSnapshot(): Promise<void> {\n\t\tthis.assertSynchronizationWritable();\n\t\tif (!this.reference) return;\n\n\t\tconst entries = this.getFileEntries();\n\t\tconst dirtyEntryCount = this.dirtyEntries.length;\n\t\tconst response = await this.client.replaceSnapshot(this.reference, {\n\t\t\tbaseEtag: this.etag,\n\t\t\tentries,\n\t\t});\n\t\tthis.etag = response.etag;\n\t\tthis.dirtyEntries = this.dirtyEntries.slice(dirtyEntryCount);\n\t}\n}\n"]}
1
+ {"version":3,"file":"remote-session-store.d.ts","sourceRoot":"","sources":["../../../../src/core/session/stores/remote-session-store.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAE9F,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAEpE,MAAM,WAAW,yBAAyB;IACzC,MAAM,EAAE,mBAAmB,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,qBAAqB,CAAC;CACjC;AAMD;;;;;;;GAOG;AACH,qBAAa,kBAAmB,SAAQ,oBAAoB;IAC3D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsB;IAC7C,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,IAAI,CAAqB;IACjC,OAAO,CAAC,WAAW,CAAoC;IACvD,OAAO,CAAC,YAAY,CAAmB;IACvC,OAAO,CAAC,aAAa,CAAU;IAC/B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAoC;IAEpD,YAAY,OAAO,EAAE,yBAAyB,EAM7C;IAEQ,WAAW,IAAI,OAAO,CAE9B;IAEQ,mBAAmB,IAAI,MAAM,GAAG,SAAS,CAEjD;IAEQ,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAEpD;IAEQ,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAI1C;IAEQ,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,CAO5C;IAEQ,WAAW,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAG9C;IAEQ,YAAY,IAAI,IAAI,CAE5B;IAEQ,cAAc,IAAI,IAAI,CAE9B;IAEK,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAetC;IAED,gBAAgB,IAAI,OAAO,CAE1B;IAED,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,oBAAoB;IAS5B,OAAO,CAAC,oBAAoB;IAc5B,OAAO,CAAC,6BAA6B;YAIvB,iBAAiB;YA0BjB,eAAe;CAa7B"}
@@ -13,16 +13,11 @@ function getSnapshotReference(snapshot) {
13
13
  * Session starts reading from it.
14
14
  */
15
15
  export class RemoteSessionStore extends InMemorySessionStore {
16
- client;
17
- reference;
18
- etag;
19
- pendingSync = Promise.resolve();
20
- dirtyEntries = [];
21
- lastSyncError;
22
- syncFenced = false;
23
- snapshot;
24
16
  constructor(options) {
25
17
  super();
18
+ this.pendingSync = Promise.resolve();
19
+ this.dirtyEntries = [];
20
+ this.syncFenced = false;
26
21
  this.client = options.client;
27
22
  this.snapshot = options.snapshot;
28
23
  this.reference = options.reference ?? (options.snapshot ? getSnapshotReference(options.snapshot) : undefined);
@@ -1 +1 @@
1
- {"version":3,"file":"remote-session-store.js","sourceRoot":"","sources":["../../../../src/core/session/stores/remote-session-store.ts"],"names":[],"mappings":"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","sourcesContent":["import { JsonlSessionError } from \"../jsonl-errors.ts\";\nimport type { RemoteSessionClient, RemoteSessionSnapshot } from \"../remote-session-client.ts\";\nimport { formatRemoteSessionReference, parseRemoteSessionId } from \"../remote-session-client.ts\";\nimport type { FileEntry, SessionEntry } from \"../types.ts\";\nimport { InMemorySessionStore } from \"./in-memory-session-store.ts\";\n\nexport interface RemoteSessionStoreOptions {\n\tclient: RemoteSessionClient;\n\treference?: string;\n\tsnapshot?: RemoteSessionSnapshot;\n}\n\nfunction getSnapshotReference(snapshot: RemoteSessionSnapshot): string {\n\treturn snapshot.reference || formatRemoteSessionReference(snapshot.id);\n}\n\n/**\n * Remote session store.\n *\n * The active session state is kept in memory for synchronous Session access.\n * Mutations are serialized to the remote service in the background, and\n * snapshots fetched by RemoteSessionManager are used to hydrate the store before\n * Session starts reading from it.\n */\nexport class RemoteSessionStore extends InMemorySessionStore {\n\tprivate readonly client: RemoteSessionClient;\n\tprivate reference: string | undefined;\n\tprivate etag: string | undefined;\n\tprivate pendingSync: Promise<void> = Promise.resolve();\n\tprivate dirtyEntries: FileEntry[] = [];\n\tprivate lastSyncError: unknown;\n\tprivate syncFenced = false;\n\tprivate snapshot: RemoteSessionSnapshot | undefined;\n\n\tconstructor(options: RemoteSessionStoreOptions) {\n\t\tsuper();\n\t\tthis.client = options.client;\n\t\tthis.snapshot = options.snapshot;\n\t\tthis.reference = options.reference ?? (options.snapshot ? getSnapshotReference(options.snapshot) : undefined);\n\t\tthis.etag = options.snapshot?.etag;\n\t}\n\n\toverride isPersisted(): boolean {\n\t\treturn true;\n\t}\n\n\toverride getSessionReference(): string | undefined {\n\t\treturn this.reference;\n\t}\n\n\toverride setSessionReference(reference: string): void {\n\t\tthis.reference = formatRemoteSessionReference(parseRemoteSessionId(reference));\n\t}\n\n\toverride exists(reference: string): boolean {\n\t\tif (!this.snapshot) return false;\n\t\tconst snapshotReference = getSnapshotReference(this.snapshot);\n\t\treturn parseRemoteSessionId(reference) === parseRemoteSessionId(snapshotReference);\n\t}\n\n\toverride load(reference: string): FileEntry[] {\n\t\tif (!this.snapshot || !this.exists(reference)) return [];\n\t\tthis.reference = getSnapshotReference(this.snapshot);\n\t\tthis.etag = this.snapshot.etag;\n\t\tconst entries = [...this.snapshot.entries];\n\t\tthis.snapshot = undefined;\n\t\treturn entries;\n\t}\n\n\toverride appendEntry(entry: SessionEntry): void {\n\t\tsuper.appendEntry(entry);\n\t\tthis.queueAppend([entry]);\n\t}\n\n\toverride saveSnapshot(): void {\n\t\tthis.queueReplaceSnapshot();\n\t}\n\n\toverride commitSnapshot(): void {\n\t\tthis.queueReplaceSnapshot();\n\t}\n\n\tasync flushPendingSync(): Promise<void> {\n\t\twhile (true) {\n\t\t\tconst pending = this.pendingSync;\n\t\t\tawait pending;\n\t\t\tif (this.lastSyncError) {\n\t\t\t\tthrow this.lastSyncError;\n\t\t\t}\n\t\t\tif (pending !== this.pendingSync) continue;\n\t\t\tif (this.dirtyEntries.length > 0) {\n\t\t\t\tconst error = new Error(`Remote session synchronization left ${this.dirtyEntries.length} unsaved entries`);\n\t\t\t\tthis.lastSyncError = error;\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t}\n\n\tgetLastSyncError(): unknown {\n\t\treturn this.lastSyncError;\n\t}\n\n\tprivate queueAppend(entries: FileEntry[]): void {\n\t\tthis.dirtyEntries.push(...entries);\n\t\tif (this.syncFenced) return;\n\t\tthis.pendingSync = this.pendingSync\n\t\t\t.then(() => this.flushDirtyEntries())\n\t\t\t.catch((error: unknown) => {\n\t\t\t\tthis.fenceSynchronization(error);\n\t\t\t});\n\t}\n\n\tprivate queueReplaceSnapshot(): void {\n\t\tif (this.syncFenced) return;\n\t\tthis.pendingSync = this.pendingSync\n\t\t\t.then(() => this.replaceSnapshot())\n\t\t\t.catch((error: unknown) => {\n\t\t\t\tthis.fenceSynchronization(error);\n\t\t\t});\n\t}\n\n\tprivate fenceSynchronization(error: unknown): void {\n\t\tif (this.syncFenced) return;\n\t\tconst cause = error instanceof Error ? error : new Error(String(error));\n\t\tthis.syncFenced = true;\n\t\tthis.lastSyncError = new JsonlSessionError({\n\t\t\tcode: \"fenced\",\n\t\t\treference: this.reference ?? \"remote:unknown\",\n\t\t\tphase: \"sync\",\n\t\t\tmessage: `Remote session synchronization is fenced: ${cause.message}`,\n\t\t\toutcome: \"unknown\",\n\t\t\tcause,\n\t\t});\n\t}\n\n\tprivate assertSynchronizationWritable(): void {\n\t\tif (this.syncFenced) throw this.lastSyncError;\n\t}\n\n\tprivate async flushDirtyEntries(): Promise<void> {\n\t\tthis.assertSynchronizationWritable();\n\t\tif (this.dirtyEntries.length === 0) return;\n\t\tif (!this.reference) {\n\t\t\tthrow new Error(\"Cannot synchronize remote session entries without a session reference\");\n\t\t}\n\n\t\twhile (this.dirtyEntries.length > 0) {\n\t\t\tconst entries = [...this.dirtyEntries];\n\t\t\tconst response = await this.client.appendEntries(this.reference, {\n\t\t\t\tbaseEtag: this.etag,\n\t\t\t\tentries,\n\t\t\t});\n\t\t\tif (!Number.isInteger(response.accepted) || response.accepted <= 0 || response.accepted > entries.length) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Remote session append accepted ${response.accepted} of ${entries.length} entries without valid progress`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tthis.etag = response.etag;\n\t\t\tthis.dirtyEntries = this.dirtyEntries.slice(response.accepted);\n\t\t\tif (this.dirtyEntries.length > 0 && !response.etag) {\n\t\t\t\tthrow new Error(\"Remote session append partially accepted entries without returning an updated ETag\");\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async replaceSnapshot(): Promise<void> {\n\t\tthis.assertSynchronizationWritable();\n\t\tif (!this.reference) return;\n\n\t\tconst entries = this.getFileEntries();\n\t\tconst dirtyEntryCount = this.dirtyEntries.length;\n\t\tconst response = await this.client.replaceSnapshot(this.reference, {\n\t\t\tbaseEtag: this.etag,\n\t\t\tentries,\n\t\t});\n\t\tthis.etag = response.etag;\n\t\tthis.dirtyEntries = this.dirtyEntries.slice(dirtyEntryCount);\n\t}\n}\n"]}
1
+ {"version":3,"file":"remote-session-store.js","sourceRoot":"","sources":["../../../../src/core/session/stores/remote-session-store.ts"],"names":[],"mappings":"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","sourcesContent":["import { JsonlSessionError } from \"../jsonl-errors.ts\";\nimport type { RemoteSessionClient, RemoteSessionSnapshot } from \"../remote-session-client.ts\";\nimport { formatRemoteSessionReference, parseRemoteSessionId } from \"../remote-session-client.ts\";\nimport type { FileEntry, SessionEntry } from \"../types.ts\";\nimport { InMemorySessionStore } from \"./in-memory-session-store.ts\";\n\nexport interface RemoteSessionStoreOptions {\n\tclient: RemoteSessionClient;\n\treference?: string;\n\tsnapshot?: RemoteSessionSnapshot;\n}\n\nfunction getSnapshotReference(snapshot: RemoteSessionSnapshot): string {\n\treturn snapshot.reference || formatRemoteSessionReference(snapshot.id);\n}\n\n/**\n * Remote session store.\n *\n * The active session state is kept in memory for synchronous Session access.\n * Mutations are serialized to the remote service in the background, and\n * snapshots fetched by RemoteSessionManager are used to hydrate the store before\n * Session starts reading from it.\n */\nexport class RemoteSessionStore extends InMemorySessionStore {\n\tprivate readonly client: RemoteSessionClient;\n\tprivate reference: string | undefined;\n\tprivate etag: string | undefined;\n\tprivate pendingSync: Promise<void> = Promise.resolve();\n\tprivate dirtyEntries: FileEntry[] = [];\n\tprivate lastSyncError: unknown;\n\tprivate syncFenced = false;\n\tprivate snapshot: RemoteSessionSnapshot | undefined;\n\n\tconstructor(options: RemoteSessionStoreOptions) {\n\t\tsuper();\n\t\tthis.client = options.client;\n\t\tthis.snapshot = options.snapshot;\n\t\tthis.reference = options.reference ?? (options.snapshot ? getSnapshotReference(options.snapshot) : undefined);\n\t\tthis.etag = options.snapshot?.etag;\n\t}\n\n\toverride isPersisted(): boolean {\n\t\treturn true;\n\t}\n\n\toverride getSessionReference(): string | undefined {\n\t\treturn this.reference;\n\t}\n\n\toverride setSessionReference(reference: string): void {\n\t\tthis.reference = formatRemoteSessionReference(parseRemoteSessionId(reference));\n\t}\n\n\toverride exists(reference: string): boolean {\n\t\tif (!this.snapshot) return false;\n\t\tconst snapshotReference = getSnapshotReference(this.snapshot);\n\t\treturn parseRemoteSessionId(reference) === parseRemoteSessionId(snapshotReference);\n\t}\n\n\toverride load(reference: string): FileEntry[] {\n\t\tif (!this.snapshot || !this.exists(reference)) return [];\n\t\tthis.reference = getSnapshotReference(this.snapshot);\n\t\tthis.etag = this.snapshot.etag;\n\t\tconst entries = [...this.snapshot.entries];\n\t\tthis.snapshot = undefined;\n\t\treturn entries;\n\t}\n\n\toverride appendEntry(entry: SessionEntry): void {\n\t\tsuper.appendEntry(entry);\n\t\tthis.queueAppend([entry]);\n\t}\n\n\toverride saveSnapshot(): void {\n\t\tthis.queueReplaceSnapshot();\n\t}\n\n\toverride commitSnapshot(): void {\n\t\tthis.queueReplaceSnapshot();\n\t}\n\n\tasync flushPendingSync(): Promise<void> {\n\t\twhile (true) {\n\t\t\tconst pending = this.pendingSync;\n\t\t\tawait pending;\n\t\t\tif (this.lastSyncError) {\n\t\t\t\tthrow this.lastSyncError;\n\t\t\t}\n\t\t\tif (pending !== this.pendingSync) continue;\n\t\t\tif (this.dirtyEntries.length > 0) {\n\t\t\t\tconst error = new Error(`Remote session synchronization left ${this.dirtyEntries.length} unsaved entries`);\n\t\t\t\tthis.lastSyncError = error;\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t}\n\n\tgetLastSyncError(): unknown {\n\t\treturn this.lastSyncError;\n\t}\n\n\tprivate queueAppend(entries: FileEntry[]): void {\n\t\tthis.dirtyEntries.push(...entries);\n\t\tif (this.syncFenced) return;\n\t\tthis.pendingSync = this.pendingSync\n\t\t\t.then(() => this.flushDirtyEntries())\n\t\t\t.catch((error: unknown) => {\n\t\t\t\tthis.fenceSynchronization(error);\n\t\t\t});\n\t}\n\n\tprivate queueReplaceSnapshot(): void {\n\t\tif (this.syncFenced) return;\n\t\tthis.pendingSync = this.pendingSync\n\t\t\t.then(() => this.replaceSnapshot())\n\t\t\t.catch((error: unknown) => {\n\t\t\t\tthis.fenceSynchronization(error);\n\t\t\t});\n\t}\n\n\tprivate fenceSynchronization(error: unknown): void {\n\t\tif (this.syncFenced) return;\n\t\tconst cause = error instanceof Error ? error : new Error(String(error));\n\t\tthis.syncFenced = true;\n\t\tthis.lastSyncError = new JsonlSessionError({\n\t\t\tcode: \"fenced\",\n\t\t\treference: this.reference ?? \"remote:unknown\",\n\t\t\tphase: \"sync\",\n\t\t\tmessage: `Remote session synchronization is fenced: ${cause.message}`,\n\t\t\toutcome: \"unknown\",\n\t\t\tcause,\n\t\t});\n\t}\n\n\tprivate assertSynchronizationWritable(): void {\n\t\tif (this.syncFenced) throw this.lastSyncError;\n\t}\n\n\tprivate async flushDirtyEntries(): Promise<void> {\n\t\tthis.assertSynchronizationWritable();\n\t\tif (this.dirtyEntries.length === 0) return;\n\t\tif (!this.reference) {\n\t\t\tthrow new Error(\"Cannot synchronize remote session entries without a session reference\");\n\t\t}\n\n\t\twhile (this.dirtyEntries.length > 0) {\n\t\t\tconst entries = [...this.dirtyEntries];\n\t\t\tconst response = await this.client.appendEntries(this.reference, {\n\t\t\t\tbaseEtag: this.etag,\n\t\t\t\tentries,\n\t\t\t});\n\t\t\tif (!Number.isInteger(response.accepted) || response.accepted <= 0 || response.accepted > entries.length) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Remote session append accepted ${response.accepted} of ${entries.length} entries without valid progress`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tthis.etag = response.etag;\n\t\t\tthis.dirtyEntries = this.dirtyEntries.slice(response.accepted);\n\t\t\tif (this.dirtyEntries.length > 0 && !response.etag) {\n\t\t\t\tthrow new Error(\"Remote session append partially accepted entries without returning an updated ETag\");\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async replaceSnapshot(): Promise<void> {\n\t\tthis.assertSynchronizationWritable();\n\t\tif (!this.reference) return;\n\n\t\tconst entries = this.getFileEntries();\n\t\tconst dirtyEntryCount = this.dirtyEntries.length;\n\t\tconst response = await this.client.replaceSnapshot(this.reference, {\n\t\t\tbaseEtag: this.etag,\n\t\t\tentries,\n\t\t});\n\t\tthis.etag = response.etag;\n\t\tthis.dirtyEntries = this.dirtyEntries.slice(dirtyEntryCount);\n\t}\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"session-store.d.ts","sourceRoot":"","sources":["../../../../src/core/session/stores/session-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE3F,MAAM,WAAW,uBAAuB;IACvC,sBAAsB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,MAAM,WAAW,sBAAsB;IACtC,KAAK,CAAC,EAAE,eAAe,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC5B,WAAW,IAAI,OAAO,CAAC;IACvB,mBAAmB,IAAI,MAAM,GAAG,SAAS,CAAC;IAC1C,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,uBAAuB,GAAG,IAAI,CAAC;IAChF,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAC9B,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,CAAC;IACpC,UAAU,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IACvC,cAAc,IAAI,SAAS,EAAE,CAAC;IAC9B,SAAS,IAAI,aAAa,GAAG,IAAI,CAAC;IAClC,UAAU,IAAI,YAAY,EAAE,CAAC;IAC7B,aAAa,IAAI,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC3C,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;IACzB,WAAW,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IACvC,YAAY,CAAC,OAAO,CAAC,EAAE,sBAAsB,GAAG,IAAI,CAAC;IACrD,cAAc,IAAI,IAAI,CAAC;IACvB,SAAS,IAAI,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IACvC,YAAY,IAAI,YAAY,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAAC;IAC/C,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,EAAE,CAAC;IAC9C,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACzC,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,YAAY,EAAE,CAAC;IAC3C,OAAO,IAAI,eAAe,EAAE,CAAC;IAC7B,cAAc,IAAI,MAAM,GAAG,SAAS,CAAC;IACrC,oBAAoB,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,oBAAoB,EAAE,CAAC;IACpE,mBAAmB,IAAI,OAAO,CAAC;CAC/B","sourcesContent":["import type { JsonlErrorPhase } from \"../jsonl-errors.ts\";\nimport type { FileEntry, SessionEntry, SessionHeader, SessionTreeNode } from \"../types.ts\";\n\nexport interface SessionReferenceOptions {\n\tallowExistingEmptyFile?: boolean;\n}\n\nexport interface SessionSnapshotOptions {\n\tphase?: JsonlErrorPhase;\n}\n\nexport interface SessionLabelSnapshot {\n\ttargetId: string;\n\tlabel: string;\n\ttimestamp: string;\n}\n\nexport interface SessionStore {\n\tisPersisted(): boolean;\n\tgetSessionReference(): string | undefined;\n\tsetSessionReference(reference: string, options?: SessionReferenceOptions): void;\n\texists(path: string): boolean;\n\tensureDir(path: string): void;\n\tload(filePath: string): FileEntry[];\n\tsetEntries(entries: FileEntry[]): void;\n\tgetFileEntries(): FileEntry[];\n\tgetHeader(): SessionHeader | null;\n\tgetEntries(): SessionEntry[];\n\tgetEntryIndex(): Map<string, SessionEntry>;\n\thas(id: string): boolean;\n\tappendEntry(entry: SessionEntry): void;\n\tsaveSnapshot(options?: SessionSnapshotOptions): void;\n\tcommitSnapshot(): void;\n\tgetLeafId(): string | null;\n\tsetLeafId(leafId: string | null): void;\n\tgetLeafEntry(): SessionEntry | undefined;\n\tgetEntry(id: string): SessionEntry | undefined;\n\tgetChildren(parentId: string): SessionEntry[];\n\tgetLabel(id: string): string | undefined;\n\tgetBranch(fromId?: string): SessionEntry[];\n\tgetTree(): SessionTreeNode[];\n\tgetSessionName(): string | undefined;\n\tgetLabelsForEntryIds(entryIds: Set<string>): SessionLabelSnapshot[];\n\thasAssistantMessage(): boolean;\n}\n"]}
1
+ {"version":3,"file":"session-store.d.ts","sourceRoot":"","sources":["../../../../src/core/session/stores/session-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE3F,MAAM,WAAW,uBAAuB;IACvC,sBAAsB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,MAAM,WAAW,sBAAsB;IACtC,KAAK,CAAC,EAAE,eAAe,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC5B,WAAW,IAAI,OAAO,CAAC;IACvB,mBAAmB,IAAI,MAAM,GAAG,SAAS,CAAC;IAC1C,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,uBAAuB,GAAG,IAAI,CAAC;IAChF,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAC9B,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,CAAC;IACpC,UAAU,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IACvC,cAAc,IAAI,SAAS,EAAE,CAAC;IAC9B,SAAS,IAAI,aAAa,GAAG,IAAI,CAAC;IAClC,UAAU,IAAI,YAAY,EAAE,CAAC;IAC7B,aAAa,IAAI,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC3C,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;IACzB,WAAW,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IACvC,YAAY,CAAC,OAAO,CAAC,EAAE,sBAAsB,GAAG,IAAI,CAAC;IACrD,cAAc,IAAI,IAAI,CAAC;IACvB,SAAS,IAAI,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IACvC,YAAY,IAAI,YAAY,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAAC;IAC/C,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,EAAE,CAAC;IAC9C,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACzC,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,YAAY,EAAE,CAAC;IAC3C,OAAO,IAAI,eAAe,EAAE,CAAC;IAC7B,cAAc,IAAI,MAAM,GAAG,SAAS,CAAC;IACrC,oBAAoB,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,oBAAoB,EAAE,CAAC;IACpE,mBAAmB,IAAI,OAAO,CAAC;CAC/B"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/session/types.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AgentMessage } from \"@greppleai/grip-agent-core\";\nimport type { ImageContent, TextContent } from \"@greppleai/grip-ai\";\n\nexport interface SessionHeader {\n\ttype: \"session\";\n\tversion?: number; // v1 sessions don't have this\n\tid: string;\n\ttimestamp: string;\n\tcwd: string;\n\tparentSession?: string;\n}\n\nexport interface NewSessionOptions {\n\tid?: string;\n\tparentSession?: string;\n}\n\nexport interface SessionEntryBase {\n\ttype: string;\n\tid: string;\n\tparentId: string | null;\n\ttimestamp: string;\n}\n\nexport interface SessionMessageEntry extends SessionEntryBase {\n\ttype: \"message\";\n\tmessage: AgentMessage;\n\t/** Original entry when this message was retained on a compressed branch (usage was already counted). */\n\treplayedFromId?: string;\n}\n\nexport interface ThinkingLevelChangeEntry extends SessionEntryBase {\n\ttype: \"thinking_level_change\";\n\tthinkingLevel: string;\n}\n\nexport interface ModelChangeEntry extends SessionEntryBase {\n\ttype: \"model_change\";\n\tprovider: string;\n\tmodelId: string;\n}\n\nexport interface CompactionEntry<T = unknown> extends SessionEntryBase {\n\ttype: \"compaction\";\n\tsummary: string;\n\tfirstKeptEntryId: string;\n\ttokensBefore: number;\n\t/** Extension-specific data (e.g., ArtifactIndex, version markers for structured compaction) */\n\tdetails?: T;\n\t/** True if generated by an extension, undefined/false if grip-generated (backward compatible) */\n\tfromHook?: boolean;\n}\n\nexport interface BranchSummaryEntry<T = unknown> extends SessionEntryBase {\n\ttype: \"branch_summary\";\n\tfromId: string;\n\tsummary: string;\n\t/** Extension-specific data (not sent to LLM) */\n\tdetails?: T;\n\t/** True if generated by an extension, false if grip-generated */\n\tfromHook?: boolean;\n}\n\n/**\n * Custom entry for extensions to store extension-specific data in the session.\n * Use customType to identify your extension's entries.\n *\n * Purpose: Persist extension state across session reloads. On reload, extensions can\n * scan entries for their customType and reconstruct internal state.\n *\n * Does NOT participate in LLM context (ignored by buildSessionContext).\n * For injecting content into context, see CustomMessageEntry.\n */\nexport interface CustomEntry<T = unknown> extends SessionEntryBase {\n\ttype: \"custom\";\n\tcustomType: string;\n\tdata?: T;\n}\n\n/** Label entry for user-defined bookmarks/markers on entries. */\nexport interface LabelEntry extends SessionEntryBase {\n\ttype: \"label\";\n\ttargetId: string;\n\tlabel: string | undefined;\n}\n\n/** Session metadata entry (e.g., user-defined display name). */\nexport interface SessionInfoEntry extends SessionEntryBase {\n\ttype: \"session_info\";\n\tname?: string;\n}\n\n/**\n * Custom message entry for extensions to inject messages into LLM context.\n * Use customType to identify your extension's entries.\n *\n * Unlike CustomEntry, this DOES participate in LLM context.\n * The content is converted to a user message in buildSessionContext().\n * Use details for extension-specific metadata (not sent to LLM).\n *\n * display controls TUI rendering:\n * - false: hidden entirely\n * - true: rendered with distinct styling (different from user messages)\n */\nexport interface CustomMessageEntry<T = unknown> extends SessionEntryBase {\n\ttype: \"custom_message\";\n\tcustomType: string;\n\tcontent: string | (TextContent | ImageContent)[];\n\tdetails?: T;\n\tdisplay: boolean;\n}\n\n/** Session entry - has id/parentId for tree structure (returned by \"read\" methods in SessionManager) */\nexport type SessionEntry =\n\t| SessionMessageEntry\n\t| ThinkingLevelChangeEntry\n\t| ModelChangeEntry\n\t| CompactionEntry\n\t| BranchSummaryEntry\n\t| CustomEntry\n\t| CustomMessageEntry\n\t| LabelEntry\n\t| SessionInfoEntry;\n\n/** Raw file entry (includes header) */\nexport type FileEntry = SessionHeader | SessionEntry;\n\n/** Tree node for getTree() - defensive copy of session structure */\nexport interface SessionTreeNode {\n\tentry: SessionEntry;\n\tchildren: SessionTreeNode[];\n\t/** Resolved label for this entry, if any */\n\tlabel?: string;\n\t/** Timestamp of the latest label change for this entry, if any */\n\tlabelTimestamp?: string;\n}\n\nexport interface SessionModelReference {\n\tprovider: string;\n\tmodelId: string;\n}\n\nexport interface SessionContext {\n\tmessages: AgentMessage[];\n\tthinkingLevel: string;\n\tmodel: SessionModelReference | null;\n}\n\nexport interface SessionInfo {\n\t/** Backend-neutral session reference. Defaults to path for JSONL compatibility when omitted. */\n\treference?: string;\n\t/** JSONL compatibility alias for reference. */\n\tpath: string;\n\tid: string;\n\t/** Working directory where the session was started. Empty string for old sessions. */\n\tcwd: string;\n\t/** User-defined display name from session_info entries. */\n\tname?: string;\n\t/** Path to the parent session (if this session was forked). */\n\tparentSessionPath?: string;\n\tcreated: Date;\n\tmodified: Date;\n\tmessageCount: number;\n\tfirstMessage: string;\n\tallMessagesText: string;\n}\n\nexport type SessionListProgress = (loaded: number, total: number) => void;\n"]}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/session/types.ts"],"names":[],"mappings":"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"}