@minpeter/pss-runtime 0.0.4 → 0.0.5
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 +53 -107
- package/dist/agent-loop.d.ts +20 -12
- package/dist/agent-loop.js +45 -48
- package/dist/agent-loop.js.map +1 -1
- package/dist/agent.d.ts +34 -17
- package/dist/agent.js +50 -31
- package/dist/agent.js.map +1 -1
- package/dist/index.d.ts +8 -7
- package/dist/index.js +4 -5
- package/dist/llm.d.ts +30 -23
- package/dist/llm.js +15 -11
- package/dist/llm.js.map +1 -1
- package/dist/session/events.d.ts +42 -61
- package/dist/session/history.js +31 -29
- package/dist/session/history.js.map +1 -1
- package/dist/session/mapping.js +47 -53
- package/dist/session/mapping.js.map +1 -1
- package/dist/session/run.d.ts +9 -0
- package/dist/session/run.js +78 -0
- package/dist/session/run.js.map +1 -0
- package/dist/session/session.d.ts +7 -16
- package/dist/session/session.js +172 -321
- package/dist/session/session.js.map +1 -1
- package/dist/session/store/file.d.ts +14 -0
- package/dist/session/store/file.js +106 -0
- package/dist/session/store/file.js.map +1 -0
- package/dist/session/store/memory.d.ts +13 -0
- package/dist/session/store/memory.js +31 -0
- package/dist/session/store/memory.js.map +1 -0
- package/dist/session/store/types.d.ts +22 -0
- package/package.json +16 -2
- package/dist/agent-loop.d.ts.map +0 -1
- package/dist/agent.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/llm.d.ts.map +0 -1
- package/dist/session/events.d.ts.map +0 -1
- package/dist/session/events.js +0 -2
- package/dist/session/events.js.map +0 -1
- package/dist/session/history.d.ts +0 -11
- package/dist/session/history.d.ts.map +0 -1
- package/dist/session/mapping.d.ts +0 -7
- package/dist/session/mapping.d.ts.map +0 -1
- package/dist/session/session.d.ts.map +0 -1
package/dist/session/session.js
CHANGED
|
@@ -1,332 +1,183 @@
|
|
|
1
1
|
import { runAgentLoop } from "../agent-loop.js";
|
|
2
2
|
import { AgentModelHistory } from "./history.js";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
const rollbackHistoryWrite = this.#pendingHistoryWrites({
|
|
153
|
-
unblockOnKill: true,
|
|
154
|
-
});
|
|
155
|
-
if (rollbackHistoryWrite) {
|
|
156
|
-
await rollbackHistoryWrite;
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
catch (rollbackOrWriteError) {
|
|
160
|
-
rejectionError = mergeTurnAndPersistenceErrors(error, rollbackOrWriteError);
|
|
161
|
-
}
|
|
162
|
-
this.#emitTurnError(rejectionError);
|
|
163
|
-
item.reject(rejectionError);
|
|
164
|
-
}
|
|
165
|
-
#enqueueHistoryChange(snapshot, onHistoryChange) {
|
|
166
|
-
const writePromise = this.#historyPromiseChain.then(async () => {
|
|
167
|
-
try {
|
|
168
|
-
await onHistoryChange(structuredClone(snapshot));
|
|
169
|
-
}
|
|
170
|
-
catch (error) {
|
|
171
|
-
throw createPersistenceError(error);
|
|
172
|
-
}
|
|
173
|
-
});
|
|
174
|
-
this.#historyPromiseChain = writePromise.catch(() => {
|
|
175
|
-
// Keep later history writes sequenced even if this write fails.
|
|
176
|
-
});
|
|
177
|
-
this.#pendingWrites.add(writePromise);
|
|
178
|
-
writePromise.then(() => this.#pendingWrites.delete(writePromise), (error) => {
|
|
179
|
-
this.#settledWriteErrors.add(error);
|
|
180
|
-
this.#pendingWrites.delete(writePromise);
|
|
181
|
-
});
|
|
182
|
-
}
|
|
183
|
-
#repairHistoryPersistenceAfterInterruptedWait() {
|
|
184
|
-
const onHistoryChange = this.#onHistoryChange;
|
|
185
|
-
if (!onHistoryChange) {
|
|
186
|
-
return;
|
|
187
|
-
}
|
|
188
|
-
const abandonedChain = this.#historyPromiseChain;
|
|
189
|
-
this.#historyPromiseChain = Promise.resolve();
|
|
190
|
-
abandonedChain.then(() => {
|
|
191
|
-
if (this.#killed) {
|
|
192
|
-
return;
|
|
193
|
-
}
|
|
194
|
-
this.#enqueueHistoryChange(this.#history.modelSnapshot(), onHistoryChange);
|
|
195
|
-
});
|
|
196
|
-
}
|
|
197
|
-
async #awaitPendingHistoryWrites(options) {
|
|
198
|
-
const errors = [];
|
|
199
|
-
while (this.#pendingWrites.size > 0) {
|
|
200
|
-
const writes = [...this.#pendingWrites];
|
|
201
|
-
const settledWrites = Promise.allSettled(writes);
|
|
202
|
-
const results = await this.#settleHistoryWrites(settledWrites, options);
|
|
203
|
-
for (const result of results) {
|
|
204
|
-
if (result.status === "rejected") {
|
|
205
|
-
errors.push(result.reason);
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
this.#settledWriteErrors.clear();
|
|
209
|
-
}
|
|
210
|
-
if (errors.length > 0) {
|
|
211
|
-
throw combinePersistenceErrors(errors);
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
#pendingHistoryWrites(options) {
|
|
215
|
-
if (this.#pendingWrites.size === 0) {
|
|
216
|
-
return;
|
|
217
|
-
}
|
|
218
|
-
return this.#awaitPendingHistoryWrites(options);
|
|
219
|
-
}
|
|
220
|
-
async #settleHistoryWrites(writes, options) {
|
|
221
|
-
if (!(options?.unblockOnKill || options?.unblockOnInterrupt)) {
|
|
222
|
-
return writes;
|
|
223
|
-
}
|
|
224
|
-
let interruptibleWrites = writes;
|
|
225
|
-
if (options.unblockOnKill) {
|
|
226
|
-
interruptibleWrites = rejectOnKill(interruptibleWrites, this.#killAbort.signal);
|
|
227
|
-
}
|
|
228
|
-
if (options.unblockOnInterrupt) {
|
|
229
|
-
interruptibleWrites = rejectOnInterrupt(interruptibleWrites, this.#interruptAbort.signal);
|
|
230
|
-
}
|
|
231
|
-
try {
|
|
232
|
-
return await interruptibleWrites;
|
|
233
|
-
}
|
|
234
|
-
catch (error) {
|
|
235
|
-
if (isSessionKilledError(error) || isSessionInterruptedError(error)) {
|
|
236
|
-
await waitForAbortRaceSettlements();
|
|
237
|
-
if (this.#settledWriteErrors.size > 0) {
|
|
238
|
-
const settledErrors = [...this.#settledWriteErrors];
|
|
239
|
-
this.#settledWriteErrors.clear();
|
|
240
|
-
throw combinePersistenceErrors(settledErrors);
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
throw error;
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
#emitTurnError(error) {
|
|
247
|
-
if (this.#turnErrorEmitted) {
|
|
248
|
-
return;
|
|
249
|
-
}
|
|
250
|
-
this.#turnErrorEmitted = true;
|
|
251
|
-
this.#emit({ type: "turn-error", message: errorMessage(error) });
|
|
252
|
-
}
|
|
253
|
-
#emit(event) {
|
|
254
|
-
for (const listener of this.#listeners) {
|
|
255
|
-
listener(event);
|
|
256
|
-
}
|
|
257
|
-
}
|
|
3
|
+
import { BufferedAgentRun } from "./run.js";
|
|
4
|
+
//#region src/session/session.ts
|
|
5
|
+
var AgentSession = class {
|
|
6
|
+
#inputQueue = [];
|
|
7
|
+
#llm;
|
|
8
|
+
#persistence;
|
|
9
|
+
#activeAbort;
|
|
10
|
+
#history = new AgentModelHistory();
|
|
11
|
+
#killed = false;
|
|
12
|
+
#loadPromise;
|
|
13
|
+
#loaded = false;
|
|
14
|
+
#running = false;
|
|
15
|
+
#storeVersion;
|
|
16
|
+
constructor(llm, persistence) {
|
|
17
|
+
this.#llm = llm;
|
|
18
|
+
this.#persistence = persistence;
|
|
19
|
+
}
|
|
20
|
+
async send(input) {
|
|
21
|
+
if (this.#killed) throw sessionKilledError();
|
|
22
|
+
await this.#ensureLoaded();
|
|
23
|
+
if (this.#killed) throw sessionKilledError();
|
|
24
|
+
const acceptedInput = normalizeAgentInput(input);
|
|
25
|
+
const run = new BufferedAgentRun();
|
|
26
|
+
run.emit(acceptedInput);
|
|
27
|
+
this.#inputQueue.push({
|
|
28
|
+
input: structuredClone(acceptedInput),
|
|
29
|
+
run
|
|
30
|
+
});
|
|
31
|
+
this.#drainInputQueue().catch((error) => {
|
|
32
|
+
run.emit({
|
|
33
|
+
type: "turn-error",
|
|
34
|
+
message: errorMessage(error)
|
|
35
|
+
});
|
|
36
|
+
run.close();
|
|
37
|
+
});
|
|
38
|
+
return run;
|
|
39
|
+
}
|
|
40
|
+
interrupt() {
|
|
41
|
+
this.#activeAbort?.abort();
|
|
42
|
+
}
|
|
43
|
+
kill() {
|
|
44
|
+
if (this.#killed) return;
|
|
45
|
+
this.#killed = true;
|
|
46
|
+
this.#activeAbort?.abort();
|
|
47
|
+
while (this.#inputQueue.length > 0) {
|
|
48
|
+
const item = this.#inputQueue.shift();
|
|
49
|
+
item?.run.emit({
|
|
50
|
+
type: "turn-error",
|
|
51
|
+
message: sessionKilledError().message
|
|
52
|
+
});
|
|
53
|
+
item?.run.close();
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
async #ensureLoaded() {
|
|
57
|
+
if (this.#loaded) return;
|
|
58
|
+
this.#loadPromise ??= this.#loadSessionState();
|
|
59
|
+
try {
|
|
60
|
+
await this.#loadPromise;
|
|
61
|
+
} catch (error) {
|
|
62
|
+
this.#loadPromise = void 0;
|
|
63
|
+
throw error;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
async #loadSessionState() {
|
|
67
|
+
if (this.#loaded) return;
|
|
68
|
+
await this.#replaceWithStoredSession();
|
|
69
|
+
this.#loaded = true;
|
|
70
|
+
}
|
|
71
|
+
async #replaceWithStoredSession() {
|
|
72
|
+
const stored = await this.#persistence.store.load(this.#persistence.key);
|
|
73
|
+
this.#storeVersion = stored?.version;
|
|
74
|
+
this.#history = new AgentModelHistory(decodeStoredHistory(stored));
|
|
75
|
+
}
|
|
76
|
+
async #drainInputQueue() {
|
|
77
|
+
if (this.#running) return;
|
|
78
|
+
this.#running = true;
|
|
79
|
+
try {
|
|
80
|
+
while (!this.#killed && this.#inputQueue.length > 0) {
|
|
81
|
+
const item = this.#inputQueue.shift();
|
|
82
|
+
if (item) await this.#processQueuedInput(item);
|
|
83
|
+
}
|
|
84
|
+
} finally {
|
|
85
|
+
this.#running = false;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
async #processQueuedInput({ input, run }) {
|
|
89
|
+
this.#activeAbort = new AbortController();
|
|
90
|
+
const historySnapshot = this.#history.modelSnapshot();
|
|
91
|
+
try {
|
|
92
|
+
run.emit({ type: "turn-start" });
|
|
93
|
+
this.#history.appendUserInput(input);
|
|
94
|
+
await this.#commitHistory();
|
|
95
|
+
const result = await runAgentLoop({
|
|
96
|
+
emit: (event) => run.emit(event),
|
|
97
|
+
history: this.#history,
|
|
98
|
+
llm: this.#llm,
|
|
99
|
+
signal: this.#activeAbort.signal
|
|
100
|
+
});
|
|
101
|
+
await this.#commitHistory();
|
|
102
|
+
run.emit({ type: result === "aborted" ? "turn-abort" : "turn-end" });
|
|
103
|
+
} catch (error) {
|
|
104
|
+
if (error instanceof SessionCommitConflictError) {
|
|
105
|
+
run.emit({
|
|
106
|
+
type: "turn-error",
|
|
107
|
+
message: error.message
|
|
108
|
+
});
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
this.#history.rollback(historySnapshot);
|
|
112
|
+
try {
|
|
113
|
+
await this.#commitHistory();
|
|
114
|
+
} catch (rollbackError) {
|
|
115
|
+
run.emit({
|
|
116
|
+
type: "turn-error",
|
|
117
|
+
message: `${errorMessage(error)}; history rollback persistence failed: ${errorMessage(rollbackError)}`
|
|
118
|
+
});
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
run.emit({
|
|
122
|
+
type: "turn-error",
|
|
123
|
+
message: errorMessage(error)
|
|
124
|
+
});
|
|
125
|
+
} finally {
|
|
126
|
+
run.close();
|
|
127
|
+
this.#activeAbort = void 0;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
async #commitHistory() {
|
|
131
|
+
const result = await this.#persistence.store.commit(this.#persistence.key, {
|
|
132
|
+
state: encodeHistory(this.#history.modelSnapshot()),
|
|
133
|
+
version: this.#storeVersion
|
|
134
|
+
}, { expectedVersion: this.#storeVersion ?? null });
|
|
135
|
+
if (!result.ok) {
|
|
136
|
+
await this.#replaceWithStoredSession();
|
|
137
|
+
throw new SessionCommitConflictError(this.#persistence.key);
|
|
138
|
+
}
|
|
139
|
+
this.#storeVersion = result.version;
|
|
140
|
+
}
|
|
141
|
+
};
|
|
142
|
+
function normalizeAgentInput(input) {
|
|
143
|
+
if (typeof input === "string") return {
|
|
144
|
+
type: "user-text",
|
|
145
|
+
text: input
|
|
146
|
+
};
|
|
147
|
+
if (isStringArrayInput(input)) return {
|
|
148
|
+
type: "user-text",
|
|
149
|
+
text: structuredClone(input)
|
|
150
|
+
};
|
|
151
|
+
return structuredClone(input);
|
|
258
152
|
}
|
|
259
|
-
function
|
|
260
|
-
|
|
153
|
+
function isStringArrayInput(input) {
|
|
154
|
+
return Array.isArray(input);
|
|
261
155
|
}
|
|
262
|
-
function
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
return new Error(`Multiple onHistoryChange failures: ${messages.join("; ")}`);
|
|
156
|
+
function encodeHistory(history) {
|
|
157
|
+
return {
|
|
158
|
+
schemaVersion: 1,
|
|
159
|
+
history
|
|
160
|
+
};
|
|
268
161
|
}
|
|
269
|
-
function
|
|
270
|
-
|
|
162
|
+
function decodeStoredHistory(stored) {
|
|
163
|
+
if (!stored) return [];
|
|
164
|
+
const state = stored.state;
|
|
165
|
+
if (state !== null && typeof state === "object" && "schemaVersion" in state && state.schemaVersion === 1 && "history" in state && Array.isArray(state.history)) return structuredClone(state.history);
|
|
166
|
+
throw new Error("Unsupported stored session state");
|
|
271
167
|
}
|
|
272
168
|
function errorMessage(error) {
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
}
|
|
276
|
-
return String(error);
|
|
169
|
+
if (error instanceof Error) return error.message;
|
|
170
|
+
return String(error);
|
|
277
171
|
}
|
|
278
172
|
function sessionKilledError() {
|
|
279
|
-
|
|
280
|
-
}
|
|
281
|
-
function isSessionKilledError(error) {
|
|
282
|
-
return error instanceof Error && error.message === "Session killed";
|
|
283
|
-
}
|
|
284
|
-
function sessionInterruptedError() {
|
|
285
|
-
return new Error("Session interrupted");
|
|
286
|
-
}
|
|
287
|
-
function isSessionInterruptedError(error) {
|
|
288
|
-
return error instanceof Error && error.message === "Session interrupted";
|
|
289
|
-
}
|
|
290
|
-
async function waitForAbortRaceSettlements() {
|
|
291
|
-
await new Promise((resolve) => {
|
|
292
|
-
setTimeout(resolve, 0);
|
|
293
|
-
});
|
|
294
|
-
}
|
|
295
|
-
function rejectOnKill(promise, signal) {
|
|
296
|
-
return rejectOnSignal(promise, signal, sessionKilledError);
|
|
297
|
-
}
|
|
298
|
-
function rejectOnInterrupt(promise, signal) {
|
|
299
|
-
return rejectOnSignal(promise, signal, sessionInterruptedError);
|
|
300
|
-
}
|
|
301
|
-
function rejectOnSignal(promise, signal, createError) {
|
|
302
|
-
if (signal.aborted) {
|
|
303
|
-
return new Promise((_, reject) => {
|
|
304
|
-
setTimeout(() => reject(createError()), 0);
|
|
305
|
-
});
|
|
306
|
-
}
|
|
307
|
-
return new Promise((resolve, reject) => {
|
|
308
|
-
let abortTimeout;
|
|
309
|
-
const cleanup = () => {
|
|
310
|
-
signal.removeEventListener("abort", onAbort);
|
|
311
|
-
if (abortTimeout) {
|
|
312
|
-
clearTimeout(abortTimeout);
|
|
313
|
-
}
|
|
314
|
-
};
|
|
315
|
-
const onAbort = () => {
|
|
316
|
-
signal.removeEventListener("abort", onAbort);
|
|
317
|
-
abortTimeout = setTimeout(() => {
|
|
318
|
-
abortTimeout = undefined;
|
|
319
|
-
reject(createError());
|
|
320
|
-
}, 0);
|
|
321
|
-
};
|
|
322
|
-
signal.addEventListener("abort", onAbort, { once: true });
|
|
323
|
-
promise.then((value) => {
|
|
324
|
-
cleanup();
|
|
325
|
-
resolve(value);
|
|
326
|
-
}, (error) => {
|
|
327
|
-
cleanup();
|
|
328
|
-
reject(error);
|
|
329
|
-
});
|
|
330
|
-
});
|
|
173
|
+
return /* @__PURE__ */ new Error("Session killed");
|
|
331
174
|
}
|
|
175
|
+
var SessionCommitConflictError = class extends Error {
|
|
176
|
+
constructor(key) {
|
|
177
|
+
super(`Session ${JSON.stringify(key)} commit conflict`);
|
|
178
|
+
}
|
|
179
|
+
};
|
|
180
|
+
//#endregion
|
|
181
|
+
export { AgentSession };
|
|
182
|
+
|
|
332
183
|
//# sourceMappingURL=session.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/session/session.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"session.js","names":["#inputQueue","#llm","#persistence","#killed","#ensureLoaded","#drainInputQueue","#activeAbort","#loaded","#loadPromise","#loadSessionState","#replaceWithStoredSession","#storeVersion","#history","#running","#processQueuedInput","#commitHistory"],"sources":["../../src/session/session.ts"],"sourcesContent":["import { runAgentLoop } from \"../agent-loop\";\nimport type { AgentMessage, Llm } from \"../llm\";\nimport type { UserText } from \"./events\";\nimport { AgentModelHistory } from \"./history\";\nimport type { AgentRun } from \"./run\";\nimport { BufferedAgentRun } from \"./run\";\nimport type { SessionStore, StoredSession } from \"./store/types\";\n\nexport type AgentInput = string | readonly string[] | UserText;\nexport type SessionInput = AgentInput;\nexport type { AgentRun } from \"./run\";\n\ninterface SessionPersistenceOptions {\n readonly key: string;\n readonly store: SessionStore;\n}\n\ninterface QueuedInput {\n readonly input: UserText;\n readonly run: BufferedAgentRun;\n}\n\ninterface EncodedSessionState {\n readonly history: AgentMessage[];\n readonly schemaVersion: 1;\n}\n\nexport class AgentSession {\n readonly #inputQueue: QueuedInput[] = [];\n readonly #llm: Llm;\n readonly #persistence: SessionPersistenceOptions;\n #activeAbort?: AbortController;\n #history = new AgentModelHistory();\n #killed = false;\n #loadPromise?: Promise<void>;\n #loaded = false;\n #running = false;\n #storeVersion: string | undefined;\n\n constructor(llm: Llm, persistence: SessionPersistenceOptions) {\n this.#llm = llm;\n this.#persistence = persistence;\n }\n\n async send(input: AgentInput): Promise<AgentRun> {\n if (this.#killed) {\n throw sessionKilledError();\n }\n\n await this.#ensureLoaded();\n\n if (this.#killed) {\n throw sessionKilledError();\n }\n\n const acceptedInput = normalizeAgentInput(input);\n const run = new BufferedAgentRun();\n run.emit(acceptedInput);\n this.#inputQueue.push({ input: structuredClone(acceptedInput), run });\n this.#drainInputQueue().catch((error: unknown) => {\n run.emit({ type: \"turn-error\", message: errorMessage(error) });\n run.close();\n });\n return run;\n }\n\n interrupt(): void {\n this.#activeAbort?.abort();\n }\n\n kill(): void {\n if (this.#killed) {\n return;\n }\n\n this.#killed = true;\n this.#activeAbort?.abort();\n\n while (this.#inputQueue.length > 0) {\n const item = this.#inputQueue.shift();\n item?.run.emit({\n type: \"turn-error\",\n message: sessionKilledError().message,\n });\n item?.run.close();\n }\n }\n\n async #ensureLoaded(): Promise<void> {\n if (this.#loaded) {\n return;\n }\n\n this.#loadPromise ??= this.#loadSessionState();\n try {\n await this.#loadPromise;\n } catch (error) {\n this.#loadPromise = undefined;\n throw error;\n }\n }\n\n async #loadSessionState(): Promise<void> {\n if (this.#loaded) {\n return;\n }\n\n await this.#replaceWithStoredSession();\n this.#loaded = true;\n }\n\n async #replaceWithStoredSession(): Promise<void> {\n const stored = await this.#persistence.store.load(this.#persistence.key);\n this.#storeVersion = stored?.version;\n this.#history = new AgentModelHistory(decodeStoredHistory(stored));\n }\n\n async #drainInputQueue(): Promise<void> {\n if (this.#running) {\n return;\n }\n\n this.#running = true;\n try {\n while (!this.#killed && this.#inputQueue.length > 0) {\n const item = this.#inputQueue.shift();\n if (item) {\n await this.#processQueuedInput(item);\n }\n }\n } finally {\n this.#running = false;\n }\n }\n\n async #processQueuedInput({ input, run }: QueuedInput): Promise<void> {\n this.#activeAbort = new AbortController();\n const historySnapshot = this.#history.modelSnapshot();\n\n try {\n run.emit({ type: \"turn-start\" });\n this.#history.appendUserInput(input);\n await this.#commitHistory();\n\n const result = await runAgentLoop({\n emit: (event) => run.emit(event),\n history: this.#history,\n llm: this.#llm,\n signal: this.#activeAbort.signal,\n });\n\n await this.#commitHistory();\n run.emit({ type: result === \"aborted\" ? \"turn-abort\" : \"turn-end\" });\n } catch (error) {\n if (error instanceof SessionCommitConflictError) {\n run.emit({ type: \"turn-error\", message: error.message });\n return;\n }\n\n this.#history.rollback(historySnapshot);\n try {\n await this.#commitHistory();\n } catch (rollbackError) {\n run.emit({\n type: \"turn-error\",\n message: `${errorMessage(error)}; history rollback persistence failed: ${errorMessage(\n rollbackError\n )}`,\n });\n return;\n }\n run.emit({ type: \"turn-error\", message: errorMessage(error) });\n } finally {\n run.close();\n this.#activeAbort = undefined;\n }\n }\n\n async #commitHistory(): Promise<void> {\n const result = await this.#persistence.store.commit(\n this.#persistence.key,\n {\n state: encodeHistory(this.#history.modelSnapshot()),\n version: this.#storeVersion,\n },\n { expectedVersion: this.#storeVersion ?? null }\n );\n\n if (!result.ok) {\n await this.#replaceWithStoredSession();\n throw new SessionCommitConflictError(this.#persistence.key);\n }\n\n this.#storeVersion = result.version;\n }\n}\n\nexport function normalizeAgentInput(input: AgentInput): UserText {\n if (typeof input === \"string\") {\n return {\n type: \"user-text\",\n text: input,\n };\n }\n\n if (isStringArrayInput(input)) {\n return {\n type: \"user-text\",\n text: structuredClone(input) as readonly string[],\n };\n }\n\n return structuredClone(input);\n}\n\nfunction isStringArrayInput(input: AgentInput): input is readonly string[] {\n return Array.isArray(input);\n}\n\nfunction encodeHistory(history: AgentMessage[]): EncodedSessionState {\n return { schemaVersion: 1, history };\n}\n\nfunction decodeStoredHistory(stored: StoredSession | null): AgentMessage[] {\n if (!stored) {\n return [];\n }\n\n const state = stored.state;\n if (\n state !== null &&\n typeof state === \"object\" &&\n \"schemaVersion\" in state &&\n state.schemaVersion === 1 &&\n \"history\" in state &&\n Array.isArray(state.history)\n ) {\n return structuredClone(state.history) as AgentMessage[];\n }\n\n throw new Error(\"Unsupported stored session state\");\n}\n\nfunction errorMessage(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n\n return String(error);\n}\n\nfunction sessionKilledError(): Error {\n return new Error(\"Session killed\");\n}\n\nclass SessionCommitConflictError extends Error {\n constructor(key: string) {\n super(`Session ${JSON.stringify(key)} commit conflict`);\n }\n}\n"],"mappings":";;;;AA2BA,IAAa,eAAb,MAA0B;CACxB,cAAsC,CAAC;CACvC;CACA;CACA;CACA,WAAW,IAAI,kBAAkB;CACjC,UAAU;CACV;CACA,UAAU;CACV,WAAW;CACX;CAEA,YAAY,KAAU,aAAwC;EAC5D,KAAKC,OAAO;EACZ,KAAKC,eAAe;CACtB;CAEA,MAAM,KAAK,OAAsC;EAC/C,IAAI,KAAKC,SACP,MAAM,mBAAmB;EAG3B,MAAM,KAAKC,cAAc;EAEzB,IAAI,KAAKD,SACP,MAAM,mBAAmB;EAG3B,MAAM,gBAAgB,oBAAoB,KAAK;EAC/C,MAAM,MAAM,IAAI,iBAAiB;EACjC,IAAI,KAAK,aAAa;EACtB,KAAKH,YAAY,KAAK;GAAE,OAAO,gBAAgB,aAAa;GAAG;EAAI,CAAC;EACpE,KAAKK,iBAAiB,EAAE,OAAO,UAAmB;GAChD,IAAI,KAAK;IAAE,MAAM;IAAc,SAAS,aAAa,KAAK;GAAE,CAAC;GAC7D,IAAI,MAAM;EACZ,CAAC;EACD,OAAO;CACT;CAEA,YAAkB;EAChB,KAAKC,cAAc,MAAM;CAC3B;CAEA,OAAa;EACX,IAAI,KAAKH,SACP;EAGF,KAAKA,UAAU;EACf,KAAKG,cAAc,MAAM;EAEzB,OAAO,KAAKN,YAAY,SAAS,GAAG;GAClC,MAAM,OAAO,KAAKA,YAAY,MAAM;GACpC,MAAM,IAAI,KAAK;IACb,MAAM;IACN,SAAS,mBAAmB,EAAE;GAChC,CAAC;GACD,MAAM,IAAI,MAAM;EAClB;CACF;CAEA,MAAMI,gBAA+B;EACnC,IAAI,KAAKG,SACP;EAGF,KAAKC,iBAAiB,KAAKC,kBAAkB;EAC7C,IAAI;GACF,MAAM,KAAKD;EACb,SAAS,OAAO;GACd,KAAKA,eAAe,KAAA;GACpB,MAAM;EACR;CACF;CAEA,MAAMC,oBAAmC;EACvC,IAAI,KAAKF,SACP;EAGF,MAAM,KAAKG,0BAA0B;EACrC,KAAKH,UAAU;CACjB;CAEA,MAAMG,4BAA2C;EAC/C,MAAM,SAAS,MAAM,KAAKR,aAAa,MAAM,KAAK,KAAKA,aAAa,GAAG;EACvE,KAAKS,gBAAgB,QAAQ;EAC7B,KAAKC,WAAW,IAAI,kBAAkB,oBAAoB,MAAM,CAAC;CACnE;CAEA,MAAMP,mBAAkC;EACtC,IAAI,KAAKQ,UACP;EAGF,KAAKA,WAAW;EAChB,IAAI;GACF,OAAO,CAAC,KAAKV,WAAW,KAAKH,YAAY,SAAS,GAAG;IACnD,MAAM,OAAO,KAAKA,YAAY,MAAM;IACpC,IAAI,MACF,MAAM,KAAKc,oBAAoB,IAAI;GAEvC;EACF,UAAU;GACR,KAAKD,WAAW;EAClB;CACF;CAEA,MAAMC,oBAAoB,EAAE,OAAO,OAAmC;EACpE,KAAKR,eAAe,IAAI,gBAAgB;EACxC,MAAM,kBAAkB,KAAKM,SAAS,cAAc;EAEpD,IAAI;GACF,IAAI,KAAK,EAAE,MAAM,aAAa,CAAC;GAC/B,KAAKA,SAAS,gBAAgB,KAAK;GACnC,MAAM,KAAKG,eAAe;GAE1B,MAAM,SAAS,MAAM,aAAa;IAChC,OAAO,UAAU,IAAI,KAAK,KAAK;IAC/B,SAAS,KAAKH;IACd,KAAK,KAAKX;IACV,QAAQ,KAAKK,aAAa;GAC5B,CAAC;GAED,MAAM,KAAKS,eAAe;GAC1B,IAAI,KAAK,EAAE,MAAM,WAAW,YAAY,eAAe,WAAW,CAAC;EACrE,SAAS,OAAO;GACd,IAAI,iBAAiB,4BAA4B;IAC/C,IAAI,KAAK;KAAE,MAAM;KAAc,SAAS,MAAM;IAAQ,CAAC;IACvD;GACF;GAEA,KAAKH,SAAS,SAAS,eAAe;GACtC,IAAI;IACF,MAAM,KAAKG,eAAe;GAC5B,SAAS,eAAe;IACtB,IAAI,KAAK;KACP,MAAM;KACN,SAAS,GAAG,aAAa,KAAK,EAAE,yCAAyC,aACvE,aACF;IACF,CAAC;IACD;GACF;GACA,IAAI,KAAK;IAAE,MAAM;IAAc,SAAS,aAAa,KAAK;GAAE,CAAC;EAC/D,UAAU;GACR,IAAI,MAAM;GACV,KAAKT,eAAe,KAAA;EACtB;CACF;CAEA,MAAMS,iBAAgC;EACpC,MAAM,SAAS,MAAM,KAAKb,aAAa,MAAM,OAC3C,KAAKA,aAAa,KAClB;GACE,OAAO,cAAc,KAAKU,SAAS,cAAc,CAAC;GAClD,SAAS,KAAKD;EAChB,GACA,EAAE,iBAAiB,KAAKA,iBAAiB,KAAK,CAChD;EAEA,IAAI,CAAC,OAAO,IAAI;GACd,MAAM,KAAKD,0BAA0B;GACrC,MAAM,IAAI,2BAA2B,KAAKR,aAAa,GAAG;EAC5D;EAEA,KAAKS,gBAAgB,OAAO;CAC9B;AACF;AAEA,SAAgB,oBAAoB,OAA6B;CAC/D,IAAI,OAAO,UAAU,UACnB,OAAO;EACL,MAAM;EACN,MAAM;CACR;CAGF,IAAI,mBAAmB,KAAK,GAC1B,OAAO;EACL,MAAM;EACN,MAAM,gBAAgB,KAAK;CAC7B;CAGF,OAAO,gBAAgB,KAAK;AAC9B;AAEA,SAAS,mBAAmB,OAA+C;CACzE,OAAO,MAAM,QAAQ,KAAK;AAC5B;AAEA,SAAS,cAAc,SAA8C;CACnE,OAAO;EAAE,eAAe;EAAG;CAAQ;AACrC;AAEA,SAAS,oBAAoB,QAA8C;CACzE,IAAI,CAAC,QACH,OAAO,CAAC;CAGV,MAAM,QAAQ,OAAO;CACrB,IACE,UAAU,QACV,OAAO,UAAU,YACjB,mBAAmB,SACnB,MAAM,kBAAkB,KACxB,aAAa,SACb,MAAM,QAAQ,MAAM,OAAO,GAE3B,OAAO,gBAAgB,MAAM,OAAO;CAGtC,MAAM,IAAI,MAAM,kCAAkC;AACpD;AAEA,SAAS,aAAa,OAAwB;CAC5C,IAAI,iBAAiB,OACnB,OAAO,MAAM;CAGf,OAAO,OAAO,KAAK;AACrB;AAEA,SAAS,qBAA4B;CACnC,uBAAO,IAAI,MAAM,gBAAgB;AACnC;AAEA,IAAM,6BAAN,cAAyC,MAAM;CAC7C,YAAY,KAAa;EACvB,MAAM,WAAW,KAAK,UAAU,GAAG,EAAE,iBAAiB;CACxD;AACF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { CommitResult, SessionStore, StoredSession } from "./types.js";
|
|
2
|
+
|
|
3
|
+
//#region src/session/store/file.d.ts
|
|
4
|
+
declare class FileSessionStore implements SessionStore {
|
|
5
|
+
#private;
|
|
6
|
+
constructor(directory: string);
|
|
7
|
+
load(key: string): Promise<StoredSession | null>;
|
|
8
|
+
commit(key: string, next: StoredSession, options?: {
|
|
9
|
+
expectedVersion?: string | null;
|
|
10
|
+
}): Promise<CommitResult>;
|
|
11
|
+
}
|
|
12
|
+
//#endregion
|
|
13
|
+
export { FileSessionStore };
|
|
14
|
+
//# sourceMappingURL=file.d.ts.map
|