psadk 1.4.8 → 1.5.1
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/lib/PSAI.js +1 -2
- package/build/main/lib/PSAgent.d.ts +46 -44
- package/build/main/lib/PSAgent.js +176 -961
- package/build/main/lib/PSAgentConfig.d.ts +110 -26
- 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/{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/skills/skillParser.d.ts +13 -3
- package/build/main/lib/skills/skillParser.js +61 -12
- package/build/main/lib/skills/utils.js +18 -10
- 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 +46 -44
- package/build/module/lib/PSAgent.js +176 -961
- package/build/module/lib/PSAgentConfig.d.ts +110 -26
- 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/skills/skillParser.d.ts +13 -3
- package/build/module/lib/skills/skillParser.js +61 -12
- package/build/module/lib/skills/utils.js +18 -10
- 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 +2 -1
- 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,234 @@
|
|
|
1
|
+
import { SessionError, toError } from "../types.js";
|
|
2
|
+
import { getFileSystemResultOrThrow } from "./repo-utils.js";
|
|
3
|
+
import { uuidv7 } from "./uuid.js";
|
|
4
|
+
function updateLabelCache(labelsById, entry) {
|
|
5
|
+
if (entry.type !== 'label')
|
|
6
|
+
return;
|
|
7
|
+
const label = entry.label?.trim();
|
|
8
|
+
if (label) {
|
|
9
|
+
labelsById.set(entry.targetId, label);
|
|
10
|
+
}
|
|
11
|
+
else {
|
|
12
|
+
labelsById.delete(entry.targetId);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
function buildLabelsById(entries) {
|
|
16
|
+
const labelsById = new Map();
|
|
17
|
+
for (const entry of entries) {
|
|
18
|
+
updateLabelCache(labelsById, entry);
|
|
19
|
+
}
|
|
20
|
+
return labelsById;
|
|
21
|
+
}
|
|
22
|
+
function generateEntryId(byId) {
|
|
23
|
+
for (let i = 0; i < 100; i++) {
|
|
24
|
+
const id = uuidv7().slice(0, 8);
|
|
25
|
+
if (!byId.has(id))
|
|
26
|
+
return id;
|
|
27
|
+
}
|
|
28
|
+
return uuidv7();
|
|
29
|
+
}
|
|
30
|
+
function isRecord(value) {
|
|
31
|
+
return typeof value === 'object' && value !== null;
|
|
32
|
+
}
|
|
33
|
+
function invalidSession(filePath, message, cause) {
|
|
34
|
+
return new SessionError('invalid_session', `Invalid JSONL session file ${filePath}: ${message}`, cause);
|
|
35
|
+
}
|
|
36
|
+
function invalidEntry(filePath, lineNumber, message, cause) {
|
|
37
|
+
return new SessionError('invalid_entry', `Invalid JSONL session file ${filePath}: line ${lineNumber} ${message}`, cause);
|
|
38
|
+
}
|
|
39
|
+
function parseHeaderLine(line, filePath) {
|
|
40
|
+
let parsed;
|
|
41
|
+
try {
|
|
42
|
+
parsed = JSON.parse(line);
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
throw invalidSession(filePath, 'first line is not a valid session header', toError(error));
|
|
46
|
+
}
|
|
47
|
+
if (!isRecord(parsed))
|
|
48
|
+
throw invalidSession(filePath, 'first line is not a valid session header');
|
|
49
|
+
if (parsed.type !== 'session')
|
|
50
|
+
throw invalidSession(filePath, 'first line is not a valid session header');
|
|
51
|
+
if (parsed.version !== 3)
|
|
52
|
+
throw invalidSession(filePath, 'unsupported session version');
|
|
53
|
+
if (typeof parsed.id !== 'string' || !parsed.id)
|
|
54
|
+
throw invalidSession(filePath, 'session header is missing id');
|
|
55
|
+
if (typeof parsed.timestamp !== 'string' || !parsed.timestamp) {
|
|
56
|
+
throw invalidSession(filePath, 'session header is missing timestamp');
|
|
57
|
+
}
|
|
58
|
+
if (typeof parsed.cwd !== 'string' || !parsed.cwd)
|
|
59
|
+
throw invalidSession(filePath, 'session header is missing cwd');
|
|
60
|
+
if (parsed.parentSession !== undefined &&
|
|
61
|
+
typeof parsed.parentSession !== 'string') {
|
|
62
|
+
throw invalidSession(filePath, 'session header parentSession must be a string');
|
|
63
|
+
}
|
|
64
|
+
return {
|
|
65
|
+
type: 'session',
|
|
66
|
+
version: 3,
|
|
67
|
+
id: parsed.id,
|
|
68
|
+
timestamp: parsed.timestamp,
|
|
69
|
+
cwd: parsed.cwd,
|
|
70
|
+
parentSession: parsed.parentSession,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
function parseEntryLine(line, filePath, lineNumber) {
|
|
74
|
+
let parsed;
|
|
75
|
+
try {
|
|
76
|
+
parsed = JSON.parse(line);
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
throw invalidEntry(filePath, lineNumber, 'is not valid JSON', toError(error));
|
|
80
|
+
}
|
|
81
|
+
if (!isRecord(parsed))
|
|
82
|
+
throw invalidEntry(filePath, lineNumber, 'is not a valid session entry');
|
|
83
|
+
if (typeof parsed.type !== 'string')
|
|
84
|
+
throw invalidEntry(filePath, lineNumber, 'is missing entry type');
|
|
85
|
+
if (typeof parsed.id !== 'string' || !parsed.id)
|
|
86
|
+
throw invalidEntry(filePath, lineNumber, 'is missing entry id');
|
|
87
|
+
if (parsed.parentId !== null && typeof parsed.parentId !== 'string') {
|
|
88
|
+
throw invalidEntry(filePath, lineNumber, 'has invalid parentId');
|
|
89
|
+
}
|
|
90
|
+
if (typeof parsed.timestamp !== 'string' || !parsed.timestamp) {
|
|
91
|
+
throw invalidEntry(filePath, lineNumber, 'is missing timestamp');
|
|
92
|
+
}
|
|
93
|
+
if (parsed.type === 'leaf' &&
|
|
94
|
+
parsed.targetId !== null &&
|
|
95
|
+
typeof parsed.targetId !== 'string') {
|
|
96
|
+
throw invalidEntry(filePath, lineNumber, 'has invalid targetId');
|
|
97
|
+
}
|
|
98
|
+
return parsed;
|
|
99
|
+
}
|
|
100
|
+
function leafIdAfterEntry(entry) {
|
|
101
|
+
return entry.type === 'leaf' ? entry.targetId : entry.id;
|
|
102
|
+
}
|
|
103
|
+
function headerToSessionMetadata(header, path) {
|
|
104
|
+
return {
|
|
105
|
+
id: header.id,
|
|
106
|
+
createdAt: header.timestamp,
|
|
107
|
+
cwd: header.cwd,
|
|
108
|
+
path,
|
|
109
|
+
parentSessionPath: header.parentSession,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
export async function loadJsonlSessionMetadata(fs, filePath) {
|
|
113
|
+
const lines = getFileSystemResultOrThrow(await fs.readTextLines(filePath, { maxLines: 1 }), `Failed to read session header ${filePath}`);
|
|
114
|
+
const line = lines[0];
|
|
115
|
+
if (line?.trim())
|
|
116
|
+
return headerToSessionMetadata(parseHeaderLine(line, filePath), filePath);
|
|
117
|
+
throw invalidSession(filePath, 'missing session header');
|
|
118
|
+
}
|
|
119
|
+
async function loadJsonlStorage(fs, filePath) {
|
|
120
|
+
const content = getFileSystemResultOrThrow(await fs.readTextFile(filePath), `Failed to read session ${filePath}`);
|
|
121
|
+
const lines = content.split('\n').filter((line) => line.trim());
|
|
122
|
+
if (lines.length === 0) {
|
|
123
|
+
throw invalidSession(filePath, 'missing session header');
|
|
124
|
+
}
|
|
125
|
+
const header = parseHeaderLine(lines[0], filePath);
|
|
126
|
+
const entries = [];
|
|
127
|
+
let leafId = null;
|
|
128
|
+
for (let i = 1; i < lines.length; i++) {
|
|
129
|
+
const entry = parseEntryLine(lines[i], filePath, i + 1);
|
|
130
|
+
entries.push(entry);
|
|
131
|
+
leafId = leafIdAfterEntry(entry);
|
|
132
|
+
}
|
|
133
|
+
return { header, entries, leafId };
|
|
134
|
+
}
|
|
135
|
+
export class JsonlSessionStorage {
|
|
136
|
+
fs;
|
|
137
|
+
filePath;
|
|
138
|
+
metadata;
|
|
139
|
+
entries;
|
|
140
|
+
byId;
|
|
141
|
+
labelsById;
|
|
142
|
+
currentLeafId;
|
|
143
|
+
constructor(fs, filePath, header, entries, leafId) {
|
|
144
|
+
this.fs = fs;
|
|
145
|
+
this.filePath = filePath;
|
|
146
|
+
this.metadata = headerToSessionMetadata(header, this.filePath);
|
|
147
|
+
this.entries = entries;
|
|
148
|
+
this.byId = new Map(entries.map((entry) => [entry.id, entry]));
|
|
149
|
+
this.labelsById = buildLabelsById(entries);
|
|
150
|
+
this.currentLeafId = leafId;
|
|
151
|
+
}
|
|
152
|
+
static async open(fs, filePath) {
|
|
153
|
+
const loaded = await loadJsonlStorage(fs, filePath);
|
|
154
|
+
return new JsonlSessionStorage(fs, filePath, loaded.header, loaded.entries, loaded.leafId);
|
|
155
|
+
}
|
|
156
|
+
static async create(fs, filePath, options) {
|
|
157
|
+
const header = {
|
|
158
|
+
type: 'session',
|
|
159
|
+
version: 3,
|
|
160
|
+
id: options.sessionId,
|
|
161
|
+
timestamp: new Date().toISOString(),
|
|
162
|
+
cwd: options.cwd,
|
|
163
|
+
parentSession: options.parentSessionPath,
|
|
164
|
+
};
|
|
165
|
+
getFileSystemResultOrThrow(await fs.writeFile(filePath, `${JSON.stringify(header)}\n`), `Failed to create session ${filePath}`);
|
|
166
|
+
return new JsonlSessionStorage(fs, filePath, header, [], null);
|
|
167
|
+
}
|
|
168
|
+
async getMetadata() {
|
|
169
|
+
return this.metadata;
|
|
170
|
+
}
|
|
171
|
+
async getLeafId() {
|
|
172
|
+
if (this.currentLeafId !== null && !this.byId.has(this.currentLeafId)) {
|
|
173
|
+
throw new SessionError('invalid_session', `Entry ${this.currentLeafId} not found`);
|
|
174
|
+
}
|
|
175
|
+
return this.currentLeafId;
|
|
176
|
+
}
|
|
177
|
+
async setLeafId(leafId) {
|
|
178
|
+
if (leafId !== null && !this.byId.has(leafId)) {
|
|
179
|
+
throw new SessionError('not_found', `Entry ${leafId} not found`);
|
|
180
|
+
}
|
|
181
|
+
const entry = {
|
|
182
|
+
type: 'leaf',
|
|
183
|
+
id: generateEntryId(this.byId),
|
|
184
|
+
parentId: this.currentLeafId,
|
|
185
|
+
timestamp: new Date().toISOString(),
|
|
186
|
+
targetId: leafId,
|
|
187
|
+
};
|
|
188
|
+
getFileSystemResultOrThrow(await this.fs.appendFile(this.filePath, `${JSON.stringify(entry)}\n`), `Failed to append session leaf ${entry.id}`);
|
|
189
|
+
this.entries.push(entry);
|
|
190
|
+
this.byId.set(entry.id, entry);
|
|
191
|
+
this.currentLeafId = leafId;
|
|
192
|
+
}
|
|
193
|
+
async createEntryId() {
|
|
194
|
+
return generateEntryId(this.byId);
|
|
195
|
+
}
|
|
196
|
+
async appendEntry(entry) {
|
|
197
|
+
getFileSystemResultOrThrow(await this.fs.appendFile(this.filePath, `${JSON.stringify(entry)}\n`), `Failed to append session entry ${entry.id}`);
|
|
198
|
+
this.entries.push(entry);
|
|
199
|
+
this.byId.set(entry.id, entry);
|
|
200
|
+
updateLabelCache(this.labelsById, entry);
|
|
201
|
+
this.currentLeafId = leafIdAfterEntry(entry);
|
|
202
|
+
}
|
|
203
|
+
async getEntry(id) {
|
|
204
|
+
return this.byId.get(id);
|
|
205
|
+
}
|
|
206
|
+
async findEntries(type) {
|
|
207
|
+
return this.entries.filter((entry) => entry.type === type);
|
|
208
|
+
}
|
|
209
|
+
async getLabel(id) {
|
|
210
|
+
return this.labelsById.get(id);
|
|
211
|
+
}
|
|
212
|
+
async getPathToRoot(leafId) {
|
|
213
|
+
if (leafId === null)
|
|
214
|
+
return [];
|
|
215
|
+
const path = [];
|
|
216
|
+
let current = this.byId.get(leafId);
|
|
217
|
+
if (!current)
|
|
218
|
+
throw new SessionError('not_found', `Entry ${leafId} not found`);
|
|
219
|
+
while (current) {
|
|
220
|
+
path.unshift(current);
|
|
221
|
+
if (!current.parentId)
|
|
222
|
+
break;
|
|
223
|
+
const parent = this.byId.get(current.parentId);
|
|
224
|
+
if (!parent)
|
|
225
|
+
throw new SessionError('invalid_session', `Entry ${current.parentId} not found`);
|
|
226
|
+
current = parent;
|
|
227
|
+
}
|
|
228
|
+
return path;
|
|
229
|
+
}
|
|
230
|
+
async getEntries() {
|
|
231
|
+
return [...this.entries];
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbmwtc3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvYWdlbnQtY29yZS9zcmMvaGFybmVzcy9zZXNzaW9uL2pzb25sLXN0b3JhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBT0EsT0FBTyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFcEQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQWdCbkMsU0FBUyxnQkFBZ0IsQ0FDdkIsVUFBK0IsRUFDL0IsS0FBdUI7SUFFdkIsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE9BQU87UUFBRSxPQUFPO0lBQ25DLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDbEMsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUNWLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN4QyxDQUFDO1NBQU0sQ0FBQztRQUNOLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBUyxlQUFlLENBQUMsT0FBMkI7SUFDbEQsTUFBTSxVQUFVLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7SUFDN0MsS0FBSyxNQUFNLEtBQUssSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUM1QixnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUNELE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUM7QUFFRCxTQUFTLGVBQWUsQ0FBQyxJQUFrQztJQUN6RCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxF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
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type Session, type SessionMetadata, type SessionRepo } from '../types.ts';
|
|
2
2
|
export declare class InMemorySessionRepo implements SessionRepo<SessionMetadata, {
|
|
3
3
|
id?: string;
|
|
4
4
|
}, void> {
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { SessionError, } from "../types.js";
|
|
2
|
+
import { InMemorySessionStorage } from "./memory-storage.js";
|
|
3
|
+
import { createSessionId, createTimestamp, getEntriesToFork, toSession, } from "./repo-utils.js";
|
|
4
|
+
export class InMemorySessionRepo {
|
|
5
|
+
sessions = new Map();
|
|
6
|
+
async create(options = {}) {
|
|
7
|
+
const metadata = {
|
|
8
|
+
id: options.id ?? createSessionId(),
|
|
9
|
+
createdAt: createTimestamp(),
|
|
10
|
+
};
|
|
11
|
+
const storage = new InMemorySessionStorage({ metadata });
|
|
12
|
+
const session = toSession(storage);
|
|
13
|
+
this.sessions.set(metadata.id, session);
|
|
14
|
+
return session;
|
|
15
|
+
}
|
|
16
|
+
async open(metadata) {
|
|
17
|
+
const session = this.sessions.get(metadata.id);
|
|
18
|
+
if (!session) {
|
|
19
|
+
throw new SessionError('not_found', `Session not found: ${metadata.id}`);
|
|
20
|
+
}
|
|
21
|
+
return session;
|
|
22
|
+
}
|
|
23
|
+
async list() {
|
|
24
|
+
return Promise.all([...this.sessions.values()].map((session) => session.getMetadata()));
|
|
25
|
+
}
|
|
26
|
+
async delete(metadata) {
|
|
27
|
+
this.sessions.delete(metadata.id);
|
|
28
|
+
}
|
|
29
|
+
async fork(sourceMetadata, options) {
|
|
30
|
+
const source = await this.open(sourceMetadata);
|
|
31
|
+
const forkedEntries = await getEntriesToFork(source.getStorage(), options);
|
|
32
|
+
const metadata = {
|
|
33
|
+
id: options.id ?? createSessionId(),
|
|
34
|
+
createdAt: createTimestamp(),
|
|
35
|
+
};
|
|
36
|
+
const storage = new InMemorySessionStorage({
|
|
37
|
+
metadata,
|
|
38
|
+
entries: forkedEntries,
|
|
39
|
+
});
|
|
40
|
+
const session = toSession(storage);
|
|
41
|
+
this.sessions.set(metadata.id, session);
|
|
42
|
+
return session;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtb3J5LXJlcG8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2FnZW50LWNvcmUvc3JjL2hhcm5lc3Mvc2Vzc2lvbi9tZW1vcnktcmVwby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsWUFBWSxHQUdiLE1BQU0sYUFBYSxDQUFDO0FBRXJCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzdELE9BQU8sRUFDTCxlQUFlLEVBQ2YsZUFBZSxFQUNmLGdCQUFnQixFQUNoQixTQUFTLEdBQ1YsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QixNQUFNLE9BQU8sbUJBQW1CO0lBS3RCLFFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBb0MsQ0FBQztJQUUvRCxLQUFLLENBQUMsTUFBTSxDQUNWLFVBQTJCLEVBQUU7UUFFN0IsTUFBTSxRQUFRLEdBQW9CO1lBQ2hDLEVBQUUsRUFBRSxPQUFPLENBQUMsRUFBRSxJQUFJLGVBQWUsRUFBRTtZQUNuQyxTQUFTLEVBQUUsZUFBZSxFQUFFO1NBQzdCLENBQUM7UUFDRixNQUFNLE9BQU8sR0FBRyxJQUFJLHNCQUFzQixDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUN6RCxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN4QyxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUF5QjtRQUNsQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsTUFBTSxJQUFJLFlBQVksQ0FBQyxXQUFXLEVBQUUsc0JBQXNCLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzNFLENBQUM7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsS0FBSyxDQUFDLElBQUk7UUFDUixPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQ2hCLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FDcEUsQ0FBQztJQUNKLENBQUM7SUFFRCxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQXlCO1FBQ3BDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsS0FBSyxDQUFDLElBQUksQ0FDUixjQUErQixFQUMvQixPQUFzRTtRQUV0RSxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDL0MsTUFBTSxhQUFhLEdBQUcsTUFBTSxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDM0UsTUFBTSxRQUFRLEdBQW9CO1lBQ2hDLEVBQUUsRUFBRSxPQUFPLENBQUMsRUFBRSxJQUFJLGVBQWUsRUFBRTtZQUNuQyxTQUFTLEVBQUUsZUFBZSxFQUFFO1NBQzdCLENBQUM7UUFDRixNQUFNLE9BQU8sR0FBRyxJQUFJLHNCQUFzQixDQUFDO1lBQ3pDLFFBQVE7WUFDUixPQUFPLEVBQUUsYUFBYTtTQUN2QixDQUFDLENBQUM7UUFDSCxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN4QyxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0NBQ0YifQ==
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type
|
|
2
|
-
export declare class InMemorySessionStorage implements SessionStorage {
|
|
1
|
+
import { type SessionMetadata, type SessionStorage, type SessionTreeEntry } from '../types.ts';
|
|
2
|
+
export declare class InMemorySessionStorage<TMetadata extends SessionMetadata = SessionMetadata> implements SessionStorage<TMetadata> {
|
|
3
3
|
private readonly metadata;
|
|
4
4
|
private entries;
|
|
5
5
|
private byId;
|
|
@@ -7,10 +7,9 @@ export declare class InMemorySessionStorage implements SessionStorage {
|
|
|
7
7
|
private leafId;
|
|
8
8
|
constructor(options?: {
|
|
9
9
|
entries?: SessionTreeEntry[];
|
|
10
|
-
|
|
11
|
-
metadata?: SessionMetadata;
|
|
10
|
+
metadata?: TMetadata;
|
|
12
11
|
});
|
|
13
|
-
getMetadata(): Promise<
|
|
12
|
+
getMetadata(): Promise<TMetadata>;
|
|
14
13
|
getLeafId(): Promise<string | null>;
|
|
15
14
|
setLeafId(leafId: string | null): Promise<void>;
|
|
16
15
|
createEntryId(): Promise<string>;
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { SessionError, } from "../types.js";
|
|
2
|
+
import { uuidv7 } from "./uuid.js";
|
|
3
|
+
function updateLabelCache(labelsById, entry) {
|
|
4
|
+
if (entry.type !== 'label')
|
|
5
|
+
return;
|
|
6
|
+
const label = entry.label?.trim();
|
|
7
|
+
if (label) {
|
|
8
|
+
labelsById.set(entry.targetId, label);
|
|
9
|
+
}
|
|
10
|
+
else {
|
|
11
|
+
labelsById.delete(entry.targetId);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
function buildLabelsById(entries) {
|
|
15
|
+
const labelsById = new Map();
|
|
16
|
+
for (const entry of entries) {
|
|
17
|
+
updateLabelCache(labelsById, entry);
|
|
18
|
+
}
|
|
19
|
+
return labelsById;
|
|
20
|
+
}
|
|
21
|
+
function generateEntryId(byId) {
|
|
22
|
+
for (let i = 0; i < 100; i++) {
|
|
23
|
+
const id = uuidv7().slice(0, 8);
|
|
24
|
+
if (!byId.has(id))
|
|
25
|
+
return id;
|
|
26
|
+
}
|
|
27
|
+
return uuidv7();
|
|
28
|
+
}
|
|
29
|
+
function leafIdAfterEntry(entry) {
|
|
30
|
+
return entry.type === 'leaf' ? entry.targetId : entry.id;
|
|
31
|
+
}
|
|
32
|
+
export class InMemorySessionStorage {
|
|
33
|
+
metadata;
|
|
34
|
+
entries;
|
|
35
|
+
byId;
|
|
36
|
+
labelsById;
|
|
37
|
+
leafId;
|
|
38
|
+
constructor(options) {
|
|
39
|
+
this.entries = options?.entries ? [...options.entries] : [];
|
|
40
|
+
this.byId = new Map(this.entries.map((entry) => [entry.id, entry]));
|
|
41
|
+
this.labelsById = buildLabelsById(this.entries);
|
|
42
|
+
this.leafId = null;
|
|
43
|
+
for (const entry of this.entries)
|
|
44
|
+
this.leafId = leafIdAfterEntry(entry);
|
|
45
|
+
if (this.leafId !== null && !this.byId.has(this.leafId)) {
|
|
46
|
+
throw new SessionError('invalid_session', `Entry ${this.leafId} not found`);
|
|
47
|
+
}
|
|
48
|
+
this.metadata =
|
|
49
|
+
options?.metadata ??
|
|
50
|
+
{ id: uuidv7(), createdAt: new Date().toISOString() };
|
|
51
|
+
}
|
|
52
|
+
async getMetadata() {
|
|
53
|
+
return this.metadata;
|
|
54
|
+
}
|
|
55
|
+
async getLeafId() {
|
|
56
|
+
if (this.leafId !== null && !this.byId.has(this.leafId)) {
|
|
57
|
+
throw new SessionError('invalid_session', `Entry ${this.leafId} not found`);
|
|
58
|
+
}
|
|
59
|
+
return this.leafId;
|
|
60
|
+
}
|
|
61
|
+
async setLeafId(leafId) {
|
|
62
|
+
if (leafId !== null && !this.byId.has(leafId)) {
|
|
63
|
+
throw new SessionError('not_found', `Entry ${leafId} not found`);
|
|
64
|
+
}
|
|
65
|
+
const entry = {
|
|
66
|
+
type: 'leaf',
|
|
67
|
+
id: generateEntryId(this.byId),
|
|
68
|
+
parentId: this.leafId,
|
|
69
|
+
timestamp: new Date().toISOString(),
|
|
70
|
+
targetId: leafId,
|
|
71
|
+
};
|
|
72
|
+
this.entries.push(entry);
|
|
73
|
+
this.byId.set(entry.id, entry);
|
|
74
|
+
this.leafId = leafId;
|
|
75
|
+
}
|
|
76
|
+
async createEntryId() {
|
|
77
|
+
return generateEntryId(this.byId);
|
|
78
|
+
}
|
|
79
|
+
async appendEntry(entry) {
|
|
80
|
+
this.entries.push(entry);
|
|
81
|
+
this.byId.set(entry.id, entry);
|
|
82
|
+
updateLabelCache(this.labelsById, entry);
|
|
83
|
+
this.leafId = leafIdAfterEntry(entry);
|
|
84
|
+
}
|
|
85
|
+
async getEntry(id) {
|
|
86
|
+
return this.byId.get(id);
|
|
87
|
+
}
|
|
88
|
+
async findEntries(type) {
|
|
89
|
+
return this.entries.filter((entry) => entry.type === type);
|
|
90
|
+
}
|
|
91
|
+
async getLabel(id) {
|
|
92
|
+
return this.labelsById.get(id);
|
|
93
|
+
}
|
|
94
|
+
async getPathToRoot(leafId) {
|
|
95
|
+
if (leafId === null)
|
|
96
|
+
return [];
|
|
97
|
+
const path = [];
|
|
98
|
+
let current = this.byId.get(leafId);
|
|
99
|
+
if (!current)
|
|
100
|
+
throw new SessionError('not_found', `Entry ${leafId} not found`);
|
|
101
|
+
while (current) {
|
|
102
|
+
path.unshift(current);
|
|
103
|
+
if (!current.parentId)
|
|
104
|
+
break;
|
|
105
|
+
const parent = this.byId.get(current.parentId);
|
|
106
|
+
if (!parent)
|
|
107
|
+
throw new SessionError('invalid_session', `Entry ${current.parentId} not found`);
|
|
108
|
+
current = parent;
|
|
109
|
+
}
|
|
110
|
+
return path;
|
|
111
|
+
}
|
|
112
|
+
async getEntries() {
|
|
113
|
+
return [...this.entries];
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtb3J5LXN0b3JhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2FnZW50LWNvcmUvc3JjL2hhcm5lc3Mvc2Vzc2lvbi9tZW1vcnktc3RvcmFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsWUFBWSxHQUliLE1BQU0sYUFBYSxDQUFDO0FBRXJCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFbkMsU0FBUyxnQkFBZ0IsQ0FDdkIsVUFBK0IsRUFDL0IsS0FBdUI7SUFFdkIsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE9BQU87UUFBRSxPQUFPO0lBQ25DLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDbEMsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUNWLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN4QyxDQUFDO1NBQU0sQ0FBQztRQUNOLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBUyxlQUFlLENBQUMsT0FBMkI7SUFDbEQsTUFBTSxVQUFVLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7SUFDN0MsS0FBSyxNQUFNLEtBQUssSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUM1QixnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUNELE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUM7QUFFRCxTQUFTLGVBQWUsQ0FBQyxJQUFrQztJQUN6RCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDN0IsTUFBTSxFQUFFLEdBQUcsTUFBTSxFQUFF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
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import { Session } from '
|
|
1
|
+
import { type FileError, type Result, type SessionMetadata, type SessionStorage, type SessionTreeEntry } from '../types.ts';
|
|
2
|
+
import { Session } from './session.ts';
|
|
3
3
|
export declare function createSessionId(): string;
|
|
4
4
|
export declare function createTimestamp(): string;
|
|
5
5
|
export declare function toSession<TMetadata extends SessionMetadata>(storage: SessionStorage<TMetadata>): Session<TMetadata>;
|
|
6
|
+
export declare function getFileSystemResultOrThrow<TValue>(result: Result<TValue, FileError>, message: string): TValue;
|
|
6
7
|
export declare function getEntriesToFork(storage: SessionStorage, options: {
|
|
7
8
|
entryId?: string;
|
|
8
9
|
position?: 'before' | 'at';
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { SessionError, } from "../types.js";
|
|
2
|
+
import { Session } from "./session.js";
|
|
3
|
+
import { uuidv7 } from "./uuid.js";
|
|
4
|
+
export function createSessionId() {
|
|
5
|
+
return uuidv7();
|
|
6
|
+
}
|
|
7
|
+
export function createTimestamp() {
|
|
8
|
+
return new Date().toISOString();
|
|
9
|
+
}
|
|
10
|
+
export function toSession(storage) {
|
|
11
|
+
return new Session(storage);
|
|
12
|
+
}
|
|
13
|
+
export function getFileSystemResultOrThrow(result, message) {
|
|
14
|
+
if (!result.ok) {
|
|
15
|
+
const code = result.error.code === 'not_found' ? 'not_found' : 'storage';
|
|
16
|
+
throw new SessionError(code, `${message}: ${result.error.message}`, result.error);
|
|
17
|
+
}
|
|
18
|
+
return result.value;
|
|
19
|
+
}
|
|
20
|
+
export async function getEntriesToFork(storage, options) {
|
|
21
|
+
if (!options.entryId)
|
|
22
|
+
return storage.getEntries();
|
|
23
|
+
const target = await storage.getEntry(options.entryId);
|
|
24
|
+
if (!target) {
|
|
25
|
+
throw new SessionError('invalid_fork_target', `Entry ${options.entryId} not found`);
|
|
26
|
+
}
|
|
27
|
+
let effectiveLeafId;
|
|
28
|
+
if ((options.position ?? 'before') === 'at') {
|
|
29
|
+
effectiveLeafId = target.id;
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
if (target.type !== 'message' || target.message.role !== 'user') {
|
|
33
|
+
throw new SessionError('invalid_fork_target', `Entry ${options.entryId} is not a user message`);
|
|
34
|
+
}
|
|
35
|
+
effectiveLeafId = target.parentId;
|
|
36
|
+
}
|
|
37
|
+
return storage.getPathToRoot(effectiveLeafId);
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwby11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvYWdlbnQtY29yZS9zcmMvaGFybmVzcy9zZXNzaW9uL3JlcG8tdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLFlBQVksR0FJYixNQUFNLGFBQWEsQ0FBQztBQUVyQixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFbkMsTUFBTSxVQUFVLGVBQWU7SUFDN0IsT0FBTyxNQUFNLEVBQUUsQ0FBQztBQUNsQixDQUFDO0FBRUQsTUFBTSxVQUFVLGVBQWU7SUFDN0IsT0FBTyxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ2xDLENBQUM7QUFFRCxNQUFNLFVBQVUsU0FBUyxDQUN2QixPQUFrQztJQUVsQyxPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzlCLENBQUM7QUFFRCxNQUFNLFVBQVUsMEJBQTBCLENBQ3hDLE1BQWlDLEVBQ2pDLE9BQWU7SUFFZixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ2YsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUN6RSxNQUFNLElBQUksWUFBWSxDQUNwQixJQUFJLEVBQ0osR0FBRyxPQUFPLEtBQUssTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFDckMsTUFBTSxDQUFDLEtBQUssQ0FDYixDQUFDO0lBQ0osQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQztBQUN0QixDQUFDO0FBRUQsTUFBTSxDQUFDLEtBQUssVUFBVSxnQkFBZ0IsQ0FDcEMsT0FBdUIsRUFDdkIsT0FBeUQ7SUFFekQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPO1FBQUUsT0FBTyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDbEQsTUFBTSxNQUFNLEdBQUcsTUFBTSxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN2RCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDWixNQUFNLElBQUksWUFBWSxDQUNwQixxQkFBcUIsRUFDckIsU0FBUyxPQUFPLENBQUMsT0FBTyxZQUFZLENBQ3JDLENBQUM7SUFDSixDQUFDO0lBQ0QsSUFBSSxlQUE4QixDQUFDO0lBQ25DLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO1FBQzVDLGVBQWUsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDO0lBQzlCLENBQUM7U0FBTSxDQUFDO1FBQ04sSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUNoRSxNQUFNLElBQUksWUFBWSxDQUNwQixxQkFBcUIsRUFDckIsU0FBUyxPQUFPLENBQUMsT0FBTyx3QkFBd0IsQ0FDakQsQ0FBQztRQUNKLENBQUM7UUFDRCxlQUFlLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQztJQUNwQyxDQUFDO0lBQ0QsT0FBTyxPQUFPLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQ2hELENBQUMifQ==
|
package/build/{module/lib/agent-core → main/lib/agent-core/src}/harness/session/session.d.ts
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ImageContent, TextContent } from '@earendil-works/pi-ai';
|
|
2
|
-
import type { AgentMessage } from '../../types.
|
|
3
|
-
import type { SessionContext, SessionMetadata, SessionStorage, SessionTreeEntry } from '../types.
|
|
2
|
+
import type { AgentMessage } from '../../types.ts';
|
|
3
|
+
import type { SessionContext, SessionMetadata, SessionStorage, SessionTreeEntry } from '../types.ts';
|
|
4
4
|
export declare function buildSessionContext(pathEntries: SessionTreeEntry[]): SessionContext;
|
|
5
5
|
export declare class Session<TMetadata extends SessionMetadata = SessionMetadata> {
|
|
6
6
|
private storage;
|
|
@@ -18,6 +18,7 @@ export declare class Session<TMetadata extends SessionMetadata = SessionMetadata
|
|
|
18
18
|
appendMessage(message: AgentMessage): Promise<string>;
|
|
19
19
|
appendThinkingLevelChange(thinkingLevel: string): Promise<string>;
|
|
20
20
|
appendModelChange(provider: string, modelId: string): Promise<string>;
|
|
21
|
+
appendActiveToolsChange(activeToolNames: string[]): Promise<string>;
|
|
21
22
|
appendCompaction<T = unknown>(summary: string, firstKeptEntryId: string, tokensBefore: number, details?: T, fromHook?: boolean): Promise<string>;
|
|
22
23
|
appendCustomEntry(customType: string, data?: unknown): Promise<string>;
|
|
23
24
|
appendCustomMessageEntry<T = unknown>(customType: string, content: string | (TextContent | ImageContent)[], display: boolean, details?: T): Promise<string>;
|