@code-yeongyu/senpi 2026.9.12 → 2026.9.13

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 (1562) hide show
  1. package/CHANGELOG.md +76 -0
  2. package/README.md +1 -1
  3. package/dist/bun/cli.d.ts +2 -1
  4. package/dist/bun/cli.d.ts.map +1 -1
  5. package/dist/bun/cli.js +5 -8
  6. package/dist/bun/cli.js.map +1 -1
  7. package/dist/bun/runtime-setup.d.ts +2 -0
  8. package/dist/bun/runtime-setup.d.ts.map +1 -0
  9. package/dist/bun/runtime-setup.js +9 -0
  10. package/dist/bun/runtime-setup.js.map +1 -0
  11. package/dist/bun/sandbox-env-setup.d.ts +2 -0
  12. package/dist/bun/sandbox-env-setup.d.ts.map +1 -0
  13. package/dist/bun/sandbox-env-setup.js +4 -0
  14. package/dist/bun/sandbox-env-setup.js.map +1 -0
  15. package/dist/cli/config-selector.d.ts.map +1 -1
  16. package/dist/cli/config-selector.js +2 -1
  17. package/dist/cli/config-selector.js.map +1 -1
  18. package/dist/cli/setup.d.ts +2 -0
  19. package/dist/cli/setup.d.ts.map +1 -0
  20. package/dist/cli/setup.js +12 -0
  21. package/dist/cli/setup.js.map +1 -0
  22. package/dist/cli.js +3 -0
  23. package/dist/cli.js.map +1 -1
  24. package/dist/client/index.d.ts +1 -2
  25. package/dist/client/index.d.ts.map +1 -1
  26. package/dist/client/index.js +1 -2
  27. package/dist/client/index.js.map +1 -1
  28. package/dist/config.d.ts +1 -0
  29. package/dist/config.d.ts.map +1 -1
  30. package/dist/config.js +1 -0
  31. package/dist/config.js.map +1 -1
  32. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  33. package/dist/core/agent-session-runtime.js +18 -6
  34. package/dist/core/agent-session-runtime.js.map +1 -1
  35. package/dist/core/agent-session.d.ts +54 -17
  36. package/dist/core/agent-session.d.ts.map +1 -1
  37. package/dist/core/agent-session.js +153 -157
  38. package/dist/core/agent-session.js.map +1 -1
  39. package/dist/core/compaction/branch-summarization.d.ts +1 -1
  40. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  41. package/dist/core/compaction/branch-summarization.js +6 -4
  42. package/dist/core/compaction/branch-summarization.js.map +1 -1
  43. package/dist/core/compaction-settings-access.d.ts +18 -2
  44. package/dist/core/compaction-settings-access.d.ts.map +1 -1
  45. package/dist/core/compaction-settings-access.js +35 -4
  46. package/dist/core/compaction-settings-access.js.map +1 -1
  47. package/dist/core/compaction-settings-resolver.d.ts +2 -2
  48. package/dist/core/compaction-settings-resolver.d.ts.map +1 -1
  49. package/dist/core/compaction-settings-resolver.js +6 -3
  50. package/dist/core/compaction-settings-resolver.js.map +1 -1
  51. package/dist/core/cursor-history-admission.d.ts +50 -0
  52. package/dist/core/cursor-history-admission.d.ts.map +1 -0
  53. package/dist/core/cursor-history-admission.js +130 -0
  54. package/dist/core/cursor-history-admission.js.map +1 -0
  55. package/dist/core/extensions/builtin/ask-user/extension.d.ts.map +1 -1
  56. package/dist/core/extensions/builtin/ask-user/extension.js +11 -0
  57. package/dist/core/extensions/builtin/ask-user/extension.js.map +1 -1
  58. package/dist/core/extensions/builtin/ask-user/notify.d.ts +12 -0
  59. package/dist/core/extensions/builtin/ask-user/notify.d.ts.map +1 -0
  60. package/dist/core/extensions/builtin/ask-user/notify.js +8 -0
  61. package/dist/core/extensions/builtin/ask-user/notify.js.map +1 -0
  62. package/dist/core/extensions/builtin/ask-user/resume.d.ts +1 -1
  63. package/dist/core/extensions/builtin/ask-user/resume.d.ts.map +1 -1
  64. package/dist/core/extensions/builtin/ask-user/resume.js +16 -11
  65. package/dist/core/extensions/builtin/ask-user/resume.js.map +1 -1
  66. package/dist/core/extensions/builtin/ask-user/tool.d.ts.map +1 -1
  67. package/dist/core/extensions/builtin/ask-user/tool.js +9 -4
  68. package/dist/core/extensions/builtin/ask-user/tool.js.map +1 -1
  69. package/dist/core/extensions/builtin/cursor-cli-oauth/models.d.ts.map +1 -1
  70. package/dist/core/extensions/builtin/cursor-cli-oauth/models.js +2 -1
  71. package/dist/core/extensions/builtin/cursor-cli-oauth/models.js.map +1 -1
  72. package/dist/core/extensions/builtin/hooks/config-loader.d.ts +2 -0
  73. package/dist/core/extensions/builtin/hooks/config-loader.d.ts.map +1 -1
  74. package/dist/core/extensions/builtin/hooks/config-loader.js +27 -0
  75. package/dist/core/extensions/builtin/hooks/config-loader.js.map +1 -1
  76. package/dist/core/extensions/builtin/hooks/dispatcher.js +1 -0
  77. package/dist/core/extensions/builtin/hooks/dispatcher.js.map +1 -1
  78. package/dist/core/extensions/builtin/hooks/index.d.ts.map +1 -1
  79. package/dist/core/extensions/builtin/hooks/index.js +41 -2
  80. package/dist/core/extensions/builtin/hooks/index.js.map +1 -1
  81. package/dist/core/extensions/builtin/hooks/lifecycle-adapter.d.ts +18 -1
  82. package/dist/core/extensions/builtin/hooks/lifecycle-adapter.d.ts.map +1 -1
  83. package/dist/core/extensions/builtin/hooks/lifecycle-adapter.js +36 -1
  84. package/dist/core/extensions/builtin/hooks/lifecycle-adapter.js.map +1 -1
  85. package/dist/core/extensions/builtin/hooks/matcher.js +1 -0
  86. package/dist/core/extensions/builtin/hooks/matcher.js.map +1 -1
  87. package/dist/core/extensions/builtin/hooks/output-parser.js +6 -0
  88. package/dist/core/extensions/builtin/hooks/output-parser.js.map +1 -1
  89. package/dist/core/extensions/builtin/hooks/trust-storage.d.ts +2 -0
  90. package/dist/core/extensions/builtin/hooks/trust-storage.d.ts.map +1 -1
  91. package/dist/core/extensions/builtin/hooks/trust-storage.js +13 -0
  92. package/dist/core/extensions/builtin/hooks/trust-storage.js.map +1 -1
  93. package/dist/core/extensions/builtin/hooks/types.d.ts +14 -2
  94. package/dist/core/extensions/builtin/hooks/types.d.ts.map +1 -1
  95. package/dist/core/extensions/builtin/hooks/types.js +1 -1
  96. package/dist/core/extensions/builtin/hooks/types.js.map +1 -1
  97. package/dist/core/extensions/builtin/prompt-preset/presets.d.ts.map +1 -1
  98. package/dist/core/extensions/builtin/prompt-preset/presets.js +7 -1
  99. package/dist/core/extensions/builtin/prompt-preset/presets.js.map +1 -1
  100. package/dist/core/extensions/loader.d.ts.map +1 -1
  101. package/dist/core/extensions/loader.js +4 -2
  102. package/dist/core/extensions/loader.js.map +1 -1
  103. package/dist/core/keybindings.d.ts +10 -0
  104. package/dist/core/keybindings.d.ts.map +1 -1
  105. package/dist/core/keybindings.js +8 -0
  106. package/dist/core/keybindings.js.map +1 -1
  107. package/dist/core/messages.d.ts +1 -1
  108. package/dist/core/messages.d.ts.map +1 -1
  109. package/dist/core/messages.js.map +1 -1
  110. package/dist/core/model-registry.d.ts +5 -1
  111. package/dist/core/model-registry.d.ts.map +1 -1
  112. package/dist/core/model-registry.js +8 -0
  113. package/dist/core/model-registry.js.map +1 -1
  114. package/dist/core/model-resolver.d.ts.map +1 -1
  115. package/dist/core/model-resolver.js +2 -0
  116. package/dist/core/model-resolver.js.map +1 -1
  117. package/dist/core/model-runtime.d.ts +1 -0
  118. package/dist/core/model-runtime.d.ts.map +1 -1
  119. package/dist/core/model-runtime.js +5 -2
  120. package/dist/core/model-runtime.js.map +1 -1
  121. package/dist/core/retry-fallback/settings.d.ts +2 -0
  122. package/dist/core/retry-fallback/settings.d.ts.map +1 -1
  123. package/dist/core/retry-fallback/settings.js.map +1 -1
  124. package/dist/core/session-manager.d.ts +5 -2
  125. package/dist/core/session-manager.d.ts.map +1 -1
  126. package/dist/core/session-manager.js +68 -19
  127. package/dist/core/session-manager.js.map +1 -1
  128. package/dist/core/session-write-reservation.d.ts +9 -0
  129. package/dist/core/session-write-reservation.d.ts.map +1 -1
  130. package/dist/core/session-write-reservation.js +33 -0
  131. package/dist/core/session-write-reservation.js.map +1 -1
  132. package/dist/core/settings-manager.d.ts +12 -5
  133. package/dist/core/settings-manager.d.ts.map +1 -1
  134. package/dist/core/settings-manager.js +18 -6
  135. package/dist/core/settings-manager.js.map +1 -1
  136. package/dist/core/settings-public-types.d.ts +1 -1
  137. package/dist/core/settings-public-types.d.ts.map +1 -1
  138. package/dist/core/settings-public-types.js.map +1 -1
  139. package/dist/core/skills.d.ts +1 -1
  140. package/dist/core/skills.d.ts.map +1 -1
  141. package/dist/core/skills.js +6 -2
  142. package/dist/core/skills.js.map +1 -1
  143. package/dist/core/system-prompt.d.ts.map +1 -1
  144. package/dist/core/system-prompt.js +8 -9
  145. package/dist/core/system-prompt.js.map +1 -1
  146. package/dist/core/tools/bash.d.ts.map +1 -1
  147. package/dist/core/tools/bash.js +3 -142
  148. package/dist/core/tools/bash.js.map +1 -1
  149. package/dist/core/tools/edit.d.ts +1 -12
  150. package/dist/core/tools/edit.d.ts.map +1 -1
  151. package/dist/core/tools/edit.js +4 -168
  152. package/dist/core/tools/edit.js.map +1 -1
  153. package/dist/core/tools/find.d.ts.map +1 -1
  154. package/dist/core/tools/find.js +2 -53
  155. package/dist/core/tools/find.js.map +1 -1
  156. package/dist/core/tools/grep.d.ts.map +1 -1
  157. package/dist/core/tools/grep.js +2 -58
  158. package/dist/core/tools/grep.js.map +1 -1
  159. package/dist/core/tools/ls.d.ts.map +1 -1
  160. package/dist/core/tools/ls.js +2 -47
  161. package/dist/core/tools/ls.js.map +1 -1
  162. package/dist/core/tools/read.d.ts +1 -4
  163. package/dist/core/tools/read.d.ts.map +1 -1
  164. package/dist/core/tools/read.js +4 -141
  165. package/dist/core/tools/read.js.map +1 -1
  166. package/dist/core/tools/renderers/bash.d.ts +12 -0
  167. package/dist/core/tools/renderers/bash.d.ts.map +1 -0
  168. package/dist/core/tools/renderers/bash.js +156 -0
  169. package/dist/core/tools/renderers/bash.js.map +1 -0
  170. package/dist/core/tools/renderers/edit.d.ts +23 -0
  171. package/dist/core/tools/renderers/edit.d.ts.map +1 -0
  172. package/dist/core/tools/renderers/edit.js +172 -0
  173. package/dist/core/tools/renderers/edit.js.map +1 -0
  174. package/dist/core/tools/renderers/find.d.ts +10 -0
  175. package/dist/core/tools/renderers/find.d.ts.map +1 -0
  176. package/dist/core/tools/renderers/find.js +64 -0
  177. package/dist/core/tools/renderers/find.js.map +1 -0
  178. package/dist/core/tools/renderers/grep.d.ts +10 -0
  179. package/dist/core/tools/renderers/grep.d.ts.map +1 -0
  180. package/dist/core/tools/renderers/grep.js +69 -0
  181. package/dist/core/tools/renderers/grep.js.map +1 -0
  182. package/dist/core/tools/renderers/index.d.ts +28 -0
  183. package/dist/core/tools/renderers/index.d.ts.map +1 -0
  184. package/dist/core/tools/renderers/index.js +47 -0
  185. package/dist/core/tools/renderers/index.js.map +1 -0
  186. package/dist/core/tools/renderers/ls.d.ts +10 -0
  187. package/dist/core/tools/renderers/ls.d.ts.map +1 -0
  188. package/dist/core/tools/renderers/ls.js +58 -0
  189. package/dist/core/tools/renderers/ls.js.map +1 -0
  190. package/dist/core/tools/renderers/read.d.ts +19 -0
  191. package/dist/core/tools/renderers/read.d.ts.map +1 -0
  192. package/dist/core/tools/renderers/read.js +149 -0
  193. package/dist/core/tools/renderers/read.js.map +1 -0
  194. package/dist/core/tools/renderers/write.d.ts +10 -0
  195. package/dist/core/tools/renderers/write.d.ts.map +1 -0
  196. package/dist/core/tools/renderers/write.js +162 -0
  197. package/dist/core/tools/renderers/write.js.map +1 -0
  198. package/dist/core/tools/write.d.ts.map +1 -1
  199. package/dist/core/tools/write.js +4 -153
  200. package/dist/core/tools/write.js.map +1 -1
  201. package/dist/index.d.ts +2 -2
  202. package/dist/index.d.ts.map +1 -1
  203. package/dist/index.js.map +1 -1
  204. package/dist/migrations.d.ts.map +1 -1
  205. package/dist/migrations.js +2 -2
  206. package/dist/migrations.js.map +1 -1
  207. package/dist/modes/app-server/threads/turn-runtime.d.ts +3 -1
  208. package/dist/modes/app-server/threads/turn-runtime.d.ts.map +1 -1
  209. package/dist/modes/app-server/threads/turn-runtime.js.map +1 -1
  210. package/dist/modes/app-server/threads/turns.js +1 -1
  211. package/dist/modes/app-server/threads/turns.js.map +1 -1
  212. package/dist/modes/app-server/turn-adapter.js +4 -2
  213. package/dist/modes/app-server/turn-adapter.js.map +1 -1
  214. package/dist/modes/interactive/chat-viewport.d.ts +22 -0
  215. package/dist/modes/interactive/chat-viewport.d.ts.map +1 -0
  216. package/dist/modes/interactive/chat-viewport.js +29 -0
  217. package/dist/modes/interactive/chat-viewport.js.map +1 -0
  218. package/dist/modes/interactive/components/ask-user-answer-key.d.ts +14 -0
  219. package/dist/modes/interactive/components/ask-user-answer-key.d.ts.map +1 -0
  220. package/dist/modes/interactive/components/ask-user-answer-key.js +65 -0
  221. package/dist/modes/interactive/components/ask-user-answer-key.js.map +1 -0
  222. package/dist/modes/interactive/components/ask-user-async-widget.d.ts +17 -12
  223. package/dist/modes/interactive/components/ask-user-async-widget.d.ts.map +1 -1
  224. package/dist/modes/interactive/components/ask-user-async-widget.js +47 -23
  225. package/dist/modes/interactive/components/ask-user-async-widget.js.map +1 -1
  226. package/dist/modes/interactive/components/assistant-message.d.ts +7 -0
  227. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  228. package/dist/modes/interactive/components/assistant-message.js +26 -2
  229. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  230. package/dist/modes/interactive/components/assistant-render-descriptors.d.ts +4 -0
  231. package/dist/modes/interactive/components/assistant-render-descriptors.d.ts.map +1 -1
  232. package/dist/modes/interactive/components/assistant-render-descriptors.js +8 -5
  233. package/dist/modes/interactive/components/assistant-render-descriptors.js.map +1 -1
  234. package/dist/modes/interactive/components/custom-editor.d.ts +10 -1
  235. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
  236. package/dist/modes/interactive/components/custom-editor.js +37 -1
  237. package/dist/modes/interactive/components/custom-editor.js.map +1 -1
  238. package/dist/modes/interactive/components/index.d.ts +1 -1
  239. package/dist/modes/interactive/components/index.d.ts.map +1 -1
  240. package/dist/modes/interactive/components/index.js.map +1 -1
  241. package/dist/modes/interactive/components/scoped-models-selector.js +8 -8
  242. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
  243. package/dist/modes/interactive/components/status-indicator.d.ts +4 -1
  244. package/dist/modes/interactive/components/status-indicator.d.ts.map +1 -1
  245. package/dist/modes/interactive/components/status-indicator.js +14 -2
  246. package/dist/modes/interactive/components/status-indicator.js.map +1 -1
  247. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  248. package/dist/modes/interactive/components/thinking-selector.js +4 -4
  249. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  250. package/dist/modes/interactive/components/tool-execution-renderer.d.ts +4 -1
  251. package/dist/modes/interactive/components/tool-execution-renderer.d.ts.map +1 -1
  252. package/dist/modes/interactive/components/tool-execution-renderer.js +23 -10
  253. package/dist/modes/interactive/components/tool-execution-renderer.js.map +1 -1
  254. package/dist/modes/interactive/components/tool-execution-types.d.ts +18 -2
  255. package/dist/modes/interactive/components/tool-execution-types.d.ts.map +1 -1
  256. package/dist/modes/interactive/components/tool-execution-types.js.map +1 -1
  257. package/dist/modes/interactive/components/tool-execution.d.ts +3 -3
  258. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  259. package/dist/modes/interactive/components/tool-execution.js +5 -0
  260. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  261. package/dist/modes/interactive/interactive-mode.d.ts +10 -15
  262. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  263. package/dist/modes/interactive/interactive-mode.js +178 -138
  264. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  265. package/dist/modes/interactive/theme/dark.json +2 -1
  266. package/dist/modes/interactive/theme/grok-day.json +2 -1
  267. package/dist/modes/interactive/theme/grok-night.json +2 -1
  268. package/dist/modes/interactive/theme/light.json +2 -1
  269. package/dist/modes/interactive/theme/theme-controller.d.ts +1 -0
  270. package/dist/modes/interactive/theme/theme-controller.d.ts.map +1 -1
  271. package/dist/modes/interactive/theme/theme-controller.js +5 -0
  272. package/dist/modes/interactive/theme/theme-controller.js.map +1 -1
  273. package/dist/modes/interactive/theme/theme-json.d.ts +84 -0
  274. package/dist/modes/interactive/theme/theme-json.d.ts.map +1 -0
  275. package/dist/modes/interactive/theme/theme-json.js +130 -0
  276. package/dist/modes/interactive/theme/theme-json.js.map +1 -0
  277. package/dist/modes/interactive/theme/theme-schema.json +6 -2
  278. package/dist/modes/interactive/theme/theme.d.ts +10 -5
  279. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  280. package/dist/modes/interactive/theme/theme.js +14 -117
  281. package/dist/modes/interactive/theme/theme.js.map +1 -1
  282. package/dist/modes/interactive/tips/catalog/input-tips.d.ts +5 -0
  283. package/dist/modes/interactive/tips/catalog/input-tips.d.ts.map +1 -1
  284. package/dist/modes/interactive/tips/catalog/input-tips.js +5 -0
  285. package/dist/modes/interactive/tips/catalog/input-tips.js.map +1 -1
  286. package/dist/modes/interactive/tui-renderer.d.ts +21 -0
  287. package/dist/modes/interactive/tui-renderer.d.ts.map +1 -0
  288. package/dist/modes/interactive/tui-renderer.js +67 -0
  289. package/dist/modes/interactive/tui-renderer.js.map +1 -0
  290. package/dist/modes/rpc/connection-handler.d.ts.map +1 -1
  291. package/dist/modes/rpc/connection-handler.js +8 -2
  292. package/dist/modes/rpc/connection-handler.js.map +1 -1
  293. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  294. package/dist/modes/rpc/rpc-client.js +11 -1
  295. package/dist/modes/rpc/rpc-client.js.map +1 -1
  296. package/dist/modes/rpc/rpc-types.d.ts +2 -1
  297. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  298. package/dist/modes/rpc/rpc-types.js +1 -0
  299. package/dist/modes/rpc/rpc-types.js.map +1 -1
  300. package/dist/modes/rpc/session-path-reservations.d.ts +30 -0
  301. package/dist/modes/rpc/session-path-reservations.d.ts.map +1 -0
  302. package/dist/modes/rpc/session-path-reservations.js +58 -0
  303. package/dist/modes/rpc/session-path-reservations.js.map +1 -0
  304. package/dist/modes/rpc/session-registry.d.ts +3 -1
  305. package/dist/modes/rpc/session-registry.d.ts.map +1 -1
  306. package/dist/modes/rpc/session-registry.js.map +1 -1
  307. package/dist/modes/rpc/session-worker-client.d.ts +10 -8
  308. package/dist/modes/rpc/session-worker-client.d.ts.map +1 -1
  309. package/dist/modes/rpc/session-worker-client.js +14 -23
  310. package/dist/modes/rpc/session-worker-client.js.map +1 -1
  311. package/dist/modes/rpc/session-worker-credit.d.ts +17 -0
  312. package/dist/modes/rpc/session-worker-credit.d.ts.map +1 -0
  313. package/dist/modes/rpc/session-worker-credit.js +39 -0
  314. package/dist/modes/rpc/session-worker-credit.js.map +1 -0
  315. package/dist/modes/rpc/session-worker-protocol.d.ts +10 -0
  316. package/dist/modes/rpc/session-worker-protocol.d.ts.map +1 -1
  317. package/dist/modes/rpc/session-worker-protocol.js +2 -0
  318. package/dist/modes/rpc/session-worker-protocol.js.map +1 -1
  319. package/dist/modes/rpc/session-worker-signals.d.ts +7 -0
  320. package/dist/modes/rpc/session-worker-signals.d.ts.map +1 -0
  321. package/dist/modes/rpc/session-worker-signals.js +19 -0
  322. package/dist/modes/rpc/session-worker-signals.js.map +1 -0
  323. package/dist/modes/rpc/session-worker.js +12 -16
  324. package/dist/modes/rpc/session-worker.js.map +1 -1
  325. package/dist/modes/rpc/worker-session-registry.d.ts +12 -0
  326. package/dist/modes/rpc/worker-session-registry.d.ts.map +1 -1
  327. package/dist/modes/rpc/worker-session-registry.js +51 -24
  328. package/dist/modes/rpc/worker-session-registry.js.map +1 -1
  329. package/dist/senpi +3 -0
  330. package/dist/utils/clipboard-command.d.ts +7 -0
  331. package/dist/utils/clipboard-command.d.ts.map +1 -0
  332. package/dist/utils/clipboard-command.js +45 -0
  333. package/dist/utils/clipboard-command.js.map +1 -0
  334. package/dist/utils/clipboard-image.d.ts.map +1 -1
  335. package/dist/utils/clipboard-image.js +52 -69
  336. package/dist/utils/clipboard-image.js.map +1 -1
  337. package/dist/utils/clipboard.d.ts.map +1 -1
  338. package/dist/utils/clipboard.js +49 -126
  339. package/dist/utils/clipboard.js.map +1 -1
  340. package/dist/utils/exif-orientation.d.ts.map +1 -1
  341. package/dist/utils/exif-orientation.js +2 -3
  342. package/dist/utils/exif-orientation.js.map +1 -1
  343. package/dist/utils/tools-manager.d.ts +1 -0
  344. package/dist/utils/tools-manager.d.ts.map +1 -1
  345. package/dist/utils/tools-manager.js +41 -19
  346. package/dist/utils/tools-manager.js.map +1 -1
  347. package/docs/compaction.md +39 -13
  348. package/docs/containerization.md +45 -0
  349. package/docs/development.md +19 -0
  350. package/docs/docs.json +4 -0
  351. package/docs/environment-variables.md +2 -0
  352. package/docs/extensions.md +21 -10
  353. package/docs/keybindings.md +7 -2
  354. package/docs/models.md +1 -1
  355. package/docs/providers.md +1 -1
  356. package/docs/rpc.md +16 -8
  357. package/docs/sdk.md +7 -0
  358. package/docs/session-format.md +52 -38
  359. package/docs/settings.md +40 -4
  360. package/docs/skills.md +1 -1
  361. package/docs/termux.md +0 -1
  362. package/docs/themes.md +8 -6
  363. package/docs/tui.md +22 -3
  364. package/examples/README.md +3 -0
  365. package/examples/extensions/dynamic-resources/dynamic.json +2 -0
  366. package/examples/plugins/pi-example-plugin/README.md +38 -0
  367. package/examples/plugins/pi-example-plugin/package.json +10 -0
  368. package/examples/plugins/pi-example-plugin/src/contract.ts +13 -0
  369. package/examples/plugins/pi-example-plugin/src/session.ts +23 -0
  370. package/examples/plugins/pi-example-plugin/src/tui.ts +31 -0
  371. package/node_modules/@aws-sdk/client-bedrock-runtime/dist-cjs/index.js +1 -1
  372. package/node_modules/@aws-sdk/client-bedrock-runtime/package.json +3 -3
  373. package/node_modules/@aws-sdk/core/dist-cjs/submodules/util/index.js +5 -0
  374. package/node_modules/@aws-sdk/core/dist-es/submodules/util/hasOwn.js +3 -0
  375. package/node_modules/@aws-sdk/core/dist-es/submodules/util/index.js +1 -0
  376. package/node_modules/@aws-sdk/core/dist-types/submodules/util/hasOwn.d.ts +4 -0
  377. package/node_modules/@aws-sdk/core/dist-types/submodules/util/index.d.ts +1 -0
  378. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/util/hasOwn.d.ts +1 -0
  379. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/util/index.d.ts +1 -0
  380. package/node_modules/@aws-sdk/core/package.json +1 -1
  381. package/node_modules/@aws-sdk/credential-provider-env/package.json +2 -2
  382. package/node_modules/@aws-sdk/credential-provider-http/package.json +2 -2
  383. package/node_modules/@aws-sdk/credential-provider-ini/package.json +9 -9
  384. package/node_modules/@aws-sdk/credential-provider-login/package.json +3 -3
  385. package/node_modules/@aws-sdk/credential-provider-node/dist-cjs/index.js +2 -0
  386. package/node_modules/@aws-sdk/credential-provider-node/dist-es/runtime/memoize-chain.js +2 -0
  387. package/node_modules/@aws-sdk/credential-provider-node/package.json +7 -7
  388. package/node_modules/@aws-sdk/credential-provider-process/package.json +2 -2
  389. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/LICENSE +201 -0
  390. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/README.md +62 -0
  391. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-cjs/index.js +158 -0
  392. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-es/constants.js +2 -0
  393. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-es/fromEnvSigningName.js +16 -0
  394. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-es/fromSso.js +84 -0
  395. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-es/fromStatic.js +8 -0
  396. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-es/getNewSsoOidcToken.js +11 -0
  397. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-es/getSsoOidcClient.js +10 -0
  398. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-es/index.js +4 -0
  399. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-es/nodeProvider.js +5 -0
  400. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-es/validateTokenExpiry.js +7 -0
  401. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-es/validateTokenKey.js +7 -0
  402. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-es/writeSSOTokenToFile.js +8 -0
  403. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-types/constants.d.ts +8 -0
  404. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-types/fromEnvSigningName.d.ts +18 -0
  405. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-types/fromSso.d.ts +12 -0
  406. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-types/fromStatic.d.ts +9 -0
  407. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-types/getNewSsoOidcToken.d.ts +8 -0
  408. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-types/getSsoOidcClient.d.ts +7 -0
  409. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-types/index.d.ts +7 -0
  410. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-types/nodeProvider.d.ts +18 -0
  411. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-types/ts3.4/constants.d.ts +3 -0
  412. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-types/ts3.4/fromEnvSigningName.d.ts +8 -0
  413. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-types/ts3.4/fromSso.d.ts +10 -0
  414. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-types/ts3.4/fromStatic.d.ts +5 -0
  415. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-types/ts3.4/getNewSsoOidcToken.d.ts +9 -0
  416. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-types/ts3.4/getSsoOidcClient.d.ts +7 -0
  417. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-types/ts3.4/index.d.ts +7 -0
  418. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-types/ts3.4/nodeProvider.d.ts +3 -0
  419. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-types/ts3.4/validateTokenExpiry.d.ts +2 -0
  420. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-types/ts3.4/validateTokenKey.d.ts +1 -0
  421. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-types/ts3.4/writeSSOTokenToFile.d.ts +2 -0
  422. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-types/validateTokenExpiry.d.ts +5 -0
  423. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-types/validateTokenKey.d.ts +4 -0
  424. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-types/writeSSOTokenToFile.d.ts +5 -0
  425. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/package.json +69 -0
  426. package/node_modules/@aws-sdk/credential-provider-sso/package.json +4 -4
  427. package/node_modules/@aws-sdk/credential-provider-web-identity/package.json +3 -3
  428. package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/cognito-identity/index.js +1 -1
  429. package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/signin/index.js +1 -1
  430. package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sso/index.js +1 -1
  431. package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sso-oidc/index.js +1 -1
  432. package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sts/index.js +1 -1
  433. package/node_modules/@aws-sdk/nested-clients/package.json +2 -2
  434. package/node_modules/@aws-sdk/token-providers/package.json +1 -1
  435. package/node_modules/@code-yeongyu/senpi-codemode/CHANGELOG.md +36 -0
  436. package/node_modules/@code-yeongyu/senpi-codemode/package.json +5 -5
  437. package/node_modules/@earendil-works/chord/README.md +205 -0
  438. package/node_modules/@earendil-works/chord/dist/api.d.ts +15 -0
  439. package/node_modules/@earendil-works/chord/dist/api.d.ts.map +1 -0
  440. package/node_modules/@earendil-works/chord/dist/api.js +72 -0
  441. package/node_modules/@earendil-works/chord/dist/api.js.map +1 -0
  442. package/node_modules/@earendil-works/chord/dist/bundler.d.ts +6 -0
  443. package/node_modules/@earendil-works/chord/dist/bundler.d.ts.map +1 -0
  444. package/node_modules/@earendil-works/chord/dist/bundler.js +3 -0
  445. package/node_modules/@earendil-works/chord/dist/bundler.js.map +1 -0
  446. package/node_modules/@earendil-works/chord/dist/context/index.d.ts +24 -0
  447. package/node_modules/@earendil-works/chord/dist/context/index.d.ts.map +1 -0
  448. package/node_modules/@earendil-works/chord/dist/context/index.js +97 -0
  449. package/node_modules/@earendil-works/chord/dist/context/index.js.map +1 -0
  450. package/node_modules/@earendil-works/chord/dist/delta/index.d.ts +119 -0
  451. package/node_modules/@earendil-works/chord/dist/delta/index.d.ts.map +1 -0
  452. package/node_modules/@earendil-works/chord/dist/delta/index.js +1209 -0
  453. package/node_modules/@earendil-works/chord/dist/delta/index.js.map +1 -0
  454. package/node_modules/@earendil-works/chord/dist/facets/host.d.ts +12 -0
  455. package/node_modules/@earendil-works/chord/dist/facets/host.d.ts.map +1 -0
  456. package/node_modules/@earendil-works/chord/dist/facets/host.js +762 -0
  457. package/node_modules/@earendil-works/chord/dist/facets/host.js.map +1 -0
  458. package/node_modules/@earendil-works/chord/dist/facets/loader.d.ts +3 -0
  459. package/node_modules/@earendil-works/chord/dist/facets/loader.d.ts.map +1 -0
  460. package/node_modules/@earendil-works/chord/dist/facets/loader.js +5 -0
  461. package/node_modules/@earendil-works/chord/dist/facets/loader.js.map +1 -0
  462. package/node_modules/@earendil-works/chord/dist/index.d.ts +11 -0
  463. package/node_modules/@earendil-works/chord/dist/index.d.ts.map +1 -0
  464. package/node_modules/@earendil-works/chord/dist/index.js +10 -0
  465. package/node_modules/@earendil-works/chord/dist/index.js.map +1 -0
  466. package/node_modules/@earendil-works/chord/dist/json.d.ts +4 -0
  467. package/node_modules/@earendil-works/chord/dist/json.d.ts.map +1 -0
  468. package/node_modules/@earendil-works/chord/dist/json.js +57 -0
  469. package/node_modules/@earendil-works/chord/dist/json.js.map +1 -0
  470. package/node_modules/@earendil-works/chord/dist/node/bundle-loader.d.ts +30 -0
  471. package/node_modules/@earendil-works/chord/dist/node/bundle-loader.d.ts.map +1 -0
  472. package/node_modules/@earendil-works/chord/dist/node/bundle-loader.js +377 -0
  473. package/node_modules/@earendil-works/chord/dist/node/bundle-loader.js.map +1 -0
  474. package/node_modules/@earendil-works/chord/dist/node/bundle.d.ts +26 -0
  475. package/node_modules/@earendil-works/chord/dist/node/bundle.d.ts.map +1 -0
  476. package/node_modules/@earendil-works/chord/dist/node/bundle.js +183 -0
  477. package/node_modules/@earendil-works/chord/dist/node/bundle.js.map +1 -0
  478. package/node_modules/@earendil-works/chord/dist/node/manifest.d.ts +36 -0
  479. package/node_modules/@earendil-works/chord/dist/node/manifest.d.ts.map +1 -0
  480. package/node_modules/@earendil-works/chord/dist/node/manifest.js +6 -0
  481. package/node_modules/@earendil-works/chord/dist/node/manifest.js.map +1 -0
  482. package/node_modules/@earendil-works/chord/dist/node/package.d.ts +15 -0
  483. package/node_modules/@earendil-works/chord/dist/node/package.d.ts.map +1 -0
  484. package/node_modules/@earendil-works/chord/dist/node/package.js +199 -0
  485. package/node_modules/@earendil-works/chord/dist/node/package.js.map +1 -0
  486. package/node_modules/@earendil-works/chord/dist/node.d.ts +5 -0
  487. package/node_modules/@earendil-works/chord/dist/node.d.ts.map +1 -0
  488. package/node_modules/@earendil-works/chord/dist/node.js +3 -0
  489. package/node_modules/@earendil-works/chord/dist/node.js.map +1 -0
  490. package/node_modules/@earendil-works/chord/dist/services/consumer.d.ts +11 -0
  491. package/node_modules/@earendil-works/chord/dist/services/consumer.d.ts.map +1 -0
  492. package/node_modules/@earendil-works/chord/dist/services/consumer.js +535 -0
  493. package/node_modules/@earendil-works/chord/dist/services/consumer.js.map +1 -0
  494. package/node_modules/@earendil-works/chord/dist/services/errors.d.ts +8 -0
  495. package/node_modules/@earendil-works/chord/dist/services/errors.d.ts.map +1 -0
  496. package/node_modules/@earendil-works/chord/dist/services/errors.js +21 -0
  497. package/node_modules/@earendil-works/chord/dist/services/errors.js.map +1 -0
  498. package/node_modules/@earendil-works/chord/dist/services/handle.d.ts +15 -0
  499. package/node_modules/@earendil-works/chord/dist/services/handle.d.ts.map +1 -0
  500. package/node_modules/@earendil-works/chord/dist/services/handle.js +99 -0
  501. package/node_modules/@earendil-works/chord/dist/services/handle.js.map +1 -0
  502. package/node_modules/@earendil-works/chord/dist/services/instances.d.ts +25 -0
  503. package/node_modules/@earendil-works/chord/dist/services/instances.d.ts.map +1 -0
  504. package/node_modules/@earendil-works/chord/dist/services/instances.js +137 -0
  505. package/node_modules/@earendil-works/chord/dist/services/instances.js.map +1 -0
  506. package/node_modules/@earendil-works/chord/dist/services/loopback.d.ts +5 -0
  507. package/node_modules/@earendil-works/chord/dist/services/loopback.d.ts.map +1 -0
  508. package/node_modules/@earendil-works/chord/dist/services/loopback.js +15 -0
  509. package/node_modules/@earendil-works/chord/dist/services/loopback.js.map +1 -0
  510. package/node_modules/@earendil-works/chord/dist/services/provider.d.ts +37 -0
  511. package/node_modules/@earendil-works/chord/dist/services/provider.d.ts.map +1 -0
  512. package/node_modules/@earendil-works/chord/dist/services/provider.js +472 -0
  513. package/node_modules/@earendil-works/chord/dist/services/provider.js.map +1 -0
  514. package/node_modules/@earendil-works/chord/dist/services/state-codec.d.ts +15 -0
  515. package/node_modules/@earendil-works/chord/dist/services/state-codec.d.ts.map +1 -0
  516. package/node_modules/@earendil-works/chord/dist/services/state-codec.js +115 -0
  517. package/node_modules/@earendil-works/chord/dist/services/state-codec.js.map +1 -0
  518. package/node_modules/@earendil-works/chord/dist/services/state-internals.d.ts +11 -0
  519. package/node_modules/@earendil-works/chord/dist/services/state-internals.d.ts.map +1 -0
  520. package/node_modules/@earendil-works/chord/dist/services/state-internals.js +10 -0
  521. package/node_modules/@earendil-works/chord/dist/services/state-internals.js.map +1 -0
  522. package/node_modules/@earendil-works/chord/dist/services/state.d.ts +23 -0
  523. package/node_modules/@earendil-works/chord/dist/services/state.d.ts.map +1 -0
  524. package/node_modules/@earendil-works/chord/dist/services/state.js +124 -0
  525. package/node_modules/@earendil-works/chord/dist/services/state.js.map +1 -0
  526. package/node_modules/@earendil-works/chord/dist/services/wire.d.ts +60 -0
  527. package/node_modules/@earendil-works/chord/dist/services/wire.d.ts.map +1 -0
  528. package/node_modules/@earendil-works/chord/dist/services/wire.js +173 -0
  529. package/node_modules/@earendil-works/chord/dist/services/wire.js.map +1 -0
  530. package/node_modules/@earendil-works/chord/dist/types.d.ts +203 -0
  531. package/node_modules/@earendil-works/chord/dist/types.d.ts.map +1 -0
  532. package/node_modules/@earendil-works/chord/dist/types.js +2 -0
  533. package/node_modules/@earendil-works/chord/dist/types.js.map +1 -0
  534. package/node_modules/@earendil-works/chord/package.json +73 -0
  535. package/node_modules/@earendil-works/pi-agent-core/README.md +4 -0
  536. package/node_modules/@earendil-works/pi-agent-core/dist/harness/agent-harness.d.ts +639 -384
  537. package/node_modules/@earendil-works/pi-agent-core/dist/harness/agent-harness.d.ts.map +1 -1
  538. package/node_modules/@earendil-works/pi-agent-core/dist/harness/agent-harness.js +5 -250
  539. package/node_modules/@earendil-works/pi-agent-core/dist/harness/agent-harness.js.map +1 -1
  540. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/branch-summarization.d.ts +12 -6
  541. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/branch-summarization.d.ts.map +1 -1
  542. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/branch-summarization.js +33 -27
  543. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/branch-summarization.js.map +1 -1
  544. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.d.ts +30 -8
  545. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.d.ts.map +1 -1
  546. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.js +53 -64
  547. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.js.map +1 -1
  548. package/node_modules/@earendil-works/pi-agent-core/dist/harness/config.d.ts +9 -0
  549. package/node_modules/@earendil-works/pi-agent-core/dist/harness/config.d.ts.map +1 -0
  550. package/node_modules/@earendil-works/pi-agent-core/dist/harness/config.js +35 -0
  551. package/node_modules/@earendil-works/pi-agent-core/dist/harness/config.js.map +1 -0
  552. package/node_modules/@earendil-works/pi-agent-core/dist/harness/context.d.ts +9 -0
  553. package/node_modules/@earendil-works/pi-agent-core/dist/harness/context.d.ts.map +1 -0
  554. package/node_modules/@earendil-works/pi-agent-core/dist/harness/context.js +13 -0
  555. package/node_modules/@earendil-works/pi-agent-core/dist/harness/context.js.map +1 -0
  556. package/node_modules/@earendil-works/pi-agent-core/dist/harness/env/nodejs.d.ts +25 -28
  557. package/node_modules/@earendil-works/pi-agent-core/dist/harness/env/nodejs.d.ts.map +1 -1
  558. package/node_modules/@earendil-works/pi-agent-core/dist/harness/env/nodejs.js +368 -125
  559. package/node_modules/@earendil-works/pi-agent-core/dist/harness/env/nodejs.js.map +1 -1
  560. package/node_modules/@earendil-works/pi-agent-core/dist/harness/events.d.ts +20 -38
  561. package/node_modules/@earendil-works/pi-agent-core/dist/harness/events.d.ts.map +1 -1
  562. package/node_modules/@earendil-works/pi-agent-core/dist/harness/events.js +233 -55
  563. package/node_modules/@earendil-works/pi-agent-core/dist/harness/events.js.map +1 -1
  564. package/node_modules/@earendil-works/pi-agent-core/dist/harness/execution/assistant.d.ts +42 -0
  565. package/node_modules/@earendil-works/pi-agent-core/dist/harness/execution/assistant.d.ts.map +1 -0
  566. package/node_modules/@earendil-works/pi-agent-core/dist/harness/execution/assistant.js +82 -0
  567. package/node_modules/@earendil-works/pi-agent-core/dist/harness/execution/assistant.js.map +1 -0
  568. package/node_modules/@earendil-works/pi-agent-core/dist/harness/execution/effect-gate.d.ts +22 -0
  569. package/node_modules/@earendil-works/pi-agent-core/dist/harness/execution/effect-gate.d.ts.map +1 -0
  570. package/node_modules/@earendil-works/pi-agent-core/dist/harness/execution/effect-gate.js +48 -0
  571. package/node_modules/@earendil-works/pi-agent-core/dist/harness/execution/effect-gate.js.map +1 -0
  572. package/node_modules/@earendil-works/pi-agent-core/dist/harness/execution/tools.d.ts +67 -0
  573. package/node_modules/@earendil-works/pi-agent-core/dist/harness/execution/tools.d.ts.map +1 -0
  574. package/node_modules/@earendil-works/pi-agent-core/dist/harness/execution/tools.js +121 -0
  575. package/node_modules/@earendil-works/pi-agent-core/dist/harness/execution/tools.js.map +1 -0
  576. package/node_modules/@earendil-works/pi-agent-core/dist/harness/hooks.d.ts +38 -0
  577. package/node_modules/@earendil-works/pi-agent-core/dist/harness/hooks.d.ts.map +1 -0
  578. package/node_modules/@earendil-works/pi-agent-core/dist/harness/hooks.js +404 -0
  579. package/node_modules/@earendil-works/pi-agent-core/dist/harness/hooks.js.map +1 -0
  580. package/node_modules/@earendil-works/pi-agent-core/dist/harness/messages.d.ts +2 -2
  581. package/node_modules/@earendil-works/pi-agent-core/dist/harness/messages.d.ts.map +1 -1
  582. package/node_modules/@earendil-works/pi-agent-core/dist/harness/messages.js.map +1 -1
  583. package/node_modules/@earendil-works/pi-agent-core/dist/harness/prompt-templates.d.ts +3 -2
  584. package/node_modules/@earendil-works/pi-agent-core/dist/harness/prompt-templates.d.ts.map +1 -1
  585. package/node_modules/@earendil-works/pi-agent-core/dist/harness/prompt-templates.js +17 -17
  586. package/node_modules/@earendil-works/pi-agent-core/dist/harness/prompt-templates.js.map +1 -1
  587. package/node_modules/@earendil-works/pi-agent-core/dist/harness/result.d.ts +93 -0
  588. package/node_modules/@earendil-works/pi-agent-core/dist/harness/result.d.ts.map +1 -1
  589. package/node_modules/@earendil-works/pi-agent-core/dist/harness/result.js +39 -0
  590. package/node_modules/@earendil-works/pi-agent-core/dist/harness/result.js.map +1 -1
  591. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/drive/boundary.d.ts +28 -0
  592. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/drive/boundary.d.ts.map +1 -0
  593. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/drive/boundary.js +173 -0
  594. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/drive/boundary.js.map +1 -0
  595. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/drive/checkpoint.d.ts +8 -0
  596. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/drive/checkpoint.d.ts.map +1 -0
  597. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/drive/checkpoint.js +133 -0
  598. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/drive/checkpoint.js.map +1 -0
  599. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/drive/deferred.d.ts +15 -0
  600. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/drive/deferred.d.ts.map +1 -0
  601. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/drive/deferred.js +179 -0
  602. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/drive/deferred.js.map +1 -0
  603. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/drive/generation.d.ts +8 -0
  604. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/drive/generation.d.ts.map +1 -0
  605. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/drive/generation.js +205 -0
  606. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/drive/generation.js.map +1 -0
  607. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/drive/reconcile.d.ts +5 -0
  608. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/drive/reconcile.d.ts.map +1 -0
  609. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/drive/reconcile.js +140 -0
  610. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/drive/reconcile.js.map +1 -0
  611. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/drive/recovery.d.ts +8 -0
  612. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/drive/recovery.d.ts.map +1 -0
  613. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/drive/recovery.js +85 -0
  614. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/drive/recovery.js.map +1 -0
  615. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/drive/response.d.ts +23 -0
  616. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/drive/response.d.ts.map +1 -0
  617. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/drive/response.js +394 -0
  618. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/drive/response.js.map +1 -0
  619. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/drive/retry.d.ts +4 -0
  620. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/drive/retry.d.ts.map +1 -0
  621. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/drive/retry.js +34 -0
  622. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/drive/retry.js.map +1 -0
  623. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/drive/structural.d.ts +32 -0
  624. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/drive/structural.d.ts.map +1 -0
  625. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/drive/structural.js +929 -0
  626. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/drive/structural.js.map +1 -0
  627. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/drive/terminal.d.ts +7 -0
  628. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/drive/terminal.d.ts.map +1 -0
  629. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/drive/terminal.js +49 -0
  630. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/drive/terminal.js.map +1 -0
  631. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/drive/tool-placement.d.ts +14 -0
  632. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/drive/tool-placement.d.ts.map +1 -0
  633. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/drive/tool-placement.js +244 -0
  634. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/drive/tool-placement.js.map +1 -0
  635. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/drive/tools.d.ts +6 -0
  636. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/drive/tools.d.ts.map +1 -0
  637. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/drive/tools.js +449 -0
  638. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/drive/tools.js.map +1 -0
  639. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/drive.d.ts +6 -0
  640. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/drive.d.ts.map +1 -0
  641. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/drive.js +93 -0
  642. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/drive.js.map +1 -0
  643. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/harness.d.ts +59 -0
  644. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/harness.d.ts.map +1 -0
  645. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/harness.js +302 -0
  646. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/harness.js.map +1 -0
  647. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/index.d.ts +2 -0
  648. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/index.d.ts.map +1 -0
  649. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/index.js +2 -0
  650. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/index.js.map +1 -0
  651. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/lane.d.ts +118 -0
  652. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/lane.d.ts.map +1 -0
  653. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/lane.js +1559 -0
  654. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/lane.js.map +1 -0
  655. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/progress.d.ts +15 -0
  656. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/progress.d.ts.map +1 -0
  657. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/progress.js +66 -0
  658. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/progress.js.map +1 -0
  659. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/reducer.d.ts +5 -0
  660. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/reducer.d.ts.map +1 -0
  661. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/reducer.js +240 -0
  662. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/reducer.js.map +1 -0
  663. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/restore.d.ts +24 -0
  664. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/restore.d.ts.map +1 -0
  665. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/restore.js +117 -0
  666. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/restore.js.map +1 -0
  667. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/transcript.d.ts +21 -0
  668. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/transcript.d.ts.map +1 -0
  669. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/transcript.js +72 -0
  670. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/transcript.js.map +1 -0
  671. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/types.d.ts +105 -0
  672. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/types.d.ts.map +1 -0
  673. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/types.js +50 -0
  674. package/node_modules/@earendil-works/pi-agent-core/dist/harness/runtime/types.js.map +1 -0
  675. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/commit.d.ts +53 -0
  676. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/commit.d.ts.map +1 -0
  677. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/commit.js +57 -0
  678. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/commit.js.map +1 -0
  679. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/context.d.ts +6 -19
  680. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/context.d.ts.map +1 -1
  681. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/context.js +31 -53
  682. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/context.js.map +1 -1
  683. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/fork-policy.d.ts +21 -0
  684. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/fork-policy.d.ts.map +1 -0
  685. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/fork-policy.js +55 -0
  686. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/fork-policy.js.map +1 -0
  687. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/fork.d.ts +16 -0
  688. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/fork.d.ts.map +1 -0
  689. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/fork.js +79 -0
  690. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/fork.js.map +1 -0
  691. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/in-memory-storage-state.d.ts +39 -0
  692. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/in-memory-storage-state.d.ts.map +1 -0
  693. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/in-memory-storage-state.js +269 -0
  694. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/in-memory-storage-state.js.map +1 -0
  695. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/index.d.ts +9 -5
  696. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/index.d.ts.map +1 -1
  697. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/index.js +7 -4
  698. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/index.js.map +1 -1
  699. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/codec.d.ts +19 -8
  700. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/codec.d.ts.map +1 -1
  701. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/codec.js +34 -219
  702. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/codec.js.map +1 -1
  703. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/fork.d.ts +38 -0
  704. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/fork.d.ts.map +1 -0
  705. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/fork.js +266 -0
  706. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/fork.js.map +1 -0
  707. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/index.d.ts +4 -0
  708. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/index.d.ts.map +1 -0
  709. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/index.js +4 -0
  710. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/index.js.map +1 -0
  711. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/io.d.ts +14 -0
  712. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/io.d.ts.map +1 -0
  713. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/io.js +86 -0
  714. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/io.js.map +1 -0
  715. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/legacy-v3.d.ts +44 -0
  716. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/legacy-v3.d.ts.map +1 -0
  717. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/legacy-v3.js +454 -0
  718. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/legacy-v3.js.map +1 -0
  719. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/repo.d.ts +27 -24
  720. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/repo.d.ts.map +1 -1
  721. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/repo.js +276 -151
  722. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/repo.js.map +1 -1
  723. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/storage.d.ts +39 -41
  724. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/storage.d.ts.map +1 -1
  725. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/storage.js +175 -196
  726. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/storage.js.map +1 -1
  727. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/types.d.ts +23 -22
  728. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/types.d.ts.map +1 -1
  729. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/types.js +2 -1
  730. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/types.js.map +1 -1
  731. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/memory.d.ts +44 -40
  732. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/memory.d.ts.map +1 -1
  733. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/memory.js +333 -115
  734. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/memory.js.map +1 -1
  735. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/mutation-line.d.ts +8 -0
  736. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/mutation-line.d.ts.map +1 -0
  737. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/mutation-line.js +22 -0
  738. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/mutation-line.js.map +1 -0
  739. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.d.ts +78 -51
  740. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.d.ts.map +1 -1
  741. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.js +327 -207
  742. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.js.map +1 -1
  743. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/testing/benchmark/datasets.d.ts +12 -0
  744. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/testing/benchmark/datasets.d.ts.map +1 -0
  745. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/testing/benchmark/datasets.js +24 -0
  746. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/testing/benchmark/datasets.js.map +1 -0
  747. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/testing/benchmark/session-repo.d.ts +42 -0
  748. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/testing/benchmark/session-repo.d.ts.map +1 -0
  749. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/testing/benchmark/session-repo.js +127 -0
  750. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/testing/benchmark/session-repo.js.map +1 -0
  751. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/testing/benchmark/storage.d.ts +25 -0
  752. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/testing/benchmark/storage.d.ts.map +1 -0
  753. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/testing/benchmark/storage.js +114 -0
  754. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/testing/benchmark/storage.js.map +1 -0
  755. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/testing/conformance/session-repo.d.ts +23 -0
  756. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/testing/conformance/session-repo.d.ts.map +1 -0
  757. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/testing/conformance/session-repo.js +809 -0
  758. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/testing/conformance/session-repo.js.map +1 -0
  759. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/testing/conformance/storage.d.ts +4 -0
  760. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/testing/conformance/storage.d.ts.map +1 -0
  761. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/testing/conformance/storage.js +600 -0
  762. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/testing/conformance/storage.js.map +1 -0
  763. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/testing/gating-storage.d.ts +26 -0
  764. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/testing/gating-storage.d.ts.map +1 -0
  765. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/testing/gating-storage.js +103 -0
  766. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/testing/gating-storage.js.map +1 -0
  767. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/testing/index.d.ts +9 -2
  768. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/testing/index.d.ts.map +1 -1
  769. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/testing/index.js +8 -1
  770. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/testing/index.js.map +1 -1
  771. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/testing/instrumented-storage.d.ts +11 -0
  772. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/testing/instrumented-storage.d.ts.map +1 -0
  773. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/testing/instrumented-storage.js +19 -0
  774. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/testing/instrumented-storage.js.map +1 -0
  775. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/testing/storage-decorator.d.ts +20 -0
  776. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/testing/storage-decorator.d.ts.map +1 -0
  777. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/testing/storage-decorator.js +40 -0
  778. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/testing/storage-decorator.js.map +1 -0
  779. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/testing/types.d.ts +5 -7
  780. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/testing/types.d.ts.map +1 -1
  781. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/testing/types.js.map +1 -1
  782. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/types.d.ts +425 -265
  783. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/types.d.ts.map +1 -1
  784. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/types.js +7 -7
  785. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/types.js.map +1 -1
  786. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/values.d.ts +95 -0
  787. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/values.d.ts.map +1 -0
  788. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/values.js +81 -0
  789. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/values.js.map +1 -0
  790. package/node_modules/@earendil-works/pi-agent-core/dist/harness/skills.d.ts +3 -2
  791. package/node_modules/@earendil-works/pi-agent-core/dist/harness/skills.d.ts.map +1 -1
  792. package/node_modules/@earendil-works/pi-agent-core/dist/harness/skills.js +29 -26
  793. package/node_modules/@earendil-works/pi-agent-core/dist/harness/skills.js.map +1 -1
  794. package/node_modules/@earendil-works/pi-agent-core/dist/harness/telemetry.d.ts +64 -43
  795. package/node_modules/@earendil-works/pi-agent-core/dist/harness/telemetry.d.ts.map +1 -1
  796. package/node_modules/@earendil-works/pi-agent-core/dist/harness/telemetry.js +45 -26
  797. package/node_modules/@earendil-works/pi-agent-core/dist/harness/telemetry.js.map +1 -1
  798. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/bash.d.ts +4 -4
  799. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/bash.d.ts.map +1 -1
  800. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/bash.js +66 -93
  801. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/bash.js.map +1 -1
  802. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/edit.d.ts.map +1 -1
  803. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/edit.js +17 -13
  804. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/edit.js.map +1 -1
  805. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/file-mutation-queue.d.ts +2 -1
  806. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/file-mutation-queue.d.ts.map +1 -1
  807. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/file-mutation-queue.js +5 -5
  808. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/file-mutation-queue.js.map +1 -1
  809. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/path-utils.d.ts +3 -2
  810. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/path-utils.d.ts.map +1 -1
  811. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/path-utils.js +5 -5
  812. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/path-utils.js.map +1 -1
  813. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/read.d.ts +2 -1
  814. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/read.d.ts.map +1 -1
  815. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/read.js +4 -6
  816. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/read.js.map +1 -1
  817. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/write.d.ts.map +1 -1
  818. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/write.js +12 -8
  819. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/write.js.map +1 -1
  820. package/node_modules/@earendil-works/pi-agent-core/dist/harness/types.d.ts +128 -45
  821. package/node_modules/@earendil-works/pi-agent-core/dist/harness/types.d.ts.map +1 -1
  822. package/node_modules/@earendil-works/pi-agent-core/dist/harness/types.js.map +1 -1
  823. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/adaptive-publisher.d.ts +24 -0
  824. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/adaptive-publisher.d.ts.map +1 -0
  825. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/adaptive-publisher.js +79 -0
  826. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/adaptive-publisher.js.map +1 -0
  827. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/output-capture.d.ts +31 -0
  828. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/output-capture.d.ts.map +1 -0
  829. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/output-capture.js +217 -0
  830. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/output-capture.js.map +1 -0
  831. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/shell-output.d.ts +19 -5
  832. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/shell-output.d.ts.map +1 -1
  833. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/shell-output.js +65 -192
  834. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/shell-output.js.map +1 -1
  835. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/truncate.d.ts +1 -0
  836. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/truncate.d.ts.map +1 -1
  837. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/truncate.js +1 -1
  838. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/truncate.js.map +1 -1
  839. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/usage.d.ts +4 -0
  840. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/usage.d.ts.map +1 -0
  841. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/usage.js +33 -0
  842. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/usage.js.map +1 -0
  843. package/node_modules/@earendil-works/pi-agent-core/dist/index.d.ts +4 -1
  844. package/node_modules/@earendil-works/pi-agent-core/dist/index.d.ts.map +1 -1
  845. package/node_modules/@earendil-works/pi-agent-core/dist/index.js +3 -6
  846. package/node_modules/@earendil-works/pi-agent-core/dist/index.js.map +1 -1
  847. package/node_modules/@earendil-works/pi-agent-core/dist/search/index.d.ts +24 -16
  848. package/node_modules/@earendil-works/pi-agent-core/dist/search/index.d.ts.map +1 -1
  849. package/node_modules/@earendil-works/pi-agent-core/dist/search/index.js +1 -1
  850. package/node_modules/@earendil-works/pi-agent-core/dist/search/index.js.map +1 -1
  851. package/node_modules/@earendil-works/pi-agent-core/dist/types.d.ts +2 -0
  852. package/node_modules/@earendil-works/pi-agent-core/dist/types.d.ts.map +1 -1
  853. package/node_modules/@earendil-works/pi-agent-core/dist/types.js.map +1 -1
  854. package/node_modules/@earendil-works/pi-agent-core/package.json +27 -6
  855. package/node_modules/@earendil-works/pi-ai/README.md +39 -4
  856. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.d.ts.map +1 -1
  857. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js +8 -1
  858. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js.map +1 -1
  859. package/node_modules/@earendil-works/pi-ai/dist/api/cloudflare-ai-binding.d.ts +77 -0
  860. package/node_modules/@earendil-works/pi-ai/dist/api/cloudflare-ai-binding.d.ts.map +1 -0
  861. package/node_modules/@earendil-works/pi-ai/dist/api/cloudflare-ai-binding.js +72 -0
  862. package/node_modules/@earendil-works/pi-ai/dist/api/cloudflare-ai-binding.js.map +1 -0
  863. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/measure.d.ts +11 -0
  864. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/measure.d.ts.map +1 -1
  865. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/measure.js +18 -0
  866. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/measure.js.map +1 -1
  867. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.d.ts +1 -1
  868. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.d.ts.map +1 -1
  869. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.js +5 -1
  870. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.js.map +1 -1
  871. package/node_modules/@earendil-works/pi-ai/dist/api/mistral-conversations.js +4 -1
  872. package/node_modules/@earendil-works/pi-ai/dist/api/mistral-conversations.js.map +1 -1
  873. package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.d.ts.map +1 -1
  874. package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.js +6 -3
  875. package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.js.map +1 -1
  876. package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses-shared.d.ts.map +1 -1
  877. package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses-shared.js +4 -1
  878. package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses-shared.js.map +1 -1
  879. package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.d.ts.map +1 -1
  880. package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.js +13 -3
  881. package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.js.map +1 -1
  882. package/node_modules/@earendil-works/pi-ai/dist/cursor/context-limit-store.d.ts +32 -0
  883. package/node_modules/@earendil-works/pi-ai/dist/cursor/context-limit-store.d.ts.map +1 -0
  884. package/node_modules/@earendil-works/pi-ai/dist/cursor/context-limit-store.js +62 -0
  885. package/node_modules/@earendil-works/pi-ai/dist/cursor/context-limit-store.js.map +1 -0
  886. package/node_modules/@earendil-works/pi-ai/dist/cursor/store-migration.d.ts.map +1 -1
  887. package/node_modules/@earendil-works/pi-ai/dist/cursor/store-migration.js +2 -1
  888. package/node_modules/@earendil-works/pi-ai/dist/cursor/store-migration.js.map +1 -1
  889. package/node_modules/@earendil-works/pi-ai/dist/index.d.ts +2 -1
  890. package/node_modules/@earendil-works/pi-ai/dist/index.d.ts.map +1 -1
  891. package/node_modules/@earendil-works/pi-ai/dist/index.js +2 -1
  892. package/node_modules/@earendil-works/pi-ai/dist/index.js.map +1 -1
  893. package/node_modules/@earendil-works/pi-ai/dist/models.d.ts +1 -0
  894. package/node_modules/@earendil-works/pi-ai/dist/models.d.ts.map +1 -1
  895. package/node_modules/@earendil-works/pi-ai/dist/models.js +5 -2
  896. package/node_modules/@earendil-works/pi-ai/dist/models.js.map +1 -1
  897. package/node_modules/@earendil-works/pi-ai/dist/openai-responses-compat.d.ts +1 -1
  898. package/node_modules/@earendil-works/pi-ai/dist/openai-responses-compat.d.ts.map +1 -1
  899. package/node_modules/@earendil-works/pi-ai/dist/openai-responses-compat.js.map +1 -1
  900. package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-ai-gateway.d.ts.map +1 -1
  901. package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-ai-gateway.js +4 -0
  902. package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-ai-gateway.js.map +1 -1
  903. package/node_modules/@earendil-works/pi-ai/dist/providers/cursor.d.ts.map +1 -1
  904. package/node_modules/@earendil-works/pi-ai/dist/providers/cursor.js +2 -1
  905. package/node_modules/@earendil-works/pi-ai/dist/providers/cursor.js.map +1 -1
  906. package/node_modules/@earendil-works/pi-ai/dist/providers/data/.manifest.json +1 -1
  907. package/node_modules/@earendil-works/pi-ai/dist/providers/data/azure-openai-responses.json +1 -1
  908. package/node_modules/@earendil-works/pi-ai/dist/providers/data/baseten.json +1 -1
  909. package/node_modules/@earendil-works/pi-ai/dist/providers/data/deepseek.json +1 -1
  910. package/node_modules/@earendil-works/pi-ai/dist/providers/data/fireworks.json +1 -1
  911. package/node_modules/@earendil-works/pi-ai/dist/providers/data/github-copilot.json +1 -1
  912. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openai-codex.json +1 -1
  913. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openrouter.json +1 -1
  914. package/node_modules/@earendil-works/pi-ai/dist/providers/data/qwen-token-plan-cn.json +1 -1
  915. package/node_modules/@earendil-works/pi-ai/dist/providers/data/qwen-token-plan-individual.json +1 -1
  916. package/node_modules/@earendil-works/pi-ai/dist/providers/data/qwen-token-plan.json +1 -1
  917. package/node_modules/@earendil-works/pi-ai/dist/providers/data/vercel-ai-gateway.json +1 -1
  918. package/node_modules/@earendil-works/pi-ai/dist/providers/data/xai.json +1 -1
  919. package/node_modules/@earendil-works/pi-ai/dist/providers/faux.js +5 -5
  920. package/node_modules/@earendil-works/pi-ai/dist/providers/faux.js.map +1 -1
  921. package/node_modules/@earendil-works/pi-ai/dist/providers/opencode-go.d.ts.map +1 -1
  922. package/node_modules/@earendil-works/pi-ai/dist/providers/opencode-go.js +4 -3
  923. package/node_modules/@earendil-works/pi-ai/dist/providers/opencode-go.js.map +1 -1
  924. package/node_modules/@earendil-works/pi-ai/dist/providers/opencode-headers.d.ts +4 -0
  925. package/node_modules/@earendil-works/pi-ai/dist/providers/opencode-headers.d.ts.map +1 -0
  926. package/node_modules/@earendil-works/pi-ai/dist/providers/opencode-headers.js +22 -0
  927. package/node_modules/@earendil-works/pi-ai/dist/providers/opencode-headers.js.map +1 -0
  928. package/node_modules/@earendil-works/pi-ai/dist/providers/opencode.d.ts.map +1 -1
  929. package/node_modules/@earendil-works/pi-ai/dist/providers/opencode.js +5 -4
  930. package/node_modules/@earendil-works/pi-ai/dist/providers/opencode.js.map +1 -1
  931. package/node_modules/@earendil-works/pi-ai/dist/types.d.ts +16 -6
  932. package/node_modules/@earendil-works/pi-ai/dist/types.d.ts.map +1 -1
  933. package/node_modules/@earendil-works/pi-ai/dist/types.js.map +1 -1
  934. package/node_modules/@earendil-works/pi-ai/dist/utils/assistant-message-frame.d.ts +77 -0
  935. package/node_modules/@earendil-works/pi-ai/dist/utils/assistant-message-frame.d.ts.map +1 -0
  936. package/node_modules/@earendil-works/pi-ai/dist/utils/assistant-message-frame.js +427 -0
  937. package/node_modules/@earendil-works/pi-ai/dist/utils/assistant-message-frame.js.map +1 -0
  938. package/node_modules/@earendil-works/pi-ai/dist/utils/cursor-context-limit.d.ts +12 -0
  939. package/node_modules/@earendil-works/pi-ai/dist/utils/cursor-context-limit.d.ts.map +1 -0
  940. package/node_modules/@earendil-works/pi-ai/dist/utils/cursor-context-limit.js +93 -0
  941. package/node_modules/@earendil-works/pi-ai/dist/utils/cursor-context-limit.js.map +1 -0
  942. package/node_modules/@earendil-works/pi-ai/dist/utils/event-stream.d.ts.map +1 -1
  943. package/node_modules/@earendil-works/pi-ai/dist/utils/event-stream.js +25 -5
  944. package/node_modules/@earendil-works/pi-ai/dist/utils/event-stream.js.map +1 -1
  945. package/node_modules/@earendil-works/pi-ai/dist/utils/prompt-cache-ttl.d.ts +1 -1
  946. package/node_modules/@earendil-works/pi-ai/dist/utils/prompt-cache-ttl.d.ts.map +1 -1
  947. package/node_modules/@earendil-works/pi-ai/dist/utils/prompt-cache-ttl.js +5 -1
  948. package/node_modules/@earendil-works/pi-ai/dist/utils/prompt-cache-ttl.js.map +1 -1
  949. package/node_modules/@earendil-works/pi-ai/dist/utils/retry-profile/types.d.ts +10 -1
  950. package/node_modules/@earendil-works/pi-ai/dist/utils/retry-profile/types.d.ts.map +1 -1
  951. package/node_modules/@earendil-works/pi-ai/dist/utils/retry-profile/types.js.map +1 -1
  952. package/node_modules/@earendil-works/pi-ai/dist/utils/retry.d.ts +13 -2
  953. package/node_modules/@earendil-works/pi-ai/dist/utils/retry.d.ts.map +1 -1
  954. package/node_modules/@earendil-works/pi-ai/dist/utils/retry.js +18 -7
  955. package/node_modules/@earendil-works/pi-ai/dist/utils/retry.js.map +1 -1
  956. package/node_modules/@earendil-works/pi-ai/dist/utils/uuid.d.ts +2 -2
  957. package/node_modules/@earendil-works/pi-ai/dist/utils/uuid.d.ts.map +1 -1
  958. package/node_modules/@earendil-works/pi-ai/dist/utils/uuid.js +36 -31
  959. package/node_modules/@earendil-works/pi-ai/dist/utils/uuid.js.map +1 -1
  960. package/node_modules/@earendil-works/pi-ai/package.json +6 -6
  961. package/node_modules/@earendil-works/pi-pty/package.json +1 -1
  962. package/node_modules/@earendil-works/pi-telemetry/package.json +1 -1
  963. package/node_modules/@earendil-works/pi-tui/README.md +53 -4
  964. package/node_modules/@earendil-works/pi-tui/dist/alt-screen-search.d.ts +21 -1
  965. package/node_modules/@earendil-works/pi-tui/dist/alt-screen-search.d.ts.map +1 -1
  966. package/node_modules/@earendil-works/pi-tui/dist/alt-screen-search.js +199 -42
  967. package/node_modules/@earendil-works/pi-tui/dist/alt-screen-search.js.map +1 -1
  968. package/node_modules/@earendil-works/pi-tui/dist/components/box.d.ts +3 -1
  969. package/node_modules/@earendil-works/pi-tui/dist/components/box.d.ts.map +1 -1
  970. package/node_modules/@earendil-works/pi-tui/dist/components/box.js +28 -0
  971. package/node_modules/@earendil-works/pi-tui/dist/components/box.js.map +1 -1
  972. package/node_modules/@earendil-works/pi-tui/dist/components/editor.d.ts +6 -1
  973. package/node_modules/@earendil-works/pi-tui/dist/components/editor.d.ts.map +1 -1
  974. package/node_modules/@earendil-works/pi-tui/dist/components/editor.js +98 -18
  975. package/node_modules/@earendil-works/pi-tui/dist/components/editor.js.map +1 -1
  976. package/node_modules/@earendil-works/pi-tui/dist/components/input.d.ts +12 -1
  977. package/node_modules/@earendil-works/pi-tui/dist/components/input.d.ts.map +1 -1
  978. package/node_modules/@earendil-works/pi-tui/dist/components/input.js +40 -6
  979. package/node_modules/@earendil-works/pi-tui/dist/components/input.js.map +1 -1
  980. package/node_modules/@earendil-works/pi-tui/dist/components/latex.d.ts.map +1 -1
  981. package/node_modules/@earendil-works/pi-tui/dist/components/latex.js +7 -0
  982. package/node_modules/@earendil-works/pi-tui/dist/components/latex.js.map +1 -1
  983. package/node_modules/@earendil-works/pi-tui/dist/components/loader.d.ts +3 -0
  984. package/node_modules/@earendil-works/pi-tui/dist/components/loader.d.ts.map +1 -1
  985. package/node_modules/@earendil-works/pi-tui/dist/components/loader.js +20 -8
  986. package/node_modules/@earendil-works/pi-tui/dist/components/loader.js.map +1 -1
  987. package/node_modules/@earendil-works/pi-tui/dist/components/mouse-region.d.ts +12 -0
  988. package/node_modules/@earendil-works/pi-tui/dist/components/mouse-region.d.ts.map +1 -0
  989. package/node_modules/@earendil-works/pi-tui/dist/components/mouse-region.js +19 -0
  990. package/node_modules/@earendil-works/pi-tui/dist/components/mouse-region.js.map +1 -0
  991. package/node_modules/@earendil-works/pi-tui/dist/components/scroll-view.d.ts +6 -3
  992. package/node_modules/@earendil-works/pi-tui/dist/components/scroll-view.d.ts.map +1 -1
  993. package/node_modules/@earendil-works/pi-tui/dist/components/scroll-view.js +6 -1
  994. package/node_modules/@earendil-works/pi-tui/dist/components/scroll-view.js.map +1 -1
  995. package/node_modules/@earendil-works/pi-tui/dist/components/select-list.d.ts +4 -1
  996. package/node_modules/@earendil-works/pi-tui/dist/components/select-list.d.ts.map +1 -1
  997. package/node_modules/@earendil-works/pi-tui/dist/components/select-list.js +48 -2
  998. package/node_modules/@earendil-works/pi-tui/dist/components/select-list.js.map +1 -1
  999. package/node_modules/@earendil-works/pi-tui/dist/components/settings-list.d.ts +5 -1
  1000. package/node_modules/@earendil-works/pi-tui/dist/components/settings-list.d.ts.map +1 -1
  1001. package/node_modules/@earendil-works/pi-tui/dist/components/settings-list.js +54 -5
  1002. package/node_modules/@earendil-works/pi-tui/dist/components/settings-list.js.map +1 -1
  1003. package/node_modules/@earendil-works/pi-tui/dist/index.d.ts +3 -1
  1004. package/node_modules/@earendil-works/pi-tui/dist/index.d.ts.map +1 -1
  1005. package/node_modules/@earendil-works/pi-tui/dist/index.js +3 -0
  1006. package/node_modules/@earendil-works/pi-tui/dist/index.js.map +1 -1
  1007. package/node_modules/@earendil-works/pi-tui/dist/layout.d.ts +3 -1
  1008. package/node_modules/@earendil-works/pi-tui/dist/layout.d.ts.map +1 -1
  1009. package/node_modules/@earendil-works/pi-tui/dist/layout.js +32 -9
  1010. package/node_modules/@earendil-works/pi-tui/dist/layout.js.map +1 -1
  1011. package/node_modules/@earendil-works/pi-tui/dist/native-modifiers.d.ts +2 -1
  1012. package/node_modules/@earendil-works/pi-tui/dist/native-modifiers.d.ts.map +1 -1
  1013. package/node_modules/@earendil-works/pi-tui/dist/native-modifiers.js +3 -44
  1014. package/node_modules/@earendil-works/pi-tui/dist/native-modifiers.js.map +1 -1
  1015. package/node_modules/@earendil-works/pi-tui/dist/native-platform.d.ts +18 -0
  1016. package/node_modules/@earendil-works/pi-tui/dist/native-platform.d.ts.map +1 -0
  1017. package/node_modules/@earendil-works/pi-tui/dist/native-platform.js +42 -0
  1018. package/node_modules/@earendil-works/pi-tui/dist/native-platform.js.map +1 -0
  1019. package/node_modules/@earendil-works/pi-tui/dist/terminal.d.ts.map +1 -1
  1020. package/node_modules/@earendil-works/pi-tui/dist/terminal.js +2 -20
  1021. package/node_modules/@earendil-works/pi-tui/dist/terminal.js.map +1 -1
  1022. package/node_modules/@earendil-works/pi-tui/dist/tui-alt-screen.d.ts +31 -1
  1023. package/node_modules/@earendil-works/pi-tui/dist/tui-alt-screen.d.ts.map +1 -1
  1024. package/node_modules/@earendil-works/pi-tui/dist/tui-alt-screen.js +335 -41
  1025. package/node_modules/@earendil-works/pi-tui/dist/tui-alt-screen.js.map +1 -1
  1026. package/node_modules/@earendil-works/pi-tui/dist/tui.d.ts +83 -5
  1027. package/node_modules/@earendil-works/pi-tui/dist/tui.d.ts.map +1 -1
  1028. package/node_modules/@earendil-works/pi-tui/dist/tui.js +118 -4
  1029. package/node_modules/@earendil-works/pi-tui/dist/tui.js.map +1 -1
  1030. package/node_modules/@earendil-works/pi-tui/dist/utils.d.ts +2 -0
  1031. package/node_modules/@earendil-works/pi-tui/dist/utils.d.ts.map +1 -1
  1032. package/node_modules/@earendil-works/pi-tui/dist/utils.js +9 -0
  1033. package/node_modules/@earendil-works/pi-tui/dist/utils.js.map +1 -1
  1034. package/node_modules/@earendil-works/pi-tui/native/clipboard.h +170 -0
  1035. package/node_modules/@earendil-works/pi-tui/native/darwin/README.md +8 -6
  1036. package/node_modules/@earendil-works/pi-tui/native/darwin/build.sh +12 -5
  1037. package/node_modules/@earendil-works/pi-tui/native/darwin/prebuilds/darwin-arm64/{darwin-modifiers.node → darwin-platform.node} +0 -0
  1038. package/node_modules/@earendil-works/pi-tui/native/darwin/prebuilds/darwin-x64/{darwin-modifiers.node → darwin-platform.node} +0 -0
  1039. package/node_modules/@earendil-works/pi-tui/native/darwin/src/darwin-platform.m +93 -0
  1040. package/node_modules/@earendil-works/pi-tui/native/linux/README.md +23 -0
  1041. package/node_modules/@earendil-works/pi-tui/native/linux/build.sh +65 -0
  1042. package/node_modules/@earendil-works/pi-tui/native/linux/prebuilds/linux-arm64/linux-platform-x11.node +0 -0
  1043. package/node_modules/@earendil-works/pi-tui/native/linux/prebuilds/linux-x64/linux-platform-x11.node +0 -0
  1044. package/node_modules/@earendil-works/pi-tui/native/linux/src/clipboard-worker.h +70 -0
  1045. package/node_modules/@earendil-works/pi-tui/native/linux/src/linux-platform-x11.c +274 -0
  1046. package/node_modules/@earendil-works/pi-tui/native/napi.h +89 -0
  1047. package/node_modules/@earendil-works/pi-tui/native/win32/README.md +18 -7
  1048. package/node_modules/@earendil-works/pi-tui/native/win32/build.mjs +7 -4
  1049. package/node_modules/@earendil-works/pi-tui/native/win32/prebuilds/win32-arm64/win32-platform.node +0 -0
  1050. package/node_modules/@earendil-works/pi-tui/native/win32/prebuilds/win32-x64/win32-platform.node +0 -0
  1051. package/node_modules/@earendil-works/pi-tui/native/win32/src/win32-platform.c +241 -0
  1052. package/node_modules/@earendil-works/pi-tui/package.json +10 -3
  1053. package/node_modules/@google/genai/dist/genai.d.ts +1799 -289
  1054. package/node_modules/@google/genai/dist/index.cjs +319 -299
  1055. package/node_modules/@google/genai/dist/index.mjs +319 -299
  1056. package/node_modules/@google/genai/dist/index.mjs.map +1 -1
  1057. package/node_modules/@google/genai/dist/node/index.cjs +320 -300
  1058. package/node_modules/@google/genai/dist/node/index.mjs +320 -300
  1059. package/node_modules/@google/genai/dist/node/index.mjs.map +1 -1
  1060. package/node_modules/@google/genai/dist/node/node.d.ts +1799 -289
  1061. package/node_modules/@google/genai/dist/tokenizer/node.cjs +49 -2
  1062. package/node_modules/@google/genai/dist/tokenizer/node.d.ts +43 -3
  1063. package/node_modules/@google/genai/dist/tokenizer/node.mjs +49 -2
  1064. package/node_modules/@google/genai/dist/tokenizer/node.mjs.map +1 -1
  1065. package/node_modules/@google/genai/dist/vertex_internal/index.cjs +39 -3
  1066. package/node_modules/@google/genai/dist/vertex_internal/index.cjs.map +1 -1
  1067. package/node_modules/@google/genai/dist/vertex_internal/index.d.ts +51 -9
  1068. package/node_modules/@google/genai/dist/vertex_internal/index.js +39 -3
  1069. package/node_modules/@google/genai/dist/vertex_internal/index.js.map +1 -1
  1070. package/node_modules/@google/genai/dist/web/index.mjs +319 -299
  1071. package/node_modules/@google/genai/dist/web/index.mjs.map +1 -1
  1072. package/node_modules/@google/genai/dist/web/web.d.ts +1799 -289
  1073. package/node_modules/@google/genai/package.json +1 -1
  1074. package/node_modules/@smithy/node-http-handler/dist-cjs/index.js +11 -4
  1075. package/node_modules/@smithy/node-http-handler/dist-es/http2/ClientHttp2SessionRef.js +1 -0
  1076. package/node_modules/@smithy/node-http-handler/dist-es/node-http2-connection-manager.js +2 -3
  1077. package/node_modules/@smithy/node-http-handler/dist-es/node-http2-handler.js +8 -1
  1078. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/LICENSE +201 -0
  1079. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/README.md +115 -0
  1080. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-cjs/index.js +96 -0
  1081. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/abort-handler.js +1 -0
  1082. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/abort.js +1 -0
  1083. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/auth/HttpApiKeyAuth.js +5 -0
  1084. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/auth/HttpAuthScheme.js +1 -0
  1085. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/auth/HttpAuthSchemeProvider.js +1 -0
  1086. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/auth/HttpSigner.js +1 -0
  1087. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/auth/IdentityProviderConfig.js +1 -0
  1088. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/auth/auth.js +5 -0
  1089. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/auth/index.js +2 -0
  1090. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/blob/blob-payload-input-types.js +1 -0
  1091. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/checksum.js +1 -0
  1092. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/client.js +1 -0
  1093. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/command.js +1 -0
  1094. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/connection/config.js +1 -0
  1095. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/connection/index.js +1 -0
  1096. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/connection/manager.js +1 -0
  1097. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/connection/pool.js +1 -0
  1098. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/crypto.js +1 -0
  1099. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/downlevel-ts3.4/transform/type-transform.js +1 -0
  1100. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/encode.js +1 -0
  1101. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/endpoint.js +5 -0
  1102. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/endpoints/EndpointParameterInstructions.js +1 -0
  1103. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/endpoints/EndpointRuleObject.js +1 -0
  1104. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/endpoints/ErrorRuleObject.js +1 -0
  1105. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/endpoints/RuleSetObject.js +1 -0
  1106. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/endpoints/TreeRuleObject.js +1 -0
  1107. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/endpoints/index.js +1 -0
  1108. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/endpoints/shared.js +1 -0
  1109. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/eventStream.js +1 -0
  1110. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/extensions/checksum.js +38 -0
  1111. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/extensions/defaultClientConfiguration.js +7 -0
  1112. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/extensions/defaultExtensionConfiguration.js +1 -0
  1113. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/extensions/index.js +2 -0
  1114. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/extensions/retry.js +1 -0
  1115. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/externals-check/browser-externals-check.js +1 -0
  1116. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/feature-ids.js +1 -0
  1117. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/http/httpHandlerInitialization.js +1 -0
  1118. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/http.js +5 -0
  1119. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/identity/apiKeyIdentity.js +1 -0
  1120. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/identity/awsCredentialIdentity.js +1 -0
  1121. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/identity/identity.js +1 -0
  1122. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/identity/index.js +1 -0
  1123. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/identity/tokenIdentity.js +1 -0
  1124. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/index.js +7 -0
  1125. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/logger.js +1 -0
  1126. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/metrics.js +1 -0
  1127. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/middleware.js +1 -0
  1128. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/pagination.js +1 -0
  1129. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/profile.js +6 -0
  1130. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/response.js +1 -0
  1131. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/retry.js +1 -0
  1132. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/schema/schema-deprecated.js +1 -0
  1133. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/schema/schema.js +1 -0
  1134. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/schema/sentinels.js +1 -0
  1135. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/schema/static-schemas.js +1 -0
  1136. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/schema/traits.js +1 -0
  1137. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/serde.js +1 -0
  1138. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/shapes.js +1 -0
  1139. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/signature.js +1 -0
  1140. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/stream.js +1 -0
  1141. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/streaming-payload/streaming-blob-common-types.js +1 -0
  1142. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/streaming-payload/streaming-blob-payload-input-types.js +1 -0
  1143. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/streaming-payload/streaming-blob-payload-output-types.js +1 -0
  1144. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/transfer.js +6 -0
  1145. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/transform/client-method-transforms.js +1 -0
  1146. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/transform/client-payload-blob-type-narrow.js +1 -0
  1147. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/transform/exact.js +1 -0
  1148. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/transform/mutable.js +1 -0
  1149. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/transform/no-undefined.js +1 -0
  1150. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/transform/type-transform.js +1 -0
  1151. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/uri.js +1 -0
  1152. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/util.js +1 -0
  1153. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-es/waiter.js +1 -0
  1154. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/abort-handler.d.ts +7 -0
  1155. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/abort.d.ts +48 -0
  1156. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/auth/HttpApiKeyAuth.d.ts +7 -0
  1157. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/auth/HttpAuthScheme.d.ts +49 -0
  1158. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/auth/HttpAuthSchemeProvider.d.ts +20 -0
  1159. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/auth/HttpSigner.d.ts +41 -0
  1160. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/auth/IdentityProviderConfig.d.ts +14 -0
  1161. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/auth/auth.d.ts +59 -0
  1162. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/auth/index.d.ts +7 -0
  1163. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/blob/blob-payload-input-types.d.ts +37 -0
  1164. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/checksum.d.ts +61 -0
  1165. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/client.d.ts +57 -0
  1166. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/command.d.ts +28 -0
  1167. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/connection/config.d.ts +15 -0
  1168. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/connection/index.d.ts +3 -0
  1169. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/connection/manager.d.ts +34 -0
  1170. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/connection/pool.d.ts +32 -0
  1171. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/crypto.d.ts +58 -0
  1172. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/downlevel-ts3.4/transform/type-transform.d.ts +24 -0
  1173. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/encode.d.ts +31 -0
  1174. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/endpoint.d.ts +77 -0
  1175. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/endpoints/EndpointParameterInstructions.d.ts +41 -0
  1176. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/endpoints/EndpointRuleObject.d.ts +27 -0
  1177. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/endpoints/ErrorRuleObject.d.ts +10 -0
  1178. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/endpoints/RuleSetObject.d.ts +28 -0
  1179. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/endpoints/TreeRuleObject.d.ts +16 -0
  1180. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/endpoints/index.d.ts +5 -0
  1181. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/endpoints/shared.d.ts +55 -0
  1182. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/eventStream.d.ts +137 -0
  1183. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/extensions/checksum.d.ts +58 -0
  1184. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/extensions/defaultClientConfiguration.d.ts +32 -0
  1185. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/extensions/defaultExtensionConfiguration.d.ts +9 -0
  1186. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/extensions/index.d.ts +6 -0
  1187. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/extensions/retry.d.ts +18 -0
  1188. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/externals-check/browser-externals-check.d.ts +35 -0
  1189. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/feature-ids.d.ts +16 -0
  1190. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/http/httpHandlerInitialization.d.ts +142 -0
  1191. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/http.d.ts +110 -0
  1192. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/identity/apiKeyIdentity.d.ts +14 -0
  1193. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/identity/awsCredentialIdentity.d.ts +31 -0
  1194. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/identity/identity.d.ts +15 -0
  1195. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/identity/index.d.ts +4 -0
  1196. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/identity/tokenIdentity.d.ts +14 -0
  1197. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/index.d.ts +52 -0
  1198. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/logger.d.ts +13 -0
  1199. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/metrics.d.ts +93 -0
  1200. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/middleware.d.ts +541 -0
  1201. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/pagination.d.ts +33 -0
  1202. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/profile.d.ts +30 -0
  1203. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/response.d.ts +40 -0
  1204. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/retry.d.ts +162 -0
  1205. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/schema/schema-deprecated.d.ts +143 -0
  1206. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/schema/schema.d.ts +236 -0
  1207. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/schema/sentinels.d.ts +65 -0
  1208. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/schema/static-schemas.d.ts +99 -0
  1209. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/schema/traits.d.ts +46 -0
  1210. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/serde.d.ts +114 -0
  1211. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/shapes.d.ts +79 -0
  1212. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/signature.d.ts +172 -0
  1213. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/stream.d.ts +22 -0
  1214. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/streaming-payload/streaming-blob-common-types.d.ts +28 -0
  1215. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/streaming-payload/streaming-blob-payload-input-types.d.ts +54 -0
  1216. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/streaming-payload/streaming-blob-payload-output-types.d.ts +41 -0
  1217. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/transfer.d.ts +42 -0
  1218. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/transform/client-method-transforms.d.ts +26 -0
  1219. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/transform/client-payload-blob-type-narrow.d.ts +73 -0
  1220. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/transform/exact.d.ts +6 -0
  1221. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/transform/mutable.d.ts +6 -0
  1222. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/transform/no-undefined.d.ts +68 -0
  1223. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/transform/type-transform.d.ts +39 -0
  1224. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/abort-handler.d.ts +7 -0
  1225. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/abort.d.ts +45 -0
  1226. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/auth/HttpApiKeyAuth.d.ts +7 -0
  1227. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/auth/HttpAuthScheme.d.ts +49 -0
  1228. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/auth/HttpAuthSchemeProvider.d.ts +20 -0
  1229. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/auth/HttpSigner.d.ts +41 -0
  1230. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/auth/IdentityProviderConfig.d.ts +14 -0
  1231. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/auth/auth.d.ts +59 -0
  1232. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/auth/index.d.ts +7 -0
  1233. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/blob/blob-payload-input-types.d.ts +37 -0
  1234. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/checksum.d.ts +61 -0
  1235. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/client.d.ts +57 -0
  1236. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/command.d.ts +28 -0
  1237. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/connection/config.d.ts +15 -0
  1238. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/connection/index.d.ts +3 -0
  1239. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/connection/manager.d.ts +34 -0
  1240. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/connection/pool.d.ts +32 -0
  1241. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/crypto.d.ts +58 -0
  1242. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/downlevel-ts3.4/transform/type-transform.d.ts +40 -0
  1243. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/encode.d.ts +31 -0
  1244. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/endpoint.d.ts +77 -0
  1245. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/endpoints/EndpointParameterInstructions.d.ts +41 -0
  1246. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/endpoints/EndpointRuleObject.d.ts +27 -0
  1247. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/endpoints/ErrorRuleObject.d.ts +10 -0
  1248. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/endpoints/RuleSetObject.d.ts +28 -0
  1249. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/endpoints/TreeRuleObject.d.ts +16 -0
  1250. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/endpoints/index.d.ts +5 -0
  1251. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/endpoints/shared.d.ts +55 -0
  1252. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/eventStream.d.ts +137 -0
  1253. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/extensions/checksum.d.ts +58 -0
  1254. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/extensions/defaultClientConfiguration.d.ts +32 -0
  1255. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/extensions/defaultExtensionConfiguration.d.ts +9 -0
  1256. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/extensions/index.d.ts +6 -0
  1257. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/extensions/retry.d.ts +18 -0
  1258. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/externals-check/browser-externals-check.d.ts +35 -0
  1259. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/feature-ids.d.ts +16 -0
  1260. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/http/httpHandlerInitialization.d.ts +142 -0
  1261. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/http.d.ts +110 -0
  1262. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/identity/apiKeyIdentity.d.ts +14 -0
  1263. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/identity/awsCredentialIdentity.d.ts +31 -0
  1264. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/identity/identity.d.ts +15 -0
  1265. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/identity/index.d.ts +4 -0
  1266. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/identity/tokenIdentity.d.ts +14 -0
  1267. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/index.d.ts +52 -0
  1268. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/logger.d.ts +13 -0
  1269. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/metrics.d.ts +93 -0
  1270. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/middleware.d.ts +541 -0
  1271. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/pagination.d.ts +33 -0
  1272. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/profile.d.ts +30 -0
  1273. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/response.d.ts +40 -0
  1274. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/retry.d.ts +162 -0
  1275. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/schema/schema-deprecated.d.ts +149 -0
  1276. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/schema/schema.d.ts +251 -0
  1277. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/schema/sentinels.d.ts +65 -0
  1278. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/schema/static-schemas.d.ts +118 -0
  1279. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/schema/traits.d.ts +46 -0
  1280. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/serde.d.ts +114 -0
  1281. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/shapes.d.ts +79 -0
  1282. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/signature.d.ts +172 -0
  1283. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/stream.d.ts +22 -0
  1284. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/streaming-payload/streaming-blob-common-types.d.ts +28 -0
  1285. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/streaming-payload/streaming-blob-payload-input-types.d.ts +54 -0
  1286. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/streaming-payload/streaming-blob-payload-output-types.d.ts +41 -0
  1287. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/transfer.d.ts +42 -0
  1288. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/transform/client-method-transforms.d.ts +26 -0
  1289. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/transform/client-payload-blob-type-narrow.d.ts +77 -0
  1290. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/transform/exact.d.ts +14 -0
  1291. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/transform/mutable.d.ts +6 -0
  1292. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/transform/no-undefined.d.ts +88 -0
  1293. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/transform/type-transform.d.ts +40 -0
  1294. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/uri.d.ts +17 -0
  1295. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/util.d.ts +192 -0
  1296. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/ts3.4/waiter.d.ts +35 -0
  1297. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/uri.d.ts +17 -0
  1298. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/util.d.ts +176 -0
  1299. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/dist-types/waiter.d.ts +35 -0
  1300. package/node_modules/@smithy/node-http-handler/node_modules/@smithy/types/package.json +50 -0
  1301. package/node_modules/@smithy/node-http-handler/package.json +2 -2
  1302. package/node_modules/esbuild/LICENSE.md +21 -0
  1303. package/node_modules/esbuild/README.md +3 -0
  1304. package/node_modules/esbuild/bin/esbuild +223 -0
  1305. package/node_modules/esbuild/install.js +300 -0
  1306. package/node_modules/esbuild/lib/main.d.ts +720 -0
  1307. package/node_modules/esbuild/lib/main.js +2536 -0
  1308. package/node_modules/esbuild/package.json +47 -0
  1309. package/node_modules/ignore/README.md +52 -0
  1310. package/node_modules/ignore/index.js +785 -129
  1311. package/node_modules/ignore/legacy.js +660 -98
  1312. package/node_modules/ignore/package.json +10 -4
  1313. package/node_modules/marked/README.md +1 -0
  1314. package/node_modules/marked/lib/marked.d.ts +7 -0
  1315. package/node_modules/marked/lib/marked.esm.js +30 -30
  1316. package/node_modules/marked/lib/marked.esm.js.map +3 -3
  1317. package/node_modules/marked/lib/marked.umd.js +30 -30
  1318. package/node_modules/marked/lib/marked.umd.js.map +3 -3
  1319. package/node_modules/marked/man/marked.1 +1 -1
  1320. package/node_modules/marked/package.json +2 -2
  1321. package/node_modules/typebox/build/compile/validator.d.mts +1 -1
  1322. package/node_modules/typebox/build/compile/validator.mjs +1 -1
  1323. package/node_modules/typebox/build/format/idna/idn-hostname.mjs +7 -5
  1324. package/node_modules/typebox/build/format/iri.mjs +5 -1
  1325. package/node_modules/typebox/build/guard/emit.mjs +2 -4
  1326. package/node_modules/typebox/build/guard/guard.mjs +6 -18
  1327. package/node_modules/typebox/build/guard/string.mjs +16 -24
  1328. package/node_modules/typebox/build/schema/compile.d.mts +3 -2
  1329. package/node_modules/typebox/build/schema/compile.mjs +8 -8
  1330. package/node_modules/typebox/build/schema/engine/_context.d.mts +1 -6
  1331. package/node_modules/typebox/build/schema/engine/_context.mjs +9 -14
  1332. package/node_modules/typebox/build/schema/engine/_functions.mjs +1 -1
  1333. package/node_modules/typebox/build/schema/engine/_stack.d.mts +6 -2
  1334. package/node_modules/typebox/build/schema/engine/_stack.mjs +135 -32
  1335. package/node_modules/typebox/build/schema/engine/additionalProperties.mjs +16 -4
  1336. package/node_modules/typebox/build/schema/engine/allOf.mjs +2 -2
  1337. package/node_modules/typebox/build/schema/engine/anyOf.mjs +2 -2
  1338. package/node_modules/typebox/build/schema/engine/if.mjs +2 -2
  1339. package/node_modules/typebox/build/schema/engine/oneOf.mjs +2 -2
  1340. package/node_modules/typebox/build/schema/engine/propertyNames.mjs +1 -3
  1341. package/node_modules/typebox/build/schema/engine/ref.mjs +2 -2
  1342. package/node_modules/typebox/build/schema/engine/schema.mjs +6 -0
  1343. package/node_modules/typebox/build/schema/engine/unevaluatedItems.mjs +2 -2
  1344. package/node_modules/typebox/build/schema/engine/unevaluatedProperties.mjs +2 -2
  1345. package/node_modules/typebox/build/schema/errors.d.mts +2 -2
  1346. package/node_modules/typebox/build/schema/errors.mjs +7 -13
  1347. package/node_modules/typebox/build/schema/intern/index.d.mts +1 -0
  1348. package/node_modules/typebox/build/schema/intern/index.mjs +1 -0
  1349. package/node_modules/typebox/build/schema/intern/intern.d.mts +14 -0
  1350. package/node_modules/typebox/build/schema/intern/intern.mjs +259 -0
  1351. package/node_modules/typebox/build/schema/parse.d.mts +1 -0
  1352. package/node_modules/typebox/build/schema/parse.mjs +10 -5
  1353. package/node_modules/typebox/build/schema/resolve/resolve.d.mts +34 -3
  1354. package/node_modules/typebox/build/schema/resolve/resolve.mjs +198 -73
  1355. package/node_modules/typebox/build/schema/schema.d.mts +1 -0
  1356. package/node_modules/typebox/build/schema/schema.mjs +1 -0
  1357. package/node_modules/typebox/build/value/errors/errors.d.mts +2 -12
  1358. package/node_modules/typebox/build/value/errors/errors.mjs +2 -7
  1359. package/node_modules/typebox/package.json +1 -1
  1360. package/node_modules/typebox/readme.md +9 -5
  1361. package/node_modules/undici/docs/docs/api/Client.md +4 -0
  1362. package/node_modules/undici/docs/docs/api/EnvHttpProxyAgent.md +3 -2
  1363. package/node_modules/undici/docs/docs/api/EventSource.md +4 -0
  1364. package/node_modules/undici/docs/docs/api/Interceptors.md +7 -3
  1365. package/node_modules/undici/docs/docs/api/Socks5ProxyAgent.md +7 -1
  1366. package/node_modules/undici/lib/cache/memory-cache-store.js +2 -2
  1367. package/node_modules/undici/lib/core/symbols.js +2 -0
  1368. package/node_modules/undici/lib/dispatcher/agent.js +7 -2
  1369. package/node_modules/undici/lib/dispatcher/balanced-pool.js +7 -4
  1370. package/node_modules/undici/lib/dispatcher/client-h1.js +12 -4
  1371. package/node_modules/undici/lib/dispatcher/client-h2.js +43 -3
  1372. package/node_modules/undici/lib/dispatcher/client.js +3 -2
  1373. package/node_modules/undici/lib/dispatcher/dispatcher-base.js +13 -1
  1374. package/node_modules/undici/lib/dispatcher/dispatcher.js +15 -1
  1375. package/node_modules/undici/lib/dispatcher/dispatcher1-wrapper.js +3 -0
  1376. package/node_modules/undici/lib/dispatcher/env-http-proxy-agent.js +10 -3
  1377. package/node_modules/undici/lib/dispatcher/proxy-agent.js +18 -1
  1378. package/node_modules/undici/lib/dispatcher/retry-agent.js +3 -0
  1379. package/node_modules/undici/lib/dispatcher/round-robin-pool.js +1 -1
  1380. package/node_modules/undici/lib/dispatcher/socks5-proxy-agent.js +91 -21
  1381. package/node_modules/undici/lib/handler/cache-handler.js +29 -5
  1382. package/node_modules/undici/lib/handler/decorator-handler.js +7 -1
  1383. package/node_modules/undici/lib/handler/deduplication-handler.js +12 -6
  1384. package/node_modules/undici/lib/handler/redirect-handler.js +21 -4
  1385. package/node_modules/undici/lib/handler/retry-handler.js +148 -30
  1386. package/node_modules/undici/lib/interceptor/cache.js +65 -12
  1387. package/node_modules/undici/lib/interceptor/decompress.js +115 -13
  1388. package/node_modules/undici/lib/interceptor/deduplicate.js +5 -4
  1389. package/node_modules/undici/lib/interceptor/dns.js +7 -0
  1390. package/node_modules/undici/lib/interceptor/dump.js +10 -23
  1391. package/node_modules/undici/lib/mock/mock-agent.js +13 -1
  1392. package/node_modules/undici/lib/mock/mock-utils.js +11 -10
  1393. package/node_modules/undici/lib/util/cache.js +45 -3
  1394. package/node_modules/undici/lib/web/cookies/parse.js +150 -147
  1395. package/node_modules/undici/lib/web/eventsource/eventsource-stream.js +28 -1
  1396. package/node_modules/undici/lib/web/eventsource/eventsource.js +13 -3
  1397. package/node_modules/undici/lib/web/fetch/index.js +6 -0
  1398. package/node_modules/undici/lib/web/fetch/request.js +2 -3
  1399. package/node_modules/undici/lib/web/fetch/util.js +6 -1
  1400. package/node_modules/undici/lib/web/webidl/index.js +3 -3
  1401. package/node_modules/undici/lib/web/websocket/connection.js +1 -1
  1402. package/node_modules/undici/lib/web/websocket/permessage-deflate.js +5 -0
  1403. package/node_modules/undici/lib/web/websocket/stream/websocketstream.js +8 -10
  1404. package/node_modules/undici/package.json +3 -3
  1405. package/node_modules/undici/types/client.d.ts +10 -0
  1406. package/node_modules/undici/types/interceptors.d.ts +2 -0
  1407. package/node_modules/undici/types/mock-agent.d.ts +11 -10
  1408. package/node_modules/undici/types/socks5-proxy-agent.d.ts +2 -0
  1409. package/package.json +70 -49
  1410. package/vendor/pi-client/client.d.ts +20 -15
  1411. package/vendor/pi-client/client.d.ts.map +1 -1
  1412. package/vendor/pi-client/client.js +248 -245
  1413. package/vendor/pi-client/client.js.map +1 -1
  1414. package/vendor/pi-client/connection.d.ts +4 -3
  1415. package/vendor/pi-client/connection.d.ts.map +1 -1
  1416. package/vendor/pi-client/connection.js +13 -9
  1417. package/vendor/pi-client/connection.js.map +1 -1
  1418. package/vendor/pi-client/errors.d.ts +6 -15
  1419. package/vendor/pi-client/errors.d.ts.map +1 -1
  1420. package/vendor/pi-client/errors.js +10 -25
  1421. package/vendor/pi-client/errors.js.map +1 -1
  1422. package/vendor/pi-client/index.d.ts +3 -4
  1423. package/vendor/pi-client/index.d.ts.map +1 -1
  1424. package/vendor/pi-client/index.js +2 -2
  1425. package/vendor/pi-client/index.js.map +1 -1
  1426. package/vendor/pi-client/types.d.ts +14 -8
  1427. package/vendor/pi-client/types.d.ts.map +1 -1
  1428. package/vendor/pi-client/types.js.map +1 -1
  1429. package/vendor/pi-client/unix.d.ts +14 -1
  1430. package/vendor/pi-client/unix.d.ts.map +1 -1
  1431. package/vendor/pi-client/unix.js +138 -8
  1432. package/vendor/pi-client/unix.js.map +1 -1
  1433. package/vendor/pi-protocol/codec.d.ts +2 -4
  1434. package/vendor/pi-protocol/codec.d.ts.map +1 -1
  1435. package/vendor/pi-protocol/codec.js +7 -34
  1436. package/vendor/pi-protocol/codec.js.map +1 -1
  1437. package/vendor/pi-protocol/framing.d.ts +0 -2
  1438. package/vendor/pi-protocol/framing.d.ts.map +1 -1
  1439. package/vendor/pi-protocol/framing.js +0 -15
  1440. package/vendor/pi-protocol/framing.js.map +1 -1
  1441. package/vendor/pi-protocol/index.d.ts +1 -1
  1442. package/vendor/pi-protocol/index.d.ts.map +1 -1
  1443. package/vendor/pi-protocol/index.js +1 -1
  1444. package/vendor/pi-protocol/index.js.map +1 -1
  1445. package/vendor/pi-protocol/protocol.d.ts +167 -0
  1446. package/vendor/pi-protocol/protocol.d.ts.map +1 -0
  1447. package/vendor/pi-protocol/protocol.js +85 -0
  1448. package/vendor/pi-protocol/protocol.js.map +1 -0
  1449. package/dist/bun/register-bedrock.d.ts +0 -2
  1450. package/dist/bun/register-bedrock.d.ts.map +0 -1
  1451. package/dist/bun/register-bedrock.js +0 -4
  1452. package/dist/bun/register-bedrock.js.map +0 -1
  1453. package/dist/cli/experimental/auth.d.ts +0 -16
  1454. package/dist/cli/experimental/auth.d.ts.map +0 -1
  1455. package/dist/cli/experimental/auth.js +0 -13
  1456. package/dist/cli/experimental/auth.js.map +0 -1
  1457. package/dist/cli/experimental/cli.d.ts +0 -6
  1458. package/dist/cli/experimental/cli.d.ts.map +0 -1
  1459. package/dist/cli/experimental/cli.js +0 -5
  1460. package/dist/cli/experimental/cli.js.map +0 -1
  1461. package/dist/cli/experimental/command-options.d.ts +0 -17
  1462. package/dist/cli/experimental/command-options.d.ts.map +0 -1
  1463. package/dist/cli/experimental/command-options.js +0 -35
  1464. package/dist/cli/experimental/command-options.js.map +0 -1
  1465. package/dist/cli/experimental/command.d.ts +0 -63
  1466. package/dist/cli/experimental/command.d.ts.map +0 -1
  1467. package/dist/cli/experimental/command.js +0 -127
  1468. package/dist/cli/experimental/command.js.map +0 -1
  1469. package/dist/cli/experimental/commands/client.d.ts +0 -13
  1470. package/dist/cli/experimental/commands/client.d.ts.map +0 -1
  1471. package/dist/cli/experimental/commands/client.js +0 -25
  1472. package/dist/cli/experimental/commands/client.js.map +0 -1
  1473. package/dist/cli/experimental/commands/pi.d.ts +0 -15
  1474. package/dist/cli/experimental/commands/pi.d.ts.map +0 -1
  1475. package/dist/cli/experimental/commands/pi.js +0 -28
  1476. package/dist/cli/experimental/commands/pi.js.map +0 -1
  1477. package/dist/cli/experimental/commands/server.d.ts +0 -13
  1478. package/dist/cli/experimental/commands/server.d.ts.map +0 -1
  1479. package/dist/cli/experimental/commands/server.js +0 -25
  1480. package/dist/cli/experimental/commands/server.js.map +0 -1
  1481. package/dist/cli/experimental/transport-address.d.ts +0 -10
  1482. package/dist/cli/experimental/transport-address.d.ts.map +0 -1
  1483. package/dist/cli/experimental/transport-address.js +0 -38
  1484. package/dist/cli/experimental/transport-address.js.map +0 -1
  1485. package/dist/client/remote-session.d.ts +0 -53
  1486. package/dist/client/remote-session.d.ts.map +0 -1
  1487. package/dist/client/remote-session.js +0 -340
  1488. package/dist/client/remote-session.js.map +0 -1
  1489. package/dist/client/transcript.d.ts +0 -12
  1490. package/dist/client/transcript.d.ts.map +0 -1
  1491. package/dist/client/transcript.js +0 -98
  1492. package/dist/client/transcript.js.map +0 -1
  1493. package/dist/server/create-harness.d.ts +0 -26
  1494. package/dist/server/create-harness.d.ts.map +0 -1
  1495. package/dist/server/create-harness.js +0 -106
  1496. package/dist/server/create-harness.js.map +0 -1
  1497. package/dist/utils/clipboard-native.d.ts +0 -11
  1498. package/dist/utils/clipboard-native.d.ts.map +0 -1
  1499. package/dist/utils/clipboard-native.js +0 -20
  1500. package/dist/utils/clipboard-native.js.map +0 -1
  1501. package/docs/AGENTS.md +0 -67
  1502. package/node_modules/@earendil-works/pi-agent-core/dist/harness/reducer.d.ts +0 -100
  1503. package/node_modules/@earendil-works/pi-agent-core/dist/harness/reducer.d.ts.map +0 -1
  1504. package/node_modules/@earendil-works/pi-agent-core/dist/harness/reducer.js +0 -420
  1505. package/node_modules/@earendil-works/pi-agent-core/dist/harness/reducer.js.map +0 -1
  1506. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/errors.d.ts +0 -9
  1507. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/errors.d.ts.map +0 -1
  1508. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/errors.js +0 -18
  1509. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl/errors.js.map +0 -1
  1510. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl.d.ts +0 -3
  1511. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl.d.ts.map +0 -1
  1512. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl.js +0 -2
  1513. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl.js.map +0 -1
  1514. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/state.d.ts +0 -65
  1515. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/state.d.ts.map +0 -1
  1516. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/state.js +0 -320
  1517. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/state.js.map +0 -1
  1518. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/testing/conformance.d.ts +0 -4
  1519. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/testing/conformance.d.ts.map +0 -1
  1520. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/testing/conformance.js +0 -762
  1521. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/testing/conformance.js.map +0 -1
  1522. package/node_modules/@earendil-works/pi-agent-core/dist/search/scanning.d.ts +0 -29
  1523. package/node_modules/@earendil-works/pi-agent-core/dist/search/scanning.d.ts.map +0 -1
  1524. package/node_modules/@earendil-works/pi-agent-core/dist/search/scanning.js +0 -103
  1525. package/node_modules/@earendil-works/pi-agent-core/dist/search/scanning.js.map +0 -1
  1526. package/node_modules/@earendil-works/pi-ai/dist/api/cloudflare-gateway-binding.d.ts +0 -69
  1527. package/node_modules/@earendil-works/pi-ai/dist/api/cloudflare-gateway-binding.d.ts.map +0 -1
  1528. package/node_modules/@earendil-works/pi-ai/dist/api/cloudflare-gateway-binding.js +0 -159
  1529. package/node_modules/@earendil-works/pi-ai/dist/api/cloudflare-gateway-binding.js.map +0 -1
  1530. package/node_modules/@earendil-works/pi-tui/native/darwin/src/darwin-modifiers.c +0 -70
  1531. package/node_modules/@earendil-works/pi-tui/native/win32/prebuilds/win32-arm64/win32-console-mode.node +0 -0
  1532. package/node_modules/@earendil-works/pi-tui/native/win32/prebuilds/win32-x64/win32-console-mode.node +0 -0
  1533. package/node_modules/@earendil-works/pi-tui/native/win32/src/win32-console-mode.c +0 -119
  1534. package/node_modules/@mariozechner/clipboard/.yarnrc.yml +0 -1
  1535. package/node_modules/@mariozechner/clipboard/Cargo.toml +0 -45
  1536. package/node_modules/@mariozechner/clipboard/README.md +0 -60
  1537. package/node_modules/@mariozechner/clipboard/build.rs +0 -5
  1538. package/node_modules/@mariozechner/clipboard/exp.ts +0 -12
  1539. package/node_modules/@mariozechner/clipboard/index.d.ts +0 -37
  1540. package/node_modules/@mariozechner/clipboard/index.js +0 -606
  1541. package/node_modules/@mariozechner/clipboard/package.json +0 -45
  1542. package/node_modules/@mariozechner/clipboard/src/clipboard_rs/common.rs +0 -307
  1543. package/node_modules/@mariozechner/clipboard/src/clipboard_rs/mod.rs +0 -93
  1544. package/node_modules/@mariozechner/clipboard/src/clipboard_rs/platform/ios.rs +0 -313
  1545. package/node_modules/@mariozechner/clipboard/src/clipboard_rs/platform/macos.rs +0 -471
  1546. package/node_modules/@mariozechner/clipboard/src/clipboard_rs/platform/mod.rs +0 -252
  1547. package/node_modules/@mariozechner/clipboard/src/clipboard_rs/platform/wayland.rs +0 -431
  1548. package/node_modules/@mariozechner/clipboard/src/clipboard_rs/platform/win.rs +0 -712
  1549. package/node_modules/@mariozechner/clipboard/src/clipboard_rs/platform/x11.rs +0 -916
  1550. package/node_modules/@mariozechner/clipboard/src/lib.rs +0 -194
  1551. package/vendor/pi-client/session-handle.d.ts +0 -54
  1552. package/vendor/pi-client/session-handle.d.ts.map +0 -1
  1553. package/vendor/pi-client/session-handle.js +0 -50
  1554. package/vendor/pi-client/session-handle.js.map +0 -1
  1555. package/vendor/pi-client/state.d.ts +0 -22
  1556. package/vendor/pi-client/state.d.ts.map +0 -1
  1557. package/vendor/pi-client/state.js +0 -145
  1558. package/vendor/pi-client/state.js.map +0 -1
  1559. package/vendor/pi-protocol/schemas.d.ts +0 -13739
  1560. package/vendor/pi-protocol/schemas.d.ts.map +0 -1
  1561. package/vendor/pi-protocol/schemas.js +0 -386
  1562. package/vendor/pi-protocol/schemas.js.map +0 -1
@@ -55,7 +55,7 @@ export interface GenerateBranchSummaryOptions {
55
55
  customInstructions?: string;
56
56
  /** If true, customInstructions replaces the default prompt instead of being appended */
57
57
  replaceInstructions?: boolean;
58
- /** Tokens reserved for prompt + LLM response (default 16384) */
58
+ /** Tokens reserved when selecting branch history (default 16384) */
59
59
  reserveTokens?: number;
60
60
  /** Extension runner used to emit session_before_compact for branch summaries */
61
61
  extensionRunner?: ExtensionRunner;
@@ -1 +1 @@
1
- {"version":3,"file":"branch-summarization.d.ts","sourceRoot":"","sources":["../../../src/core/compaction/branch-summarization.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"branch-summarization.d.ts","sourceRoot":"","sources":["../../../src/core/compaction/branch-summarization.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,7 @@
6
6
  */
7
7
  import { randomUUID } from "node:crypto";
8
8
  import { convertToLlm, createBranchSummaryMessage, createCompactionSummaryMessage, createCustomMessage, isContextExcludedCustomMessage, } from "../messages.js";
9
- import { completeSummarization, estimateTokens } from "./compaction.js";
9
+ import { completeSummarization, estimateTokens, getSummarizationFailure } from "./compaction.js";
10
10
  import { computeFileLists, contentTextForSummary, createFileOps, extractFileOpsFromMessage, formatFileOperations, SUMMARIZATION_SYSTEM_PROMPT, serializeConversation, } from "./utils.js";
11
11
  // ============================================================================
12
12
  // Entry Collection
@@ -257,19 +257,21 @@ export async function generateBranchSummary(entries, options) {
257
257
  timestamp: Date.now(),
258
258
  },
259
259
  ];
260
+ const maxTokens = Math.min(4096, model.maxTokens > 0 ? model.maxTokens : Number.POSITIVE_INFINITY);
260
261
  // Call LLM for summarization. Prefer the session stream function so SDK
261
262
  // request behavior (timeouts, retries, attribution headers) stays consistent
262
263
  // without running through agent state/events. Retried via completeSummarization
263
264
  // so transient stream drops reuse the configured retry policy.
264
265
  const context = { systemPrompt: SUMMARIZATION_SYSTEM_PROMPT, messages: summarizationMessages };
265
- const requestOptions = { apiKey, headers, extraBody, env, signal, maxTokens: 2048 };
266
+ const requestOptions = { apiKey, headers, extraBody, env, signal, maxTokens };
266
267
  const response = await completeSummarization(model, context, requestOptions, streamFn, retry, callbacks);
267
268
  // Check if aborted or errored
268
269
  if (response.stopReason === "aborted") {
269
270
  return { aborted: true };
270
271
  }
271
- if (response.stopReason === "error") {
272
- return { error: response.errorMessage || "Summarization failed" };
272
+ const failure = getSummarizationFailure(response, "Branch summarization");
273
+ if (failure) {
274
+ return { error: failure };
273
275
  }
274
276
  if (response.content.some((block) => block.type === "toolCall")) {
275
277
  return { error: "Branch summarization attempted to call a tool" };
@@ -1 +1 @@
1
- {"version":3,"file":"branch-summarization.js","sourceRoot":"","sources":["../../../src/core/compaction/branch-summarization.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAMzC,OAAO,EACN,YAAY,EACZ,0BAA0B,EAC1B,8BAA8B,EAC9B,mBAAmB,EACnB,8BAA8B,GAC9B,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACxE,OAAO,EACN,gBAAgB,EAChB,qBAAqB,EACrB,aAAa,EACb,yBAAyB,EAEzB,oBAAoB,EACpB,2BAA2B,EAC3B,qBAAqB,GACrB,MAAM,YAAY,CAAC;AAwEpB,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,8BAA8B,CAC7C,OAA+B,EAC/B,SAAwB,EACxB,QAAgB;IAEhB,2CAA2C;IAC3C,IAAI,CAAC,SAAS,EAAE,CAAC;QAChB,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC;IAChD,CAAC;IAED,2DAA2D;IAC3D,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACvE,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAE/C,iFAAiF;IACjF,IAAI,gBAAgB,GAAkB,IAAI,CAAC;IAC3C,KAAK,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACjD,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;YACnC,gBAAgB,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACpC,MAAM;QACP,CAAC;IACF,CAAC;IAED,wDAAwD;IACxD,MAAM,OAAO,GAAmB,EAAE,CAAC;IACnC,IAAI,OAAO,GAAkB,SAAS,CAAC;IAEvC,OAAO,OAAO,IAAI,OAAO,KAAK,gBAAgB,EAAE,CAAC;QAChD,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACxC,IAAI,CAAC,KAAK;YAAE,MAAM;QAClB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpB,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC;IAC1B,CAAC;IAED,qCAAqC;IACrC,OAAO,CAAC,OAAO,EAAE,CAAC;IAElB,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC;AACtC,CAAC;AAED,+EAA+E;AAC/E,8BAA8B;AAC9B,+EAA+E;AAE/E;;;GAGG;AACH,SAAS,mBAAmB,CAAC,KAAmB;IAC/C,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,SAAS;YACb,0DAA0D;YAC1D,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,YAAY;gBAAE,OAAO,SAAS,CAAC;YAC1D,OAAO,KAAK,CAAC,OAAO,CAAC;QAEtB,KAAK,gBAAgB;YACpB,IAAI,8BAA8B,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;gBACtD,OAAO,SAAS,CAAC;YAClB,CAAC;YAED,OAAO,mBAAmB,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QAE5G,KAAK,gBAAgB;YACpB,OAAO,0BAA0B,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QAEjF,KAAK,YAAY;YAChB,OAAO,8BAA8B,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QAE3F,iDAAiD;QACjD,KAAK,uBAAuB,CAAC;QAC7B,KAAK,cAAc,CAAC;QACpB,KAAK,QAAQ,CAAC;QACd,KAAK,OAAO,CAAC;QACb,KAAK,cAAc;YAClB,OAAO,SAAS,CAAC;IACnB,CAAC;AACF,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAuB,EAAE,WAAW,GAAW,CAAC;IACpF,MAAM,QAAQ,GAAmB,EAAE,CAAC;IACpC,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;IAChC,IAAI,WAAW,GAAG,CAAC,CAAC;IAEpB,yFAAyF;IACzF,gFAAgF;IAChF,6FAA6F;IAC7F,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YACzE,MAAM,OAAO,GAAG,KAAK,CAAC,OAA+B,CAAC;YACtD,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;gBACtC,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,SAAS;oBAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACxD,CAAC;YACD,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;gBAC1C,0EAA0E;gBAC1E,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;oBACvC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACvB,CAAC;YACF,CAAC;QACF,CAAC;IACF,CAAC;IAED,8EAA8E;IAC9E,KAAK,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9C,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,OAAO,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,CAAC,OAAO;YAAE,SAAS;QAEvB,wDAAwD;QACxD,yBAAyB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAE5C,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;QAEvC,6BAA6B;QAC7B,IAAI,WAAW,GAAG,CAAC,IAAI,WAAW,GAAG,MAAM,GAAG,WAAW,EAAE,CAAC;YAC3D,6EAA6E;YAC7E,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;gBACpE,IAAI,WAAW,GAAG,WAAW,GAAG,GAAG,EAAE,CAAC;oBACrC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;oBAC1B,WAAW,IAAI,MAAM,CAAC;gBACvB,CAAC;YACF,CAAC;YACD,8BAA8B;YAC9B,MAAM;QACP,CAAC;QAED,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC1B,WAAW,IAAI,MAAM,CAAC;IACvB,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;AAC3C,CAAC;AAED,+EAA+E;AAC/E,qBAAqB;AACrB,+EAA+E;AAE/E,MAAM,uBAAuB,GAAG;;;CAG/B,CAAC;AAEF,MAAM,qBAAqB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;0FA2B4D,CAAC;AAE3F,SAAS,iCAAiC,CACzC,OAAuB,EACvB,WAA8B,EAC9B,aAAqB;IAErB,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAE9B,OAAO;QACN,gBAAgB,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE;QACtC,mBAAmB,EAAE,WAAW,CAAC,QAAQ;QACzC,kBAAkB,EAAE,EAAE;QACtB,WAAW,EAAE,KAAK;QAClB,YAAY,EAAE,WAAW,CAAC,WAAW;QACrC,OAAO,EAAE,WAAW,CAAC,OAAO;QAC5B,QAAQ,EAAE;YACT,OAAO,EAAE,IAAI;YACb,aAAa;YACb,gBAAgB,EAAE,CAAC;SACnB;KACD,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAC1C,OAAuB,EACvB,OAAqC;IAErC,MAAM,EACL,KAAK,EACL,MAAM,EACN,OAAO,EACP,SAAS,EACT,GAAG,EACH,MAAM,EACN,kBAAkB,EAClB,mBAAmB,EACnB,aAAa,GAAG,KAAK,EACrB,eAAe,EACf,QAAQ,EACR,KAAK,EACL,SAAS,GACT,GAAG,OAAO,CAAC;IAEZ,2EAA2E;IAC3E,MAAM,aAAa,GAAG,KAAK,CAAC,aAAa,IAAI,MAAM,CAAC;IACpD,MAAM,WAAW,GAAG,aAAa,GAAG,aAAa,CAAC;IAElD,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACrE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,iBAAiB,CAAC;IAEhD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,OAAO,EAAE,yBAAyB,EAAE,CAAC;IAC/C,CAAC;IAED,IAAI,eAAe,EAAE,WAAW,CAAC,wBAAwB,CAAC,EAAE,CAAC;QAC5D,MAAM,WAAW,GAAG,iCAAiC,CAAC,OAAO,EAAE,iBAAiB,EAAE,aAAa,CAAC,CAAC;QACjG,MAAM,MAAM,GAAG,CAAC,MAAM,eAAe,CAAC,IAAI,CAAC;YAC1C,IAAI,EAAE,wBAAwB;YAC9B,MAAM,EAAE,QAAQ;YAChB,SAAS,EAAE,KAAK;YAChB,SAAS,EAAE,UAAU,EAAE;YACvB,WAAW;YACX,aAAa,EAAE,OAAO;YACtB,kBAAkB;YAClB,MAAM;SACN,CAAC,CAA2C,CAAC;QAE9C,IAAI,MAAM,EAAE,MAAM,EAAE,CAAC;YACpB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC1B,CAAC;QAED,IAAI,MAAM,EAAE,UAAU,EAAE,CAAC;YACxB,OAAO;gBACN,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC,OAAO;aAClC,CAAC;QACH,CAAC;IACF,CAAC;IAED,+DAA+D;IAC/D,kFAAkF;IAClF,MAAM,WAAW,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC3C,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,WAAW,CAAC,CAAC;IAE5D,eAAe;IACf,IAAI,YAAoB,CAAC;IACzB,IAAI,mBAAmB,IAAI,kBAAkB,EAAE,CAAC;QAC/C,YAAY,GAAG,kBAAkB,CAAC;IACnC,CAAC;SAAM,IAAI,kBAAkB,EAAE,CAAC;QAC/B,YAAY,GAAG,GAAG,qBAAqB,yBAAyB,kBAAkB,EAAE,CAAC;IACtF,CAAC;SAAM,CAAC;QACP,YAAY,GAAG,qBAAqB,CAAC;IACtC,CAAC;IACD,MAAM,UAAU,GAAG,mBAAmB,gBAAgB,wBAAwB,YAAY,EAAE,CAAC;IAE7F,MAAM,qBAAqB,GAAG;QAC7B;YACC,IAAI,EAAE,MAAe;YACrB,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;YACtD,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACrB;KACD,CAAC;IAEF,wEAAwE;IACxE,6EAA6E;IAC7E,gFAAgF;IAChF,+DAA+D;IAC/D,MAAM,OAAO,GAAG,EAAE,YAAY,EAAE,2BAA2B,EAAE,QAAQ,EAAE,qBAAqB,EAAE,CAAC;IAC/F,MAAM,cAAc,GAA+B,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAChH,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;IAEzG,8BAA8B;IAC9B,IAAI,QAAQ,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC1B,CAAC;IACD,IAAI,QAAQ,CAAC,UAAU,KAAK,OAAO,EAAE,CAAC;QACrC,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,YAAY,IAAI,sBAAsB,EAAE,CAAC;IACnE,CAAC;IACD,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,EAAE,CAAC;QACjE,OAAO,EAAE,KAAK,EAAE,+CAA+C,EAAE,CAAC;IACnE,CAAC;IAED,IAAI,OAAO,GAAG,qBAAqB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAEtD,+DAA+D;IAC/D,OAAO,GAAG,uBAAuB,GAAG,OAAO,CAAC;IAE5C,2CAA2C;IAC3C,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC/D,OAAO,IAAI,oBAAoB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IAE1D,OAAO;QACN,OAAO,EAAE,OAAO,IAAI,sBAAsB;QAC1C,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,SAAS;QACT,aAAa;KACb,CAAC;AACH,CAAC","sourcesContent":["/**\n * Branch summarization for tree navigation.\n *\n * When navigating to a different point in the session tree, this generates\n * a summary of the branch being left so context isn't lost.\n */\n\nimport { randomUUID } from \"node:crypto\";\nimport type { AgentMessage, StreamFn } from \"@earendil-works/pi-agent-core\";\nimport type { RetryCallbacks, RetryPolicy } from \"@earendil-works/pi-ai\";\nimport type { Model, SimpleStreamOptions, Usage } from \"@earendil-works/pi-ai/compat\";\nimport type { ExtensionRunner } from \"../extensions/runner.ts\";\nimport type { SessionBeforeCompactResult } from \"../extensions/types.ts\";\nimport {\n\tconvertToLlm,\n\tcreateBranchSummaryMessage,\n\tcreateCompactionSummaryMessage,\n\tcreateCustomMessage,\n\tisContextExcludedCustomMessage,\n} from \"../messages.ts\";\nimport type { ReadonlySessionManager, SessionEntry } from \"../session-manager.ts\";\nimport type { CompactionPreparation } from \"./compaction.ts\";\nimport { completeSummarization, estimateTokens } from \"./compaction.ts\";\nimport {\n\tcomputeFileLists,\n\tcontentTextForSummary,\n\tcreateFileOps,\n\textractFileOpsFromMessage,\n\ttype FileOperations,\n\tformatFileOperations,\n\tSUMMARIZATION_SYSTEM_PROMPT,\n\tserializeConversation,\n} from \"./utils.ts\";\n\ntype BranchSummaryStreamOptions = SimpleStreamOptions & {\n\treadonly env?: Record<string, string>;\n};\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface BranchSummaryResult {\n\tsummary?: string;\n\tusage?: Usage;\n\treadFiles?: string[];\n\tmodifiedFiles?: string[];\n\taborted?: boolean;\n\terror?: string;\n}\n\n/** Details stored in BranchSummaryEntry.details for file tracking */\nexport interface BranchSummaryDetails {\n\treadFiles: string[];\n\tmodifiedFiles: string[];\n}\n\nexport type { FileOperations } from \"./utils.ts\";\n\nexport interface BranchPreparation {\n\t/** Messages extracted for summarization, in chronological order */\n\tmessages: AgentMessage[];\n\t/** File operations extracted from tool calls */\n\tfileOps: FileOperations;\n\t/** Total estimated tokens in messages */\n\ttotalTokens: number;\n}\n\nexport interface CollectEntriesResult {\n\t/** Entries to summarize, in chronological order */\n\tentries: SessionEntry[];\n\t/** Common ancestor between old and new position, if any */\n\tcommonAncestorId: string | null;\n}\n\nexport interface GenerateBranchSummaryOptions {\n\t/** Model to use for summarization */\n\tmodel: Model<any>;\n\t/** API key for the model */\n\tapiKey?: string;\n\t/** Request headers for the model */\n\theaders?: Record<string, string>;\n\t/** Extra request body fields to merge into outgoing provider payload */\n\textraBody?: Record<string, unknown>;\n\t/** Provider-scoped environment values for the model */\n\tenv?: Record<string, string>;\n\t/** Abort signal for cancellation */\n\tsignal: AbortSignal;\n\t/** Optional custom instructions for summarization */\n\tcustomInstructions?: string;\n\t/** If true, customInstructions replaces the default prompt instead of being appended */\n\treplaceInstructions?: boolean;\n\t/** Tokens reserved for prompt + LLM response (default 16384) */\n\treserveTokens?: number;\n\t/** Extension runner used to emit session_before_compact for branch summaries */\n\textensionRunner?: ExtensionRunner;\n\t/** Optional session stream function. Used to preserve SDK request behavior without mutating agent state. */\n\tstreamFn?: StreamFn;\n\t/** Retry policy for transient summarization errors. Reuses coding-agent's `settings.retry`. */\n\tretry?: RetryPolicy;\n\t/** Optional callbacks for retry reporting (e.g. TUI retry indicators). */\n\tcallbacks?: RetryCallbacks;\n}\n\n// ============================================================================\n// Entry Collection\n// ============================================================================\n\n/**\n * Collect entries that should be summarized when navigating from one position to another.\n *\n * Walks from oldLeafId back to the common ancestor with targetId, collecting entries\n * along the way. Does NOT stop at compaction boundaries - those are included and their\n * summaries become context.\n *\n * @param session - Session manager (read-only access)\n * @param oldLeafId - Current position (where we're navigating from)\n * @param targetId - Target position (where we're navigating to)\n * @returns Entries to summarize and the common ancestor\n */\nexport function collectEntriesForBranchSummary(\n\tsession: ReadonlySessionManager,\n\toldLeafId: string | null,\n\ttargetId: string,\n): CollectEntriesResult {\n\t// If no old position, nothing to summarize\n\tif (!oldLeafId) {\n\t\treturn { entries: [], commonAncestorId: null };\n\t}\n\n\t// Find common ancestor (deepest node that's on both paths)\n\tconst oldPath = new Set(session.getBranch(oldLeafId).map((e) => e.id));\n\tconst targetPath = session.getBranch(targetId);\n\n\t// targetPath is root-first, so iterate backwards to find deepest common ancestor\n\tlet commonAncestorId: string | null = null;\n\tfor (let i = targetPath.length - 1; i >= 0; i--) {\n\t\tif (oldPath.has(targetPath[i].id)) {\n\t\t\tcommonAncestorId = targetPath[i].id;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Collect entries from old leaf back to common ancestor\n\tconst entries: SessionEntry[] = [];\n\tlet current: string | null = oldLeafId;\n\n\twhile (current && current !== commonAncestorId) {\n\t\tconst entry = session.getEntry(current);\n\t\tif (!entry) break;\n\t\tentries.push(entry);\n\t\tcurrent = entry.parentId;\n\t}\n\n\t// Reverse to get chronological order\n\tentries.reverse();\n\n\treturn { entries, commonAncestorId };\n}\n\n// ============================================================================\n// Entry to Message Conversion\n// ============================================================================\n\n/**\n * Extract AgentMessage from a session entry.\n * Similar to getMessageFromEntry in compaction.ts but also handles compaction entries.\n */\nfunction getMessageFromEntry(entry: SessionEntry): AgentMessage | undefined {\n\tswitch (entry.type) {\n\t\tcase \"message\":\n\t\t\t// Skip tool results - context is in assistant's tool call\n\t\t\tif (entry.message.role === \"toolResult\") return undefined;\n\t\t\treturn entry.message;\n\n\t\tcase \"custom_message\":\n\t\t\tif (isContextExcludedCustomMessage(entry.customType)) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\treturn createCustomMessage(entry.customType, entry.content, entry.display, entry.details, entry.timestamp);\n\n\t\tcase \"branch_summary\":\n\t\t\treturn createBranchSummaryMessage(entry.summary, entry.fromId, entry.timestamp);\n\n\t\tcase \"compaction\":\n\t\t\treturn createCompactionSummaryMessage(entry.summary, entry.tokensBefore, entry.timestamp);\n\n\t\t// These don't contribute to conversation content\n\t\tcase \"thinking_level_change\":\n\t\tcase \"model_change\":\n\t\tcase \"custom\":\n\t\tcase \"label\":\n\t\tcase \"session_info\":\n\t\t\treturn undefined;\n\t}\n}\n\n/**\n * Prepare entries for summarization with token budget.\n *\n * Walks entries from NEWEST to OLDEST, adding messages until we hit the token budget.\n * This ensures we keep the most recent context when the branch is too long.\n *\n * Also collects file operations from:\n * - Tool calls in assistant messages\n * - Existing branch_summary entries' details (for cumulative tracking)\n *\n * @param entries - Entries in chronological order\n * @param tokenBudget - Maximum tokens to include (0 = no limit)\n */\nexport function prepareBranchEntries(entries: SessionEntry[], tokenBudget: number = 0): BranchPreparation {\n\tconst messages: AgentMessage[] = [];\n\tconst fileOps = createFileOps();\n\tlet totalTokens = 0;\n\n\t// First pass: collect file ops from ALL entries (even if they don't fit in token budget)\n\t// This ensures we capture cumulative file tracking from nested branch summaries\n\t// Only extract from pi-generated summaries (fromHook !== true), not extension-generated ones\n\tfor (const entry of entries) {\n\t\tif (entry.type === \"branch_summary\" && !entry.fromHook && entry.details) {\n\t\t\tconst details = entry.details as BranchSummaryDetails;\n\t\t\tif (Array.isArray(details.readFiles)) {\n\t\t\t\tfor (const f of details.readFiles) fileOps.read.add(f);\n\t\t\t}\n\t\t\tif (Array.isArray(details.modifiedFiles)) {\n\t\t\t\t// Modified files go into both edited and written for proper deduplication\n\t\t\t\tfor (const f of details.modifiedFiles) {\n\t\t\t\t\tfileOps.edited.add(f);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Second pass: walk from newest to oldest, adding messages until token budget\n\tfor (let i = entries.length - 1; i >= 0; i--) {\n\t\tconst entry = entries[i];\n\t\tconst message = getMessageFromEntry(entry);\n\t\tif (!message) continue;\n\n\t\t// Extract file ops from assistant messages (tool calls)\n\t\textractFileOpsFromMessage(message, fileOps);\n\n\t\tconst tokens = estimateTokens(message);\n\n\t\t// Check budget before adding\n\t\tif (tokenBudget > 0 && totalTokens + tokens > tokenBudget) {\n\t\t\t// If this is a summary entry, try to fit it anyway as it's important context\n\t\t\tif (entry.type === \"compaction\" || entry.type === \"branch_summary\") {\n\t\t\t\tif (totalTokens < tokenBudget * 0.9) {\n\t\t\t\t\tmessages.unshift(message);\n\t\t\t\t\ttotalTokens += tokens;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Stop - we've hit the budget\n\t\t\tbreak;\n\t\t}\n\n\t\tmessages.unshift(message);\n\t\ttotalTokens += tokens;\n\t}\n\n\treturn { messages, fileOps, totalTokens };\n}\n\n// ============================================================================\n// Summary Generation\n// ============================================================================\n\nconst BRANCH_SUMMARY_PREAMBLE = `The user explored a different conversation branch before returning here.\nSummary of that exploration:\n\n`;\n\nconst BRANCH_SUMMARY_PROMPT = `Create a structured summary of this conversation branch for context when returning later.\n\nUse this EXACT format:\n\n## Goal\n[What was the user trying to accomplish in this branch?]\n\n## Constraints & Preferences\n- [Any constraints, preferences, or requirements mentioned]\n- [Or \"(none)\" if none were mentioned]\n\n## Progress\n### Done\n- [x] [Completed tasks/changes]\n\n### In Progress\n- [ ] [Work that was started but not finished]\n\n### Blocked\n- [Issues preventing progress, if any]\n\n## Key Decisions\n- **[Decision]**: [Brief rationale]\n\n## Next Steps\n1. [What should happen next to continue this work]\n\nKeep each section concise. Preserve exact file paths, function names, and error messages.`;\n\nfunction createBranchCompactionPreparation(\n\tentries: SessionEntry[],\n\tpreparation: BranchPreparation,\n\treserveTokens: number,\n): CompactionPreparation {\n\tconst firstEntry = entries[0];\n\n\treturn {\n\t\tfirstKeptEntryId: firstEntry?.id ?? \"\",\n\t\tmessagesToSummarize: preparation.messages,\n\t\tturnPrefixMessages: [],\n\t\tisSplitTurn: false,\n\t\ttokensBefore: preparation.totalTokens,\n\t\tfileOps: preparation.fileOps,\n\t\tsettings: {\n\t\t\tenabled: true,\n\t\t\treserveTokens,\n\t\t\tkeepRecentTokens: 0,\n\t\t},\n\t};\n}\n\n/**\n * Generate a summary of abandoned branch entries.\n *\n * @param entries - Session entries to summarize (chronological order)\n * @param options - Generation options\n */\nexport async function generateBranchSummary(\n\tentries: SessionEntry[],\n\toptions: GenerateBranchSummaryOptions,\n): Promise<BranchSummaryResult> {\n\tconst {\n\t\tmodel,\n\t\tapiKey,\n\t\theaders,\n\t\textraBody,\n\t\tenv,\n\t\tsignal,\n\t\tcustomInstructions,\n\t\treplaceInstructions,\n\t\treserveTokens = 16384,\n\t\textensionRunner,\n\t\tstreamFn,\n\t\tretry,\n\t\tcallbacks,\n\t} = options;\n\n\t// Token budget = context window minus reserved space for prompt + response\n\tconst contextWindow = model.contextWindow || 128000;\n\tconst tokenBudget = contextWindow - reserveTokens;\n\n\tconst branchPreparation = prepareBranchEntries(entries, tokenBudget);\n\tconst { messages, fileOps } = branchPreparation;\n\n\tif (messages.length === 0) {\n\t\treturn { summary: \"No content to summarize\" };\n\t}\n\n\tif (extensionRunner?.hasHandlers(\"session_before_compact\")) {\n\t\tconst preparation = createBranchCompactionPreparation(entries, branchPreparation, reserveTokens);\n\t\tconst result = (await extensionRunner.emit({\n\t\t\ttype: \"session_before_compact\",\n\t\t\treason: \"branch\",\n\t\t\twillRetry: false,\n\t\t\trequestId: randomUUID(),\n\t\t\tpreparation,\n\t\t\tbranchEntries: entries,\n\t\t\tcustomInstructions,\n\t\t\tsignal,\n\t\t})) as SessionBeforeCompactResult | undefined;\n\n\t\tif (result?.cancel) {\n\t\t\treturn { aborted: true };\n\t\t}\n\n\t\tif (result?.compaction) {\n\t\t\treturn {\n\t\t\t\tsummary: result.compaction.summary,\n\t\t\t};\n\t\t}\n\t}\n\n\t// Transform to LLM-compatible messages, then serialize to text\n\t// Serialization prevents the model from treating it as a conversation to continue\n\tconst llmMessages = convertToLlm(messages);\n\tconst conversationText = serializeConversation(llmMessages);\n\n\t// Build prompt\n\tlet instructions: string;\n\tif (replaceInstructions && customInstructions) {\n\t\tinstructions = customInstructions;\n\t} else if (customInstructions) {\n\t\tinstructions = `${BRANCH_SUMMARY_PROMPT}\\n\\nAdditional focus: ${customInstructions}`;\n\t} else {\n\t\tinstructions = BRANCH_SUMMARY_PROMPT;\n\t}\n\tconst promptText = `<conversation>\\n${conversationText}\\n</conversation>\\n\\n${instructions}`;\n\n\tconst summarizationMessages = [\n\t\t{\n\t\t\trole: \"user\" as const,\n\t\t\tcontent: [{ type: \"text\" as const, text: promptText }],\n\t\t\ttimestamp: Date.now(),\n\t\t},\n\t];\n\n\t// Call LLM for summarization. Prefer the session stream function so SDK\n\t// request behavior (timeouts, retries, attribution headers) stays consistent\n\t// without running through agent state/events. Retried via completeSummarization\n\t// so transient stream drops reuse the configured retry policy.\n\tconst context = { systemPrompt: SUMMARIZATION_SYSTEM_PROMPT, messages: summarizationMessages };\n\tconst requestOptions: BranchSummaryStreamOptions = { apiKey, headers, extraBody, env, signal, maxTokens: 2048 };\n\tconst response = await completeSummarization(model, context, requestOptions, streamFn, retry, callbacks);\n\n\t// Check if aborted or errored\n\tif (response.stopReason === \"aborted\") {\n\t\treturn { aborted: true };\n\t}\n\tif (response.stopReason === \"error\") {\n\t\treturn { error: response.errorMessage || \"Summarization failed\" };\n\t}\n\tif (response.content.some((block) => block.type === \"toolCall\")) {\n\t\treturn { error: \"Branch summarization attempted to call a tool\" };\n\t}\n\n\tlet summary = contentTextForSummary(response.content);\n\n\t// Prepend preamble to provide context about the branch summary\n\tsummary = BRANCH_SUMMARY_PREAMBLE + summary;\n\n\t// Compute file lists and append to summary\n\tconst { readFiles, modifiedFiles } = computeFileLists(fileOps);\n\tsummary += formatFileOperations(readFiles, modifiedFiles);\n\n\treturn {\n\t\tsummary: summary || \"No summary generated\",\n\t\tusage: response.usage,\n\t\treadFiles,\n\t\tmodifiedFiles,\n\t};\n}\n"]}
1
+ {"version":3,"file":"branch-summarization.js","sourceRoot":"","sources":["../../../src/core/compaction/branch-summarization.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Branch summarization for tree navigation.\n *\n * When navigating to a different point in the session tree, this generates\n * a summary of the branch being left so context isn't lost.\n */\n\nimport { randomUUID } from \"node:crypto\";\nimport type { AgentMessage, StreamFn } from \"@earendil-works/pi-agent-core\";\nimport type { RetryCallbacks, RetryPolicy } from \"@earendil-works/pi-ai\";\nimport type { Model, SimpleStreamOptions, Usage } from \"@earendil-works/pi-ai/compat\";\nimport type { ExtensionRunner } from \"../extensions/runner.ts\";\nimport type { SessionBeforeCompactResult } from \"../extensions/types.ts\";\nimport {\n\tconvertToLlm,\n\tcreateBranchSummaryMessage,\n\tcreateCompactionSummaryMessage,\n\tcreateCustomMessage,\n\tisContextExcludedCustomMessage,\n} from \"../messages.ts\";\nimport type { ReadonlySessionManager, SessionEntry } from \"../session-manager.ts\";\nimport type { CompactionPreparation } from \"./compaction.ts\";\nimport { completeSummarization, estimateTokens, getSummarizationFailure } from \"./compaction.ts\";\nimport {\n\tcomputeFileLists,\n\tcontentTextForSummary,\n\tcreateFileOps,\n\textractFileOpsFromMessage,\n\ttype FileOperations,\n\tformatFileOperations,\n\tSUMMARIZATION_SYSTEM_PROMPT,\n\tserializeConversation,\n} from \"./utils.ts\";\n\ntype BranchSummaryStreamOptions = SimpleStreamOptions & {\n\treadonly env?: Record<string, string>;\n};\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface BranchSummaryResult {\n\tsummary?: string;\n\tusage?: Usage;\n\treadFiles?: string[];\n\tmodifiedFiles?: string[];\n\taborted?: boolean;\n\terror?: string;\n}\n\n/** Details stored in BranchSummaryEntry.details for file tracking */\nexport interface BranchSummaryDetails {\n\treadFiles: string[];\n\tmodifiedFiles: string[];\n}\n\nexport type { FileOperations } from \"./utils.ts\";\n\nexport interface BranchPreparation {\n\t/** Messages extracted for summarization, in chronological order */\n\tmessages: AgentMessage[];\n\t/** File operations extracted from tool calls */\n\tfileOps: FileOperations;\n\t/** Total estimated tokens in messages */\n\ttotalTokens: number;\n}\n\nexport interface CollectEntriesResult {\n\t/** Entries to summarize, in chronological order */\n\tentries: SessionEntry[];\n\t/** Common ancestor between old and new position, if any */\n\tcommonAncestorId: string | null;\n}\n\nexport interface GenerateBranchSummaryOptions {\n\t/** Model to use for summarization */\n\tmodel: Model<any>;\n\t/** API key for the model */\n\tapiKey?: string;\n\t/** Request headers for the model */\n\theaders?: Record<string, string>;\n\t/** Extra request body fields to merge into outgoing provider payload */\n\textraBody?: Record<string, unknown>;\n\t/** Provider-scoped environment values for the model */\n\tenv?: Record<string, string>;\n\t/** Abort signal for cancellation */\n\tsignal: AbortSignal;\n\t/** Optional custom instructions for summarization */\n\tcustomInstructions?: string;\n\t/** If true, customInstructions replaces the default prompt instead of being appended */\n\treplaceInstructions?: boolean;\n\t/** Tokens reserved when selecting branch history (default 16384) */\n\treserveTokens?: number;\n\t/** Extension runner used to emit session_before_compact for branch summaries */\n\textensionRunner?: ExtensionRunner;\n\t/** Optional session stream function. Used to preserve SDK request behavior without mutating agent state. */\n\tstreamFn?: StreamFn;\n\t/** Retry policy for transient summarization errors. Reuses coding-agent's `settings.retry`. */\n\tretry?: RetryPolicy;\n\t/** Optional callbacks for retry reporting (e.g. TUI retry indicators). */\n\tcallbacks?: RetryCallbacks;\n}\n\n// ============================================================================\n// Entry Collection\n// ============================================================================\n\n/**\n * Collect entries that should be summarized when navigating from one position to another.\n *\n * Walks from oldLeafId back to the common ancestor with targetId, collecting entries\n * along the way. Does NOT stop at compaction boundaries - those are included and their\n * summaries become context.\n *\n * @param session - Session manager (read-only access)\n * @param oldLeafId - Current position (where we're navigating from)\n * @param targetId - Target position (where we're navigating to)\n * @returns Entries to summarize and the common ancestor\n */\nexport function collectEntriesForBranchSummary(\n\tsession: ReadonlySessionManager,\n\toldLeafId: string | null,\n\ttargetId: string,\n): CollectEntriesResult {\n\t// If no old position, nothing to summarize\n\tif (!oldLeafId) {\n\t\treturn { entries: [], commonAncestorId: null };\n\t}\n\n\t// Find common ancestor (deepest node that's on both paths)\n\tconst oldPath = new Set(session.getBranch(oldLeafId).map((e) => e.id));\n\tconst targetPath = session.getBranch(targetId);\n\n\t// targetPath is root-first, so iterate backwards to find deepest common ancestor\n\tlet commonAncestorId: string | null = null;\n\tfor (let i = targetPath.length - 1; i >= 0; i--) {\n\t\tif (oldPath.has(targetPath[i].id)) {\n\t\t\tcommonAncestorId = targetPath[i].id;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Collect entries from old leaf back to common ancestor\n\tconst entries: SessionEntry[] = [];\n\tlet current: string | null = oldLeafId;\n\n\twhile (current && current !== commonAncestorId) {\n\t\tconst entry = session.getEntry(current);\n\t\tif (!entry) break;\n\t\tentries.push(entry);\n\t\tcurrent = entry.parentId;\n\t}\n\n\t// Reverse to get chronological order\n\tentries.reverse();\n\n\treturn { entries, commonAncestorId };\n}\n\n// ============================================================================\n// Entry to Message Conversion\n// ============================================================================\n\n/**\n * Extract AgentMessage from a session entry.\n * Similar to getMessageFromEntry in compaction.ts but also handles compaction entries.\n */\nfunction getMessageFromEntry(entry: SessionEntry): AgentMessage | undefined {\n\tswitch (entry.type) {\n\t\tcase \"message\":\n\t\t\t// Skip tool results - context is in assistant's tool call\n\t\t\tif (entry.message.role === \"toolResult\") return undefined;\n\t\t\treturn entry.message;\n\n\t\tcase \"custom_message\":\n\t\t\tif (isContextExcludedCustomMessage(entry.customType)) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\treturn createCustomMessage(entry.customType, entry.content, entry.display, entry.details, entry.timestamp);\n\n\t\tcase \"branch_summary\":\n\t\t\treturn createBranchSummaryMessage(entry.summary, entry.fromId, entry.timestamp);\n\n\t\tcase \"compaction\":\n\t\t\treturn createCompactionSummaryMessage(entry.summary, entry.tokensBefore, entry.timestamp);\n\n\t\t// These don't contribute to conversation content\n\t\tcase \"thinking_level_change\":\n\t\tcase \"model_change\":\n\t\tcase \"custom\":\n\t\tcase \"label\":\n\t\tcase \"session_info\":\n\t\t\treturn undefined;\n\t}\n}\n\n/**\n * Prepare entries for summarization with token budget.\n *\n * Walks entries from NEWEST to OLDEST, adding messages until we hit the token budget.\n * This ensures we keep the most recent context when the branch is too long.\n *\n * Also collects file operations from:\n * - Tool calls in assistant messages\n * - Existing branch_summary entries' details (for cumulative tracking)\n *\n * @param entries - Entries in chronological order\n * @param tokenBudget - Maximum tokens to include (0 = no limit)\n */\nexport function prepareBranchEntries(entries: SessionEntry[], tokenBudget: number = 0): BranchPreparation {\n\tconst messages: AgentMessage[] = [];\n\tconst fileOps = createFileOps();\n\tlet totalTokens = 0;\n\n\t// First pass: collect file ops from ALL entries (even if they don't fit in token budget)\n\t// This ensures we capture cumulative file tracking from nested branch summaries\n\t// Only extract from pi-generated summaries (fromHook !== true), not extension-generated ones\n\tfor (const entry of entries) {\n\t\tif (entry.type === \"branch_summary\" && !entry.fromHook && entry.details) {\n\t\t\tconst details = entry.details as BranchSummaryDetails;\n\t\t\tif (Array.isArray(details.readFiles)) {\n\t\t\t\tfor (const f of details.readFiles) fileOps.read.add(f);\n\t\t\t}\n\t\t\tif (Array.isArray(details.modifiedFiles)) {\n\t\t\t\t// Modified files go into both edited and written for proper deduplication\n\t\t\t\tfor (const f of details.modifiedFiles) {\n\t\t\t\t\tfileOps.edited.add(f);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Second pass: walk from newest to oldest, adding messages until token budget\n\tfor (let i = entries.length - 1; i >= 0; i--) {\n\t\tconst entry = entries[i];\n\t\tconst message = getMessageFromEntry(entry);\n\t\tif (!message) continue;\n\n\t\t// Extract file ops from assistant messages (tool calls)\n\t\textractFileOpsFromMessage(message, fileOps);\n\n\t\tconst tokens = estimateTokens(message);\n\n\t\t// Check budget before adding\n\t\tif (tokenBudget > 0 && totalTokens + tokens > tokenBudget) {\n\t\t\t// If this is a summary entry, try to fit it anyway as it's important context\n\t\t\tif (entry.type === \"compaction\" || entry.type === \"branch_summary\") {\n\t\t\t\tif (totalTokens < tokenBudget * 0.9) {\n\t\t\t\t\tmessages.unshift(message);\n\t\t\t\t\ttotalTokens += tokens;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Stop - we've hit the budget\n\t\t\tbreak;\n\t\t}\n\n\t\tmessages.unshift(message);\n\t\ttotalTokens += tokens;\n\t}\n\n\treturn { messages, fileOps, totalTokens };\n}\n\n// ============================================================================\n// Summary Generation\n// ============================================================================\n\nconst BRANCH_SUMMARY_PREAMBLE = `The user explored a different conversation branch before returning here.\nSummary of that exploration:\n\n`;\n\nconst BRANCH_SUMMARY_PROMPT = `Create a structured summary of this conversation branch for context when returning later.\n\nUse this EXACT format:\n\n## Goal\n[What was the user trying to accomplish in this branch?]\n\n## Constraints & Preferences\n- [Any constraints, preferences, or requirements mentioned]\n- [Or \"(none)\" if none were mentioned]\n\n## Progress\n### Done\n- [x] [Completed tasks/changes]\n\n### In Progress\n- [ ] [Work that was started but not finished]\n\n### Blocked\n- [Issues preventing progress, if any]\n\n## Key Decisions\n- **[Decision]**: [Brief rationale]\n\n## Next Steps\n1. [What should happen next to continue this work]\n\nKeep each section concise. Preserve exact file paths, function names, and error messages.`;\n\nfunction createBranchCompactionPreparation(\n\tentries: SessionEntry[],\n\tpreparation: BranchPreparation,\n\treserveTokens: number,\n): CompactionPreparation {\n\tconst firstEntry = entries[0];\n\n\treturn {\n\t\tfirstKeptEntryId: firstEntry?.id ?? \"\",\n\t\tmessagesToSummarize: preparation.messages,\n\t\tturnPrefixMessages: [],\n\t\tisSplitTurn: false,\n\t\ttokensBefore: preparation.totalTokens,\n\t\tfileOps: preparation.fileOps,\n\t\tsettings: {\n\t\t\tenabled: true,\n\t\t\treserveTokens,\n\t\t\tkeepRecentTokens: 0,\n\t\t},\n\t};\n}\n\n/**\n * Generate a summary of abandoned branch entries.\n *\n * @param entries - Session entries to summarize (chronological order)\n * @param options - Generation options\n */\nexport async function generateBranchSummary(\n\tentries: SessionEntry[],\n\toptions: GenerateBranchSummaryOptions,\n): Promise<BranchSummaryResult> {\n\tconst {\n\t\tmodel,\n\t\tapiKey,\n\t\theaders,\n\t\textraBody,\n\t\tenv,\n\t\tsignal,\n\t\tcustomInstructions,\n\t\treplaceInstructions,\n\t\treserveTokens = 16384,\n\t\textensionRunner,\n\t\tstreamFn,\n\t\tretry,\n\t\tcallbacks,\n\t} = options;\n\n\t// Token budget = context window minus reserved space for prompt + response\n\tconst contextWindow = model.contextWindow || 128000;\n\tconst tokenBudget = contextWindow - reserveTokens;\n\n\tconst branchPreparation = prepareBranchEntries(entries, tokenBudget);\n\tconst { messages, fileOps } = branchPreparation;\n\n\tif (messages.length === 0) {\n\t\treturn { summary: \"No content to summarize\" };\n\t}\n\n\tif (extensionRunner?.hasHandlers(\"session_before_compact\")) {\n\t\tconst preparation = createBranchCompactionPreparation(entries, branchPreparation, reserveTokens);\n\t\tconst result = (await extensionRunner.emit({\n\t\t\ttype: \"session_before_compact\",\n\t\t\treason: \"branch\",\n\t\t\twillRetry: false,\n\t\t\trequestId: randomUUID(),\n\t\t\tpreparation,\n\t\t\tbranchEntries: entries,\n\t\t\tcustomInstructions,\n\t\t\tsignal,\n\t\t})) as SessionBeforeCompactResult | undefined;\n\n\t\tif (result?.cancel) {\n\t\t\treturn { aborted: true };\n\t\t}\n\n\t\tif (result?.compaction) {\n\t\t\treturn {\n\t\t\t\tsummary: result.compaction.summary,\n\t\t\t};\n\t\t}\n\t}\n\n\t// Transform to LLM-compatible messages, then serialize to text\n\t// Serialization prevents the model from treating it as a conversation to continue\n\tconst llmMessages = convertToLlm(messages);\n\tconst conversationText = serializeConversation(llmMessages);\n\n\t// Build prompt\n\tlet instructions: string;\n\tif (replaceInstructions && customInstructions) {\n\t\tinstructions = customInstructions;\n\t} else if (customInstructions) {\n\t\tinstructions = `${BRANCH_SUMMARY_PROMPT}\\n\\nAdditional focus: ${customInstructions}`;\n\t} else {\n\t\tinstructions = BRANCH_SUMMARY_PROMPT;\n\t}\n\tconst promptText = `<conversation>\\n${conversationText}\\n</conversation>\\n\\n${instructions}`;\n\n\tconst summarizationMessages = [\n\t\t{\n\t\t\trole: \"user\" as const,\n\t\t\tcontent: [{ type: \"text\" as const, text: promptText }],\n\t\t\ttimestamp: Date.now(),\n\t\t},\n\t];\n\n\tconst maxTokens = Math.min(4096, model.maxTokens > 0 ? model.maxTokens : Number.POSITIVE_INFINITY);\n\n\t// Call LLM for summarization. Prefer the session stream function so SDK\n\t// request behavior (timeouts, retries, attribution headers) stays consistent\n\t// without running through agent state/events. Retried via completeSummarization\n\t// so transient stream drops reuse the configured retry policy.\n\tconst context = { systemPrompt: SUMMARIZATION_SYSTEM_PROMPT, messages: summarizationMessages };\n\tconst requestOptions: BranchSummaryStreamOptions = { apiKey, headers, extraBody, env, signal, maxTokens };\n\tconst response = await completeSummarization(model, context, requestOptions, streamFn, retry, callbacks);\n\n\t// Check if aborted or errored\n\tif (response.stopReason === \"aborted\") {\n\t\treturn { aborted: true };\n\t}\n\tconst failure = getSummarizationFailure(response, \"Branch summarization\");\n\tif (failure) {\n\t\treturn { error: failure };\n\t}\n\tif (response.content.some((block) => block.type === \"toolCall\")) {\n\t\treturn { error: \"Branch summarization attempted to call a tool\" };\n\t}\n\n\tlet summary = contentTextForSummary(response.content);\n\n\t// Prepend preamble to provide context about the branch summary\n\tsummary = BRANCH_SUMMARY_PREAMBLE + summary;\n\n\t// Compute file lists and append to summary\n\tconst { readFiles, modifiedFiles } = computeFileLists(fileOps);\n\tsummary += formatFileOperations(readFiles, modifiedFiles);\n\n\treturn {\n\t\tsummary: summary || \"No summary generated\",\n\t\tusage: response.usage,\n\t\treadFiles,\n\t\tmodifiedFiles,\n\t};\n}\n"]}
@@ -1,4 +1,12 @@
1
+ import type { Model } from "@earendil-works/pi-ai";
1
2
  import type { IdealCompactionSettings } from "./compaction/ideal-compaction-settings.ts";
3
+ /** Token budgets overridden for one exact `provider/modelId` pair. */
4
+ export interface CompactionModelOverride {
5
+ reserveTokens?: number;
6
+ keepRecentTokens?: number;
7
+ }
8
+ /** The identity a compaction budget is resolved for; the session model satisfies it. */
9
+ export type CompactionModelSelector = Pick<Model<string>, "provider" | "id">;
2
10
  export interface CompactionSettings extends IdealCompactionSettings {
3
11
  enabled?: boolean;
4
12
  reserveTokens?: number;
@@ -18,8 +26,16 @@ export interface CompactionSettings extends IdealCompactionSettings {
18
26
  * cap); see `core/compaction/stream-watchdog.ts`.
19
27
  */
20
28
  summarizationMaxDurationMs?: number;
29
+ /** Per-model token budgets, keyed by the exact `provider/modelId` pair (no wildcards). */
30
+ modelOverrides?: Record<string, CompactionModelOverride>;
21
31
  }
22
32
  export declare function compactionEnabled(settings?: CompactionSettings): boolean;
23
- export declare function compactionReserveTokens(settings?: CompactionSettings): number;
24
- export declare function compactionKeepRecentTokens(settings?: CompactionSettings): number;
33
+ /**
34
+ * Resolve one token budget through the model override, then the ordinary setting,
35
+ * then the built-in default. A configured-but-invalid value is an error rather than
36
+ * a silent fallback, so a typo cannot quietly change the compaction budget.
37
+ */
38
+ export declare function compactionTokenSetting(settings: CompactionSettings | undefined, field: keyof CompactionModelOverride, forModel?: CompactionModelSelector): number;
39
+ export declare function compactionReserveTokens(settings?: CompactionSettings, forModel?: CompactionModelSelector): number;
40
+ export declare function compactionKeepRecentTokens(settings?: CompactionSettings, forModel?: CompactionModelSelector): number;
25
41
  //# sourceMappingURL=compaction-settings-access.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"compaction-settings-access.d.ts","sourceRoot":"","sources":["../../src/core/compaction-settings-access.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2CAA2C,CAAC;AAEzF,MAAM,WAAW,kBAAmB,SAAQ,uBAAuB;IAClE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC;;;;OAIG;IACH,0BAA0B,CAAC,EAAE,MAAM,CAAC;CACpC;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAExE;AACD,wBAAgB,uBAAuB,CAAC,QAAQ,CAAC,EAAE,kBAAkB,GAAG,MAAM,CAE7E;AACD,wBAAgB,0BAA0B,CAAC,QAAQ,CAAC,EAAE,kBAAkB,GAAG,MAAM,CAEhF"}
1
+ {"version":3,"file":"compaction-settings-access.d.ts","sourceRoot":"","sources":["../../src/core/compaction-settings-access.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2CAA2C,CAAC;AAEzF,sEAAsE;AACtE,MAAM,WAAW,uBAAuB;IACvC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,wFAAwF;AACxF,MAAM,MAAM,uBAAuB,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC,CAAC;AAE7E,MAAM,WAAW,kBAAmB,SAAQ,uBAAuB;IAClE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC;;;;OAIG;IACH,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,0FAA0F;IAC1F,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;CACzD;AAeD,wBAAgB,iBAAiB,CAAC,QAAQ,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAExE;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CACrC,QAAQ,EAAE,kBAAkB,GAAG,SAAS,EACxC,KAAK,EAAE,MAAM,uBAAuB,EACpC,QAAQ,CAAC,EAAE,uBAAuB,GAChC,MAAM,CAsBR;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,CAAC,EAAE,kBAAkB,EAAE,QAAQ,CAAC,EAAE,uBAAuB,GAAG,MAAM,CAEjH;AACD,wBAAgB,0BAA0B,CAAC,QAAQ,CAAC,EAAE,kBAAkB,EAAE,QAAQ,CAAC,EAAE,uBAAuB,GAAG,MAAM,CAEpH"}
@@ -1,10 +1,41 @@
1
+ const DEFAULT_COMPACTION_TOKEN_SETTINGS = {
2
+ reserveTokens: 16384,
3
+ keepRecentTokens: 20000,
4
+ };
5
+ function isPlainObject(value) {
6
+ return typeof value === "object" && value !== null && !Array.isArray(value);
7
+ }
8
+ function isNonNegativeSafeInteger(value) {
9
+ return typeof value === "number" && Number.isSafeInteger(value) && value >= 0;
10
+ }
1
11
  export function compactionEnabled(settings) {
2
12
  return settings?.enabled ?? true;
3
13
  }
4
- export function compactionReserveTokens(settings) {
5
- return settings?.reserveTokens ?? 16384;
14
+ /**
15
+ * Resolve one token budget through the model override, then the ordinary setting,
16
+ * then the built-in default. A configured-but-invalid value is an error rather than
17
+ * a silent fallback, so a typo cannot quietly change the compaction budget.
18
+ */
19
+ export function compactionTokenSetting(settings, field, forModel) {
20
+ const ordinary = settings?.[field];
21
+ if (ordinary !== undefined && !isNonNegativeSafeInteger(ordinary)) {
22
+ throw new Error(`Invalid compaction.${field} setting: ${String(ordinary)}. Expected a non-negative safe integer.`);
23
+ }
24
+ const modelKey = forModel ? `${forModel.provider}/${forModel.id}` : undefined;
25
+ const entry = modelKey !== undefined ? settings?.modelOverrides?.[modelKey] : undefined;
26
+ if (entry !== undefined && !isPlainObject(entry)) {
27
+ throw new Error(`Invalid compaction.modelOverrides["${modelKey}"] setting: ${String(entry)}. Expected an object.`);
28
+ }
29
+ const override = entry?.[field];
30
+ if (override !== undefined && !isNonNegativeSafeInteger(override)) {
31
+ throw new Error(`Invalid compaction.modelOverrides["${modelKey}"].${field} setting: ${String(override)}. Expected a non-negative safe integer.`);
32
+ }
33
+ return override ?? ordinary ?? DEFAULT_COMPACTION_TOKEN_SETTINGS[field];
34
+ }
35
+ export function compactionReserveTokens(settings, forModel) {
36
+ return compactionTokenSetting(settings, "reserveTokens", forModel);
6
37
  }
7
- export function compactionKeepRecentTokens(settings) {
8
- return settings?.keepRecentTokens ?? 20000;
38
+ export function compactionKeepRecentTokens(settings, forModel) {
39
+ return compactionTokenSetting(settings, "keepRecentTokens", forModel);
9
40
  }
10
41
  //# sourceMappingURL=compaction-settings-access.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"compaction-settings-access.js","sourceRoot":"","sources":["../../src/core/compaction-settings-access.ts"],"names":[],"mappings":"AAuBA,MAAM,UAAU,iBAAiB,CAAC,QAA6B;IAC9D,OAAO,QAAQ,EAAE,OAAO,IAAI,IAAI,CAAC;AAClC,CAAC;AACD,MAAM,UAAU,uBAAuB,CAAC,QAA6B;IACpE,OAAO,QAAQ,EAAE,aAAa,IAAI,KAAK,CAAC;AACzC,CAAC;AACD,MAAM,UAAU,0BAA0B,CAAC,QAA6B;IACvE,OAAO,QAAQ,EAAE,gBAAgB,IAAI,KAAK,CAAC;AAC5C,CAAC","sourcesContent":["import type { IdealCompactionSettings } from \"./compaction/ideal-compaction-settings.ts\";\n\nexport interface CompactionSettings extends IdealCompactionSettings {\n\tenabled?: boolean; // default: true\n\treserveTokens?: number; // default: 16384\n\tkeepRecentTokens?: number; // default: 20000\n\tspeculativeEnabled?: boolean; // default: true\n\tspeculativeFraction?: number; // default: 0.75\n\tspeculativeCooldownMs?: number; // default: 30000\n\trestorationEnabled?: boolean; // default: true\n\trestorationMaxItems?: number; // default: 10\n\trestorationMaxTokensPerItem?: number; // default: 5000\n\trestorationMaxTotalTokens?: number; // default: 50000\n\trestorationContextRatio?: number; // default: 0.15\n\tidleCompactionEnabled?: boolean; // default: true\n\t/**\n\t * Optional override for one summarization attempt's wall-clock budget.\n\t * Default: size-adaptive (120s floor, 2ms per estimated input token, 30min\n\t * cap); see `core/compaction/stream-watchdog.ts`.\n\t */\n\tsummarizationMaxDurationMs?: number;\n}\n\nexport function compactionEnabled(settings?: CompactionSettings): boolean {\n\treturn settings?.enabled ?? true;\n}\nexport function compactionReserveTokens(settings?: CompactionSettings): number {\n\treturn settings?.reserveTokens ?? 16384;\n}\nexport function compactionKeepRecentTokens(settings?: CompactionSettings): number {\n\treturn settings?.keepRecentTokens ?? 20000;\n}\n"]}
1
+ {"version":3,"file":"compaction-settings-access.js","sourceRoot":"","sources":["../../src/core/compaction-settings-access.ts"],"names":[],"mappings":"AAmCA,MAAM,iCAAiC,GAAsC;IAC5E,aAAa,EAAE,KAAK;IACpB,gBAAgB,EAAE,KAAK;CACvB,CAAC;AAEF,SAAS,aAAa,CAAC,KAAc;IACpC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC7E,CAAC;AAED,SAAS,wBAAwB,CAAC,KAAc;IAC/C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AAC/E,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,QAA6B;IAC9D,OAAO,QAAQ,EAAE,OAAO,IAAI,IAAI,CAAC;AAClC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CACrC,QAAwC,EACxC,KAAoC,EACpC,QAAkC;IAElC,MAAM,QAAQ,GAAG,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC;IACnC,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnE,MAAM,IAAI,KAAK,CACd,sBAAsB,KAAK,aAAa,MAAM,CAAC,QAAQ,CAAC,yCAAyC,CACjG,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9E,MAAM,KAAK,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,cAAc,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACxF,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CACd,sCAAsC,QAAQ,eAAe,MAAM,CAAC,KAAK,CAAC,uBAAuB,CACjG,CAAC;IACH,CAAC;IACD,MAAM,QAAQ,GAAG,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnE,MAAM,IAAI,KAAK,CACd,sCAAsC,QAAQ,MAAM,KAAK,aAAa,MAAM,CAAC,QAAQ,CAAC,yCAAyC,CAC/H,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,IAAI,QAAQ,IAAI,iCAAiC,CAAC,KAAK,CAAC,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,QAA6B,EAAE,QAAkC;IACxG,OAAO,sBAAsB,CAAC,QAAQ,EAAE,eAAe,EAAE,QAAQ,CAAC,CAAC;AACpE,CAAC;AACD,MAAM,UAAU,0BAA0B,CAAC,QAA6B,EAAE,QAAkC;IAC3G,OAAO,sBAAsB,CAAC,QAAQ,EAAE,kBAAkB,EAAE,QAAQ,CAAC,CAAC;AACvE,CAAC","sourcesContent":["import type { Model } from \"@earendil-works/pi-ai\";\nimport type { IdealCompactionSettings } from \"./compaction/ideal-compaction-settings.ts\";\n\n/** Token budgets overridden for one exact `provider/modelId` pair. */\nexport interface CompactionModelOverride {\n\treserveTokens?: number;\n\tkeepRecentTokens?: number;\n}\n\n/** The identity a compaction budget is resolved for; the session model satisfies it. */\nexport type CompactionModelSelector = Pick<Model<string>, \"provider\" | \"id\">;\n\nexport interface CompactionSettings extends IdealCompactionSettings {\n\tenabled?: boolean; // default: true\n\treserveTokens?: number; // default: 16384\n\tkeepRecentTokens?: number; // default: 20000\n\tspeculativeEnabled?: boolean; // default: true\n\tspeculativeFraction?: number; // default: 0.75\n\tspeculativeCooldownMs?: number; // default: 30000\n\trestorationEnabled?: boolean; // default: true\n\trestorationMaxItems?: number; // default: 10\n\trestorationMaxTokensPerItem?: number; // default: 5000\n\trestorationMaxTotalTokens?: number; // default: 50000\n\trestorationContextRatio?: number; // default: 0.15\n\tidleCompactionEnabled?: boolean; // default: true\n\t/**\n\t * Optional override for one summarization attempt's wall-clock budget.\n\t * Default: size-adaptive (120s floor, 2ms per estimated input token, 30min\n\t * cap); see `core/compaction/stream-watchdog.ts`.\n\t */\n\tsummarizationMaxDurationMs?: number;\n\t/** Per-model token budgets, keyed by the exact `provider/modelId` pair (no wildcards). */\n\tmodelOverrides?: Record<string, CompactionModelOverride>;\n}\n\nconst DEFAULT_COMPACTION_TOKEN_SETTINGS: Required<CompactionModelOverride> = {\n\treserveTokens: 16384,\n\tkeepRecentTokens: 20000,\n};\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isNonNegativeSafeInteger(value: unknown): value is number {\n\treturn typeof value === \"number\" && Number.isSafeInteger(value) && value >= 0;\n}\n\nexport function compactionEnabled(settings?: CompactionSettings): boolean {\n\treturn settings?.enabled ?? true;\n}\n\n/**\n * Resolve one token budget through the model override, then the ordinary setting,\n * then the built-in default. A configured-but-invalid value is an error rather than\n * a silent fallback, so a typo cannot quietly change the compaction budget.\n */\nexport function compactionTokenSetting(\n\tsettings: CompactionSettings | undefined,\n\tfield: keyof CompactionModelOverride,\n\tforModel?: CompactionModelSelector,\n): number {\n\tconst ordinary = settings?.[field];\n\tif (ordinary !== undefined && !isNonNegativeSafeInteger(ordinary)) {\n\t\tthrow new Error(\n\t\t\t`Invalid compaction.${field} setting: ${String(ordinary)}. Expected a non-negative safe integer.`,\n\t\t);\n\t}\n\n\tconst modelKey = forModel ? `${forModel.provider}/${forModel.id}` : undefined;\n\tconst entry = modelKey !== undefined ? settings?.modelOverrides?.[modelKey] : undefined;\n\tif (entry !== undefined && !isPlainObject(entry)) {\n\t\tthrow new Error(\n\t\t\t`Invalid compaction.modelOverrides[\"${modelKey}\"] setting: ${String(entry)}. Expected an object.`,\n\t\t);\n\t}\n\tconst override = entry?.[field];\n\tif (override !== undefined && !isNonNegativeSafeInteger(override)) {\n\t\tthrow new Error(\n\t\t\t`Invalid compaction.modelOverrides[\"${modelKey}\"].${field} setting: ${String(override)}. Expected a non-negative safe integer.`,\n\t\t);\n\t}\n\treturn override ?? ordinary ?? DEFAULT_COMPACTION_TOKEN_SETTINGS[field];\n}\n\nexport function compactionReserveTokens(settings?: CompactionSettings, forModel?: CompactionModelSelector): number {\n\treturn compactionTokenSetting(settings, \"reserveTokens\", forModel);\n}\nexport function compactionKeepRecentTokens(settings?: CompactionSettings, forModel?: CompactionModelSelector): number {\n\treturn compactionTokenSetting(settings, \"keepRecentTokens\", forModel);\n}\n"]}
@@ -1,4 +1,4 @@
1
- import type { CompactionSettings } from "./compaction-settings-access.ts";
1
+ import { type CompactionModelSelector, type CompactionSettings } from "./compaction-settings-access.ts";
2
2
  export interface ResolvedCompactionSettings {
3
3
  enabled: boolean;
4
4
  reserveTokens: number;
@@ -20,5 +20,5 @@ export interface ResolvedCompactionSettings {
20
20
  /** Positive finite number, or undefined for the size-adaptive default. */
21
21
  summarizationMaxDurationMs?: number;
22
22
  }
23
- export declare function resolveCompactionSettings(settings?: CompactionSettings): ResolvedCompactionSettings;
23
+ export declare function resolveCompactionSettings(settings?: CompactionSettings, forModel?: CompactionModelSelector): ResolvedCompactionSettings;
24
24
  //# sourceMappingURL=compaction-settings-resolver.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"compaction-settings-resolver.d.ts","sourceRoot":"","sources":["../../src/core/compaction-settings-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAE1E,MAAM,WAAW,0BAA0B;IAC1C,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,2BAA2B,EAAE,MAAM,CAAC;IACpC,yBAAyB,EAAE,MAAM,CAAC;IAClC,uBAAuB,EAAE,MAAM,CAAC;IAChC,qBAAqB,EAAE,OAAO,CAAC;IAC/B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,eAAe,EAAE,OAAO,CAAC;IACzB,qBAAqB,EAAE,OAAO,CAAC;IAC/B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,0EAA0E;IAC1E,0BAA0B,CAAC,EAAE,MAAM,CAAC;CACpC;AAyBD,wBAAgB,yBAAyB,CAAC,QAAQ,CAAC,EAAE,kBAAkB,GAAG,0BAA0B,CAmCnG"}
1
+ {"version":3,"file":"compaction-settings-resolver.d.ts","sourceRoot":"","sources":["../../src/core/compaction-settings-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,uBAAuB,EAC5B,KAAK,kBAAkB,EAGvB,MAAM,iCAAiC,CAAC;AAEzC,MAAM,WAAW,0BAA0B;IAC1C,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,2BAA2B,EAAE,MAAM,CAAC;IACpC,yBAAyB,EAAE,MAAM,CAAC;IAClC,uBAAuB,EAAE,MAAM,CAAC;IAChC,qBAAqB,EAAE,OAAO,CAAC;IAC/B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,eAAe,EAAE,OAAO,CAAC;IACzB,qBAAqB,EAAE,OAAO,CAAC;IAC/B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,0EAA0E;IAC1E,0BAA0B,CAAC,EAAE,MAAM,CAAC;CACpC;AAyBD,wBAAgB,yBAAyB,CACxC,QAAQ,CAAC,EAAE,kBAAkB,EAC7B,QAAQ,CAAC,EAAE,uBAAuB,GAChC,0BAA0B,CAqC5B"}
@@ -1,3 +1,4 @@
1
+ import { compactionKeepRecentTokens, compactionReserveTokens, } from "./compaction-settings-access.js";
1
2
  const DEFAULTS = {
2
3
  enabled: true,
3
4
  reserveTokens: 16384,
@@ -19,12 +20,14 @@ const DEFAULTS = {
19
20
  function finiteNumber(value, fallback, minimum = 0) {
20
21
  return typeof value === "number" && Number.isFinite(value) ? Math.max(minimum, value) : fallback;
21
22
  }
22
- export function resolveCompactionSettings(settings) {
23
+ export function resolveCompactionSettings(settings, forModel) {
23
24
  const raw = settings;
24
25
  return {
25
26
  enabled: typeof raw?.enabled === "boolean" ? raw.enabled : DEFAULTS.enabled,
26
- reserveTokens: finiteNumber(raw?.reserveTokens, DEFAULTS.reserveTokens),
27
- keepRecentTokens: finiteNumber(raw?.keepRecentTokens, DEFAULTS.keepRecentTokens),
27
+ // Token budgets resolve through the per-model override table and reject invalid
28
+ // configuration instead of clamping it.
29
+ reserveTokens: compactionReserveTokens(settings, forModel),
30
+ keepRecentTokens: compactionKeepRecentTokens(settings, forModel),
28
31
  speculativeEnabled: typeof raw?.speculativeEnabled === "boolean" ? raw.speculativeEnabled : DEFAULTS.speculativeEnabled,
29
32
  speculativeFraction: finiteNumber(raw?.speculativeFraction, DEFAULTS.speculativeFraction),
30
33
  speculativeCooldownMs: finiteNumber(raw?.speculativeCooldownMs, DEFAULTS.speculativeCooldownMs),
@@ -1 +1 @@
1
- {"version":3,"file":"compaction-settings-resolver.js","sourceRoot":"","sources":["../../src/core/compaction-settings-resolver.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CompactionSettings } from \"./compaction-settings-access.ts\";\n\nexport interface ResolvedCompactionSettings {\n\tenabled: boolean;\n\treserveTokens: number;\n\tkeepRecentTokens: number;\n\tspeculativeEnabled: boolean;\n\tspeculativeFraction: number;\n\tspeculativeCooldownMs: number;\n\trestorationEnabled: boolean;\n\trestorationMaxItems: number;\n\trestorationMaxTokensPerItem: number;\n\trestorationMaxTotalTokens: number;\n\trestorationContextRatio: number;\n\tidleCompactionEnabled: boolean;\n\tgraceBandEnabled: boolean;\n\ttoolAdmissionEnabled: boolean;\n\treminderEnabled: boolean;\n\treserveScalingEnabled: boolean;\n\tspeculativeLeadTokens?: number;\n\t/** Positive finite number, or undefined for the size-adaptive default. */\n\tsummarizationMaxDurationMs?: number;\n}\n\nconst DEFAULTS = {\n\tenabled: true,\n\treserveTokens: 16384,\n\tkeepRecentTokens: 20000,\n\tspeculativeEnabled: true,\n\tspeculativeFraction: 0.75,\n\tspeculativeCooldownMs: 30000,\n\trestorationEnabled: true,\n\trestorationMaxItems: 10,\n\trestorationMaxTokensPerItem: 5000,\n\trestorationMaxTotalTokens: 50_000,\n\trestorationContextRatio: 0.15,\n\tidleCompactionEnabled: true,\n\tgraceBandEnabled: true,\n\ttoolAdmissionEnabled: true,\n\treminderEnabled: true,\n\treserveScalingEnabled: true,\n} as const;\n\nfunction finiteNumber(value: unknown, fallback: number, minimum = 0): number {\n\treturn typeof value === \"number\" && Number.isFinite(value) ? Math.max(minimum, value) : fallback;\n}\n\nexport function resolveCompactionSettings(settings?: CompactionSettings): ResolvedCompactionSettings {\n\tconst raw = settings as Record<string, unknown> | undefined;\n\treturn {\n\t\tenabled: typeof raw?.enabled === \"boolean\" ? raw.enabled : DEFAULTS.enabled,\n\t\treserveTokens: finiteNumber(raw?.reserveTokens, DEFAULTS.reserveTokens),\n\t\tkeepRecentTokens: finiteNumber(raw?.keepRecentTokens, DEFAULTS.keepRecentTokens),\n\t\tspeculativeEnabled:\n\t\t\ttypeof raw?.speculativeEnabled === \"boolean\" ? raw.speculativeEnabled : DEFAULTS.speculativeEnabled,\n\t\tspeculativeFraction: finiteNumber(raw?.speculativeFraction, DEFAULTS.speculativeFraction),\n\t\tspeculativeCooldownMs: finiteNumber(raw?.speculativeCooldownMs, DEFAULTS.speculativeCooldownMs),\n\t\trestorationEnabled:\n\t\t\ttypeof raw?.restorationEnabled === \"boolean\" ? raw.restorationEnabled : DEFAULTS.restorationEnabled,\n\t\trestorationMaxItems: finiteNumber(raw?.restorationMaxItems, DEFAULTS.restorationMaxItems),\n\t\trestorationMaxTokensPerItem: finiteNumber(raw?.restorationMaxTokensPerItem, DEFAULTS.restorationMaxTokensPerItem),\n\t\trestorationMaxTotalTokens: finiteNumber(raw?.restorationMaxTotalTokens, DEFAULTS.restorationMaxTotalTokens),\n\t\trestorationContextRatio: finiteNumber(raw?.restorationContextRatio, DEFAULTS.restorationContextRatio),\n\t\tidleCompactionEnabled:\n\t\t\ttypeof raw?.idleCompactionEnabled === \"boolean\" ? raw.idleCompactionEnabled : DEFAULTS.idleCompactionEnabled,\n\t\tgraceBandEnabled: typeof raw?.graceBandEnabled === \"boolean\" ? raw.graceBandEnabled : DEFAULTS.graceBandEnabled,\n\t\ttoolAdmissionEnabled:\n\t\t\ttypeof raw?.toolAdmissionEnabled === \"boolean\" ? raw.toolAdmissionEnabled : DEFAULTS.toolAdmissionEnabled,\n\t\treminderEnabled: typeof raw?.reminderEnabled === \"boolean\" ? raw.reminderEnabled : DEFAULTS.reminderEnabled,\n\t\treserveScalingEnabled:\n\t\t\ttypeof raw?.reserveScalingEnabled === \"boolean\" ? raw.reserveScalingEnabled : DEFAULTS.reserveScalingEnabled,\n\t\tspeculativeLeadTokens:\n\t\t\ttypeof raw?.speculativeLeadTokens === \"number\" && Number.isFinite(raw.speculativeLeadTokens)\n\t\t\t\t? Math.max(0, raw.speculativeLeadTokens)\n\t\t\t\t: undefined,\n\t\tsummarizationMaxDurationMs:\n\t\t\ttypeof raw?.summarizationMaxDurationMs === \"number\" &&\n\t\t\tNumber.isFinite(raw.summarizationMaxDurationMs) &&\n\t\t\traw.summarizationMaxDurationMs > 0\n\t\t\t\t? raw.summarizationMaxDurationMs\n\t\t\t\t: undefined,\n\t};\n}\n"]}
1
+ {"version":3,"file":"compaction-settings-resolver.js","sourceRoot":"","sources":["../../src/core/compaction-settings-resolver.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\ttype CompactionModelSelector,\n\ttype CompactionSettings,\n\tcompactionKeepRecentTokens,\n\tcompactionReserveTokens,\n} from \"./compaction-settings-access.ts\";\n\nexport interface ResolvedCompactionSettings {\n\tenabled: boolean;\n\treserveTokens: number;\n\tkeepRecentTokens: number;\n\tspeculativeEnabled: boolean;\n\tspeculativeFraction: number;\n\tspeculativeCooldownMs: number;\n\trestorationEnabled: boolean;\n\trestorationMaxItems: number;\n\trestorationMaxTokensPerItem: number;\n\trestorationMaxTotalTokens: number;\n\trestorationContextRatio: number;\n\tidleCompactionEnabled: boolean;\n\tgraceBandEnabled: boolean;\n\ttoolAdmissionEnabled: boolean;\n\treminderEnabled: boolean;\n\treserveScalingEnabled: boolean;\n\tspeculativeLeadTokens?: number;\n\t/** Positive finite number, or undefined for the size-adaptive default. */\n\tsummarizationMaxDurationMs?: number;\n}\n\nconst DEFAULTS = {\n\tenabled: true,\n\treserveTokens: 16384,\n\tkeepRecentTokens: 20000,\n\tspeculativeEnabled: true,\n\tspeculativeFraction: 0.75,\n\tspeculativeCooldownMs: 30000,\n\trestorationEnabled: true,\n\trestorationMaxItems: 10,\n\trestorationMaxTokensPerItem: 5000,\n\trestorationMaxTotalTokens: 50_000,\n\trestorationContextRatio: 0.15,\n\tidleCompactionEnabled: true,\n\tgraceBandEnabled: true,\n\ttoolAdmissionEnabled: true,\n\treminderEnabled: true,\n\treserveScalingEnabled: true,\n} as const;\n\nfunction finiteNumber(value: unknown, fallback: number, minimum = 0): number {\n\treturn typeof value === \"number\" && Number.isFinite(value) ? Math.max(minimum, value) : fallback;\n}\n\nexport function resolveCompactionSettings(\n\tsettings?: CompactionSettings,\n\tforModel?: CompactionModelSelector,\n): ResolvedCompactionSettings {\n\tconst raw = settings as Record<string, unknown> | undefined;\n\treturn {\n\t\tenabled: typeof raw?.enabled === \"boolean\" ? raw.enabled : DEFAULTS.enabled,\n\t\t// Token budgets resolve through the per-model override table and reject invalid\n\t\t// configuration instead of clamping it.\n\t\treserveTokens: compactionReserveTokens(settings, forModel),\n\t\tkeepRecentTokens: compactionKeepRecentTokens(settings, forModel),\n\t\tspeculativeEnabled:\n\t\t\ttypeof raw?.speculativeEnabled === \"boolean\" ? raw.speculativeEnabled : DEFAULTS.speculativeEnabled,\n\t\tspeculativeFraction: finiteNumber(raw?.speculativeFraction, DEFAULTS.speculativeFraction),\n\t\tspeculativeCooldownMs: finiteNumber(raw?.speculativeCooldownMs, DEFAULTS.speculativeCooldownMs),\n\t\trestorationEnabled:\n\t\t\ttypeof raw?.restorationEnabled === \"boolean\" ? raw.restorationEnabled : DEFAULTS.restorationEnabled,\n\t\trestorationMaxItems: finiteNumber(raw?.restorationMaxItems, DEFAULTS.restorationMaxItems),\n\t\trestorationMaxTokensPerItem: finiteNumber(raw?.restorationMaxTokensPerItem, DEFAULTS.restorationMaxTokensPerItem),\n\t\trestorationMaxTotalTokens: finiteNumber(raw?.restorationMaxTotalTokens, DEFAULTS.restorationMaxTotalTokens),\n\t\trestorationContextRatio: finiteNumber(raw?.restorationContextRatio, DEFAULTS.restorationContextRatio),\n\t\tidleCompactionEnabled:\n\t\t\ttypeof raw?.idleCompactionEnabled === \"boolean\" ? raw.idleCompactionEnabled : DEFAULTS.idleCompactionEnabled,\n\t\tgraceBandEnabled: typeof raw?.graceBandEnabled === \"boolean\" ? raw.graceBandEnabled : DEFAULTS.graceBandEnabled,\n\t\ttoolAdmissionEnabled:\n\t\t\ttypeof raw?.toolAdmissionEnabled === \"boolean\" ? raw.toolAdmissionEnabled : DEFAULTS.toolAdmissionEnabled,\n\t\treminderEnabled: typeof raw?.reminderEnabled === \"boolean\" ? raw.reminderEnabled : DEFAULTS.reminderEnabled,\n\t\treserveScalingEnabled:\n\t\t\ttypeof raw?.reserveScalingEnabled === \"boolean\" ? raw.reserveScalingEnabled : DEFAULTS.reserveScalingEnabled,\n\t\tspeculativeLeadTokens:\n\t\t\ttypeof raw?.speculativeLeadTokens === \"number\" && Number.isFinite(raw.speculativeLeadTokens)\n\t\t\t\t? Math.max(0, raw.speculativeLeadTokens)\n\t\t\t\t: undefined,\n\t\tsummarizationMaxDurationMs:\n\t\t\ttypeof raw?.summarizationMaxDurationMs === \"number\" &&\n\t\t\tNumber.isFinite(raw.summarizationMaxDurationMs) &&\n\t\t\traw.summarizationMaxDurationMs > 0\n\t\t\t\t? raw.summarizationMaxDurationMs\n\t\t\t\t: undefined,\n\t};\n}\n"]}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Cursor request admission: what the transport is allowed to send in one turn.
3
+ *
4
+ * Cursor rebuilds the whole conversation on every hop and rejects large
5
+ * verbatim tool payloads, so a turn is bounded twice - each tool result is
6
+ * capped on its own, and the aggregate model input is held under the model's
7
+ * context window. Admission NEVER deletes a turn (senpi#1603): dropping the
8
+ * oldest turns to reach a byte cap silently amputated the conversation, and a
9
+ * history that still exceeds the budget after blanking is admitted as-is so the
10
+ * existing Cursor overflow path (a 0-token `resource_exhausted` surfaced to the
11
+ * session layer) compacts it with the session's own policy.
12
+ */
13
+ import type { AgentMessage } from "@earendil-works/pi-agent-core";
14
+ import type { Message } from "@earendil-works/pi-ai/compat";
15
+ /** Cursor ingest rejects large verbatim tool payloads. The bound is graphemes. */
16
+ export declare const CURSOR_TOOL_RESULT_MAX_CHARS = 2000;
17
+ /** Aggregate admission budget for a model whose window is `contextWindowTokens`. */
18
+ export declare function cursorAdmissionBudgetBytes(contextWindowTokens: number): number;
19
+ export type CursorAdmissionRequest = {
20
+ readonly messages: AgentMessage[] | undefined;
21
+ /** Serialized model-input bytes this turn may occupy. */
22
+ readonly budgetBytes: number;
23
+ readonly maxChars?: number;
24
+ readonly convert?: (candidate: AgentMessage[]) => Message[];
25
+ };
26
+ export type CursorAdmissionResult = {
27
+ readonly messages: AgentMessage[] | undefined;
28
+ readonly changed: boolean;
29
+ readonly blankedToolResults: number;
30
+ readonly bytesBefore: number;
31
+ readonly bytesAfter: number;
32
+ /** True when the history still exceeds the budget; the request is still sent. */
33
+ readonly overBudget: boolean;
34
+ };
35
+ /**
36
+ * Bounds one Cursor request: per-result caps first, then blanking the oldest
37
+ * tool result bodies while the model input exceeds `budgetBytes`. Conversation
38
+ * turns are never removed.
39
+ */
40
+ export declare function admitCursorHistory(request: CursorAdmissionRequest): CursorAdmissionResult;
41
+ /**
42
+ * Positional entry point kept for existing callers. An omitted `maxBytes`
43
+ * applies the per-result cap only; the aggregate budget belongs to the caller
44
+ * that knows the model window.
45
+ */
46
+ export declare function truncateToolResultBodies(messages: AgentMessage[] | undefined, maxChars?: number, maxBytes?: number, convert?: (candidate: AgentMessage[]) => Message[]): {
47
+ messages: AgentMessage[] | undefined;
48
+ changed: boolean;
49
+ };
50
+ //# sourceMappingURL=cursor-history-admission.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor-history-admission.d.ts","sourceRoot":"","sources":["../../src/core/cursor-history-admission.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAElE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAC;AAG5D,kFAAkF;AAClF,eAAO,MAAM,4BAA4B,OAAO,CAAC;AAKjD,oFAAoF;AACpF,wBAAgB,0BAA0B,CAAC,mBAAmB,EAAE,MAAM,GAAG,MAAM,CAG9E;AAED,MAAM,MAAM,sBAAsB,GAAG;IACpC,QAAQ,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,SAAS,CAAC;IAC9C,yDAAyD;IACzD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,YAAY,EAAE,KAAK,OAAO,EAAE,CAAC;CAC5D,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IACnC,QAAQ,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,SAAS,CAAC;IAC9C,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,iFAAiF;IACjF,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;CAC7B,CAAC;AA2EF;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,sBAAsB,GAAG,qBAAqB,CAoCzF;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CACvC,QAAQ,EAAE,YAAY,EAAE,GAAG,SAAS,EACpC,QAAQ,SAA+B,EACvC,QAAQ,SAA2B,EACnC,OAAO,eAAe,YAAY,EAAE,cAA4B,GAC9D;IAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,SAAS,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAG5D"}
@@ -0,0 +1,130 @@
1
+ import { measureCursorModelInputSerializedBytes } from "@earendil-works/pi-ai";
2
+ import { convertToLlm } from "./messages.js";
3
+ /** Cursor ingest rejects large verbatim tool payloads. The bound is graphemes. */
4
+ export const CURSOR_TOOL_RESULT_MAX_CHARS = 2000;
5
+ const CURSOR_TRUNCATION_MARKER = "\n...[truncated]";
6
+ /** Repo-wide estimate, matching `estimateTokens` in core/compaction. */
7
+ const CHARS_PER_TOKEN = 4;
8
+ /** Aggregate admission budget for a model whose window is `contextWindowTokens`. */
9
+ export function cursorAdmissionBudgetBytes(contextWindowTokens) {
10
+ if (!Number.isFinite(contextWindowTokens) || contextWindowTokens <= 0)
11
+ return 0;
12
+ return Math.floor(contextWindowTokens) * CHARS_PER_TOKEN;
13
+ }
14
+ function capToolResultBodies(messages, maxChars) {
15
+ const segmenter = new Intl.Segmenter(undefined, { granularity: "grapheme" });
16
+ const markerChars = [...segmenter.segment(CURSOR_TRUNCATION_MARKER)].length;
17
+ const result = messages.slice();
18
+ let changed = false;
19
+ for (let messageIndex = result.length - 1; messageIndex >= 0; messageIndex--) {
20
+ const message = result[messageIndex];
21
+ if (message.role !== "toolResult" || !Array.isArray(message.content))
22
+ continue;
23
+ let content = message.content;
24
+ for (let partIndex = content.length - 1; partIndex >= 0; partIndex--) {
25
+ const part = content[partIndex];
26
+ if (part.type === "image" && typeof part.data === "string")
27
+ continue;
28
+ if (part.type !== "text" || typeof part.text !== "string")
29
+ continue;
30
+ const graphemes = [...segmenter.segment(part.text)].map((item) => item.segment);
31
+ if (graphemes.length <= maxChars)
32
+ continue;
33
+ const kept = graphemes.slice(0, Math.max(0, maxChars - markerChars)).join("");
34
+ content = content === message.content ? content.slice() : content;
35
+ content[partIndex] = { ...part, text: kept + CURSOR_TRUNCATION_MARKER };
36
+ result[messageIndex] = { ...message, content };
37
+ changed = true;
38
+ }
39
+ }
40
+ return { messages: result, changed };
41
+ }
42
+ function emptyToolResult(message) {
43
+ if (message.role !== "toolResult" || !Array.isArray(message.content))
44
+ return message;
45
+ const emptiedContent = message.content.map((part) => part.type === "text" ? { ...part, text: "" } : part.type === "image" ? { ...part, data: "" } : part);
46
+ const content = emptiedContent.filter((part, index) => {
47
+ if (index === 0)
48
+ return true;
49
+ const previous = emptiedContent[index - 1];
50
+ const empty = part.type === "text" ? part.text === "" : part.type === "image" && part.data === "";
51
+ const previousEmpty = previous.type === "text" ? previous.text === "" : previous.type === "image" && previous.data === "";
52
+ return !empty || !previousEmpty;
53
+ });
54
+ return { ...message, content };
55
+ }
56
+ /**
57
+ * Empties the oldest result bodies until the rest fits. The prefix search is
58
+ * monotonic, so admission stays bounded instead of reserializing the whole
59
+ * history once per tool result.
60
+ */
61
+ function blankOldestToolResults(messages, fits) {
62
+ const toolResultIndexes = messages.flatMap((message, index) => message.role === "toolResult" && Array.isArray(message.content) ? [index] : []);
63
+ const withEmptyPrefix = (count) => {
64
+ const candidate = messages.slice();
65
+ for (let i = 0; i < count; i++)
66
+ candidate[toolResultIndexes[i]] = emptyToolResult(candidate[toolResultIndexes[i]]);
67
+ return candidate;
68
+ };
69
+ let low = 0;
70
+ let high = toolResultIndexes.length;
71
+ while (low < high) {
72
+ const middle = Math.floor((low + high) / 2);
73
+ if (fits(withEmptyPrefix(middle + 1)))
74
+ high = middle;
75
+ else
76
+ low = middle + 1;
77
+ }
78
+ const count = Math.min(low + 1, toolResultIndexes.length);
79
+ return { messages: count > 0 ? withEmptyPrefix(count) : messages, count };
80
+ }
81
+ /**
82
+ * Bounds one Cursor request: per-result caps first, then blanking the oldest
83
+ * tool result bodies while the model input exceeds `budgetBytes`. Conversation
84
+ * turns are never removed.
85
+ */
86
+ export function admitCursorHistory(request) {
87
+ const { messages, budgetBytes } = request;
88
+ if (!Array.isArray(messages) || messages.length === 0) {
89
+ return { messages, changed: false, blankedToolResults: 0, bytesBefore: 0, bytesAfter: 0, overBudget: false };
90
+ }
91
+ const convert = request.convert ?? ((candidate) => convertToLlm(candidate));
92
+ const capped = capToolResultBodies(messages, request.maxChars ?? CURSOR_TOOL_RESULT_MAX_CHARS);
93
+ const measure = (candidate) => {
94
+ const converted = convert(candidate);
95
+ const activeUserMessageIndex = converted.at(-1)?.role === "user" ? converted.length - 1 : -1;
96
+ return measureCursorModelInputSerializedBytes(converted, activeUserMessageIndex);
97
+ };
98
+ const bytesBefore = measure(capped.messages);
99
+ if (bytesBefore <= budgetBytes) {
100
+ return {
101
+ messages: capped.changed ? capped.messages : messages,
102
+ changed: capped.changed,
103
+ blankedToolResults: 0,
104
+ bytesBefore,
105
+ bytesAfter: bytesBefore,
106
+ overBudget: false,
107
+ };
108
+ }
109
+ const blanked = blankOldestToolResults(capped.messages, (candidate) => measure(candidate) <= budgetBytes);
110
+ const bytesAfter = blanked.count > 0 ? measure(blanked.messages) : bytesBefore;
111
+ const changed = capped.changed || blanked.count > 0;
112
+ return {
113
+ messages: changed ? blanked.messages : messages,
114
+ changed,
115
+ blankedToolResults: blanked.count,
116
+ bytesBefore,
117
+ bytesAfter,
118
+ overBudget: bytesAfter > budgetBytes,
119
+ };
120
+ }
121
+ /**
122
+ * Positional entry point kept for existing callers. An omitted `maxBytes`
123
+ * applies the per-result cap only; the aggregate budget belongs to the caller
124
+ * that knows the model window.
125
+ */
126
+ export function truncateToolResultBodies(messages, maxChars = CURSOR_TOOL_RESULT_MAX_CHARS, maxBytes = Number.POSITIVE_INFINITY, convert = (candidate) => convertToLlm(candidate)) {
127
+ const admission = admitCursorHistory({ messages, budgetBytes: maxBytes, maxChars, convert });
128
+ return { messages: admission.messages, changed: admission.changed };
129
+ }
130
+ //# sourceMappingURL=cursor-history-admission.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor-history-admission.js","sourceRoot":"","sources":["../../src/core/cursor-history-admission.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Cursor request admission: what the transport is allowed to send in one turn.\n *\n * Cursor rebuilds the whole conversation on every hop and rejects large\n * verbatim tool payloads, so a turn is bounded twice - each tool result is\n * capped on its own, and the aggregate model input is held under the model's\n * context window. Admission NEVER deletes a turn (senpi#1603): dropping the\n * oldest turns to reach a byte cap silently amputated the conversation, and a\n * history that still exceeds the budget after blanking is admitted as-is so the\n * existing Cursor overflow path (a 0-token `resource_exhausted` surfaced to the\n * session layer) compacts it with the session's own policy.\n */\nimport type { AgentMessage } from \"@earendil-works/pi-agent-core\";\nimport { measureCursorModelInputSerializedBytes } from \"@earendil-works/pi-ai\";\nimport type { Message } from \"@earendil-works/pi-ai/compat\";\nimport { convertToLlm } from \"./messages.ts\";\n\n/** Cursor ingest rejects large verbatim tool payloads. The bound is graphemes. */\nexport const CURSOR_TOOL_RESULT_MAX_CHARS = 2000;\nconst CURSOR_TRUNCATION_MARKER = \"\\n...[truncated]\";\n/** Repo-wide estimate, matching `estimateTokens` in core/compaction. */\nconst CHARS_PER_TOKEN = 4;\n\n/** Aggregate admission budget for a model whose window is `contextWindowTokens`. */\nexport function cursorAdmissionBudgetBytes(contextWindowTokens: number): number {\n\tif (!Number.isFinite(contextWindowTokens) || contextWindowTokens <= 0) return 0;\n\treturn Math.floor(contextWindowTokens) * CHARS_PER_TOKEN;\n}\n\nexport type CursorAdmissionRequest = {\n\treadonly messages: AgentMessage[] | undefined;\n\t/** Serialized model-input bytes this turn may occupy. */\n\treadonly budgetBytes: number;\n\treadonly maxChars?: number;\n\treadonly convert?: (candidate: AgentMessage[]) => Message[];\n};\n\nexport type CursorAdmissionResult = {\n\treadonly messages: AgentMessage[] | undefined;\n\treadonly changed: boolean;\n\treadonly blankedToolResults: number;\n\treadonly bytesBefore: number;\n\treadonly bytesAfter: number;\n\t/** True when the history still exceeds the budget; the request is still sent. */\n\treadonly overBudget: boolean;\n};\n\nfunction capToolResultBodies(\n\tmessages: AgentMessage[],\n\tmaxChars: number,\n): { readonly messages: AgentMessage[]; readonly changed: boolean } {\n\tconst segmenter = new Intl.Segmenter(undefined, { granularity: \"grapheme\" });\n\tconst markerChars = [...segmenter.segment(CURSOR_TRUNCATION_MARKER)].length;\n\tconst result = messages.slice();\n\tlet changed = false;\n\tfor (let messageIndex = result.length - 1; messageIndex >= 0; messageIndex--) {\n\t\tconst message = result[messageIndex];\n\t\tif (message.role !== \"toolResult\" || !Array.isArray(message.content)) continue;\n\t\tlet content = message.content;\n\t\tfor (let partIndex = content.length - 1; partIndex >= 0; partIndex--) {\n\t\t\tconst part = content[partIndex];\n\t\t\tif (part.type === \"image\" && typeof part.data === \"string\") continue;\n\t\t\tif (part.type !== \"text\" || typeof part.text !== \"string\") continue;\n\t\t\tconst graphemes = [...segmenter.segment(part.text)].map((item) => item.segment);\n\t\t\tif (graphemes.length <= maxChars) continue;\n\t\t\tconst kept = graphemes.slice(0, Math.max(0, maxChars - markerChars)).join(\"\");\n\t\t\tcontent = content === message.content ? content.slice() : content;\n\t\t\tcontent[partIndex] = { ...part, text: kept + CURSOR_TRUNCATION_MARKER };\n\t\t\tresult[messageIndex] = { ...message, content };\n\t\t\tchanged = true;\n\t\t}\n\t}\n\treturn { messages: result, changed };\n}\n\nfunction emptyToolResult(message: AgentMessage): AgentMessage {\n\tif (message.role !== \"toolResult\" || !Array.isArray(message.content)) return message;\n\tconst emptiedContent = message.content.map((part) =>\n\t\tpart.type === \"text\" ? { ...part, text: \"\" } : part.type === \"image\" ? { ...part, data: \"\" } : part,\n\t);\n\tconst content = emptiedContent.filter((part, index) => {\n\t\tif (index === 0) return true;\n\t\tconst previous = emptiedContent[index - 1];\n\t\tconst empty = part.type === \"text\" ? part.text === \"\" : part.type === \"image\" && part.data === \"\";\n\t\tconst previousEmpty =\n\t\t\tprevious.type === \"text\" ? previous.text === \"\" : previous.type === \"image\" && previous.data === \"\";\n\t\treturn !empty || !previousEmpty;\n\t});\n\treturn { ...message, content };\n}\n\n/**\n * Empties the oldest result bodies until the rest fits. The prefix search is\n * monotonic, so admission stays bounded instead of reserializing the whole\n * history once per tool result.\n */\nfunction blankOldestToolResults(\n\tmessages: AgentMessage[],\n\tfits: (candidate: AgentMessage[]) => boolean,\n): { readonly messages: AgentMessage[]; readonly count: number } {\n\tconst toolResultIndexes = messages.flatMap((message, index) =>\n\t\tmessage.role === \"toolResult\" && Array.isArray(message.content) ? [index] : [],\n\t);\n\tconst withEmptyPrefix = (count: number): AgentMessage[] => {\n\t\tconst candidate = messages.slice();\n\t\tfor (let i = 0; i < count; i++)\n\t\t\tcandidate[toolResultIndexes[i]] = emptyToolResult(candidate[toolResultIndexes[i]]);\n\t\treturn candidate;\n\t};\n\tlet low = 0;\n\tlet high = toolResultIndexes.length;\n\twhile (low < high) {\n\t\tconst middle = Math.floor((low + high) / 2);\n\t\tif (fits(withEmptyPrefix(middle + 1))) high = middle;\n\t\telse low = middle + 1;\n\t}\n\tconst count = Math.min(low + 1, toolResultIndexes.length);\n\treturn { messages: count > 0 ? withEmptyPrefix(count) : messages, count };\n}\n\n/**\n * Bounds one Cursor request: per-result caps first, then blanking the oldest\n * tool result bodies while the model input exceeds `budgetBytes`. Conversation\n * turns are never removed.\n */\nexport function admitCursorHistory(request: CursorAdmissionRequest): CursorAdmissionResult {\n\tconst { messages, budgetBytes } = request;\n\tif (!Array.isArray(messages) || messages.length === 0) {\n\t\treturn { messages, changed: false, blankedToolResults: 0, bytesBefore: 0, bytesAfter: 0, overBudget: false };\n\t}\n\tconst convert = request.convert ?? ((candidate: AgentMessage[]) => convertToLlm(candidate));\n\tconst capped = capToolResultBodies(messages, request.maxChars ?? CURSOR_TOOL_RESULT_MAX_CHARS);\n\tconst measure = (candidate: AgentMessage[]): number => {\n\t\tconst converted = convert(candidate);\n\t\tconst activeUserMessageIndex = converted.at(-1)?.role === \"user\" ? converted.length - 1 : -1;\n\t\treturn measureCursorModelInputSerializedBytes(converted, activeUserMessageIndex);\n\t};\n\n\tconst bytesBefore = measure(capped.messages);\n\tif (bytesBefore <= budgetBytes) {\n\t\treturn {\n\t\t\tmessages: capped.changed ? capped.messages : messages,\n\t\t\tchanged: capped.changed,\n\t\t\tblankedToolResults: 0,\n\t\t\tbytesBefore,\n\t\t\tbytesAfter: bytesBefore,\n\t\t\toverBudget: false,\n\t\t};\n\t}\n\n\tconst blanked = blankOldestToolResults(capped.messages, (candidate) => measure(candidate) <= budgetBytes);\n\tconst bytesAfter = blanked.count > 0 ? measure(blanked.messages) : bytesBefore;\n\tconst changed = capped.changed || blanked.count > 0;\n\treturn {\n\t\tmessages: changed ? blanked.messages : messages,\n\t\tchanged,\n\t\tblankedToolResults: blanked.count,\n\t\tbytesBefore,\n\t\tbytesAfter,\n\t\toverBudget: bytesAfter > budgetBytes,\n\t};\n}\n\n/**\n * Positional entry point kept for existing callers. An omitted `maxBytes`\n * applies the per-result cap only; the aggregate budget belongs to the caller\n * that knows the model window.\n */\nexport function truncateToolResultBodies(\n\tmessages: AgentMessage[] | undefined,\n\tmaxChars = CURSOR_TOOL_RESULT_MAX_CHARS,\n\tmaxBytes = Number.POSITIVE_INFINITY,\n\tconvert = (candidate: AgentMessage[]) => convertToLlm(candidate),\n): { messages: AgentMessage[] | undefined; changed: boolean } {\n\tconst admission = admitCursorHistory({ messages, budgetBytes: maxBytes, maxChars, convert });\n\treturn { messages: admission.messages, changed: admission.changed };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"extension.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/ask-user/extension.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,gBAAgB,CAAC;AAMrE,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAwC/D"}
1
+ {"version":3,"file":"extension.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/ask-user/extension.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,gBAAgB,CAAC;AAMrE,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAqD/D"}