psadk 1.4.7 → 1.5.0
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/README.md +153 -0
- package/build/main/index.d.ts +1 -0
- package/build/main/lib/PSAI.js +1 -2
- package/build/main/lib/PSAgent.d.ts +50 -13
- package/build/main/lib/PSAgent.js +179 -502
- package/build/main/lib/PSAgentConfig.d.ts +114 -2
- package/build/main/lib/PSAgentLogger.js +1 -2
- package/build/main/lib/PSAgentTool.d.ts +8 -3
- package/build/main/lib/PSAgentTool.js +3 -3
- package/build/main/lib/agent-core/package.json +1 -1
- package/build/main/lib/agent-core/{agent-loop.d.ts → src/agent-loop.d.ts} +1 -1
- package/build/main/lib/agent-core/src/agent-loop.js +514 -0
- package/build/{module/lib/agent-core → main/lib/agent-core/src}/agent.d.ts +2 -2
- package/build/main/lib/agent-core/src/agent.js +419 -0
- package/build/main/lib/agent-core/{harness → src/harness}/agent-harness.d.ts +36 -26
- package/build/main/lib/agent-core/src/harness/agent-harness.js +1028 -0
- package/build/main/lib/agent-core/src/harness/compaction/branch-summarization.d.ts +52 -0
- package/build/main/lib/agent-core/src/harness/compaction/branch-summarization.js +182 -0
- package/build/main/lib/agent-core/src/harness/compaction/compaction.d.ts +94 -0
- package/build/main/lib/agent-core/src/harness/compaction/compaction.js +550 -0
- package/build/main/lib/agent-core/src/harness/compaction/utils.d.ts +24 -0
- package/build/main/lib/agent-core/src/harness/compaction/utils.js +131 -0
- package/build/main/lib/agent-core/src/harness/env/nodejs.d.ts +50 -0
- package/build/main/lib/agent-core/src/harness/env/nodejs.js +494 -0
- package/build/main/lib/agent-core/{harness → src/harness}/messages.d.ts +2 -2
- package/build/{module/lib/agent-core → main/lib/agent-core/src}/harness/messages.js +1 -1
- package/build/main/lib/agent-core/{harness → src/harness}/prompt-templates.d.ts +4 -1
- package/build/main/lib/agent-core/src/harness/prompt-templates.js +235 -0
- package/build/{module/lib/agent-core/harness/session/repo/jsonl.d.ts → main/lib/agent-core/src/harness/session/jsonl-repo.d.ts} +7 -1
- package/build/main/lib/agent-core/src/harness/session/jsonl-repo.js +106 -0
- package/build/{module/lib/agent-core/harness/session/storage/jsonl.d.ts → main/lib/agent-core/src/harness/session/jsonl-storage.d.ts} +7 -4
- package/build/main/lib/agent-core/src/harness/session/jsonl-storage.js +234 -0
- package/build/main/lib/agent-core/{harness/session/repo/memory.d.ts → src/harness/session/memory-repo.d.ts} +1 -1
- package/build/main/lib/agent-core/src/harness/session/memory-repo.js +45 -0
- package/build/main/lib/agent-core/{harness/session/storage/memory.d.ts → src/harness/session/memory-storage.d.ts} +4 -5
- package/build/main/lib/agent-core/src/harness/session/memory-storage.js +116 -0
- package/build/main/lib/agent-core/{harness/session/repo/shared.d.ts → src/harness/session/repo-utils.d.ts} +3 -2
- package/build/main/lib/agent-core/src/harness/session/repo-utils.js +39 -0
- package/build/{module/lib/agent-core → main/lib/agent-core/src}/harness/session/session.d.ts +3 -2
- package/build/main/lib/agent-core/src/harness/session/session.js +213 -0
- package/build/main/lib/agent-core/src/harness/session/uuid.d.ts +1 -0
- package/build/main/lib/agent-core/src/harness/session/uuid.js +54 -0
- package/build/main/lib/agent-core/{harness → src/harness}/skills.d.ts +4 -1
- package/build/main/lib/agent-core/src/harness/skills.js +353 -0
- package/build/main/lib/agent-core/{harness → src/harness}/system-prompt.d.ts +1 -1
- package/build/main/lib/agent-core/src/harness/system-prompt.js +30 -0
- package/build/{module/lib/agent-core → main/lib/agent-core/src}/harness/types.d.ts +160 -70
- package/build/main/lib/agent-core/src/harness/types.js +94 -0
- package/build/main/lib/agent-core/{harness → src/harness}/utils/shell-output.d.ts +2 -2
- package/build/main/lib/agent-core/src/harness/utils/shell-output.js +134 -0
- package/build/main/lib/agent-core/src/harness/utils/truncate.js +294 -0
- package/build/main/lib/agent-core/src/index.d.ts +19 -0
- package/build/main/lib/agent-core/src/index.js +25 -0
- package/build/main/lib/agent-core/src/node.d.ts +2 -0
- package/build/main/lib/agent-core/src/node.js +3 -0
- package/build/main/lib/agent-core/{proxy.js → src/proxy.js} +3 -2
- package/build/{module/lib/agent-core → main/lib/agent-core/src}/types.d.ts +13 -1
- package/build/{module/lib/agent-core → main/lib/agent-core/src}/types.js +1 -1
- package/build/main/lib/localAgent.d.ts +35 -0
- package/build/main/lib/localAgent.js +329 -0
- package/build/main/lib/remoteAgent.d.ts +25 -0
- package/build/main/lib/remoteAgent.js +311 -0
- package/build/main/lib/tools/BraveWebSearchTool.js +1 -2
- package/build/main/lib/tools/PSArtifactTool.js +1 -2
- package/build/main/lib/tools/PSClarifyTool.js +1 -2
- package/build/main/lib/tools/PSCommandLineTool.js +1 -2
- package/build/main/lib/tools/PSMemoryTool.js +1 -2
- package/build/main/lib/tools/PSReadFileTool.js +1 -2
- package/build/main/lib/tools/PSRetrievalTool.js +1 -2
- package/build/main/lib/tools/PSSkillTool.js +1 -2
- package/build/main/lib/tools/PSSubAgentTool.js +1 -1
- package/build/main/lib/tools/PSWriteFileTool.js +1 -2
- package/build/main/lib/tools/TodoTool.js +1 -2
- package/build/main/lib/utils/debuglogger.js +1 -2
- package/build/main/lib/utils/helpers.js +1 -6
- package/build/module/index.d.ts +1 -0
- package/build/module/lib/PSAI.js +1 -2
- package/build/module/lib/PSAgent.d.ts +50 -13
- package/build/module/lib/PSAgent.js +179 -502
- package/build/module/lib/PSAgentConfig.d.ts +114 -2
- package/build/module/lib/PSAgentLogger.js +1 -2
- package/build/module/lib/PSAgentTool.d.ts +8 -3
- package/build/module/lib/PSAgentTool.js +3 -3
- package/build/module/lib/agent-core/{agent-loop.d.ts → src/agent-loop.d.ts} +1 -1
- package/build/module/lib/agent-core/src/agent-loop.js +514 -0
- package/build/{main/lib/agent-core → module/lib/agent-core/src}/agent.d.ts +2 -2
- package/build/module/lib/agent-core/src/agent.js +419 -0
- package/build/module/lib/agent-core/{harness → src/harness}/agent-harness.d.ts +36 -26
- package/build/module/lib/agent-core/src/harness/agent-harness.js +1028 -0
- package/build/module/lib/agent-core/src/harness/compaction/branch-summarization.d.ts +52 -0
- package/build/module/lib/agent-core/src/harness/compaction/branch-summarization.js +182 -0
- package/build/module/lib/agent-core/src/harness/compaction/compaction.d.ts +94 -0
- package/build/module/lib/agent-core/src/harness/compaction/compaction.js +550 -0
- package/build/module/lib/agent-core/src/harness/compaction/utils.d.ts +24 -0
- package/build/module/lib/agent-core/src/harness/compaction/utils.js +131 -0
- package/build/module/lib/agent-core/src/harness/env/nodejs.d.ts +50 -0
- package/build/module/lib/agent-core/src/harness/env/nodejs.js +494 -0
- package/build/module/lib/agent-core/{harness → src/harness}/messages.d.ts +2 -2
- package/build/{main/lib/agent-core → module/lib/agent-core/src}/harness/messages.js +1 -1
- package/build/module/lib/agent-core/{harness → src/harness}/prompt-templates.d.ts +4 -1
- package/build/module/lib/agent-core/src/harness/prompt-templates.js +235 -0
- package/build/{main/lib/agent-core/harness/session/repo/jsonl.d.ts → module/lib/agent-core/src/harness/session/jsonl-repo.d.ts} +7 -1
- package/build/module/lib/agent-core/src/harness/session/jsonl-repo.js +106 -0
- package/build/{main/lib/agent-core/harness/session/storage/jsonl.d.ts → module/lib/agent-core/src/harness/session/jsonl-storage.d.ts} +7 -4
- package/build/module/lib/agent-core/src/harness/session/jsonl-storage.js +234 -0
- package/build/module/lib/agent-core/{harness/session/repo/memory.d.ts → src/harness/session/memory-repo.d.ts} +1 -1
- package/build/module/lib/agent-core/src/harness/session/memory-repo.js +45 -0
- package/build/module/lib/agent-core/{harness/session/storage/memory.d.ts → src/harness/session/memory-storage.d.ts} +4 -5
- package/build/module/lib/agent-core/src/harness/session/memory-storage.js +116 -0
- package/build/module/lib/agent-core/{harness/session/repo/shared.d.ts → src/harness/session/repo-utils.d.ts} +3 -2
- package/build/module/lib/agent-core/src/harness/session/repo-utils.js +39 -0
- package/build/{main/lib/agent-core → module/lib/agent-core/src}/harness/session/session.d.ts +3 -2
- package/build/module/lib/agent-core/src/harness/session/session.js +213 -0
- package/build/module/lib/agent-core/src/harness/session/uuid.d.ts +1 -0
- package/build/module/lib/agent-core/src/harness/session/uuid.js +54 -0
- package/build/module/lib/agent-core/{harness → src/harness}/skills.d.ts +4 -1
- package/build/module/lib/agent-core/src/harness/skills.js +353 -0
- package/build/module/lib/agent-core/{harness → src/harness}/system-prompt.d.ts +1 -1
- package/build/module/lib/agent-core/src/harness/system-prompt.js +30 -0
- package/build/{main/lib/agent-core → module/lib/agent-core/src}/harness/types.d.ts +160 -70
- package/build/module/lib/agent-core/src/harness/types.js +94 -0
- package/build/module/lib/agent-core/{harness → src/harness}/utils/shell-output.d.ts +2 -2
- package/build/module/lib/agent-core/src/harness/utils/shell-output.js +134 -0
- package/build/module/lib/agent-core/src/harness/utils/truncate.js +294 -0
- package/build/module/lib/agent-core/src/index.d.ts +19 -0
- package/build/module/lib/agent-core/src/index.js +25 -0
- package/build/module/lib/agent-core/src/node.d.ts +2 -0
- package/build/module/lib/agent-core/src/node.js +3 -0
- package/build/module/lib/agent-core/{proxy.js → src/proxy.js} +3 -2
- package/build/{main/lib/agent-core → module/lib/agent-core/src}/types.d.ts +13 -1
- package/build/{main/lib/agent-core → module/lib/agent-core/src}/types.js +1 -1
- package/build/module/lib/localAgent.d.ts +35 -0
- package/build/module/lib/localAgent.js +329 -0
- package/build/module/lib/remoteAgent.d.ts +25 -0
- package/build/module/lib/remoteAgent.js +311 -0
- package/build/module/lib/tools/BraveWebSearchTool.js +1 -2
- package/build/module/lib/tools/PSArtifactTool.js +1 -2
- package/build/module/lib/tools/PSClarifyTool.js +1 -2
- package/build/module/lib/tools/PSCommandLineTool.js +1 -2
- package/build/module/lib/tools/PSMemoryTool.js +1 -2
- package/build/module/lib/tools/PSReadFileTool.js +1 -2
- package/build/module/lib/tools/PSRetrievalTool.js +1 -2
- package/build/module/lib/tools/PSSkillTool.js +1 -2
- package/build/module/lib/tools/PSSubAgentTool.js +1 -1
- package/build/module/lib/tools/PSWriteFileTool.js +1 -2
- package/build/module/lib/tools/TodoTool.js +1 -2
- package/build/module/lib/utils/debuglogger.js +1 -2
- package/build/module/lib/utils/helpers.js +1 -6
- package/package.json +3 -2
- package/build/main/lib/agent-core/agent-loop.js +0 -483
- package/build/main/lib/agent-core/agent.js +0 -419
- package/build/main/lib/agent-core/harness/agent-harness.js +0 -772
- package/build/main/lib/agent-core/harness/compaction/branch-summarization.d.ts +0 -87
- package/build/main/lib/agent-core/harness/compaction/branch-summarization.js +0 -246
- package/build/main/lib/agent-core/harness/compaction/compaction.d.ts +0 -121
- package/build/main/lib/agent-core/harness/compaction/compaction.js +0 -637
- package/build/main/lib/agent-core/harness/compaction/utils.d.ts +0 -37
- package/build/main/lib/agent-core/harness/compaction/utils.js +0 -153
- package/build/main/lib/agent-core/harness/env/nodejs.d.ts +0 -43
- package/build/main/lib/agent-core/harness/env/nodejs.js +0 -353
- package/build/main/lib/agent-core/harness/execution-env.d.ts +0 -3
- package/build/main/lib/agent-core/harness/execution-env.js +0 -3
- package/build/main/lib/agent-core/harness/prompt-templates.js +0 -204
- package/build/main/lib/agent-core/harness/session/repo/jsonl.js +0 -98
- package/build/main/lib/agent-core/harness/session/repo/memory.js +0 -46
- package/build/main/lib/agent-core/harness/session/repo/shared.js +0 -31
- package/build/main/lib/agent-core/harness/session/session.js +0 -199
- package/build/main/lib/agent-core/harness/session/storage/jsonl.js +0 -170
- package/build/main/lib/agent-core/harness/session/storage/memory.js +0 -94
- package/build/main/lib/agent-core/harness/skills.js +0 -266
- package/build/main/lib/agent-core/harness/system-prompt.js +0 -30
- package/build/main/lib/agent-core/harness/types.js +0 -16
- package/build/main/lib/agent-core/harness/utils/shell-output.js +0 -101
- package/build/main/lib/agent-core/harness/utils/truncate.js +0 -208
- package/build/main/lib/agent-core/index.d.ts +0 -19
- package/build/main/lib/agent-core/index.js +0 -25
- package/build/module/lib/agent-core/agent-loop.js +0 -483
- package/build/module/lib/agent-core/agent.js +0 -419
- package/build/module/lib/agent-core/harness/agent-harness.js +0 -772
- package/build/module/lib/agent-core/harness/compaction/branch-summarization.d.ts +0 -87
- package/build/module/lib/agent-core/harness/compaction/branch-summarization.js +0 -246
- package/build/module/lib/agent-core/harness/compaction/compaction.d.ts +0 -121
- package/build/module/lib/agent-core/harness/compaction/compaction.js +0 -637
- package/build/module/lib/agent-core/harness/compaction/utils.d.ts +0 -37
- package/build/module/lib/agent-core/harness/compaction/utils.js +0 -153
- package/build/module/lib/agent-core/harness/env/nodejs.d.ts +0 -43
- package/build/module/lib/agent-core/harness/env/nodejs.js +0 -353
- package/build/module/lib/agent-core/harness/execution-env.d.ts +0 -3
- package/build/module/lib/agent-core/harness/execution-env.js +0 -3
- package/build/module/lib/agent-core/harness/prompt-templates.js +0 -204
- package/build/module/lib/agent-core/harness/session/repo/jsonl.js +0 -98
- package/build/module/lib/agent-core/harness/session/repo/memory.js +0 -46
- package/build/module/lib/agent-core/harness/session/repo/shared.js +0 -31
- package/build/module/lib/agent-core/harness/session/session.js +0 -199
- package/build/module/lib/agent-core/harness/session/storage/jsonl.js +0 -170
- package/build/module/lib/agent-core/harness/session/storage/memory.js +0 -94
- package/build/module/lib/agent-core/harness/skills.js +0 -266
- package/build/module/lib/agent-core/harness/system-prompt.js +0 -30
- package/build/module/lib/agent-core/harness/types.js +0 -16
- package/build/module/lib/agent-core/harness/utils/shell-output.js +0 -101
- package/build/module/lib/agent-core/harness/utils/truncate.js +0 -208
- package/build/module/lib/agent-core/index.d.ts +0 -19
- package/build/module/lib/agent-core/index.js +0 -25
- /package/build/main/lib/agent-core/{harness → src/harness}/utils/truncate.d.ts +0 -0
- /package/build/main/lib/agent-core/{proxy.d.ts → src/proxy.d.ts} +0 -0
- /package/build/module/lib/agent-core/{harness → src/harness}/utils/truncate.d.ts +0 -0
- /package/build/module/lib/agent-core/{proxy.d.ts → src/proxy.d.ts} +0 -0
|
@@ -0,0 +1,494 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
import { randomUUID } from 'node:crypto';
|
|
3
|
+
import { constants, createReadStream } from 'node:fs';
|
|
4
|
+
import { access, appendFile, lstat, mkdir, mkdtemp, readdir, readFile, realpath, rm, writeFile, } from 'node:fs/promises';
|
|
5
|
+
import { tmpdir } from 'node:os';
|
|
6
|
+
import { isAbsolute, join, resolve } from 'node:path';
|
|
7
|
+
import { createInterface } from 'node:readline';
|
|
8
|
+
import { err, ExecutionError, FileError, ok, toError, } from "../types.js";
|
|
9
|
+
function resolvePath(cwd, path) {
|
|
10
|
+
return isAbsolute(path) ? path : resolve(cwd, path);
|
|
11
|
+
}
|
|
12
|
+
function fileKindFromStats(stats) {
|
|
13
|
+
if (stats.isFile())
|
|
14
|
+
return 'file';
|
|
15
|
+
if (stats.isDirectory())
|
|
16
|
+
return 'directory';
|
|
17
|
+
if (stats.isSymbolicLink())
|
|
18
|
+
return 'symlink';
|
|
19
|
+
return undefined;
|
|
20
|
+
}
|
|
21
|
+
function fileInfoFromStats(path, stats) {
|
|
22
|
+
const kind = fileKindFromStats(stats);
|
|
23
|
+
if (!kind)
|
|
24
|
+
return err(new FileError('invalid', 'Unsupported file type', path));
|
|
25
|
+
return ok({
|
|
26
|
+
name: path.replace(/\/+$/, '').split('/').pop() ?? path,
|
|
27
|
+
path,
|
|
28
|
+
kind,
|
|
29
|
+
size: stats.size,
|
|
30
|
+
mtimeMs: stats.mtimeMs,
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
function isNodeError(error) {
|
|
34
|
+
return error instanceof Error && 'code' in error;
|
|
35
|
+
}
|
|
36
|
+
function toFileError(error, path) {
|
|
37
|
+
if (error instanceof FileError)
|
|
38
|
+
return error;
|
|
39
|
+
const cause = toError(error);
|
|
40
|
+
if (isNodeError(error)) {
|
|
41
|
+
const message = error.message;
|
|
42
|
+
switch (error.code) {
|
|
43
|
+
case 'ABORT_ERR':
|
|
44
|
+
return new FileError('aborted', message, path, cause);
|
|
45
|
+
case 'ENOENT':
|
|
46
|
+
return new FileError('not_found', message, path, cause);
|
|
47
|
+
case 'EACCES':
|
|
48
|
+
case 'EPERM':
|
|
49
|
+
return new FileError('permission_denied', message, path, cause);
|
|
50
|
+
case 'ENOTDIR':
|
|
51
|
+
return new FileError('not_directory', message, path, cause);
|
|
52
|
+
case 'EISDIR':
|
|
53
|
+
return new FileError('is_directory', message, path, cause);
|
|
54
|
+
case 'EINVAL':
|
|
55
|
+
return new FileError('invalid', message, path, cause);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return new FileError('unknown', cause.message, path, cause);
|
|
59
|
+
}
|
|
60
|
+
function abortResult(signal, path) {
|
|
61
|
+
return signal?.aborted
|
|
62
|
+
? err(new FileError('aborted', 'aborted', path))
|
|
63
|
+
: undefined;
|
|
64
|
+
}
|
|
65
|
+
async function pathExists(path) {
|
|
66
|
+
try {
|
|
67
|
+
await access(path, constants.F_OK);
|
|
68
|
+
return true;
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
async function runCommand(command, args, timeoutMs) {
|
|
75
|
+
return await new Promise((resolve) => {
|
|
76
|
+
let stdout = '';
|
|
77
|
+
let child;
|
|
78
|
+
try {
|
|
79
|
+
child = spawn(command, args, {
|
|
80
|
+
stdio: ['ignore', 'pipe', 'ignore'],
|
|
81
|
+
windowsHide: true,
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
resolve({ stdout: '', status: null });
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
const timeout = setTimeout(() => {
|
|
89
|
+
if (child.pid)
|
|
90
|
+
killProcessTree(child.pid);
|
|
91
|
+
}, timeoutMs);
|
|
92
|
+
child.stdout?.setEncoding('utf8');
|
|
93
|
+
child.stdout?.on('data', (chunk) => {
|
|
94
|
+
stdout += chunk;
|
|
95
|
+
});
|
|
96
|
+
child.on('error', () => {
|
|
97
|
+
clearTimeout(timeout);
|
|
98
|
+
resolve({ stdout: '', status: null });
|
|
99
|
+
});
|
|
100
|
+
child.on('close', (status) => {
|
|
101
|
+
clearTimeout(timeout);
|
|
102
|
+
resolve({ stdout, status });
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
async function findBashOnPath() {
|
|
107
|
+
const result = process.platform === 'win32'
|
|
108
|
+
? await runCommand('where', ['bash.exe'], 5000)
|
|
109
|
+
: await runCommand('which', ['bash'], 5000);
|
|
110
|
+
if (result.status !== 0 || !result.stdout)
|
|
111
|
+
return null;
|
|
112
|
+
const firstMatch = result.stdout.trim().split(/\r?\n/)[0];
|
|
113
|
+
return firstMatch && (await pathExists(firstMatch)) ? firstMatch : null;
|
|
114
|
+
}
|
|
115
|
+
async function getShellConfig(customShellPath) {
|
|
116
|
+
if (customShellPath) {
|
|
117
|
+
if (await pathExists(customShellPath)) {
|
|
118
|
+
return ok({ shell: customShellPath, args: ['-c'] });
|
|
119
|
+
}
|
|
120
|
+
return err(new ExecutionError('shell_unavailable', `Custom shell path not found: ${customShellPath}`));
|
|
121
|
+
}
|
|
122
|
+
if (process.platform === 'win32') {
|
|
123
|
+
const candidates = [];
|
|
124
|
+
const programFiles = process.env.ProgramFiles;
|
|
125
|
+
if (programFiles)
|
|
126
|
+
candidates.push(`${programFiles}\\Git\\bin\\bash.exe`);
|
|
127
|
+
const programFilesX86 = process.env['ProgramFiles(x86)'];
|
|
128
|
+
if (programFilesX86)
|
|
129
|
+
candidates.push(`${programFilesX86}\\Git\\bin\\bash.exe`);
|
|
130
|
+
for (const candidate of candidates) {
|
|
131
|
+
if (await pathExists(candidate)) {
|
|
132
|
+
return ok({ shell: candidate, args: ['-c'] });
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
const bashOnPath = await findBashOnPath();
|
|
136
|
+
if (bashOnPath) {
|
|
137
|
+
return ok({ shell: bashOnPath, args: ['-c'] });
|
|
138
|
+
}
|
|
139
|
+
return err(new ExecutionError('shell_unavailable', 'No bash shell found'));
|
|
140
|
+
}
|
|
141
|
+
if (await pathExists('/bin/bash')) {
|
|
142
|
+
return ok({ shell: '/bin/bash', args: ['-c'] });
|
|
143
|
+
}
|
|
144
|
+
const bashOnPath = await findBashOnPath();
|
|
145
|
+
if (bashOnPath) {
|
|
146
|
+
return ok({ shell: bashOnPath, args: ['-c'] });
|
|
147
|
+
}
|
|
148
|
+
return ok({ shell: 'sh', args: ['-c'] });
|
|
149
|
+
}
|
|
150
|
+
function getShellEnv(baseEnv, extraEnv) {
|
|
151
|
+
return {
|
|
152
|
+
...process.env,
|
|
153
|
+
...baseEnv,
|
|
154
|
+
...extraEnv,
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
function killProcessTree(pid) {
|
|
158
|
+
if (process.platform === 'win32') {
|
|
159
|
+
try {
|
|
160
|
+
spawn('taskkill', ['/F', '/T', '/PID', String(pid)], {
|
|
161
|
+
stdio: 'ignore',
|
|
162
|
+
detached: true,
|
|
163
|
+
windowsHide: true,
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
catch {
|
|
167
|
+
// Ignore errors.
|
|
168
|
+
}
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
try {
|
|
172
|
+
process.kill(-pid, 'SIGKILL');
|
|
173
|
+
}
|
|
174
|
+
catch {
|
|
175
|
+
try {
|
|
176
|
+
process.kill(pid, 'SIGKILL');
|
|
177
|
+
}
|
|
178
|
+
catch {
|
|
179
|
+
// Process already dead.
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
export class NodeExecutionEnv {
|
|
184
|
+
cwd;
|
|
185
|
+
shellPath;
|
|
186
|
+
shellEnv;
|
|
187
|
+
constructor(options) {
|
|
188
|
+
this.cwd = options.cwd;
|
|
189
|
+
this.shellPath = options.shellPath;
|
|
190
|
+
this.shellEnv = options.shellEnv;
|
|
191
|
+
}
|
|
192
|
+
async absolutePath(path) {
|
|
193
|
+
return ok(resolvePath(this.cwd, path));
|
|
194
|
+
}
|
|
195
|
+
async joinPath(parts) {
|
|
196
|
+
return ok(join(...parts));
|
|
197
|
+
}
|
|
198
|
+
async exec(command, options) {
|
|
199
|
+
if (options?.abortSignal?.aborted)
|
|
200
|
+
return err(new ExecutionError('aborted', 'aborted'));
|
|
201
|
+
const cwd = options?.cwd ? resolvePath(this.cwd, options.cwd) : this.cwd;
|
|
202
|
+
const shellConfig = await getShellConfig(this.shellPath);
|
|
203
|
+
if (!shellConfig.ok)
|
|
204
|
+
return shellConfig;
|
|
205
|
+
return await new Promise((resolvePromise) => {
|
|
206
|
+
let stdout = '';
|
|
207
|
+
let stderr = '';
|
|
208
|
+
let settled = false;
|
|
209
|
+
let timedOut = false;
|
|
210
|
+
let callbackError;
|
|
211
|
+
let child;
|
|
212
|
+
const timeoutId = typeof options?.timeout === 'number'
|
|
213
|
+
? setTimeout(() => {
|
|
214
|
+
timedOut = true;
|
|
215
|
+
if (child?.pid) {
|
|
216
|
+
killProcessTree(child.pid);
|
|
217
|
+
}
|
|
218
|
+
}, options.timeout * 1000)
|
|
219
|
+
: undefined;
|
|
220
|
+
const onAbort = () => {
|
|
221
|
+
if (child?.pid) {
|
|
222
|
+
killProcessTree(child.pid);
|
|
223
|
+
}
|
|
224
|
+
};
|
|
225
|
+
const settle = (result) => {
|
|
226
|
+
if (timeoutId)
|
|
227
|
+
clearTimeout(timeoutId);
|
|
228
|
+
if (options?.abortSignal)
|
|
229
|
+
options.abortSignal.removeEventListener('abort', onAbort);
|
|
230
|
+
if (settled)
|
|
231
|
+
return;
|
|
232
|
+
settled = true;
|
|
233
|
+
resolvePromise(result);
|
|
234
|
+
};
|
|
235
|
+
try {
|
|
236
|
+
child = spawn(shellConfig.value.shell, [...shellConfig.value.args, command], {
|
|
237
|
+
cwd,
|
|
238
|
+
detached: process.platform !== 'win32',
|
|
239
|
+
env: getShellEnv(this.shellEnv, options?.env),
|
|
240
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
241
|
+
windowsHide: true,
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
catch (error) {
|
|
245
|
+
const cause = toError(error);
|
|
246
|
+
settle(err(new ExecutionError('spawn_error', cause.message, cause)));
|
|
247
|
+
return;
|
|
248
|
+
}
|
|
249
|
+
if (options?.abortSignal) {
|
|
250
|
+
if (options.abortSignal.aborted) {
|
|
251
|
+
onAbort();
|
|
252
|
+
}
|
|
253
|
+
else {
|
|
254
|
+
options.abortSignal.addEventListener('abort', onAbort, {
|
|
255
|
+
once: true,
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
child.stdout?.setEncoding('utf8');
|
|
260
|
+
child.stderr?.setEncoding('utf8');
|
|
261
|
+
child.stdout?.on('data', (chunk) => {
|
|
262
|
+
stdout += chunk;
|
|
263
|
+
try {
|
|
264
|
+
options?.onStdout?.(chunk);
|
|
265
|
+
}
|
|
266
|
+
catch (error) {
|
|
267
|
+
const cause = toError(error);
|
|
268
|
+
callbackError = new ExecutionError('callback_error', cause.message, cause);
|
|
269
|
+
onAbort();
|
|
270
|
+
}
|
|
271
|
+
});
|
|
272
|
+
child.stderr?.on('data', (chunk) => {
|
|
273
|
+
stderr += chunk;
|
|
274
|
+
try {
|
|
275
|
+
options?.onStderr?.(chunk);
|
|
276
|
+
}
|
|
277
|
+
catch (error) {
|
|
278
|
+
const cause = toError(error);
|
|
279
|
+
callbackError = new ExecutionError('callback_error', cause.message, cause);
|
|
280
|
+
onAbort();
|
|
281
|
+
}
|
|
282
|
+
});
|
|
283
|
+
child.on('error', (error) => {
|
|
284
|
+
settle(err(new ExecutionError('spawn_error', error.message, error)));
|
|
285
|
+
});
|
|
286
|
+
child.on('close', (code) => {
|
|
287
|
+
if (callbackError) {
|
|
288
|
+
settle(err(callbackError));
|
|
289
|
+
return;
|
|
290
|
+
}
|
|
291
|
+
if (timedOut) {
|
|
292
|
+
settle(err(new ExecutionError('timeout', `timeout:${options?.timeout}`)));
|
|
293
|
+
return;
|
|
294
|
+
}
|
|
295
|
+
if (options?.abortSignal?.aborted) {
|
|
296
|
+
settle(err(new ExecutionError('aborted', 'aborted')));
|
|
297
|
+
return;
|
|
298
|
+
}
|
|
299
|
+
settle(ok({ stdout, stderr, exitCode: code ?? 0 }));
|
|
300
|
+
});
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
async readTextFile(path, abortSignal) {
|
|
304
|
+
const resolved = resolvePath(this.cwd, path);
|
|
305
|
+
const aborted = abortResult(abortSignal, resolved);
|
|
306
|
+
if (aborted)
|
|
307
|
+
return aborted;
|
|
308
|
+
try {
|
|
309
|
+
return ok(await readFile(resolved, { encoding: 'utf8', signal: abortSignal }));
|
|
310
|
+
}
|
|
311
|
+
catch (error) {
|
|
312
|
+
return err(toFileError(error, resolved));
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
async readTextLines(path, options) {
|
|
316
|
+
const resolved = resolvePath(this.cwd, path);
|
|
317
|
+
const aborted = abortResult(options?.abortSignal, resolved);
|
|
318
|
+
if (aborted)
|
|
319
|
+
return aborted;
|
|
320
|
+
if (options?.maxLines !== undefined && options.maxLines <= 0)
|
|
321
|
+
return ok([]);
|
|
322
|
+
let stream;
|
|
323
|
+
let lineReader;
|
|
324
|
+
try {
|
|
325
|
+
stream = createReadStream(resolved, {
|
|
326
|
+
encoding: 'utf8',
|
|
327
|
+
signal: options?.abortSignal,
|
|
328
|
+
});
|
|
329
|
+
lineReader = createInterface({ input: stream, crlfDelay: Infinity });
|
|
330
|
+
const lines = [];
|
|
331
|
+
for await (const line of lineReader) {
|
|
332
|
+
const loopAbort = abortResult(options?.abortSignal, resolved);
|
|
333
|
+
if (loopAbort)
|
|
334
|
+
return loopAbort;
|
|
335
|
+
lines.push(line);
|
|
336
|
+
if (options?.maxLines !== undefined && lines.length >= options.maxLines)
|
|
337
|
+
break;
|
|
338
|
+
}
|
|
339
|
+
const afterReadAbort = abortResult(options?.abortSignal, resolved);
|
|
340
|
+
if (afterReadAbort)
|
|
341
|
+
return afterReadAbort;
|
|
342
|
+
return ok(lines);
|
|
343
|
+
}
|
|
344
|
+
catch (error) {
|
|
345
|
+
return err(toFileError(error, resolved));
|
|
346
|
+
}
|
|
347
|
+
finally {
|
|
348
|
+
lineReader?.close();
|
|
349
|
+
stream?.destroy();
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
async readBinaryFile(path, abortSignal) {
|
|
353
|
+
const resolved = resolvePath(this.cwd, path);
|
|
354
|
+
const aborted = abortResult(abortSignal, resolved);
|
|
355
|
+
if (aborted)
|
|
356
|
+
return aborted;
|
|
357
|
+
try {
|
|
358
|
+
return ok(await readFile(resolved, { signal: abortSignal }));
|
|
359
|
+
}
|
|
360
|
+
catch (error) {
|
|
361
|
+
return err(toFileError(error, resolved));
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
async writeFile(path, content, abortSignal) {
|
|
365
|
+
const resolved = resolvePath(this.cwd, path);
|
|
366
|
+
const aborted = abortResult(abortSignal, resolved);
|
|
367
|
+
if (aborted)
|
|
368
|
+
return aborted;
|
|
369
|
+
try {
|
|
370
|
+
await mkdir(resolve(resolved, '..'), { recursive: true });
|
|
371
|
+
const afterMkdirAbort = abortResult(abortSignal, resolved);
|
|
372
|
+
if (afterMkdirAbort)
|
|
373
|
+
return afterMkdirAbort;
|
|
374
|
+
await writeFile(resolved, content, { signal: abortSignal });
|
|
375
|
+
return ok(undefined);
|
|
376
|
+
}
|
|
377
|
+
catch (error) {
|
|
378
|
+
return err(toFileError(error, resolved));
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
async appendFile(path, content) {
|
|
382
|
+
const resolved = resolvePath(this.cwd, path);
|
|
383
|
+
try {
|
|
384
|
+
await mkdir(resolve(resolved, '..'), { recursive: true });
|
|
385
|
+
await appendFile(resolved, content);
|
|
386
|
+
return ok(undefined);
|
|
387
|
+
}
|
|
388
|
+
catch (error) {
|
|
389
|
+
return err(toFileError(error, resolved));
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
async fileInfo(path) {
|
|
393
|
+
const resolved = resolvePath(this.cwd, path);
|
|
394
|
+
try {
|
|
395
|
+
return fileInfoFromStats(resolved, await lstat(resolved));
|
|
396
|
+
}
|
|
397
|
+
catch (error) {
|
|
398
|
+
return err(toFileError(error, resolved));
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
async listDir(path, abortSignal) {
|
|
402
|
+
const resolved = resolvePath(this.cwd, path);
|
|
403
|
+
const aborted = abortResult(abortSignal, resolved);
|
|
404
|
+
if (aborted)
|
|
405
|
+
return aborted;
|
|
406
|
+
try {
|
|
407
|
+
const entries = await readdir(resolved, { withFileTypes: true });
|
|
408
|
+
const infos = [];
|
|
409
|
+
for (const entry of entries) {
|
|
410
|
+
const loopAbort = abortResult(abortSignal, resolved);
|
|
411
|
+
if (loopAbort)
|
|
412
|
+
return loopAbort;
|
|
413
|
+
const entryPath = resolve(resolved, entry.name);
|
|
414
|
+
try {
|
|
415
|
+
const info = fileInfoFromStats(entryPath, await lstat(entryPath));
|
|
416
|
+
if (info.ok)
|
|
417
|
+
infos.push(info.value);
|
|
418
|
+
}
|
|
419
|
+
catch (error) {
|
|
420
|
+
return err(toFileError(error, entryPath));
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
return ok(infos);
|
|
424
|
+
}
|
|
425
|
+
catch (error) {
|
|
426
|
+
return err(toFileError(error, resolved));
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
async canonicalPath(path) {
|
|
430
|
+
const resolved = resolvePath(this.cwd, path);
|
|
431
|
+
try {
|
|
432
|
+
return ok(await realpath(resolved));
|
|
433
|
+
}
|
|
434
|
+
catch (error) {
|
|
435
|
+
return err(toFileError(error, resolved));
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
async exists(path) {
|
|
439
|
+
const result = await this.fileInfo(path);
|
|
440
|
+
if (result.ok)
|
|
441
|
+
return ok(true);
|
|
442
|
+
if (result.error.code === 'not_found')
|
|
443
|
+
return ok(false);
|
|
444
|
+
return err(result.error);
|
|
445
|
+
}
|
|
446
|
+
async createDir(path, options) {
|
|
447
|
+
const resolved = resolvePath(this.cwd, path);
|
|
448
|
+
try {
|
|
449
|
+
await mkdir(resolved, { recursive: options?.recursive ?? true });
|
|
450
|
+
return ok(undefined);
|
|
451
|
+
}
|
|
452
|
+
catch (error) {
|
|
453
|
+
return err(toFileError(error, resolved));
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
async remove(path, options) {
|
|
457
|
+
const resolved = resolvePath(this.cwd, path);
|
|
458
|
+
try {
|
|
459
|
+
await rm(resolved, {
|
|
460
|
+
recursive: options?.recursive ?? false,
|
|
461
|
+
force: options?.force ?? false,
|
|
462
|
+
});
|
|
463
|
+
return ok(undefined);
|
|
464
|
+
}
|
|
465
|
+
catch (error) {
|
|
466
|
+
return err(toFileError(error, resolved));
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
async createTempDir(prefix = 'tmp-') {
|
|
470
|
+
try {
|
|
471
|
+
return ok(await mkdtemp(join(tmpdir(), prefix)));
|
|
472
|
+
}
|
|
473
|
+
catch (error) {
|
|
474
|
+
return err(toFileError(error));
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
async createTempFile(options) {
|
|
478
|
+
const dir = await this.createTempDir('tmp-');
|
|
479
|
+
if (!dir.ok)
|
|
480
|
+
return dir;
|
|
481
|
+
const filePath = join(dir.value, `${options?.prefix ?? ''}${randomUUID()}${options?.suffix ?? ''}`);
|
|
482
|
+
try {
|
|
483
|
+
await writeFile(filePath, '');
|
|
484
|
+
return ok(filePath);
|
|
485
|
+
}
|
|
486
|
+
catch (error) {
|
|
487
|
+
return err(toFileError(error, filePath));
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
async cleanup() {
|
|
491
|
+
// nothing to clean up for the local node implementation
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZWpzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9hZ2VudC1jb3JlL3NyYy9oYXJuZXNzL2Vudi9ub2RlanMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDekMsT0FBTyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUN0RCxPQUFPLEVBQ0wsTUFBTSxFQUNOLFVBQVUsRUFDVixLQUFLLEVBQ0wsS0FBSyxFQUNMLE9BQU8sRUFDUCxPQUFPLEVBQ1AsUUFBUSxFQUNSLFFBQVEsRUFDUixFQUFFLEVBQ0YsU0FBUyxHQUNWLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNqQyxPQUFPLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDdEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVoRCxPQUFPLEVBQ0wsR0FBRyxFQUVILGNBQWMsRUFDZCxTQUFTLEVBR1QsRUFBRSxFQUVGLE9BQU8sR0FDUixNQUFNLGFBQWEsQ0FBQztBQUVyQixTQUFTLFdBQVcsQ0FBQyxHQUFXLEVBQUUsSUFBWTtJQUM1QyxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3RELENBQUM7QUFFRCxTQUFTLGlCQUFpQixDQUFDLEtBSTFCO0lBQ0MsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFO1FBQUUsT0FBTyxNQUFNLENBQUM7SUFDbEMsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFF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
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ImageContent, Message, TextContent } from '@earendil-works/pi-ai';
|
|
2
|
-
import type { AgentMessage } from '../types.
|
|
2
|
+
import type { AgentMessage } from '../types.ts';
|
|
3
3
|
export declare const COMPACTION_SUMMARY_PREFIX = "The conversation history before this point was compacted into the following summary:\n\n<summary>\n";
|
|
4
4
|
export declare const COMPACTION_SUMMARY_SUFFIX = "\n</summary>";
|
|
5
5
|
export declare const BRANCH_SUMMARY_PREFIX = "The following is a summary of a branch that this conversation came back from:\n\n<summary>\n";
|
|
@@ -35,7 +35,7 @@ export interface CompactionSummaryMessage {
|
|
|
35
35
|
tokensBefore: number;
|
|
36
36
|
timestamp: number;
|
|
37
37
|
}
|
|
38
|
-
declare module '../types.
|
|
38
|
+
declare module '../types.ts' {
|
|
39
39
|
interface CustomAgentMessages {
|
|
40
40
|
bashExecution: BashExecutionMessage;
|
|
41
41
|
custom: CustomMessage;
|
|
@@ -113,4 +113,4 @@ export function convertToLlm(messages) {
|
|
|
113
113
|
})
|
|
114
114
|
.filter((m) => m !== undefined);
|
|
115
115
|
}
|
|
116
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
116
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2FnZW50LWNvcmUvc3JjL2hhcm5lc3MvbWVzc2FnZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUc7OztDQUd4QyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUc7V0FDOUIsQ0FBQztBQUVaLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHOzs7Q0FHcEMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLFlBQVksQ0FBQztBQThDbEQsTUFBTSxVQUFVLG1CQUFtQixDQUFDLEdBQXlCO0lBQzNELElBQUksSUFBSSxHQUFHLFNBQVMsR0FBRyxDQUFDLE9BQU8sTUFBTSxDQUFDO0lBQ3RDLElBQUksR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2YsSUFBSSxJQUFJLFdBQVcsR0FBRyxDQUFDLE1BQU0sVUFBVSxDQUFDO0lBQzFDLENBQUM7U0FBTSxDQUFDO1FBQ04sSUFBSSxJQUFJLGFBQWEsQ0FBQztJQUN4QixDQUFDO0lBQ0QsSUFBSSxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDbEIsSUFBSSxJQUFJLHlCQUF5QixDQUFDO0lBQ3BDLENBQUM7U0FBTSxJQUNMLEdBQUcsQ0FBQyxRQUFRLEtBQUssSUFBSTtRQUNyQixHQUFHLENBQUMsUUFBUSxLQUFLLFNBQVM7UUFDMUIsR0FBRyxDQUFDLFFBQVEsS0FBSyxDQUFDLEVBQ2xCLENBQUM7UUFDRCxJQUFJLElBQUksZ0NBQWdDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN6RCxDQUFDO0lBQ0QsSUFBSSxHQUFHLENBQUMsU0FBUyxJQUFJLEdBQUcsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN4QyxJQUFJLElBQUksdUNBQXVDLEdBQUcsQ0FBQyxjQUFjLEdBQUcsQ0FBQztJQUN2RSxDQUFD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
|
|
@@ -1,8 +1,11 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type ExecutionEnv, type PromptTemplate } from './types.ts';
|
|
2
|
+
export type PromptTemplateDiagnosticCode = 'file_info_failed' | 'list_failed' | 'read_failed' | 'parse_failed';
|
|
2
3
|
/** Warning produced while loading prompt templates. */
|
|
3
4
|
export interface PromptTemplateDiagnostic {
|
|
4
5
|
/** Diagnostic severity. Currently only warnings are emitted. */
|
|
5
6
|
type: 'warning';
|
|
7
|
+
/** Stable diagnostic code. */
|
|
8
|
+
code: PromptTemplateDiagnosticCode;
|
|
6
9
|
/** Human-readable diagnostic message. */
|
|
7
10
|
message: string;
|
|
8
11
|
/** Path associated with the diagnostic. */
|