psadk 1.4.1 → 1.4.4

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 (111) hide show
  1. package/build/main/index.d.ts +1 -0
  2. package/build/main/index.js +2 -1
  3. package/build/main/lib/PSAI.d.ts +11 -2
  4. package/build/main/lib/PSAI.js +145 -28
  5. package/build/main/lib/agent-core/agent-loop.d.ts +2 -2
  6. package/build/main/lib/agent-core/agent-loop.js +69 -65
  7. package/build/main/lib/agent-core/agent.d.ts +8 -8
  8. package/build/main/lib/agent-core/agent.js +61 -44
  9. package/build/main/lib/agent-core/harness/agent-harness.d.ts +4 -4
  10. package/build/main/lib/agent-core/harness/agent-harness.js +156 -112
  11. package/build/main/lib/agent-core/harness/compaction/branch-summarization.d.ts +5 -5
  12. package/build/main/lib/agent-core/harness/compaction/branch-summarization.js +31 -28
  13. package/build/main/lib/agent-core/harness/compaction/compaction.d.ts +5 -5
  14. package/build/main/lib/agent-core/harness/compaction/compaction.js +99 -78
  15. package/build/main/lib/agent-core/harness/compaction/utils.d.ts +2 -2
  16. package/build/main/lib/agent-core/harness/compaction/utils.js +30 -30
  17. package/build/main/lib/agent-core/harness/env/nodejs.d.ts +1 -1
  18. package/build/main/lib/agent-core/harness/env/nodejs.js +80 -75
  19. package/build/main/lib/agent-core/harness/execution-env.d.ts +3 -3
  20. package/build/main/lib/agent-core/harness/execution-env.js +3 -3
  21. package/build/main/lib/agent-core/harness/messages.d.ts +7 -7
  22. package/build/main/lib/agent-core/harness/messages.js +36 -22
  23. package/build/main/lib/agent-core/harness/prompt-templates.d.ts +2 -2
  24. package/build/main/lib/agent-core/harness/prompt-templates.js +31 -27
  25. package/build/main/lib/agent-core/harness/session/repo/jsonl.d.ts +2 -2
  26. package/build/main/lib/agent-core/harness/session/repo/jsonl.js +17 -11
  27. package/build/main/lib/agent-core/harness/session/repo/memory.d.ts +2 -2
  28. package/build/main/lib/agent-core/harness/session/repo/memory.js +8 -4
  29. package/build/main/lib/agent-core/harness/session/repo/shared.d.ts +3 -3
  30. package/build/main/lib/agent-core/harness/session/repo/shared.js +5 -5
  31. package/build/main/lib/agent-core/harness/session/session.d.ts +3 -3
  32. package/build/main/lib/agent-core/harness/session/session.js +26 -23
  33. package/build/main/lib/agent-core/harness/session/storage/jsonl.d.ts +2 -2
  34. package/build/main/lib/agent-core/harness/session/storage/jsonl.js +11 -11
  35. package/build/main/lib/agent-core/harness/session/storage/memory.d.ts +2 -2
  36. package/build/main/lib/agent-core/harness/session/storage/memory.js +10 -6
  37. package/build/main/lib/agent-core/harness/skills.d.ts +2 -2
  38. package/build/main/lib/agent-core/harness/skills.js +55 -48
  39. package/build/main/lib/agent-core/harness/system-prompt.d.ts +1 -1
  40. package/build/main/lib/agent-core/harness/system-prompt.js +16 -16
  41. package/build/main/lib/agent-core/harness/types.d.ts +43 -43
  42. package/build/main/lib/agent-core/harness/types.js +2 -2
  43. package/build/main/lib/agent-core/harness/utils/shell-output.d.ts +2 -2
  44. package/build/main/lib/agent-core/harness/utils/shell-output.js +18 -14
  45. package/build/main/lib/agent-core/harness/utils/truncate.d.ts +1 -1
  46. package/build/main/lib/agent-core/harness/utils/truncate.js +27 -24
  47. package/build/main/lib/agent-core/index.d.ts +19 -19
  48. package/build/main/lib/agent-core/index.js +20 -20
  49. package/build/main/lib/agent-core/proxy.d.ts +18 -18
  50. package/build/main/lib/agent-core/proxy.js +77 -61
  51. package/build/main/lib/agent-core/types.d.ts +16 -16
  52. package/build/main/lib/tools/PSRetrievalTool.d.ts +127 -0
  53. package/build/main/lib/tools/PSRetrievalTool.js +172 -0
  54. package/build/main/lib/utils/helpers.d.ts +34 -0
  55. package/build/main/lib/utils/helpers.js +280 -1
  56. package/build/module/index.d.ts +1 -0
  57. package/build/module/index.js +2 -1
  58. package/build/module/lib/PSAI.d.ts +11 -2
  59. package/build/module/lib/PSAI.js +145 -28
  60. package/build/module/lib/agent-core/agent-loop.d.ts +2 -2
  61. package/build/module/lib/agent-core/agent-loop.js +69 -65
  62. package/build/module/lib/agent-core/agent.d.ts +8 -8
  63. package/build/module/lib/agent-core/agent.js +61 -44
  64. package/build/module/lib/agent-core/harness/agent-harness.d.ts +4 -4
  65. package/build/module/lib/agent-core/harness/agent-harness.js +156 -112
  66. package/build/module/lib/agent-core/harness/compaction/branch-summarization.d.ts +5 -5
  67. package/build/module/lib/agent-core/harness/compaction/branch-summarization.js +31 -28
  68. package/build/module/lib/agent-core/harness/compaction/compaction.d.ts +5 -5
  69. package/build/module/lib/agent-core/harness/compaction/compaction.js +99 -78
  70. package/build/module/lib/agent-core/harness/compaction/utils.d.ts +2 -2
  71. package/build/module/lib/agent-core/harness/compaction/utils.js +30 -30
  72. package/build/module/lib/agent-core/harness/env/nodejs.d.ts +1 -1
  73. package/build/module/lib/agent-core/harness/env/nodejs.js +80 -75
  74. package/build/module/lib/agent-core/harness/execution-env.d.ts +3 -3
  75. package/build/module/lib/agent-core/harness/execution-env.js +3 -3
  76. package/build/module/lib/agent-core/harness/messages.d.ts +7 -7
  77. package/build/module/lib/agent-core/harness/messages.js +36 -22
  78. package/build/module/lib/agent-core/harness/prompt-templates.d.ts +2 -2
  79. package/build/module/lib/agent-core/harness/prompt-templates.js +31 -27
  80. package/build/module/lib/agent-core/harness/session/repo/jsonl.d.ts +2 -2
  81. package/build/module/lib/agent-core/harness/session/repo/jsonl.js +17 -11
  82. package/build/module/lib/agent-core/harness/session/repo/memory.d.ts +2 -2
  83. package/build/module/lib/agent-core/harness/session/repo/memory.js +8 -4
  84. package/build/module/lib/agent-core/harness/session/repo/shared.d.ts +3 -3
  85. package/build/module/lib/agent-core/harness/session/repo/shared.js +5 -5
  86. package/build/module/lib/agent-core/harness/session/session.d.ts +3 -3
  87. package/build/module/lib/agent-core/harness/session/session.js +26 -23
  88. package/build/module/lib/agent-core/harness/session/storage/jsonl.d.ts +2 -2
  89. package/build/module/lib/agent-core/harness/session/storage/jsonl.js +11 -11
  90. package/build/module/lib/agent-core/harness/session/storage/memory.d.ts +2 -2
  91. package/build/module/lib/agent-core/harness/session/storage/memory.js +10 -6
  92. package/build/module/lib/agent-core/harness/skills.d.ts +2 -2
  93. package/build/module/lib/agent-core/harness/skills.js +55 -48
  94. package/build/module/lib/agent-core/harness/system-prompt.d.ts +1 -1
  95. package/build/module/lib/agent-core/harness/system-prompt.js +16 -16
  96. package/build/module/lib/agent-core/harness/types.d.ts +43 -43
  97. package/build/module/lib/agent-core/harness/types.js +2 -2
  98. package/build/module/lib/agent-core/harness/utils/shell-output.d.ts +2 -2
  99. package/build/module/lib/agent-core/harness/utils/shell-output.js +18 -14
  100. package/build/module/lib/agent-core/harness/utils/truncate.d.ts +1 -1
  101. package/build/module/lib/agent-core/harness/utils/truncate.js +27 -24
  102. package/build/module/lib/agent-core/index.d.ts +19 -19
  103. package/build/module/lib/agent-core/index.js +20 -20
  104. package/build/module/lib/agent-core/proxy.d.ts +18 -18
  105. package/build/module/lib/agent-core/proxy.js +77 -61
  106. package/build/module/lib/agent-core/types.d.ts +16 -16
  107. package/build/module/lib/tools/PSRetrievalTool.d.ts +127 -0
  108. package/build/module/lib/tools/PSRetrievalTool.js +172 -0
  109. package/build/module/lib/utils/helpers.d.ts +34 -0
  110. package/build/module/lib/utils/helpers.js +280 -1
  111. package/package.json +1 -1
@@ -4,10 +4,10 @@
4
4
  * Pure functions for compaction logic. The session manager handles I/O,
5
5
  * and after compaction the session is reloaded.
6
6
  */
7
- import { completeSimple } from "@earendil-works/pi-ai";
8
- import { convertToLlm, createBranchSummaryMessage, createCompactionSummaryMessage, createCustomMessage, } from "../messages.js";
9
- import { buildSessionContext } from "../session/session.js";
10
- import { computeFileLists, createFileOps, extractFileOpsFromMessage, formatFileOperations, SUMMARIZATION_SYSTEM_PROMPT, serializeConversation, } from "./utils.js";
7
+ import { completeSimple } from '@earendil-works/pi-ai';
8
+ import { convertToLlm, createBranchSummaryMessage, createCompactionSummaryMessage, createCustomMessage, } from '../messages.js';
9
+ import { buildSessionContext } from '../session/session.js';
10
+ import { computeFileLists, createFileOps, extractFileOpsFromMessage, formatFileOperations, serializeConversation, SUMMARIZATION_SYSTEM_PROMPT, } from './utils.js';
11
11
  /**
12
12
  * Extract file operations from messages and previous compaction entries.
13
13
  */
@@ -43,22 +43,22 @@ function extractFileOperations(messages, entries, prevCompactionIndex) {
43
43
  * Returns undefined for entries that don't contribute to LLM context.
44
44
  */
45
45
  function getMessageFromEntry(entry) {
46
- if (entry.type === "message") {
46
+ if (entry.type === 'message') {
47
47
  return entry.message;
48
48
  }
49
- if (entry.type === "custom_message") {
49
+ if (entry.type === 'custom_message') {
50
50
  return createCustomMessage(entry.customType, entry.content, entry.display, entry.details, entry.timestamp);
51
51
  }
52
- if (entry.type === "branch_summary") {
52
+ if (entry.type === 'branch_summary') {
53
53
  return createBranchSummaryMessage(entry.summary, entry.fromId, entry.timestamp);
54
54
  }
55
- if (entry.type === "compaction") {
55
+ if (entry.type === 'compaction') {
56
56
  return createCompactionSummaryMessage(entry.summary, entry.tokensBefore, entry.timestamp);
57
57
  }
58
58
  return undefined;
59
59
  }
60
60
  function getMessageFromEntryForCompaction(entry) {
61
- if (entry.type === "compaction") {
61
+ if (entry.type === 'compaction') {
62
62
  return undefined;
63
63
  }
64
64
  return getMessageFromEntry(entry);
@@ -76,16 +76,19 @@ export const DEFAULT_COMPACTION_SETTINGS = {
76
76
  * Uses the native totalTokens field when available, falls back to computing from components.
77
77
  */
78
78
  export function calculateContextTokens(usage) {
79
- return usage.totalTokens || usage.input + usage.output + usage.cacheRead + usage.cacheWrite;
79
+ return (usage.totalTokens ||
80
+ usage.input + usage.output + usage.cacheRead + usage.cacheWrite);
80
81
  }
81
82
  /**
82
83
  * Get usage from an assistant message if available.
83
84
  * Skips aborted and error messages as they don't have valid usage data.
84
85
  */
85
86
  function getAssistantUsage(msg) {
86
- if (msg.role === "assistant" && "usage" in msg) {
87
+ if (msg.role === 'assistant' && 'usage' in msg) {
87
88
  const assistantMsg = msg;
88
- if (assistantMsg.stopReason !== "aborted" && assistantMsg.stopReason !== "error" && assistantMsg.usage) {
89
+ if (assistantMsg.stopReason !== 'aborted' &&
90
+ assistantMsg.stopReason !== 'error' &&
91
+ assistantMsg.usage) {
89
92
  return assistantMsg.usage;
90
93
  }
91
94
  }
@@ -97,7 +100,7 @@ function getAssistantUsage(msg) {
97
100
  export function getLastAssistantUsage(entries) {
98
101
  for (let i = entries.length - 1; i >= 0; i--) {
99
102
  const entry = entries[i];
100
- if (entry.type === "message") {
103
+ if (entry.type === 'message') {
101
104
  const usage = getAssistantUsage(entry.message);
102
105
  if (usage)
103
106
  return usage;
@@ -161,58 +164,58 @@ export function shouldCompact(contextTokens, contextWindow, settings) {
161
164
  export function estimateTokens(message) {
162
165
  let chars = 0;
163
166
  switch (message.role) {
164
- case "user": {
167
+ case 'user': {
165
168
  const content = message.content;
166
- if (typeof content === "string") {
169
+ if (typeof content === 'string') {
167
170
  chars = content.length;
168
171
  }
169
172
  else if (Array.isArray(content)) {
170
173
  for (const block of content) {
171
- if (block.type === "text" && block.text) {
174
+ if (block.type === 'text' && block.text) {
172
175
  chars += block.text.length;
173
176
  }
174
177
  }
175
178
  }
176
179
  return Math.ceil(chars / 4);
177
180
  }
178
- case "assistant": {
181
+ case 'assistant': {
179
182
  const assistant = message;
180
183
  for (const block of assistant.content) {
181
- if (block.type === "text") {
184
+ if (block.type === 'text') {
182
185
  chars += block.text.length;
183
186
  }
184
- else if (block.type === "thinking") {
187
+ else if (block.type === 'thinking') {
185
188
  chars += block.thinking.length;
186
189
  }
187
- else if (block.type === "toolCall") {
190
+ else if (block.type === 'toolCall') {
188
191
  chars += block.name.length + JSON.stringify(block.arguments).length;
189
192
  }
190
193
  }
191
194
  return Math.ceil(chars / 4);
192
195
  }
193
- case "custom":
194
- case "toolResult": {
195
- if (typeof message.content === "string") {
196
+ case 'custom':
197
+ case 'toolResult': {
198
+ if (typeof message.content === 'string') {
196
199
  chars = message.content.length;
197
200
  }
198
201
  else {
199
202
  for (const block of message.content) {
200
- if (block.type === "text" && block.text) {
203
+ if (block.type === 'text' && block.text) {
201
204
  chars += block.text.length;
202
205
  }
203
- if (block.type === "image") {
206
+ if (block.type === 'image') {
204
207
  chars += 4800; // Estimate images as 4000 chars, or 1200 tokens
205
208
  }
206
209
  }
207
210
  }
208
211
  return Math.ceil(chars / 4);
209
212
  }
210
- case "bashExecution": {
213
+ case 'bashExecution': {
211
214
  chars = message.command.length + message.output.length;
212
215
  return Math.ceil(chars / 4);
213
216
  }
214
- case "branchSummary":
215
- case "compactionSummary": {
217
+ case 'branchSummary':
218
+ case 'compactionSummary': {
216
219
  chars = message.summary.length;
217
220
  return Math.ceil(chars / 4);
218
221
  }
@@ -231,34 +234,34 @@ function findValidCutPoints(entries, startIndex, endIndex) {
231
234
  for (let i = startIndex; i < endIndex; i++) {
232
235
  const entry = entries[i];
233
236
  switch (entry.type) {
234
- case "message": {
237
+ case 'message': {
235
238
  const role = entry.message.role;
236
239
  switch (role) {
237
- case "bashExecution":
238
- case "custom":
239
- case "branchSummary":
240
- case "compactionSummary":
241
- case "user":
242
- case "assistant":
240
+ case 'bashExecution':
241
+ case 'custom':
242
+ case 'branchSummary':
243
+ case 'compactionSummary':
244
+ case 'user':
245
+ case 'assistant':
243
246
  cutPoints.push(i);
244
247
  break;
245
- case "toolResult":
248
+ case 'toolResult':
246
249
  break;
247
250
  }
248
251
  break;
249
252
  }
250
- case "thinking_level_change":
251
- case "model_change":
252
- case "compaction":
253
- case "branch_summary":
254
- case "custom":
255
- case "custom_message":
256
- case "label":
257
- case "session_info":
253
+ case 'thinking_level_change':
254
+ case 'model_change':
255
+ case 'compaction':
256
+ case 'branch_summary':
257
+ case 'custom':
258
+ case 'custom_message':
259
+ case 'label':
260
+ case 'session_info':
258
261
  break;
259
262
  }
260
263
  // branch_summary and custom_message are user-role messages, valid cut points
261
- if (entry.type === "branch_summary" || entry.type === "custom_message") {
264
+ if (entry.type === 'branch_summary' || entry.type === 'custom_message') {
262
265
  cutPoints.push(i);
263
266
  }
264
267
  }
@@ -273,12 +276,12 @@ export function findTurnStartIndex(entries, entryIndex, startIndex) {
273
276
  for (let i = entryIndex; i >= startIndex; i--) {
274
277
  const entry = entries[i];
275
278
  // branch_summary and custom_message are user-role messages, can start a turn
276
- if (entry.type === "branch_summary" || entry.type === "custom_message") {
279
+ if (entry.type === 'branch_summary' || entry.type === 'custom_message') {
277
280
  return i;
278
281
  }
279
- if (entry.type === "message") {
282
+ if (entry.type === 'message') {
280
283
  const role = entry.message.role;
281
- if (role === "user" || role === "bashExecution") {
284
+ if (role === 'user' || role === 'bashExecution') {
282
285
  return i;
283
286
  }
284
287
  }
@@ -304,14 +307,18 @@ export function findTurnStartIndex(entries, entryIndex, startIndex) {
304
307
  export function findCutPoint(entries, startIndex, endIndex, keepRecentTokens) {
305
308
  const cutPoints = findValidCutPoints(entries, startIndex, endIndex);
306
309
  if (cutPoints.length === 0) {
307
- return { firstKeptEntryIndex: startIndex, turnStartIndex: -1, isSplitTurn: false };
310
+ return {
311
+ firstKeptEntryIndex: startIndex,
312
+ turnStartIndex: -1,
313
+ isSplitTurn: false,
314
+ };
308
315
  }
309
316
  // Walk backwards from newest, accumulating estimated message sizes
310
317
  let accumulatedTokens = 0;
311
318
  let cutIndex = cutPoints[0]; // Default: keep from first message (not header)
312
319
  for (let i = endIndex - 1; i >= startIndex; i--) {
313
320
  const entry = entries[i];
314
- if (entry.type !== "message")
321
+ if (entry.type !== 'message')
315
322
  continue;
316
323
  // Estimate this message's size
317
324
  const messageTokens = estimateTokens(entry.message);
@@ -332,10 +339,10 @@ export function findCutPoint(entries, startIndex, endIndex, keepRecentTokens) {
332
339
  while (cutIndex > startIndex) {
333
340
  const prevEntry = entries[cutIndex - 1];
334
341
  // Stop at session header or compaction boundaries
335
- if (prevEntry.type === "compaction") {
342
+ if (prevEntry.type === 'compaction') {
336
343
  break;
337
344
  }
338
- if (prevEntry.type === "message") {
345
+ if (prevEntry.type === 'message') {
339
346
  // Stop if we hit any message
340
347
  break;
341
348
  }
@@ -344,8 +351,10 @@ export function findCutPoint(entries, startIndex, endIndex, keepRecentTokens) {
344
351
  }
345
352
  // Determine if this is a split turn
346
353
  const cutEntry = entries[cutIndex];
347
- const isUserMessage = cutEntry.type === "message" && cutEntry.message.role === "user";
348
- const turnStartIndex = isUserMessage ? -1 : findTurnStartIndex(entries, cutIndex, startIndex);
354
+ const isUserMessage = cutEntry.type === 'message' && cutEntry.message.role === 'user';
355
+ const turnStartIndex = isUserMessage
356
+ ? -1
357
+ : findTurnStartIndex(entries, cutIndex, startIndex);
349
358
  return {
350
359
  firstKeptEntryIndex: cutIndex,
351
360
  turnStartIndex,
@@ -432,7 +441,9 @@ Keep each section concise. Preserve exact file paths, function names, and error
432
441
  export async function generateSummary(currentMessages, model, reserveTokens, apiKey, headers, signal, customInstructions, previousSummary, thinkingLevel) {
433
442
  const maxTokens = Math.floor(0.8 * reserveTokens);
434
443
  // Use update prompt if we have a previous summary, otherwise initial prompt
435
- let basePrompt = previousSummary ? UPDATE_SUMMARIZATION_PROMPT : SUMMARIZATION_PROMPT;
444
+ let basePrompt = previousSummary
445
+ ? UPDATE_SUMMARIZATION_PROMPT
446
+ : SUMMARIZATION_PROMPT;
436
447
  if (customInstructions) {
437
448
  basePrompt = `${basePrompt}\n\nAdditional focus: ${customInstructions}`;
438
449
  }
@@ -448,31 +459,35 @@ export async function generateSummary(currentMessages, model, reserveTokens, api
448
459
  promptText += basePrompt;
449
460
  const summarizationMessages = [
450
461
  {
451
- role: "user",
452
- content: [{ type: "text", text: promptText }],
462
+ role: 'user',
463
+ content: [{ type: 'text', text: promptText }],
453
464
  timestamp: Date.now(),
454
465
  },
455
466
  ];
456
- const completionOptions = model.reasoning && thinkingLevel && thinkingLevel !== "off"
467
+ const completionOptions = model.reasoning && thinkingLevel && thinkingLevel !== 'off'
457
468
  ? { maxTokens, signal, apiKey, headers, reasoning: thinkingLevel }
458
469
  : { maxTokens, signal, apiKey, headers };
459
- const response = await completeSimple(model, { systemPrompt: SUMMARIZATION_SYSTEM_PROMPT, messages: summarizationMessages }, completionOptions);
460
- if (response.stopReason === "error") {
461
- throw new Error(`Summarization failed: ${response.errorMessage || "Unknown error"}`);
470
+ const response = await completeSimple(model, {
471
+ systemPrompt: SUMMARIZATION_SYSTEM_PROMPT,
472
+ messages: summarizationMessages,
473
+ }, completionOptions);
474
+ if (response.stopReason === 'error') {
475
+ throw new Error(`Summarization failed: ${response.errorMessage || 'Unknown error'}`);
462
476
  }
463
477
  const textContent = response.content
464
- .filter((c) => c.type === "text")
478
+ .filter((c) => c.type === 'text')
465
479
  .map((c) => c.text)
466
- .join("\n");
480
+ .join('\n');
467
481
  return textContent;
468
482
  }
469
483
  export function prepareCompaction(pathEntries, settings) {
470
- if (pathEntries.length > 0 && pathEntries[pathEntries.length - 1].type === "compaction") {
484
+ if (pathEntries.length > 0 &&
485
+ pathEntries[pathEntries.length - 1].type === 'compaction') {
471
486
  return undefined;
472
487
  }
473
488
  let prevCompactionIndex = -1;
474
489
  for (let i = pathEntries.length - 1; i >= 0; i--) {
475
- if (pathEntries[i].type === "compaction") {
490
+ if (pathEntries[i].type === 'compaction') {
476
491
  prevCompactionIndex = i;
477
492
  break;
478
493
  }
@@ -483,7 +498,8 @@ export function prepareCompaction(pathEntries, settings) {
483
498
  const prevCompaction = pathEntries[prevCompactionIndex];
484
499
  previousSummary = prevCompaction.summary;
485
500
  const firstKeptEntryIndex = pathEntries.findIndex((entry) => entry.id === prevCompaction.firstKeptEntryId);
486
- boundaryStart = firstKeptEntryIndex >= 0 ? firstKeptEntryIndex : prevCompactionIndex + 1;
501
+ boundaryStart =
502
+ firstKeptEntryIndex >= 0 ? firstKeptEntryIndex : prevCompactionIndex + 1;
487
503
  }
488
504
  const boundaryEnd = pathEntries.length;
489
505
  const tokensBefore = estimateContextTokens(buildSessionContext(pathEntries).messages).tokens;
@@ -494,7 +510,9 @@ export function prepareCompaction(pathEntries, settings) {
494
510
  return undefined; // Session needs migration
495
511
  }
496
512
  const firstKeptEntryId = firstKeptEntry.id;
497
- const historyEnd = cutPoint.isSplitTurn ? cutPoint.turnStartIndex : cutPoint.firstKeptEntryIndex;
513
+ const historyEnd = cutPoint.isSplitTurn
514
+ ? cutPoint.turnStartIndex
515
+ : cutPoint.firstKeptEntryIndex;
498
516
  // Messages to summarize (will be discarded after summary)
499
517
  const messagesToSummarize = [];
500
518
  for (let i = boundaryStart; i < historyEnd; i++) {
@@ -554,7 +572,7 @@ Be concise. Focus on what's needed to understand the kept suffix.`;
554
572
  * @param preparation - Pre-calculated preparation from prepareCompaction()
555
573
  * @param customInstructions - Optional custom focus for the summary
556
574
  */
557
- export { serializeConversation } from "./utils.js";
575
+ export { serializeConversation } from './utils.js';
558
576
  export async function compact(preparation, model, apiKey, headers, customInstructions, signal, thinkingLevel) {
559
577
  const { firstKeptEntryId, messagesToSummarize, turnPrefixMessages, isSplitTurn, tokensBefore, previousSummary, fileOps, settings, } = preparation;
560
578
  // Generate summaries (can be parallel if both needed) and merge into one
@@ -564,7 +582,7 @@ export async function compact(preparation, model, apiKey, headers, customInstruc
564
582
  const [historyResult, turnPrefixResult] = await Promise.all([
565
583
  messagesToSummarize.length > 0
566
584
  ? generateSummary(messagesToSummarize, model, settings.reserveTokens, apiKey, headers, signal, customInstructions, previousSummary, thinkingLevel)
567
- : Promise.resolve("No prior history."),
585
+ : Promise.resolve('No prior history.'),
568
586
  generateTurnPrefixSummary(turnPrefixMessages, model, settings.reserveTokens, apiKey, headers, signal, thinkingLevel),
569
587
  ]);
570
588
  // Merge into single summary
@@ -578,7 +596,7 @@ export async function compact(preparation, model, apiKey, headers, customInstruc
578
596
  const { readFiles, modifiedFiles } = computeFileLists(fileOps);
579
597
  summary += formatFileOperations(readFiles, modifiedFiles);
580
598
  if (!firstKeptEntryId) {
581
- throw new Error("First kept entry has no UUID - session may need migration");
599
+ throw new Error('First kept entry has no UUID - session may need migration');
582
600
  }
583
601
  return {
584
602
  summary,
@@ -597,20 +615,23 @@ async function generateTurnPrefixSummary(messages, model, reserveTokens, apiKey,
597
615
  const promptText = `<conversation>\n${conversationText}\n</conversation>\n\n${TURN_PREFIX_SUMMARIZATION_PROMPT}`;
598
616
  const summarizationMessages = [
599
617
  {
600
- role: "user",
601
- content: [{ type: "text", text: promptText }],
618
+ role: 'user',
619
+ content: [{ type: 'text', text: promptText }],
602
620
  timestamp: Date.now(),
603
621
  },
604
622
  ];
605
- const response = await completeSimple(model, { systemPrompt: SUMMARIZATION_SYSTEM_PROMPT, messages: summarizationMessages }, model.reasoning && thinkingLevel && thinkingLevel !== "off"
623
+ const response = await completeSimple(model, {
624
+ systemPrompt: SUMMARIZATION_SYSTEM_PROMPT,
625
+ messages: summarizationMessages,
626
+ }, model.reasoning && thinkingLevel && thinkingLevel !== 'off'
606
627
  ? { maxTokens, signal, apiKey, headers, reasoning: thinkingLevel }
607
628
  : { maxTokens, signal, apiKey, headers });
608
- if (response.stopReason === "error") {
609
- throw new Error(`Turn prefix summarization failed: ${response.errorMessage || "Unknown error"}`);
629
+ if (response.stopReason === 'error') {
630
+ throw new Error(`Turn prefix summarization failed: ${response.errorMessage || 'Unknown error'}`);
610
631
  }
611
632
  return response.content
612
- .filter((c) => c.type === "text")
633
+ .filter((c) => c.type === 'text')
613
634
  .map((c) => c.text)
614
- .join("\n");
635
+ .join('\n');
615
636
  }
616
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGFjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvYWdlbnQtY29yZS9oYXJuZXNzL2NvbXBhY3Rpb24vY29tcGFjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUdILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV2RCxPQUFPLEVBQ04sWUFBWSxFQUNaLDBCQUEwQixFQUMxQiw4QkFBOEIsRUFDOUIsbUJBQW1CLEdBQ25CLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFNUQsT0FBTyxFQUNOLGdCQUFnQixFQUNoQixhQUFhLEVBQ2IseUJBQXlCLEVBRXpCLG9CQUFvQixFQUNwQiwyQkFBMkIsRUFDM0IscUJBQXFCLEdBQ3JCLE1BQU0sWUFBWSxDQUFDO0FBWXBCOztHQUVHO0FBQ0gsU0FBUyxxQkFBcUIsQ0FDN0IsUUFBd0IsRUFDeEIsT0FBMkIsRUFDM0IsbUJBQTJCO0lBRTNCLE1BQU0sT0FBTyxHQUFHLGFBQWEsRUFBRSxDQUFDO0lBRWhDLCtEQUErRDtJQUMvRCxJQUFJLG1CQUFtQixJQUFJLENBQUMsRUFBRSxDQUFDO1FBQzlCLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBb0IsQ0FBQztRQUN2RSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsSUFBSSxjQUFjLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDeEQscURBQXFEO1lBQ3JELE1BQU0sT0FBTyxHQUFHLGNBQWMsQ0FBQyxPQUE0QixDQUFDO1lBQzVELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztnQkFDdEMsS0FBSyxNQUFNLENBQUMsSUFBSSxPQUFPLENBQUMsU0FBUztvQkFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcs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
637
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGFjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvYWdlbnQtY29yZS9oYXJuZXNzL2NvbXBhY3Rpb24vY29tcGFjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQVNILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUd2RCxPQUFPLEVBQ0wsWUFBWSxFQUNaLDBCQUEwQixFQUMxQiw4QkFBOEIsRUFDOUIsbUJBQW1CLEdBQ3BCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHNUQsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixhQUFhLEVBQ2IseUJBQXlCLEVBRXpCLG9CQUFvQixFQUNwQixxQkFBcUIsRUFDckIsMkJBQTJCLEdBQzVCLE1BQU0sWUFBWSxDQUFDO0FBWXBCOztHQUVHO0FBQ0gsU0FBUyxxQkFBcUIsQ0FDNUIsUUFBd0IsRUFDeEIsT0FBMkIsRUFDM0IsbUJBQTJCO0lBRTNCLE1BQU0sT0FBTyxHQUFHLGFBQWEsRUFBRSxDQUFDO0lBRWhDLCtEQUErRDtJQUMvRCxJQUFJLG1CQUFtQixJQUFJLENBQUMsRUFBRSxDQUFDO1FBQzdCLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBb0IsQ0FBQztRQUN2RSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsSUFBSSxjQUFjLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDdkQscURBQXFEO1lBQ3JELE1BQU0sT0FBTyxHQUFHLGNBQWMsQ0FBQyxPQUE0QixDQUFDO1lBQzVELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztnQkFDckMsS0FBSyxNQUFNLENBQUMsSUFBSSxPQUFPLENBQUMsU0FBUztvQkFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcs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
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * Shared utilities for compaction and branch summarization.
3
3
  */
4
- import type { Message } from "@earendil-works/pi-ai";
5
- import type { AgentMessage } from "../../types.js";
4
+ import type { Message } from '@earendil-works/pi-ai';
5
+ import type { AgentMessage } from '../../types.js';
6
6
  export interface FileOperations {
7
7
  read: Set<string>;
8
8
  written: Set<string>;