@astralyn/pi 0.85.3 → 0.86.0

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 (323) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/dist/bundle/chunks/anthropic-messages-R2LYJUDD.js +6 -0
  3. package/dist/bundle/chunks/azure-openai-responses-HS35BQV6.js +2 -0
  4. package/dist/bundle/chunks/bedrock-converse-stream.js +36 -32
  5. package/dist/bundle/chunks/{chunk-S2DJQQI2.js → chunk-2IO5GDBS.js} +10 -1
  6. package/dist/bundle/chunks/{chunk-7LO5Z4WE.js → chunk-I5IVW2WS.js} +1 -1
  7. package/dist/bundle/chunks/chunk-JI4WGISU.js +2 -0
  8. package/dist/bundle/chunks/chunk-LPQCB2VJ.js +44 -0
  9. package/dist/bundle/chunks/chunk-M2YWW37K.js +2 -0
  10. package/dist/bundle/chunks/{chunk-LB4P77SH.js → chunk-MSHHFVMD.js} +776 -762
  11. package/dist/bundle/chunks/chunk-NW5FIDD7.js +11 -0
  12. package/dist/bundle/chunks/chunk-PJVFYVHE.js +42 -0
  13. package/dist/bundle/chunks/github-copilot.js +1 -1
  14. package/dist/bundle/chunks/google-generative-ai-NOVAJBFC.js +2 -0
  15. package/dist/bundle/chunks/google-vertex-4VHCZJV5.js +2 -0
  16. package/dist/bundle/chunks/https-proxy-agent-JOOPB4RE.js +16 -0
  17. package/dist/bundle/chunks/jiti-loader-BFSSLU7G.js +21 -0
  18. package/dist/bundle/chunks/jiti-static-loader-CLT3YR3B.js +2 -0
  19. package/dist/bundle/chunks/mistral-conversations-WC6A2WCJ.js +5 -0
  20. package/dist/bundle/chunks/{node-G4XOIDPH.js → node-CXWYTK2I.js} +1 -1
  21. package/dist/bundle/chunks/openai-codex-responses-XCDG75W2.js +10 -0
  22. package/dist/bundle/chunks/openai-completions-WJIA7NEB.js +7 -0
  23. package/dist/bundle/chunks/openai-responses-UT6XFKC7.js +2 -0
  24. package/dist/bundle/chunks/{pi-messages-PE6B42TG.js → pi-messages-MQMPIPNC.js} +1 -1
  25. package/dist/bundle/chunks/virtual-modules-B4BILEXT.js +2 -0
  26. package/dist/bundle/cli.js +1 -1
  27. package/dist/bundle/index.js +1 -1
  28. package/dist/bundle/rpc-entry.js +1 -1
  29. package/dist/cli/session-picker.d.ts +1 -1
  30. package/dist/cli/session-picker.d.ts.map +1 -1
  31. package/dist/cli/session-picker.js +13 -11
  32. package/dist/cli/session-picker.js.map +1 -1
  33. package/dist/config.js +1 -1
  34. package/dist/config.js.map +1 -1
  35. package/dist/core/agent-session.d.ts +56 -14
  36. package/dist/core/agent-session.d.ts.map +1 -1
  37. package/dist/core/agent-session.js +305 -176
  38. package/dist/core/agent-session.js.map +1 -1
  39. package/dist/core/bug-report-upload.d.ts +12 -0
  40. package/dist/core/bug-report-upload.d.ts.map +1 -0
  41. package/dist/core/bug-report-upload.js +22 -0
  42. package/dist/core/bug-report-upload.js.map +1 -0
  43. package/dist/core/bug-report.d.ts +176 -0
  44. package/dist/core/bug-report.d.ts.map +1 -0
  45. package/dist/core/bug-report.js +292 -0
  46. package/dist/core/bug-report.js.map +1 -0
  47. package/dist/core/cache-stats.d.ts.map +1 -1
  48. package/dist/core/cache-stats.js +12 -1
  49. package/dist/core/cache-stats.js.map +1 -1
  50. package/dist/core/cache-warmer.d.ts +102 -0
  51. package/dist/core/cache-warmer.d.ts.map +1 -0
  52. package/dist/core/cache-warmer.js +333 -0
  53. package/dist/core/cache-warmer.js.map +1 -0
  54. package/dist/core/compaction/branch-summarization.js +2 -2
  55. package/dist/core/compaction/branch-summarization.js.map +1 -1
  56. package/dist/core/compaction/compaction.d.ts +14 -9
  57. package/dist/core/compaction/compaction.d.ts.map +1 -1
  58. package/dist/core/compaction/compaction.js +30 -23
  59. package/dist/core/compaction/compaction.js.map +1 -1
  60. package/dist/core/compaction/settings.d.ts +17 -20
  61. package/dist/core/compaction/settings.d.ts.map +1 -1
  62. package/dist/core/compaction/settings.js +19 -26
  63. package/dist/core/compaction/settings.js.map +1 -1
  64. package/dist/core/context-snapshot.d.ts +16 -5
  65. package/dist/core/context-snapshot.d.ts.map +1 -1
  66. package/dist/core/context-snapshot.js +20 -10
  67. package/dist/core/context-snapshot.js.map +1 -1
  68. package/dist/core/crash-log.d.ts +22 -0
  69. package/dist/core/crash-log.d.ts.map +1 -0
  70. package/dist/core/crash-log.js +71 -0
  71. package/dist/core/crash-log.js.map +1 -0
  72. package/dist/core/experimental.d.ts +0 -4
  73. package/dist/core/experimental.d.ts.map +1 -1
  74. package/dist/core/experimental.js +0 -4
  75. package/dist/core/experimental.js.map +1 -1
  76. package/dist/core/extensions/index.d.ts +1 -1
  77. package/dist/core/extensions/index.d.ts.map +1 -1
  78. package/dist/core/extensions/index.js.map +1 -1
  79. package/dist/core/extensions/jiti-loader.d.ts +2 -0
  80. package/dist/core/extensions/jiti-loader.d.ts.map +1 -0
  81. package/dist/core/extensions/jiti-loader.js +4 -0
  82. package/dist/core/extensions/jiti-loader.js.map +1 -0
  83. package/dist/core/extensions/jiti-static-loader.d.ts +2 -0
  84. package/dist/core/extensions/jiti-static-loader.d.ts.map +1 -0
  85. package/dist/core/extensions/jiti-static-loader.js +4 -0
  86. package/dist/core/extensions/jiti-static-loader.js.map +1 -0
  87. package/dist/core/extensions/loader.d.ts.map +1 -1
  88. package/dist/core/extensions/loader.js +38 -51
  89. package/dist/core/extensions/loader.js.map +1 -1
  90. package/dist/core/extensions/runner.d.ts +10 -7
  91. package/dist/core/extensions/runner.d.ts.map +1 -1
  92. package/dist/core/extensions/runner.js +85 -67
  93. package/dist/core/extensions/runner.js.map +1 -1
  94. package/dist/core/extensions/types.d.ts +60 -50
  95. package/dist/core/extensions/types.d.ts.map +1 -1
  96. package/dist/core/extensions/types.js.map +1 -1
  97. package/dist/core/extensions/virtual-modules.d.ts +3 -0
  98. package/dist/core/extensions/virtual-modules.d.ts.map +1 -0
  99. package/dist/core/extensions/virtual-modules.js +39 -0
  100. package/dist/core/extensions/virtual-modules.js.map +1 -0
  101. package/dist/core/extensions/wrapper.d.ts.map +1 -1
  102. package/dist/core/extensions/wrapper.js +1 -20
  103. package/dist/core/extensions/wrapper.js.map +1 -1
  104. package/dist/core/index.d.ts +2 -1
  105. package/dist/core/index.d.ts.map +1 -1
  106. package/dist/core/index.js.map +1 -1
  107. package/dist/core/keybindings.d.ts +1 -1
  108. package/dist/core/keybindings.js +1 -1
  109. package/dist/core/keybindings.js.map +1 -1
  110. package/dist/core/messages.d.ts.map +1 -1
  111. package/dist/core/messages.js +1 -0
  112. package/dist/core/messages.js.map +1 -1
  113. package/dist/core/model-config.d.ts +101 -20
  114. package/dist/core/model-config.d.ts.map +1 -1
  115. package/dist/core/model-config.js +25 -18
  116. package/dist/core/model-config.js.map +1 -1
  117. package/dist/core/model-registry.d.ts +5 -1
  118. package/dist/core/model-registry.d.ts.map +1 -1
  119. package/dist/core/model-registry.js +8 -0
  120. package/dist/core/model-registry.js.map +1 -1
  121. package/dist/core/model-resolver.js +1 -1
  122. package/dist/core/model-resolver.js.map +1 -1
  123. package/dist/core/model-runtime.d.ts.map +1 -1
  124. package/dist/core/model-runtime.js +5 -3
  125. package/dist/core/model-runtime.js.map +1 -1
  126. package/dist/core/provider-composer.d.ts +3 -2
  127. package/dist/core/provider-composer.d.ts.map +1 -1
  128. package/dist/core/provider-composer.js +2 -0
  129. package/dist/core/provider-composer.js.map +1 -1
  130. package/dist/core/radius.d.ts +3 -0
  131. package/dist/core/radius.d.ts.map +1 -1
  132. package/dist/core/radius.js +6 -0
  133. package/dist/core/radius.js.map +1 -1
  134. package/dist/core/sdk.d.ts.map +1 -1
  135. package/dist/core/sdk.js +46 -18
  136. package/dist/core/sdk.js.map +1 -1
  137. package/dist/core/session-export.d.ts +6 -2
  138. package/dist/core/session-export.d.ts.map +1 -1
  139. package/dist/core/session-export.js +14 -13
  140. package/dist/core/session-export.js.map +1 -1
  141. package/dist/core/session-manager.d.ts +29 -6
  142. package/dist/core/session-manager.d.ts.map +1 -1
  143. package/dist/core/session-manager.js +159 -96
  144. package/dist/core/session-manager.js.map +1 -1
  145. package/dist/core/settings-manager.d.ts +31 -4
  146. package/dist/core/settings-manager.d.ts.map +1 -1
  147. package/dist/core/settings-manager.js +65 -8
  148. package/dist/core/settings-manager.js.map +1 -1
  149. package/dist/core/slash-commands.d.ts.map +1 -1
  150. package/dist/core/slash-commands.js +1 -0
  151. package/dist/core/slash-commands.js.map +1 -1
  152. package/dist/core/system-prompt.d.ts +49 -6
  153. package/dist/core/system-prompt.d.ts.map +1 -1
  154. package/dist/core/system-prompt.js +121 -92
  155. package/dist/core/system-prompt.js.map +1 -1
  156. package/dist/core/tools/bash.d.ts +2 -1
  157. package/dist/core/tools/bash.d.ts.map +1 -1
  158. package/dist/core/tools/bash.js +6 -3
  159. package/dist/core/tools/bash.js.map +1 -1
  160. package/dist/core/tools/edit.d.ts.map +1 -1
  161. package/dist/core/tools/edit.js +1 -2
  162. package/dist/core/tools/edit.js.map +1 -1
  163. package/dist/core/tools/read.d.ts.map +1 -1
  164. package/dist/core/tools/read.js +1 -2
  165. package/dist/core/tools/read.js.map +1 -1
  166. package/dist/core/tools/shell-execution.js +2 -2
  167. package/dist/core/tools/shell-execution.js.map +1 -1
  168. package/dist/core/tools/write.d.ts.map +1 -1
  169. package/dist/core/tools/write.js +1 -2
  170. package/dist/core/tools/write.js.map +1 -1
  171. package/dist/core/usage-totals.d.ts +1 -1
  172. package/dist/core/usage-totals.d.ts.map +1 -1
  173. package/dist/core/usage-totals.js +4 -1
  174. package/dist/core/usage-totals.js.map +1 -1
  175. package/dist/extensions/background/schema.d.ts +1 -1
  176. package/dist/extensions/btw/agent.d.ts.map +1 -1
  177. package/dist/extensions/btw/agent.js +3 -2
  178. package/dist/extensions/btw/agent.js.map +1 -1
  179. package/dist/extensions/llama/client.d.ts +2 -0
  180. package/dist/extensions/llama/client.d.ts.map +1 -1
  181. package/dist/extensions/llama/client.js +7 -3
  182. package/dist/extensions/llama/client.js.map +1 -1
  183. package/dist/extensions/llama/provider.d.ts.map +1 -1
  184. package/dist/extensions/llama/provider.js +20 -5
  185. package/dist/extensions/llama/provider.js.map +1 -1
  186. package/dist/extensions/provider/compat-fields.d.ts.map +1 -1
  187. package/dist/extensions/provider/compat-fields.js +5 -2
  188. package/dist/extensions/provider/compat-fields.js.map +1 -1
  189. package/dist/extensions/provider/ui/app.js +2 -2
  190. package/dist/extensions/provider/ui/app.js.map +1 -1
  191. package/dist/extensions/todo/schema.d.ts +1 -1
  192. package/dist/index.d.ts +3 -2
  193. package/dist/index.d.ts.map +1 -1
  194. package/dist/index.js.map +1 -1
  195. package/dist/main.d.ts.map +1 -1
  196. package/dist/main.js +13 -9
  197. package/dist/main.js.map +1 -1
  198. package/dist/migrations.d.ts.map +1 -1
  199. package/dist/migrations.js +2 -2
  200. package/dist/migrations.js.map +1 -1
  201. package/dist/modes/interactive/bug-report.d.ts +14 -0
  202. package/dist/modes/interactive/bug-report.d.ts.map +1 -0
  203. package/dist/modes/interactive/bug-report.js +209 -0
  204. package/dist/modes/interactive/bug-report.js.map +1 -0
  205. package/dist/modes/interactive/chat-viewport.js +1 -1
  206. package/dist/modes/interactive/chat-viewport.js.map +1 -1
  207. package/dist/modes/interactive/components/armin.d.ts.map +1 -1
  208. package/dist/modes/interactive/components/armin.js +0 -5
  209. package/dist/modes/interactive/components/armin.js.map +1 -1
  210. package/dist/modes/interactive/components/bash-execution.d.ts +0 -1
  211. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
  212. package/dist/modes/interactive/components/bash-execution.js +2 -3
  213. package/dist/modes/interactive/components/bash-execution.js.map +1 -1
  214. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
  215. package/dist/modes/interactive/components/branch-summary-message.js +12 -5
  216. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
  217. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
  218. package/dist/modes/interactive/components/compaction-summary-message.js +12 -5
  219. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
  220. package/dist/modes/interactive/components/countdown-timer.d.ts +6 -13
  221. package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -1
  222. package/dist/modes/interactive/components/countdown-timer.js +15 -51
  223. package/dist/modes/interactive/components/countdown-timer.js.map +1 -1
  224. package/dist/modes/interactive/components/custom-editor.d.ts +3 -3
  225. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
  226. package/dist/modes/interactive/components/custom-editor.js.map +1 -1
  227. package/dist/modes/interactive/components/extension-input.d.ts +2 -0
  228. package/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
  229. package/dist/modes/interactive/components/extension-input.js +6 -0
  230. package/dist/modes/interactive/components/extension-input.js.map +1 -1
  231. package/dist/modes/interactive/components/extension-selector.d.ts +1 -2
  232. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
  233. package/dist/modes/interactive/components/extension-selector.js +4 -2
  234. package/dist/modes/interactive/components/extension-selector.js.map +1 -1
  235. package/dist/modes/interactive/components/session-selector.d.ts +5 -8
  236. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  237. package/dist/modes/interactive/components/session-selector.js +72 -95
  238. package/dist/modes/interactive/components/session-selector.js.map +1 -1
  239. package/dist/modes/interactive/components/settings-selector.d.ts +3 -1
  240. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  241. package/dist/modes/interactive/components/settings-selector.js +11 -0
  242. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  243. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
  244. package/dist/modes/interactive/components/skill-invocation-message.js +11 -4
  245. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
  246. package/dist/modes/interactive/components/status-indicator.d.ts +2 -2
  247. package/dist/modes/interactive/components/status-indicator.d.ts.map +1 -1
  248. package/dist/modes/interactive/components/status-indicator.js +7 -7
  249. package/dist/modes/interactive/components/status-indicator.js.map +1 -1
  250. package/dist/modes/interactive/components/tool-chrome.d.ts.map +1 -1
  251. package/dist/modes/interactive/components/tool-chrome.js +4 -1
  252. package/dist/modes/interactive/components/tool-chrome.js.map +1 -1
  253. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  254. package/dist/modes/interactive/components/tool-execution.js +4 -3
  255. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  256. package/dist/modes/interactive/components/tree-selector.d.ts +1 -10
  257. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
  258. package/dist/modes/interactive/components/tree-selector.js +4 -51
  259. package/dist/modes/interactive/components/tree-selector.js.map +1 -1
  260. package/dist/modes/interactive/interactive-mode.d.ts +13 -1
  261. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  262. package/dist/modes/interactive/interactive-mode.js +227 -91
  263. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  264. package/dist/modes/interactive/session-share.d.ts +2 -0
  265. package/dist/modes/interactive/session-share.d.ts.map +1 -1
  266. package/dist/modes/interactive/session-share.js +8 -4
  267. package/dist/modes/interactive/session-share.js.map +1 -1
  268. package/dist/modes/interactive/tui-renderer.js +2 -2
  269. package/dist/modes/interactive/tui-renderer.js.map +1 -1
  270. package/dist/modes/rpc/rpc-mode.js +2 -2
  271. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  272. package/dist/utils/clipboard-command.d.ts +7 -0
  273. package/dist/utils/clipboard-command.d.ts.map +1 -0
  274. package/dist/utils/clipboard-command.js +45 -0
  275. package/dist/utils/clipboard-command.js.map +1 -0
  276. package/dist/utils/clipboard-image.d.ts.map +1 -1
  277. package/dist/utils/clipboard-image.js +52 -69
  278. package/dist/utils/clipboard-image.js.map +1 -1
  279. package/dist/utils/clipboard.d.ts.map +1 -1
  280. package/dist/utils/clipboard.js +61 -125
  281. package/dist/utils/clipboard.js.map +1 -1
  282. package/dist/utils/zip.d.ts +7 -0
  283. package/dist/utils/zip.d.ts.map +1 -0
  284. package/dist/utils/zip.js +60 -0
  285. package/dist/utils/zip.js.map +1 -0
  286. package/docs/compaction.md +32 -11
  287. package/docs/custom-provider.md +19 -8
  288. package/docs/environment-variables.md +1 -0
  289. package/docs/extensions.md +50 -34
  290. package/docs/models.md +38 -3
  291. package/docs/providers.md +1 -1
  292. package/docs/sdk.md +4 -2
  293. package/docs/session-format.md +63 -24
  294. package/docs/sessions.md +28 -1
  295. package/docs/settings.md +58 -4
  296. package/docs/termux.md +0 -1
  297. package/docs/tui.md +2 -0
  298. package/docs/usage.md +1 -0
  299. package/examples/extensions/README.md +0 -1
  300. package/examples/extensions/custom-provider-anthropic/index.ts +18 -12
  301. package/examples/extensions/custom-provider-gitlab-duo/index.ts +2 -2
  302. package/examples/extensions/prompt-customizer.ts +19 -67
  303. package/npm-shrinkwrap.json +275 -1028
  304. package/package.json +17 -23
  305. package/dist/bundle/chunks/anthropic-messages-IHRRITCV.js +0 -6
  306. package/dist/bundle/chunks/azure-openai-responses-QXBIDYXO.js +0 -2
  307. package/dist/bundle/chunks/chunk-JSJPY26N.js +0 -2
  308. package/dist/bundle/chunks/chunk-KI6LC764.js +0 -42
  309. package/dist/bundle/chunks/chunk-OWESLY5T.js +0 -11
  310. package/dist/bundle/chunks/chunk-RRBI7OUG.js +0 -50
  311. package/dist/bundle/chunks/chunk-YZJWMPUI.js +0 -2
  312. package/dist/bundle/chunks/google-generative-ai-NBOR3IQR.js +0 -2
  313. package/dist/bundle/chunks/google-vertex-VTHX3SUB.js +0 -2
  314. package/dist/bundle/chunks/https-proxy-agent-2VXB7436.js +0 -13
  315. package/dist/bundle/chunks/mistral-conversations-NO4ANAA5.js +0 -5
  316. package/dist/bundle/chunks/openai-codex-responses-5S3T3HMA.js +0 -10
  317. package/dist/bundle/chunks/openai-completions-CXRRTRWE.js +0 -7
  318. package/dist/bundle/chunks/openai-responses-CV3MH6VP.js +0 -2
  319. package/dist/utils/clipboard-native.d.ts +0 -11
  320. package/dist/utils/clipboard-native.d.ts.map +0 -1
  321. package/dist/utils/clipboard-native.js +0 -20
  322. package/dist/utils/clipboard-native.js.map +0 -1
  323. package/examples/extensions/kimi-deferred-tools.ts +0 -61
@@ -1,27 +1,24 @@
1
- /** Pure compaction policy, shared by settings readers and execution. */
2
- export interface CompactionSettings {
3
- enabled: boolean;
4
- keepRecentTokens: number;
5
- /** Trigger line as a percentage of the context window. Default: 85 */
6
- triggerPercent?: number;
7
- }
1
+ /**
2
+ * Percentage trigger line, expressed in upstream's reserve-token budget.
3
+ *
4
+ * Compaction itself only knows `reserveTokens`: it triggers once the context
5
+ * exceeds `contextWindow - reserveTokens`. A fixed reserve behaves very
6
+ * differently across model windows — 16384 tokens is 8% of a 200k window but
7
+ * 1.6% of a million-token one — so this distribution configures the trigger as
8
+ * a percentage of the window and converts it to a reserve for the model in use.
9
+ * An explicit `compaction.reserveTokens` setting still wins.
10
+ */
11
+ import type { CompactionSettings } from "./compaction.ts";
8
12
  export declare const DEFAULT_TRIGGER_PERCENT = 85;
9
13
  export declare const MIN_TRIGGER_PERCENT = 20;
10
14
  export declare const MAX_TRIGGER_PERCENT = 95;
11
- /** Upper bound for the internal summary reserve; not a user setting. */
12
- export declare const SUMMARY_RESERVE_TOKENS = 16384;
13
- export declare const DEFAULT_COMPACTION_SETTINGS: CompactionSettings;
14
15
  export declare function clampTriggerPercent(value: number): number;
15
- export declare function shouldCompact(contextTokens: number, contextWindow: number, settings: CompactionSettings): boolean;
16
16
  /**
17
- * Leave room below the trigger for summaries and the next response. Recent
18
- * messages target at most half the trigger; the summary reserve uses at most
19
- * a quarter. A split turn can use 0.8 + 0.5 of that reserve across two summaries.
20
- * Cut points still preserve whole messages and tool-call/result groups, so the
21
- * retained tail can exceed its target when a single group is too large.
17
+ * Reserve and retention for a trigger line at `triggerPercent` of the window.
18
+ *
19
+ * The retained tail stays at or below half the trigger line: keeping more than
20
+ * that would leave the compacted context close to the line again, so the next
21
+ * turn would immediately compact a second time.
22
22
  */
23
- export declare function getCompactionBudget(settings: CompactionSettings, contextWindow?: number): {
24
- keepRecentTokens: number;
25
- summaryReserveTokens: number;
26
- };
23
+ export declare function triggerPercentBudget(contextWindow: number, triggerPercent: number, keepRecentTokens: number): Pick<CompactionSettings, "reserveTokens" | "keepRecentTokens">;
27
24
  //# sourceMappingURL=settings.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../../src/core/compaction/settings.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,MAAM,WAAW,kBAAkB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,sEAAsE;IACtE,cAAc,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAC1C,eAAO,MAAM,mBAAmB,KAAK,CAAC;AACtC,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAEtC,wEAAwE;AACxE,eAAO,MAAM,sBAAsB,QAAQ,CAAC;AAE5C,eAAO,MAAM,2BAA2B,EAAE,kBAIzC,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGzD;AAMD,wBAAgB,aAAa,CAAC,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,kBAAkB,GAAG,OAAO,CAEjH;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAClC,QAAQ,EAAE,kBAAkB,EAC5B,aAAa,CAAC,EAAE,MAAM,GACpB;IAAE,gBAAgB,EAAE,MAAM,CAAC;IAAC,oBAAoB,EAAE,MAAM,CAAA;CAAE,CAU5D"}
1
+ {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../../src/core/compaction/settings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAC1C,eAAO,MAAM,mBAAmB,KAAK,CAAC;AACtC,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAEtC,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGzD;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CACnC,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,EACtB,gBAAgB,EAAE,MAAM,GACtB,IAAI,CAAC,kBAAkB,EAAE,eAAe,GAAG,kBAAkB,CAAC,CAMhE"}
@@ -1,40 +1,33 @@
1
+ /**
2
+ * Percentage trigger line, expressed in upstream's reserve-token budget.
3
+ *
4
+ * Compaction itself only knows `reserveTokens`: it triggers once the context
5
+ * exceeds `contextWindow - reserveTokens`. A fixed reserve behaves very
6
+ * differently across model windows — 16384 tokens is 8% of a 200k window but
7
+ * 1.6% of a million-token one — so this distribution configures the trigger as
8
+ * a percentage of the window and converts it to a reserve for the model in use.
9
+ * An explicit `compaction.reserveTokens` setting still wins.
10
+ */
1
11
  export const DEFAULT_TRIGGER_PERCENT = 85;
2
12
  export const MIN_TRIGGER_PERCENT = 20;
3
13
  export const MAX_TRIGGER_PERCENT = 95;
4
- /** Upper bound for the internal summary reserve; not a user setting. */
5
- export const SUMMARY_RESERVE_TOKENS = 16384;
6
- export const DEFAULT_COMPACTION_SETTINGS = {
7
- enabled: true,
8
- keepRecentTokens: 20000,
9
- triggerPercent: DEFAULT_TRIGGER_PERCENT,
10
- };
11
14
  export function clampTriggerPercent(value) {
12
15
  if (!Number.isFinite(value))
13
16
  return DEFAULT_TRIGGER_PERCENT;
14
17
  return Math.min(MAX_TRIGGER_PERCENT, Math.max(MIN_TRIGGER_PERCENT, value));
15
18
  }
16
- function triggerTokens(contextWindow, settings) {
17
- return (contextWindow * clampTriggerPercent(settings.triggerPercent ?? DEFAULT_TRIGGER_PERCENT)) / 100;
18
- }
19
- export function shouldCompact(contextTokens, contextWindow, settings) {
20
- return settings.enabled && contextTokens > triggerTokens(contextWindow, settings);
21
- }
22
19
  /**
23
- * Leave room below the trigger for summaries and the next response. Recent
24
- * messages target at most half the trigger; the summary reserve uses at most
25
- * a quarter. A split turn can use 0.8 + 0.5 of that reserve across two summaries.
26
- * Cut points still preserve whole messages and tool-call/result groups, so the
27
- * retained tail can exceed its target when a single group is too large.
20
+ * Reserve and retention for a trigger line at `triggerPercent` of the window.
21
+ *
22
+ * The retained tail stays at or below half the trigger line: keeping more than
23
+ * that would leave the compacted context close to the line again, so the next
24
+ * turn would immediately compact a second time.
28
25
  */
29
- export function getCompactionBudget(settings, contextWindow) {
30
- if (contextWindow === undefined || !Number.isFinite(contextWindow) || contextWindow <= 0) {
31
- return { keepRecentTokens: settings.keepRecentTokens, summaryReserveTokens: SUMMARY_RESERVE_TOKENS };
32
- }
33
- const threshold = triggerTokens(contextWindow, settings);
26
+ export function triggerPercentBudget(contextWindow, triggerPercent, keepRecentTokens) {
27
+ const triggerTokens = (contextWindow * clampTriggerPercent(triggerPercent)) / 100;
34
28
  return {
35
- keepRecentTokens: Math.min(settings.keepRecentTokens, Math.max(1, Math.floor(threshold / 2))),
36
- // At least two reserve tokens keep both summary output limits positive.
37
- summaryReserveTokens: Math.min(SUMMARY_RESERVE_TOKENS, Math.max(2, Math.floor(threshold / 4))),
29
+ reserveTokens: Math.max(1, Math.round(contextWindow - triggerTokens)),
30
+ keepRecentTokens: Math.min(keepRecentTokens, Math.max(1, Math.floor(triggerTokens / 2))),
38
31
  };
39
32
  }
40
33
  //# sourceMappingURL=settings.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"settings.js","sourceRoot":"","sources":["../../../src/core/compaction/settings.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,CAAC;AAC1C,MAAM,CAAC,MAAM,mBAAmB,GAAG,EAAE,CAAC;AACtC,MAAM,CAAC,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAEtC,wEAAwE;AACxE,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,CAAC;AAE5C,MAAM,CAAC,MAAM,2BAA2B,GAAuB;IAC9D,OAAO,EAAE,IAAI;IACb,gBAAgB,EAAE,KAAK;IACvB,cAAc,EAAE,uBAAuB;CACvC,CAAC;AAEF,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAChD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,uBAAuB,CAAC;IAC5D,OAAO,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC,CAAC;AAC5E,CAAC;AAED,SAAS,aAAa,CAAC,aAAqB,EAAE,QAA4B;IACzE,OAAO,CAAC,aAAa,GAAG,mBAAmB,CAAC,QAAQ,CAAC,cAAc,IAAI,uBAAuB,CAAC,CAAC,GAAG,GAAG,CAAC;AACxG,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,aAAqB,EAAE,aAAqB,EAAE,QAA4B;IACvG,OAAO,QAAQ,CAAC,OAAO,IAAI,aAAa,GAAG,aAAa,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;AACnF,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAClC,QAA4B,EAC5B,aAAsB;IAEtB,IAAI,aAAa,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,aAAa,IAAI,CAAC,EAAE,CAAC;QAC1F,OAAO,EAAE,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,CAAC;IACtG,CAAC;IACD,MAAM,SAAS,GAAG,aAAa,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IACzD,OAAO;QACN,gBAAgB,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,gBAAgB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC;QAC7F,wEAAwE;QACxE,oBAAoB,EAAE,IAAI,CAAC,GAAG,CAAC,sBAAsB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC;KAC9F,CAAC;AACH,CAAC","sourcesContent":["/** Pure compaction policy, shared by settings readers and execution. */\nexport interface CompactionSettings {\n\tenabled: boolean;\n\tkeepRecentTokens: number;\n\t/** Trigger line as a percentage of the context window. Default: 85 */\n\ttriggerPercent?: number;\n}\n\nexport const DEFAULT_TRIGGER_PERCENT = 85;\nexport const MIN_TRIGGER_PERCENT = 20;\nexport const MAX_TRIGGER_PERCENT = 95;\n\n/** Upper bound for the internal summary reserve; not a user setting. */\nexport const SUMMARY_RESERVE_TOKENS = 16384;\n\nexport const DEFAULT_COMPACTION_SETTINGS: CompactionSettings = {\n\tenabled: true,\n\tkeepRecentTokens: 20000,\n\ttriggerPercent: DEFAULT_TRIGGER_PERCENT,\n};\n\nexport function clampTriggerPercent(value: number): number {\n\tif (!Number.isFinite(value)) return DEFAULT_TRIGGER_PERCENT;\n\treturn Math.min(MAX_TRIGGER_PERCENT, Math.max(MIN_TRIGGER_PERCENT, value));\n}\n\nfunction triggerTokens(contextWindow: number, settings: CompactionSettings): number {\n\treturn (contextWindow * clampTriggerPercent(settings.triggerPercent ?? DEFAULT_TRIGGER_PERCENT)) / 100;\n}\n\nexport function shouldCompact(contextTokens: number, contextWindow: number, settings: CompactionSettings): boolean {\n\treturn settings.enabled && contextTokens > triggerTokens(contextWindow, settings);\n}\n\n/**\n * Leave room below the trigger for summaries and the next response. Recent\n * messages target at most half the trigger; the summary reserve uses at most\n * a quarter. A split turn can use 0.8 + 0.5 of that reserve across two summaries.\n * Cut points still preserve whole messages and tool-call/result groups, so the\n * retained tail can exceed its target when a single group is too large.\n */\nexport function getCompactionBudget(\n\tsettings: CompactionSettings,\n\tcontextWindow?: number,\n): { keepRecentTokens: number; summaryReserveTokens: number } {\n\tif (contextWindow === undefined || !Number.isFinite(contextWindow) || contextWindow <= 0) {\n\t\treturn { keepRecentTokens: settings.keepRecentTokens, summaryReserveTokens: SUMMARY_RESERVE_TOKENS };\n\t}\n\tconst threshold = triggerTokens(contextWindow, settings);\n\treturn {\n\t\tkeepRecentTokens: Math.min(settings.keepRecentTokens, Math.max(1, Math.floor(threshold / 2))),\n\t\t// At least two reserve tokens keep both summary output limits positive.\n\t\tsummaryReserveTokens: Math.min(SUMMARY_RESERVE_TOKENS, Math.max(2, Math.floor(threshold / 4))),\n\t};\n}\n"]}
1
+ {"version":3,"file":"settings.js","sourceRoot":"","sources":["../../../src/core/compaction/settings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,CAAC;AAC1C,MAAM,CAAC,MAAM,mBAAmB,GAAG,EAAE,CAAC;AACtC,MAAM,CAAC,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAEtC,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAChD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,uBAAuB,CAAC;IAC5D,OAAO,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC,CAAC;AAC5E,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CACnC,aAAqB,EACrB,cAAsB,EACtB,gBAAwB;IAExB,MAAM,aAAa,GAAG,CAAC,aAAa,GAAG,mBAAmB,CAAC,cAAc,CAAC,CAAC,GAAG,GAAG,CAAC;IAClF,OAAO;QACN,aAAa,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,aAAa,CAAC,CAAC;QACrE,gBAAgB,EAAE,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC;KACxF,CAAC;AACH,CAAC","sourcesContent":["/**\n * Percentage trigger line, expressed in upstream's reserve-token budget.\n *\n * Compaction itself only knows `reserveTokens`: it triggers once the context\n * exceeds `contextWindow - reserveTokens`. A fixed reserve behaves very\n * differently across model windows — 16384 tokens is 8% of a 200k window but\n * 1.6% of a million-token one — so this distribution configures the trigger as\n * a percentage of the window and converts it to a reserve for the model in use.\n * An explicit `compaction.reserveTokens` setting still wins.\n */\n\nimport type { CompactionSettings } from \"./compaction.ts\";\n\nexport const DEFAULT_TRIGGER_PERCENT = 85;\nexport const MIN_TRIGGER_PERCENT = 20;\nexport const MAX_TRIGGER_PERCENT = 95;\n\nexport function clampTriggerPercent(value: number): number {\n\tif (!Number.isFinite(value)) return DEFAULT_TRIGGER_PERCENT;\n\treturn Math.min(MAX_TRIGGER_PERCENT, Math.max(MIN_TRIGGER_PERCENT, value));\n}\n\n/**\n * Reserve and retention for a trigger line at `triggerPercent` of the window.\n *\n * The retained tail stays at or below half the trigger line: keeping more than\n * that would leave the compacted context close to the line again, so the next\n * turn would immediately compact a second time.\n */\nexport function triggerPercentBudget(\n\tcontextWindow: number,\n\ttriggerPercent: number,\n\tkeepRecentTokens: number,\n): Pick<CompactionSettings, \"reserveTokens\" | \"keepRecentTokens\"> {\n\tconst triggerTokens = (contextWindow * clampTriggerPercent(triggerPercent)) / 100;\n\treturn {\n\t\treserveTokens: Math.max(1, Math.round(contextWindow - triggerTokens)),\n\t\tkeepRecentTokens: Math.min(keepRecentTokens, Math.max(1, Math.floor(triggerTokens / 2))),\n\t};\n}\n"]}
@@ -1,4 +1,4 @@
1
- import type { AgentMessage, ThinkingLevel } from "@earendil-works/pi-agent-core";
1
+ import type { Agent, AgentMessage, ThinkingLevel } from "@earendil-works/pi-agent-core";
2
2
  import type { Api, Message, Model, ModelsSimpleStreamOptions, Tool } from "@earendil-works/pi-ai";
3
3
  import type { ExtensionRunner } from "./extensions/runner.ts";
4
4
  import type { SettingsManager } from "./settings-manager.ts";
@@ -9,6 +9,11 @@ export interface ContextSnapshot {
9
9
  leafId: string | null;
10
10
  model: Model<Api>;
11
11
  thinkingLevel: ThinkingLevel;
12
+ /**
13
+ * The prompt replayed from the prepared transcript, which is the text the provider received.
14
+ * Before the first request it is the session's current prompt, which a consumer's Agent
15
+ * declares itself when `messages` carry no system message.
16
+ */
12
17
  systemPrompt: string;
13
18
  messages: Message[];
14
19
  tools: Tool[];
@@ -16,9 +21,10 @@ export interface ContextSnapshot {
16
21
  streamOptions: ModelsSimpleStreamOptions;
17
22
  }
18
23
  /**
19
- * Records the actual pre-provider message prefix, after context hooks and image policy.
20
- * A snapshot can reuse it and convert only newly settled messages. In particular, a
21
- * time-dependent context hook is not rerun over an already prepared cache prefix.
24
+ * Records the actual pre-provider message prefix, after context hooks, the session's request
25
+ * projections, and image policy. A snapshot can reuse it and convert only newly settled
26
+ * messages. In particular, a time-dependent context hook is not rerun over an already
27
+ * prepared cache prefix.
22
28
  */
23
29
  export declare class ContextSnapshotCapture {
24
30
  private readonly settings;
@@ -28,7 +34,12 @@ export declare class ContextSnapshotCapture {
28
34
  constructor(settings: SettingsManager, runnerRef: {
29
35
  current?: ExtensionRunner;
30
36
  });
31
- transformContext: (messages: AgentMessage[]) => Promise<AgentMessage[]>;
37
+ /**
38
+ * Record the source of every request context. Install after all other `transformContext`
39
+ * wrappers so the recorded prefix is exactly the array the request converts; a wrapper
40
+ * installed later would return a different array and the prefix would never be reused.
41
+ */
42
+ install(agent: Agent): void;
32
43
  convertToLlm: (messages: AgentMessage[]) => Message[];
33
44
  capture: (messages: AgentMessage[]) => Promise<Message[]>;
34
45
  }
@@ -1 +1 @@
1
- {"version":3,"file":"context-snapshot.d.ts","sourceRoot":"","sources":["../../src/core/context-snapshot.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACjF,OAAO,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,yBAAyB,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAClG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,oGAAoG;AACpG,MAAM,WAAW,eAAe;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAClB,aAAa,EAAE,aAAa,CAAC;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,4FAA4F;IAC5F,aAAa,EAAE,yBAAyB,CAAC;CACzC;AA6BD;;;;GAIG;AACH,qBAAa,sBAAsB;IAClC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;IAC3C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgC;IAC1D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiD;IACzE,OAAO,CAAC,QAAQ,CAAoF;gBAExF,QAAQ,EAAE,eAAe,EAAE,SAAS,EAAE;QAAE,OAAO,CAAC,EAAE,eAAe,CAAA;KAAE;IAK/E,gBAAgB,GAAU,UAAU,YAAY,EAAE,KAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAM1E;IAEF,YAAY,GAAI,UAAU,YAAY,EAAE,KAAG,OAAO,EAAE,CASlD;IAEF,OAAO,GAAU,UAAU,YAAY,EAAE,KAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAmB5D;CACF"}
1
+ {"version":3,"file":"context-snapshot.d.ts","sourceRoot":"","sources":["../../src/core/context-snapshot.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACxF,OAAO,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,yBAAyB,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAClG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,oGAAoG;AACpG,MAAM,WAAW,eAAe;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAClB,aAAa,EAAE,aAAa,CAAC;IAC7B;;;;OAIG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,4FAA4F;IAC5F,aAAa,EAAE,yBAAyB,CAAC;CACzC;AA6BD;;;;;GAKG;AACH,qBAAa,sBAAsB;IAClC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;IAC3C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgC;IAC1D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiD;IACzE,OAAO,CAAC,QAAQ,CAAoF;gBAExF,QAAQ,EAAE,eAAe,EAAE,SAAS,EAAE;QAAE,OAAO,CAAC,EAAE,eAAe,CAAA;KAAE;IAK/E;;;;OAIG;IACH,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAY3B,YAAY,GAAI,UAAU,YAAY,EAAE,KAAG,OAAO,EAAE,CASlD;IAEF,OAAO,GAAU,UAAU,YAAY,EAAE,KAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAmB5D;CACF"}
@@ -20,20 +20,14 @@ function convertWithImagePolicy(messages, blockImages) {
20
20
  });
21
21
  }
22
22
  /**
23
- * Records the actual pre-provider message prefix, after context hooks and image policy.
24
- * A snapshot can reuse it and convert only newly settled messages. In particular, a
25
- * time-dependent context hook is not rerun over an already prepared cache prefix.
23
+ * Records the actual pre-provider message prefix, after context hooks, the session's request
24
+ * projections, and image policy. A snapshot can reuse it and convert only newly settled
25
+ * messages. In particular, a time-dependent context hook is not rerun over an already
26
+ * prepared cache prefix.
26
27
  */
27
28
  export class ContextSnapshotCapture {
28
29
  constructor(settings, runnerRef) {
29
30
  this.pending = new WeakMap();
30
- this.transformContext = async (messages) => {
31
- const runner = this.runnerRef.current;
32
- const source = { messages: structuredClone(messages), runner };
33
- const transformed = runner ? await runner.emitContext(messages) : messages;
34
- this.pending.set(transformed, source);
35
- return transformed;
36
- };
37
31
  this.convertToLlm = (messages) => {
38
32
  const blockImages = this.settings.getBlockImages();
39
33
  const converted = convertWithImagePolicy(messages, blockImages);
@@ -65,5 +59,21 @@ export class ContextSnapshotCapture {
65
59
  this.settings = settings;
66
60
  this.runnerRef = runnerRef;
67
61
  }
62
+ /**
63
+ * Record the source of every request context. Install after all other `transformContext`
64
+ * wrappers so the recorded prefix is exactly the array the request converts; a wrapper
65
+ * installed later would return a different array and the prefix would never be reused.
66
+ */
67
+ install(agent) {
68
+ const transform = agent.transformContext;
69
+ agent.transformContext = async (messages, signal) => {
70
+ const runner = this.runnerRef.current;
71
+ const source = { messages: structuredClone(messages), runner };
72
+ const transformed = transform ? await transform(messages, signal) : messages;
73
+ this.pending.set(transformed, source);
74
+ return transformed;
75
+ };
76
+ agent.convertToLlm = this.convertToLlm;
77
+ }
68
78
  }
69
79
  //# sourceMappingURL=context-snapshot.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"context-snapshot.js","sourceRoot":"","sources":["../../src/core/context-snapshot.ts"],"names":[],"mappings":"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","sourcesContent":["import { isDeepStrictEqual } from \"node:util\";\nimport type { AgentMessage, ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport type { Api, Message, Model, ModelsSimpleStreamOptions, Tool } from \"@earendil-works/pi-ai\";\nimport type { ExtensionRunner } from \"./extensions/runner.ts\";\nimport { convertToLlm } from \"./messages.ts\";\nimport type { SettingsManager } from \"./settings-manager.ts\";\n\n/** Detached model input and request configuration. Contains no tool executors or session writer. */\nexport interface ContextSnapshot {\n\tcapturedAt: number;\n\tsessionId: string;\n\tleafId: string | null;\n\tmodel: Model<Api>;\n\tthinkingLevel: ThinkingLevel;\n\tsystemPrompt: string;\n\tmessages: Message[];\n\ttools: Tool[];\n\t/** Includes provider hooks and header transforms, but never the main run's abort signal. */\n\tstreamOptions: ModelsSimpleStreamOptions;\n}\n\nfunction convertWithImagePolicy(messages: AgentMessage[], blockImages: boolean): Message[] {\n\tconst converted = convertToLlm(messages);\n\tif (!blockImages) return converted;\n\treturn converted.map((message) => {\n\t\tif (message.role !== \"user\" && message.role !== \"toolResult\") return message;\n\t\tif (!Array.isArray(message.content) || !message.content.some((part) => part.type === \"image\")) return message;\n\t\tconst content = message.content\n\t\t\t.map((part) => (part.type === \"image\" ? { type: \"text\" as const, text: \"Image reading is disabled.\" } : part))\n\t\t\t.filter(\n\t\t\t\t(part, i, all) =>\n\t\t\t\t\t!(\n\t\t\t\t\t\tpart.type === \"text\" &&\n\t\t\t\t\t\tpart.text === \"Image reading is disabled.\" &&\n\t\t\t\t\t\ti > 0 &&\n\t\t\t\t\t\tall[i - 1].type === \"text\" &&\n\t\t\t\t\t\t(all[i - 1] as { type: \"text\"; text: string }).text === part.text\n\t\t\t\t\t),\n\t\t\t);\n\t\treturn { ...message, content };\n\t});\n}\n\ninterface PreparedSource {\n\tmessages: AgentMessage[];\n\trunner: ExtensionRunner | undefined;\n}\n\n/**\n * Records the actual pre-provider message prefix, after context hooks and image policy.\n * A snapshot can reuse it and convert only newly settled messages. In particular, a\n * time-dependent context hook is not rerun over an already prepared cache prefix.\n */\nexport class ContextSnapshotCapture {\n\tprivate readonly settings: SettingsManager;\n\tprivate readonly runnerRef: { current?: ExtensionRunner };\n\tprivate readonly pending = new WeakMap<AgentMessage[], PreparedSource>();\n\tprivate prepared: { source: PreparedSource; messages: Message[]; blockImages: boolean } | undefined;\n\n\tconstructor(settings: SettingsManager, runnerRef: { current?: ExtensionRunner }) {\n\t\tthis.settings = settings;\n\t\tthis.runnerRef = runnerRef;\n\t}\n\n\ttransformContext = async (messages: AgentMessage[]): Promise<AgentMessage[]> => {\n\t\tconst runner = this.runnerRef.current;\n\t\tconst source = { messages: structuredClone(messages), runner };\n\t\tconst transformed = runner ? await runner.emitContext(messages) : messages;\n\t\tthis.pending.set(transformed, source);\n\t\treturn transformed;\n\t};\n\n\tconvertToLlm = (messages: AgentMessage[]): Message[] => {\n\t\tconst blockImages = this.settings.getBlockImages();\n\t\tconst converted = convertWithImagePolicy(messages, blockImages);\n\t\tconst source = this.pending.get(messages);\n\t\tif (source) {\n\t\t\tthis.pending.delete(messages);\n\t\t\tthis.prepared = { source, messages: structuredClone(converted), blockImages };\n\t\t}\n\t\treturn converted;\n\t};\n\n\tcapture = async (messages: AgentMessage[]): Promise<Message[]> => {\n\t\tconst runner = this.runnerRef.current;\n\t\tconst blockImages = this.settings.getBlockImages();\n\t\tconst prepared = this.prepared;\n\t\tif (\n\t\t\tprepared &&\n\t\t\tprepared.source.runner === runner &&\n\t\t\tprepared.blockImages === blockImages &&\n\t\t\tisDeepStrictEqual(messages.slice(0, prepared.source.messages.length), prepared.source.messages)\n\t\t) {\n\t\t\treturn [\n\t\t\t\t...structuredClone(prepared.messages),\n\t\t\t\t...convertWithImagePolicy(messages.slice(prepared.source.messages.length), blockImages),\n\t\t\t];\n\t\t}\n\t\t// No request yet, or the branch/context policy changed. Prepare this detached\n\t\t// snapshot once; it never replaces the prefix recorded from the main request.\n\t\tconst transformed = runner ? await runner.emitContext(messages) : messages;\n\t\treturn structuredClone(convertWithImagePolicy(transformed, blockImages));\n\t};\n}\n"]}
1
+ {"version":3,"file":"context-snapshot.js","sourceRoot":"","sources":["../../src/core/context-snapshot.ts"],"names":[],"mappings":"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","sourcesContent":["import { isDeepStrictEqual } from \"node:util\";\nimport type { Agent, AgentMessage, ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport type { Api, Message, Model, ModelsSimpleStreamOptions, Tool } from \"@earendil-works/pi-ai\";\nimport type { ExtensionRunner } from \"./extensions/runner.ts\";\nimport { convertToLlm } from \"./messages.ts\";\nimport type { SettingsManager } from \"./settings-manager.ts\";\n\n/** Detached model input and request configuration. Contains no tool executors or session writer. */\nexport interface ContextSnapshot {\n\tcapturedAt: number;\n\tsessionId: string;\n\tleafId: string | null;\n\tmodel: Model<Api>;\n\tthinkingLevel: ThinkingLevel;\n\t/**\n\t * The prompt replayed from the prepared transcript, which is the text the provider received.\n\t * Before the first request it is the session's current prompt, which a consumer's Agent\n\t * declares itself when `messages` carry no system message.\n\t */\n\tsystemPrompt: string;\n\tmessages: Message[];\n\ttools: Tool[];\n\t/** Includes provider hooks and header transforms, but never the main run's abort signal. */\n\tstreamOptions: ModelsSimpleStreamOptions;\n}\n\nfunction convertWithImagePolicy(messages: AgentMessage[], blockImages: boolean): Message[] {\n\tconst converted = convertToLlm(messages);\n\tif (!blockImages) return converted;\n\treturn converted.map((message) => {\n\t\tif (message.role !== \"user\" && message.role !== \"toolResult\") return message;\n\t\tif (!Array.isArray(message.content) || !message.content.some((part) => part.type === \"image\")) return message;\n\t\tconst content = message.content\n\t\t\t.map((part) => (part.type === \"image\" ? { type: \"text\" as const, text: \"Image reading is disabled.\" } : part))\n\t\t\t.filter(\n\t\t\t\t(part, i, all) =>\n\t\t\t\t\t!(\n\t\t\t\t\t\tpart.type === \"text\" &&\n\t\t\t\t\t\tpart.text === \"Image reading is disabled.\" &&\n\t\t\t\t\t\ti > 0 &&\n\t\t\t\t\t\tall[i - 1].type === \"text\" &&\n\t\t\t\t\t\t(all[i - 1] as { type: \"text\"; text: string }).text === part.text\n\t\t\t\t\t),\n\t\t\t);\n\t\treturn { ...message, content };\n\t});\n}\n\ninterface PreparedSource {\n\tmessages: AgentMessage[];\n\trunner: ExtensionRunner | undefined;\n}\n\n/**\n * Records the actual pre-provider message prefix, after context hooks, the session's request\n * projections, and image policy. A snapshot can reuse it and convert only newly settled\n * messages. In particular, a time-dependent context hook is not rerun over an already\n * prepared cache prefix.\n */\nexport class ContextSnapshotCapture {\n\tprivate readonly settings: SettingsManager;\n\tprivate readonly runnerRef: { current?: ExtensionRunner };\n\tprivate readonly pending = new WeakMap<AgentMessage[], PreparedSource>();\n\tprivate prepared: { source: PreparedSource; messages: Message[]; blockImages: boolean } | undefined;\n\n\tconstructor(settings: SettingsManager, runnerRef: { current?: ExtensionRunner }) {\n\t\tthis.settings = settings;\n\t\tthis.runnerRef = runnerRef;\n\t}\n\n\t/**\n\t * Record the source of every request context. Install after all other `transformContext`\n\t * wrappers so the recorded prefix is exactly the array the request converts; a wrapper\n\t * installed later would return a different array and the prefix would never be reused.\n\t */\n\tinstall(agent: Agent): void {\n\t\tconst transform = agent.transformContext;\n\t\tagent.transformContext = async (messages, signal) => {\n\t\t\tconst runner = this.runnerRef.current;\n\t\t\tconst source = { messages: structuredClone(messages), runner };\n\t\t\tconst transformed = transform ? await transform(messages, signal) : messages;\n\t\t\tthis.pending.set(transformed, source);\n\t\t\treturn transformed;\n\t\t};\n\t\tagent.convertToLlm = this.convertToLlm;\n\t}\n\n\tconvertToLlm = (messages: AgentMessage[]): Message[] => {\n\t\tconst blockImages = this.settings.getBlockImages();\n\t\tconst converted = convertWithImagePolicy(messages, blockImages);\n\t\tconst source = this.pending.get(messages);\n\t\tif (source) {\n\t\t\tthis.pending.delete(messages);\n\t\t\tthis.prepared = { source, messages: structuredClone(converted), blockImages };\n\t\t}\n\t\treturn converted;\n\t};\n\n\tcapture = async (messages: AgentMessage[]): Promise<Message[]> => {\n\t\tconst runner = this.runnerRef.current;\n\t\tconst blockImages = this.settings.getBlockImages();\n\t\tconst prepared = this.prepared;\n\t\tif (\n\t\t\tprepared &&\n\t\t\tprepared.source.runner === runner &&\n\t\t\tprepared.blockImages === blockImages &&\n\t\t\tisDeepStrictEqual(messages.slice(0, prepared.source.messages.length), prepared.source.messages)\n\t\t) {\n\t\t\treturn [\n\t\t\t\t...structuredClone(prepared.messages),\n\t\t\t\t...convertWithImagePolicy(messages.slice(prepared.source.messages.length), blockImages),\n\t\t\t];\n\t\t}\n\t\t// No request yet, or the branch/context policy changed. Prepare this detached\n\t\t// snapshot once; it never replaces the prefix recorded from the main request.\n\t\tconst transformed = runner ? await runner.emitContext(messages) : messages;\n\t\treturn structuredClone(convertWithImagePolicy(transformed, blockImages));\n\t};\n}\n"]}
@@ -0,0 +1,22 @@
1
+ export interface CrashRecord {
2
+ timestamp: string;
3
+ version: string;
4
+ kind: "uncaught_exception" | "fatal_error";
5
+ message: string;
6
+ stack: string | null;
7
+ sessionFile: string | null;
8
+ cwd: string;
9
+ notified?: boolean;
10
+ }
11
+ export declare function readCrashLog(path?: string): CrashRecord[];
12
+ /** Best-effort persistence for callers that are already crashing. */
13
+ export declare function recordCrash(crash: {
14
+ kind: CrashRecord["kind"];
15
+ error: unknown;
16
+ sessionFile?: string;
17
+ cwd: string;
18
+ }, path?: string): CrashRecord | undefined;
19
+ /** Return the newest recent crash, marking pending records as announced. */
20
+ export declare function takeUnnotifiedCrash(path?: string, now?: number): CrashRecord | undefined;
21
+ export declare function clearCrashLog(path?: string): void;
22
+ //# sourceMappingURL=crash-log.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crash-log.d.ts","sourceRoot":"","sources":["../../src/core/crash-log.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,oBAAoB,GAAG,aAAa,CAAC;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB;AASD,wBAAgB,YAAY,CAAC,IAAI,SAAiB,GAAG,WAAW,EAAE,CAejE;AAOD,qEAAqE;AACrE,wBAAgB,WAAW,CAC1B,KAAK,EAAE;IAAE,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,EACvF,IAAI,SAAiB,GACnB,WAAW,GAAG,SAAS,CAiBzB;AAED,4EAA4E;AAC5E,wBAAgB,mBAAmB,CAAC,IAAI,SAAiB,EAAE,GAAG,SAAa,GAAG,WAAW,GAAG,SAAS,CAepG;AAED,wBAAgB,aAAa,CAAC,IAAI,SAAiB,GAAG,IAAI,CAMzD"}
@@ -0,0 +1,71 @@
1
+ import { mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
2
+ import { dirname, join } from "node:path";
3
+ import { getAgentDir, VERSION } from "../config.js";
4
+ const MAX_CRASH_RECORDS = 5;
5
+ const MAX_AGE = 7 * 24 * 60 * 60 * 1000;
6
+ function crashLogPath(agentDir = getAgentDir()) {
7
+ return join(agentDir, "crashes.json");
8
+ }
9
+ export function readCrashLog(path = crashLogPath()) {
10
+ try {
11
+ const records = JSON.parse(readFileSync(path, "utf8"));
12
+ return Array.isArray(records)
13
+ ? records.filter((record) => typeof record === "object" &&
14
+ record !== null &&
15
+ typeof record.timestamp === "string" &&
16
+ typeof record.message === "string")
17
+ : [];
18
+ }
19
+ catch {
20
+ return [];
21
+ }
22
+ }
23
+ function writeCrashLog(records, path) {
24
+ mkdirSync(dirname(path), { recursive: true });
25
+ writeFileSync(path, `${JSON.stringify(records, null, 2)}\n`);
26
+ }
27
+ /** Best-effort persistence for callers that are already crashing. */
28
+ export function recordCrash(crash, path = crashLogPath()) {
29
+ try {
30
+ const { error } = crash;
31
+ const record = {
32
+ timestamp: new Date().toISOString(),
33
+ version: VERSION,
34
+ kind: crash.kind,
35
+ message: error instanceof Error ? error.message || error.name : String(error),
36
+ stack: error instanceof Error && error.stack ? error.stack : null,
37
+ sessionFile: crash.sessionFile ?? null,
38
+ cwd: crash.cwd,
39
+ };
40
+ writeCrashLog([...readCrashLog(path), record].slice(-MAX_CRASH_RECORDS), path);
41
+ return record;
42
+ }
43
+ catch {
44
+ return undefined;
45
+ }
46
+ }
47
+ /** Return the newest recent crash, marking pending records as announced. */
48
+ export function takeUnnotifiedCrash(path = crashLogPath(), now = Date.now()) {
49
+ const records = readCrashLog(path);
50
+ const crash = [...records]
51
+ .reverse()
52
+ .find((record) => !record.notified && now - Date.parse(record.timestamp) <= MAX_AGE);
53
+ if (!crash)
54
+ return undefined;
55
+ try {
56
+ writeCrashLog(records.map((record) => (record.notified ? record : { ...record, notified: true })), path);
57
+ }
58
+ catch {
59
+ // Showing the notice again is harmless.
60
+ }
61
+ return crash;
62
+ }
63
+ export function clearCrashLog(path = crashLogPath()) {
64
+ try {
65
+ rmSync(path, { force: true });
66
+ }
67
+ catch {
68
+ // The records can be attached again if cleanup fails.
69
+ }
70
+ }
71
+ //# sourceMappingURL=crash-log.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crash-log.js","sourceRoot":"","sources":["../../src/core/crash-log.ts"],"names":[],"mappings":"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","sourcesContent":["import { mkdirSync, readFileSync, rmSync, writeFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { getAgentDir, VERSION } from \"../config.ts\";\n\nexport interface CrashRecord {\n\ttimestamp: string;\n\tversion: string;\n\tkind: \"uncaught_exception\" | \"fatal_error\";\n\tmessage: string;\n\tstack: string | null;\n\tsessionFile: string | null;\n\tcwd: string;\n\tnotified?: boolean;\n}\n\nconst MAX_CRASH_RECORDS = 5;\nconst MAX_AGE = 7 * 24 * 60 * 60 * 1000;\n\nfunction crashLogPath(agentDir = getAgentDir()): string {\n\treturn join(agentDir, \"crashes.json\");\n}\n\nexport function readCrashLog(path = crashLogPath()): CrashRecord[] {\n\ttry {\n\t\tconst records: unknown = JSON.parse(readFileSync(path, \"utf8\"));\n\t\treturn Array.isArray(records)\n\t\t\t? records.filter(\n\t\t\t\t\t(record): record is CrashRecord =>\n\t\t\t\t\t\ttypeof record === \"object\" &&\n\t\t\t\t\t\trecord !== null &&\n\t\t\t\t\t\ttypeof (record as CrashRecord).timestamp === \"string\" &&\n\t\t\t\t\t\ttypeof (record as CrashRecord).message === \"string\",\n\t\t\t\t)\n\t\t\t: [];\n\t} catch {\n\t\treturn [];\n\t}\n}\n\nfunction writeCrashLog(records: readonly CrashRecord[], path: string): void {\n\tmkdirSync(dirname(path), { recursive: true });\n\twriteFileSync(path, `${JSON.stringify(records, null, 2)}\\n`);\n}\n\n/** Best-effort persistence for callers that are already crashing. */\nexport function recordCrash(\n\tcrash: { kind: CrashRecord[\"kind\"]; error: unknown; sessionFile?: string; cwd: string },\n\tpath = crashLogPath(),\n): CrashRecord | undefined {\n\ttry {\n\t\tconst { error } = crash;\n\t\tconst record: CrashRecord = {\n\t\t\ttimestamp: new Date().toISOString(),\n\t\t\tversion: VERSION,\n\t\t\tkind: crash.kind,\n\t\t\tmessage: error instanceof Error ? error.message || error.name : String(error),\n\t\t\tstack: error instanceof Error && error.stack ? error.stack : null,\n\t\t\tsessionFile: crash.sessionFile ?? null,\n\t\t\tcwd: crash.cwd,\n\t\t};\n\t\twriteCrashLog([...readCrashLog(path), record].slice(-MAX_CRASH_RECORDS), path);\n\t\treturn record;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\n/** Return the newest recent crash, marking pending records as announced. */\nexport function takeUnnotifiedCrash(path = crashLogPath(), now = Date.now()): CrashRecord | undefined {\n\tconst records = readCrashLog(path);\n\tconst crash = [...records]\n\t\t.reverse()\n\t\t.find((record) => !record.notified && now - Date.parse(record.timestamp) <= MAX_AGE);\n\tif (!crash) return undefined;\n\ttry {\n\t\twriteCrashLog(\n\t\t\trecords.map((record) => (record.notified ? record : { ...record, notified: true })),\n\t\t\tpath,\n\t\t);\n\t} catch {\n\t\t// Showing the notice again is harmless.\n\t}\n\treturn crash;\n}\n\nexport function clearCrashLog(path = crashLogPath()): void {\n\ttry {\n\t\trmSync(path, { force: true });\n\t} catch {\n\t\t// The records can be attached again if cleanup fails.\n\t}\n}\n"]}
@@ -1,6 +1,2 @@
1
1
  export declare function areExperimentalFeaturesEnabled(): boolean;
2
- export declare function getExperimentalToolSampling(): {
3
- readonly type: "json_schema";
4
- readonly strict: "prefer";
5
- } | undefined;
6
2
  //# sourceMappingURL=experimental.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"experimental.d.ts","sourceRoot":"","sources":["../../src/core/experimental.ts"],"names":[],"mappings":"AAEA,wBAAgB,8BAA8B,IAAI,OAAO,CAExD;AAED,wBAAgB,2BAA2B;;;cAE1C"}
1
+ {"version":3,"file":"experimental.d.ts","sourceRoot":"","sources":["../../src/core/experimental.ts"],"names":[],"mappings":"AAAA,wBAAgB,8BAA8B,IAAI,OAAO,CAExD"}
@@ -1,8 +1,4 @@
1
- const PREFER_STRICT_TOOL_SAMPLING = { type: "json_schema", strict: "prefer" };
2
1
  export function areExperimentalFeaturesEnabled() {
3
2
  return process.env.PI_EXPERIMENTAL === "1";
4
3
  }
5
- export function getExperimentalToolSampling() {
6
- return areExperimentalFeaturesEnabled() ? PREFER_STRICT_TOOL_SAMPLING : undefined;
7
- }
8
4
  //# sourceMappingURL=experimental.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"experimental.js","sourceRoot":"","sources":["../../src/core/experimental.ts"],"names":[],"mappings":"AAAA,MAAM,2BAA2B,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAW,CAAC;AAEvF,MAAM,UAAU,8BAA8B;IAC7C,OAAO,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,GAAG,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,2BAA2B;IAC1C,OAAO,8BAA8B,EAAE,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,SAAS,CAAC;AACnF,CAAC","sourcesContent":["const PREFER_STRICT_TOOL_SAMPLING = { type: \"json_schema\", strict: \"prefer\" } as const;\n\nexport function areExperimentalFeaturesEnabled(): boolean {\n\treturn process.env.PI_EXPERIMENTAL === \"1\";\n}\n\nexport function getExperimentalToolSampling() {\n\treturn areExperimentalFeaturesEnabled() ? PREFER_STRICT_TOOL_SAMPLING : undefined;\n}\n"]}
1
+ {"version":3,"file":"experimental.js","sourceRoot":"","sources":["../../src/core/experimental.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,8BAA8B;IAC7C,OAAO,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,GAAG,CAAC;AAC5C,CAAC","sourcesContent":["export function areExperimentalFeaturesEnabled(): boolean {\n\treturn process.env.PI_EXPERIMENTAL === \"1\";\n}\n"]}
@@ -7,7 +7,7 @@ export type { SourceInfo } from "../source-info.ts";
7
7
  export { createExtensionRuntime, discoverAndLoadExtensions, loadExtensionFromFactory, loadExtensions, } from "./loader.ts";
8
8
  export type { ExtensionErrorListener, ForkHandler, NavigateTreeHandler, NewSessionHandler, ShutdownHandler, SwitchSessionHandler, } from "./runner.ts";
9
9
  export { ExtensionRunner } from "./runner.ts";
10
- export type { AfterProviderResponseEvent, AgentEndEvent, AgentSettledEvent, AgentStartEvent, AgentToolResult, AgentToolUpdateCallback, AppendEntryHandler, AppKeybinding, AutocompleteProviderFactory, BashToolCallEvent, BashToolResultEvent, BeforeAgentStartEvent, BeforeAgentStartEventResult, BeforeProviderHeadersEvent, BeforeProviderRequestEvent, BeforeProviderRequestEventResult, BuildSystemPromptOptions, CompactOptions, ContextEvent, ContextEventResult, ContextSnapshot, ContextUsage, CustomToolCallEvent, CustomToolResultEvent, EditorFactory, EditorSubmitEvent, EditorSubmitHandler, EditToolCallEvent, EditToolResultEvent, EntryRenderer, EntryRenderOptions, ExecOptions, ExecResult, Extension, ExtensionActions, ExtensionAPI, ExtensionCommandContext, ExtensionCommandContextActions, ExtensionContext, ExtensionContextActions, ExtensionError, ExtensionEvent, ExtensionFactory, ExtensionFlag, ExtensionHandler, ExtensionMode, ExtensionRuntime, ExtensionShortcut, ExtensionUIContext, ExtensionUIDialogOptions, ExtensionWidgetOptions, FindToolCallEvent, FindToolResultEvent, GetActiveToolsHandler, GetAllToolsHandler, GetCommandsHandler, GetThinkingLevelHandler, GrepToolCallEvent, GrepToolResultEvent, InlineExtension, InputEvent, InputEventResult, InputSource, KeybindingsManager, LoadExtensionsResult, LsToolCallEvent, LsToolResultEvent, MarkdownTransformContext, MarkdownTransformer, MessageEndEvent, MessageRenderer, MessageRenderOptions, MessageStartEvent, MessageUpdateEvent, ModelSelectEvent, ModelSelectSource, PowerShellToolCallEvent, PowerShellToolResultEvent, ProjectTrustContext, ProjectTrustEvent, ProjectTrustEventDecision, ProjectTrustEventResult, ProjectTrustHandler, ProviderConfig, ProviderModelConfig, ReadToolCallEvent, ReadToolResultEvent, RegisteredCommand, RegisteredTool, ReplacedSessionContext, ResolvedCommand, ResourcesDiscoverEvent, ResourcesDiscoverResult, SendMessageHandler, SendUserMessageHandler, SessionBeforeCompactEvent, SessionBeforeCompactResult, SessionBeforeForkEvent, SessionBeforeForkResult, SessionBeforeSwitchEvent, SessionBeforeSwitchResult, SessionBeforeTreeEvent, SessionBeforeTreeResult, SessionCompactEvent, SessionCompactFailedEvent, SessionEvent, SessionInfoChangedEvent, SessionShutdownEvent, SessionStartEvent, SessionTreeEvent, SetActiveToolsHandler, SetLabelHandler, SetModelHandler, SetThinkingLevelHandler, TerminalInputHandler, TerminalInputOptions, ToolCallEvent, ToolCallEventResult, ToolDefinition, ToolExecutionEndEvent, ToolExecutionMode, ToolExecutionStartEvent, ToolExecutionUpdateEvent, ToolInfo, ToolRenderResultOptions, ToolResultEvent, ToolResultEventResult, TreePreparation, TurnEndEvent, TurnStartEvent, UIPromptEndEvent, UIPromptKind, UIPromptStartEvent, UserBashEvent, UserBashEventResult, WidgetPlacement, WorkingIndicatorOptions, WriteToolCallEvent, WriteToolResultEvent, } from "./types.ts";
10
+ export type { AfterProviderResponseEvent, AgentEndEvent, AgentSettledEvent, AgentStartEvent, AgentToolResult, AgentToolUpdateCallback, AppendEntryHandler, AppKeybinding, AutocompleteProviderFactory, BashToolCallEvent, BashToolResultEvent, BeforeAgentStartEvent, BeforeAgentStartEventResult, BeforeProviderHeadersEvent, BeforeProviderRequestEvent, BeforeProviderRequestEventResult, BuildSystemPromptOptions, CacheWarmingDecisionEvent, CacheWarmingDecisionEventResult, CompactOptions, ContextEvent, ContextEventResult, ContextSnapshot, ContextUsage, CustomToolCallEvent, CustomToolResultEvent, EditorFactory, EditorSubmitEvent, EditorSubmitHandler, EditToolCallEvent, EditToolResultEvent, EntryRenderer, EntryRenderOptions, ExecOptions, ExecResult, Extension, ExtensionActions, ExtensionAPI, ExtensionCommandContext, ExtensionCommandContextActions, ExtensionContext, ExtensionContextActions, ExtensionError, ExtensionEvent, ExtensionFactory, ExtensionFlag, ExtensionHandler, ExtensionMode, ExtensionRuntime, ExtensionShortcut, ExtensionUIContext, ExtensionUIDialogOptions, ExtensionWidgetOptions, FindToolCallEvent, FindToolResultEvent, GetActiveToolsHandler, GetAllToolsHandler, GetCommandsHandler, GetThinkingLevelHandler, GrepToolCallEvent, GrepToolResultEvent, InlineExtension, InputEvent, InputEventResult, InputSource, KeybindingsManager, LoadExtensionsResult, LsToolCallEvent, LsToolResultEvent, MarkdownTransformContext, MarkdownTransformer, MessageEndEvent, MessageEndEventResult, MessageRenderer, MessageRenderOptions, MessageStartEvent, MessageUpdateEvent, ModelSelectEvent, ModelSelectSource, NormalizedBuildSystemPromptOptions, PowerShellToolCallEvent, PowerShellToolResultEvent, ProjectTrustContext, ProjectTrustEvent, ProjectTrustEventDecision, ProjectTrustEventResult, ProjectTrustHandler, ProviderConfig, ProviderModelConfig, ReadToolCallEvent, ReadToolResultEvent, RegisteredCommand, RegisteredTool, ReplacedSessionContext, ResolvedCommand, ResourcesDiscoverEvent, ResourcesDiscoverResult, SendMessageHandler, SendUserMessageHandler, SessionBeforeCompactEvent, SessionBeforeCompactResult, SessionBeforeForkEvent, SessionBeforeForkResult, SessionBeforeSwitchEvent, SessionBeforeSwitchResult, SessionBeforeTreeEvent, SessionBeforeTreeResult, SessionCompactEvent, SessionCompactFailedEvent, SessionEvent, SessionInfoChangedEvent, SessionShutdownEvent, SessionStartEvent, SessionTreeEvent, SetActiveToolsHandler, SetLabelHandler, SetModelHandler, SetThinkingLevelHandler, TerminalInputHandler, TerminalInputOptions, ThinkingLevelSelectEvent, ToolCallEvent, ToolCallEventResult, ToolDefinition, ToolExecutionEndEvent, ToolExecutionMode, ToolExecutionStartEvent, ToolExecutionUpdateEvent, ToolInfo, ToolRenderResultOptions, ToolResultEvent, ToolResultEventResult, TreePreparation, TurnEndEvent, TurnStartEvent, UIPromptEndEvent, UIPromptKind, UIPromptStartEvent, UserBashEvent, UserBashEventResult, WidgetPlacement, WorkingIndicatorOptions, WriteToolCallEvent, WriteToolResultEvent, } from "./types.ts";
11
11
  export { defineTool, isBashToolResult, isEditToolResult, isFindToolResult, isGrepToolResult, isLsToolResult, isPowerShellToolResult, isReadToolResult, isStaleExtensionContextError, isToolCallEventType, isWriteToolResult, STALE_EXTENSION_CONTEXT_MESSAGE, } from "./types.ts";
12
12
  export { wrapRegisteredTool, wrapRegisteredTools } from "./wrapper.ts";
13
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/extensions/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/extensions/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/extensions/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAmBH,OAAO,EACN,sBAAsB,EACtB,yBAAyB,EACzB,wBAAwB,EACxB,cAAc,GACd,MAAM,aAAa,CAAC;AASrB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAkK9C,cAAc;AACd,OAAO,EACN,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,sBAAsB,EACtB,gBAAgB,EAChB,4BAA4B,EAC5B,mBAAmB,EACnB,iBAAiB,EACjB,+BAA+B,GAC/B,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC","sourcesContent":["/**\n * Extension system for lifecycle events and custom tools.\n */\n\nexport type {\n\tBackgroundCompletion,\n\tBackgroundContext,\n\tBackgroundControl,\n\tBackgroundExecution,\n\tBackgroundKind,\n\tBackgroundMode,\n\tBackgroundProjection,\n\tBackgroundRead,\n\tBackgroundStatus,\n\tBackgroundTask,\n\tBackgroundTerminalStatus,\n\tBackgroundToolOutcome,\n\tBackgroundWorker,\n} from \"../background/types.ts\";\nexport type { SlashCommandInfo, SlashCommandSource } from \"../slash-commands.ts\";\nexport type { SourceInfo } from \"../source-info.ts\";\nexport {\n\tcreateExtensionRuntime,\n\tdiscoverAndLoadExtensions,\n\tloadExtensionFromFactory,\n\tloadExtensions,\n} from \"./loader.ts\";\nexport type {\n\tExtensionErrorListener,\n\tForkHandler,\n\tNavigateTreeHandler,\n\tNewSessionHandler,\n\tShutdownHandler,\n\tSwitchSessionHandler,\n} from \"./runner.ts\";\nexport { ExtensionRunner } from \"./runner.ts\";\nexport type {\n\tAfterProviderResponseEvent,\n\tAgentEndEvent,\n\tAgentSettledEvent,\n\tAgentStartEvent,\n\t// Re-exports\n\tAgentToolResult,\n\tAgentToolUpdateCallback,\n\tAppendEntryHandler,\n\t// App keybindings (for custom editors)\n\tAppKeybinding,\n\tAutocompleteProviderFactory,\n\t// Events - Tool (ToolCallEvent types)\n\tBashToolCallEvent,\n\tBashToolResultEvent,\n\tBeforeAgentStartEvent,\n\tBeforeAgentStartEventResult,\n\tBeforeProviderHeadersEvent,\n\tBeforeProviderRequestEvent,\n\tBeforeProviderRequestEventResult,\n\tBuildSystemPromptOptions,\n\tCompactOptions,\n\t// Events - Agent\n\tContextEvent,\n\t// Event Results\n\tContextEventResult,\n\tContextSnapshot,\n\tContextUsage,\n\tCustomToolCallEvent,\n\tCustomToolResultEvent,\n\tEditorFactory,\n\tEditorSubmitEvent,\n\tEditorSubmitHandler,\n\tEditToolCallEvent,\n\tEditToolResultEvent,\n\t// Message and Entry Rendering\n\tEntryRenderer,\n\tEntryRenderOptions,\n\tExecOptions,\n\tExecResult,\n\tExtension,\n\tExtensionActions,\n\t// API\n\tExtensionAPI,\n\tExtensionCommandContext,\n\tExtensionCommandContextActions,\n\tExtensionContext,\n\tExtensionContextActions,\n\t// Errors\n\tExtensionError,\n\tExtensionEvent,\n\tExtensionFactory,\n\tExtensionFlag,\n\tExtensionHandler,\n\tExtensionMode,\n\t// Runtime\n\tExtensionRuntime,\n\tExtensionShortcut,\n\tExtensionUIContext,\n\tExtensionUIDialogOptions,\n\tExtensionWidgetOptions,\n\tFindToolCallEvent,\n\tFindToolResultEvent,\n\tGetActiveToolsHandler,\n\tGetAllToolsHandler,\n\tGetCommandsHandler,\n\tGetThinkingLevelHandler,\n\tGrepToolCallEvent,\n\tGrepToolResultEvent,\n\tInlineExtension,\n\t// Events - Input\n\tInputEvent,\n\tInputEventResult,\n\tInputSource,\n\tKeybindingsManager,\n\tLoadExtensionsResult,\n\tLsToolCallEvent,\n\tLsToolResultEvent,\n\tMarkdownTransformContext,\n\tMarkdownTransformer,\n\t// Events - Message\n\tMessageEndEvent,\n\tMessageRenderer,\n\tMessageRenderOptions,\n\tMessageStartEvent,\n\tMessageUpdateEvent,\n\tModelSelectEvent,\n\tModelSelectSource,\n\tPowerShellToolCallEvent,\n\tPowerShellToolResultEvent,\n\tProjectTrustContext,\n\tProjectTrustEvent,\n\tProjectTrustEventDecision,\n\tProjectTrustEventResult,\n\tProjectTrustHandler,\n\t// Provider Registration\n\tProviderConfig,\n\tProviderModelConfig,\n\tReadToolCallEvent,\n\tReadToolResultEvent,\n\t// Commands\n\tRegisteredCommand,\n\tRegisteredTool,\n\tReplacedSessionContext,\n\tResolvedCommand,\n\t// Events - Resources\n\tResourcesDiscoverEvent,\n\tResourcesDiscoverResult,\n\tSendMessageHandler,\n\tSendUserMessageHandler,\n\tSessionBeforeCompactEvent,\n\tSessionBeforeCompactResult,\n\tSessionBeforeForkEvent,\n\tSessionBeforeForkResult,\n\tSessionBeforeSwitchEvent,\n\tSessionBeforeSwitchResult,\n\tSessionBeforeTreeEvent,\n\tSessionBeforeTreeResult,\n\tSessionCompactEvent,\n\tSessionCompactFailedEvent,\n\tSessionEvent,\n\tSessionInfoChangedEvent,\n\tSessionShutdownEvent,\n\t// Events - Session\n\tSessionStartEvent,\n\tSessionTreeEvent,\n\tSetActiveToolsHandler,\n\tSetLabelHandler,\n\tSetModelHandler,\n\tSetThinkingLevelHandler,\n\tTerminalInputHandler,\n\tTerminalInputOptions,\n\t// Events - Tool\n\tToolCallEvent,\n\tToolCallEventResult,\n\t// Tools\n\tToolDefinition,\n\t// Events - Tool Execution\n\tToolExecutionEndEvent,\n\t// Tool execution mode\n\tToolExecutionMode,\n\tToolExecutionStartEvent,\n\tToolExecutionUpdateEvent,\n\tToolInfo,\n\tToolRenderResultOptions,\n\tToolResultEvent,\n\tToolResultEventResult,\n\tTreePreparation,\n\tTurnEndEvent,\n\tTurnStartEvent,\n\tUIPromptEndEvent,\n\tUIPromptKind,\n\tUIPromptStartEvent,\n\t// Events - User Bash\n\tUserBashEvent,\n\tUserBashEventResult,\n\tWidgetPlacement,\n\tWorkingIndicatorOptions,\n\tWriteToolCallEvent,\n\tWriteToolResultEvent,\n} from \"./types.ts\";\n// Type guards\nexport {\n\tdefineTool,\n\tisBashToolResult,\n\tisEditToolResult,\n\tisFindToolResult,\n\tisGrepToolResult,\n\tisLsToolResult,\n\tisPowerShellToolResult,\n\tisReadToolResult,\n\tisStaleExtensionContextError,\n\tisToolCallEventType,\n\tisWriteToolResult,\n\tSTALE_EXTENSION_CONTEXT_MESSAGE,\n} from \"./types.ts\";\nexport { wrapRegisteredTool, wrapRegisteredTools } from \"./wrapper.ts\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/extensions/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAmBH,OAAO,EACN,sBAAsB,EACtB,yBAAyB,EACzB,wBAAwB,EACxB,cAAc,GACd,MAAM,aAAa,CAAC;AASrB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAwK9C,cAAc;AACd,OAAO,EACN,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,sBAAsB,EACtB,gBAAgB,EAChB,4BAA4B,EAC5B,mBAAmB,EACnB,iBAAiB,EACjB,+BAA+B,GAC/B,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC","sourcesContent":["/**\n * Extension system for lifecycle events and custom tools.\n */\n\nexport type {\n\tBackgroundCompletion,\n\tBackgroundContext,\n\tBackgroundControl,\n\tBackgroundExecution,\n\tBackgroundKind,\n\tBackgroundMode,\n\tBackgroundProjection,\n\tBackgroundRead,\n\tBackgroundStatus,\n\tBackgroundTask,\n\tBackgroundTerminalStatus,\n\tBackgroundToolOutcome,\n\tBackgroundWorker,\n} from \"../background/types.ts\";\nexport type { SlashCommandInfo, SlashCommandSource } from \"../slash-commands.ts\";\nexport type { SourceInfo } from \"../source-info.ts\";\nexport {\n\tcreateExtensionRuntime,\n\tdiscoverAndLoadExtensions,\n\tloadExtensionFromFactory,\n\tloadExtensions,\n} from \"./loader.ts\";\nexport type {\n\tExtensionErrorListener,\n\tForkHandler,\n\tNavigateTreeHandler,\n\tNewSessionHandler,\n\tShutdownHandler,\n\tSwitchSessionHandler,\n} from \"./runner.ts\";\nexport { ExtensionRunner } from \"./runner.ts\";\nexport type {\n\tAfterProviderResponseEvent,\n\tAgentEndEvent,\n\tAgentSettledEvent,\n\tAgentStartEvent,\n\t// Re-exports\n\tAgentToolResult,\n\tAgentToolUpdateCallback,\n\tAppendEntryHandler,\n\t// App keybindings (for custom editors)\n\tAppKeybinding,\n\tAutocompleteProviderFactory,\n\t// Events - Tool (ToolCallEvent types)\n\tBashToolCallEvent,\n\tBashToolResultEvent,\n\tBeforeAgentStartEvent,\n\tBeforeAgentStartEventResult,\n\tBeforeProviderHeadersEvent,\n\tBeforeProviderRequestEvent,\n\tBeforeProviderRequestEventResult,\n\tBuildSystemPromptOptions,\n\tCacheWarmingDecisionEvent,\n\tCacheWarmingDecisionEventResult,\n\t// Context\n\tCompactOptions,\n\t// Events - Agent\n\tContextEvent,\n\t// Event Results\n\tContextEventResult,\n\tContextSnapshot,\n\tContextUsage,\n\tCustomToolCallEvent,\n\tCustomToolResultEvent,\n\tEditorFactory,\n\tEditorSubmitEvent,\n\tEditorSubmitHandler,\n\tEditToolCallEvent,\n\tEditToolResultEvent,\n\t// Message and Entry Rendering\n\tEntryRenderer,\n\tEntryRenderOptions,\n\tExecOptions,\n\tExecResult,\n\tExtension,\n\tExtensionActions,\n\t// API\n\tExtensionAPI,\n\tExtensionCommandContext,\n\tExtensionCommandContextActions,\n\tExtensionContext,\n\tExtensionContextActions,\n\t// Errors\n\tExtensionError,\n\tExtensionEvent,\n\tExtensionFactory,\n\tExtensionFlag,\n\tExtensionHandler,\n\tExtensionMode,\n\t// Runtime\n\tExtensionRuntime,\n\tExtensionShortcut,\n\tExtensionUIContext,\n\tExtensionUIDialogOptions,\n\tExtensionWidgetOptions,\n\tFindToolCallEvent,\n\tFindToolResultEvent,\n\tGetActiveToolsHandler,\n\tGetAllToolsHandler,\n\tGetCommandsHandler,\n\tGetThinkingLevelHandler,\n\tGrepToolCallEvent,\n\tGrepToolResultEvent,\n\tInlineExtension,\n\t// Events - Input\n\tInputEvent,\n\tInputEventResult,\n\tInputSource,\n\tKeybindingsManager,\n\tLoadExtensionsResult,\n\tLsToolCallEvent,\n\tLsToolResultEvent,\n\tMarkdownTransformContext,\n\tMarkdownTransformer,\n\t// Events - Message\n\tMessageEndEvent,\n\tMessageEndEventResult,\n\tMessageRenderer,\n\tMessageRenderOptions,\n\tMessageStartEvent,\n\tMessageUpdateEvent,\n\tModelSelectEvent,\n\tModelSelectSource,\n\tNormalizedBuildSystemPromptOptions,\n\tPowerShellToolCallEvent,\n\tPowerShellToolResultEvent,\n\tProjectTrustContext,\n\tProjectTrustEvent,\n\tProjectTrustEventDecision,\n\tProjectTrustEventResult,\n\tProjectTrustHandler,\n\t// Provider Registration\n\tProviderConfig,\n\tProviderModelConfig,\n\tReadToolCallEvent,\n\tReadToolResultEvent,\n\t// Commands\n\tRegisteredCommand,\n\tRegisteredTool,\n\tReplacedSessionContext,\n\tResolvedCommand,\n\t// Events - Resources\n\tResourcesDiscoverEvent,\n\tResourcesDiscoverResult,\n\tSendMessageHandler,\n\tSendUserMessageHandler,\n\tSessionBeforeCompactEvent,\n\tSessionBeforeCompactResult,\n\tSessionBeforeForkEvent,\n\tSessionBeforeForkResult,\n\tSessionBeforeSwitchEvent,\n\tSessionBeforeSwitchResult,\n\tSessionBeforeTreeEvent,\n\tSessionBeforeTreeResult,\n\tSessionCompactEvent,\n\tSessionCompactFailedEvent,\n\tSessionEvent,\n\tSessionInfoChangedEvent,\n\tSessionShutdownEvent,\n\t// Events - Session\n\tSessionStartEvent,\n\tSessionTreeEvent,\n\tSetActiveToolsHandler,\n\tSetLabelHandler,\n\tSetModelHandler,\n\tSetThinkingLevelHandler,\n\tTerminalInputHandler,\n\tTerminalInputOptions,\n\tThinkingLevelSelectEvent,\n\t// Events - Tool\n\tToolCallEvent,\n\tToolCallEventResult,\n\t// Tools\n\tToolDefinition,\n\t// Events - Tool Execution\n\tToolExecutionEndEvent,\n\t// Tool execution mode\n\tToolExecutionMode,\n\tToolExecutionStartEvent,\n\tToolExecutionUpdateEvent,\n\tToolInfo,\n\tToolRenderResultOptions,\n\tToolResultEvent,\n\tToolResultEventResult,\n\tTreePreparation,\n\tTurnEndEvent,\n\tTurnStartEvent,\n\tUIPromptEndEvent,\n\tUIPromptKind,\n\tUIPromptStartEvent,\n\t// Events - User Bash\n\tUserBashEvent,\n\tUserBashEventResult,\n\tWidgetPlacement,\n\tWorkingIndicatorOptions,\n\tWriteToolCallEvent,\n\tWriteToolResultEvent,\n} from \"./types.ts\";\n// Type guards\nexport {\n\tdefineTool,\n\tisBashToolResult,\n\tisEditToolResult,\n\tisFindToolResult,\n\tisGrepToolResult,\n\tisLsToolResult,\n\tisPowerShellToolResult,\n\tisReadToolResult,\n\tisStaleExtensionContextError,\n\tisToolCallEventType,\n\tisWriteToolResult,\n\tSTALE_EXTENSION_CONTEXT_MESSAGE,\n} from \"./types.ts\";\nexport { wrapRegisteredTool, wrapRegisteredTools } from \"./wrapper.ts\";\n"]}
@@ -0,0 +1,2 @@
1
+ export { createJiti } from "jiti";
2
+ //# sourceMappingURL=jiti-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jiti-loader.d.ts","sourceRoot":"","sources":["../../../src/core/extensions/jiti-loader.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC"}
@@ -0,0 +1,4 @@
1
+ // Normal Node runtimes use jiti's lazy transform so Babel is loaded only when
2
+ // native loading fails and an extension needs transformation.
3
+ export { createJiti } from "jiti";
4
+ //# sourceMappingURL=jiti-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jiti-loader.js","sourceRoot":"","sources":["../../../src/core/extensions/jiti-loader.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,8DAA8D;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC","sourcesContent":["// Normal Node runtimes use jiti's lazy transform so Babel is loaded only when\n// native loading fails and an extension needs transformation.\nexport { createJiti } from \"jiti\";\n"]}
@@ -0,0 +1,2 @@
1
+ export { createJiti } from "jiti/static";
2
+ //# sourceMappingURL=jiti-static-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jiti-static-loader.d.ts","sourceRoot":"","sources":["../../../src/core/extensions/jiti-static-loader.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,4 @@
1
+ // Compiled binaries need jiti's static entry so Bun and SEA bundlers embed the
2
+ // Babel transform. The module itself remains lazy until an extension is loaded.
3
+ export { createJiti } from "jiti/static";
4
+ //# sourceMappingURL=jiti-static-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jiti-static-loader.js","sourceRoot":"","sources":["../../../src/core/extensions/jiti-static-loader.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,gFAAgF;AAChF,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC","sourcesContent":["// Compiled binaries need jiti's static entry so Bun and SEA bundlers embed the\n// Babel transform. The module itself remains lazy until an extension is loaded.\nexport { createJiti } from \"jiti/static\";\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../src/core/extensions/loader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAyBH,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAMhE,OAAO,EAEN,KAAK,SAAS,EAEd,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EAOzB,MAAM,YAAY,CAAC;AAqGpB,wBAAgB,mBAAmB,IAAI,IAAI,CAI1C;AAWD;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,gBAAgB,CAkEzD;AAwVD;;GAEG;AACH,wBAAsB,wBAAwB,CAC7C,OAAO,EAAE,gBAAgB,EACzB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,gBAAgB,EACzB,aAAa,SAAa,GACxB,OAAO,CAAC,SAAS,CAAC,CAGpB;AA6CD,wBAAsB,cAAc,CACnC,KAAK,EAAE,MAAM,EAAE,EACf,GAAG,EAAE,MAAM,EACX,QAAQ,CAAC,EAAE,QAAQ,EACnB,OAAO,CAAC,EAAE,gBAAgB,GACxB,OAAO,CAAC,oBAAoB,CAAC,CAE/B;AAED,wBAAsB,oBAAoB,CACzC,KAAK,EAAE,MAAM,EAAE,EACf,GAAG,EAAE,MAAM,EACX,QAAQ,CAAC,EAAE,QAAQ,EACnB,OAAO,CAAC,EAAE,gBAAgB,GACxB,OAAO,CAAC,oBAAoB,CAAC,CAE/B;AA2FD;;GAEG;AACH,wBAAsB,yBAAyB,CAC9C,eAAe,EAAE,MAAM,EAAE,EACzB,GAAG,EAAE,MAAM,EACX,QAAQ,GAAE,MAAsB,EAChC,QAAQ,CAAC,EAAE,QAAQ,GACjB,OAAO,CAAC,oBAAoB,CAAC,CA2C/B"}
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../src/core/extensions/loader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAMhE,OAAO,EAEN,KAAK,SAAS,EAEd,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EAOzB,MAAM,YAAY,CAAC;AA2FpB,wBAAgB,mBAAmB,IAAI,IAAI,CAI1C;AAWD;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,gBAAgB,CAkEzD;AAyWD;;GAEG;AACH,wBAAsB,wBAAwB,CAC7C,OAAO,EAAE,gBAAgB,EACzB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,gBAAgB,EACzB,aAAa,SAAa,GACxB,OAAO,CAAC,SAAS,CAAC,CAGpB;AA6CD,wBAAsB,cAAc,CACnC,KAAK,EAAE,MAAM,EAAE,EACf,GAAG,EAAE,MAAM,EACX,QAAQ,CAAC,EAAE,QAAQ,EACnB,OAAO,CAAC,EAAE,gBAAgB,GACxB,OAAO,CAAC,oBAAoB,CAAC,CAE/B;AAED,wBAAsB,oBAAoB,CACzC,KAAK,EAAE,MAAM,EAAE,EACf,GAAG,EAAE,MAAM,EACX,QAAQ,CAAC,EAAE,QAAQ,EACnB,OAAO,CAAC,EAAE,gBAAgB,GACxB,OAAO,CAAC,oBAAoB,CAAC,CAE/B;AA2FD;;GAEG;AACH,wBAAsB,yBAAyB,CAC9C,eAAe,EAAE,MAAM,EAAE,EACzB,GAAG,EAAE,MAAM,EACX,QAAQ,GAAE,MAAsB,EAChC,QAAQ,CAAC,EAAE,QAAQ,GACjB,OAAO,CAAC,oBAAoB,CAAC,CA2C/B"}