psadk 1.4.1 → 1.4.3
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
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import type { ImageContent, Message, TextContent } from
|
|
2
|
-
import type { AgentMessage } from
|
|
1
|
+
import type { ImageContent, Message, TextContent } from '@earendil-works/pi-ai';
|
|
2
|
+
import type { AgentMessage } from '../types.js';
|
|
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";
|
|
6
6
|
export declare const BRANCH_SUMMARY_SUFFIX = "</summary>";
|
|
7
7
|
export interface BashExecutionMessage {
|
|
8
|
-
role:
|
|
8
|
+
role: 'bashExecution';
|
|
9
9
|
command: string;
|
|
10
10
|
output: string;
|
|
11
11
|
exitCode: number | undefined;
|
|
@@ -16,7 +16,7 @@ export interface BashExecutionMessage {
|
|
|
16
16
|
excludeFromContext?: boolean;
|
|
17
17
|
}
|
|
18
18
|
export interface CustomMessage<T = unknown> {
|
|
19
|
-
role:
|
|
19
|
+
role: 'custom';
|
|
20
20
|
customType: string;
|
|
21
21
|
content: string | (TextContent | ImageContent)[];
|
|
22
22
|
display: boolean;
|
|
@@ -24,18 +24,18 @@ export interface CustomMessage<T = unknown> {
|
|
|
24
24
|
timestamp: number;
|
|
25
25
|
}
|
|
26
26
|
export interface BranchSummaryMessage {
|
|
27
|
-
role:
|
|
27
|
+
role: 'branchSummary';
|
|
28
28
|
summary: string;
|
|
29
29
|
fromId: string;
|
|
30
30
|
timestamp: number;
|
|
31
31
|
}
|
|
32
32
|
export interface CompactionSummaryMessage {
|
|
33
|
-
role:
|
|
33
|
+
role: 'compactionSummary';
|
|
34
34
|
summary: string;
|
|
35
35
|
tokensBefore: number;
|
|
36
36
|
timestamp: number;
|
|
37
37
|
}
|
|
38
|
-
declare module
|
|
38
|
+
declare module '../types.js' {
|
|
39
39
|
interface CustomAgentMessages {
|
|
40
40
|
bashExecution: BashExecutionMessage;
|
|
41
41
|
custom: CustomMessage;
|
|
@@ -15,12 +15,14 @@ export function bashExecutionToText(msg) {
|
|
|
15
15
|
text += `\`\`\`\n${msg.output}\n\`\`\``;
|
|
16
16
|
}
|
|
17
17
|
else {
|
|
18
|
-
text +=
|
|
18
|
+
text += '(no output)';
|
|
19
19
|
}
|
|
20
20
|
if (msg.cancelled) {
|
|
21
|
-
text +=
|
|
21
|
+
text += '\n\n(command cancelled)';
|
|
22
22
|
}
|
|
23
|
-
else if (msg.exitCode !== null &&
|
|
23
|
+
else if (msg.exitCode !== null &&
|
|
24
|
+
msg.exitCode !== undefined &&
|
|
25
|
+
msg.exitCode !== 0) {
|
|
24
26
|
text += `\n\nCommand exited with code ${msg.exitCode}`;
|
|
25
27
|
}
|
|
26
28
|
if (msg.truncated && msg.fullOutputPath) {
|
|
@@ -30,7 +32,7 @@ export function bashExecutionToText(msg) {
|
|
|
30
32
|
}
|
|
31
33
|
export function createBranchSummaryMessage(summary, fromId, timestamp) {
|
|
32
34
|
return {
|
|
33
|
-
role:
|
|
35
|
+
role: 'branchSummary',
|
|
34
36
|
summary,
|
|
35
37
|
fromId,
|
|
36
38
|
timestamp: new Date(timestamp).getTime(),
|
|
@@ -38,7 +40,7 @@ export function createBranchSummaryMessage(summary, fromId, timestamp) {
|
|
|
38
40
|
}
|
|
39
41
|
export function createCompactionSummaryMessage(summary, tokensBefore, timestamp) {
|
|
40
42
|
return {
|
|
41
|
-
role:
|
|
43
|
+
role: 'compactionSummary',
|
|
42
44
|
summary,
|
|
43
45
|
tokensBefore,
|
|
44
46
|
timestamp: new Date(timestamp).getTime(),
|
|
@@ -46,7 +48,7 @@ export function createCompactionSummaryMessage(summary, tokensBefore, timestamp)
|
|
|
46
48
|
}
|
|
47
49
|
export function createCustomMessage(customType, content, display, details, timestamp) {
|
|
48
50
|
return {
|
|
49
|
-
role:
|
|
51
|
+
role: 'custom',
|
|
50
52
|
customType,
|
|
51
53
|
content,
|
|
52
54
|
display,
|
|
@@ -58,40 +60,52 @@ export function convertToLlm(messages) {
|
|
|
58
60
|
return messages
|
|
59
61
|
.map((m) => {
|
|
60
62
|
switch (m.role) {
|
|
61
|
-
case
|
|
63
|
+
case 'bashExecution':
|
|
62
64
|
if (m.excludeFromContext) {
|
|
63
65
|
return undefined;
|
|
64
66
|
}
|
|
65
67
|
return {
|
|
66
|
-
role:
|
|
67
|
-
content: [{ type:
|
|
68
|
+
role: 'user',
|
|
69
|
+
content: [{ type: 'text', text: bashExecutionToText(m) }],
|
|
68
70
|
timestamp: m.timestamp,
|
|
69
71
|
};
|
|
70
|
-
case
|
|
71
|
-
const content = typeof m.content ===
|
|
72
|
+
case 'custom': {
|
|
73
|
+
const content = typeof m.content === 'string'
|
|
74
|
+
? [{ type: 'text', text: m.content }]
|
|
75
|
+
: m.content;
|
|
72
76
|
return {
|
|
73
|
-
role:
|
|
77
|
+
role: 'user',
|
|
74
78
|
content,
|
|
75
79
|
timestamp: m.timestamp,
|
|
76
80
|
};
|
|
77
81
|
}
|
|
78
|
-
case
|
|
82
|
+
case 'branchSummary':
|
|
79
83
|
return {
|
|
80
|
-
role:
|
|
81
|
-
content: [
|
|
84
|
+
role: 'user',
|
|
85
|
+
content: [
|
|
86
|
+
{
|
|
87
|
+
type: 'text',
|
|
88
|
+
text: BRANCH_SUMMARY_PREFIX + m.summary + BRANCH_SUMMARY_SUFFIX,
|
|
89
|
+
},
|
|
90
|
+
],
|
|
82
91
|
timestamp: m.timestamp,
|
|
83
92
|
};
|
|
84
|
-
case
|
|
93
|
+
case 'compactionSummary':
|
|
85
94
|
return {
|
|
86
|
-
role:
|
|
95
|
+
role: 'user',
|
|
87
96
|
content: [
|
|
88
|
-
{
|
|
97
|
+
{
|
|
98
|
+
type: 'text',
|
|
99
|
+
text: COMPACTION_SUMMARY_PREFIX +
|
|
100
|
+
m.summary +
|
|
101
|
+
COMPACTION_SUMMARY_SUFFIX,
|
|
102
|
+
},
|
|
89
103
|
],
|
|
90
104
|
timestamp: m.timestamp,
|
|
91
105
|
};
|
|
92
|
-
case
|
|
93
|
-
case
|
|
94
|
-
case
|
|
106
|
+
case 'user':
|
|
107
|
+
case 'assistant':
|
|
108
|
+
case 'toolResult':
|
|
95
109
|
return m;
|
|
96
110
|
default:
|
|
97
111
|
return undefined;
|
|
@@ -99,4 +113,4 @@ export function convertToLlm(messages) {
|
|
|
99
113
|
})
|
|
100
114
|
.filter((m) => m !== undefined);
|
|
101
115
|
}
|
|
102
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
116
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2FnZW50LWNvcmUvaGFybmVzcy9tZXNzYWdlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRzs7O0NBR3hDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRztXQUM5QixDQUFDO0FBRVosTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUc7OztDQUdwQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsWUFBWSxDQUFDO0FBOENsRCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsR0FBeUI7SUFDM0QsSUFBSSxJQUFJLEdBQUcsU0FBUyxHQUFHLENBQUMsT0FBTyxNQUFNLENBQUM7SUFDdEMsSUFBSSxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDZixJQUFJLElBQUksV0FBVyxHQUFHLENBQUMsTUFBTSxVQUFVLENBQUM7SUFDMUMsQ0FBQztTQUFNLENBQUM7UUFDTixJQUFJLElBQUksYUFBYSxDQUFDO0lBQ3hCLENBQUM7SUFDRCxJQUFJLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNsQixJQUFJLElBQUkseUJBQXlCLENBQUM7SUFDcEMsQ0FBQztTQUFNLElBQ0wsR0FBRyxDQUFDLFFBQVEsS0FBSyxJQUFJO1FBQ3JCLEdBQUcsQ0FBQyxRQUFRLEtBQUssU0FBUztRQUMxQixHQUFHLENBQUMsUUFBUSxLQUFLLENBQUMsRUFDbEIsQ0FBQztRQUNELElBQUksSUFBSSxnQ0FBZ0MsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3pELENBQUM7SUFDRCxJQUFJLEdBQUcsQ0FBQyxTQUFTLElBQUksR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3hDLElBQUksSUFBSSx1Q0FBdUMsR0FBRyxDQUFDLGNBQWMsR0FBRyxDQUFDO0lBQ3ZFLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRCxNQUFNLFVBQVUsMEJBQTBCLENBQ3hDLE9BQWUsRUFDZixNQUFjLEVBQ2QsU0FBaUI7SUFFakIsT0FBTztRQUNMLElBQUksRUFBRSxlQUFlO1FBQ3JCLE9BQU87UUFDUCxNQUFNO1FBQ04sU0FBUyxFQUFFLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sRUFBRTtLQUN6QyxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSw4QkFBOEIsQ0FDNUMsT0FBZSxFQUNmLFlBQW9CLEVBQ3BCLFNBQWlCO0lBRWpCLE9BQU87UUFDTCxJQUFJLEVBQUUsbUJBQW1CO1FBQ3pCLE9BQU87UUFDUCxZQUFZO1FBQ1osU0FBUyxFQUFFLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sRUFBRTtLQUN6QyxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxtQkFBbUIsQ0FDakMsVUFBa0IsRUFDbEIsT0FBZ0QsRUFDaEQsT0FBZ0IsRUFDaEIsT0FBNEIsRUFDNUIsU0FBaUI7SUFFakIsT0FBTztRQUNMLElBQUksRUFBRSxRQUFRO1FBQ2QsVUFBVTtRQUNWLE9BQU87UUFDUCxPQUFPO1FBQ1AsT0FBTztRQUNQLFNBQVMsRUFBRSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLEVBQUU7S0FDekMsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUFDLFFBQXdCO0lBQ25ELE9BQU8sUUFBUTtTQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBdUIsRUFBRTtRQUM5QixRQUFRLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNmLEtBQUssZUFBZTtnQkFDbEIsSUFBSSxDQUFDLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztvQkFDekIsT0FBTyxTQUFTLENBQUM7Z0JBQ25CLENBQUM7Z0JBQ0QsT0FBTztvQkFDTCxJQUFJLEVBQUUsTUFBTTtvQkFDWixPQUFPLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ3pELFNBQVMsRUFBRSxDQUFDLENBQUMsU0FBUztpQkFDdkIsQ0FBQztZQUNKLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQztnQkFDZCxNQUFNLE9BQU8sR0FDWCxPQUFPLENBQUMsQ0FBQyxPQUFPLEtBQUssUUFBUTtvQkFDM0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBZSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQzlDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO2dCQUNoQixPQUFPO29CQUNMLElBQUksRUFBRSxNQUFNO29CQUNaLE9BQU87b0JBQ1AsU0FBUyxFQUFFLENBQUMsQ0FBQyxTQUFTO2lCQUN2QixDQUFDO1lBQ0osQ0FBQztZQUNELEtBQUssZUFBZTtnQkFDbEIsT0FBTztvQkFDTCxJQUFJLEVBQUUsTUFBTTtvQkFDWixPQUFPLEVBQUU7d0JBQ1A7NEJBQ0UsSUFBSSxFQUFFLE1BQWU7NEJBQ3JCLElBQUksRUFBRSxxQkFBcUIsR0FBRyxDQUFDLENBQUMsT0FBTyxHQUFHLHFCQUFxQjt5QkFDaEU7cUJBQ0Y7b0JBQ0QsU0FBUyxFQUFFLENBQUMsQ0FBQyxTQUFTO2lCQUN2QixDQUFDO1lBQ0osS0FBSyxtQkFBbUI7Z0JBQ3RCLE9BQU87b0JBQ0wsSUFBSSxFQUFFLE1BQU07b0JBQ1osT0FBTyxFQUFFO3dCQUNQOzRCQUNFLElBQUksRUFBRSxNQUFlOzRCQUNyQixJQUFJLEVBQ0YseUJBQXlCO2dDQUN6QixDQUFDLENBQUMsT0FBTztnQ0FDVCx5QkFBeUI7eUJBQzVCO3FCQUNGO29CQUNELFNBQVMsRUFBRSxDQUFDLENBQUMsU0FBUztpQkFDdkIsQ0FBQztZQUNKLEtBQUssTUFBTSxDQUFDO1lBQ1osS0FBSyxXQUFXLENBQUM7WUFDakIsS0FBSyxZQUFZO2dCQUNmLE9BQU8sQ0FBQyxDQUFDO1lBQ1g7Z0JBQ0UsT0FBTyxTQUFTLENBQUM7UUFDckIsQ0FBQztJQUNILENBQUMsQ0FBQztTQUNELE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBZ0IsRUFBRSxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQztBQUNsRCxDQUFDIn0=
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import type { ExecutionEnv, PromptTemplate } from
|
|
1
|
+
import type { ExecutionEnv, PromptTemplate } from './types.js';
|
|
2
2
|
/** Warning produced while loading prompt templates. */
|
|
3
3
|
export interface PromptTemplateDiagnostic {
|
|
4
4
|
/** Diagnostic severity. Currently only warnings are emitted. */
|
|
5
|
-
type:
|
|
5
|
+
type: 'warning';
|
|
6
6
|
/** Human-readable diagnostic message. */
|
|
7
7
|
message: string;
|
|
8
8
|
/** Path associated with the diagnostic. */
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { parse } from
|
|
1
|
+
import { parse } from 'yaml';
|
|
2
2
|
/**
|
|
3
3
|
* Load prompt templates from one or more paths.
|
|
4
4
|
*
|
|
@@ -13,12 +13,12 @@ export async function loadPromptTemplates(env, paths) {
|
|
|
13
13
|
if (!info)
|
|
14
14
|
continue;
|
|
15
15
|
const kind = await resolveKind(env, info);
|
|
16
|
-
if (kind ===
|
|
16
|
+
if (kind === 'directory') {
|
|
17
17
|
const result = await loadTemplatesFromDir(env, info.path);
|
|
18
18
|
promptTemplates.push(...result.promptTemplates);
|
|
19
19
|
diagnostics.push(...result.diagnostics);
|
|
20
20
|
}
|
|
21
|
-
else if (kind ===
|
|
21
|
+
else if (kind === 'file' && info.name.endsWith('.md')) {
|
|
22
22
|
const result = await loadTemplateFromFile(env, info.path);
|
|
23
23
|
if (result.promptTemplate)
|
|
24
24
|
promptTemplates.push(result.promptTemplate);
|
|
@@ -60,15 +60,15 @@ async function loadTemplatesFromDir(env, dir) {
|
|
|
60
60
|
}
|
|
61
61
|
catch (error) {
|
|
62
62
|
diagnostics.push({
|
|
63
|
-
type:
|
|
64
|
-
message: errorMessage(error,
|
|
63
|
+
type: 'warning',
|
|
64
|
+
message: errorMessage(error, 'failed to list prompt template directory'),
|
|
65
65
|
path: dir,
|
|
66
66
|
});
|
|
67
67
|
return { promptTemplates, diagnostics };
|
|
68
68
|
}
|
|
69
69
|
for (const entry of entries.sort((a, b) => a.name.localeCompare(b.name))) {
|
|
70
70
|
const kind = await resolveKind(env, entry);
|
|
71
|
-
if (kind !==
|
|
71
|
+
if (kind !== 'file' || !entry.name.endsWith('.md'))
|
|
72
72
|
continue;
|
|
73
73
|
const result = await loadTemplateFromFile(env, entry.path);
|
|
74
74
|
if (result.promptTemplate)
|
|
@@ -82,16 +82,18 @@ async function loadTemplateFromFile(env, filePath) {
|
|
|
82
82
|
try {
|
|
83
83
|
const rawContent = await env.readTextFile(filePath);
|
|
84
84
|
const { frontmatter, body } = parseFrontmatter(rawContent);
|
|
85
|
-
const firstLine = body.split(
|
|
86
|
-
let description = typeof frontmatter.description ===
|
|
85
|
+
const firstLine = body.split('\n').find((line) => line.trim());
|
|
86
|
+
let description = typeof frontmatter.description === 'string'
|
|
87
|
+
? frontmatter.description
|
|
88
|
+
: '';
|
|
87
89
|
if (!description && firstLine) {
|
|
88
90
|
description = firstLine.slice(0, 60);
|
|
89
91
|
if (firstLine.length > 60)
|
|
90
|
-
description +=
|
|
92
|
+
description += '...';
|
|
91
93
|
}
|
|
92
94
|
return {
|
|
93
95
|
promptTemplate: {
|
|
94
|
-
name: basenameEnvPath(filePath).replace(/\.md$/i,
|
|
96
|
+
name: basenameEnvPath(filePath).replace(/\.md$/i, ''),
|
|
95
97
|
description,
|
|
96
98
|
content: body,
|
|
97
99
|
},
|
|
@@ -100,8 +102,8 @@ async function loadTemplateFromFile(env, filePath) {
|
|
|
100
102
|
}
|
|
101
103
|
catch (error) {
|
|
102
104
|
diagnostics.push({
|
|
103
|
-
type:
|
|
104
|
-
message: errorMessage(error,
|
|
105
|
+
type: 'warning',
|
|
106
|
+
message: errorMessage(error, 'failed to load prompt template'),
|
|
105
107
|
path: filePath,
|
|
106
108
|
});
|
|
107
109
|
return { promptTemplate: null, diagnostics };
|
|
@@ -116,22 +118,24 @@ async function safeFileInfo(env, path) {
|
|
|
116
118
|
}
|
|
117
119
|
}
|
|
118
120
|
async function resolveKind(env, info) {
|
|
119
|
-
if (info.kind ===
|
|
121
|
+
if (info.kind === 'file' || info.kind === 'directory')
|
|
120
122
|
return info.kind;
|
|
121
123
|
try {
|
|
122
124
|
const realPath = await env.realPath(info.path);
|
|
123
125
|
const target = await env.fileInfo(realPath);
|
|
124
|
-
return target.kind ===
|
|
126
|
+
return target.kind === 'file' || target.kind === 'directory'
|
|
127
|
+
? target.kind
|
|
128
|
+
: undefined;
|
|
125
129
|
}
|
|
126
130
|
catch {
|
|
127
131
|
return undefined;
|
|
128
132
|
}
|
|
129
133
|
}
|
|
130
134
|
function parseFrontmatter(content) {
|
|
131
|
-
const normalized = content.replace(/\r\n/g,
|
|
132
|
-
if (!normalized.startsWith(
|
|
135
|
+
const normalized = content.replace(/\r\n/g, '\n').replace(/\r/g, '\n');
|
|
136
|
+
if (!normalized.startsWith('---'))
|
|
133
137
|
return { frontmatter: {}, body: normalized };
|
|
134
|
-
const endIndex = normalized.indexOf(
|
|
138
|
+
const endIndex = normalized.indexOf('\n---', 3);
|
|
135
139
|
if (endIndex === -1)
|
|
136
140
|
return { frontmatter: {}, body: normalized };
|
|
137
141
|
const yamlString = normalized.slice(4, endIndex);
|
|
@@ -139,8 +143,8 @@ function parseFrontmatter(content) {
|
|
|
139
143
|
return { frontmatter: (parse(yamlString) ?? {}), body };
|
|
140
144
|
}
|
|
141
145
|
function basenameEnvPath(path) {
|
|
142
|
-
const normalized = path.replace(/\/+$/,
|
|
143
|
-
const slashIndex = normalized.lastIndexOf(
|
|
146
|
+
const normalized = path.replace(/\/+$/, '');
|
|
147
|
+
const slashIndex = normalized.lastIndexOf('/');
|
|
144
148
|
return slashIndex === -1 ? normalized : normalized.slice(slashIndex + 1);
|
|
145
149
|
}
|
|
146
150
|
function errorMessage(error, fallback) {
|
|
@@ -149,7 +153,7 @@ function errorMessage(error, fallback) {
|
|
|
149
153
|
/** Parse an argument string using simple shell-style single and double quotes. */
|
|
150
154
|
export function parseCommandArgs(argsString) {
|
|
151
155
|
const args = [];
|
|
152
|
-
let current =
|
|
156
|
+
let current = '';
|
|
153
157
|
let inQuote = null;
|
|
154
158
|
for (let i = 0; i < argsString.length; i++) {
|
|
155
159
|
const char = argsString[i];
|
|
@@ -162,10 +166,10 @@ export function parseCommandArgs(argsString) {
|
|
|
162
166
|
else if (char === '"' || char === "'") {
|
|
163
167
|
inQuote = char;
|
|
164
168
|
}
|
|
165
|
-
else if (char ===
|
|
169
|
+
else if (char === ' ' || char === '\t') {
|
|
166
170
|
if (current) {
|
|
167
171
|
args.push(current);
|
|
168
|
-
current =
|
|
172
|
+
current = '';
|
|
169
173
|
}
|
|
170
174
|
}
|
|
171
175
|
else {
|
|
@@ -179,16 +183,16 @@ export function parseCommandArgs(argsString) {
|
|
|
179
183
|
/** Substitute prompt template placeholders (`$1`, `$@`, `$ARGUMENTS`, `${@:N}`, `${@:N:L}`) with command arguments. */
|
|
180
184
|
export function substituteArgs(content, args) {
|
|
181
185
|
let result = content;
|
|
182
|
-
result = result.replace(/\$(\d+)/g, (_, num) => args[parseInt(num, 10) - 1] ??
|
|
186
|
+
result = result.replace(/\$(\d+)/g, (_, num) => args[parseInt(num, 10) - 1] ?? '');
|
|
183
187
|
result = result.replace(/\$\{@:(\d+)(?::(\d+))?\}/g, (_, startStr, lengthStr) => {
|
|
184
188
|
let start = parseInt(startStr, 10) - 1;
|
|
185
189
|
if (start < 0)
|
|
186
190
|
start = 0;
|
|
187
191
|
if (lengthStr)
|
|
188
|
-
return args.slice(start, start + parseInt(lengthStr, 10)).join(
|
|
189
|
-
return args.slice(start).join(
|
|
192
|
+
return args.slice(start, start + parseInt(lengthStr, 10)).join(' ');
|
|
193
|
+
return args.slice(start).join(' ');
|
|
190
194
|
});
|
|
191
|
-
const allArgs = args.join(
|
|
195
|
+
const allArgs = args.join(' ');
|
|
192
196
|
result = result.replace(/\$ARGUMENTS/g, allArgs);
|
|
193
197
|
result = result.replace(/\$@/g, allArgs);
|
|
194
198
|
return result;
|
|
@@ -197,4 +201,4 @@ export function substituteArgs(content, args) {
|
|
|
197
201
|
export function formatPromptTemplateInvocation(template, args = []) {
|
|
198
202
|
return substituteArgs(template.content, args);
|
|
199
203
|
}
|
|
200
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
204
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvbXB0LXRlbXBsYXRlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvYWdlbnQtY29yZS9oYXJuZXNzL3Byb21wdC10ZW1wbGF0ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQW9CN0I7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLG1CQUFtQixDQUN2QyxHQUFpQixFQUNqQixLQUF3QjtJQUt4QixNQUFNLGVBQWUsR0FBcUIsRUFBRSxDQUFDO0lBQzdDLE1BQU0sV0FBVyxHQUErQixFQUFFLENBQUM7SUFDbkQsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUMxRCxNQUFNLElBQUksR0FBRyxNQUFNLFlBQVksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLElBQUk7WUFBRSxTQUFTO1FBQ3BCLE1BQU0sSUFBSSxHQUFHLE1BQU0sV0FBVyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMxQyxJQUFJLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQztZQUN6QixNQUFNLE1BQU0sR0FBRyxNQUFNLG9CQUFvQixDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUQsZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUNoRCxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzFDLENBQUM7YUFBTSxJQUFJLElBQUksS0FBSyxNQUFNLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxD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
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { JsonlSessionCreateOptions, JsonlSessionListOptions, JsonlSessionMetadata, JsonlSessionRepoApi, Session } from
|
|
1
|
+
import type { JsonlSessionCreateOptions, JsonlSessionListOptions, JsonlSessionMetadata, JsonlSessionRepoApi, Session } from '../../types.js';
|
|
2
2
|
export declare class JsonlSessionRepo implements JsonlSessionRepoApi {
|
|
3
3
|
private sessionsRoot;
|
|
4
4
|
constructor(options: {
|
|
@@ -12,7 +12,7 @@ export declare class JsonlSessionRepo implements JsonlSessionRepoApi {
|
|
|
12
12
|
delete(metadata: JsonlSessionMetadata): Promise<void>;
|
|
13
13
|
fork(sourceMetadata: JsonlSessionMetadata, options: JsonlSessionCreateOptions & {
|
|
14
14
|
entryId?: string;
|
|
15
|
-
position?:
|
|
15
|
+
position?: 'before' | 'at';
|
|
16
16
|
id?: string;
|
|
17
17
|
}): Promise<Session<JsonlSessionMetadata>>;
|
|
18
18
|
private listSessionDirs;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { constants } from
|
|
2
|
-
import { access, mkdir, readdir, rm } from
|
|
3
|
-
import { join, resolve } from
|
|
4
|
-
import { JsonlSessionStorage, loadJsonlSessionMetadata } from
|
|
5
|
-
import { createSessionId, createTimestamp, getEntriesToFork, toSession } from
|
|
1
|
+
import { constants } from 'node:fs';
|
|
2
|
+
import { access, mkdir, readdir, rm } from 'node:fs/promises';
|
|
3
|
+
import { join, resolve } from 'node:path';
|
|
4
|
+
import { JsonlSessionStorage, loadJsonlSessionMetadata, } from '../storage/jsonl.js';
|
|
5
|
+
import { createSessionId, createTimestamp, getEntriesToFork, toSession, } from './shared.js';
|
|
6
6
|
async function exists(path) {
|
|
7
7
|
try {
|
|
8
8
|
await access(path, constants.F_OK);
|
|
@@ -13,7 +13,7 @@ async function exists(path) {
|
|
|
13
13
|
}
|
|
14
14
|
}
|
|
15
15
|
function encodeCwd(cwd) {
|
|
16
|
-
return `--${cwd.replace(/^[/\\]/,
|
|
16
|
+
return `--${cwd.replace(/^[/\\]/, '').replace(/[/\\:]/g, '-')}--`;
|
|
17
17
|
}
|
|
18
18
|
export class JsonlSessionRepo {
|
|
19
19
|
sessionsRoot;
|
|
@@ -24,7 +24,7 @@ export class JsonlSessionRepo {
|
|
|
24
24
|
return join(this.sessionsRoot, encodeCwd(cwd));
|
|
25
25
|
}
|
|
26
26
|
createSessionFilePath(cwd, sessionId, timestamp) {
|
|
27
|
-
return join(this.getSessionDir(cwd), `${timestamp.replace(/[:.]/g,
|
|
27
|
+
return join(this.getSessionDir(cwd), `${timestamp.replace(/[:.]/g, '-')}_${sessionId}.jsonl`);
|
|
28
28
|
}
|
|
29
29
|
async create(options) {
|
|
30
30
|
await mkdir(this.sessionsRoot, { recursive: true });
|
|
@@ -46,12 +46,16 @@ export class JsonlSessionRepo {
|
|
|
46
46
|
return toSession(storage);
|
|
47
47
|
}
|
|
48
48
|
async list(options = {}) {
|
|
49
|
-
const dirs = options.cwd
|
|
49
|
+
const dirs = options.cwd
|
|
50
|
+
? [this.getSessionDir(options.cwd)]
|
|
51
|
+
: await this.listSessionDirs();
|
|
50
52
|
const sessions = [];
|
|
51
53
|
for (const dir of dirs) {
|
|
52
54
|
if (!(await exists(dir)))
|
|
53
55
|
continue;
|
|
54
|
-
const files = (await readdir(dir))
|
|
56
|
+
const files = (await readdir(dir))
|
|
57
|
+
.filter((file) => file.endsWith('.jsonl'))
|
|
58
|
+
.map((file) => join(dir, file));
|
|
55
59
|
for (const filePath of files) {
|
|
56
60
|
try {
|
|
57
61
|
sessions.push(await loadJsonlSessionMetadata(filePath));
|
|
@@ -86,7 +90,9 @@ export class JsonlSessionRepo {
|
|
|
86
90
|
if (!(await exists(this.sessionsRoot)))
|
|
87
91
|
return [];
|
|
88
92
|
const entries = await readdir(this.sessionsRoot, { withFileTypes: true });
|
|
89
|
-
return entries
|
|
93
|
+
return entries
|
|
94
|
+
.filter((entry) => entry.isDirectory())
|
|
95
|
+
.map((entry) => join(this.sessionsRoot, entry.name));
|
|
90
96
|
}
|
|
91
97
|
}
|
|
92
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
98
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbmwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2FnZW50LWNvcmUvaGFybmVzcy9zZXNzaW9uL3JlcG8vanNvbmwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNwQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDOUQsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFTMUMsT0FBTyxFQUNMLG1CQUFtQixFQUNuQix3QkFBd0IsR0FDekIsTUFBTSxxQkFBcUIsQ0FBQztBQUU3QixPQUFPLEVBQ0wsZUFBZSxFQUNmLGVBQWUsRUFDZixnQkFBZ0IsRUFDaEIsU0FBUyxHQUNWLE1BQU0sYUFBYSxDQUFDO0FBRXJCLEtBQUssVUFBVSxNQUFNLENBQUMsSUFBWTtJQUNoQyxJQUFJLENBQUM7UUFDSCxNQUFNLE1BQU0sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25DLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLFNBQVMsQ0FBQyxHQUFXO0lBQzVCLE9BQU8sS0FBSyxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUM7QUFDcEUsQ0FBQztBQUVELE1BQU0sT0FBTyxnQkFBZ0I7SUFDbkIsWUFBWSxDQUFTO0lBRTdCLFlBQVksT0FBaUM7UUFDM0MsSUFBSSxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3BELENB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
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Session, SessionMetadata, SessionRepo } from
|
|
1
|
+
import type { Session, SessionMetadata, SessionRepo } from '../../types.js';
|
|
2
2
|
export declare class InMemorySessionRepo implements SessionRepo<SessionMetadata, {
|
|
3
3
|
id?: string;
|
|
4
4
|
}, void> {
|
|
@@ -11,7 +11,7 @@ export declare class InMemorySessionRepo implements SessionRepo<SessionMetadata,
|
|
|
11
11
|
delete(metadata: SessionMetadata): Promise<void>;
|
|
12
12
|
fork(sourceMetadata: SessionMetadata, options: {
|
|
13
13
|
entryId?: string;
|
|
14
|
-
position?:
|
|
14
|
+
position?: 'before' | 'at';
|
|
15
15
|
id?: string;
|
|
16
16
|
}): Promise<Session<SessionMetadata>>;
|
|
17
17
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { InMemorySessionStorage } from
|
|
2
|
-
import { createSessionId, createTimestamp, getEntriesToFork, toSession } from
|
|
1
|
+
import { InMemorySessionStorage } from '../storage/memory.js';
|
|
2
|
+
import { createSessionId, createTimestamp, getEntriesToFork, toSession, } from './shared.js';
|
|
3
3
|
export class InMemorySessionRepo {
|
|
4
4
|
sessions = new Map();
|
|
5
5
|
async create(options = {}) {
|
|
@@ -33,10 +33,14 @@ export class InMemorySessionRepo {
|
|
|
33
33
|
createdAt: createTimestamp(),
|
|
34
34
|
};
|
|
35
35
|
const leafId = forkedEntries[forkedEntries.length - 1]?.id ?? null;
|
|
36
|
-
const storage = new InMemorySessionStorage({
|
|
36
|
+
const storage = new InMemorySessionStorage({
|
|
37
|
+
metadata,
|
|
38
|
+
entries: forkedEntries,
|
|
39
|
+
leafId,
|
|
40
|
+
});
|
|
37
41
|
const session = toSession(storage);
|
|
38
42
|
this.sessions.set(metadata.id, session);
|
|
39
43
|
return session;
|
|
40
44
|
}
|
|
41
45
|
}
|
|
42
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
46
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtb3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9hZ2VudC1jb3JlL2hhcm5lc3Mvc2Vzc2lvbi9yZXBvL21lbW9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUU5RCxPQUFPLEVBQ0wsZUFBZSxFQUNmLGVBQWUsRUFDZixnQkFBZ0IsRUFDaEIsU0FBUyxHQUNWLE1BQU0sYUFBYSxDQUFDO0FBRXJCLE1BQU0sT0FBTyxtQkFBbUI7SUFLdEIsUUFBUSxHQUFHLElBQUksR0FBRyxFQUFvQyxDQUFDO0lBRS9ELEtBQUssQ0FBQyxNQUFNLENBQ1YsVUFBMkIsRUFBRTtRQUU3QixNQUFNLFFBQVEsR0FBb0I7WUFDaEMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxFQUFFLElBQUksZUFBZSxFQUFFO1lBQ25DLFNBQVMsRUFBRSxlQUFlLEVBQUU7U0FDN0IsQ0FBQztRQUNGLE1BQU0sT0FBTyxHQUFHLElBQUksc0JBQXNCLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3hDLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQXlCO1FBQ2xDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDYixNQUFNLElBQUksS0FBSyxDQUFDLHNCQUFzQixRQUFRLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN2RCxDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFJO1FBQ1IsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUNoQixDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQ3BFLENBQUM7SUFDSixDQUFDO0lBRUQsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUF5QjtRQUNwQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFJLENBQ1IsY0FBK0IsRUFDL0IsT0FBc0U7UUFFdEUsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQy9DLE1BQU0sYUFBYSxHQUFHLE1BQU0sZ0JBQWdCLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzNFLE1BQU0sUUFBUSxHQUFvQjtZQUNoQyxFQUFFLEVBQUUsT0FBTyxDQUFDLEVBQUUsSUFBSSxlQUFlLEVBQUU7WUFDbkMsU0FBUyxFQUFFLGVBQWUsRUFBRTtTQUM3QixDQUFDO1FBQ0YsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLElBQUksQ0FBQztRQUNuRSxNQUFNLE9BQU8sR0FBRyxJQUFJLHNCQUFzQixDQUFDO1lBQ3pDLFFBQVE7WUFDUixPQUFPLEVBQUUsYUFBYTtZQUN0QixNQUFNO1NBQ1AsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDeEMsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztDQUNGIn0=
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import type { SessionMetadata, SessionStorage, SessionTreeEntry } from
|
|
2
|
-
import { Session } from
|
|
1
|
+
import type { SessionMetadata, SessionStorage, SessionTreeEntry } from '../../types.js';
|
|
2
|
+
import { Session } from '../session.js';
|
|
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
6
|
export declare function getEntriesToFork(storage: SessionStorage, options: {
|
|
7
7
|
entryId?: string;
|
|
8
|
-
position?:
|
|
8
|
+
position?: 'before' | 'at';
|
|
9
9
|
}): Promise<SessionTreeEntry[]>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { v7 as uuidv7 } from
|
|
2
|
-
import { Session } from
|
|
1
|
+
import { v7 as uuidv7 } from 'uuid';
|
|
2
|
+
import { Session } from '../session.js';
|
|
3
3
|
export function createSessionId() {
|
|
4
4
|
return uuidv7();
|
|
5
5
|
}
|
|
@@ -17,15 +17,15 @@ export async function getEntriesToFork(storage, options) {
|
|
|
17
17
|
throw new Error(`Entry ${options.entryId} not found`);
|
|
18
18
|
}
|
|
19
19
|
let effectiveLeafId;
|
|
20
|
-
if ((options.position ??
|
|
20
|
+
if ((options.position ?? 'before') === 'at') {
|
|
21
21
|
effectiveLeafId = target.id;
|
|
22
22
|
}
|
|
23
23
|
else {
|
|
24
|
-
if (target.type !==
|
|
24
|
+
if (target.type !== 'message' || target.message.role !== 'user') {
|
|
25
25
|
throw new Error(`Entry ${options.entryId} is not a user message`);
|
|
26
26
|
}
|
|
27
27
|
effectiveLeafId = target.parentId;
|
|
28
28
|
}
|
|
29
29
|
return storage.getPathToRoot(effectiveLeafId);
|
|
30
30
|
}
|
|
31
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9hZ2VudC1jb3JlL2hhcm5lc3Mvc2Vzc2lvbi9yZXBvL3NoYXJlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsRUFBRSxJQUFJLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQU9wQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXhDLE1BQU0sVUFBVSxlQUFlO0lBQzdCLE9BQU8sTUFBTSxFQUFFLENBQUM7QUFDbEIsQ0FBQztBQUVELE1BQU0sVUFBVSxlQUFlO0lBQzdCLE9BQU8sSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNsQyxDQUFDO0FBRUQsTUFBTSxVQUFVLFNBQVMsQ0FDdkIsT0FBa0M7SUFFbEMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM5QixDQUFDO0FBRUQsTUFBTSxDQUFDLEtBQUssVUFBVSxnQkFBZ0IsQ0FDcEMsT0FBdUIsRUFDdkIsT0FBeUQ7SUFFekQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPO1FBQUUsT0FBTyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDbEQsTUFBTSxNQUFNLEdBQUcsTUFBTSxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN2RCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDWixNQUFNLElBQUksS0FBSyxDQUFDLFNBQVMsT0FBTyxDQUFDLE9BQU8sWUFBWSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUNELElBQUksZUFBOEIsQ0FBQztJQUNuQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUM1QyxlQUFlLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQztJQUM5QixDQUFDO1NBQU0sQ0FBQztRQUNOLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxTQUFTLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDaEUsTUFBTSxJQUFJLEtBQUssQ0FBQyxTQUFTLE9BQU8sQ0FBQyxPQUFPLHdCQUF3QixDQUFDLENBQUM7UUFDcEUsQ0FBQztRQUNELGVBQWUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO0lBQ3BDLENBQUM7SUFDRCxPQUFPLE9BQU8sQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDaEQsQ0FBQyJ9
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { ImageContent, TextContent } from
|
|
2
|
-
import type { AgentMessage } from
|
|
3
|
-
import type { SessionContext, SessionMetadata, SessionStorage, SessionTreeEntry } from
|
|
1
|
+
import type { ImageContent, TextContent } from '@earendil-works/pi-ai';
|
|
2
|
+
import type { AgentMessage } from '../../types.js';
|
|
3
|
+
import type { SessionContext, SessionMetadata, SessionStorage, SessionTreeEntry } from '../types.js';
|
|
4
4
|
export declare function buildSessionContext(pathEntries: SessionTreeEntry[]): SessionContext;
|
|
5
5
|
export declare class Session<TMetadata extends SessionMetadata = SessionMetadata> {
|
|
6
6
|
private storage;
|