@code-yeongyu/senpi 2026.8.19 → 2026.8.20

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 (219) hide show
  1. package/CHANGELOG.md +117 -0
  2. package/dist/cli-main.js +4 -0
  3. package/dist/cli-main.js.map +1 -1
  4. package/dist/cli.js +31 -3
  5. package/dist/cli.js.map +1 -1
  6. package/dist/compile-cache.d.ts +2 -0
  7. package/dist/compile-cache.d.ts.map +1 -0
  8. package/dist/compile-cache.js +33 -0
  9. package/dist/compile-cache.js.map +1 -0
  10. package/dist/core/agent-session.d.ts +5 -0
  11. package/dist/core/agent-session.d.ts.map +1 -1
  12. package/dist/core/agent-session.js +94 -12
  13. package/dist/core/agent-session.js.map +1 -1
  14. package/dist/core/compaction/compaction.d.ts +6 -0
  15. package/dist/core/compaction/compaction.d.ts.map +1 -1
  16. package/dist/core/compaction/compaction.js +13 -0
  17. package/dist/core/compaction/compaction.js.map +1 -1
  18. package/dist/core/cursor-exec-bridge-session.d.ts +2 -1
  19. package/dist/core/cursor-exec-bridge-session.d.ts.map +1 -1
  20. package/dist/core/cursor-exec-bridge-session.js +5 -2
  21. package/dist/core/cursor-exec-bridge-session.js.map +1 -1
  22. package/dist/core/cursor-exec-bridge.d.ts +9 -1
  23. package/dist/core/cursor-exec-bridge.d.ts.map +1 -1
  24. package/dist/core/cursor-exec-bridge.js +26 -2
  25. package/dist/core/cursor-exec-bridge.js.map +1 -1
  26. package/dist/core/extensions/builtin/claude-sdk-oauth/custom-tools.d.ts +1 -1
  27. package/dist/core/extensions/builtin/claude-sdk-oauth/custom-tools.d.ts.map +1 -1
  28. package/dist/core/extensions/builtin/claude-sdk-oauth/custom-tools.js +5 -2
  29. package/dist/core/extensions/builtin/claude-sdk-oauth/custom-tools.js.map +1 -1
  30. package/dist/core/extensions/builtin/claude-sdk-oauth/sdk-boundary.d.ts +6 -4
  31. package/dist/core/extensions/builtin/claude-sdk-oauth/sdk-boundary.d.ts.map +1 -1
  32. package/dist/core/extensions/builtin/claude-sdk-oauth/sdk-boundary.js +24 -2
  33. package/dist/core/extensions/builtin/claude-sdk-oauth/sdk-boundary.js.map +1 -1
  34. package/dist/core/extensions/builtin/claude-sdk-oauth/sdk-boundary.lazy.d.ts +39 -0
  35. package/dist/core/extensions/builtin/claude-sdk-oauth/sdk-boundary.lazy.d.ts.map +1 -0
  36. package/dist/core/extensions/builtin/claude-sdk-oauth/sdk-boundary.lazy.js +31 -0
  37. package/dist/core/extensions/builtin/claude-sdk-oauth/sdk-boundary.lazy.js.map +1 -0
  38. package/dist/core/extensions/builtin/claude-sdk-oauth/session-continuity.d.ts +2 -0
  39. package/dist/core/extensions/builtin/claude-sdk-oauth/session-continuity.d.ts.map +1 -1
  40. package/dist/core/extensions/builtin/claude-sdk-oauth/session-continuity.js +35 -0
  41. package/dist/core/extensions/builtin/claude-sdk-oauth/session-continuity.js.map +1 -1
  42. package/dist/core/extensions/builtin/claude-sdk-oauth/session-observability.d.ts +1 -1
  43. package/dist/core/extensions/builtin/claude-sdk-oauth/session-observability.d.ts.map +1 -1
  44. package/dist/core/extensions/builtin/claude-sdk-oauth/session-observability.js +1 -0
  45. package/dist/core/extensions/builtin/claude-sdk-oauth/session-observability.js.map +1 -1
  46. package/dist/core/extensions/builtin/claude-sdk-oauth/session-reattach.d.ts +8 -0
  47. package/dist/core/extensions/builtin/claude-sdk-oauth/session-reattach.d.ts.map +1 -1
  48. package/dist/core/extensions/builtin/claude-sdk-oauth/session-reattach.js +4 -1
  49. package/dist/core/extensions/builtin/claude-sdk-oauth/session-reattach.js.map +1 -1
  50. package/dist/core/extensions/builtin/claude-sdk-oauth/session-turn-attempt.d.ts.map +1 -1
  51. package/dist/core/extensions/builtin/claude-sdk-oauth/session-turn-attempt.js +28 -1
  52. package/dist/core/extensions/builtin/claude-sdk-oauth/session-turn-attempt.js.map +1 -1
  53. package/dist/core/extensions/builtin/claude-sdk-oauth/stream.d.ts.map +1 -1
  54. package/dist/core/extensions/builtin/claude-sdk-oauth/stream.js +5 -2
  55. package/dist/core/extensions/builtin/claude-sdk-oauth/stream.js.map +1 -1
  56. package/dist/core/extensions/builtin/compaction/index.d.ts.map +1 -1
  57. package/dist/core/extensions/builtin/compaction/index.js +5 -0
  58. package/dist/core/extensions/builtin/compaction/index.js.map +1 -1
  59. package/dist/core/extensions/builtin/compaction/log.d.ts +1 -1
  60. package/dist/core/extensions/builtin/compaction/log.d.ts.map +1 -1
  61. package/dist/core/extensions/builtin/compaction/log.js +1 -0
  62. package/dist/core/extensions/builtin/compaction/log.js.map +1 -1
  63. package/dist/core/extensions/builtin/compaction/speculative.d.ts +1 -0
  64. package/dist/core/extensions/builtin/compaction/speculative.d.ts.map +1 -1
  65. package/dist/core/extensions/builtin/compaction/speculative.js +4 -0
  66. package/dist/core/extensions/builtin/compaction/speculative.js.map +1 -1
  67. package/dist/core/extensions/builtin/config-reload/index.d.ts.map +1 -1
  68. package/dist/core/extensions/builtin/config-reload/index.js +13 -10
  69. package/dist/core/extensions/builtin/config-reload/index.js.map +1 -1
  70. package/dist/core/extensions/builtin/config-reload/watch-engine.d.ts +8 -1
  71. package/dist/core/extensions/builtin/config-reload/watch-engine.d.ts.map +1 -1
  72. package/dist/core/extensions/builtin/config-reload/watch-engine.js +98 -18
  73. package/dist/core/extensions/builtin/config-reload/watch-engine.js.map +1 -1
  74. package/dist/core/extensions/builtin/config-reload/watch-event-source.d.ts +1 -1
  75. package/dist/core/extensions/builtin/config-reload/watch-event-source.d.ts.map +1 -1
  76. package/dist/core/extensions/builtin/config-reload/watch-event-source.js +7 -2
  77. package/dist/core/extensions/builtin/config-reload/watch-event-source.js.map +1 -1
  78. package/dist/core/extensions/builtin/goal/elapsed-ticker.d.ts.map +1 -1
  79. package/dist/core/extensions/builtin/goal/elapsed-ticker.js +15 -1
  80. package/dist/core/extensions/builtin/goal/elapsed-ticker.js.map +1 -1
  81. package/dist/core/extensions/builtin/goal/index.d.ts.map +1 -1
  82. package/dist/core/extensions/builtin/goal/index.js +7 -22
  83. package/dist/core/extensions/builtin/goal/index.js.map +1 -1
  84. package/dist/core/extensions/builtin/goal/stale-context.d.ts +9 -0
  85. package/dist/core/extensions/builtin/goal/stale-context.d.ts.map +1 -0
  86. package/dist/core/extensions/builtin/goal/stale-context.js +11 -0
  87. package/dist/core/extensions/builtin/goal/stale-context.js.map +1 -0
  88. package/dist/core/extensions/builtin/goal/wait-ticker.d.ts +8 -0
  89. package/dist/core/extensions/builtin/goal/wait-ticker.d.ts.map +1 -1
  90. package/dist/core/extensions/builtin/goal/wait-ticker.js +37 -3
  91. package/dist/core/extensions/builtin/goal/wait-ticker.js.map +1 -1
  92. package/dist/core/extensions/builtin/mcp/index.d.ts.map +1 -1
  93. package/dist/core/extensions/builtin/mcp/index.js +12 -1
  94. package/dist/core/extensions/builtin/mcp/index.js.map +1 -1
  95. package/dist/core/extensions/builtin/prompt-url-widget.d.ts.map +1 -1
  96. package/dist/core/extensions/builtin/prompt-url-widget.js +7 -15
  97. package/dist/core/extensions/builtin/prompt-url-widget.js.map +1 -1
  98. package/dist/core/extensions/builtin/rules/ui/rules-banner.d.ts.map +1 -1
  99. package/dist/core/extensions/builtin/rules/ui/rules-banner.js +21 -25
  100. package/dist/core/extensions/builtin/rules/ui/rules-banner.js.map +1 -1
  101. package/dist/core/extensions/builtin/todotools/index.d.ts.map +1 -1
  102. package/dist/core/extensions/builtin/todotools/index.js +20 -0
  103. package/dist/core/extensions/builtin/todotools/index.js.map +1 -1
  104. package/dist/core/extensions/builtin/todotools/native-todo-mirror.d.ts +3 -0
  105. package/dist/core/extensions/builtin/todotools/native-todo-mirror.d.ts.map +1 -0
  106. package/dist/core/extensions/builtin/todotools/native-todo-mirror.js +22 -0
  107. package/dist/core/extensions/builtin/todotools/native-todo-mirror.js.map +1 -0
  108. package/dist/core/extensions/builtin/webfetch/webfetch/content.lazy.d.ts +17 -0
  109. package/dist/core/extensions/builtin/webfetch/webfetch/content.lazy.d.ts.map +1 -0
  110. package/dist/core/extensions/builtin/webfetch/webfetch/content.lazy.js +22 -0
  111. package/dist/core/extensions/builtin/webfetch/webfetch/content.lazy.js.map +1 -0
  112. package/dist/core/extensions/builtin/webfetch/webfetch/tool.js +3 -3
  113. package/dist/core/extensions/builtin/webfetch/webfetch/tool.js.map +1 -1
  114. package/dist/core/messages.d.ts +9 -2
  115. package/dist/core/messages.d.ts.map +1 -1
  116. package/dist/core/messages.js +13 -18
  117. package/dist/core/messages.js.map +1 -1
  118. package/dist/core/retry-fallback/hint-policy.d.ts +3 -2
  119. package/dist/core/retry-fallback/hint-policy.d.ts.map +1 -1
  120. package/dist/core/retry-fallback/hint-policy.js +19 -8
  121. package/dist/core/retry-fallback/hint-policy.js.map +1 -1
  122. package/dist/core/retry-fallback/settings.js.map +1 -1
  123. package/dist/core/session-discovery.d.ts +16 -0
  124. package/dist/core/session-discovery.d.ts.map +1 -0
  125. package/dist/core/session-discovery.js +101 -0
  126. package/dist/core/session-discovery.js.map +1 -0
  127. package/dist/core/session-manager.d.ts +2 -1
  128. package/dist/core/session-manager.d.ts.map +1 -1
  129. package/dist/core/session-manager.js +4 -170
  130. package/dist/core/session-manager.js.map +1 -1
  131. package/dist/core/session-record.d.ts +14 -0
  132. package/dist/core/session-record.d.ts.map +1 -0
  133. package/dist/core/session-record.js +47 -0
  134. package/dist/core/session-record.js.map +1 -0
  135. package/dist/core/session-summary-cache.d.ts +40 -0
  136. package/dist/core/session-summary-cache.d.ts.map +1 -0
  137. package/dist/core/session-summary-cache.js +79 -0
  138. package/dist/core/session-summary-cache.js.map +1 -0
  139. package/dist/core/session-summary-lru.d.ts +54 -0
  140. package/dist/core/session-summary-lru.d.ts.map +1 -0
  141. package/dist/core/session-summary-lru.js +72 -0
  142. package/dist/core/session-summary-lru.js.map +1 -0
  143. package/dist/core/session-summary.d.ts +29 -0
  144. package/dist/core/session-summary.d.ts.map +1 -0
  145. package/dist/core/session-summary.js +90 -0
  146. package/dist/core/session-summary.js.map +1 -0
  147. package/dist/index.d.ts +1 -0
  148. package/dist/index.d.ts.map +1 -1
  149. package/dist/index.js +2 -0
  150. package/dist/index.js.map +1 -1
  151. package/dist/inspector-policy.d.ts +6 -0
  152. package/dist/inspector-policy.d.ts.map +1 -1
  153. package/dist/inspector-policy.js +6 -1
  154. package/dist/inspector-policy.js.map +1 -1
  155. package/dist/modes/interactive/components/earendil-announcement.d.ts.map +1 -1
  156. package/dist/modes/interactive/components/earendil-announcement.js +8 -8
  157. package/dist/modes/interactive/components/earendil-announcement.js.map +1 -1
  158. package/dist/modes/interactive/components/progressive-transcript-container.d.ts +72 -0
  159. package/dist/modes/interactive/components/progressive-transcript-container.d.ts.map +1 -0
  160. package/dist/modes/interactive/components/progressive-transcript-container.js +150 -0
  161. package/dist/modes/interactive/components/progressive-transcript-container.js.map +1 -0
  162. package/dist/modes/interactive/components/status-indicator.d.ts +1 -1
  163. package/dist/modes/interactive/components/status-indicator.d.ts.map +1 -1
  164. package/dist/modes/interactive/components/status-indicator.js +8 -2
  165. package/dist/modes/interactive/components/status-indicator.js.map +1 -1
  166. package/dist/modes/interactive/interactive-mode.d.ts +4 -0
  167. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  168. package/dist/modes/interactive/interactive-mode.js +127 -65
  169. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  170. package/dist/modes/interactive/split-trailing-assistant-text.d.ts +7 -0
  171. package/dist/modes/interactive/split-trailing-assistant-text.d.ts.map +1 -0
  172. package/dist/modes/interactive/split-trailing-assistant-text.js +19 -0
  173. package/dist/modes/interactive/split-trailing-assistant-text.js.map +1 -0
  174. package/dist/senpi +31 -3
  175. package/node_modules/@code-yeongyu/senpi-codemode/CHANGELOG.md +12 -0
  176. package/node_modules/@code-yeongyu/senpi-codemode/package.json +4 -4
  177. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.d.ts.map +1 -1
  178. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js +38 -3
  179. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js.map +1 -1
  180. package/node_modules/@earendil-works/pi-agent-core/dist/assistant-terminal-state.d.ts +8 -1
  181. package/node_modules/@earendil-works/pi-agent-core/dist/assistant-terminal-state.d.ts.map +1 -1
  182. package/node_modules/@earendil-works/pi-agent-core/dist/assistant-terminal-state.js +25 -1
  183. package/node_modules/@earendil-works/pi-agent-core/dist/assistant-terminal-state.js.map +1 -1
  184. package/node_modules/@earendil-works/pi-agent-core/package.json +3 -3
  185. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.d.ts +2 -0
  186. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.d.ts.map +1 -1
  187. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.js +284 -209
  188. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.js.map +1 -1
  189. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-conversation-rotation.d.ts +37 -0
  190. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-conversation-rotation.d.ts.map +1 -0
  191. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-conversation-rotation.js +110 -0
  192. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-conversation-rotation.js.map +1 -0
  193. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-task-args.d.ts +3 -0
  194. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-task-args.d.ts.map +1 -0
  195. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-task-args.js +17 -0
  196. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-task-args.js.map +1 -0
  197. package/node_modules/@earendil-works/pi-ai/dist/cursor/selection-descriptor.d.ts.map +1 -1
  198. package/node_modules/@earendil-works/pi-ai/dist/cursor/selection-descriptor.js +27 -11
  199. package/node_modules/@earendil-works/pi-ai/dist/cursor/selection-descriptor.js.map +1 -1
  200. package/node_modules/@earendil-works/pi-ai/dist/providers/data/.manifest.json +1 -1
  201. package/node_modules/@earendil-works/pi-ai/dist/providers/data/amazon-bedrock.json +1 -1
  202. package/node_modules/@earendil-works/pi-ai/dist/providers/data/baseten.json +1 -1
  203. package/node_modules/@earendil-works/pi-ai/dist/providers/data/huggingface.json +1 -1
  204. package/node_modules/@earendil-works/pi-ai/dist/providers/data/opencode-go.json +1 -1
  205. package/node_modules/@earendil-works/pi-ai/dist/providers/data/opencode.json +1 -1
  206. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openrouter.json +1 -1
  207. package/node_modules/@earendil-works/pi-ai/dist/providers/data/vercel-ai-gateway.json +1 -1
  208. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/index.d.ts.map +1 -1
  209. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/index.js +2 -0
  210. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/index.js.map +1 -1
  211. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.d.ts +30 -0
  212. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.d.ts.map +1 -1
  213. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.js +33 -0
  214. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.js.map +1 -1
  215. package/node_modules/@earendil-works/pi-ai/package.json +2 -2
  216. package/node_modules/@earendil-works/pi-pty/package.json +1 -1
  217. package/node_modules/@earendil-works/pi-telemetry/package.json +1 -1
  218. package/node_modules/@earendil-works/pi-tui/package.json +1 -1
  219. package/package.json +7 -7
@@ -0,0 +1,47 @@
1
+ /** Deserialize one JSONL line. Malformed lines are skipped, matching full-file session loading. */
2
+ export function parseEntryLine(line) {
3
+ if (!line.trim())
4
+ return null;
5
+ try {
6
+ return JSON.parse(line);
7
+ }
8
+ catch {
9
+ return null;
10
+ }
11
+ }
12
+ function isMessageWithContent(message) {
13
+ return (typeof message === "object" &&
14
+ message !== null &&
15
+ typeof message.role === "string" &&
16
+ "content" in message);
17
+ }
18
+ function extractTextContent(message) {
19
+ const content = message.content;
20
+ if (typeof content === "string")
21
+ return content;
22
+ return content
23
+ .filter((block) => block.type === "text")
24
+ .map((block) => block.text)
25
+ .join(" ");
26
+ }
27
+ /** The record's visible message, or null when it is not a user/assistant message. */
28
+ export function visibleMessage(entry) {
29
+ if (entry.type !== "message")
30
+ return null;
31
+ const message = entry.message;
32
+ if (!isMessageWithContent(message))
33
+ return null;
34
+ if (message.role !== "user" && message.role !== "assistant")
35
+ return null;
36
+ const messageTime = message.timestamp;
37
+ const entryTime = Date.parse(entry.timestamp);
38
+ const time = typeof messageTime === "number" ? messageTime : Number.isNaN(entryTime) ? undefined : entryTime;
39
+ return { text: extractTextContent(message), role: message.role, time };
40
+ }
41
+ /** The record's display name, or null when the record is not a session_info entry. */
42
+ export function sessionInfoName(entry) {
43
+ if (entry.type !== "session_info")
44
+ return null;
45
+ return entry.name?.trim() || undefined;
46
+ }
47
+ //# sourceMappingURL=session-record.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-record.js","sourceRoot":"","sources":["../../src/core/session-record.ts"],"names":[],"mappings":"AAUA,mGAAmG;AACnG,MAAM,UAAU,cAAc,CAAC,IAAY;IAC1C,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;QAAE,OAAO,IAAI,CAAC;IAC9B,IAAI,CAAC;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAc,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAC;IACb,CAAC;AACF,CAAC;AAED,SAAS,oBAAoB,CAAC,OAAgB;IAC7C,OAAO,CACN,OAAO,OAAO,KAAK,QAAQ;QAC3B,OAAO,KAAK,IAAI;QAChB,OAAQ,OAA8B,CAAC,IAAI,KAAK,QAAQ;QACxD,SAAS,IAAI,OAAO,CACpB,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAgB;IAC3C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAChC,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC;IAChD,OAAO,OAAO;SACZ,MAAM,CAAC,CAAC,KAAK,EAAwB,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC;SAC9D,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;SAC1B,IAAI,CAAC,GAAG,CAAC,CAAC;AACb,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,cAAc,CAAC,KAAgB;IAC9C,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAC1C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAC9B,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAChD,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW;QAAE,OAAO,IAAI,CAAC;IACzE,MAAM,WAAW,GAAI,OAAkC,CAAC,SAAS,CAAC;IAClE,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG,OAAO,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7G,OAAO,EAAE,IAAI,EAAE,kBAAkB,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;AACxE,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,eAAe,CAAC,KAAgB;IAC/C,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc;QAAE,OAAO,IAAI,CAAC;IAC/C,OAAO,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC;AACxC,CAAC","sourcesContent":["import type { Message, TextContent } from \"@earendil-works/pi-ai\";\nimport type { FileEntry } from \"./session-manager.ts\";\n\n/** A user/assistant message's visible text and activity time. */\nexport type VisibleMessage = {\n\treadonly text: string;\n\treadonly role: \"user\" | \"assistant\";\n\treadonly time: number | undefined;\n};\n\n/** Deserialize one JSONL line. Malformed lines are skipped, matching full-file session loading. */\nexport function parseEntryLine(line: string): FileEntry | null {\n\tif (!line.trim()) return null;\n\ttry {\n\t\treturn JSON.parse(line) as FileEntry;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nfunction isMessageWithContent(message: unknown): message is Message {\n\treturn (\n\t\ttypeof message === \"object\" &&\n\t\tmessage !== null &&\n\t\ttypeof (message as { role?: unknown }).role === \"string\" &&\n\t\t\"content\" in message\n\t);\n}\n\nfunction extractTextContent(message: Message): string {\n\tconst content = message.content;\n\tif (typeof content === \"string\") return content;\n\treturn content\n\t\t.filter((block): block is TextContent => block.type === \"text\")\n\t\t.map((block) => block.text)\n\t\t.join(\" \");\n}\n\n/** The record's visible message, or null when it is not a user/assistant message. */\nexport function visibleMessage(entry: FileEntry): VisibleMessage | null {\n\tif (entry.type !== \"message\") return null;\n\tconst message = entry.message;\n\tif (!isMessageWithContent(message)) return null;\n\tif (message.role !== \"user\" && message.role !== \"assistant\") return null;\n\tconst messageTime = (message as { timestamp?: number }).timestamp;\n\tconst entryTime = Date.parse(entry.timestamp);\n\tconst time = typeof messageTime === \"number\" ? messageTime : Number.isNaN(entryTime) ? undefined : entryTime;\n\treturn { text: extractTextContent(message), role: message.role, time };\n}\n\n/** The record's display name, or null when the record is not a session_info entry. */\nexport function sessionInfoName(entry: FileEntry): string | undefined | null {\n\tif (entry.type !== \"session_info\") return null;\n\treturn entry.name?.trim() || undefined;\n}\n"]}
@@ -0,0 +1,40 @@
1
+ import { type SessionSummary } from "./session-summary.ts";
2
+ /**
3
+ * Upper bound on cached session files, evicted least-recently-used rather than
4
+ * grown with the sessions directory.
5
+ */
6
+ export declare const SESSION_SUMMARY_CACHE_LIMIT = 4096;
7
+ /**
8
+ * Upper bound on retained transcript text across the whole cache.
9
+ *
10
+ * A cached summary's footprint is its `allMessagesText`, which grows with the
11
+ * session, so the entry ceiling alone bounds nothing: 4096 large sessions would
12
+ * pin gigabytes for the life of the process. 64 MiB is deliberately conservative
13
+ * — it holds a normal user's entire sessions directory (a heavy 2 MB session
14
+ * file yields well under 2 MB of visible text, so hundreds of them fit) while
15
+ * capping the worst case at a fraction of a Node heap. Exceeding it evicts the
16
+ * least recently listed sessions, which then cost one streaming re-read.
17
+ */
18
+ export declare const SESSION_SUMMARY_CACHE_MAX_TEXT_BYTES: number;
19
+ export type CachedSessionSummary = {
20
+ readonly summary: SessionSummary;
21
+ readonly mtime: Date;
22
+ };
23
+ /**
24
+ * Exact summary of one session file, reusing the cached summary when the file's
25
+ * size and mtime are unchanged since it was read.
26
+ *
27
+ * A cache hit deserializes nothing: the whole point is that listing an unchanged
28
+ * sessions directory costs one `stat` per file. A file that cannot be stat'ed or
29
+ * read drops its cache entry, so a truncated or replaced file is never served
30
+ * from stale bytes. A summary too large for the cache's byte budget is returned
31
+ * to the caller without being retained.
32
+ */
33
+ export declare function readCachedSessionSummary(filePath: string): Promise<CachedSessionSummary | null>;
34
+ /** Drop every cached summary. Test-only seam for cold-read assertions. */
35
+ export declare function clearSessionSummaryCache(): void;
36
+ /** Number of cached summaries. Test-only seam for eviction assertions. */
37
+ export declare function sessionSummaryCacheSize(): number;
38
+ /** Retained transcript bytes across the cache. Test-only seam for budget assertions. */
39
+ export declare function sessionSummaryCacheTextBytes(): number;
40
+ //# sourceMappingURL=session-summary-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-summary-cache.d.ts","sourceRoot":"","sources":["../../src/core/session-summary-cache.ts"],"names":[],"mappings":"AAEA,OAAO,EAAsB,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAG/E;;;GAGG;AACH,eAAO,MAAM,2BAA2B,OAAO,CAAC;AAEhD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,oCAAoC,QAAmB,CAAC;AAErE,MAAM,MAAM,oBAAoB,GAAG;IAClC,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC;CACrB,CAAC;AAYF;;;;;;;;;GASG;AACH,wBAAsB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CA4BrG;AAED,0EAA0E;AAC1E,wBAAgB,wBAAwB,IAAI,IAAI,CAE/C;AAED,0EAA0E;AAC1E,wBAAgB,uBAAuB,IAAI,MAAM,CAEhD;AAED,wFAAwF;AACxF,wBAAgB,4BAA4B,IAAI,MAAM,CAErD"}
@@ -0,0 +1,79 @@
1
+ import { stat } from "fs/promises";
2
+ import { resolve } from "path";
3
+ import { readSessionSummary } from "./session-summary.js";
4
+ import { SessionSummaryLru } from "./session-summary-lru.js";
5
+ /**
6
+ * Upper bound on cached session files, evicted least-recently-used rather than
7
+ * grown with the sessions directory.
8
+ */
9
+ export const SESSION_SUMMARY_CACHE_LIMIT = 4096;
10
+ /**
11
+ * Upper bound on retained transcript text across the whole cache.
12
+ *
13
+ * A cached summary's footprint is its `allMessagesText`, which grows with the
14
+ * session, so the entry ceiling alone bounds nothing: 4096 large sessions would
15
+ * pin gigabytes for the life of the process. 64 MiB is deliberately conservative
16
+ * — it holds a normal user's entire sessions directory (a heavy 2 MB session
17
+ * file yields well under 2 MB of visible text, so hundreds of them fit) while
18
+ * capping the worst case at a fraction of a Node heap. Exceeding it evicts the
19
+ * least recently listed sessions, which then cost one streaming re-read.
20
+ */
21
+ export const SESSION_SUMMARY_CACHE_MAX_TEXT_BYTES = 64 * 1024 * 1024;
22
+ /** Process-local summary cache, bounded by entry count and retained text bytes. */
23
+ const cache = new SessionSummaryLru({
24
+ maxEntries: SESSION_SUMMARY_CACHE_LIMIT,
25
+ maxTextBytes: SESSION_SUMMARY_CACHE_MAX_TEXT_BYTES,
26
+ });
27
+ function stampsMatch(left, right) {
28
+ return left.size === right.size && left.mtimeMs === right.mtimeMs;
29
+ }
30
+ /**
31
+ * Exact summary of one session file, reusing the cached summary when the file's
32
+ * size and mtime are unchanged since it was read.
33
+ *
34
+ * A cache hit deserializes nothing: the whole point is that listing an unchanged
35
+ * sessions directory costs one `stat` per file. A file that cannot be stat'ed or
36
+ * read drops its cache entry, so a truncated or replaced file is never served
37
+ * from stale bytes. A summary too large for the cache's byte budget is returned
38
+ * to the caller without being retained.
39
+ */
40
+ export async function readCachedSessionSummary(filePath) {
41
+ const key = resolve(filePath);
42
+ let stamp;
43
+ let mtime;
44
+ try {
45
+ const stats = await stat(filePath);
46
+ stamp = { size: stats.size, mtimeMs: stats.mtimeMs };
47
+ mtime = stats.mtime;
48
+ }
49
+ catch (error) {
50
+ if (!(error instanceof Error))
51
+ throw error;
52
+ cache.drop(key);
53
+ return null;
54
+ }
55
+ const cached = cache.get(key);
56
+ if (cached && stampsMatch(cached.stamp, stamp)) {
57
+ return { summary: cached.summary, mtime: cached.mtime };
58
+ }
59
+ const summary = await readSessionSummary(filePath);
60
+ if (!summary) {
61
+ cache.drop(key);
62
+ return null;
63
+ }
64
+ cache.retain(key, { stamp, summary, mtime });
65
+ return { summary, mtime };
66
+ }
67
+ /** Drop every cached summary. Test-only seam for cold-read assertions. */
68
+ export function clearSessionSummaryCache() {
69
+ cache.clear();
70
+ }
71
+ /** Number of cached summaries. Test-only seam for eviction assertions. */
72
+ export function sessionSummaryCacheSize() {
73
+ return cache.size;
74
+ }
75
+ /** Retained transcript bytes across the cache. Test-only seam for budget assertions. */
76
+ export function sessionSummaryCacheTextBytes() {
77
+ return cache.textBytes;
78
+ }
79
+ //# sourceMappingURL=session-summary-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-summary-cache.js","sourceRoot":"","sources":["../../src/core/session-summary-cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,kBAAkB,EAAuB,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAkB,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7E;;;GAGG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,IAAI,CAAC;AAEhD;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,oCAAoC,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAOrE,mFAAmF;AACnF,MAAM,KAAK,GAAG,IAAI,iBAAiB,CAAC;IACnC,UAAU,EAAE,2BAA2B;IACvC,YAAY,EAAE,oCAAoC;CAClD,CAAC,CAAC;AAEH,SAAS,WAAW,CAAC,IAAe,EAAE,KAAgB;IACrD,OAAO,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,CAAC;AACnE,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,QAAgB;IAC9D,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAE9B,IAAI,KAAgB,CAAC;IACrB,IAAI,KAAW,CAAC;IAChB,IAAI,CAAC;QACJ,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;QACnC,KAAK,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;QACrD,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IACrB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC;YAAE,MAAM,KAAK,CAAC;QAC3C,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChB,OAAO,IAAI,CAAC;IACb,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,MAAM,IAAI,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC;QAChD,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;IACzD,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IACnD,IAAI,CAAC,OAAO,EAAE,CAAC;QACd,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChB,OAAO,IAAI,CAAC;IACb,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7C,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAC3B,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,wBAAwB;IACvC,KAAK,CAAC,KAAK,EAAE,CAAC;AACf,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,uBAAuB;IACtC,OAAO,KAAK,CAAC,IAAI,CAAC;AACnB,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,4BAA4B;IAC3C,OAAO,KAAK,CAAC,SAAS,CAAC;AACxB,CAAC","sourcesContent":["import { stat } from \"fs/promises\";\nimport { resolve } from \"path\";\nimport { readSessionSummary, type SessionSummary } from \"./session-summary.ts\";\nimport { type FileStamp, SessionSummaryLru } from \"./session-summary-lru.ts\";\n\n/**\n * Upper bound on cached session files, evicted least-recently-used rather than\n * grown with the sessions directory.\n */\nexport const SESSION_SUMMARY_CACHE_LIMIT = 4096;\n\n/**\n * Upper bound on retained transcript text across the whole cache.\n *\n * A cached summary's footprint is its `allMessagesText`, which grows with the\n * session, so the entry ceiling alone bounds nothing: 4096 large sessions would\n * pin gigabytes for the life of the process. 64 MiB is deliberately conservative\n * — it holds a normal user's entire sessions directory (a heavy 2 MB session\n * file yields well under 2 MB of visible text, so hundreds of them fit) while\n * capping the worst case at a fraction of a Node heap. Exceeding it evicts the\n * least recently listed sessions, which then cost one streaming re-read.\n */\nexport const SESSION_SUMMARY_CACHE_MAX_TEXT_BYTES = 64 * 1024 * 1024;\n\nexport type CachedSessionSummary = {\n\treadonly summary: SessionSummary;\n\treadonly mtime: Date;\n};\n\n/** Process-local summary cache, bounded by entry count and retained text bytes. */\nconst cache = new SessionSummaryLru({\n\tmaxEntries: SESSION_SUMMARY_CACHE_LIMIT,\n\tmaxTextBytes: SESSION_SUMMARY_CACHE_MAX_TEXT_BYTES,\n});\n\nfunction stampsMatch(left: FileStamp, right: FileStamp): boolean {\n\treturn left.size === right.size && left.mtimeMs === right.mtimeMs;\n}\n\n/**\n * Exact summary of one session file, reusing the cached summary when the file's\n * size and mtime are unchanged since it was read.\n *\n * A cache hit deserializes nothing: the whole point is that listing an unchanged\n * sessions directory costs one `stat` per file. A file that cannot be stat'ed or\n * read drops its cache entry, so a truncated or replaced file is never served\n * from stale bytes. A summary too large for the cache's byte budget is returned\n * to the caller without being retained.\n */\nexport async function readCachedSessionSummary(filePath: string): Promise<CachedSessionSummary | null> {\n\tconst key = resolve(filePath);\n\n\tlet stamp: FileStamp;\n\tlet mtime: Date;\n\ttry {\n\t\tconst stats = await stat(filePath);\n\t\tstamp = { size: stats.size, mtimeMs: stats.mtimeMs };\n\t\tmtime = stats.mtime;\n\t} catch (error) {\n\t\tif (!(error instanceof Error)) throw error;\n\t\tcache.drop(key);\n\t\treturn null;\n\t}\n\n\tconst cached = cache.get(key);\n\tif (cached && stampsMatch(cached.stamp, stamp)) {\n\t\treturn { summary: cached.summary, mtime: cached.mtime };\n\t}\n\n\tconst summary = await readSessionSummary(filePath);\n\tif (!summary) {\n\t\tcache.drop(key);\n\t\treturn null;\n\t}\n\n\tcache.retain(key, { stamp, summary, mtime });\n\treturn { summary, mtime };\n}\n\n/** Drop every cached summary. Test-only seam for cold-read assertions. */\nexport function clearSessionSummaryCache(): void {\n\tcache.clear();\n}\n\n/** Number of cached summaries. Test-only seam for eviction assertions. */\nexport function sessionSummaryCacheSize(): number {\n\treturn cache.size;\n}\n\n/** Retained transcript bytes across the cache. Test-only seam for budget assertions. */\nexport function sessionSummaryCacheTextBytes(): number {\n\treturn cache.textBytes;\n}\n"]}
@@ -0,0 +1,54 @@
1
+ import type { SessionSummary } from "./session-summary.ts";
2
+ /** Identity of the exact bytes a cached summary was derived from. */
3
+ export type FileStamp = {
4
+ readonly size: number;
5
+ readonly mtimeMs: number;
6
+ };
7
+ /** One cached session summary plus the file identity it was derived from. */
8
+ export type SummaryEntry = {
9
+ readonly stamp: FileStamp;
10
+ readonly summary: SessionSummary;
11
+ /** The file's mtime at read time, used for the row's fallback modified date. */
12
+ readonly mtime: Date;
13
+ };
14
+ /** Both ceilings a retained set of summaries has to stay under. */
15
+ export type SummaryCacheBudget = {
16
+ readonly maxEntries: number;
17
+ readonly maxTextBytes: number;
18
+ };
19
+ /**
20
+ * Least-recently-used store of session summaries bounded by BOTH entry count and
21
+ * retained transcript bytes.
22
+ *
23
+ * An entry ceiling alone does not bound memory: a summary's footprint is
24
+ * dominated by `allMessagesText`, which grows with the transcript, so the same
25
+ * 4096 entries can hold kilobytes or gigabytes depending on whose sessions they
26
+ * are. `Map` preserves insertion order, so re-inserting on every hit makes the
27
+ * first key the least recently used one.
28
+ */
29
+ export declare class SessionSummaryLru {
30
+ private readonly entries;
31
+ private readonly budget;
32
+ private retainedTextBytes;
33
+ constructor(budget: SummaryCacheBudget);
34
+ get size(): number;
35
+ /** Retained transcript bytes across every cached summary. */
36
+ get textBytes(): number;
37
+ /** The cached entry for this key, promoted to most-recently-used. */
38
+ get(key: string): SummaryEntry | undefined;
39
+ drop(key: string): void;
40
+ /**
41
+ * Retain one summary, evicting least-recently-used entries until both ceilings
42
+ * hold.
43
+ *
44
+ * A summary whose own transcript exceeds the byte budget is never retained:
45
+ * caching it could only be paid for by evicting every other entry, and it
46
+ * would still have to be evicted on the next insert. The caller keeps the
47
+ * summary it asked for either way. Any previous entry under this key is
48
+ * dropped first, so an oversized re-read can never leave stale bytes behind.
49
+ */
50
+ retain(key: string, entry: SummaryEntry): void;
51
+ clear(): void;
52
+ private evictUntilWithinBudget;
53
+ }
54
+ //# sourceMappingURL=session-summary-lru.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-summary-lru.d.ts","sourceRoot":"","sources":["../../src/core/session-summary-lru.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,qEAAqE;AACrE,MAAM,MAAM,SAAS,GAAG;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,6EAA6E;AAC7E,MAAM,MAAM,YAAY,GAAG;IAC1B,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,gFAAgF;IAChF,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC;CACrB,CAAC;AAEF,mEAAmE;AACnE,MAAM,MAAM,kBAAkB,GAAG;IAChC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC9B,CAAC;AAOF;;;;;;;;;GASG;AACH,qBAAa,iBAAiB;IAC7B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoC;IAC5D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,iBAAiB,CAAK;gBAElB,MAAM,EAAE,kBAAkB;IAItC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,6DAA6D;IAC7D,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,qEAAqE;IACrE,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAQ1C,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAOvB;;;;;;;;;OASG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI;IAS9C,KAAK,IAAI,IAAI;IAKb,OAAO,CAAC,sBAAsB;CAO9B"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Least-recently-used store of session summaries bounded by BOTH entry count and
3
+ * retained transcript bytes.
4
+ *
5
+ * An entry ceiling alone does not bound memory: a summary's footprint is
6
+ * dominated by `allMessagesText`, which grows with the transcript, so the same
7
+ * 4096 entries can hold kilobytes or gigabytes depending on whose sessions they
8
+ * are. `Map` preserves insertion order, so re-inserting on every hit makes the
9
+ * first key the least recently used one.
10
+ */
11
+ export class SessionSummaryLru {
12
+ constructor(budget) {
13
+ this.entries = new Map();
14
+ this.retainedTextBytes = 0;
15
+ this.budget = budget;
16
+ }
17
+ get size() {
18
+ return this.entries.size;
19
+ }
20
+ /** Retained transcript bytes across every cached summary. */
21
+ get textBytes() {
22
+ return this.retainedTextBytes;
23
+ }
24
+ /** The cached entry for this key, promoted to most-recently-used. */
25
+ get(key) {
26
+ const retained = this.entries.get(key);
27
+ if (!retained)
28
+ return undefined;
29
+ this.entries.delete(key);
30
+ this.entries.set(key, retained);
31
+ return retained.entry;
32
+ }
33
+ drop(key) {
34
+ const retained = this.entries.get(key);
35
+ if (!retained)
36
+ return;
37
+ this.entries.delete(key);
38
+ this.retainedTextBytes -= retained.textBytes;
39
+ }
40
+ /**
41
+ * Retain one summary, evicting least-recently-used entries until both ceilings
42
+ * hold.
43
+ *
44
+ * A summary whose own transcript exceeds the byte budget is never retained:
45
+ * caching it could only be paid for by evicting every other entry, and it
46
+ * would still have to be evicted on the next insert. The caller keeps the
47
+ * summary it asked for either way. Any previous entry under this key is
48
+ * dropped first, so an oversized re-read can never leave stale bytes behind.
49
+ */
50
+ retain(key, entry) {
51
+ this.drop(key);
52
+ const textBytes = Buffer.byteLength(entry.summary.allMessagesText, "utf8");
53
+ if (textBytes > this.budget.maxTextBytes)
54
+ return;
55
+ this.entries.set(key, { entry, textBytes });
56
+ this.retainedTextBytes += textBytes;
57
+ this.evictUntilWithinBudget();
58
+ }
59
+ clear() {
60
+ this.entries.clear();
61
+ this.retainedTextBytes = 0;
62
+ }
63
+ evictUntilWithinBudget() {
64
+ while (this.entries.size > this.budget.maxEntries || this.retainedTextBytes > this.budget.maxTextBytes) {
65
+ const oldest = this.entries.keys().next();
66
+ if (oldest.done)
67
+ break;
68
+ this.drop(oldest.value);
69
+ }
70
+ }
71
+ }
72
+ //# sourceMappingURL=session-summary-lru.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-summary-lru.js","sourceRoot":"","sources":["../../src/core/session-summary-lru.ts"],"names":[],"mappings":"AA2BA;;;;;;;;;GASG;AACH,MAAM,OAAO,iBAAiB;IAK7B,YAAY,MAA0B;QAJrB,YAAO,GAAG,IAAI,GAAG,EAAyB,CAAC;QAEpD,sBAAiB,GAAG,CAAC,CAAC;QAG7B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACtB,CAAC;IAED,IAAI,IAAI;QACP,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC1B,CAAC;IAED,6DAA6D;IAC7D,IAAI,SAAS;QACZ,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAC/B,CAAC;IAED,qEAAqE;IACrE,GAAG,CAAC,GAAW;QACd,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,CAAC,QAAQ;YAAE,OAAO,SAAS,CAAC;QAChC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACzB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAChC,OAAO,QAAQ,CAAC,KAAK,CAAC;IACvB,CAAC;IAED,IAAI,CAAC,GAAW;QACf,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,CAAC,QAAQ;YAAE,OAAO;QACtB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACzB,IAAI,CAAC,iBAAiB,IAAI,QAAQ,CAAC,SAAS,CAAC;IAC9C,CAAC;IAED;;;;;;;;;OASG;IACH,MAAM,CAAC,GAAW,EAAE,KAAmB;QACtC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACf,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;QAC3E,IAAI,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY;YAAE,OAAO;QACjD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAC5C,IAAI,CAAC,iBAAiB,IAAI,SAAS,CAAC;QACpC,IAAI,CAAC,sBAAsB,EAAE,CAAC;IAC/B,CAAC;IAED,KAAK;QACJ,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;IAC5B,CAAC;IAEO,sBAAsB;QAC7B,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;YACxG,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;YAC1C,IAAI,MAAM,CAAC,IAAI;gBAAE,MAAM;YACvB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;IACF,CAAC;CACD","sourcesContent":["import type { SessionSummary } from \"./session-summary.ts\";\n\n/** Identity of the exact bytes a cached summary was derived from. */\nexport type FileStamp = {\n\treadonly size: number;\n\treadonly mtimeMs: number;\n};\n\n/** One cached session summary plus the file identity it was derived from. */\nexport type SummaryEntry = {\n\treadonly stamp: FileStamp;\n\treadonly summary: SessionSummary;\n\t/** The file's mtime at read time, used for the row's fallback modified date. */\n\treadonly mtime: Date;\n};\n\n/** Both ceilings a retained set of summaries has to stay under. */\nexport type SummaryCacheBudget = {\n\treadonly maxEntries: number;\n\treadonly maxTextBytes: number;\n};\n\ntype RetainedEntry = {\n\treadonly entry: SummaryEntry;\n\treadonly textBytes: number;\n};\n\n/**\n * Least-recently-used store of session summaries bounded by BOTH entry count and\n * retained transcript bytes.\n *\n * An entry ceiling alone does not bound memory: a summary's footprint is\n * dominated by `allMessagesText`, which grows with the transcript, so the same\n * 4096 entries can hold kilobytes or gigabytes depending on whose sessions they\n * are. `Map` preserves insertion order, so re-inserting on every hit makes the\n * first key the least recently used one.\n */\nexport class SessionSummaryLru {\n\tprivate readonly entries = new Map<string, RetainedEntry>();\n\tprivate readonly budget: SummaryCacheBudget;\n\tprivate retainedTextBytes = 0;\n\n\tconstructor(budget: SummaryCacheBudget) {\n\t\tthis.budget = budget;\n\t}\n\n\tget size(): number {\n\t\treturn this.entries.size;\n\t}\n\n\t/** Retained transcript bytes across every cached summary. */\n\tget textBytes(): number {\n\t\treturn this.retainedTextBytes;\n\t}\n\n\t/** The cached entry for this key, promoted to most-recently-used. */\n\tget(key: string): SummaryEntry | undefined {\n\t\tconst retained = this.entries.get(key);\n\t\tif (!retained) return undefined;\n\t\tthis.entries.delete(key);\n\t\tthis.entries.set(key, retained);\n\t\treturn retained.entry;\n\t}\n\n\tdrop(key: string): void {\n\t\tconst retained = this.entries.get(key);\n\t\tif (!retained) return;\n\t\tthis.entries.delete(key);\n\t\tthis.retainedTextBytes -= retained.textBytes;\n\t}\n\n\t/**\n\t * Retain one summary, evicting least-recently-used entries until both ceilings\n\t * hold.\n\t *\n\t * A summary whose own transcript exceeds the byte budget is never retained:\n\t * caching it could only be paid for by evicting every other entry, and it\n\t * would still have to be evicted on the next insert. The caller keeps the\n\t * summary it asked for either way. Any previous entry under this key is\n\t * dropped first, so an oversized re-read can never leave stale bytes behind.\n\t */\n\tretain(key: string, entry: SummaryEntry): void {\n\t\tthis.drop(key);\n\t\tconst textBytes = Buffer.byteLength(entry.summary.allMessagesText, \"utf8\");\n\t\tif (textBytes > this.budget.maxTextBytes) return;\n\t\tthis.entries.set(key, { entry, textBytes });\n\t\tthis.retainedTextBytes += textBytes;\n\t\tthis.evictUntilWithinBudget();\n\t}\n\n\tclear(): void {\n\t\tthis.entries.clear();\n\t\tthis.retainedTextBytes = 0;\n\t}\n\n\tprivate evictUntilWithinBudget(): void {\n\t\twhile (this.entries.size > this.budget.maxEntries || this.retainedTextBytes > this.budget.maxTextBytes) {\n\t\t\tconst oldest = this.entries.keys().next();\n\t\t\tif (oldest.done) break;\n\t\t\tthis.drop(oldest.value);\n\t\t}\n\t}\n}\n"]}
@@ -0,0 +1,29 @@
1
+ import type { SessionHeader } from "./session-manager.ts";
2
+ /**
3
+ * Everything a picker row needs from one session file, derived from every record
4
+ * in the file. Exact by construction: no window, no marker heuristic, so a first
5
+ * user message, a rename, or an out-of-order activity timestamp is found no
6
+ * matter how deep in the transcript it sits.
7
+ */
8
+ export type SessionSummary = {
9
+ readonly header: SessionHeader;
10
+ /** Latest `session_info` name anywhere in the file, including explicit clears. */
11
+ readonly name: string | undefined;
12
+ /** First visible user message text anywhere in the file. */
13
+ readonly firstUserMessage: string;
14
+ /** Count of records that parsed as `type: "message"`. */
15
+ readonly messageCount: number;
16
+ /** Max user/assistant activity time seen, regardless of record order. */
17
+ readonly lastActivityTime: number | undefined;
18
+ /** Full user/assistant transcript text in file order. */
19
+ readonly allMessagesText: string;
20
+ };
21
+ /**
22
+ * Stream one session file line by line and fold it into an exact summary.
23
+ *
24
+ * Memory stays bounded by readline's buffer plus the transcript text the summary
25
+ * contract requires; no full-file string is ever materialized. A file whose
26
+ * first record is not a session header, or that cannot be read, yields null.
27
+ */
28
+ export declare function readSessionSummary(filePath: string): Promise<SessionSummary | null>;
29
+ //# sourceMappingURL=session-summary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-summary.d.ts","sourceRoot":"","sources":["../../src/core/session-summary.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAG1D;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG;IAC5B,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,kFAAkF;IAClF,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,4DAA4D;IAC5D,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,yDAAyD;IACzD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,yEAAyE;IACzE,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9C,yDAAyD;IACzD,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CACjC,CAAC;AA4DF;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CA4BzF"}
@@ -0,0 +1,90 @@
1
+ import { createReadStream } from "fs";
2
+ import { createInterface } from "readline";
3
+ import { parseEntryLine, sessionInfoName, visibleMessage } from "./session-record.js";
4
+ function newAccumulator() {
5
+ return {
6
+ header: null,
7
+ name: undefined,
8
+ firstUserMessage: "",
9
+ messageCount: 0,
10
+ lastActivityTime: undefined,
11
+ texts: [],
12
+ };
13
+ }
14
+ /**
15
+ * Fold one JSONL line into the accumulator.
16
+ *
17
+ * Returns false when the file's first parsable record is not a session header,
18
+ * which means the file is not a session and the caller stops reading.
19
+ */
20
+ function accumulateLine(accumulator, line) {
21
+ const entry = parseEntryLine(line);
22
+ if (!entry)
23
+ return true;
24
+ if (!accumulator.header) {
25
+ if (entry.type !== "session" || typeof entry.id !== "string")
26
+ return false;
27
+ accumulator.header = entry;
28
+ return true;
29
+ }
30
+ const infoName = sessionInfoName(entry);
31
+ if (infoName !== null) {
32
+ accumulator.name = infoName;
33
+ return true;
34
+ }
35
+ if (entry.type !== "message")
36
+ return true;
37
+ accumulator.messageCount++;
38
+ const visible = visibleMessage(entry);
39
+ if (!visible)
40
+ return true;
41
+ if (typeof visible.time === "number") {
42
+ accumulator.lastActivityTime = Math.max(accumulator.lastActivityTime ?? 0, visible.time);
43
+ }
44
+ if (!visible.text)
45
+ return true;
46
+ accumulator.texts.push(visible.text);
47
+ if (!accumulator.firstUserMessage && visible.role === "user") {
48
+ accumulator.firstUserMessage = visible.text;
49
+ }
50
+ return true;
51
+ }
52
+ /**
53
+ * Stream one session file line by line and fold it into an exact summary.
54
+ *
55
+ * Memory stays bounded by readline's buffer plus the transcript text the summary
56
+ * contract requires; no full-file string is ever materialized. A file whose
57
+ * first record is not a session header, or that cannot be read, yields null.
58
+ */
59
+ export async function readSessionSummary(filePath) {
60
+ const accumulator = newAccumulator();
61
+ const stream = createReadStream(filePath, { encoding: "utf8" });
62
+ const lines = createInterface({ input: stream, crlfDelay: Number.POSITIVE_INFINITY });
63
+ try {
64
+ for await (const line of lines) {
65
+ if (!accumulateLine(accumulator, line))
66
+ return null;
67
+ }
68
+ }
69
+ catch (error) {
70
+ if (error instanceof Error)
71
+ return null;
72
+ throw error;
73
+ }
74
+ finally {
75
+ lines.close();
76
+ stream.destroy();
77
+ }
78
+ const header = accumulator.header;
79
+ if (!header)
80
+ return null;
81
+ return {
82
+ header,
83
+ name: accumulator.name,
84
+ firstUserMessage: accumulator.firstUserMessage,
85
+ messageCount: accumulator.messageCount,
86
+ lastActivityTime: accumulator.lastActivityTime,
87
+ allMessagesText: accumulator.texts.join(" "),
88
+ };
89
+ }
90
+ //# sourceMappingURL=session-summary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-summary.js","sourceRoot":"","sources":["../../src/core/session-summary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,IAAI,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AA+BtF,SAAS,cAAc;IACtB,OAAO;QACN,MAAM,EAAE,IAAI;QACZ,IAAI,EAAE,SAAS;QACf,gBAAgB,EAAE,EAAE;QACpB,YAAY,EAAE,CAAC;QACf,gBAAgB,EAAE,SAAS;QAC3B,KAAK,EAAE,EAAE;KACT,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAS,cAAc,CAAC,WAA+B,EAAE,IAAY;IACpE,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAExB,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;QACzB,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QAC3E,WAAW,CAAC,MAAM,GAAG,KAAK,CAAC;QAC3B,OAAO,IAAI,CAAC;IACb,CAAC;IAED,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACxC,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACvB,WAAW,CAAC,IAAI,GAAG,QAAQ,CAAC;QAC5B,OAAO,IAAI,CAAC;IACb,CAAC;IAED,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAC1C,WAAW,CAAC,YAAY,EAAE,CAAC;IAE3B,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IACtC,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtC,WAAW,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,gBAAgB,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1F,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IAC/B,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,IAAI,CAAC,WAAW,CAAC,gBAAgB,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC9D,WAAW,CAAC,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAC7C,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,QAAgB;IACxD,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,MAAM,MAAM,GAAG,gBAAgB,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IAChE,MAAM,KAAK,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAEtF,IAAI,CAAC;QACJ,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YAChC,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC;gBAAE,OAAO,IAAI,CAAC;QACrD,CAAC;IACF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,IAAI,KAAK,YAAY,KAAK;YAAE,OAAO,IAAI,CAAC;QACxC,MAAM,KAAK,CAAC;IACb,CAAC;YAAS,CAAC;QACV,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,MAAM,CAAC,OAAO,EAAE,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;IAClC,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEzB,OAAO;QACN,MAAM;QACN,IAAI,EAAE,WAAW,CAAC,IAAI;QACtB,gBAAgB,EAAE,WAAW,CAAC,gBAAgB;QAC9C,YAAY,EAAE,WAAW,CAAC,YAAY;QACtC,gBAAgB,EAAE,WAAW,CAAC,gBAAgB;QAC9C,eAAe,EAAE,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;KAC5C,CAAC;AACH,CAAC","sourcesContent":["import { createReadStream } from \"fs\";\nimport { createInterface } from \"readline\";\nimport type { SessionHeader } from \"./session-manager.ts\";\nimport { parseEntryLine, sessionInfoName, visibleMessage } from \"./session-record.ts\";\n\n/**\n * Everything a picker row needs from one session file, derived from every record\n * in the file. Exact by construction: no window, no marker heuristic, so a first\n * user message, a rename, or an out-of-order activity timestamp is found no\n * matter how deep in the transcript it sits.\n */\nexport type SessionSummary = {\n\treadonly header: SessionHeader;\n\t/** Latest `session_info` name anywhere in the file, including explicit clears. */\n\treadonly name: string | undefined;\n\t/** First visible user message text anywhere in the file. */\n\treadonly firstUserMessage: string;\n\t/** Count of records that parsed as `type: \"message\"`. */\n\treadonly messageCount: number;\n\t/** Max user/assistant activity time seen, regardless of record order. */\n\treadonly lastActivityTime: number | undefined;\n\t/** Full user/assistant transcript text in file order. */\n\treadonly allMessagesText: string;\n};\n\ntype SummaryAccumulator = {\n\theader: SessionHeader | null;\n\tname: string | undefined;\n\tfirstUserMessage: string;\n\tmessageCount: number;\n\tlastActivityTime: number | undefined;\n\treadonly texts: string[];\n};\n\nfunction newAccumulator(): SummaryAccumulator {\n\treturn {\n\t\theader: null,\n\t\tname: undefined,\n\t\tfirstUserMessage: \"\",\n\t\tmessageCount: 0,\n\t\tlastActivityTime: undefined,\n\t\ttexts: [],\n\t};\n}\n\n/**\n * Fold one JSONL line into the accumulator.\n *\n * Returns false when the file's first parsable record is not a session header,\n * which means the file is not a session and the caller stops reading.\n */\nfunction accumulateLine(accumulator: SummaryAccumulator, line: string): boolean {\n\tconst entry = parseEntryLine(line);\n\tif (!entry) return true;\n\n\tif (!accumulator.header) {\n\t\tif (entry.type !== \"session\" || typeof entry.id !== \"string\") return false;\n\t\taccumulator.header = entry;\n\t\treturn true;\n\t}\n\n\tconst infoName = sessionInfoName(entry);\n\tif (infoName !== null) {\n\t\taccumulator.name = infoName;\n\t\treturn true;\n\t}\n\n\tif (entry.type !== \"message\") return true;\n\taccumulator.messageCount++;\n\n\tconst visible = visibleMessage(entry);\n\tif (!visible) return true;\n\tif (typeof visible.time === \"number\") {\n\t\taccumulator.lastActivityTime = Math.max(accumulator.lastActivityTime ?? 0, visible.time);\n\t}\n\tif (!visible.text) return true;\n\taccumulator.texts.push(visible.text);\n\tif (!accumulator.firstUserMessage && visible.role === \"user\") {\n\t\taccumulator.firstUserMessage = visible.text;\n\t}\n\treturn true;\n}\n\n/**\n * Stream one session file line by line and fold it into an exact summary.\n *\n * Memory stays bounded by readline's buffer plus the transcript text the summary\n * contract requires; no full-file string is ever materialized. A file whose\n * first record is not a session header, or that cannot be read, yields null.\n */\nexport async function readSessionSummary(filePath: string): Promise<SessionSummary | null> {\n\tconst accumulator = newAccumulator();\n\tconst stream = createReadStream(filePath, { encoding: \"utf8\" });\n\tconst lines = createInterface({ input: stream, crlfDelay: Number.POSITIVE_INFINITY });\n\n\ttry {\n\t\tfor await (const line of lines) {\n\t\t\tif (!accumulateLine(accumulator, line)) return null;\n\t\t}\n\t} catch (error) {\n\t\tif (error instanceof Error) return null;\n\t\tthrow error;\n\t} finally {\n\t\tlines.close();\n\t\tstream.destroy();\n\t}\n\n\tconst header = accumulator.header;\n\tif (!header) return null;\n\n\treturn {\n\t\theader,\n\t\tname: accumulator.name,\n\t\tfirstUserMessage: accumulator.firstUserMessage,\n\t\tmessageCount: accumulator.messageCount,\n\t\tlastActivityTime: accumulator.lastActivityTime,\n\t\tallMessagesText: accumulator.texts.join(\" \"),\n\t};\n}\n"]}
package/dist/index.d.ts CHANGED
@@ -7,6 +7,7 @@ export { type BranchPreparation, type BranchSummaryResult, type CacheFriendlySum
7
7
  export { createEventBus, type EventBus, type EventBusController } from "./core/event-bus.ts";
8
8
  export type { AgentEndEvent, AgentSettledEvent, AgentStartEvent, AgentToolResult, AgentToolUpdateCallback, AppKeybinding, AutocompleteProviderFactory, BashToolCallEvent, BeforeAgentStartEvent, BeforeAgentStartEventResult, BeforeProviderHeadersEvent, BeforeProviderRequestEvent, BeforeProviderRequestEventResult, BuildSystemPromptOptions, CompactOptions, ContextEvent, ContextUsage, CustomToolCallEvent, EditToolCallEvent, EntryRenderer, EntryRenderOptions, ExecOptions, ExecResult, Extension, ExtensionActions, ExtensionAPI, ExtensionCommandContext, ExtensionCommandContextActions, ExtensionContext, ExtensionContextActions, ExtensionError, ExtensionEvent, ExtensionFactory, ExtensionFlag, ExtensionHandler, ExtensionRpcRequestHandler, ExtensionRuntime, ExtensionShortcut, ExtensionUIContext, ExtensionUIDialogOptions, ExtensionWidgetOptions, FilesystemOperation, FilesystemPolicy, FilesystemPolicyChecker, FilesystemPolicyDecision, FilesystemPolicyRequest, FindToolCallEvent, GrepToolCallEvent, InlineExtension, InputDispositionEvent, InputEvent, InputEventResult, InputSource, KeybindingsManager, LoadExtensionsResult, LsToolCallEvent, MarkdownTransformContext, MarkdownTransformer, McpServerDeclaration, MessageEndEvent, MessageRenderer, MessageRenderOptions, MessageStartEvent, MessageUpdateEvent, ProjectTrustContext, ProjectTrustEvent, ProjectTrustEventDecision, ProjectTrustEventResult, ProjectTrustHandler, ProviderConfig, ProviderModelConfig, ReadToolCallEvent, RegisteredCommand, RegisteredTool, ResolvedCommand, SessionBeforeCompactEvent, SessionBeforeForkEvent, SessionBeforeSwitchEvent, SessionBeforeTreeEvent, SessionCompactEvent, SessionInfoChangedEvent, SessionShutdownEvent, SessionStartEvent, SessionTreeEvent, SlashCommandInfo, SlashCommandSource, SourceInfo, TerminalInputHandler, ToolCallEvent, ToolCallEventResult, ToolDefinition, ToolExecutionEndEvent, ToolExecutionMode, ToolExecutionStartEvent, ToolExecutionUpdateEvent, ToolInfo, ToolRenderResultOptions, ToolResultEvent, TurnEndEvent, TurnStartEvent, UserBashEvent, UserBashEventResult, WidgetPlacement, WorkingIndicatorOptions, WriteToolCallEvent, } from "./core/extensions/index.ts";
9
9
  export { createExtensionRuntime, defineTool, discoverAndLoadExtensions, ExtensionRunner, isBashToolResult, isEditToolResult, isFindToolResult, isGrepToolResult, isLsToolResult, isReadToolResult, isToolCallEventType, isWriteToolResult, wrapRegisteredTool, wrapRegisteredTools, } from "./core/extensions/index.ts";
10
+ export { buildNoticeBox, type NoticeLine, type NoticeSpec, type NoticeTone, noticeEntryRenderer, noticeMessageRenderer, } from "./core/extensions/notice/index.ts";
10
11
  export type { ReadonlyFooterDataProvider } from "./core/footer-data-provider.ts";
11
12
  export { convertToLlm } from "./core/messages.ts";
12
13
  export { ModelRegistry } from "./core/model-registry.ts";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -9,6 +9,8 @@ export { readStoredCredential } from "./core/auth-storage.js";
9
9
  export { calculateContextTokens, collectEntriesForBranchSummary, compact, DEFAULT_COMPACTION_SETTINGS, estimateTokens, findCutPoint, findTurnStartIndex, generateBranchSummary, generateSummary, generateSummaryWithUsage, getLastAssistantUsage, prepareBranchEntries, serializeConversation, shouldCompact, } from "./core/compaction/index.js";
10
10
  export { createEventBus } from "./core/event-bus.js";
11
11
  export { createExtensionRuntime, defineTool, discoverAndLoadExtensions, ExtensionRunner, isBashToolResult, isEditToolResult, isFindToolResult, isGrepToolResult, isLsToolResult, isReadToolResult, isToolCallEventType, isWriteToolResult, wrapRegisteredTool, wrapRegisteredTools, } from "./core/extensions/index.js";
12
+ // Notice primitives
13
+ export { buildNoticeBox, noticeEntryRenderer, noticeMessageRenderer, } from "./core/extensions/notice/index.js";
12
14
  export { convertToLlm } from "./core/messages.js";
13
15
  export { ModelRegistry } from "./core/model-registry.js";
14
16
  export { resolveCliModel, resolveModelScopeWithDiagnostics, } from "./core/model-resolver.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["// Core session management\n\nexport { sanitizeTerminalLabel } from \"@earendil-works/pi-tui\";\nexport { type Args, parseArgs } from \"./cli/args.ts\";\n// Config paths\nexport {\n\tCONFIG_DIR_NAME,\n\tgetAgentDir,\n\tgetDocsPath,\n\tgetExamplesPath,\n\tgetPackageDir,\n\tgetReadmePath,\n\tVERSION,\n} from \"./config.ts\";\nexport {\n\tAgentSession,\n\ttype AgentSessionConfig,\n\ttype AgentSessionEvent,\n\ttype AgentSessionEventListener,\n\ttype ModelCycleResult,\n\ttype ParsedSkillBlock,\n\ttype PromptOptions,\n\tparseSkillBlock,\n\ttype SessionStats,\n} from \"./core/agent-session.ts\";\nexport { type OAuthCredential, readStoredCredential } from \"./core/auth-storage.ts\";\n// Compaction\nexport {\n\ttype BranchPreparation,\n\ttype BranchSummaryResult,\n\ttype CacheFriendlySummaryOptions,\n\ttype CollectEntriesResult,\n\ttype CompactionResult,\n\ttype CutPointResult,\n\tcalculateContextTokens,\n\tcollectEntriesForBranchSummary,\n\tcompact,\n\tDEFAULT_COMPACTION_SETTINGS,\n\testimateTokens,\n\ttype FileOperations,\n\tfindCutPoint,\n\tfindTurnStartIndex,\n\ttype GenerateBranchSummaryOptions,\n\tgenerateBranchSummary,\n\tgenerateSummary,\n\tgenerateSummaryWithUsage,\n\tgetLastAssistantUsage,\n\tprepareBranchEntries,\n\tserializeConversation,\n\tshouldCompact,\n} from \"./core/compaction/index.ts\";\nexport { createEventBus, type EventBus, type EventBusController } from \"./core/event-bus.ts\";\n// Extension system\nexport type {\n\tAgentEndEvent,\n\tAgentSettledEvent,\n\tAgentStartEvent,\n\tAgentToolResult,\n\tAgentToolUpdateCallback,\n\tAppKeybinding,\n\tAutocompleteProviderFactory,\n\tBashToolCallEvent,\n\tBeforeAgentStartEvent,\n\tBeforeAgentStartEventResult,\n\tBeforeProviderHeadersEvent,\n\tBeforeProviderRequestEvent,\n\tBeforeProviderRequestEventResult,\n\tBuildSystemPromptOptions,\n\tCompactOptions,\n\tContextEvent,\n\tContextUsage,\n\tCustomToolCallEvent,\n\tEditToolCallEvent,\n\tEntryRenderer,\n\tEntryRenderOptions,\n\tExecOptions,\n\tExecResult,\n\tExtension,\n\tExtensionActions,\n\tExtensionAPI,\n\tExtensionCommandContext,\n\tExtensionCommandContextActions,\n\tExtensionContext,\n\tExtensionContextActions,\n\tExtensionError,\n\tExtensionEvent,\n\tExtensionFactory,\n\tExtensionFlag,\n\tExtensionHandler,\n\tExtensionRpcRequestHandler,\n\tExtensionRuntime,\n\tExtensionShortcut,\n\tExtensionUIContext,\n\tExtensionUIDialogOptions,\n\tExtensionWidgetOptions,\n\tFilesystemOperation,\n\tFilesystemPolicy,\n\tFilesystemPolicyChecker,\n\tFilesystemPolicyDecision,\n\tFilesystemPolicyRequest,\n\tFindToolCallEvent,\n\tGrepToolCallEvent,\n\tInlineExtension,\n\tInputDispositionEvent,\n\tInputEvent,\n\tInputEventResult,\n\tInputSource,\n\tKeybindingsManager,\n\tLoadExtensionsResult,\n\tLsToolCallEvent,\n\tMarkdownTransformContext,\n\tMarkdownTransformer,\n\tMcpServerDeclaration,\n\tMessageEndEvent,\n\tMessageRenderer,\n\tMessageRenderOptions,\n\tMessageStartEvent,\n\tMessageUpdateEvent,\n\tProjectTrustContext,\n\tProjectTrustEvent,\n\tProjectTrustEventDecision,\n\tProjectTrustEventResult,\n\tProjectTrustHandler,\n\tProviderConfig,\n\tProviderModelConfig,\n\tReadToolCallEvent,\n\tRegisteredCommand,\n\tRegisteredTool,\n\tResolvedCommand,\n\tSessionBeforeCompactEvent,\n\tSessionBeforeForkEvent,\n\tSessionBeforeSwitchEvent,\n\tSessionBeforeTreeEvent,\n\tSessionCompactEvent,\n\tSessionInfoChangedEvent,\n\tSessionShutdownEvent,\n\tSessionStartEvent,\n\tSessionTreeEvent,\n\tSlashCommandInfo,\n\tSlashCommandSource,\n\tSourceInfo,\n\tTerminalInputHandler,\n\tToolCallEvent,\n\tToolCallEventResult,\n\tToolDefinition,\n\tToolExecutionEndEvent,\n\tToolExecutionMode,\n\tToolExecutionStartEvent,\n\tToolExecutionUpdateEvent,\n\tToolInfo,\n\tToolRenderResultOptions,\n\tToolResultEvent,\n\tTurnEndEvent,\n\tTurnStartEvent,\n\tUserBashEvent,\n\tUserBashEventResult,\n\tWidgetPlacement,\n\tWorkingIndicatorOptions,\n\tWriteToolCallEvent,\n} from \"./core/extensions/index.ts\";\nexport {\n\tcreateExtensionRuntime,\n\tdefineTool,\n\tdiscoverAndLoadExtensions,\n\tExtensionRunner,\n\tisBashToolResult,\n\tisEditToolResult,\n\tisFindToolResult,\n\tisGrepToolResult,\n\tisLsToolResult,\n\tisReadToolResult,\n\tisToolCallEventType,\n\tisWriteToolResult,\n\twrapRegisteredTool,\n\twrapRegisteredTools,\n} from \"./core/extensions/index.ts\";\n// Footer data provider (git branch + extension statuses - data not otherwise available to extensions)\nexport type { ReadonlyFooterDataProvider } from \"./core/footer-data-provider.ts\";\nexport { convertToLlm } from \"./core/messages.ts\";\nexport { ModelRegistry } from \"./core/model-registry.ts\";\nexport {\n\ttype ModelScopeDiagnostic,\n\ttype ResolveCliModelResult,\n\ttype ResolveModelScopeResult,\n\tresolveCliModel,\n\tresolveModelScopeWithDiagnostics,\n\ttype ScopedModel,\n} from \"./core/model-resolver.ts\";\nexport {\n\ttype CreateModelRuntimeOptions,\n\tCredentialSynchronizationError,\n\ttype CredentialSynchronizationOperation,\n\tModelRuntime,\n\ttype ModelRuntimeAuthOverrides,\n} from \"./core/model-runtime.ts\";\nexport type {\n\tPackageManager,\n\tPathMetadata,\n\tProgressCallback,\n\tProgressEvent,\n\tResolvedPaths,\n\tResolvedResource,\n} from \"./core/package-manager.ts\";\nexport { DefaultPackageManager } from \"./core/package-manager.ts\";\nexport type { ResourceCollision, ResourceDiagnostic, ResourceLoader } from \"./core/resource-loader.ts\";\nexport { DefaultResourceLoader, loadProjectContextFiles } from \"./core/resource-loader.ts\";\n// SDK for programmatic usage\nexport {\n\tAgentSessionRuntime,\n\ttype AgentSessionRuntimeDiagnostic,\n\ttype AgentSessionServices,\n\ttype CreateAgentSessionFromServicesOptions,\n\ttype CreateAgentSessionOptions,\n\ttype CreateAgentSessionResult,\n\ttype CreateAgentSessionRuntimeFactory,\n\ttype CreateAgentSessionRuntimeResult,\n\ttype CreateAgentSessionServicesOptions,\n\t// Factory\n\tcreateAgentSession,\n\tcreateAgentSessionFromServices,\n\tcreateAgentSessionRuntime,\n\tcreateAgentSessionServices,\n\tcreateBashTool,\n\t// Tool factories (for custom cwd)\n\tcreateCodingTools,\n\tcreateEditTool,\n\tcreateFindTool,\n\tcreateGrepTool,\n\tcreateLsTool,\n\tcreateReadOnlyTools,\n\tcreateReadTool,\n\tcreateWriteTool,\n\ttype PromptTemplate,\n} from \"./core/sdk.ts\";\nexport {\n\ttype BranchSummaryEntry,\n\tbuildContextEntries,\n\tbuildSessionContext,\n\ttype CompactionEntry,\n\tCURRENT_SESSION_VERSION,\n\ttype CustomEntry,\n\ttype CustomMessageEntry,\n\ttype FileEntry,\n\tgetLatestCompactionEntry,\n\ttype ModelChangeEntry,\n\tmigrateSessionEntries,\n\ttype NewSessionOptions,\n\tparseSessionEntries,\n\ttype SessionContext,\n\ttype SessionEntry,\n\ttype SessionEntryBase,\n\ttype SessionHeader,\n\ttype SessionInfo,\n\ttype SessionInfoEntry,\n\tSessionManager,\n\ttype SessionMessageEntry,\n\ttype SessionTreeNode,\n\tsessionEntryToContextMessages,\n\ttype ThinkingLevelChangeEntry,\n} from \"./core/session-manager.ts\";\nexport {\n\ttype CompactionSettings,\n\ttype DefaultProjectTrust,\n\ttype FullscreenExitOutput,\n\ttype ImageSettings,\n\ttype PackageSource,\n\ttype RetrySettings,\n\tSettingsManager,\n\ttype SettingsManagerCreateOptions,\n\ttype TuiMode,\n} from \"./core/settings-manager.ts\";\n// Skills\nexport {\n\tformatSkillsForPrompt,\n\ttype LoadSkillsFromDirOptions,\n\ttype LoadSkillsResult,\n\tloadSkills,\n\tloadSkillsFromDir,\n\ttype Skill,\n\ttype SkillFrontmatter,\n} from \"./core/skills.ts\";\nexport { createSyntheticSourceInfo } from \"./core/source-info.ts\";\nexport { type EditDiffResult, generateDiffString, generateUnifiedPatch } from \"./core/tools/edit-diff.ts\";\n// Tools\nexport {\n\ttype BashOperations,\n\ttype BashSpawnContext,\n\ttype BashSpawnHook,\n\ttype BashToolDetails,\n\ttype BashToolInput,\n\ttype BashToolOptions,\n\tcreateBashToolDefinition,\n\tcreateEditToolDefinition,\n\tcreateFindToolDefinition,\n\tcreateGrepToolDefinition,\n\tcreateLocalBashOperations,\n\tcreateLsToolDefinition,\n\tcreateReadToolDefinition,\n\tcreateWriteToolDefinition,\n\tDEFAULT_MAX_BYTES,\n\tDEFAULT_MAX_LINES,\n\ttype EditOperations,\n\ttype EditToolDetails,\n\ttype EditToolInput,\n\ttype EditToolOptions,\n\ttype FindOperations,\n\ttype FindToolDetails,\n\ttype FindToolInput,\n\ttype FindToolOptions,\n\tformatSize,\n\ttype GrepOperations,\n\ttype GrepToolDetails,\n\ttype GrepToolInput,\n\ttype GrepToolOptions,\n\ttype LsOperations,\n\ttype LsToolDetails,\n\ttype LsToolInput,\n\ttype LsToolOptions,\n\ttype ReadOperations,\n\ttype ReadToolDetails,\n\ttype ReadToolInput,\n\ttype ReadToolOptions,\n\ttype ToolsOptions,\n\ttype TruncationOptions,\n\ttype TruncationResult,\n\ttruncateHead,\n\ttruncateLine,\n\ttruncateTail,\n\ttype WriteOperations,\n\ttype WriteToolInput,\n\ttype WriteToolOptions,\n\twithFileMutationQueue,\n} from \"./core/tools/index.ts\";\nexport {\n\thasTrustRequiringProjectResources,\n\ttype ProjectTrustDecision,\n\tProjectTrustStore,\n\ttype ProjectTrustStoreEntry,\n\ttype ProjectTrustUpdate,\n} from \"./core/trust-manager.ts\";\n// Main entry point\nexport { type MainOptions, main } from \"./main.ts\";\n// Run modes for programmatic SDK usage\nexport {\n\tInteractiveMode,\n\ttype InteractiveModeOptions,\n\ttype JsonAgentSessionEvent,\n\ttype ModelInfo,\n\ttype PrintModeOptions,\n\tRpcClient,\n\ttype RpcClientEvent,\n\ttype RpcClientOptions,\n\ttype RpcCommand,\n\ttype RpcEventListener,\n\ttype RpcExtensionEvent,\n\ttype RpcExtensionUIRequest,\n\ttype RpcExtensionUIResponse,\n\ttype RpcResponse,\n\ttype RpcSessionState,\n\trunPrintMode,\n\trunRpcMode,\n} from \"./modes/index.ts\";\n// UI components for extensions\nexport {\n\tArminComponent,\n\tAssistantMessageComponent,\n\tBashExecutionComponent,\n\tBorderedLoader,\n\tBranchSummaryMessageComponent,\n\tCompactionSummaryMessageComponent,\n\tCustomEditor,\n\tCustomMessageComponent,\n\tDynamicBorder,\n\tExtensionEditorComponent,\n\tExtensionInputComponent,\n\tExtensionSelectorComponent,\n\tFooterComponent,\n\tkeyHint,\n\tkeyText,\n\tLoginDialogComponent,\n\tModelSelectorComponent,\n\tOAuthSelectorComponent,\n\ttype RenderDiffOptions,\n\trawKeyHint,\n\trenderDiff,\n\tSessionSelectorComponent,\n\ttype SettingsCallbacks,\n\ttype SettingsConfig,\n\tSettingsSelectorComponent,\n\tShowImagesSelectorComponent,\n\tSkillInvocationMessageComponent,\n\tThemeSelectorComponent,\n\tThinkingSelectorComponent,\n\tToolExecutionComponent,\n\ttype ToolExecutionOptions,\n\tTreeSelectorComponent,\n\ttruncateToVisualLines,\n\tUserMessageComponent,\n\tUserMessageSelectorComponent,\n\ttype VisualTruncateResult,\n} from \"./modes/interactive/components/index.ts\";\n// Theme utilities for custom tools and extensions\nexport {\n\tgetLanguageFromPath,\n\tgetMarkdownTheme,\n\tgetSelectListTheme,\n\tgetSettingsListTheme,\n\thighlightCode,\n\tinitTheme,\n\tTheme,\n\ttype ThemeColor,\n} from \"./modes/interactive/theme/theme.ts\";\n// Clipboard utilities\nexport { copyToClipboard } from \"./utils/clipboard.ts\";\nexport { parseFrontmatter, stripFrontmatter } from \"./utils/frontmatter.ts\";\nexport { convertToPng } from \"./utils/image-convert.ts\";\nexport { formatDimensionNote, type ResizedImage, resizeImage } from \"./utils/image-resize.ts\";\n// Shell utilities\nexport { getShellConfig } from \"./utils/shell.ts\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["// Core session management\n\nexport { sanitizeTerminalLabel } from \"@earendil-works/pi-tui\";\nexport { type Args, parseArgs } from \"./cli/args.ts\";\n// Config paths\nexport {\n\tCONFIG_DIR_NAME,\n\tgetAgentDir,\n\tgetDocsPath,\n\tgetExamplesPath,\n\tgetPackageDir,\n\tgetReadmePath,\n\tVERSION,\n} from \"./config.ts\";\nexport {\n\tAgentSession,\n\ttype AgentSessionConfig,\n\ttype AgentSessionEvent,\n\ttype AgentSessionEventListener,\n\ttype ModelCycleResult,\n\ttype ParsedSkillBlock,\n\ttype PromptOptions,\n\tparseSkillBlock,\n\ttype SessionStats,\n} from \"./core/agent-session.ts\";\nexport { type OAuthCredential, readStoredCredential } from \"./core/auth-storage.ts\";\n// Compaction\nexport {\n\ttype BranchPreparation,\n\ttype BranchSummaryResult,\n\ttype CacheFriendlySummaryOptions,\n\ttype CollectEntriesResult,\n\ttype CompactionResult,\n\ttype CutPointResult,\n\tcalculateContextTokens,\n\tcollectEntriesForBranchSummary,\n\tcompact,\n\tDEFAULT_COMPACTION_SETTINGS,\n\testimateTokens,\n\ttype FileOperations,\n\tfindCutPoint,\n\tfindTurnStartIndex,\n\ttype GenerateBranchSummaryOptions,\n\tgenerateBranchSummary,\n\tgenerateSummary,\n\tgenerateSummaryWithUsage,\n\tgetLastAssistantUsage,\n\tprepareBranchEntries,\n\tserializeConversation,\n\tshouldCompact,\n} from \"./core/compaction/index.ts\";\nexport { createEventBus, type EventBus, type EventBusController } from \"./core/event-bus.ts\";\n// Extension system\nexport type {\n\tAgentEndEvent,\n\tAgentSettledEvent,\n\tAgentStartEvent,\n\tAgentToolResult,\n\tAgentToolUpdateCallback,\n\tAppKeybinding,\n\tAutocompleteProviderFactory,\n\tBashToolCallEvent,\n\tBeforeAgentStartEvent,\n\tBeforeAgentStartEventResult,\n\tBeforeProviderHeadersEvent,\n\tBeforeProviderRequestEvent,\n\tBeforeProviderRequestEventResult,\n\tBuildSystemPromptOptions,\n\tCompactOptions,\n\tContextEvent,\n\tContextUsage,\n\tCustomToolCallEvent,\n\tEditToolCallEvent,\n\tEntryRenderer,\n\tEntryRenderOptions,\n\tExecOptions,\n\tExecResult,\n\tExtension,\n\tExtensionActions,\n\tExtensionAPI,\n\tExtensionCommandContext,\n\tExtensionCommandContextActions,\n\tExtensionContext,\n\tExtensionContextActions,\n\tExtensionError,\n\tExtensionEvent,\n\tExtensionFactory,\n\tExtensionFlag,\n\tExtensionHandler,\n\tExtensionRpcRequestHandler,\n\tExtensionRuntime,\n\tExtensionShortcut,\n\tExtensionUIContext,\n\tExtensionUIDialogOptions,\n\tExtensionWidgetOptions,\n\tFilesystemOperation,\n\tFilesystemPolicy,\n\tFilesystemPolicyChecker,\n\tFilesystemPolicyDecision,\n\tFilesystemPolicyRequest,\n\tFindToolCallEvent,\n\tGrepToolCallEvent,\n\tInlineExtension,\n\tInputDispositionEvent,\n\tInputEvent,\n\tInputEventResult,\n\tInputSource,\n\tKeybindingsManager,\n\tLoadExtensionsResult,\n\tLsToolCallEvent,\n\tMarkdownTransformContext,\n\tMarkdownTransformer,\n\tMcpServerDeclaration,\n\tMessageEndEvent,\n\tMessageRenderer,\n\tMessageRenderOptions,\n\tMessageStartEvent,\n\tMessageUpdateEvent,\n\tProjectTrustContext,\n\tProjectTrustEvent,\n\tProjectTrustEventDecision,\n\tProjectTrustEventResult,\n\tProjectTrustHandler,\n\tProviderConfig,\n\tProviderModelConfig,\n\tReadToolCallEvent,\n\tRegisteredCommand,\n\tRegisteredTool,\n\tResolvedCommand,\n\tSessionBeforeCompactEvent,\n\tSessionBeforeForkEvent,\n\tSessionBeforeSwitchEvent,\n\tSessionBeforeTreeEvent,\n\tSessionCompactEvent,\n\tSessionInfoChangedEvent,\n\tSessionShutdownEvent,\n\tSessionStartEvent,\n\tSessionTreeEvent,\n\tSlashCommandInfo,\n\tSlashCommandSource,\n\tSourceInfo,\n\tTerminalInputHandler,\n\tToolCallEvent,\n\tToolCallEventResult,\n\tToolDefinition,\n\tToolExecutionEndEvent,\n\tToolExecutionMode,\n\tToolExecutionStartEvent,\n\tToolExecutionUpdateEvent,\n\tToolInfo,\n\tToolRenderResultOptions,\n\tToolResultEvent,\n\tTurnEndEvent,\n\tTurnStartEvent,\n\tUserBashEvent,\n\tUserBashEventResult,\n\tWidgetPlacement,\n\tWorkingIndicatorOptions,\n\tWriteToolCallEvent,\n} from \"./core/extensions/index.ts\";\nexport {\n\tcreateExtensionRuntime,\n\tdefineTool,\n\tdiscoverAndLoadExtensions,\n\tExtensionRunner,\n\tisBashToolResult,\n\tisEditToolResult,\n\tisFindToolResult,\n\tisGrepToolResult,\n\tisLsToolResult,\n\tisReadToolResult,\n\tisToolCallEventType,\n\tisWriteToolResult,\n\twrapRegisteredTool,\n\twrapRegisteredTools,\n} from \"./core/extensions/index.ts\";\n// Notice primitives\nexport {\n\tbuildNoticeBox,\n\ttype NoticeLine,\n\ttype NoticeSpec,\n\ttype NoticeTone,\n\tnoticeEntryRenderer,\n\tnoticeMessageRenderer,\n} from \"./core/extensions/notice/index.ts\";\n// Footer data provider (git branch + extension statuses - data not otherwise available to extensions)\nexport type { ReadonlyFooterDataProvider } from \"./core/footer-data-provider.ts\";\nexport { convertToLlm } from \"./core/messages.ts\";\nexport { ModelRegistry } from \"./core/model-registry.ts\";\nexport {\n\ttype ModelScopeDiagnostic,\n\ttype ResolveCliModelResult,\n\ttype ResolveModelScopeResult,\n\tresolveCliModel,\n\tresolveModelScopeWithDiagnostics,\n\ttype ScopedModel,\n} from \"./core/model-resolver.ts\";\nexport {\n\ttype CreateModelRuntimeOptions,\n\tCredentialSynchronizationError,\n\ttype CredentialSynchronizationOperation,\n\tModelRuntime,\n\ttype ModelRuntimeAuthOverrides,\n} from \"./core/model-runtime.ts\";\nexport type {\n\tPackageManager,\n\tPathMetadata,\n\tProgressCallback,\n\tProgressEvent,\n\tResolvedPaths,\n\tResolvedResource,\n} from \"./core/package-manager.ts\";\nexport { DefaultPackageManager } from \"./core/package-manager.ts\";\nexport type { ResourceCollision, ResourceDiagnostic, ResourceLoader } from \"./core/resource-loader.ts\";\nexport { DefaultResourceLoader, loadProjectContextFiles } from \"./core/resource-loader.ts\";\n// SDK for programmatic usage\nexport {\n\tAgentSessionRuntime,\n\ttype AgentSessionRuntimeDiagnostic,\n\ttype AgentSessionServices,\n\ttype CreateAgentSessionFromServicesOptions,\n\ttype CreateAgentSessionOptions,\n\ttype CreateAgentSessionResult,\n\ttype CreateAgentSessionRuntimeFactory,\n\ttype CreateAgentSessionRuntimeResult,\n\ttype CreateAgentSessionServicesOptions,\n\t// Factory\n\tcreateAgentSession,\n\tcreateAgentSessionFromServices,\n\tcreateAgentSessionRuntime,\n\tcreateAgentSessionServices,\n\tcreateBashTool,\n\t// Tool factories (for custom cwd)\n\tcreateCodingTools,\n\tcreateEditTool,\n\tcreateFindTool,\n\tcreateGrepTool,\n\tcreateLsTool,\n\tcreateReadOnlyTools,\n\tcreateReadTool,\n\tcreateWriteTool,\n\ttype PromptTemplate,\n} from \"./core/sdk.ts\";\nexport {\n\ttype BranchSummaryEntry,\n\tbuildContextEntries,\n\tbuildSessionContext,\n\ttype CompactionEntry,\n\tCURRENT_SESSION_VERSION,\n\ttype CustomEntry,\n\ttype CustomMessageEntry,\n\ttype FileEntry,\n\tgetLatestCompactionEntry,\n\ttype ModelChangeEntry,\n\tmigrateSessionEntries,\n\ttype NewSessionOptions,\n\tparseSessionEntries,\n\ttype SessionContext,\n\ttype SessionEntry,\n\ttype SessionEntryBase,\n\ttype SessionHeader,\n\ttype SessionInfo,\n\ttype SessionInfoEntry,\n\tSessionManager,\n\ttype SessionMessageEntry,\n\ttype SessionTreeNode,\n\tsessionEntryToContextMessages,\n\ttype ThinkingLevelChangeEntry,\n} from \"./core/session-manager.ts\";\nexport {\n\ttype CompactionSettings,\n\ttype DefaultProjectTrust,\n\ttype FullscreenExitOutput,\n\ttype ImageSettings,\n\ttype PackageSource,\n\ttype RetrySettings,\n\tSettingsManager,\n\ttype SettingsManagerCreateOptions,\n\ttype TuiMode,\n} from \"./core/settings-manager.ts\";\n// Skills\nexport {\n\tformatSkillsForPrompt,\n\ttype LoadSkillsFromDirOptions,\n\ttype LoadSkillsResult,\n\tloadSkills,\n\tloadSkillsFromDir,\n\ttype Skill,\n\ttype SkillFrontmatter,\n} from \"./core/skills.ts\";\nexport { createSyntheticSourceInfo } from \"./core/source-info.ts\";\nexport { type EditDiffResult, generateDiffString, generateUnifiedPatch } from \"./core/tools/edit-diff.ts\";\n// Tools\nexport {\n\ttype BashOperations,\n\ttype BashSpawnContext,\n\ttype BashSpawnHook,\n\ttype BashToolDetails,\n\ttype BashToolInput,\n\ttype BashToolOptions,\n\tcreateBashToolDefinition,\n\tcreateEditToolDefinition,\n\tcreateFindToolDefinition,\n\tcreateGrepToolDefinition,\n\tcreateLocalBashOperations,\n\tcreateLsToolDefinition,\n\tcreateReadToolDefinition,\n\tcreateWriteToolDefinition,\n\tDEFAULT_MAX_BYTES,\n\tDEFAULT_MAX_LINES,\n\ttype EditOperations,\n\ttype EditToolDetails,\n\ttype EditToolInput,\n\ttype EditToolOptions,\n\ttype FindOperations,\n\ttype FindToolDetails,\n\ttype FindToolInput,\n\ttype FindToolOptions,\n\tformatSize,\n\ttype GrepOperations,\n\ttype GrepToolDetails,\n\ttype GrepToolInput,\n\ttype GrepToolOptions,\n\ttype LsOperations,\n\ttype LsToolDetails,\n\ttype LsToolInput,\n\ttype LsToolOptions,\n\ttype ReadOperations,\n\ttype ReadToolDetails,\n\ttype ReadToolInput,\n\ttype ReadToolOptions,\n\ttype ToolsOptions,\n\ttype TruncationOptions,\n\ttype TruncationResult,\n\ttruncateHead,\n\ttruncateLine,\n\ttruncateTail,\n\ttype WriteOperations,\n\ttype WriteToolInput,\n\ttype WriteToolOptions,\n\twithFileMutationQueue,\n} from \"./core/tools/index.ts\";\nexport {\n\thasTrustRequiringProjectResources,\n\ttype ProjectTrustDecision,\n\tProjectTrustStore,\n\ttype ProjectTrustStoreEntry,\n\ttype ProjectTrustUpdate,\n} from \"./core/trust-manager.ts\";\n// Main entry point\nexport { type MainOptions, main } from \"./main.ts\";\n// Run modes for programmatic SDK usage\nexport {\n\tInteractiveMode,\n\ttype InteractiveModeOptions,\n\ttype JsonAgentSessionEvent,\n\ttype ModelInfo,\n\ttype PrintModeOptions,\n\tRpcClient,\n\ttype RpcClientEvent,\n\ttype RpcClientOptions,\n\ttype RpcCommand,\n\ttype RpcEventListener,\n\ttype RpcExtensionEvent,\n\ttype RpcExtensionUIRequest,\n\ttype RpcExtensionUIResponse,\n\ttype RpcResponse,\n\ttype RpcSessionState,\n\trunPrintMode,\n\trunRpcMode,\n} from \"./modes/index.ts\";\n// UI components for extensions\nexport {\n\tArminComponent,\n\tAssistantMessageComponent,\n\tBashExecutionComponent,\n\tBorderedLoader,\n\tBranchSummaryMessageComponent,\n\tCompactionSummaryMessageComponent,\n\tCustomEditor,\n\tCustomMessageComponent,\n\tDynamicBorder,\n\tExtensionEditorComponent,\n\tExtensionInputComponent,\n\tExtensionSelectorComponent,\n\tFooterComponent,\n\tkeyHint,\n\tkeyText,\n\tLoginDialogComponent,\n\tModelSelectorComponent,\n\tOAuthSelectorComponent,\n\ttype RenderDiffOptions,\n\trawKeyHint,\n\trenderDiff,\n\tSessionSelectorComponent,\n\ttype SettingsCallbacks,\n\ttype SettingsConfig,\n\tSettingsSelectorComponent,\n\tShowImagesSelectorComponent,\n\tSkillInvocationMessageComponent,\n\tThemeSelectorComponent,\n\tThinkingSelectorComponent,\n\tToolExecutionComponent,\n\ttype ToolExecutionOptions,\n\tTreeSelectorComponent,\n\ttruncateToVisualLines,\n\tUserMessageComponent,\n\tUserMessageSelectorComponent,\n\ttype VisualTruncateResult,\n} from \"./modes/interactive/components/index.ts\";\n// Theme utilities for custom tools and extensions\nexport {\n\tgetLanguageFromPath,\n\tgetMarkdownTheme,\n\tgetSelectListTheme,\n\tgetSettingsListTheme,\n\thighlightCode,\n\tinitTheme,\n\tTheme,\n\ttype ThemeColor,\n} from \"./modes/interactive/theme/theme.ts\";\n// Clipboard utilities\nexport { copyToClipboard } from \"./utils/clipboard.ts\";\nexport { parseFrontmatter, stripFrontmatter } from \"./utils/frontmatter.ts\";\nexport { convertToPng } from \"./utils/image-convert.ts\";\nexport { formatDimensionNote, type ResizedImage, resizeImage } from \"./utils/image-resize.ts\";\n// Shell utilities\nexport { getShellConfig } from \"./utils/shell.ts\";\n"]}
@@ -1,5 +1,11 @@
1
1
  type UncaughtExceptionOrigin = "uncaughtException" | "unhandledRejection";
2
2
  export declare const INSPECTOR_VM_IMPORT_WARNING = "Node Inspector dynamic import is unsupported; use require() or a target-side loader. Senpi kept running.";
3
+ /**
4
+ * Report whether this process inherited an Inspector option, either as an exec argument or
5
+ * through NODE_OPTIONS. Such a run owns a debugger socket that has to be handed to the process
6
+ * running the agent, which is what makes the child spawn in `cli.ts` load-bearing there.
7
+ */
8
+ export declare function hasInheritedInspectorOption(): boolean;
3
9
  export declare function releaseInheritedInspectorForChild(): void;
4
10
  export declare function isRecoverableInspectorVmImportError(error: unknown, origin: UncaughtExceptionOrigin): boolean;
5
11
  /**