@prestyj/cli 4.2.15 → 4.2.44

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 (286) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +15 -7
  3. package/dist/cli.js +457 -225
  4. package/dist/cli.js.map +1 -1
  5. package/dist/config.d.ts +1 -0
  6. package/dist/config.d.ts.map +1 -1
  7. package/dist/config.js +66 -0
  8. package/dist/config.js.map +1 -1
  9. package/dist/core/agent-session.d.ts +22 -0
  10. package/dist/core/agent-session.d.ts.map +1 -1
  11. package/dist/core/agent-session.js +184 -23
  12. package/dist/core/agent-session.js.map +1 -1
  13. package/dist/core/agents.d.ts +0 -2
  14. package/dist/core/agents.d.ts.map +1 -1
  15. package/dist/core/agents.js +1 -5
  16. package/dist/core/agents.js.map +1 -1
  17. package/dist/core/auth-storage.d.ts +2 -0
  18. package/dist/core/auth-storage.d.ts.map +1 -1
  19. package/dist/core/auth-storage.js +66 -17
  20. package/dist/core/auth-storage.js.map +1 -1
  21. package/dist/core/auto-update.js +1 -1
  22. package/dist/core/auto-update.js.map +1 -1
  23. package/dist/core/compaction/compactor.d.ts +36 -5
  24. package/dist/core/compaction/compactor.d.ts.map +1 -1
  25. package/dist/core/compaction/compactor.js +222 -63
  26. package/dist/core/compaction/compactor.js.map +1 -1
  27. package/dist/core/compaction/compactor.test.js +377 -32
  28. package/dist/core/compaction/compactor.test.js.map +1 -1
  29. package/dist/core/compaction/token-estimator.d.ts +5 -0
  30. package/dist/core/compaction/token-estimator.d.ts.map +1 -1
  31. package/dist/core/compaction/token-estimator.js +41 -2
  32. package/dist/core/compaction/token-estimator.js.map +1 -1
  33. package/dist/core/compaction/token-estimator.test.js +43 -21
  34. package/dist/core/compaction/token-estimator.test.js.map +1 -1
  35. package/dist/core/event-bus.d.ts +6 -0
  36. package/dist/core/event-bus.d.ts.map +1 -1
  37. package/dist/core/event-bus.js +7 -0
  38. package/dist/core/event-bus.js.map +1 -1
  39. package/dist/core/file-lock.d.ts +6 -0
  40. package/dist/core/file-lock.d.ts.map +1 -0
  41. package/dist/core/file-lock.js +76 -0
  42. package/dist/core/file-lock.js.map +1 -0
  43. package/dist/core/index.d.ts +2 -2
  44. package/dist/core/index.d.ts.map +1 -1
  45. package/dist/core/index.js +1 -1
  46. package/dist/core/index.js.map +1 -1
  47. package/dist/core/mcp/client.d.ts +0 -26
  48. package/dist/core/mcp/client.d.ts.map +1 -1
  49. package/dist/core/mcp/client.js +34 -141
  50. package/dist/core/mcp/client.js.map +1 -1
  51. package/dist/core/mcp/defaults.d.ts.map +1 -1
  52. package/dist/core/mcp/defaults.js +4 -8
  53. package/dist/core/mcp/defaults.js.map +1 -1
  54. package/dist/core/mcp/types.d.ts +0 -2
  55. package/dist/core/mcp/types.d.ts.map +1 -1
  56. package/dist/core/model-registry.d.ts +2 -1
  57. package/dist/core/model-registry.d.ts.map +1 -1
  58. package/dist/core/model-registry.js +16 -5
  59. package/dist/core/model-registry.js.map +1 -1
  60. package/dist/core/oauth/anthropic.d.ts.map +1 -1
  61. package/dist/core/oauth/anthropic.js +3 -3
  62. package/dist/core/oauth/anthropic.js.map +1 -1
  63. package/dist/core/prompt-commands.d.ts.map +1 -1
  64. package/dist/core/prompt-commands.js +21 -0
  65. package/dist/core/prompt-commands.js.map +1 -1
  66. package/dist/core/session-manager.d.ts +34 -2
  67. package/dist/core/session-manager.d.ts.map +1 -1
  68. package/dist/core/session-manager.js +160 -54
  69. package/dist/core/session-manager.js.map +1 -1
  70. package/dist/core/settings-manager.d.ts +2 -2
  71. package/dist/core/skills.d.ts +2 -1
  72. package/dist/core/skills.d.ts.map +1 -1
  73. package/dist/core/skills.js +8 -8
  74. package/dist/core/skills.js.map +1 -1
  75. package/dist/core/slash-commands.d.ts +4 -0
  76. package/dist/core/slash-commands.d.ts.map +1 -1
  77. package/dist/core/slash-commands.js +22 -0
  78. package/dist/core/slash-commands.js.map +1 -1
  79. package/dist/core/telegram.d.ts +94 -0
  80. package/dist/core/telegram.d.ts.map +1 -0
  81. package/dist/core/telegram.js +227 -0
  82. package/dist/core/telegram.js.map +1 -0
  83. package/dist/interactive.d.ts.map +1 -1
  84. package/dist/interactive.js +36 -5
  85. package/dist/interactive.js.map +1 -1
  86. package/dist/modes/index.d.ts +1 -0
  87. package/dist/modes/index.d.ts.map +1 -1
  88. package/dist/modes/index.js +1 -0
  89. package/dist/modes/index.js.map +1 -1
  90. package/dist/modes/json-mode.d.ts.map +1 -1
  91. package/dist/modes/json-mode.js +2 -1
  92. package/dist/modes/json-mode.js.map +1 -1
  93. package/dist/modes/print-mode.d.ts.map +1 -1
  94. package/dist/modes/print-mode.js +2 -1
  95. package/dist/modes/print-mode.js.map +1 -1
  96. package/dist/modes/rpc-mode.d.ts +28 -0
  97. package/dist/modes/rpc-mode.d.ts.map +1 -0
  98. package/dist/modes/rpc-mode.js +146 -0
  99. package/dist/modes/rpc-mode.js.map +1 -0
  100. package/dist/modes/serve-mode.d.ts +21 -0
  101. package/dist/modes/serve-mode.d.ts.map +1 -0
  102. package/dist/modes/serve-mode.js +650 -0
  103. package/dist/modes/serve-mode.js.map +1 -0
  104. package/dist/system-prompt.d.ts +1 -1
  105. package/dist/system-prompt.d.ts.map +1 -1
  106. package/dist/system-prompt.js +45 -10
  107. package/dist/system-prompt.js.map +1 -1
  108. package/dist/tools/bash.d.ts +4 -1
  109. package/dist/tools/bash.d.ts.map +1 -1
  110. package/dist/tools/bash.js +58 -5
  111. package/dist/tools/bash.js.map +1 -1
  112. package/dist/tools/edit.d.ts +4 -1
  113. package/dist/tools/edit.d.ts.map +1 -1
  114. package/dist/tools/edit.js +9 -5
  115. package/dist/tools/edit.js.map +1 -1
  116. package/dist/tools/enter-plan.d.ts +8 -0
  117. package/dist/tools/enter-plan.d.ts.map +1 -0
  118. package/dist/tools/enter-plan.js +28 -0
  119. package/dist/tools/enter-plan.js.map +1 -0
  120. package/dist/tools/exit-plan.d.ts +8 -0
  121. package/dist/tools/exit-plan.d.ts.map +1 -0
  122. package/dist/tools/exit-plan.js +35 -0
  123. package/dist/tools/exit-plan.js.map +1 -0
  124. package/dist/tools/grep.d.ts +2 -1
  125. package/dist/tools/grep.d.ts.map +1 -1
  126. package/dist/tools/grep.js +7 -8
  127. package/dist/tools/grep.js.map +1 -1
  128. package/dist/tools/index.d.ts +17 -0
  129. package/dist/tools/index.d.ts.map +1 -1
  130. package/dist/tools/index.js +26 -7
  131. package/dist/tools/index.js.map +1 -1
  132. package/dist/tools/ls.d.ts +2 -1
  133. package/dist/tools/ls.d.ts.map +1 -1
  134. package/dist/tools/ls.js +4 -4
  135. package/dist/tools/ls.js.map +1 -1
  136. package/dist/tools/operations.d.ts +39 -0
  137. package/dist/tools/operations.d.ts.map +1 -0
  138. package/dist/tools/operations.js +27 -0
  139. package/dist/tools/operations.js.map +1 -0
  140. package/dist/tools/path-utils.d.ts +5 -0
  141. package/dist/tools/path-utils.d.ts.map +1 -1
  142. package/dist/tools/path-utils.js +18 -0
  143. package/dist/tools/path-utils.js.map +1 -1
  144. package/dist/tools/plan-mode.test.d.ts +2 -0
  145. package/dist/tools/plan-mode.test.d.ts.map +1 -0
  146. package/dist/tools/plan-mode.test.js +214 -0
  147. package/dist/tools/plan-mode.test.js.map +1 -0
  148. package/dist/tools/read.d.ts +2 -1
  149. package/dist/tools/read.d.ts.map +1 -1
  150. package/dist/tools/read.js +6 -5
  151. package/dist/tools/read.js.map +1 -1
  152. package/dist/tools/skill.d.ts +10 -0
  153. package/dist/tools/skill.d.ts.map +1 -0
  154. package/dist/tools/skill.js +36 -0
  155. package/dist/tools/skill.js.map +1 -0
  156. package/dist/tools/subagent.d.ts +3 -1
  157. package/dist/tools/subagent.d.ts.map +1 -1
  158. package/dist/tools/subagent.js +46 -4
  159. package/dist/tools/subagent.js.map +1 -1
  160. package/dist/tools/tasks.d.ts +2 -2
  161. package/dist/tools/web-fetch.d.ts.map +1 -1
  162. package/dist/tools/web-fetch.js +47 -0
  163. package/dist/tools/web-fetch.js.map +1 -1
  164. package/dist/tools/write.d.ts +4 -1
  165. package/dist/tools/write.d.ts.map +1 -1
  166. package/dist/tools/write.js +17 -6
  167. package/dist/tools/write.js.map +1 -1
  168. package/dist/ui/App.d.ts +35 -1
  169. package/dist/ui/App.d.ts.map +1 -1
  170. package/dist/ui/App.js +367 -73
  171. package/dist/ui/App.js.map +1 -1
  172. package/dist/ui/components/ActivityIndicator.d.ts +2 -1
  173. package/dist/ui/components/ActivityIndicator.d.ts.map +1 -1
  174. package/dist/ui/components/ActivityIndicator.js +25 -4
  175. package/dist/ui/components/ActivityIndicator.js.map +1 -1
  176. package/dist/ui/components/AnimationContext.d.ts +22 -0
  177. package/dist/ui/components/AnimationContext.d.ts.map +1 -0
  178. package/dist/ui/components/AnimationContext.js +35 -0
  179. package/dist/ui/components/AnimationContext.js.map +1 -0
  180. package/dist/ui/components/AssistantMessage.d.ts.map +1 -1
  181. package/dist/ui/components/AssistantMessage.js +6 -1
  182. package/dist/ui/components/AssistantMessage.js.map +1 -1
  183. package/dist/ui/components/Banner.d.ts.map +1 -1
  184. package/dist/ui/components/Banner.js +4 -7
  185. package/dist/ui/components/Banner.js.map +1 -1
  186. package/dist/ui/components/CompactionNotice.d.ts.map +1 -1
  187. package/dist/ui/components/CompactionNotice.js +4 -8
  188. package/dist/ui/components/CompactionNotice.js.map +1 -1
  189. package/dist/ui/components/Footer.d.ts +2 -1
  190. package/dist/ui/components/Footer.d.ts.map +1 -1
  191. package/dist/ui/components/Footer.js +8 -15
  192. package/dist/ui/components/Footer.js.map +1 -1
  193. package/dist/ui/components/InputArea.d.ts +3 -1
  194. package/dist/ui/components/InputArea.d.ts.map +1 -1
  195. package/dist/ui/components/InputArea.js +23 -25
  196. package/dist/ui/components/InputArea.js.map +1 -1
  197. package/dist/ui/components/PlanApproval.d.ts +8 -0
  198. package/dist/ui/components/PlanApproval.d.ts.map +1 -0
  199. package/dist/ui/components/PlanApproval.js +44 -0
  200. package/dist/ui/components/PlanApproval.js.map +1 -0
  201. package/dist/ui/components/PlanBanner.d.ts +6 -0
  202. package/dist/ui/components/PlanBanner.d.ts.map +1 -0
  203. package/dist/ui/components/PlanBanner.js +14 -0
  204. package/dist/ui/components/PlanBanner.js.map +1 -0
  205. package/dist/ui/components/PlanOverlay.d.ts +11 -0
  206. package/dist/ui/components/PlanOverlay.d.ts.map +1 -0
  207. package/dist/ui/components/PlanOverlay.js +263 -0
  208. package/dist/ui/components/PlanOverlay.js.map +1 -0
  209. package/dist/ui/components/ServerToolExecution.d.ts +1 -0
  210. package/dist/ui/components/ServerToolExecution.d.ts.map +1 -1
  211. package/dist/ui/components/ServerToolExecution.js +12 -3
  212. package/dist/ui/components/ServerToolExecution.js.map +1 -1
  213. package/dist/ui/components/SkillsOverlay.d.ts +7 -0
  214. package/dist/ui/components/SkillsOverlay.d.ts.map +1 -0
  215. package/dist/ui/components/SkillsOverlay.js +158 -0
  216. package/dist/ui/components/SkillsOverlay.js.map +1 -0
  217. package/dist/ui/components/Spinner.d.ts.map +1 -1
  218. package/dist/ui/components/Spinner.js +5 -9
  219. package/dist/ui/components/Spinner.js.map +1 -1
  220. package/dist/ui/components/StreamingArea.d.ts +2 -1
  221. package/dist/ui/components/StreamingArea.d.ts.map +1 -1
  222. package/dist/ui/components/StreamingArea.js +11 -4
  223. package/dist/ui/components/StreamingArea.js.map +1 -1
  224. package/dist/ui/components/SubAgentPanel.d.ts.map +1 -1
  225. package/dist/ui/components/SubAgentPanel.js +27 -29
  226. package/dist/ui/components/SubAgentPanel.js.map +1 -1
  227. package/dist/ui/components/TaskOverlay.d.ts.map +1 -1
  228. package/dist/ui/components/TaskOverlay.js +7 -3
  229. package/dist/ui/components/TaskOverlay.js.map +1 -1
  230. package/dist/ui/components/ThinkingBlock.d.ts.map +1 -1
  231. package/dist/ui/components/ThinkingBlock.js +4 -1
  232. package/dist/ui/components/ThinkingBlock.js.map +1 -1
  233. package/dist/ui/components/ThinkingIndicator.d.ts.map +1 -1
  234. package/dist/ui/components/ThinkingIndicator.js +8 -33
  235. package/dist/ui/components/ThinkingIndicator.js.map +1 -1
  236. package/dist/ui/components/ToolExecution.d.ts.map +1 -1
  237. package/dist/ui/components/ToolExecution.js +95 -41
  238. package/dist/ui/components/ToolExecution.js.map +1 -1
  239. package/dist/ui/components/ToolGroupExecution.d.ts +7 -0
  240. package/dist/ui/components/ToolGroupExecution.d.ts.map +1 -0
  241. package/dist/ui/components/ToolGroupExecution.js +115 -0
  242. package/dist/ui/components/ToolGroupExecution.js.map +1 -0
  243. package/dist/ui/components/UserMessage.js +1 -1
  244. package/dist/ui/components/UserMessage.js.map +1 -1
  245. package/dist/ui/components/index.d.ts +1 -0
  246. package/dist/ui/components/index.d.ts.map +1 -1
  247. package/dist/ui/components/index.js +1 -0
  248. package/dist/ui/components/index.js.map +1 -1
  249. package/dist/ui/hooks/useAgentLoop.d.ts +8 -0
  250. package/dist/ui/hooks/useAgentLoop.d.ts.map +1 -1
  251. package/dist/ui/hooks/useAgentLoop.js +320 -220
  252. package/dist/ui/hooks/useAgentLoop.js.map +1 -1
  253. package/dist/ui/hooks/useTerminalSize.d.ts +21 -9
  254. package/dist/ui/hooks/useTerminalSize.d.ts.map +1 -1
  255. package/dist/ui/hooks/useTerminalSize.js +33 -16
  256. package/dist/ui/hooks/useTerminalSize.js.map +1 -1
  257. package/dist/ui/hooks/useTerminalTitle.d.ts.map +1 -1
  258. package/dist/ui/hooks/useTerminalTitle.js +8 -16
  259. package/dist/ui/hooks/useTerminalTitle.js.map +1 -1
  260. package/dist/ui/live-item-flush.d.ts +11 -1
  261. package/dist/ui/live-item-flush.d.ts.map +1 -1
  262. package/dist/ui/live-item-flush.js +81 -2
  263. package/dist/ui/live-item-flush.js.map +1 -1
  264. package/dist/ui/login.d.ts +1 -1
  265. package/dist/ui/login.d.ts.map +1 -1
  266. package/dist/ui/login.js +30 -6
  267. package/dist/ui/login.js.map +1 -1
  268. package/dist/ui/render.d.ts +11 -0
  269. package/dist/ui/render.d.ts.map +1 -1
  270. package/dist/ui/render.js +24 -10
  271. package/dist/ui/render.js.map +1 -1
  272. package/dist/ui/sessions.d.ts +2 -0
  273. package/dist/ui/sessions.d.ts.map +1 -0
  274. package/dist/ui/sessions.js +208 -0
  275. package/dist/ui/sessions.js.map +1 -0
  276. package/dist/ui/theme/dark.json +3 -1
  277. package/dist/ui/theme/light.json +3 -1
  278. package/dist/ui/theme/theme.d.ts +2 -0
  279. package/dist/ui/theme/theme.d.ts.map +1 -1
  280. package/dist/utils/error-handler.d.ts.map +1 -1
  281. package/dist/utils/error-handler.js +17 -5
  282. package/dist/utils/error-handler.js.map +1 -1
  283. package/dist/utils/image.d.ts.map +1 -1
  284. package/dist/utils/image.js +60 -5
  285. package/dist/utils/image.js.map +1 -1
  286. package/package.json +9 -9
@@ -1,9 +1,33 @@
1
1
  import { stream, } from "@prestyj/ai";
2
2
  import { estimateConversationTokens, estimateMessageTokens } from "./token-estimator.js";
3
- import { getSummaryModel } from "../model-registry.js";
3
+ import { getSummaryModel, getContextWindow } from "../model-registry.js";
4
4
  import { log } from "../logger.js";
5
- /** Max chars per tool result when building the summary prompt. */
6
- const TOOL_RESULT_SUMMARY_MAX_CHARS = 2000;
5
+ /** Max chars per tool result when preparing messages for the summarizer. */
6
+ const TOOL_RESULT_MAX_CHARS = 2000;
7
+ /** Max retries for empty LLM responses during summarization. */
8
+ const MAX_SUMMARY_RETRIES = 2;
9
+ /** Max output tokens for the summary response. */
10
+ const MAX_SUMMARY_OUTPUT_TOKENS = 4096;
11
+ const COMPACTION_SYSTEM_PROMPT = "You are a conversation compaction assistant. Your job is to create a concise summary of a conversation " +
12
+ "between a user and an AI coding assistant.\n\n" +
13
+ "This summary will replace older messages to keep the conversation within context limits while preserving " +
14
+ "all important information needed to continue the work seamlessly.\n\n" +
15
+ "Always output the summary — never refuse, never ask questions, never output empty responses.\n\n" +
16
+ "## What to Include\n" +
17
+ "- **User intent and goals** — what the user is trying to accomplish\n" +
18
+ "- **Active development** — what was being implemented, modified, or debugged, including technical approaches\n" +
19
+ "- **File operations** — all files created, modified, or referenced, with key changes\n" +
20
+ "- **Tool call outcomes** — which tools were called and their key results\n" +
21
+ "- **Key decisions** — important choices made and why\n" +
22
+ "- **Solutions & troubleshooting** — problems encountered and how they were resolved\n" +
23
+ "- **Outstanding work** — incomplete tasks, pending implementations, or next steps\n\n" +
24
+ "## What to Exclude\n" +
25
+ "- Redundant or superseded information\n" +
26
+ "- Full file contents (reference by path instead)\n" +
27
+ "- Verbose tool output (summarize key results)\n\n" +
28
+ "Focus on technical precision. Include specific identifiers (file paths, function names, etc.) " +
29
+ "that would be essential for continuation. Write in third person and maintain an objective, technical tone.";
30
+ const COMPACTION_USER_PROMPT = "Summarize the conversation above into a concise summary following the instructions. Output only the summary, nothing else.";
7
31
  /**
8
32
  * Check if compaction should be triggered.
9
33
  */
@@ -45,9 +69,9 @@ export function findRecentCutPoint(messages, tokenBudget) {
45
69
  return Math.max(1, cutIndex);
46
70
  }
47
71
  /**
48
- * Truncate a string for summary purposes.
72
+ * Truncate a string, appending a note about how much was removed.
49
73
  */
50
- function truncateForSummary(text, maxChars) {
74
+ function truncateString(text, maxChars) {
51
75
  if (text.length <= maxChars)
52
76
  return text;
53
77
  const truncatedChars = text.length - maxChars;
@@ -84,49 +108,120 @@ function extractFileOperations(messages) {
84
108
  return { read, modified };
85
109
  }
86
110
  /**
87
- * Serialize a message for the summary prompt, truncating tool results.
111
+ * Prepare conversation messages for the summarizer by truncating large tool
112
+ * results and stripping thinking blocks. Returns lightweight copies suitable
113
+ * for a summary LLM call — the originals are not mutated.
88
114
  */
89
- function serializeMessageForSummary(msg) {
90
- const role = msg.role;
91
- if (typeof msg.content === "string") {
92
- return `[${role}]: ${truncateForSummary(msg.content, TOOL_RESULT_SUMMARY_MAX_CHARS)}`;
93
- }
94
- if (!Array.isArray(msg.content)) {
95
- return `[${role}]: ${truncateForSummary(JSON.stringify(msg.content), TOOL_RESULT_SUMMARY_MAX_CHARS)}`;
96
- }
97
- // Handle tool result messages (role === "tool")
98
- if (role === "tool") {
99
- const results = msg.content;
100
- const parts = results.map((tr) => `[tool_result: ${truncateForSummary(tr.content, TOOL_RESULT_SUMMARY_MAX_CHARS)}]`);
101
- return `[${role}]: ${parts.join("\n")}`;
102
- }
103
- // For ContentPart[] (assistant messages with tool calls, etc.)
104
- const parts = [];
105
- for (const part of msg.content) {
106
- if ("text" in part && typeof part.text === "string") {
107
- parts.push(truncateForSummary(part.text, TOOL_RESULT_SUMMARY_MAX_CHARS));
115
+ export function prepareMessagesForSummary(msgs) {
116
+ return msgs.map((msg) => {
117
+ // Tool result messages truncate long results
118
+ if (msg.role === "tool") {
119
+ const results = msg.content;
120
+ return {
121
+ role: "tool",
122
+ content: results.map((tr) => ({
123
+ ...tr,
124
+ content: truncateString(tr.content, TOOL_RESULT_MAX_CHARS),
125
+ })),
126
+ };
108
127
  }
109
- else if ("type" in part && part.type === "tool_call") {
110
- const tc = part;
111
- parts.push(`[tool_call: ${tc.name}(${truncateForSummary(JSON.stringify(tc.args), 500)})]`);
128
+ // Assistant messages with ContentPart[] strip thinking, truncate text
129
+ if (msg.role === "assistant" && Array.isArray(msg.content)) {
130
+ const parts = msg.content
131
+ .filter((p) => p.type !== "thinking") // strip thinking blocks
132
+ .map((p) => {
133
+ if (p.type === "text") {
134
+ return { ...p, text: truncateString(p.text, TOOL_RESULT_MAX_CHARS) };
135
+ }
136
+ return p;
137
+ });
138
+ return { role: "assistant", content: parts.length > 0 ? parts : "" };
112
139
  }
113
- else {
114
- parts.push(truncateForSummary(JSON.stringify(part), 500));
140
+ // User string messages — truncate very long prompts
141
+ if (msg.role === "user" && typeof msg.content === "string") {
142
+ return { role: "user", content: truncateString(msg.content, TOOL_RESULT_MAX_CHARS) };
115
143
  }
144
+ return msg;
145
+ });
146
+ }
147
+ /**
148
+ * Select messages that fit within a token budget for the summary LLM call.
149
+ * Walks forward from the start, accumulating messages until the budget is
150
+ * exceeded. Returns the selected subset.
151
+ */
152
+ export function selectMessagesInBudget(msgs, tokenBudget) {
153
+ let accumulated = 0;
154
+ const selected = [];
155
+ for (const msg of msgs) {
156
+ const tokens = estimateMessageTokens(msg);
157
+ if (accumulated + tokens > tokenBudget)
158
+ break;
159
+ accumulated += tokens;
160
+ selected.push(msg);
161
+ }
162
+ return selected;
163
+ }
164
+ /**
165
+ * Build a fallback summary from file operations and message roles when the
166
+ * LLM summary call fails or returns empty.
167
+ */
168
+ export function buildFallbackSummary(middleMessages, fileOps) {
169
+ const userMessages = middleMessages.filter((m) => m.role === "user");
170
+ const toolCalls = middleMessages.filter((m) => m.role === "tool");
171
+ const lines = [];
172
+ lines.push("## Goal");
173
+ if (userMessages.length > 0) {
174
+ const firstContent = typeof userMessages[0].content === "string" ? userMessages[0].content : "(complex content)";
175
+ lines.push(truncateString(firstContent, 500));
116
176
  }
117
- return `[${role}]: ${parts.join("\n")}`;
177
+ else {
178
+ lines.push("(could not determine — no user messages in summarized segment)");
179
+ }
180
+ lines.push("");
181
+ lines.push("## Progress");
182
+ lines.push(`${middleMessages.length} messages exchanged, ${toolCalls.length} tool calls executed.`);
183
+ if (fileOps.read.size > 0) {
184
+ lines.push("");
185
+ lines.push("## Files Read");
186
+ for (const f of fileOps.read)
187
+ lines.push(`- ${f}`);
188
+ }
189
+ if (fileOps.modified.size > 0) {
190
+ lines.push("");
191
+ lines.push("## Files Modified");
192
+ for (const f of fileOps.modified)
193
+ lines.push(`- ${f}`);
194
+ }
195
+ return lines.join("\n");
196
+ }
197
+ /**
198
+ * Extract summary text from an LLM response.
199
+ */
200
+ export function extractSummaryText(content) {
201
+ if (typeof content === "string")
202
+ return content;
203
+ return content
204
+ .filter((p) => p.type === "text")
205
+ .map((p) => p.text)
206
+ .join("");
118
207
  }
119
208
  /** Budget of recent tokens to keep un-summarized (~20K tokens). */
120
209
  const KEEP_RECENT_TOKENS = 20_000;
121
210
  /**
122
211
  * Compact a conversation by summarizing older messages via LLM.
123
212
  *
213
+ * Follows the pattern used by Continue and Nao: sends the actual conversation
214
+ * messages to the summarizer (not a serialized string), bookended by a system
215
+ * prompt and a "summarize this" user prompt. This lets the LLM see the real
216
+ * message structure — roles, tool calls, tool results — and produce a much
217
+ * better summary.
218
+ *
124
219
  * - Keeps the system message (index 0) intact.
125
220
  * - Keeps the most recent ~20K tokens of conversation intact.
126
- * - Summarizes everything in between using an appropriate model
127
- * (Sonnet for Anthropic, Codex Mini for OpenAI, current model for others).
128
- * - Tool results are truncated to 2K chars in the summary prompt so the
129
- * summarization call itself doesn't blow up.
221
+ * - Summarizes everything in between using an appropriate model.
222
+ * - Tool results are truncated and thinking blocks stripped in the summary call.
223
+ * - Messages are token-budgeted to avoid overflowing the summarizer's context.
224
+ * - Retries on empty responses, falls back to extractive summary if all fail.
130
225
  */
131
226
  export async function compact(messages, options) {
132
227
  const originalCount = messages.length;
@@ -141,6 +236,14 @@ export async function compact(messages, options) {
141
236
  const recentStart = findRecentCutPoint(messages, KEEP_RECENT_TOKENS);
142
237
  const recentMessages = messages.slice(recentStart);
143
238
  const middleMessages = messages.slice(1, recentStart);
239
+ log("INFO", "compaction", `Cut point analysis`, {
240
+ recentStart: String(recentStart),
241
+ totalMessages: String(messages.length),
242
+ middleMessages: String(middleMessages.length),
243
+ recentMessages: String(recentMessages.length),
244
+ middleRoles: middleMessages.map((m) => m.role).join(","),
245
+ recentRoles: recentMessages.map((m) => m.role).join(","),
246
+ });
144
247
  // If there's nothing to compact, return as-is
145
248
  if (middleMessages.length <= 2) {
146
249
  log("INFO", "compaction", `Skipping compaction — too few messages to summarize`, {
@@ -160,8 +263,6 @@ export async function compact(messages, options) {
160
263
  }
161
264
  // Track file operations from the messages being summarized
162
265
  const fileOps = extractFileOperations(middleMessages);
163
- // Build summary request with truncated tool results
164
- const summaryContent = middleMessages.map((m) => serializeMessageForSummary(m)).join("\n\n");
165
266
  // Build file tracking section
166
267
  let fileTrackingSection = "";
167
268
  if (fileOps.read.size > 0 || fileOps.modified.size > 0) {
@@ -176,41 +277,95 @@ export async function compact(messages, options) {
176
277
  }
177
278
  // Pick the appropriate model for summarization
178
279
  const summaryModel = getSummaryModel(options.provider, options.model);
280
+ const summaryContextWindow = getContextWindow(summaryModel.id);
281
+ // Prepare messages: truncate tool results, strip thinking blocks
282
+ const preparedMessages = prepareMessagesForSummary(middleMessages);
283
+ // Budget: summary model context - output tokens - system/user prompt overhead (~1K)
284
+ const promptOverhead = 1000;
285
+ const tokenBudget = summaryContextWindow - MAX_SUMMARY_OUTPUT_TOKENS - promptOverhead;
286
+ const selectedMessages = selectMessagesInBudget(preparedMessages, tokenBudget);
179
287
  log("INFO", "compaction", `Summarizing ${middleMessages.length} messages`, {
180
- summaryPromptChars: String(summaryContent.length),
181
288
  summaryModel: summaryModel.id,
289
+ summaryContextWindow: String(summaryContextWindow),
290
+ tokenBudget: String(tokenBudget),
291
+ preparedMessages: String(preparedMessages.length),
292
+ selectedMessages: String(selectedMessages.length),
293
+ droppedMessages: String(preparedMessages.length - selectedMessages.length),
182
294
  filesRead: String(fileOps.read.size),
183
295
  filesModified: String(fileOps.modified.size),
184
296
  recentKept: String(recentMessages.length),
185
297
  });
186
- const summaryPrompt = `Summarize the following conversation segment concisely. ` +
187
- `Focus on: key decisions made, files read and modified, tool results, and important context needed to continue the conversation. ` +
188
- `Use this format:\n` +
189
- `## Goal\n<what the user is trying to accomplish>\n` +
190
- `## Progress\n<what has been done so far>\n` +
191
- `## Key Decisions\n<important choices made>\n` +
192
- `## Files Touched\n<files that were read or modified>\n` +
193
- `## Next Steps\n<what remains to be done>\n\n` +
194
- `Be factual and brief.\n\n${summaryContent}`;
195
- const summaryMessages = [{ role: "user", content: summaryPrompt }];
196
- const result = stream({
298
+ // Build the summary messages array following the Nao pattern:
299
+ // [system, ...actual conversation messages, user prompt to summarize]
300
+ // Add plan preservation instruction if an approved plan is active
301
+ const planPreservation = options.approvedPlanPath
302
+ ? `\n\n### APPROVED PLAN PRESERVATION\n` +
303
+ `An approved implementation plan exists at: ${options.approvedPlanPath}\n` +
304
+ `You MUST preserve all references to this plan and its approval status in the summary. ` +
305
+ `The agent is following this plan for implementation — do not lose this context.`
306
+ : "";
307
+ const summaryMessages = [
308
+ { role: "system", content: COMPACTION_SYSTEM_PROMPT + planPreservation },
309
+ ...selectedMessages,
310
+ { role: "user", content: COMPACTION_USER_PROMPT },
311
+ ];
312
+ log("INFO", "compaction", `Calling summary LLM`, {
197
313
  provider: options.provider,
198
314
  model: summaryModel.id,
199
- messages: summaryMessages,
200
- maxTokens: 2048,
201
- apiKey: options.apiKey,
202
- signal: options.signal,
203
- });
204
- const response = await result.response;
205
- const summaryText = typeof response.message.content === "string"
206
- ? response.message.content
207
- : response.message.content
208
- .filter((p) => p.type === "text")
209
- .map((p) => p.text)
210
- .join("");
211
- log("INFO", "compaction", `Summary generated`, {
212
- summaryChars: String(summaryText.length),
315
+ messageCount: String(summaryMessages.length),
316
+ hasApiKey: String(!!options.apiKey),
317
+ apiKeyPrefix: options.apiKey ? options.apiKey.slice(0, 15) + "..." : "none",
213
318
  });
319
+ // Call LLM with retries on empty responses
320
+ let summaryText = "";
321
+ for (let attempt = 0; attempt <= MAX_SUMMARY_RETRIES; attempt++) {
322
+ try {
323
+ const result = stream({
324
+ provider: options.provider,
325
+ model: summaryModel.id,
326
+ messages: summaryMessages,
327
+ maxTokens: MAX_SUMMARY_OUTPUT_TOKENS,
328
+ apiKey: options.apiKey,
329
+ signal: options.signal,
330
+ });
331
+ const response = await result.response;
332
+ log("INFO", "compaction", `Summary LLM response received`, {
333
+ attempt: String(attempt),
334
+ stopReason: response.stopReason,
335
+ inputTokens: String(response.usage.inputTokens),
336
+ outputTokens: String(response.usage.outputTokens),
337
+ contentType: typeof response.message.content,
338
+ contentIsArray: String(Array.isArray(response.message.content)),
339
+ contentLength: typeof response.message.content === "string"
340
+ ? String(response.message.content.length)
341
+ : String(response.message.content.length),
342
+ contentPartTypes: Array.isArray(response.message.content)
343
+ ? response.message.content.map((p) => p.type).join(",")
344
+ : "n/a",
345
+ });
346
+ summaryText = extractSummaryText(response.message.content);
347
+ if (summaryText.length > 0) {
348
+ log("INFO", "compaction", `Summary text extracted`, {
349
+ summaryChars: String(summaryText.length),
350
+ summaryPreview: summaryText.slice(0, 300),
351
+ });
352
+ break;
353
+ }
354
+ log("WARN", "compaction", `Summary LLM returned empty response`, {
355
+ attempt: String(attempt),
356
+ maxRetries: String(MAX_SUMMARY_RETRIES),
357
+ outputTokens: String(response.usage.outputTokens),
358
+ });
359
+ }
360
+ catch (err) {
361
+ log("WARN", "compaction", `Summary LLM call failed: ${err instanceof Error ? err.message : String(err)}`, { attempt: String(attempt) });
362
+ }
363
+ }
364
+ // Fallback: build an extractive summary from message metadata
365
+ if (summaryText.length === 0) {
366
+ log("WARN", "compaction", `All summary attempts failed — using fallback extractive summary`);
367
+ summaryText = buildFallbackSummary(middleMessages, fileOps);
368
+ }
214
369
  // Build new messages array
215
370
  const summaryMessage = {
216
371
  role: "user",
@@ -239,6 +394,10 @@ export async function compact(messages, options) {
239
394
  tokensBefore: String(tokensBeforeEstimate),
240
395
  tokensAfter: String(tokensAfterEstimate),
241
396
  reduction: `${reduction}%`,
397
+ newMessageRoles: newMessages.map((m) => m.role).join(","),
398
+ summaryMessagePreview: typeof summaryMessage.content === "string"
399
+ ? summaryMessage.content.slice(0, 300)
400
+ : "(non-string)",
242
401
  });
243
402
  return {
244
403
  messages: newMessages,
@@ -1 +1 @@
1
- {"version":3,"file":"compactor.js","sourceRoot":"","sources":["../../../src/core/compaction/compactor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"compactor.js","sourceRoot":"","sources":["../../../src/core/compaction/compactor.ts"],"names":[],"mappings":"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"}