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
|
@@ -10,7 +10,7 @@ export class FileError extends Error {
|
|
|
10
10
|
super(message, options);
|
|
11
11
|
this.code = code;
|
|
12
12
|
this.path = path;
|
|
13
|
-
this.name =
|
|
13
|
+
this.name = 'FileError';
|
|
14
14
|
}
|
|
15
15
|
}
|
|
16
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2FnZW50LWNvcmUvaGFybmVzcy90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFvR0EsNERBQTREO0FBQzVELE1BQU0sT0FBTyxTQUFVLFNBQVEsS0FBSztJQUd6QjtJQUdBO0lBTFQ7SUFDRSxzQ0FBc0M7SUFDL0IsSUFBbUIsRUFDMUIsT0FBZTtJQUNmLDJFQUEyRTtJQUNwRSxJQUFhLEVBQ3BCLE9BQXNCO1FBRXRCLEtBQUssQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFOakIsU0FBSSxHQUFKLElBQUksQ0FBZTtRQUduQixTQUFJLEdBQUosSUFBSSxDQUFTO1FBSXBCLElBQUksQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDO0lBQzFCLENBQUM7Q0FDRiJ9
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { ExecutionEnv, ExecutionEnvExecOptions } from
|
|
2
|
-
export interface ShellCaptureOptions extends Omit<ExecutionEnvExecOptions,
|
|
1
|
+
import type { ExecutionEnv, ExecutionEnvExecOptions } from '../types.js';
|
|
2
|
+
export interface ShellCaptureOptions extends Omit<ExecutionEnvExecOptions, 'onStdout' | 'onStderr'> {
|
|
3
3
|
onChunk?: (chunk: string) => void;
|
|
4
4
|
}
|
|
5
5
|
export interface ShellCaptureResult {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { randomBytes } from
|
|
2
|
-
import { createWriteStream } from
|
|
3
|
-
import { tmpdir } from
|
|
4
|
-
import { join } from
|
|
5
|
-
import { DEFAULT_MAX_BYTES, truncateTail } from
|
|
1
|
+
import { randomBytes } from 'node:crypto';
|
|
2
|
+
import { createWriteStream } from 'node:fs';
|
|
3
|
+
import { tmpdir } from 'node:os';
|
|
4
|
+
import { join } from 'node:path';
|
|
5
|
+
import { DEFAULT_MAX_BYTES, truncateTail } from './truncate.js';
|
|
6
6
|
export function sanitizeBinaryOutput(str) {
|
|
7
7
|
return Array.from(str)
|
|
8
8
|
.filter((char) => {
|
|
@@ -17,7 +17,7 @@ export function sanitizeBinaryOutput(str) {
|
|
|
17
17
|
return false;
|
|
18
18
|
return true;
|
|
19
19
|
})
|
|
20
|
-
.join(
|
|
20
|
+
.join('');
|
|
21
21
|
}
|
|
22
22
|
export async function executeShellWithCapture(env, command, options) {
|
|
23
23
|
const outputChunks = [];
|
|
@@ -29,7 +29,7 @@ export async function executeShellWithCapture(env, command, options) {
|
|
|
29
29
|
const ensureTempFile = () => {
|
|
30
30
|
if (tempFilePath)
|
|
31
31
|
return;
|
|
32
|
-
const id = randomBytes(8).toString(
|
|
32
|
+
const id = randomBytes(8).toString('hex');
|
|
33
33
|
tempFilePath = join(tmpdir(), `bash-${id}.log`);
|
|
34
34
|
tempFileStream = createWriteStream(tempFilePath);
|
|
35
35
|
for (const chunk of outputChunks) {
|
|
@@ -37,8 +37,8 @@ export async function executeShellWithCapture(env, command, options) {
|
|
|
37
37
|
}
|
|
38
38
|
};
|
|
39
39
|
const onChunk = (chunk) => {
|
|
40
|
-
totalBytes += Buffer.byteLength(chunk,
|
|
41
|
-
const text = sanitizeBinaryOutput(chunk).replace(/\r/g,
|
|
40
|
+
totalBytes += Buffer.byteLength(chunk, 'utf-8');
|
|
41
|
+
const text = sanitizeBinaryOutput(chunk).replace(/\r/g, '');
|
|
42
42
|
if (totalBytes > DEFAULT_MAX_BYTES) {
|
|
43
43
|
ensureTempFile();
|
|
44
44
|
}
|
|
@@ -59,7 +59,7 @@ export async function executeShellWithCapture(env, command, options) {
|
|
|
59
59
|
onStdout: onChunk,
|
|
60
60
|
onStderr: onChunk,
|
|
61
61
|
});
|
|
62
|
-
const fullOutput = outputChunks.join(
|
|
62
|
+
const fullOutput = outputChunks.join('');
|
|
63
63
|
const truncationResult = truncateTail(fullOutput);
|
|
64
64
|
if (truncationResult.truncated) {
|
|
65
65
|
ensureTempFile();
|
|
@@ -67,7 +67,9 @@ export async function executeShellWithCapture(env, command, options) {
|
|
|
67
67
|
tempFileStream?.end();
|
|
68
68
|
const cancelled = options?.signal?.aborted ?? false;
|
|
69
69
|
return {
|
|
70
|
-
output: truncationResult.truncated
|
|
70
|
+
output: truncationResult.truncated
|
|
71
|
+
? truncationResult.content
|
|
72
|
+
: fullOutput,
|
|
71
73
|
exitCode: cancelled ? undefined : result.exitCode,
|
|
72
74
|
cancelled,
|
|
73
75
|
truncated: truncationResult.truncated,
|
|
@@ -76,14 +78,16 @@ export async function executeShellWithCapture(env, command, options) {
|
|
|
76
78
|
}
|
|
77
79
|
catch (err) {
|
|
78
80
|
if (options?.signal?.aborted) {
|
|
79
|
-
const fullOutput = outputChunks.join(
|
|
81
|
+
const fullOutput = outputChunks.join('');
|
|
80
82
|
const truncationResult = truncateTail(fullOutput);
|
|
81
83
|
if (truncationResult.truncated) {
|
|
82
84
|
ensureTempFile();
|
|
83
85
|
}
|
|
84
86
|
tempFileStream?.end();
|
|
85
87
|
return {
|
|
86
|
-
output: truncationResult.truncated
|
|
88
|
+
output: truncationResult.truncated
|
|
89
|
+
? truncationResult.content
|
|
90
|
+
: fullOutput,
|
|
87
91
|
exitCode: undefined,
|
|
88
92
|
cancelled: true,
|
|
89
93
|
truncated: truncationResult.truncated,
|
|
@@ -94,4 +98,4 @@ export async function executeShellWithCapture(env, command, options) {
|
|
|
94
98
|
throw err;
|
|
95
99
|
}
|
|
96
100
|
}
|
|
97
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
101
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hlbGwtb3V0cHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9hZ2VudC1jb3JlL2hhcm5lc3MvdXRpbHMvc2hlbGwtb3V0cHV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDMUMsT0FBTyxFQUFFLGlCQUFpQixFQUFvQixNQUFNLFNBQVMsQ0FBQztBQUM5RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFJakMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQWlCaEUsTUFBTSxVQUFVLG9CQUFvQixDQUFDLEdBQVc7SUFDOUMsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztTQUNuQixNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUNmLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakMsSUFBSSxJQUFJLEtBQUssU0FBUztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ3JDLElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxJQUFJO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDakUsSUFBSSxJQUFJLElBQUksSUFBSTtZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQy9CLElBQUksSUFBSSxJQUFJLE1BQU0sSUFBSSxJQUFJLElBQUksTUFBTTtZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ25ELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQyxDQUFDO1NBQ0QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2QsQ0FBQztBQUVELE1BQU0sQ0FBQyxLQUFLLFVBQVUsdUJBQXVCLENBQzND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
|
|
@@ -16,7 +16,7 @@ export interface TruncationResult {
|
|
|
16
16
|
/** Whether truncation occurred */
|
|
17
17
|
truncated: boolean;
|
|
18
18
|
/** Which limit was hit: "lines", "bytes", or null if not truncated */
|
|
19
|
-
truncatedBy:
|
|
19
|
+
truncatedBy: 'lines' | 'bytes' | null;
|
|
20
20
|
/** Total number of lines in the original content */
|
|
21
21
|
totalLines: number;
|
|
22
22
|
/** Total number of bytes in the original content */
|
|
@@ -34,8 +34,8 @@ export function formatSize(bytes) {
|
|
|
34
34
|
export function truncateHead(content, options = {}) {
|
|
35
35
|
const maxLines = options.maxLines ?? DEFAULT_MAX_LINES;
|
|
36
36
|
const maxBytes = options.maxBytes ?? DEFAULT_MAX_BYTES;
|
|
37
|
-
const totalBytes = Buffer.byteLength(content,
|
|
38
|
-
const lines = content.split(
|
|
37
|
+
const totalBytes = Buffer.byteLength(content, 'utf-8');
|
|
38
|
+
const lines = content.split('\n');
|
|
39
39
|
const totalLines = lines.length;
|
|
40
40
|
// Check if no truncation needed
|
|
41
41
|
if (totalLines <= maxLines && totalBytes <= maxBytes) {
|
|
@@ -54,12 +54,12 @@ export function truncateHead(content, options = {}) {
|
|
|
54
54
|
};
|
|
55
55
|
}
|
|
56
56
|
// Check if first line alone exceeds byte limit
|
|
57
|
-
const firstLineBytes = Buffer.byteLength(lines[0],
|
|
57
|
+
const firstLineBytes = Buffer.byteLength(lines[0], 'utf-8');
|
|
58
58
|
if (firstLineBytes > maxBytes) {
|
|
59
59
|
return {
|
|
60
|
-
content:
|
|
60
|
+
content: '',
|
|
61
61
|
truncated: true,
|
|
62
|
-
truncatedBy:
|
|
62
|
+
truncatedBy: 'bytes',
|
|
63
63
|
totalLines,
|
|
64
64
|
totalBytes,
|
|
65
65
|
outputLines: 0,
|
|
@@ -73,12 +73,12 @@ export function truncateHead(content, options = {}) {
|
|
|
73
73
|
// Collect complete lines that fit
|
|
74
74
|
const outputLinesArr = [];
|
|
75
75
|
let outputBytesCount = 0;
|
|
76
|
-
let truncatedBy =
|
|
76
|
+
let truncatedBy = 'lines';
|
|
77
77
|
for (let i = 0; i < lines.length && i < maxLines; i++) {
|
|
78
78
|
const line = lines[i];
|
|
79
|
-
const lineBytes = Buffer.byteLength(line,
|
|
79
|
+
const lineBytes = Buffer.byteLength(line, 'utf-8') + (i > 0 ? 1 : 0); // +1 for newline
|
|
80
80
|
if (outputBytesCount + lineBytes > maxBytes) {
|
|
81
|
-
truncatedBy =
|
|
81
|
+
truncatedBy = 'bytes';
|
|
82
82
|
break;
|
|
83
83
|
}
|
|
84
84
|
outputLinesArr.push(line);
|
|
@@ -86,10 +86,10 @@ export function truncateHead(content, options = {}) {
|
|
|
86
86
|
}
|
|
87
87
|
// If we exited due to line limit
|
|
88
88
|
if (outputLinesArr.length >= maxLines && outputBytesCount <= maxBytes) {
|
|
89
|
-
truncatedBy =
|
|
89
|
+
truncatedBy = 'lines';
|
|
90
90
|
}
|
|
91
|
-
const outputContent = outputLinesArr.join(
|
|
92
|
-
const finalOutputBytes = Buffer.byteLength(outputContent,
|
|
91
|
+
const outputContent = outputLinesArr.join('\n');
|
|
92
|
+
const finalOutputBytes = Buffer.byteLength(outputContent, 'utf-8');
|
|
93
93
|
return {
|
|
94
94
|
content: outputContent,
|
|
95
95
|
truncated: true,
|
|
@@ -113,8 +113,8 @@ export function truncateHead(content, options = {}) {
|
|
|
113
113
|
export function truncateTail(content, options = {}) {
|
|
114
114
|
const maxLines = options.maxLines ?? DEFAULT_MAX_LINES;
|
|
115
115
|
const maxBytes = options.maxBytes ?? DEFAULT_MAX_BYTES;
|
|
116
|
-
const totalBytes = Buffer.byteLength(content,
|
|
117
|
-
const lines = content.split(
|
|
116
|
+
const totalBytes = Buffer.byteLength(content, 'utf-8');
|
|
117
|
+
const lines = content.split('\n');
|
|
118
118
|
const totalLines = lines.length;
|
|
119
119
|
// Check if no truncation needed
|
|
120
120
|
if (totalLines <= maxLines && totalBytes <= maxBytes) {
|
|
@@ -135,19 +135,19 @@ export function truncateTail(content, options = {}) {
|
|
|
135
135
|
// Work backwards from the end
|
|
136
136
|
const outputLinesArr = [];
|
|
137
137
|
let outputBytesCount = 0;
|
|
138
|
-
let truncatedBy =
|
|
138
|
+
let truncatedBy = 'lines';
|
|
139
139
|
let lastLinePartial = false;
|
|
140
140
|
for (let i = lines.length - 1; i >= 0 && outputLinesArr.length < maxLines; i--) {
|
|
141
141
|
const line = lines[i];
|
|
142
|
-
const lineBytes = Buffer.byteLength(line,
|
|
142
|
+
const lineBytes = Buffer.byteLength(line, 'utf-8') + (outputLinesArr.length > 0 ? 1 : 0); // +1 for newline
|
|
143
143
|
if (outputBytesCount + lineBytes > maxBytes) {
|
|
144
|
-
truncatedBy =
|
|
144
|
+
truncatedBy = 'bytes';
|
|
145
145
|
// Edge case: if we haven't added ANY lines yet and this line exceeds maxBytes,
|
|
146
146
|
// take the end of the line (partial)
|
|
147
147
|
if (outputLinesArr.length === 0) {
|
|
148
148
|
const truncatedLine = truncateStringToBytesFromEnd(line, maxBytes);
|
|
149
149
|
outputLinesArr.unshift(truncatedLine);
|
|
150
|
-
outputBytesCount = Buffer.byteLength(truncatedLine,
|
|
150
|
+
outputBytesCount = Buffer.byteLength(truncatedLine, 'utf-8');
|
|
151
151
|
lastLinePartial = true;
|
|
152
152
|
}
|
|
153
153
|
break;
|
|
@@ -157,10 +157,10 @@ export function truncateTail(content, options = {}) {
|
|
|
157
157
|
}
|
|
158
158
|
// If we exited due to line limit
|
|
159
159
|
if (outputLinesArr.length >= maxLines && outputBytesCount <= maxBytes) {
|
|
160
|
-
truncatedBy =
|
|
160
|
+
truncatedBy = 'lines';
|
|
161
161
|
}
|
|
162
|
-
const outputContent = outputLinesArr.join(
|
|
163
|
-
const finalOutputBytes = Buffer.byteLength(outputContent,
|
|
162
|
+
const outputContent = outputLinesArr.join('\n');
|
|
163
|
+
const finalOutputBytes = Buffer.byteLength(outputContent, 'utf-8');
|
|
164
164
|
return {
|
|
165
165
|
content: outputContent,
|
|
166
166
|
truncated: true,
|
|
@@ -180,7 +180,7 @@ export function truncateTail(content, options = {}) {
|
|
|
180
180
|
* Handles multi-byte UTF-8 characters correctly.
|
|
181
181
|
*/
|
|
182
182
|
function truncateStringToBytesFromEnd(str, maxBytes) {
|
|
183
|
-
const buf = Buffer.from(str,
|
|
183
|
+
const buf = Buffer.from(str, 'utf-8');
|
|
184
184
|
if (buf.length <= maxBytes) {
|
|
185
185
|
return str;
|
|
186
186
|
}
|
|
@@ -190,7 +190,7 @@ function truncateStringToBytesFromEnd(str, maxBytes) {
|
|
|
190
190
|
while (start < buf.length && (buf[start] & 0xc0) === 0x80) {
|
|
191
191
|
start++;
|
|
192
192
|
}
|
|
193
|
-
return buf.slice(start).toString(
|
|
193
|
+
return buf.slice(start).toString('utf-8');
|
|
194
194
|
}
|
|
195
195
|
/**
|
|
196
196
|
* Truncate a single line to max characters, adding [truncated] suffix.
|
|
@@ -200,6 +200,9 @@ export function truncateLine(line, maxChars = GREP_MAX_LINE_LENGTH) {
|
|
|
200
200
|
if (line.length <= maxChars) {
|
|
201
201
|
return { text: line, wasTruncated: false };
|
|
202
202
|
}
|
|
203
|
-
return {
|
|
203
|
+
return {
|
|
204
|
+
text: `${line.slice(0, maxChars)}... [truncated]`,
|
|
205
|
+
wasTruncated: true,
|
|
206
|
+
};
|
|
204
207
|
}
|
|
205
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
208
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1bmNhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2FnZW50LWNvcmUvaGFybmVzcy91dGlscy90cnVuY2F0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUVILE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQztBQUN0QyxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsT0FBTztBQUNuRCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxHQUFHLENBQUMsQ0FBQyxnQ0FBZ0M7QUFrQ3pFOztHQUVHO0FBQ0gsTUFBTSxVQUFVLFVBQVUsQ0FBQyxLQUFhO0lBQ3RDLElBQUksS0FBSyxHQUFHLElBQUksRUFBRSxDQUFDO1FBQ2pCLE9BQU8sR0FBRyxLQUFLLEdBQUcsQ0FBQztJQUNyQixDQUFDO1NBQU0sSUFBSSxLQUFLLEdBQUcsSUFBSSxHQUFHLElBQUksRUFBRSxDQUFDO1FBQy9CLE9BQU8sR0FBRyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUMxQyxDQUFDO1NBQU0sQ0FBQztRQUNOLE9BQU8sR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ25ELENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FDMUIsT0FBZSxFQUNmLFVBQTZCLEVBQUU7SUFFL0IsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsSUFBSSxpQkFBaUIsQ0FBQztJQUN2RCxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxJQUFJLGlCQUFpQixDQUFDO0lBRXZELE1BQU0sVUFBVSxHQUFHLE1BQU0s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
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
export * from
|
|
2
|
-
export * from
|
|
3
|
-
export * from
|
|
4
|
-
export { collectEntriesForBranchSummary, generateBranchSummary, prepareBranchEntries, } from
|
|
5
|
-
export { calculateContextTokens, compact, DEFAULT_COMPACTION_SETTINGS, estimateContextTokens, estimateTokens, findCutPoint, findTurnStartIndex, generateSummary, getLastAssistantUsage, prepareCompaction, serializeConversation, shouldCompact, } from
|
|
6
|
-
export * from
|
|
7
|
-
export * from
|
|
8
|
-
export * from
|
|
9
|
-
export * from
|
|
10
|
-
export * from
|
|
11
|
-
export * from
|
|
12
|
-
export * from
|
|
13
|
-
export * from
|
|
14
|
-
export * from
|
|
15
|
-
export * from
|
|
16
|
-
export * from
|
|
17
|
-
export * from
|
|
18
|
-
export * from
|
|
19
|
-
export * from
|
|
1
|
+
export * from './agent.js';
|
|
2
|
+
export * from './agent-loop.js';
|
|
3
|
+
export * from './harness/agent-harness.js';
|
|
4
|
+
export { collectEntriesForBranchSummary, generateBranchSummary, prepareBranchEntries, } from './harness/compaction/branch-summarization.js';
|
|
5
|
+
export { calculateContextTokens, compact, DEFAULT_COMPACTION_SETTINGS, estimateContextTokens, estimateTokens, findCutPoint, findTurnStartIndex, generateSummary, getLastAssistantUsage, prepareCompaction, serializeConversation, shouldCompact, } from './harness/compaction/compaction.js';
|
|
6
|
+
export * from './harness/execution-env.js';
|
|
7
|
+
export * from './harness/messages.js';
|
|
8
|
+
export * from './harness/prompt-templates.js';
|
|
9
|
+
export * from './harness/session/repo/jsonl.js';
|
|
10
|
+
export * from './harness/session/repo/memory.js';
|
|
11
|
+
export * from './harness/session/repo/shared.js';
|
|
12
|
+
export * from './harness/session/session.js';
|
|
13
|
+
export * from './harness/skills.js';
|
|
14
|
+
export * from './harness/system-prompt.js';
|
|
15
|
+
export * from './harness/types.js';
|
|
16
|
+
export * from './harness/utils/shell-output.js';
|
|
17
|
+
export * from './harness/utils/truncate.js';
|
|
18
|
+
export * from './proxy.js';
|
|
19
|
+
export * from './types.js';
|
|
@@ -1,25 +1,25 @@
|
|
|
1
1
|
// Core Agent
|
|
2
|
-
export * from
|
|
2
|
+
export * from './agent.js';
|
|
3
3
|
// Loop functions
|
|
4
|
-
export * from
|
|
5
|
-
export * from
|
|
6
|
-
export { collectEntriesForBranchSummary, generateBranchSummary, prepareBranchEntries, } from
|
|
7
|
-
export { calculateContextTokens, compact, DEFAULT_COMPACTION_SETTINGS, estimateContextTokens, estimateTokens, findCutPoint, findTurnStartIndex, generateSummary, getLastAssistantUsage, prepareCompaction, serializeConversation, shouldCompact, } from
|
|
8
|
-
export * from
|
|
9
|
-
export * from
|
|
10
|
-
export * from
|
|
11
|
-
export * from
|
|
12
|
-
export * from
|
|
13
|
-
export * from
|
|
14
|
-
export * from
|
|
15
|
-
export * from
|
|
16
|
-
export * from
|
|
4
|
+
export * from './agent-loop.js';
|
|
5
|
+
export * from './harness/agent-harness.js';
|
|
6
|
+
export { collectEntriesForBranchSummary, generateBranchSummary, prepareBranchEntries, } from './harness/compaction/branch-summarization.js';
|
|
7
|
+
export { calculateContextTokens, compact, DEFAULT_COMPACTION_SETTINGS, estimateContextTokens, estimateTokens, findCutPoint, findTurnStartIndex, generateSummary, getLastAssistantUsage, prepareCompaction, serializeConversation, shouldCompact, } from './harness/compaction/compaction.js';
|
|
8
|
+
export * from './harness/execution-env.js';
|
|
9
|
+
export * from './harness/messages.js';
|
|
10
|
+
export * from './harness/prompt-templates.js';
|
|
11
|
+
export * from './harness/session/repo/jsonl.js';
|
|
12
|
+
export * from './harness/session/repo/memory.js';
|
|
13
|
+
export * from './harness/session/repo/shared.js';
|
|
14
|
+
export * from './harness/session/session.js';
|
|
15
|
+
export * from './harness/skills.js';
|
|
16
|
+
export * from './harness/system-prompt.js';
|
|
17
17
|
// Harness
|
|
18
|
-
export * from
|
|
19
|
-
export * from
|
|
20
|
-
export * from
|
|
18
|
+
export * from './harness/types.js';
|
|
19
|
+
export * from './harness/utils/shell-output.js';
|
|
20
|
+
export * from './harness/utils/truncate.js';
|
|
21
21
|
// Proxy utilities
|
|
22
|
-
export * from
|
|
22
|
+
export * from './proxy.js';
|
|
23
23
|
// Types
|
|
24
|
-
export * from
|
|
25
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
24
|
+
export * from './types.js';
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2FnZW50LWNvcmUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsYUFBYTtBQUNiLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGlCQUFpQjtBQUNqQixjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsT0FBTyxFQUNMLDhCQUE4QixFQUM5QixxQkFBcUIsRUFDckIsb0JBQW9CLEdBQ3JCLE1BQU0sOENBQThDLENBQUM7QUFDdEQsT0FBTyxFQUNMLHNCQUFzQixFQUN0QixPQUFPLEVBQ1AsMkJBQTJCLEVBQzNCLHFCQUFxQixFQUNyQixjQUFjLEVBQ2QsWUFBWSxFQUNaLGtCQUFrQixFQUNsQixlQUFlLEVBQ2YscUJBQXFCLEVBQ3JCLGlCQUFpQixFQUNqQixxQkFBcUIsRUFDckIsYUFBYSxHQUNkLE1BQU0sb0NBQW9DLENBQUM7QUFDNUMsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsVUFBVTtBQUNWLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGtCQUFrQjtBQUNsQixjQUFjLFlBQVksQ0FBQztBQUMzQixRQUFRO0FBQ1IsY0FBYyxZQUFZLENBQUMifQ==
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Proxy stream function for apps that route LLM calls through a server.
|
|
3
3
|
* The server manages auth and proxies requests to LLM providers.
|
|
4
4
|
*/
|
|
5
|
-
import { type AssistantMessage, type AssistantMessageEvent, type Context, EventStream, type Model, type SimpleStreamOptions, type StopReason } from
|
|
5
|
+
import { type AssistantMessage, type AssistantMessageEvent, type Context, EventStream, type Model, type SimpleStreamOptions, type StopReason } from '@earendil-works/pi-ai';
|
|
6
6
|
declare class ProxyMessageEventStream extends EventStream<AssistantMessageEvent, AssistantMessage> {
|
|
7
7
|
constructor();
|
|
8
8
|
}
|
|
@@ -10,52 +10,52 @@ declare class ProxyMessageEventStream extends EventStream<AssistantMessageEvent,
|
|
|
10
10
|
* Proxy event types - server sends these with partial field stripped to reduce bandwidth.
|
|
11
11
|
*/
|
|
12
12
|
export type ProxyAssistantMessageEvent = {
|
|
13
|
-
type:
|
|
13
|
+
type: 'start';
|
|
14
14
|
} | {
|
|
15
|
-
type:
|
|
15
|
+
type: 'text_start';
|
|
16
16
|
contentIndex: number;
|
|
17
17
|
} | {
|
|
18
|
-
type:
|
|
18
|
+
type: 'text_delta';
|
|
19
19
|
contentIndex: number;
|
|
20
20
|
delta: string;
|
|
21
21
|
} | {
|
|
22
|
-
type:
|
|
22
|
+
type: 'text_end';
|
|
23
23
|
contentIndex: number;
|
|
24
24
|
contentSignature?: string;
|
|
25
25
|
} | {
|
|
26
|
-
type:
|
|
26
|
+
type: 'thinking_start';
|
|
27
27
|
contentIndex: number;
|
|
28
28
|
} | {
|
|
29
|
-
type:
|
|
29
|
+
type: 'thinking_delta';
|
|
30
30
|
contentIndex: number;
|
|
31
31
|
delta: string;
|
|
32
32
|
} | {
|
|
33
|
-
type:
|
|
33
|
+
type: 'thinking_end';
|
|
34
34
|
contentIndex: number;
|
|
35
35
|
contentSignature?: string;
|
|
36
36
|
} | {
|
|
37
|
-
type:
|
|
37
|
+
type: 'toolcall_start';
|
|
38
38
|
contentIndex: number;
|
|
39
39
|
id: string;
|
|
40
40
|
toolName: string;
|
|
41
41
|
} | {
|
|
42
|
-
type:
|
|
42
|
+
type: 'toolcall_delta';
|
|
43
43
|
contentIndex: number;
|
|
44
44
|
delta: string;
|
|
45
45
|
} | {
|
|
46
|
-
type:
|
|
46
|
+
type: 'toolcall_end';
|
|
47
47
|
contentIndex: number;
|
|
48
48
|
} | {
|
|
49
|
-
type:
|
|
50
|
-
reason: Extract<StopReason,
|
|
51
|
-
usage: AssistantMessage[
|
|
49
|
+
type: 'done';
|
|
50
|
+
reason: Extract<StopReason, 'stop' | 'length' | 'toolUse'>;
|
|
51
|
+
usage: AssistantMessage['usage'];
|
|
52
52
|
} | {
|
|
53
|
-
type:
|
|
54
|
-
reason: Extract<StopReason,
|
|
53
|
+
type: 'error';
|
|
54
|
+
reason: Extract<StopReason, 'aborted' | 'error'>;
|
|
55
55
|
errorMessage?: string;
|
|
56
|
-
usage: AssistantMessage[
|
|
56
|
+
usage: AssistantMessage['usage'];
|
|
57
57
|
};
|
|
58
|
-
type ProxySerializableStreamOptions = Pick<SimpleStreamOptions,
|
|
58
|
+
type ProxySerializableStreamOptions = Pick<SimpleStreamOptions, 'temperature' | 'maxTokens' | 'reasoning' | 'cacheRetention' | 'sessionId' | 'headers' | 'metadata' | 'transport' | 'thinkingBudgets' | 'maxRetryDelayMs'>;
|
|
59
59
|
export interface ProxyStreamOptions extends ProxySerializableStreamOptions {
|
|
60
60
|
/** Local abort signal for the proxy request */
|
|
61
61
|
signal?: AbortSignal;
|