@code-yeongyu/senpi 2026.9.15 → 2026.9.16-3

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 (339) hide show
  1. package/CHANGELOG.md +89 -0
  2. package/README.md +1 -1
  3. package/dist/cli/help-extension-flags.d.ts +22 -0
  4. package/dist/cli/help-extension-flags.d.ts.map +1 -0
  5. package/dist/cli/help-extension-flags.js +30 -0
  6. package/dist/cli/help-extension-flags.js.map +1 -0
  7. package/dist/cli/help-fast-path.d.ts +19 -0
  8. package/dist/cli/help-fast-path.d.ts.map +1 -0
  9. package/dist/cli/help-fast-path.js +64 -0
  10. package/dist/cli/help-fast-path.js.map +1 -0
  11. package/dist/cli/help-flags-cache.d.ts +23 -0
  12. package/dist/cli/help-flags-cache.d.ts.map +1 -0
  13. package/dist/cli/help-flags-cache.js +118 -0
  14. package/dist/cli/help-flags-cache.js.map +1 -0
  15. package/dist/cli/startup-loading-indicator.d.ts.map +1 -1
  16. package/dist/cli/startup-loading-indicator.js +10 -4
  17. package/dist/cli/startup-loading-indicator.js.map +1 -1
  18. package/dist/cli.js +9 -0
  19. package/dist/cli.js.map +1 -1
  20. package/dist/core/agent-session.d.ts +17 -0
  21. package/dist/core/agent-session.d.ts.map +1 -1
  22. package/dist/core/agent-session.js +62 -8
  23. package/dist/core/agent-session.js.map +1 -1
  24. package/dist/core/compaction/compaction.d.ts.map +1 -1
  25. package/dist/core/compaction/compaction.js +4 -2
  26. package/dist/core/compaction/compaction.js.map +1 -1
  27. package/dist/core/compaction/stream-watchdog.d.ts +56 -2
  28. package/dist/core/compaction/stream-watchdog.d.ts.map +1 -1
  29. package/dist/core/compaction/stream-watchdog.js +93 -15
  30. package/dist/core/compaction/stream-watchdog.js.map +1 -1
  31. package/dist/core/extensions/builtin/claude-sdk-oauth/session-binding.d.ts +6 -0
  32. package/dist/core/extensions/builtin/claude-sdk-oauth/session-binding.d.ts.map +1 -1
  33. package/dist/core/extensions/builtin/claude-sdk-oauth/session-binding.js +17 -0
  34. package/dist/core/extensions/builtin/claude-sdk-oauth/session-binding.js.map +1 -1
  35. package/dist/core/extensions/builtin/claude-sdk-oauth/session-continuity.d.ts +4 -1
  36. package/dist/core/extensions/builtin/claude-sdk-oauth/session-continuity.d.ts.map +1 -1
  37. package/dist/core/extensions/builtin/claude-sdk-oauth/session-continuity.js +31 -0
  38. package/dist/core/extensions/builtin/claude-sdk-oauth/session-continuity.js.map +1 -1
  39. package/dist/core/extensions/builtin/claude-sdk-oauth/session-reattach.d.ts +2 -0
  40. package/dist/core/extensions/builtin/claude-sdk-oauth/session-reattach.d.ts.map +1 -1
  41. package/dist/core/extensions/builtin/claude-sdk-oauth/session-reattach.js +16 -0
  42. package/dist/core/extensions/builtin/claude-sdk-oauth/session-reattach.js.map +1 -1
  43. package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry-wiring.d.ts.map +1 -1
  44. package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry-wiring.js +19 -8
  45. package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry-wiring.js.map +1 -1
  46. package/dist/core/extensions/builtin/claude-sdk-oauth/session-stream.d.ts.map +1 -1
  47. package/dist/core/extensions/builtin/claude-sdk-oauth/session-stream.js +2 -1
  48. package/dist/core/extensions/builtin/claude-sdk-oauth/session-stream.js.map +1 -1
  49. package/dist/core/extensions/builtin/compaction/deterministic-fallback.d.ts +13 -1
  50. package/dist/core/extensions/builtin/compaction/deterministic-fallback.d.ts.map +1 -1
  51. package/dist/core/extensions/builtin/compaction/deterministic-fallback.js +66 -2
  52. package/dist/core/extensions/builtin/compaction/deterministic-fallback.js.map +1 -1
  53. package/dist/core/extensions/builtin/compaction/index.d.ts.map +1 -1
  54. package/dist/core/extensions/builtin/compaction/index.js +16 -10
  55. package/dist/core/extensions/builtin/compaction/index.js.map +1 -1
  56. package/dist/core/extensions/builtin/compaction/speculative-summary.d.ts.map +1 -1
  57. package/dist/core/extensions/builtin/compaction/speculative-summary.js +4 -2
  58. package/dist/core/extensions/builtin/compaction/speculative-summary.js.map +1 -1
  59. package/dist/core/extensions/builtin/compaction/speculative.d.ts +8 -1
  60. package/dist/core/extensions/builtin/compaction/speculative.d.ts.map +1 -1
  61. package/dist/core/extensions/builtin/compaction/speculative.js +31 -7
  62. package/dist/core/extensions/builtin/compaction/speculative.js.map +1 -1
  63. package/dist/core/extensions/builtin/compaction/transient-failure.d.ts.map +1 -1
  64. package/dist/core/extensions/builtin/compaction/transient-failure.js +6 -3
  65. package/dist/core/extensions/builtin/compaction/transient-failure.js.map +1 -1
  66. package/dist/core/extensions/builtin/config-reload/index.d.ts.map +1 -1
  67. package/dist/core/extensions/builtin/config-reload/index.js +25 -8
  68. package/dist/core/extensions/builtin/config-reload/index.js.map +1 -1
  69. package/dist/core/extensions/builtin/config-reload/watch-engine.d.ts +4 -5
  70. package/dist/core/extensions/builtin/config-reload/watch-engine.d.ts.map +1 -1
  71. package/dist/core/extensions/builtin/config-reload/watch-engine.js +14 -18
  72. package/dist/core/extensions/builtin/config-reload/watch-engine.js.map +1 -1
  73. package/dist/core/extensions/builtin/config-reload/watch-event-source.d.ts.map +1 -1
  74. package/dist/core/extensions/builtin/config-reload/watch-event-source.js +32 -9
  75. package/dist/core/extensions/builtin/config-reload/watch-event-source.js.map +1 -1
  76. package/dist/core/extensions/builtin/cursor-cli-oauth/catalog-refresh.d.ts +23 -0
  77. package/dist/core/extensions/builtin/cursor-cli-oauth/catalog-refresh.d.ts.map +1 -0
  78. package/dist/core/extensions/builtin/cursor-cli-oauth/catalog-refresh.js +48 -0
  79. package/dist/core/extensions/builtin/cursor-cli-oauth/catalog-refresh.js.map +1 -0
  80. package/dist/core/extensions/builtin/cursor-cli-oauth/environment.d.ts +13 -0
  81. package/dist/core/extensions/builtin/cursor-cli-oauth/environment.d.ts.map +1 -0
  82. package/dist/core/extensions/builtin/cursor-cli-oauth/environment.js +24 -0
  83. package/dist/core/extensions/builtin/cursor-cli-oauth/environment.js.map +1 -0
  84. package/dist/core/extensions/builtin/cursor-cli-oauth/executable.d.ts +1 -0
  85. package/dist/core/extensions/builtin/cursor-cli-oauth/executable.d.ts.map +1 -1
  86. package/dist/core/extensions/builtin/cursor-cli-oauth/executable.js +7 -1
  87. package/dist/core/extensions/builtin/cursor-cli-oauth/executable.js.map +1 -1
  88. package/dist/core/extensions/builtin/cursor-cli-oauth/index.d.ts +2 -0
  89. package/dist/core/extensions/builtin/cursor-cli-oauth/index.d.ts.map +1 -1
  90. package/dist/core/extensions/builtin/cursor-cli-oauth/index.js +11 -9
  91. package/dist/core/extensions/builtin/cursor-cli-oauth/index.js.map +1 -1
  92. package/dist/core/extensions/builtin/cursor-cli-oauth/models-probe.d.ts +18 -0
  93. package/dist/core/extensions/builtin/cursor-cli-oauth/models-probe.d.ts.map +1 -0
  94. package/dist/core/extensions/builtin/cursor-cli-oauth/models-probe.js +61 -0
  95. package/dist/core/extensions/builtin/cursor-cli-oauth/models-probe.js.map +1 -0
  96. package/dist/core/extensions/builtin/cursor-cli-oauth/models.d.ts +4 -1
  97. package/dist/core/extensions/builtin/cursor-cli-oauth/models.d.ts.map +1 -1
  98. package/dist/core/extensions/builtin/cursor-cli-oauth/models.js +1 -44
  99. package/dist/core/extensions/builtin/cursor-cli-oauth/models.js.map +1 -1
  100. package/dist/core/extensions/builtin/cursor-cli-oauth/oauth-login.d.ts +22 -0
  101. package/dist/core/extensions/builtin/cursor-cli-oauth/oauth-login.d.ts.map +1 -1
  102. package/dist/core/extensions/builtin/cursor-cli-oauth/oauth-login.js +1 -1
  103. package/dist/core/extensions/builtin/cursor-cli-oauth/oauth-login.js.map +1 -1
  104. package/dist/core/extensions/builtin/cursor-cli-oauth/transport.d.ts.map +1 -1
  105. package/dist/core/extensions/builtin/cursor-cli-oauth/transport.js +2 -13
  106. package/dist/core/extensions/builtin/cursor-cli-oauth/transport.js.map +1 -1
  107. package/dist/core/extensions/builtin/terminal/monitor-file-digest.d.ts +3 -0
  108. package/dist/core/extensions/builtin/terminal/monitor-file-digest.d.ts.map +1 -0
  109. package/dist/core/extensions/builtin/terminal/monitor-file-digest.js +25 -0
  110. package/dist/core/extensions/builtin/terminal/monitor-file-digest.js.map +1 -0
  111. package/dist/core/extensions/builtin/terminal/monitor-file-watch.d.ts +9 -0
  112. package/dist/core/extensions/builtin/terminal/monitor-file-watch.d.ts.map +1 -0
  113. package/dist/core/extensions/builtin/terminal/monitor-file-watch.js +33 -0
  114. package/dist/core/extensions/builtin/terminal/monitor-file-watch.js.map +1 -0
  115. package/dist/core/extensions/builtin/terminal/monitor-line-buffer.d.ts +6 -0
  116. package/dist/core/extensions/builtin/terminal/monitor-line-buffer.d.ts.map +1 -0
  117. package/dist/core/extensions/builtin/terminal/monitor-line-buffer.js +22 -0
  118. package/dist/core/extensions/builtin/terminal/monitor-line-buffer.js.map +1 -0
  119. package/dist/core/extensions/builtin/terminal/monitor-registry.d.ts.map +1 -1
  120. package/dist/core/extensions/builtin/terminal/monitor-registry.js +14 -35
  121. package/dist/core/extensions/builtin/terminal/monitor-registry.js.map +1 -1
  122. package/dist/core/extensions/builtin/ttsr/detectors/collapse-near-duplicates.d.ts +38 -0
  123. package/dist/core/extensions/builtin/ttsr/detectors/collapse-near-duplicates.d.ts.map +1 -0
  124. package/dist/core/extensions/builtin/ttsr/detectors/collapse-near-duplicates.js +155 -0
  125. package/dist/core/extensions/builtin/ttsr/detectors/collapse-near-duplicates.js.map +1 -0
  126. package/dist/core/extensions/builtin/ttsr/detectors/collapse.d.ts +2 -0
  127. package/dist/core/extensions/builtin/ttsr/detectors/collapse.d.ts.map +1 -1
  128. package/dist/core/extensions/builtin/ttsr/detectors/collapse.js +4 -1
  129. package/dist/core/extensions/builtin/ttsr/detectors/collapse.js.map +1 -1
  130. package/dist/core/extensions/kernel-tools-context.d.ts +13 -0
  131. package/dist/core/extensions/kernel-tools-context.d.ts.map +1 -0
  132. package/dist/core/extensions/kernel-tools-context.js +3 -0
  133. package/dist/core/extensions/kernel-tools-context.js.map +1 -0
  134. package/dist/core/extensions/runner.d.ts +19 -0
  135. package/dist/core/extensions/runner.d.ts.map +1 -1
  136. package/dist/core/extensions/runner.js +103 -1
  137. package/dist/core/extensions/runner.js.map +1 -1
  138. package/dist/core/extensions/types.d.ts +21 -0
  139. package/dist/core/extensions/types.d.ts.map +1 -1
  140. package/dist/core/extensions/types.js.map +1 -1
  141. package/dist/core/keybindings.d.ts +5 -0
  142. package/dist/core/keybindings.d.ts.map +1 -1
  143. package/dist/core/keybindings.js +1 -0
  144. package/dist/core/keybindings.js.map +1 -1
  145. package/dist/core/resource-loader.d.ts.map +1 -1
  146. package/dist/core/resource-loader.js +9 -17
  147. package/dist/core/resource-loader.js.map +1 -1
  148. package/dist/core/session-manager.d.ts +30 -1
  149. package/dist/core/session-manager.d.ts.map +1 -1
  150. package/dist/core/session-manager.js +92 -5
  151. package/dist/core/session-manager.js.map +1 -1
  152. package/dist/core/session-resident-store.d.ts +33 -7
  153. package/dist/core/session-resident-store.d.ts.map +1 -1
  154. package/dist/core/session-resident-store.js +163 -14
  155. package/dist/core/session-resident-store.js.map +1 -1
  156. package/dist/core/session-write-reservation.d.ts +6 -0
  157. package/dist/core/session-write-reservation.d.ts.map +1 -1
  158. package/dist/core/session-write-reservation.js +19 -0
  159. package/dist/core/session-write-reservation.js.map +1 -1
  160. package/dist/core/settings-manager.d.ts +23 -0
  161. package/dist/core/settings-manager.d.ts.map +1 -1
  162. package/dist/core/settings-manager.js +41 -0
  163. package/dist/core/settings-manager.js.map +1 -1
  164. package/dist/core/slash-commands.d.ts.map +1 -1
  165. package/dist/core/slash-commands.js +2 -1
  166. package/dist/core/slash-commands.js.map +1 -1
  167. package/dist/core/tools/index.d.ts +1 -1
  168. package/dist/core/tools/index.d.ts.map +1 -1
  169. package/dist/core/tools/index.js +4 -3
  170. package/dist/core/tools/index.js.map +1 -1
  171. package/dist/core/tools/read.d.ts +3 -1
  172. package/dist/core/tools/read.d.ts.map +1 -1
  173. package/dist/core/tools/read.js +16 -2
  174. package/dist/core/tools/read.js.map +1 -1
  175. package/dist/index.d.ts +1 -0
  176. package/dist/index.d.ts.map +1 -1
  177. package/dist/index.js +1 -0
  178. package/dist/index.js.map +1 -1
  179. package/dist/main.d.ts.map +1 -1
  180. package/dist/main.js +31 -3
  181. package/dist/main.js.map +1 -1
  182. package/dist/modes/interactive/components/assistant-render-descriptors.d.ts.map +1 -1
  183. package/dist/modes/interactive/components/assistant-render-descriptors.js +12 -5
  184. package/dist/modes/interactive/components/assistant-render-descriptors.js.map +1 -1
  185. package/dist/modes/interactive/components/extension-input.d.ts +2 -0
  186. package/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
  187. package/dist/modes/interactive/components/extension-input.js +5 -0
  188. package/dist/modes/interactive/components/extension-input.js.map +1 -1
  189. package/dist/modes/interactive/interactive-mode.d.ts +7 -1
  190. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  191. package/dist/modes/interactive/interactive-mode.js +35 -16
  192. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  193. package/dist/modes/interactive/tips/catalog/session-tips.js +1 -1
  194. package/dist/modes/interactive/tips/catalog/session-tips.js.map +1 -1
  195. package/dist/modes/print-mode.d.ts +1 -1
  196. package/dist/modes/print-mode.d.ts.map +1 -1
  197. package/dist/modes/print-mode.js +5 -1
  198. package/dist/modes/print-mode.js.map +1 -1
  199. package/dist/modes/rpc/host-watchdog.d.ts.map +1 -1
  200. package/dist/modes/rpc/host-watchdog.js +5 -24
  201. package/dist/modes/rpc/host-watchdog.js.map +1 -1
  202. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  203. package/dist/modes/rpc/rpc-mode.js +3 -8
  204. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  205. package/dist/modes/rpc/session-command-router.d.ts.map +1 -1
  206. package/dist/modes/rpc/session-command-router.js +3 -0
  207. package/dist/modes/rpc/session-command-router.js.map +1 -1
  208. package/dist/modes/rpc/session-worker-client.d.ts +3 -0
  209. package/dist/modes/rpc/session-worker-client.d.ts.map +1 -1
  210. package/dist/modes/rpc/session-worker-client.js +17 -6
  211. package/dist/modes/rpc/session-worker-client.js.map +1 -1
  212. package/dist/modes/rpc/shutdown.d.ts +3 -0
  213. package/dist/modes/rpc/shutdown.d.ts.map +1 -0
  214. package/dist/modes/rpc/shutdown.js +17 -0
  215. package/dist/modes/rpc/shutdown.js.map +1 -0
  216. package/dist/senpi +9 -0
  217. package/docs/extensions.md +5 -2
  218. package/docs/keybindings.md +1 -0
  219. package/docs/session-format.md +1 -1
  220. package/docs/sessions.md +3 -3
  221. package/docs/settings.md +12 -0
  222. package/docs/usage.md +1 -1
  223. package/node_modules/@code-yeongyu/senpi-codemode/CHANGELOG.md +62 -0
  224. package/node_modules/@code-yeongyu/senpi-codemode/README.md +24 -0
  225. package/node_modules/@code-yeongyu/senpi-codemode/package.json +4 -4
  226. package/node_modules/@code-yeongyu/senpi-codemode/src/bridge/http-server.ts +7 -1
  227. package/node_modules/@code-yeongyu/senpi-codemode/src/bridge/kernel-tools-protocol.ts +85 -0
  228. package/node_modules/@code-yeongyu/senpi-codemode/src/bridge/protocol.ts +6 -0
  229. package/node_modules/@code-yeongyu/senpi-codemode/src/bridges/agent-bridge.ts +30 -11
  230. package/node_modules/@code-yeongyu/senpi-codemode/src/extension/session-manager.ts +11 -0
  231. package/node_modules/@code-yeongyu/senpi-codemode/src/index.ts +10 -0
  232. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/jl/prelude.jl +46 -0
  233. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/jl/runner.jl +1 -1
  234. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/context-manager.ts +58 -10
  235. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/kernel-contract.ts +12 -0
  236. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/kernel-tools-context.d.ts +13 -0
  237. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/kernel-tools-context.js +7 -0
  238. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/kernel-tools-define.d.ts +10 -0
  239. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/kernel-tools-define.js +12 -0
  240. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/kernel-tools-errors.js +22 -0
  241. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/kernel-tools-errors.ts +26 -0
  242. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/kernel-tools-host.ts +134 -0
  243. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/kernel-tools-naming.js +28 -0
  244. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/kernel-tools-parse.d.ts +5 -0
  245. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/kernel-tools-parse.js +255 -0
  246. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/kernel-tools-pump.js +105 -0
  247. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/kernel-tools-registry.d.ts +27 -0
  248. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/kernel-tools-registry.js +127 -0
  249. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/kernel-tools-schema.js +69 -0
  250. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/kernel-tools-types.ts +42 -0
  251. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/prelude.ts +2 -0
  252. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/worker-core.js +26 -3
  253. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/worker-runtime.js +20 -8
  254. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/worker-slot.ts +6 -1
  255. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/worker-startup.ts +9 -7
  256. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/workpool.js +37 -0
  257. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/kernel-tools-unavailable.ts +5 -0
  258. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/py/kernel.ts +13 -0
  259. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/py/prelude.py +57 -3
  260. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/rb/prelude.rb +13 -2
  261. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/rb/workpool.rb +38 -0
  262. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/shared/subprocess-kernel.ts +13 -0
  263. package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/shared/subprocess-queue.ts +9 -1
  264. package/node_modules/@code-yeongyu/senpi-codemode/src/prompt/eval-prompt-template.ts +4 -2
  265. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/cell-handler.ts +31 -3
  266. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/detached-cell-manager.ts +36 -71
  267. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/image-resize.ts +52 -0
  268. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/image.ts +37 -72
  269. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/managed-cell.ts +78 -0
  270. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/render.ts +30 -5
  271. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/run-eval-cell.ts +52 -30
  272. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/terminal-snapshot-store.ts +35 -0
  273. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/tool-result-marshal.ts +23 -0
  274. package/node_modules/@code-yeongyu/senpi-codemode/src/tool/types.ts +2 -0
  275. package/node_modules/@earendil-works/pi-agent-core/dist/empty-assistant-recovery.d.ts.map +1 -1
  276. package/node_modules/@earendil-works/pi-agent-core/dist/empty-assistant-recovery.js +51 -12
  277. package/node_modules/@earendil-works/pi-agent-core/dist/empty-assistant-recovery.js.map +1 -1
  278. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/read.d.ts +3 -0
  279. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/read.d.ts.map +1 -1
  280. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/read.js +18 -3
  281. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/read.js.map +1 -1
  282. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/brace-scanner.d.ts +4 -0
  283. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/brace-scanner.d.ts.map +1 -0
  284. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/brace-scanner.js +268 -0
  285. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/brace-scanner.js.map +1 -0
  286. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/header-protection.d.ts +18 -0
  287. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/header-protection.d.ts.map +1 -0
  288. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/header-protection.js +69 -0
  289. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/header-protection.js.map +1 -0
  290. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/index.d.ts +27 -0
  291. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/index.d.ts.map +1 -0
  292. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/index.js +118 -0
  293. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/index.js.map +1 -0
  294. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/lexical-context.d.ts +21 -0
  295. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/lexical-context.d.ts.map +1 -0
  296. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/lexical-context.js +24 -0
  297. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/lexical-context.js.map +1 -0
  298. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/lexical-spans.d.ts +12 -0
  299. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/lexical-spans.d.ts.map +1 -0
  300. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/lexical-spans.js +92 -0
  301. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/lexical-spans.js.map +1 -0
  302. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/types.d.ts +47 -0
  303. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/types.d.ts.map +1 -0
  304. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/types.js +8 -0
  305. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/types.js.map +1 -0
  306. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/segmented-read-view.d.ts +52 -0
  307. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/segmented-read-view.d.ts.map +1 -0
  308. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/segmented-read-view.js +155 -0
  309. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/segmented-read-view.js.map +1 -0
  310. package/node_modules/@earendil-works/pi-agent-core/dist/index.d.ts +2 -0
  311. package/node_modules/@earendil-works/pi-agent-core/dist/index.d.ts.map +1 -1
  312. package/node_modules/@earendil-works/pi-agent-core/dist/index.js +2 -0
  313. package/node_modules/@earendil-works/pi-agent-core/dist/index.js.map +1 -1
  314. package/node_modules/@earendil-works/pi-agent-core/package.json +3 -3
  315. package/node_modules/@earendil-works/pi-ai/dist/index.d.ts +1 -0
  316. package/node_modules/@earendil-works/pi-ai/dist/index.d.ts.map +1 -1
  317. package/node_modules/@earendil-works/pi-ai/dist/index.js +1 -0
  318. package/node_modules/@earendil-works/pi-ai/dist/index.js.map +1 -1
  319. package/node_modules/@earendil-works/pi-ai/dist/providers/data/.manifest.json +1 -1
  320. package/node_modules/@earendil-works/pi-ai/dist/providers/data/alibaba-token-plan.json +1 -1
  321. package/node_modules/@earendil-works/pi-ai/dist/providers/data/amazon-bedrock.json +1 -1
  322. package/node_modules/@earendil-works/pi-ai/dist/providers/data/fireworks.json +1 -1
  323. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openrouter.json +1 -1
  324. package/node_modules/@earendil-works/pi-ai/dist/providers/data/qwen-token-plan.json +1 -1
  325. package/node_modules/@earendil-works/pi-ai/dist/providers/data/venice.json +1 -1
  326. package/node_modules/@earendil-works/pi-ai/dist/providers/data/vercel-ai-gateway.json +1 -1
  327. package/node_modules/@earendil-works/pi-ai/dist/utils/empty-response-errors.d.ts +15 -0
  328. package/node_modules/@earendil-works/pi-ai/dist/utils/empty-response-errors.d.ts.map +1 -0
  329. package/node_modules/@earendil-works/pi-ai/dist/utils/empty-response-errors.js +15 -0
  330. package/node_modules/@earendil-works/pi-ai/dist/utils/empty-response-errors.js.map +1 -0
  331. package/node_modules/@earendil-works/pi-ai/dist/utils/retry.d.ts +23 -0
  332. package/node_modules/@earendil-works/pi-ai/dist/utils/retry.d.ts.map +1 -1
  333. package/node_modules/@earendil-works/pi-ai/dist/utils/retry.js +74 -0
  334. package/node_modules/@earendil-works/pi-ai/dist/utils/retry.js.map +1 -1
  335. package/node_modules/@earendil-works/pi-ai/package.json +2 -2
  336. package/node_modules/@earendil-works/pi-pty/package.json +1 -1
  337. package/node_modules/@earendil-works/pi-telemetry/package.json +1 -1
  338. package/node_modules/@earendil-works/pi-tui/package.json +1 -1
  339. package/package.json +7 -7
@@ -1,23 +1,49 @@
1
+ export declare const RESIDENT_STRING_PREFIX = "\0senpi-resident-string:v1:";
1
2
  export interface ResidentStoreStats {
2
3
  blobCount: number;
3
4
  blobBytes: number;
5
+ evictedCount?: number;
6
+ evictedBytes?: number;
7
+ }
8
+ export interface ResidentStringStoreOptions {
9
+ maxBytes?: number;
10
+ blobsDir?: () => string | undefined;
4
11
  }
5
12
  export declare class ResidentStringStore {
6
13
  private strings;
7
14
  private bytes;
8
- private nextId;
9
- /**
10
- * Externalized strings are a cache of the JSONL, not a second source of truth.
11
- * Keep at most 64 MiB by default; evicted values are materialized from disk by
12
- * SessionManager when a persisted entry is actually read.
13
- */
15
+ private evictedCount;
16
+ private evictedBytes;
14
17
  private readonly maxBytes;
15
- constructor(maxBytes?: number);
18
+ private blobsDir?;
19
+ constructor(options?: ResidentStringStoreOptions);
20
+ configure(options: {
21
+ blobsDir?: () => string | undefined;
22
+ }): void;
16
23
  clear(): void;
24
+ /**
25
+ * Unlike clear(), the blob backing itself survives: consumers of entries that
26
+ * were spilled keep hydrating from it instead of falling back to a full JSONL
27
+ * reload. Used where the store is emptied in place (post-compaction mirror
28
+ * trim) rather than across a session switch.
29
+ */
30
+ spillResident(): void;
17
31
  stats(): ResidentStoreStats;
18
32
  externalize<T>(value: T): T;
19
33
  materialize<T>(value: T, onMissing?: (id: string) => string | undefined): T;
34
+ resolvedBlobsDir(): string | undefined;
35
+ /**
36
+ * Replace large strings reachable from `value` with resident tokens, mutating
37
+ * the object graph in place so consumer-held references stay valid.
38
+ */
39
+ externalizeInPlace(value: unknown): void;
40
+ /** Hydrate resident tokens reachable from `value` in place (inverse of externalizeInPlace). */
41
+ materializeInPlace(value: unknown): void;
42
+ private _mutateStringsInPlace;
20
43
  private externalizeString;
21
44
  private materializeString;
45
+ private _enforceBudget;
46
+ private _writeBlob;
47
+ private _readBlob;
22
48
  }
23
49
  //# sourceMappingURL=session-resident-store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-resident-store.d.ts","sourceRoot":"","sources":["../../src/core/session-resident-store.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,kBAAkB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,mBAAmB;IAC/B,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,MAAM,CAAK;IAEnB;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAElC,YAAY,QAAQ,SAAuC,EAE1D;IAED,KAAK,IAAI,IAAI,CAIZ;IAED,KAAK,IAAI,kBAAkB,CAK1B;IAED,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAE1B;IAED,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,GAAG,CAAC,CAE1E;IAED,OAAO,CAAC,iBAAiB;IAgBzB,OAAO,CAAC,iBAAiB;CAQzB"}
1
+ {"version":3,"file":"session-resident-store.d.ts","sourceRoot":"","sources":["../../src/core/session-resident-store.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,sBAAsB,gCAAoC,CAAC;AAGxE,MAAM,WAAW,kBAAkB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,0BAA0B;IAI1C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;CACpC;AAED,qBAAa,mBAAmB;IAI/B,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,CAA2B;IAE5C,YAAY,OAAO,GAAE,0BAA+B,EAGnD;IAED,SAAS,CAAC,OAAO,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,CAAA;KAAE,GAAG,IAAI,CAEhE;IAED,KAAK,IAAI,IAAI,CAWZ;IAED;;;;;OAKG;IACH,aAAa,IAAI,IAAI,CAWpB;IAED,KAAK,IAAI,kBAAkB,CAO1B;IAED,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAE1B;IAED,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,GAAG,CAAC,CAE1E;IAED,gBAAgB,IAAI,MAAM,GAAG,SAAS,CAErC;IAED;;;OAGG;IACH,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAEvC;IAED,+FAA+F;IAC/F,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAEvC;IAED,OAAO,CAAC,qBAAqB;IAgB7B,OAAO,CAAC,iBAAiB;IAoBzB,OAAO,CAAC,iBAAiB;IAuBzB,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,UAAU;IA6BlB,OAAO,CAAC,SAAS;CAmBjB"}
@@ -1,24 +1,63 @@
1
+ import { createHash } from "node:crypto";
2
+ import { existsSync, mkdirSync, readFileSync, renameSync, rmSync, writeFileSync } from "node:fs";
3
+ import { join } from "node:path";
1
4
  import { Buffer } from "buffer";
2
5
  const RESIDENT_STRING_MIN_BYTES = 32 * 1024;
3
6
  const DEFAULT_RESIDENT_STRING_BUDGET_BYTES = 64 * 1024 * 1024;
4
- const RESIDENT_STRING_PREFIX = "\u0000senpi-resident-string:v1:";
7
+ export const RESIDENT_STRING_PREFIX = "\u0000senpi-resident-string:v1:";
5
8
  const OMIT_JSON_VALUE = Symbol("omit-json-value");
6
9
  export class ResidentStringStore {
7
- constructor(maxBytes = DEFAULT_RESIDENT_STRING_BUDGET_BYTES) {
10
+ constructor(options = {}) {
11
+ // Keyed by content hash: the id IS the reverse index, so the same text always
12
+ // resolves to the same token and the same blob file, across store instances
13
+ // sharing a backing directory and across eviction/spill cycles.
8
14
  this.strings = new Map();
9
15
  this.bytes = 0;
10
- this.nextId = 0;
11
- this.maxBytes = maxBytes;
16
+ this.evictedCount = 0;
17
+ this.evictedBytes = 0;
18
+ this.maxBytes = options.maxBytes ?? DEFAULT_RESIDENT_STRING_BUDGET_BYTES;
19
+ this.blobsDir = options.blobsDir;
20
+ }
21
+ configure(options) {
22
+ this.blobsDir = options.blobsDir;
12
23
  }
13
24
  clear() {
14
25
  this.strings.clear();
15
26
  this.bytes = 0;
16
- this.nextId = 0;
27
+ this.evictedCount = 0;
28
+ this.evictedBytes = 0;
29
+ const dir = this.blobsDir?.();
30
+ if (dir) {
31
+ try {
32
+ rmSync(dir, { force: true, recursive: true });
33
+ }
34
+ catch { }
35
+ }
36
+ }
37
+ /**
38
+ * Unlike clear(), the blob backing itself survives: consumers of entries that
39
+ * were spilled keep hydrating from it instead of falling back to a full JSONL
40
+ * reload. Used where the store is emptied in place (post-compaction mirror
41
+ * trim) rather than across a session switch.
42
+ */
43
+ spillResident() {
44
+ const dir = this.blobsDir?.();
45
+ if (!dir) {
46
+ return;
47
+ }
48
+ for (const [id, text] of this.strings) {
49
+ if (this._writeBlob(id, text)) {
50
+ this.strings.delete(id);
51
+ this.bytes -= Buffer.byteLength(text, "utf8");
52
+ }
53
+ }
17
54
  }
18
55
  stats() {
19
56
  return {
20
57
  blobCount: this.strings.size,
21
58
  blobBytes: this.bytes,
59
+ evictedCount: this.evictedCount,
60
+ evictedBytes: this.evictedBytes,
22
61
  };
23
62
  }
24
63
  externalize(value) {
@@ -27,26 +66,134 @@ export class ResidentStringStore {
27
66
  materialize(value, onMissing) {
28
67
  return transformJson(value, (text) => this.materializeString(text, onMissing));
29
68
  }
69
+ resolvedBlobsDir() {
70
+ return this.blobsDir?.();
71
+ }
72
+ /**
73
+ * Replace large strings reachable from `value` with resident tokens, mutating
74
+ * the object graph in place so consumer-held references stay valid.
75
+ */
76
+ externalizeInPlace(value) {
77
+ this._mutateStringsInPlace(value, new Set(), (text) => this.externalizeString(text));
78
+ }
79
+ /** Hydrate resident tokens reachable from `value` in place (inverse of externalizeInPlace). */
80
+ materializeInPlace(value) {
81
+ this._mutateStringsInPlace(value, new Set(), (text) => this.materializeString(text));
82
+ }
83
+ _mutateStringsInPlace(value, seen, mutate) {
84
+ if (typeof value !== "object" || value === null || seen.has(value)) {
85
+ return;
86
+ }
87
+ seen.add(value);
88
+ const record = value;
89
+ for (const key of Object.keys(record)) {
90
+ const current = record[key];
91
+ if (typeof current === "string") {
92
+ record[key] = mutate(current);
93
+ }
94
+ else if (typeof current === "object" && current !== null) {
95
+ this._mutateStringsInPlace(current, seen, mutate);
96
+ }
97
+ }
98
+ }
30
99
  externalizeString(text) {
31
100
  if (text.length < RESIDENT_STRING_MIN_BYTES || text.startsWith(RESIDENT_STRING_PREFIX)) {
32
101
  return text;
33
102
  }
34
- const id = `${this.nextId++}`;
103
+ const id = createHash("sha256").update(text, "utf8").digest("hex");
104
+ const token = `${RESIDENT_STRING_PREFIX}${id}`;
105
+ if (this.strings.has(id)) {
106
+ // Map insertion order is the eviction order; a re-externalize refreshes recency.
107
+ this.strings.delete(id);
108
+ this.strings.set(id, text);
109
+ return token;
110
+ }
35
111
  this.strings.set(id, text);
36
112
  this.bytes += Buffer.byteLength(text, "utf8");
37
- while (this.bytes > this.maxBytes && this.strings.size > 0) {
38
- const oldest = this.strings.entries().next().value;
39
- this.strings.delete(oldest[0]);
40
- this.bytes -= Buffer.byteLength(oldest[1], "utf8");
41
- }
42
- return `${RESIDENT_STRING_PREFIX}${id}`;
113
+ this._enforceBudget();
114
+ return token;
43
115
  }
44
116
  materializeString(text, onMissing) {
45
117
  if (!text.startsWith(RESIDENT_STRING_PREFIX)) {
46
118
  return text;
47
119
  }
48
120
  const id = text.slice(RESIDENT_STRING_PREFIX.length);
49
- return this.strings.get(id) ?? onMissing?.(id) ?? text;
121
+ const resident = this.strings.get(id);
122
+ if (resident !== undefined) {
123
+ // Map insertion order is the eviction order; a read refreshes recency.
124
+ this.strings.delete(id);
125
+ this.strings.set(id, resident);
126
+ return resident;
127
+ }
128
+ // Hydration is transient on purpose: the string must not re-enter the
129
+ // resident cache, or one bulk read would refill the entire budget. The
130
+ // caller's JSONL recovery remains the authority for a missing blob.
131
+ const hydrated = this._readBlob(id);
132
+ if (hydrated !== undefined) {
133
+ return hydrated;
134
+ }
135
+ return onMissing?.(id) ?? text;
136
+ }
137
+ _enforceBudget() {
138
+ while (this.bytes > this.maxBytes && this.strings.size > 0) {
139
+ const [oldestId, oldest] = this.strings.entries().next().value;
140
+ if (!this._writeBlob(oldestId, oldest)) {
141
+ return;
142
+ }
143
+ this.strings.delete(oldestId);
144
+ this.bytes -= Buffer.byteLength(oldest, "utf8");
145
+ }
146
+ }
147
+ _writeBlob(id, text) {
148
+ const dir = this.blobsDir?.();
149
+ if (!dir) {
150
+ return false;
151
+ }
152
+ const final = join(dir, `${id}.blob`);
153
+ const temp = `${final}.tmp`;
154
+ try {
155
+ mkdirSync(dir, { recursive: true });
156
+ // The id is the content hash, so an existing blob already holds these exact
157
+ // bytes: skip the rewrite but still report the eviction, because the string
158
+ // is leaving memory either way.
159
+ if (!existsSync(final)) {
160
+ // Blobs are JSON envelopes so a truncated or mangled file fails the read
161
+ // below and falls back to JSONL recovery instead of hydrating garbage.
162
+ writeFileSync(temp, JSON.stringify({ v: 1, text }), "utf8");
163
+ renameSync(temp, final);
164
+ }
165
+ }
166
+ catch {
167
+ try {
168
+ rmSync(temp, { force: true });
169
+ }
170
+ catch { }
171
+ return false;
172
+ }
173
+ this.evictedCount++;
174
+ this.evictedBytes += Buffer.byteLength(text, "utf8");
175
+ return true;
176
+ }
177
+ _readBlob(id) {
178
+ const dir = this.blobsDir?.();
179
+ if (!dir) {
180
+ return undefined;
181
+ }
182
+ const file = join(dir, `${id}.blob`);
183
+ try {
184
+ const parsed = JSON.parse(readFileSync(file, "utf8"));
185
+ if (typeof parsed.text === "string") {
186
+ return parsed.text;
187
+ }
188
+ }
189
+ catch { }
190
+ // The blob is missing or unusable. Drop whatever is there so the next eviction
191
+ // of this content writes a readable blob instead of skipping over a broken one.
192
+ try {
193
+ rmSync(file, { force: true });
194
+ }
195
+ catch { }
196
+ return undefined;
50
197
  }
51
198
  }
52
199
  function transformJson(value, transformString) {
@@ -71,6 +218,8 @@ function transformJsonValue(value, transformString, key, seen) {
71
218
  return value;
72
219
  }
73
220
  if (typeof value === "bigint") {
221
+ // JSON.stringify semantics: a BigInt is not serializable, and the store's
222
+ // contract is to fail exactly like it does.
74
223
  throw new TypeError("Do not know how to serialize a BigInt");
75
224
  }
76
225
  if (typeof value === "undefined" || typeof value === "function" || typeof value === "symbol") {
@@ -97,7 +246,7 @@ function transformJsonValue(value, transformString, key, seen) {
97
246
  }
98
247
  const transformed = {};
99
248
  for (const [key, item] of Object.entries(value)) {
100
- const transformedItem = transformJsonValue(item, transformString, key, seen);
249
+ const transformedItem = transformJsonValue(item, transformString, String(key), seen);
101
250
  if (transformedItem !== OMIT_JSON_VALUE) {
102
251
  Object.defineProperty(transformed, key, {
103
252
  configurable: true,
@@ -1 +1 @@
1
- {"version":3,"file":"session-resident-store.js","sourceRoot":"","sources":["../../src/core/session-resident-store.ts"],"names":[],"mappings":"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","sourcesContent":["import { Buffer } from \"buffer\";\n\nconst RESIDENT_STRING_MIN_BYTES = 32 * 1024;\nconst DEFAULT_RESIDENT_STRING_BUDGET_BYTES = 64 * 1024 * 1024;\nconst RESIDENT_STRING_PREFIX = \"\\u0000senpi-resident-string:v1:\";\nconst OMIT_JSON_VALUE = Symbol(\"omit-json-value\");\n\nexport interface ResidentStoreStats {\n\tblobCount: number;\n\tblobBytes: number;\n}\n\nexport class ResidentStringStore {\n\tprivate strings = new Map<string, string>();\n\tprivate bytes = 0;\n\tprivate nextId = 0;\n\n\t/**\n\t * Externalized strings are a cache of the JSONL, not a second source of truth.\n\t * Keep at most 64 MiB by default; evicted values are materialized from disk by\n\t * SessionManager when a persisted entry is actually read.\n\t */\n\tprivate readonly maxBytes: number;\n\n\tconstructor(maxBytes = DEFAULT_RESIDENT_STRING_BUDGET_BYTES) {\n\t\tthis.maxBytes = maxBytes;\n\t}\n\n\tclear(): void {\n\t\tthis.strings.clear();\n\t\tthis.bytes = 0;\n\t\tthis.nextId = 0;\n\t}\n\n\tstats(): ResidentStoreStats {\n\t\treturn {\n\t\t\tblobCount: this.strings.size,\n\t\t\tblobBytes: this.bytes,\n\t\t};\n\t}\n\n\texternalize<T>(value: T): T {\n\t\treturn transformJson(value, (text) => this.externalizeString(text));\n\t}\n\n\tmaterialize<T>(value: T, onMissing?: (id: string) => string | undefined): T {\n\t\treturn transformJson(value, (text) => this.materializeString(text, onMissing));\n\t}\n\n\tprivate externalizeString(text: string): string {\n\t\tif (text.length < RESIDENT_STRING_MIN_BYTES || text.startsWith(RESIDENT_STRING_PREFIX)) {\n\t\t\treturn text;\n\t\t}\n\n\t\tconst id = `${this.nextId++}`;\n\t\tthis.strings.set(id, text);\n\t\tthis.bytes += Buffer.byteLength(text, \"utf8\");\n\t\twhile (this.bytes > this.maxBytes && this.strings.size > 0) {\n\t\t\tconst oldest = this.strings.entries().next().value as [string, string];\n\t\t\tthis.strings.delete(oldest[0]);\n\t\t\tthis.bytes -= Buffer.byteLength(oldest[1], \"utf8\");\n\t\t}\n\t\treturn `${RESIDENT_STRING_PREFIX}${id}`;\n\t}\n\n\tprivate materializeString(text: string, onMissing?: (id: string) => string | undefined): string {\n\t\tif (!text.startsWith(RESIDENT_STRING_PREFIX)) {\n\t\t\treturn text;\n\t\t}\n\n\t\tconst id = text.slice(RESIDENT_STRING_PREFIX.length);\n\t\treturn this.strings.get(id) ?? onMissing?.(id) ?? text;\n\t}\n}\n\nfunction transformJson<T>(value: T, transformString: (text: string) => string): T {\n\tconst transformed = transformJsonValue(value, transformString, \"\", new WeakSet());\n\tif (transformed === OMIT_JSON_VALUE) {\n\t\tconst serialized = JSON.stringify(value);\n\t\tif (serialized === undefined) {\n\t\t\tthrow new SyntaxError(\"JSON-compatible value expected\");\n\t\t}\n\t\treturn JSON.parse(serialized) as T;\n\t}\n\treturn transformed as T;\n}\n\nfunction transformJsonValue(\n\tvalue: unknown,\n\ttransformString: (text: string) => string,\n\tkey: string,\n\tseen: WeakSet<object>,\n): unknown | typeof OMIT_JSON_VALUE {\n\tif (typeof value === \"string\") {\n\t\treturn transformString(value);\n\t}\n\tif (typeof value === \"number\") {\n\t\treturn Number.isFinite(value) ? value : null;\n\t}\n\tif (value === null || typeof value === \"boolean\") {\n\t\treturn value;\n\t}\n\tif (typeof value === \"bigint\") {\n\t\tthrow new TypeError(\"Do not know how to serialize a BigInt\");\n\t}\n\tif (typeof value === \"undefined\" || typeof value === \"function\" || typeof value === \"symbol\") {\n\t\treturn OMIT_JSON_VALUE;\n\t}\n\n\tif (seen.has(value)) {\n\t\tthrow new TypeError(\"Converting circular structure to JSON\");\n\t}\n\tseen.add(value);\n\n\tconst jsonValue = hasJsonSerializer(value) ? value.toJSON(key) : value;\n\tif (jsonValue !== value) {\n\t\tconst transformed = transformJsonValue(jsonValue, transformString, key, seen);\n\t\tseen.delete(value);\n\t\treturn transformed;\n\t}\n\n\tif (Array.isArray(value)) {\n\t\tconst transformed = Array.from({ length: value.length }, (_item, index) => {\n\t\t\tconst item = value[index];\n\t\t\tconst transformedItem = transformJsonValue(item, transformString, String(index), seen);\n\t\t\treturn transformedItem === OMIT_JSON_VALUE ? null : transformedItem;\n\t\t});\n\t\tseen.delete(value);\n\t\treturn transformed;\n\t}\n\n\tconst transformed: Record<string, unknown> = {};\n\tfor (const [key, item] of Object.entries(value)) {\n\t\tconst transformedItem = transformJsonValue(item, transformString, key, seen);\n\t\tif (transformedItem !== OMIT_JSON_VALUE) {\n\t\t\tObject.defineProperty(transformed, key, {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: transformedItem,\n\t\t\t\twritable: true,\n\t\t\t});\n\t\t}\n\t}\n\tseen.delete(value);\n\treturn transformed;\n}\n\nfunction hasJsonSerializer(value: object): value is { toJSON: (key: string) => unknown } {\n\treturn \"toJSON\" in value && typeof value.toJSON === \"function\";\n}\n"]}
1
+ {"version":3,"file":"session-resident-store.js","sourceRoot":"","sources":["../../src/core/session-resident-store.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from \"node:crypto\";\nimport { existsSync, mkdirSync, readFileSync, renameSync, rmSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { Buffer } from \"buffer\";\n\nconst RESIDENT_STRING_MIN_BYTES = 32 * 1024;\nconst DEFAULT_RESIDENT_STRING_BUDGET_BYTES = 64 * 1024 * 1024;\nexport const RESIDENT_STRING_PREFIX = \"\\u0000senpi-resident-string:v1:\";\nconst OMIT_JSON_VALUE = Symbol(\"omit-json-value\");\n\nexport interface ResidentStoreStats {\n\tblobCount: number;\n\tblobBytes: number;\n\tevictedCount?: number;\n\tevictedBytes?: number;\n}\n\nexport interface ResidentStringStoreOptions {\n\t// Eviction only runs when a recoverable backing directory is configured;\n\t// without one, dropping a string would leave consumers holding unreadable\n\t// sentinel tokens, so strings stay resident beyond the budget instead.\n\tmaxBytes?: number;\n\tblobsDir?: () => string | undefined;\n}\n\nexport class ResidentStringStore {\n\t// Keyed by content hash: the id IS the reverse index, so the same text always\n\t// resolves to the same token and the same blob file, across store instances\n\t// sharing a backing directory and across eviction/spill cycles.\n\tprivate strings = new Map<string, string>();\n\tprivate bytes = 0;\n\tprivate evictedCount = 0;\n\tprivate evictedBytes = 0;\n\tprivate readonly maxBytes: number;\n\tprivate blobsDir?: () => string | undefined;\n\n\tconstructor(options: ResidentStringStoreOptions = {}) {\n\t\tthis.maxBytes = options.maxBytes ?? DEFAULT_RESIDENT_STRING_BUDGET_BYTES;\n\t\tthis.blobsDir = options.blobsDir;\n\t}\n\n\tconfigure(options: { blobsDir?: () => string | undefined }): void {\n\t\tthis.blobsDir = options.blobsDir;\n\t}\n\n\tclear(): void {\n\t\tthis.strings.clear();\n\t\tthis.bytes = 0;\n\t\tthis.evictedCount = 0;\n\t\tthis.evictedBytes = 0;\n\t\tconst dir = this.blobsDir?.();\n\t\tif (dir) {\n\t\t\ttry {\n\t\t\t\trmSync(dir, { force: true, recursive: true });\n\t\t\t} catch {}\n\t\t}\n\t}\n\n\t/**\n\t * Unlike clear(), the blob backing itself survives: consumers of entries that\n\t * were spilled keep hydrating from it instead of falling back to a full JSONL\n\t * reload. Used where the store is emptied in place (post-compaction mirror\n\t * trim) rather than across a session switch.\n\t */\n\tspillResident(): void {\n\t\tconst dir = this.blobsDir?.();\n\t\tif (!dir) {\n\t\t\treturn;\n\t\t}\n\t\tfor (const [id, text] of this.strings) {\n\t\t\tif (this._writeBlob(id, text)) {\n\t\t\t\tthis.strings.delete(id);\n\t\t\t\tthis.bytes -= Buffer.byteLength(text, \"utf8\");\n\t\t\t}\n\t\t}\n\t}\n\n\tstats(): ResidentStoreStats {\n\t\treturn {\n\t\t\tblobCount: this.strings.size,\n\t\t\tblobBytes: this.bytes,\n\t\t\tevictedCount: this.evictedCount,\n\t\t\tevictedBytes: this.evictedBytes,\n\t\t};\n\t}\n\n\texternalize<T>(value: T): T {\n\t\treturn transformJson(value, (text) => this.externalizeString(text));\n\t}\n\n\tmaterialize<T>(value: T, onMissing?: (id: string) => string | undefined): T {\n\t\treturn transformJson(value, (text) => this.materializeString(text, onMissing));\n\t}\n\n\tresolvedBlobsDir(): string | undefined {\n\t\treturn this.blobsDir?.();\n\t}\n\n\t/**\n\t * Replace large strings reachable from `value` with resident tokens, mutating\n\t * the object graph in place so consumer-held references stay valid.\n\t */\n\texternalizeInPlace(value: unknown): void {\n\t\tthis._mutateStringsInPlace(value, new Set(), (text) => this.externalizeString(text));\n\t}\n\n\t/** Hydrate resident tokens reachable from `value` in place (inverse of externalizeInPlace). */\n\tmaterializeInPlace(value: unknown): void {\n\t\tthis._mutateStringsInPlace(value, new Set(), (text) => this.materializeString(text));\n\t}\n\n\tprivate _mutateStringsInPlace(value: unknown, seen: Set<object>, mutate: (text: string) => string): void {\n\t\tif (typeof value !== \"object\" || value === null || seen.has(value)) {\n\t\t\treturn;\n\t\t}\n\t\tseen.add(value);\n\t\tconst record = value as Record<string, unknown>;\n\t\tfor (const key of Object.keys(record)) {\n\t\t\tconst current = record[key];\n\t\t\tif (typeof current === \"string\") {\n\t\t\t\trecord[key] = mutate(current);\n\t\t\t} else if (typeof current === \"object\" && current !== null) {\n\t\t\t\tthis._mutateStringsInPlace(current, seen, mutate);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate externalizeString(text: string): string {\n\t\tif (text.length < RESIDENT_STRING_MIN_BYTES || text.startsWith(RESIDENT_STRING_PREFIX)) {\n\t\t\treturn text;\n\t\t}\n\n\t\tconst id = createHash(\"sha256\").update(text, \"utf8\").digest(\"hex\");\n\t\tconst token = `${RESIDENT_STRING_PREFIX}${id}`;\n\t\tif (this.strings.has(id)) {\n\t\t\t// Map insertion order is the eviction order; a re-externalize refreshes recency.\n\t\t\tthis.strings.delete(id);\n\t\t\tthis.strings.set(id, text);\n\t\t\treturn token;\n\t\t}\n\n\t\tthis.strings.set(id, text);\n\t\tthis.bytes += Buffer.byteLength(text, \"utf8\");\n\t\tthis._enforceBudget();\n\t\treturn token;\n\t}\n\n\tprivate materializeString(text: string, onMissing?: (id: string) => string | undefined): string {\n\t\tif (!text.startsWith(RESIDENT_STRING_PREFIX)) {\n\t\t\treturn text;\n\t\t}\n\n\t\tconst id = text.slice(RESIDENT_STRING_PREFIX.length);\n\t\tconst resident = this.strings.get(id);\n\t\tif (resident !== undefined) {\n\t\t\t// Map insertion order is the eviction order; a read refreshes recency.\n\t\t\tthis.strings.delete(id);\n\t\t\tthis.strings.set(id, resident);\n\t\t\treturn resident;\n\t\t}\n\t\t// Hydration is transient on purpose: the string must not re-enter the\n\t\t// resident cache, or one bulk read would refill the entire budget. The\n\t\t// caller's JSONL recovery remains the authority for a missing blob.\n\t\tconst hydrated = this._readBlob(id);\n\t\tif (hydrated !== undefined) {\n\t\t\treturn hydrated;\n\t\t}\n\t\treturn onMissing?.(id) ?? text;\n\t}\n\n\tprivate _enforceBudget(): void {\n\t\twhile (this.bytes > this.maxBytes && this.strings.size > 0) {\n\t\t\tconst [oldestId, oldest] = this.strings.entries().next().value as [string, string];\n\t\t\tif (!this._writeBlob(oldestId, oldest)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.strings.delete(oldestId);\n\t\t\tthis.bytes -= Buffer.byteLength(oldest, \"utf8\");\n\t\t}\n\t}\n\n\tprivate _writeBlob(id: string, text: string): boolean {\n\t\tconst dir = this.blobsDir?.();\n\t\tif (!dir) {\n\t\t\treturn false;\n\t\t}\n\t\tconst final = join(dir, `${id}.blob`);\n\t\tconst temp = `${final}.tmp`;\n\t\ttry {\n\t\t\tmkdirSync(dir, { recursive: true });\n\t\t\t// The id is the content hash, so an existing blob already holds these exact\n\t\t\t// bytes: skip the rewrite but still report the eviction, because the string\n\t\t\t// is leaving memory either way.\n\t\t\tif (!existsSync(final)) {\n\t\t\t\t// Blobs are JSON envelopes so a truncated or mangled file fails the read\n\t\t\t\t// below and falls back to JSONL recovery instead of hydrating garbage.\n\t\t\t\twriteFileSync(temp, JSON.stringify({ v: 1, text }), \"utf8\");\n\t\t\t\trenameSync(temp, final);\n\t\t\t}\n\t\t} catch {\n\t\t\ttry {\n\t\t\t\trmSync(temp, { force: true });\n\t\t\t} catch {}\n\t\t\treturn false;\n\t\t}\n\t\tthis.evictedCount++;\n\t\tthis.evictedBytes += Buffer.byteLength(text, \"utf8\");\n\t\treturn true;\n\t}\n\n\tprivate _readBlob(id: string): string | undefined {\n\t\tconst dir = this.blobsDir?.();\n\t\tif (!dir) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconst file = join(dir, `${id}.blob`);\n\t\ttry {\n\t\t\tconst parsed = JSON.parse(readFileSync(file, \"utf8\")) as { text?: unknown };\n\t\t\tif (typeof parsed.text === \"string\") {\n\t\t\t\treturn parsed.text;\n\t\t\t}\n\t\t} catch {}\n\t\t// The blob is missing or unusable. Drop whatever is there so the next eviction\n\t\t// of this content writes a readable blob instead of skipping over a broken one.\n\t\ttry {\n\t\t\trmSync(file, { force: true });\n\t\t} catch {}\n\t\treturn undefined;\n\t}\n}\n\nfunction transformJson<T>(value: T, transformString: (text: string) => string): T {\n\tconst transformed = transformJsonValue(value, transformString, \"\", new WeakSet());\n\tif (transformed === OMIT_JSON_VALUE) {\n\t\tconst serialized = JSON.stringify(value);\n\t\tif (serialized === undefined) {\n\t\t\tthrow new SyntaxError(\"JSON-compatible value expected\");\n\t\t}\n\t\treturn JSON.parse(serialized) as T;\n\t}\n\treturn transformed as T;\n}\n\nfunction transformJsonValue(\n\tvalue: unknown,\n\ttransformString: (text: string) => string,\n\tkey: string,\n\tseen: WeakSet<object>,\n): unknown | typeof OMIT_JSON_VALUE {\n\tif (typeof value === \"string\") {\n\t\treturn transformString(value);\n\t}\n\tif (typeof value === \"number\") {\n\t\treturn Number.isFinite(value) ? value : null;\n\t}\n\tif (value === null || typeof value === \"boolean\") {\n\t\treturn value;\n\t}\n\tif (typeof value === \"bigint\") {\n\t\t// JSON.stringify semantics: a BigInt is not serializable, and the store's\n\t\t// contract is to fail exactly like it does.\n\t\tthrow new TypeError(\"Do not know how to serialize a BigInt\");\n\t}\n\tif (typeof value === \"undefined\" || typeof value === \"function\" || typeof value === \"symbol\") {\n\t\treturn OMIT_JSON_VALUE;\n\t}\n\n\tif (seen.has(value)) {\n\t\tthrow new TypeError(\"Converting circular structure to JSON\");\n\t}\n\tseen.add(value);\n\n\tconst jsonValue = hasJsonSerializer(value) ? value.toJSON(key) : value;\n\tif (jsonValue !== value) {\n\t\tconst transformed = transformJsonValue(jsonValue, transformString, key, seen);\n\t\tseen.delete(value);\n\t\treturn transformed;\n\t}\n\n\tif (Array.isArray(value)) {\n\t\tconst transformed = Array.from({ length: value.length }, (_item, index) => {\n\t\t\tconst item = value[index];\n\t\t\tconst transformedItem = transformJsonValue(item, transformString, String(index), seen);\n\t\t\treturn transformedItem === OMIT_JSON_VALUE ? null : transformedItem;\n\t\t});\n\t\tseen.delete(value);\n\t\treturn transformed;\n\t}\n\n\tconst transformed: Record<string, unknown> = {};\n\tfor (const [key, item] of Object.entries(value)) {\n\t\tconst transformedItem = transformJsonValue(item, transformString, String(key), seen);\n\t\tif (transformedItem !== OMIT_JSON_VALUE) {\n\t\t\tObject.defineProperty(transformed, key, {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: transformedItem,\n\t\t\t\twritable: true,\n\t\t\t});\n\t\t}\n\t}\n\tseen.delete(value);\n\treturn transformed;\n}\n\nfunction hasJsonSerializer(value: object): value is { toJSON: (key: string) => unknown } {\n\treturn \"toJSON\" in value && typeof value.toJSON === \"function\";\n}\n"]}
@@ -8,6 +8,12 @@ export interface SessionWriterOwner {
8
8
  }
9
9
  export declare function registerSessionWriter(owner: SessionWriterOwner): void;
10
10
  export declare function unregisterSessionWriter(owner: SessionWriterOwner): void;
11
+ /**
12
+ * Whether a persisted writer other than `self` still owns `path`. Callers that release
13
+ * per-session caches ask this so the last owner is the one that clears them; collected
14
+ * writers are pruned here.
15
+ */
16
+ export declare function hasOtherLiveSessionWriter(path: string, self: SessionWriterOwner): boolean;
11
17
  /** Session files still owned by a live persisted writer; collected writers are pruned here. */
12
18
  export declare function liveSessionWritePaths(): string[];
13
19
  //# sourceMappingURL=session-write-reservation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-write-reservation.d.ts","sourceRoot":"","sources":["../../src/core/session-write-reservation.ts"],"names":[],"mappings":"AAGA,wBAAgB,8BAA8B,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAGxF;AAED,mGAAmG;AACnG,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAEtD;AAED,mFAAmF;AACnF,MAAM,WAAW,kBAAkB;IAClC,cAAc,IAAI,MAAM,GAAG,SAAS,CAAC;IACrC,WAAW,IAAI,OAAO,CAAC;CACvB;AAOD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI,CAKrE;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI,CAKvE;AAED,+FAA+F;AAC/F,wBAAgB,qBAAqB,IAAI,MAAM,EAAE,CAYhD"}
1
+ {"version":3,"file":"session-write-reservation.d.ts","sourceRoot":"","sources":["../../src/core/session-write-reservation.ts"],"names":[],"mappings":"AAGA,wBAAgB,8BAA8B,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAGxF;AAED,mGAAmG;AACnG,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAEtD;AAED,mFAAmF;AACnF,MAAM,WAAW,kBAAkB;IAClC,cAAc,IAAI,MAAM,GAAG,SAAS,CAAC;IACrC,WAAW,IAAI,OAAO,CAAC;CACvB;AAOD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI,CAKrE;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI,CAKvE;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAWzF;AAED,+FAA+F;AAC/F,wBAAgB,qBAAqB,IAAI,MAAM,EAAE,CAYhD"}
@@ -27,6 +27,25 @@ export function unregisterSessionWriter(owner) {
27
27
  writerRefs.delete(owner);
28
28
  liveWriters.delete(ref);
29
29
  }
30
+ /**
31
+ * Whether a persisted writer other than `self` still owns `path`. Callers that release
32
+ * per-session caches ask this so the last owner is the one that clears them; collected
33
+ * writers are pruned here.
34
+ */
35
+ export function hasOtherLiveSessionWriter(path, self) {
36
+ for (const ref of liveWriters) {
37
+ const owner = ref.deref();
38
+ if (!owner) {
39
+ liveWriters.delete(ref);
40
+ continue;
41
+ }
42
+ if (owner === self)
43
+ continue;
44
+ if (owner.isPersisted() && owner.getSessionFile() === path)
45
+ return true;
46
+ }
47
+ return false;
48
+ }
30
49
  /** Session files still owned by a live persisted writer; collected writers are pruned here. */
31
50
  export function liveSessionWritePaths() {
32
51
  const paths = [];
@@ -1 +1 @@
1
- {"version":3,"file":"session-write-reservation.js","sourceRoot":"","sources":["../../src/core/session-write-reservation.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAC3F,IAAI,OAA6C,CAAC;AAElD,MAAM,UAAU,8BAA8B,CAAC,WAAmC;IACjF,IAAI,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IAC5E,OAAO,GAAG,WAAW,CAAC;AACvB,CAAC;AAED,mGAAmG;AACnG,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC/C,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;AACjB,CAAC;AAQD,4FAA4F;AAC5F,qFAAqF;AACrF,MAAM,WAAW,GAAG,IAAI,GAAG,EAA+B,CAAC;AAC3D,MAAM,UAAU,GAAG,IAAI,OAAO,EAAmD,CAAC;AAElF,MAAM,UAAU,qBAAqB,CAAC,KAAyB;IAC9D,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;QAAE,OAAO;IAClC,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC;IAC/B,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC3B,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAAyB;IAChE,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAClC,IAAI,CAAC,GAAG;QAAE,OAAO;IACjB,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACzB,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED,+FAA+F;AAC/F,MAAM,UAAU,qBAAqB;IACpC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC;QAC1B,IAAI,CAAC,KAAK,EAAE,CAAC;YACZ,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACxB,SAAS;QACV,CAAC;QACD,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACtE,IAAI,IAAI;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC","sourcesContent":["/** Installed only inside a shared-host session isolate, before constructing any writer. */\nlet reserve: ((path: string) => void) | undefined;\n\nexport function installSessionWriteReservation(reservation: (path: string) => void): void {\n\tif (reserve) throw new Error(\"Session write reservation already installed\");\n\treserve = reservation;\n}\n\n/** Synchronous SessionManager entry points must obtain the host grant before touching a writer. */\nexport function reserveSessionWrite(path: string): void {\n\treserve?.(path);\n}\n\n/** A session writer whose grant must live exactly as long as the writer itself. */\nexport interface SessionWriterOwner {\n\tgetSessionFile(): string | undefined;\n\tisPersisted(): boolean;\n}\n\n// Weak on purpose: a writer nobody references anymore writes nothing, so its grant must not\n// be kept alive by this registry. Identity removal needs the same ref the set holds.\nconst liveWriters = new Set<WeakRef<SessionWriterOwner>>();\nconst writerRefs = new WeakMap<SessionWriterOwner, WeakRef<SessionWriterOwner>>();\n\nexport function registerSessionWriter(owner: SessionWriterOwner): void {\n\tif (writerRefs.has(owner)) return;\n\tconst ref = new WeakRef(owner);\n\twriterRefs.set(owner, ref);\n\tliveWriters.add(ref);\n}\n\nexport function unregisterSessionWriter(owner: SessionWriterOwner): void {\n\tconst ref = writerRefs.get(owner);\n\tif (!ref) return;\n\twriterRefs.delete(owner);\n\tliveWriters.delete(ref);\n}\n\n/** Session files still owned by a live persisted writer; collected writers are pruned here. */\nexport function liveSessionWritePaths(): string[] {\n\tconst paths: string[] = [];\n\tfor (const ref of liveWriters) {\n\t\tconst owner = ref.deref();\n\t\tif (!owner) {\n\t\t\tliveWriters.delete(ref);\n\t\t\tcontinue;\n\t\t}\n\t\tconst path = owner.isPersisted() ? owner.getSessionFile() : undefined;\n\t\tif (path) paths.push(path);\n\t}\n\treturn paths;\n}\n"]}
1
+ {"version":3,"file":"session-write-reservation.js","sourceRoot":"","sources":["../../src/core/session-write-reservation.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAC3F,IAAI,OAA6C,CAAC;AAElD,MAAM,UAAU,8BAA8B,CAAC,WAAmC;IACjF,IAAI,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IAC5E,OAAO,GAAG,WAAW,CAAC;AACvB,CAAC;AAED,mGAAmG;AACnG,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC/C,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;AACjB,CAAC;AAQD,4FAA4F;AAC5F,qFAAqF;AACrF,MAAM,WAAW,GAAG,IAAI,GAAG,EAA+B,CAAC;AAC3D,MAAM,UAAU,GAAG,IAAI,OAAO,EAAmD,CAAC;AAElF,MAAM,UAAU,qBAAqB,CAAC,KAAyB;IAC9D,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;QAAE,OAAO;IAClC,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC;IAC/B,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC3B,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAAyB;IAChE,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAClC,IAAI,CAAC,GAAG;QAAE,OAAO;IACjB,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACzB,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CAAC,IAAY,EAAE,IAAwB;IAC/E,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC;QAC1B,IAAI,CAAC,KAAK,EAAE,CAAC;YACZ,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACxB,SAAS;QACV,CAAC;QACD,IAAI,KAAK,KAAK,IAAI;YAAE,SAAS;QAC7B,IAAI,KAAK,CAAC,WAAW,EAAE,IAAI,KAAK,CAAC,cAAc,EAAE,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;IACzE,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC;AAED,+FAA+F;AAC/F,MAAM,UAAU,qBAAqB;IACpC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC;QAC1B,IAAI,CAAC,KAAK,EAAE,CAAC;YACZ,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACxB,SAAS;QACV,CAAC;QACD,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACtE,IAAI,IAAI;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC","sourcesContent":["/** Installed only inside a shared-host session isolate, before constructing any writer. */\nlet reserve: ((path: string) => void) | undefined;\n\nexport function installSessionWriteReservation(reservation: (path: string) => void): void {\n\tif (reserve) throw new Error(\"Session write reservation already installed\");\n\treserve = reservation;\n}\n\n/** Synchronous SessionManager entry points must obtain the host grant before touching a writer. */\nexport function reserveSessionWrite(path: string): void {\n\treserve?.(path);\n}\n\n/** A session writer whose grant must live exactly as long as the writer itself. */\nexport interface SessionWriterOwner {\n\tgetSessionFile(): string | undefined;\n\tisPersisted(): boolean;\n}\n\n// Weak on purpose: a writer nobody references anymore writes nothing, so its grant must not\n// be kept alive by this registry. Identity removal needs the same ref the set holds.\nconst liveWriters = new Set<WeakRef<SessionWriterOwner>>();\nconst writerRefs = new WeakMap<SessionWriterOwner, WeakRef<SessionWriterOwner>>();\n\nexport function registerSessionWriter(owner: SessionWriterOwner): void {\n\tif (writerRefs.has(owner)) return;\n\tconst ref = new WeakRef(owner);\n\twriterRefs.set(owner, ref);\n\tliveWriters.add(ref);\n}\n\nexport function unregisterSessionWriter(owner: SessionWriterOwner): void {\n\tconst ref = writerRefs.get(owner);\n\tif (!ref) return;\n\twriterRefs.delete(owner);\n\tliveWriters.delete(ref);\n}\n\n/**\n * Whether a persisted writer other than `self` still owns `path`. Callers that release\n * per-session caches ask this so the last owner is the one that clears them; collected\n * writers are pruned here.\n */\nexport function hasOtherLiveSessionWriter(path: string, self: SessionWriterOwner): boolean {\n\tfor (const ref of liveWriters) {\n\t\tconst owner = ref.deref();\n\t\tif (!owner) {\n\t\t\tliveWriters.delete(ref);\n\t\t\tcontinue;\n\t\t}\n\t\tif (owner === self) continue;\n\t\tif (owner.isPersisted() && owner.getSessionFile() === path) return true;\n\t}\n\treturn false;\n}\n\n/** Session files still owned by a live persisted writer; collected writers are pruned here. */\nexport function liveSessionWritePaths(): string[] {\n\tconst paths: string[] = [];\n\tfor (const ref of liveWriters) {\n\t\tconst owner = ref.deref();\n\t\tif (!owner) {\n\t\t\tliveWriters.delete(ref);\n\t\t\tcontinue;\n\t\t}\n\t\tconst path = owner.isPersisted() ? owner.getSessionFile() : undefined;\n\t\tif (path) paths.push(path);\n\t}\n\treturn paths;\n}\n"]}
@@ -10,6 +10,14 @@ import { type BranchSummarySettings, type TerminalMouseMode, type TerminalSettin
10
10
  export type * from "./settings-public-types.ts";
11
11
  export declare const DEFAULT_STREAM_START_TIMEOUT_MS = 300000;
12
12
  export declare const DEFAULT_PROVIDER_STREAM_RETRY_TIMEOUT_MS = 30000;
13
+ /** Warn threshold for a single `session_shutdown` extension handler. */
14
+ export declare const DEFAULT_SESSION_SHUTDOWN_HANDLER_WARN_MS = 2000;
15
+ /**
16
+ * Hard cap for a single `session_shutdown` extension handler. Higher than the
17
+ * 2s warning because several extensions persist durable state at shutdown; a
18
+ * hung handler still must not hold quit/reload/new/resume hostage.
19
+ */
20
+ export declare const DEFAULT_SESSION_SHUTDOWN_HANDLER_TIMEOUT_MS = 10000;
13
21
  export type TuiMode = RendererTuiMode;
14
22
  export type FullscreenExitOutput = "transcript" | "resume-hint";
15
23
  /** Service tier remembered per model; "auto" is an explicit opt-out of an inherited priority tier. */
@@ -104,6 +112,8 @@ export interface Settings {
104
112
  httpProxy?: string;
105
113
  httpIdleTimeoutMs?: number;
106
114
  websocketConnectTimeoutMs?: number;
115
+ sessionShutdownHandlerWarnMs?: number;
116
+ sessionShutdownHandlerTimeoutMs?: number;
107
117
  tuiMode?: TuiMode;
108
118
  fullscreenExitOutput?: FullscreenExitOutput;
109
119
  fullscreenScrollbar?: ScrollViewScrollbar;
@@ -313,6 +323,19 @@ export declare class SettingsManager {
313
323
  private getGlobalFallbackChains;
314
324
  getHttpIdleTimeoutMs(): number;
315
325
  setHttpIdleTimeoutMs(timeoutMs: number): void;
326
+ /**
327
+ * How long one extension's `session_shutdown` handler may run before the host
328
+ * warns about it. 0 disables the warning.
329
+ */
330
+ getSessionShutdownHandlerWarnMs(): number;
331
+ setSessionShutdownHandlerWarnMs(warnMs: number): void;
332
+ /**
333
+ * Hard cap on one extension's `session_shutdown` handler. On expiry the host
334
+ * aborts that handler's `event.signal`, reports an extension error and moves
335
+ * on to the next handler. 0 disables the cap (unbounded, pre-budget behavior).
336
+ */
337
+ getSessionShutdownHandlerTimeoutMs(): number;
338
+ setSessionShutdownHandlerTimeoutMs(timeoutMs: number): void;
316
339
  getProviderRetrySettings(): {
317
340
  timeoutMs?: number;
318
341
  maxRetries?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"settings-manager.d.ts","sourceRoot":"","sources":["../../src/core/settings-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"settings-manager.d.ts","sourceRoot":"","sources":["../../src/core/settings-manager.ts"],"names":[],"mappings":"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"}
@@ -20,6 +20,14 @@ import { ASK_USER_DEFAULT_TIMEOUT_MINUTES, ASK_USER_MAX_TIMEOUT_MINUTES, ASK_USE
20
20
  import { isTerminalMouseMode, } from "./terminal-settings.js";
21
21
  export const DEFAULT_STREAM_START_TIMEOUT_MS = 300_000;
22
22
  export const DEFAULT_PROVIDER_STREAM_RETRY_TIMEOUT_MS = 30_000;
23
+ /** Warn threshold for a single `session_shutdown` extension handler. */
24
+ export const DEFAULT_SESSION_SHUTDOWN_HANDLER_WARN_MS = 2_000;
25
+ /**
26
+ * Hard cap for a single `session_shutdown` extension handler. Higher than the
27
+ * 2s warning because several extensions persist durable state at shutdown; a
28
+ * hung handler still must not hold quit/reload/new/resume hostage.
29
+ */
30
+ export const DEFAULT_SESSION_SHUTDOWN_HANDLER_TIMEOUT_MS = 10_000;
23
31
  const THINKING_LEVEL_VALUES = new Set([
24
32
  "off",
25
33
  "minimal",
@@ -1049,6 +1057,39 @@ export class SettingsManager {
1049
1057
  this.markModified("httpIdleTimeoutMs");
1050
1058
  this.save();
1051
1059
  }
1060
+ /**
1061
+ * How long one extension's `session_shutdown` handler may run before the host
1062
+ * warns about it. 0 disables the warning.
1063
+ */
1064
+ getSessionShutdownHandlerWarnMs() {
1065
+ return (parseTimeoutSetting(this.settings.sessionShutdownHandlerWarnMs, "sessionShutdownHandlerWarnMs") ??
1066
+ DEFAULT_SESSION_SHUTDOWN_HANDLER_WARN_MS);
1067
+ }
1068
+ setSessionShutdownHandlerWarnMs(warnMs) {
1069
+ if (!Number.isFinite(warnMs) || warnMs < 0) {
1070
+ throw new Error(`Invalid sessionShutdownHandlerWarnMs setting: ${String(warnMs)}`);
1071
+ }
1072
+ this.globalSettings.sessionShutdownHandlerWarnMs = Math.floor(warnMs);
1073
+ this.markModified("sessionShutdownHandlerWarnMs");
1074
+ this.save();
1075
+ }
1076
+ /**
1077
+ * Hard cap on one extension's `session_shutdown` handler. On expiry the host
1078
+ * aborts that handler's `event.signal`, reports an extension error and moves
1079
+ * on to the next handler. 0 disables the cap (unbounded, pre-budget behavior).
1080
+ */
1081
+ getSessionShutdownHandlerTimeoutMs() {
1082
+ return (parseTimeoutSetting(this.settings.sessionShutdownHandlerTimeoutMs, "sessionShutdownHandlerTimeoutMs") ??
1083
+ DEFAULT_SESSION_SHUTDOWN_HANDLER_TIMEOUT_MS);
1084
+ }
1085
+ setSessionShutdownHandlerTimeoutMs(timeoutMs) {
1086
+ if (!Number.isFinite(timeoutMs) || timeoutMs < 0) {
1087
+ throw new Error(`Invalid sessionShutdownHandlerTimeoutMs setting: ${String(timeoutMs)}`);
1088
+ }
1089
+ this.globalSettings.sessionShutdownHandlerTimeoutMs = Math.floor(timeoutMs);
1090
+ this.markModified("sessionShutdownHandlerTimeoutMs");
1091
+ this.save();
1092
+ }
1052
1093
  getProviderRetrySettings() {
1053
1094
  return {
1054
1095
  timeoutMs: this.settings.retry?.provider?.timeoutMs,