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.
- package/build/main/index.d.ts +1 -0
- package/build/main/index.js +2 -1
- package/build/main/lib/PSAI.d.ts +11 -2
- package/build/main/lib/PSAI.js +145 -28
- package/build/main/lib/agent-core/agent-loop.d.ts +2 -2
- package/build/main/lib/agent-core/agent-loop.js +69 -65
- package/build/main/lib/agent-core/agent.d.ts +8 -8
- package/build/main/lib/agent-core/agent.js +61 -44
- package/build/main/lib/agent-core/harness/agent-harness.d.ts +4 -4
- package/build/main/lib/agent-core/harness/agent-harness.js +156 -112
- package/build/main/lib/agent-core/harness/compaction/branch-summarization.d.ts +5 -5
- package/build/main/lib/agent-core/harness/compaction/branch-summarization.js +31 -28
- package/build/main/lib/agent-core/harness/compaction/compaction.d.ts +5 -5
- package/build/main/lib/agent-core/harness/compaction/compaction.js +99 -78
- package/build/main/lib/agent-core/harness/compaction/utils.d.ts +2 -2
- package/build/main/lib/agent-core/harness/compaction/utils.js +30 -30
- package/build/main/lib/agent-core/harness/env/nodejs.d.ts +1 -1
- package/build/main/lib/agent-core/harness/env/nodejs.js +80 -75
- package/build/main/lib/agent-core/harness/execution-env.d.ts +3 -3
- package/build/main/lib/agent-core/harness/execution-env.js +3 -3
- package/build/main/lib/agent-core/harness/messages.d.ts +7 -7
- package/build/main/lib/agent-core/harness/messages.js +36 -22
- package/build/main/lib/agent-core/harness/prompt-templates.d.ts +2 -2
- package/build/main/lib/agent-core/harness/prompt-templates.js +31 -27
- package/build/main/lib/agent-core/harness/session/repo/jsonl.d.ts +2 -2
- package/build/main/lib/agent-core/harness/session/repo/jsonl.js +17 -11
- package/build/main/lib/agent-core/harness/session/repo/memory.d.ts +2 -2
- package/build/main/lib/agent-core/harness/session/repo/memory.js +8 -4
- package/build/main/lib/agent-core/harness/session/repo/shared.d.ts +3 -3
- package/build/main/lib/agent-core/harness/session/repo/shared.js +5 -5
- package/build/main/lib/agent-core/harness/session/session.d.ts +3 -3
- package/build/main/lib/agent-core/harness/session/session.js +26 -23
- package/build/main/lib/agent-core/harness/session/storage/jsonl.d.ts +2 -2
- package/build/main/lib/agent-core/harness/session/storage/jsonl.js +11 -11
- package/build/main/lib/agent-core/harness/session/storage/memory.d.ts +2 -2
- package/build/main/lib/agent-core/harness/session/storage/memory.js +10 -6
- package/build/main/lib/agent-core/harness/skills.d.ts +2 -2
- package/build/main/lib/agent-core/harness/skills.js +55 -48
- package/build/main/lib/agent-core/harness/system-prompt.d.ts +1 -1
- package/build/main/lib/agent-core/harness/system-prompt.js +16 -16
- package/build/main/lib/agent-core/harness/types.d.ts +43 -43
- package/build/main/lib/agent-core/harness/types.js +2 -2
- package/build/main/lib/agent-core/harness/utils/shell-output.d.ts +2 -2
- package/build/main/lib/agent-core/harness/utils/shell-output.js +18 -14
- package/build/main/lib/agent-core/harness/utils/truncate.d.ts +1 -1
- package/build/main/lib/agent-core/harness/utils/truncate.js +27 -24
- package/build/main/lib/agent-core/index.d.ts +19 -19
- package/build/main/lib/agent-core/index.js +20 -20
- package/build/main/lib/agent-core/proxy.d.ts +18 -18
- package/build/main/lib/agent-core/proxy.js +77 -61
- package/build/main/lib/agent-core/types.d.ts +16 -16
- package/build/main/lib/tools/PSRetrievalTool.d.ts +127 -0
- package/build/main/lib/tools/PSRetrievalTool.js +172 -0
- package/build/main/lib/utils/helpers.d.ts +34 -0
- package/build/main/lib/utils/helpers.js +280 -1
- package/build/module/index.d.ts +1 -0
- package/build/module/index.js +2 -1
- package/build/module/lib/PSAI.d.ts +11 -2
- package/build/module/lib/PSAI.js +145 -28
- package/build/module/lib/agent-core/agent-loop.d.ts +2 -2
- package/build/module/lib/agent-core/agent-loop.js +69 -65
- package/build/module/lib/agent-core/agent.d.ts +8 -8
- package/build/module/lib/agent-core/agent.js +61 -44
- package/build/module/lib/agent-core/harness/agent-harness.d.ts +4 -4
- package/build/module/lib/agent-core/harness/agent-harness.js +156 -112
- package/build/module/lib/agent-core/harness/compaction/branch-summarization.d.ts +5 -5
- package/build/module/lib/agent-core/harness/compaction/branch-summarization.js +31 -28
- package/build/module/lib/agent-core/harness/compaction/compaction.d.ts +5 -5
- package/build/module/lib/agent-core/harness/compaction/compaction.js +99 -78
- package/build/module/lib/agent-core/harness/compaction/utils.d.ts +2 -2
- package/build/module/lib/agent-core/harness/compaction/utils.js +30 -30
- package/build/module/lib/agent-core/harness/env/nodejs.d.ts +1 -1
- package/build/module/lib/agent-core/harness/env/nodejs.js +80 -75
- package/build/module/lib/agent-core/harness/execution-env.d.ts +3 -3
- package/build/module/lib/agent-core/harness/execution-env.js +3 -3
- package/build/module/lib/agent-core/harness/messages.d.ts +7 -7
- package/build/module/lib/agent-core/harness/messages.js +36 -22
- package/build/module/lib/agent-core/harness/prompt-templates.d.ts +2 -2
- package/build/module/lib/agent-core/harness/prompt-templates.js +31 -27
- package/build/module/lib/agent-core/harness/session/repo/jsonl.d.ts +2 -2
- package/build/module/lib/agent-core/harness/session/repo/jsonl.js +17 -11
- package/build/module/lib/agent-core/harness/session/repo/memory.d.ts +2 -2
- package/build/module/lib/agent-core/harness/session/repo/memory.js +8 -4
- package/build/module/lib/agent-core/harness/session/repo/shared.d.ts +3 -3
- package/build/module/lib/agent-core/harness/session/repo/shared.js +5 -5
- package/build/module/lib/agent-core/harness/session/session.d.ts +3 -3
- package/build/module/lib/agent-core/harness/session/session.js +26 -23
- package/build/module/lib/agent-core/harness/session/storage/jsonl.d.ts +2 -2
- package/build/module/lib/agent-core/harness/session/storage/jsonl.js +11 -11
- package/build/module/lib/agent-core/harness/session/storage/memory.d.ts +2 -2
- package/build/module/lib/agent-core/harness/session/storage/memory.js +10 -6
- package/build/module/lib/agent-core/harness/skills.d.ts +2 -2
- package/build/module/lib/agent-core/harness/skills.js +55 -48
- package/build/module/lib/agent-core/harness/system-prompt.d.ts +1 -1
- package/build/module/lib/agent-core/harness/system-prompt.js +16 -16
- package/build/module/lib/agent-core/harness/types.d.ts +43 -43
- package/build/module/lib/agent-core/harness/types.js +2 -2
- package/build/module/lib/agent-core/harness/utils/shell-output.d.ts +2 -2
- package/build/module/lib/agent-core/harness/utils/shell-output.js +18 -14
- package/build/module/lib/agent-core/harness/utils/truncate.d.ts +1 -1
- package/build/module/lib/agent-core/harness/utils/truncate.js +27 -24
- package/build/module/lib/agent-core/index.d.ts +19 -19
- package/build/module/lib/agent-core/index.js +20 -20
- package/build/module/lib/agent-core/proxy.d.ts +18 -18
- package/build/module/lib/agent-core/proxy.js +77 -61
- package/build/module/lib/agent-core/types.d.ts +16 -16
- package/build/module/lib/tools/PSRetrievalTool.d.ts +127 -0
- package/build/module/lib/tools/PSRetrievalTool.js +172 -0
- package/build/module/lib/utils/helpers.d.ts +34 -0
- package/build/module/lib/utils/helpers.js +280 -1
- 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
|
|
8
|
-
import { convertToLlm, createBranchSummaryMessage, createCompactionSummaryMessage, createCustomMessage, } from
|
|
9
|
-
import { buildSessionContext } from
|
|
10
|
-
import { computeFileLists, createFileOps, extractFileOpsFromMessage, formatFileOperations,
|
|
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 ===
|
|
46
|
+
if (entry.type === 'message') {
|
|
47
47
|
return entry.message;
|
|
48
48
|
}
|
|
49
|
-
if (entry.type ===
|
|
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 ===
|
|
52
|
+
if (entry.type === 'branch_summary') {
|
|
53
53
|
return createBranchSummaryMessage(entry.summary, entry.fromId, entry.timestamp);
|
|
54
54
|
}
|
|
55
|
-
if (entry.type ===
|
|
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 ===
|
|
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 ||
|
|
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 ===
|
|
87
|
+
if (msg.role === 'assistant' && 'usage' in msg) {
|
|
87
88
|
const assistantMsg = msg;
|
|
88
|
-
if (assistantMsg.stopReason !==
|
|
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 ===
|
|
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
|
|
167
|
+
case 'user': {
|
|
165
168
|
const content = message.content;
|
|
166
|
-
if (typeof content ===
|
|
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 ===
|
|
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
|
|
181
|
+
case 'assistant': {
|
|
179
182
|
const assistant = message;
|
|
180
183
|
for (const block of assistant.content) {
|
|
181
|
-
if (block.type ===
|
|
184
|
+
if (block.type === 'text') {
|
|
182
185
|
chars += block.text.length;
|
|
183
186
|
}
|
|
184
|
-
else if (block.type ===
|
|
187
|
+
else if (block.type === 'thinking') {
|
|
185
188
|
chars += block.thinking.length;
|
|
186
189
|
}
|
|
187
|
-
else if (block.type ===
|
|
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
|
|
194
|
-
case
|
|
195
|
-
if (typeof message.content ===
|
|
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 ===
|
|
203
|
+
if (block.type === 'text' && block.text) {
|
|
201
204
|
chars += block.text.length;
|
|
202
205
|
}
|
|
203
|
-
if (block.type ===
|
|
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
|
|
213
|
+
case 'bashExecution': {
|
|
211
214
|
chars = message.command.length + message.output.length;
|
|
212
215
|
return Math.ceil(chars / 4);
|
|
213
216
|
}
|
|
214
|
-
case
|
|
215
|
-
case
|
|
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
|
|
237
|
+
case 'message': {
|
|
235
238
|
const role = entry.message.role;
|
|
236
239
|
switch (role) {
|
|
237
|
-
case
|
|
238
|
-
case
|
|
239
|
-
case
|
|
240
|
-
case
|
|
241
|
-
case
|
|
242
|
-
case
|
|
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
|
|
248
|
+
case 'toolResult':
|
|
246
249
|
break;
|
|
247
250
|
}
|
|
248
251
|
break;
|
|
249
252
|
}
|
|
250
|
-
case
|
|
251
|
-
case
|
|
252
|
-
case
|
|
253
|
-
case
|
|
254
|
-
case
|
|
255
|
-
case
|
|
256
|
-
case
|
|
257
|
-
case
|
|
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 ===
|
|
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 ===
|
|
279
|
+
if (entry.type === 'branch_summary' || entry.type === 'custom_message') {
|
|
277
280
|
return i;
|
|
278
281
|
}
|
|
279
|
-
if (entry.type ===
|
|
282
|
+
if (entry.type === 'message') {
|
|
280
283
|
const role = entry.message.role;
|
|
281
|
-
if (role ===
|
|
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 {
|
|
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 !==
|
|
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 ===
|
|
342
|
+
if (prevEntry.type === 'compaction') {
|
|
336
343
|
break;
|
|
337
344
|
}
|
|
338
|
-
if (prevEntry.type ===
|
|
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 ===
|
|
348
|
-
const turnStartIndex = isUserMessage
|
|
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
|
|
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:
|
|
452
|
-
content: [{ type:
|
|
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 !==
|
|
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, {
|
|
460
|
-
|
|
461
|
-
|
|
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 ===
|
|
478
|
+
.filter((c) => c.type === 'text')
|
|
465
479
|
.map((c) => c.text)
|
|
466
|
-
.join(
|
|
480
|
+
.join('\n');
|
|
467
481
|
return textContent;
|
|
468
482
|
}
|
|
469
483
|
export function prepareCompaction(pathEntries, settings) {
|
|
470
|
-
if (pathEntries.length > 0 &&
|
|
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 ===
|
|
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 =
|
|
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
|
|
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
|
|
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(
|
|
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(
|
|
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:
|
|
601
|
-
content: [{ type:
|
|
618
|
+
role: 'user',
|
|
619
|
+
content: [{ type: 'text', text: promptText }],
|
|
602
620
|
timestamp: Date.now(),
|
|
603
621
|
},
|
|
604
622
|
];
|
|
605
|
-
const response = await completeSimple(model, {
|
|
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 ===
|
|
609
|
-
throw new Error(`Turn prefix summarization failed: ${response.errorMessage ||
|
|
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 ===
|
|
633
|
+
.filter((c) => c.type === 'text')
|
|
613
634
|
.map((c) => c.text)
|
|
614
|
-
.join(
|
|
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
|
|
5
|
-
import type { AgentMessage } from
|
|
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>;
|