@duetso/agent 0.1.189 → 0.1.190
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/dist/package.json +1 -1
- package/dist/src/memory/embedding-worker.d.ts +26 -6
- package/dist/src/memory/embedding-worker.d.ts.map +1 -1
- package/dist/src/memory/embedding-worker.js +138 -61
- package/dist/src/memory/embedding-worker.js.map +1 -1
- package/dist/src/memory/session.d.ts +16 -0
- package/dist/src/memory/session.d.ts.map +1 -1
- package/dist/src/memory/session.js +24 -0
- package/dist/src/memory/session.js.map +1 -1
- package/dist/src/memory/storage.d.ts.map +1 -1
- package/dist/src/memory/storage.js +23 -8
- package/dist/src/memory/storage.js.map +1 -1
- package/package.json +1 -1
package/dist/package.json
CHANGED
|
@@ -8,11 +8,11 @@ export interface EmbeddingBackfillWorkerOptions {
|
|
|
8
8
|
/** Path to append progress lines to. Optional; when omitted the worker logs nothing. */
|
|
9
9
|
logPath?: string;
|
|
10
10
|
/**
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
11
|
+
* Delay before retrying a drain that could not run because the
|
|
12
|
+
* cross-process lock was busy, in milliseconds. Defaults to 10s,
|
|
13
|
+
* which gives the peer duet CLI holding the lock room to finish.
|
|
14
14
|
*/
|
|
15
|
-
|
|
15
|
+
retrySleepMs?: number;
|
|
16
16
|
/**
|
|
17
17
|
* Backoff after a failed drain in milliseconds. Defaults to 60s.
|
|
18
18
|
* Tests override this so a transient-error case does not block the
|
|
@@ -38,16 +38,26 @@ export interface EmbeddingBackfillWorkerOptions {
|
|
|
38
38
|
}
|
|
39
39
|
export declare class EmbeddingBackfillWorker {
|
|
40
40
|
private readonly options;
|
|
41
|
-
private readonly
|
|
41
|
+
private readonly retrySleepMs;
|
|
42
42
|
private readonly errorSleepMs;
|
|
43
43
|
private readonly attemptCooldownMs;
|
|
44
44
|
private readonly logMaxBytes;
|
|
45
45
|
private readonly recentAttempts;
|
|
46
46
|
private abortController?;
|
|
47
47
|
private runningPromise?;
|
|
48
|
+
private pendingKick;
|
|
49
|
+
private wakeFromSleep?;
|
|
50
|
+
private stopped;
|
|
48
51
|
constructor(options: EmbeddingBackfillWorkerOptions);
|
|
49
|
-
/** Start
|
|
52
|
+
/** Start a drain loop. Idempotent — a second call while running is a no-op. */
|
|
50
53
|
start(): void;
|
|
54
|
+
/**
|
|
55
|
+
* Signal that new observations were written. Restarts the drain loop
|
|
56
|
+
* if it has exited, or schedules one more drain (and cuts any backoff
|
|
57
|
+
* sleep short) if it is still running. Called by the storage write
|
|
58
|
+
* helpers via `MemorySession.onWrite`.
|
|
59
|
+
*/
|
|
60
|
+
kick(): void;
|
|
51
61
|
/**
|
|
52
62
|
* Stop the loop and wait for the in-flight tick (if any) to settle.
|
|
53
63
|
* Because each tick awaits a `session.withDb`, this transitively waits
|
|
@@ -55,6 +65,16 @@ export declare class EmbeddingBackfillWorker {
|
|
|
55
65
|
*/
|
|
56
66
|
stop(): Promise<void>;
|
|
57
67
|
private run;
|
|
68
|
+
private drain;
|
|
69
|
+
/**
|
|
70
|
+
* True when unembedded rows exist that `selectBatch` could not see
|
|
71
|
+
* because every one of them is inside the attempt cooldown. Only
|
|
72
|
+
* worth querying when the cooldown exclusion list is non-empty — an
|
|
73
|
+
* empty list means the empty batch already proved a full drain.
|
|
74
|
+
*/
|
|
75
|
+
private hasCooledBacklog;
|
|
76
|
+
/** Backoff sleep that resolves early on abort or on `kick()`. */
|
|
77
|
+
private sleep;
|
|
58
78
|
private selectBatch;
|
|
59
79
|
/**
|
|
60
80
|
* Return the ids currently inside the attempt-cooldown window and
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embedding-worker.d.ts","sourceRoot":"","sources":["../../../src/memory/embedding-worker.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"embedding-worker.d.ts","sourceRoot":"","sources":["../../../src/memory/embedding-worker.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AA+ClD,MAAM,WAAW,8BAA8B;IAC7C,sEAAsE;IACtE,OAAO,EAAE,aAAa,CAAC;IACvB,+EAA+E;IAC/E,KAAK,EAAE,OAAO,CAAC;IACf,wFAAwF;IACxF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;;OAMG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAID,qBAAa,uBAAuB;IAClC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiC;IACzD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;IAC3C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IAKrC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA6B;IAC5D,OAAO,CAAC,eAAe,CAAC,CAAkB;IAC1C,OAAO,CAAC,cAAc,CAAC,CAAgB;IAIvC,OAAO,CAAC,WAAW,CAAS;IAI5B,OAAO,CAAC,aAAa,CAAC,CAAa;IAGnC,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,EAAE,8BAA8B;IAQnD,+EAA+E;IAC/E,KAAK,IAAI,IAAI;IAeb;;;;;OAKG;IACH,IAAI,IAAI,IAAI;IAUZ;;;;OAIG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YASb,GAAG;YA8BH,KAAK;IAyBnB;;;;;OAKG;YACW,gBAAgB;IAY9B,iEAAiE;IACjE,OAAO,CAAC,KAAK;YAkBC,WAAW;IAyBzB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;YAcV,YAAY;IAqC1B,OAAO,CAAC,GAAG;CA+BZ"}
|
|
@@ -1,28 +1,36 @@
|
|
|
1
1
|
import { appendFileSync, mkdirSync, renameSync, statSync } from "node:fs";
|
|
2
2
|
import { dirname } from "node:path";
|
|
3
3
|
/**
|
|
4
|
-
* Background worker that fills missing embeddings
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* the
|
|
4
|
+
* Background worker that fills missing embeddings. Started by
|
|
5
|
+
* `loadStoredMemory()` to drain any backlog left by prior runs, then
|
|
6
|
+
* event-driven: it stops once the backlog is empty and is re-kicked by
|
|
7
|
+
* the storage write helpers when new observations land. Never blocks a
|
|
8
|
+
* turn: the observer/reflector can write a new row and return to the
|
|
9
|
+
* user immediately; the embedding lands within seconds in the
|
|
10
|
+
* background, after which the row becomes hybrid-retrievable.
|
|
9
11
|
*
|
|
10
|
-
*
|
|
12
|
+
* Drain shape:
|
|
11
13
|
* 1. Acquire the memory session via one `withDb`. Inside that open,
|
|
12
14
|
* drain unembedded rows in `BATCH_SIZE` chunks until a select
|
|
13
15
|
* returns zero rows, then exit `withDb` so the cross-process lock
|
|
14
16
|
* releases shortly after via the session's idle-close timer.
|
|
15
|
-
* 2.
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
17
|
+
* 2. If the drain came back empty and no `kick()` arrived meanwhile,
|
|
18
|
+
* the loop exits. A perpetual idle tick is deliberately avoided:
|
|
19
|
+
* each tick re-opens WASM Postgres once the session idle-closes,
|
|
20
|
+
* which burned a steady ~8% CPU per resident CLI when several
|
|
21
|
+
* sessions sat parked in a sandbox.
|
|
22
|
+
* 3. When the only unembedded rows are inside the per-id attempt
|
|
23
|
+
* cooldown, retry after `ATTEMPT_COOLDOWN_MS` instead of exiting
|
|
24
|
+
* so a churned row still gets re-embedded eventually.
|
|
25
|
+
* 4. On error (rate limit, transient network), back off for
|
|
26
|
+
* `ERROR_SLEEP_MS` before retrying. A lock-busy `withDb` skip
|
|
27
|
+
* retries after `RETRY_SLEEP_MS`.
|
|
20
28
|
*
|
|
21
29
|
* Failure modes are local: any error inside the loop logs and resumes
|
|
22
30
|
* after a backoff. The worker never throws to the caller.
|
|
23
31
|
*/
|
|
24
32
|
const BATCH_SIZE = 50;
|
|
25
|
-
const
|
|
33
|
+
const DEFAULT_RETRY_SLEEP_MS = 10_000;
|
|
26
34
|
const DEFAULT_ERROR_SLEEP_MS = 60_000;
|
|
27
35
|
// Cap how often a single observation may be re-embedded. The production
|
|
28
36
|
// memory store can churn rows (the reflector deletes and re-inserts a
|
|
@@ -39,7 +47,7 @@ const ERROR_BODY_LOG_MAX = 200;
|
|
|
39
47
|
const DEFAULT_LOG_MAX_BYTES = 1024 * 1024;
|
|
40
48
|
export class EmbeddingBackfillWorker {
|
|
41
49
|
options;
|
|
42
|
-
|
|
50
|
+
retrySleepMs;
|
|
43
51
|
errorSleepMs;
|
|
44
52
|
attemptCooldownMs;
|
|
45
53
|
logMaxBytes;
|
|
@@ -50,19 +58,57 @@ export class EmbeddingBackfillWorker {
|
|
|
50
58
|
recentAttempts = new Map();
|
|
51
59
|
abortController;
|
|
52
60
|
runningPromise;
|
|
61
|
+
// Set by `kick()` while a drain is in flight so the loop runs one
|
|
62
|
+
// more drain instead of exiting on an empty result, closing the race
|
|
63
|
+
// where a write lands between the final select and the loop exit.
|
|
64
|
+
pendingKick = false;
|
|
65
|
+
// Resolver for the currently in-flight backoff sleep, when any.
|
|
66
|
+
// `kick()` invokes it so a new write cuts a cooldown/retry/error
|
|
67
|
+
// backoff short instead of waiting it out.
|
|
68
|
+
wakeFromSleep;
|
|
69
|
+
// Set by `stop()` so a late `kick()` (a write racing dispose) cannot
|
|
70
|
+
// restart the loop against a session that is about to close.
|
|
71
|
+
stopped = false;
|
|
53
72
|
constructor(options) {
|
|
54
73
|
this.options = options;
|
|
55
|
-
this.
|
|
74
|
+
this.retrySleepMs = options.retrySleepMs ?? DEFAULT_RETRY_SLEEP_MS;
|
|
56
75
|
this.errorSleepMs = options.errorSleepMs ?? DEFAULT_ERROR_SLEEP_MS;
|
|
57
76
|
this.attemptCooldownMs = options.attemptCooldownMs ?? DEFAULT_ATTEMPT_COOLDOWN_MS;
|
|
58
77
|
this.logMaxBytes = options.logMaxBytes ?? DEFAULT_LOG_MAX_BYTES;
|
|
59
78
|
}
|
|
60
|
-
/** Start
|
|
79
|
+
/** Start a drain loop. Idempotent — a second call while running is a no-op. */
|
|
61
80
|
start() {
|
|
62
81
|
if (this.runningPromise)
|
|
63
82
|
return;
|
|
64
|
-
this.
|
|
65
|
-
|
|
83
|
+
this.stopped = false;
|
|
84
|
+
const controller = new AbortController();
|
|
85
|
+
this.abortController = controller;
|
|
86
|
+
this.runningPromise = this.run(controller.signal).finally(() => {
|
|
87
|
+
if (this.abortController !== controller)
|
|
88
|
+
return;
|
|
89
|
+
this.runningPromise = undefined;
|
|
90
|
+
this.abortController = undefined;
|
|
91
|
+
// A kick that landed between the loop's final empty-drain check
|
|
92
|
+
// and this cleanup would otherwise be lost; restart to honor it.
|
|
93
|
+
if (this.pendingKick && !controller.signal.aborted)
|
|
94
|
+
this.start();
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Signal that new observations were written. Restarts the drain loop
|
|
99
|
+
* if it has exited, or schedules one more drain (and cuts any backoff
|
|
100
|
+
* sleep short) if it is still running. Called by the storage write
|
|
101
|
+
* helpers via `MemorySession.onWrite`.
|
|
102
|
+
*/
|
|
103
|
+
kick() {
|
|
104
|
+
if (this.stopped)
|
|
105
|
+
return;
|
|
106
|
+
this.pendingKick = true;
|
|
107
|
+
if (this.runningPromise) {
|
|
108
|
+
this.wakeFromSleep?.();
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
this.start();
|
|
66
112
|
}
|
|
67
113
|
/**
|
|
68
114
|
* Stop the loop and wait for the in-flight tick (if any) to settle.
|
|
@@ -70,50 +116,99 @@ export class EmbeddingBackfillWorker {
|
|
|
70
116
|
* for any open the worker holds to drain and the lock to release.
|
|
71
117
|
*/
|
|
72
118
|
async stop() {
|
|
119
|
+
this.stopped = true;
|
|
73
120
|
this.abortController?.abort();
|
|
121
|
+
// The finally attached in start() clears abortController and
|
|
122
|
+
// runningPromise once the loop settles, so awaiting is all the
|
|
123
|
+
// cleanup stop needs.
|
|
74
124
|
await this.runningPromise;
|
|
75
|
-
this.abortController = undefined;
|
|
76
|
-
this.runningPromise = undefined;
|
|
77
125
|
}
|
|
78
126
|
async run(signal) {
|
|
79
127
|
while (!signal.aborted) {
|
|
128
|
+
this.pendingKick = false;
|
|
80
129
|
try {
|
|
81
|
-
// One withDb per
|
|
130
|
+
// One withDb per drain: embed everything that's currently
|
|
82
131
|
// outstanding while we hold the lock, then exit so the
|
|
83
132
|
// session can idle-close and another duet CLI can take a
|
|
84
133
|
// turn. A returned `undefined` means the lock could not be
|
|
85
|
-
// acquired in time —
|
|
86
|
-
|
|
87
|
-
await this.options.session.withDb(async (db) => {
|
|
88
|
-
while (!signal.aborted) {
|
|
89
|
-
const batch = await this.selectBatch(db);
|
|
90
|
-
if (batch.length === 0)
|
|
91
|
-
return;
|
|
92
|
-
// Stamp the attempt before we await the embedding so a
|
|
93
|
-
// failure mid-call still counts as an attempt and the same
|
|
94
|
-
// ids do not get retried in a tight loop on the next drain.
|
|
95
|
-
const attemptAt = Date.now();
|
|
96
|
-
for (const row of batch)
|
|
97
|
-
this.recentAttempts.set(row.id, attemptAt);
|
|
98
|
-
const result = await this.options.embed(batch.map((row) => row.content));
|
|
99
|
-
if (result.embeddings.length !== batch.length) {
|
|
100
|
-
throw new Error(`Embedding response length (${result.embeddings.length}) did not match batch size (${batch.length})`);
|
|
101
|
-
}
|
|
102
|
-
await this.persistBatch(db, batch, result.embeddings, result.model);
|
|
103
|
-
this.log(`Embedded ${batch.length} observations`);
|
|
104
|
-
}
|
|
105
|
-
});
|
|
134
|
+
// acquired in time — retry after a short sleep.
|
|
135
|
+
const outcome = await this.options.session.withDb((db) => this.drain(db, signal));
|
|
106
136
|
if (signal.aborted)
|
|
107
137
|
return;
|
|
108
|
-
|
|
138
|
+
if (outcome === "drained") {
|
|
139
|
+
if (!this.pendingKick)
|
|
140
|
+
return;
|
|
141
|
+
continue;
|
|
142
|
+
}
|
|
143
|
+
// "cooling": the only unembedded rows were attempted recently.
|
|
144
|
+
// Retry once the cooldown can have expired rather than exiting,
|
|
145
|
+
// so a churned row is not stranded until the next write kick.
|
|
146
|
+
await this.sleep(outcome === "cooling" ? this.attemptCooldownMs : this.retrySleepMs, signal);
|
|
109
147
|
}
|
|
110
148
|
catch (error) {
|
|
111
149
|
if (signal.aborted)
|
|
112
150
|
return;
|
|
113
151
|
this.log(`Embedding batch failed: ${summarizeError(error)}`);
|
|
114
|
-
await sleep(this.errorSleepMs, signal);
|
|
152
|
+
await this.sleep(this.errorSleepMs, signal);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
async drain(db, signal) {
|
|
157
|
+
while (!signal.aborted) {
|
|
158
|
+
const batch = await this.selectBatch(db);
|
|
159
|
+
if (batch.length === 0) {
|
|
160
|
+
return (await this.hasCooledBacklog(db)) ? "cooling" : "drained";
|
|
161
|
+
}
|
|
162
|
+
// Stamp the attempt before we await the embedding so a
|
|
163
|
+
// failure mid-call still counts as an attempt and the same
|
|
164
|
+
// ids do not get retried in a tight loop on the next drain.
|
|
165
|
+
const attemptAt = Date.now();
|
|
166
|
+
for (const row of batch)
|
|
167
|
+
this.recentAttempts.set(row.id, attemptAt);
|
|
168
|
+
const result = await this.options.embed(batch.map((row) => row.content));
|
|
169
|
+
if (result.embeddings.length !== batch.length) {
|
|
170
|
+
throw new Error(`Embedding response length (${result.embeddings.length}) did not match batch size (${batch.length})`);
|
|
115
171
|
}
|
|
172
|
+
await this.persistBatch(db, batch, result.embeddings, result.model);
|
|
173
|
+
this.log(`Embedded ${batch.length} observations`);
|
|
116
174
|
}
|
|
175
|
+
// Aborted mid-drain; the caller returns on the aborted signal
|
|
176
|
+
// before reading this, so the value only needs to typecheck.
|
|
177
|
+
return "cooling";
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* True when unembedded rows exist that `selectBatch` could not see
|
|
181
|
+
* because every one of them is inside the attempt cooldown. Only
|
|
182
|
+
* worth querying when the cooldown exclusion list is non-empty — an
|
|
183
|
+
* empty list means the empty batch already proved a full drain.
|
|
184
|
+
*/
|
|
185
|
+
async hasCooledBacklog(db) {
|
|
186
|
+
if (this.collectCooledIds().length === 0)
|
|
187
|
+
return false;
|
|
188
|
+
const result = await db.query(`SELECT EXISTS(
|
|
189
|
+
SELECT 1 FROM observations o
|
|
190
|
+
LEFT JOIN observation_embeddings e ON e.observation_id = o.id
|
|
191
|
+
WHERE e.observation_id IS NULL
|
|
192
|
+
) AS pending`);
|
|
193
|
+
return result.rows[0]?.pending ?? false;
|
|
194
|
+
}
|
|
195
|
+
/** Backoff sleep that resolves early on abort or on `kick()`. */
|
|
196
|
+
sleep(ms, signal) {
|
|
197
|
+
return new Promise((resolve) => {
|
|
198
|
+
if (signal.aborted || this.pendingKick) {
|
|
199
|
+
resolve();
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
const finish = () => {
|
|
203
|
+
clearTimeout(timer);
|
|
204
|
+
signal.removeEventListener("abort", finish);
|
|
205
|
+
this.wakeFromSleep = undefined;
|
|
206
|
+
resolve();
|
|
207
|
+
};
|
|
208
|
+
const timer = setTimeout(finish, ms);
|
|
209
|
+
this.wakeFromSleep = finish;
|
|
210
|
+
signal.addEventListener("abort", finish, { once: true });
|
|
211
|
+
});
|
|
117
212
|
}
|
|
118
213
|
async selectBatch(db) {
|
|
119
214
|
// LEFT JOIN over the embeddings table is the cheapest way to pick
|
|
@@ -236,22 +331,4 @@ function summarizeError(error) {
|
|
|
236
331
|
return collapsed;
|
|
237
332
|
return `${collapsed.slice(0, ERROR_BODY_LOG_MAX)}… (truncated ${collapsed.length - ERROR_BODY_LOG_MAX} chars)`;
|
|
238
333
|
}
|
|
239
|
-
function sleep(ms, signal) {
|
|
240
|
-
return new Promise((resolve) => {
|
|
241
|
-
if (signal.aborted) {
|
|
242
|
-
resolve();
|
|
243
|
-
return;
|
|
244
|
-
}
|
|
245
|
-
const timer = setTimeout(() => {
|
|
246
|
-
signal.removeEventListener("abort", onAbort);
|
|
247
|
-
resolve();
|
|
248
|
-
}, ms);
|
|
249
|
-
const onAbort = () => {
|
|
250
|
-
clearTimeout(timer);
|
|
251
|
-
signal.removeEventListener("abort", onAbort);
|
|
252
|
-
resolve();
|
|
253
|
-
};
|
|
254
|
-
signal.addEventListener("abort", onAbort, { once: true });
|
|
255
|
-
});
|
|
256
|
-
}
|
|
257
334
|
//# sourceMappingURL=embedding-worker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embedding-worker.js","sourceRoot":"","sources":["../../../src/memory/embedding-worker.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC
|
|
1
|
+
{"version":3,"file":"embedding-worker.js","sourceRoot":"","sources":["../../../src/memory/embedding-worker.ts"],"names":[],"mappings":"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"}
|
|
@@ -46,6 +46,7 @@ export declare class MemorySession {
|
|
|
46
46
|
private readonly idleCloseMs;
|
|
47
47
|
private readonly lockWaitBudgetMs;
|
|
48
48
|
private readonly onWarn?;
|
|
49
|
+
private readonly writeListeners;
|
|
49
50
|
private db;
|
|
50
51
|
private lockPath;
|
|
51
52
|
private opening;
|
|
@@ -62,6 +63,21 @@ export declare class MemorySession {
|
|
|
62
63
|
* propagate.
|
|
63
64
|
*/
|
|
64
65
|
withDb<T>(fn: (db: PGlite) => Promise<T>): Promise<T | undefined>;
|
|
66
|
+
/**
|
|
67
|
+
* Subscribe to observation-write notifications. The storage write
|
|
68
|
+
* helpers call `notifyWrite()` after landing new observation rows;
|
|
69
|
+
* `loadStoredMemory` uses this to kick the embedding backfill worker
|
|
70
|
+
* awake instead of having it poll the database on a timer. Returns an
|
|
71
|
+
* unsubscribe function.
|
|
72
|
+
*/
|
|
73
|
+
onWrite(listener: () => void): () => void;
|
|
74
|
+
/**
|
|
75
|
+
* Notify subscribers that observation rows were written. Called by
|
|
76
|
+
* the storage write helpers after a successful write so background
|
|
77
|
+
* consumers (the embedding backfill worker) wake event-driven rather
|
|
78
|
+
* than polling.
|
|
79
|
+
*/
|
|
80
|
+
notifyWrite(): void;
|
|
65
81
|
/**
|
|
66
82
|
* Wait for any in-flight `withDb` to drain, cancel a pending idle
|
|
67
83
|
* close, then close the handle and release the lock. Subsequent
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/memory/session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAGL,KAAK,iBAAiB,EAIvB,MAAM,aAAa,CAAC;AAWrB,MAAM,WAAW,oBAAoB;IACnC,kDAAkD;IAClD,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,WAAW,EAAE,iBAAiB,CAAC;IAC/B;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;;OAKG;IACH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAoB;IAChD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAA4B;IAEpD,OAAO,CAAC,EAAE,CAAqB;IAC/B,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,OAAO,CAA0C;IACzD,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,SAAS,CAA4C;IAC7D,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,SAAS,CAA4B;gBAEjC,IAAI,EAAE,oBAAoB;IAQtC;;;;;;OAMG;IACG,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IA0BvE;;;;OAIG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YAMhB,UAAU;YAYV,UAAU;YAqBV,eAAe;IAO7B,OAAO,CAAC,iBAAiB;IAWzB,OAAO,CAAC,eAAe;YAOT,QAAQ;CAevB"}
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/memory/session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAGL,KAAK,iBAAiB,EAIvB,MAAM,aAAa,CAAC;AAWrB,MAAM,WAAW,oBAAoB;IACnC,kDAAkD;IAClD,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,WAAW,EAAE,iBAAiB,CAAC;IAC/B;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;;OAKG;IACH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAoB;IAChD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAA4B;IAEpD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAyB;IACxD,OAAO,CAAC,EAAE,CAAqB;IAC/B,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,OAAO,CAA0C;IACzD,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,SAAS,CAA4C;IAC7D,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,SAAS,CAA4B;gBAEjC,IAAI,EAAE,oBAAoB;IAQtC;;;;;;OAMG;IACG,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IA0BvE;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAKzC;;;;;OAKG;IACH,WAAW,IAAI,IAAI;IAKnB;;;;OAIG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YAMhB,UAAU;YAYV,UAAU;YAqBV,eAAe;IAO7B,OAAO,CAAC,iBAAiB;IAWzB,OAAO,CAAC,eAAe;YAOT,QAAQ;CAevB"}
|
|
@@ -25,6 +25,7 @@ export class MemorySession {
|
|
|
25
25
|
idleCloseMs;
|
|
26
26
|
lockWaitBudgetMs;
|
|
27
27
|
onWarn;
|
|
28
|
+
writeListeners = new Set();
|
|
28
29
|
db;
|
|
29
30
|
lockPath;
|
|
30
31
|
opening;
|
|
@@ -75,6 +76,29 @@ export class MemorySession {
|
|
|
75
76
|
}
|
|
76
77
|
}
|
|
77
78
|
}
|
|
79
|
+
/**
|
|
80
|
+
* Subscribe to observation-write notifications. The storage write
|
|
81
|
+
* helpers call `notifyWrite()` after landing new observation rows;
|
|
82
|
+
* `loadStoredMemory` uses this to kick the embedding backfill worker
|
|
83
|
+
* awake instead of having it poll the database on a timer. Returns an
|
|
84
|
+
* unsubscribe function.
|
|
85
|
+
*/
|
|
86
|
+
onWrite(listener) {
|
|
87
|
+
this.writeListeners.add(listener);
|
|
88
|
+
return () => this.writeListeners.delete(listener);
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Notify subscribers that observation rows were written. Called by
|
|
92
|
+
* the storage write helpers after a successful write so background
|
|
93
|
+
* consumers (the embedding backfill worker) wake event-driven rather
|
|
94
|
+
* than polling.
|
|
95
|
+
*/
|
|
96
|
+
notifyWrite() {
|
|
97
|
+
if (this.disposed)
|
|
98
|
+
return;
|
|
99
|
+
for (const listener of this.writeListeners)
|
|
100
|
+
listener();
|
|
101
|
+
}
|
|
78
102
|
/**
|
|
79
103
|
* Wait for any in-flight `withDb` to drain, cancel a pending idle
|
|
80
104
|
* close, then close the handle and release the lock. Subsequent
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/memory/session.ts"],"names":[],"mappings":"AACA,OAAO,EACL,gCAAgC,EAChC,sBAAsB,EAEtB,qBAAqB,EACrB,mBAAmB,EACnB,eAAe,GAChB,MAAM,aAAa,CAAC;AAErB;;;;;;GAMG;AACH,MAAM,qBAAqB,GAAG,KAAK,CAAC;AA+BpC;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,aAAa;IACP,IAAI,CAAS;IACb,WAAW,CAAoB;IAC/B,WAAW,CAAS;IACpB,gBAAgB,CAAS;IACzB,MAAM,CAA6B;
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/memory/session.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/memory/storage.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAK9C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAGrD;;;;;;GAMG;AACH,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,aAAa,GAAG,SAAS,CAAC;IACnC,KAAK,EAAE,OAAO,GAAG,SAAS,CAAC;IAC3B,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,uBAAuB;IACtC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iGAAiG;IACjG,WAAW,CAAC,EAAE;QACZ,KAAK,EAAE,kBAAkB,CAAC;QAC1B,QAAQ,EAAE,2BAA2B,CAAC;QACtC,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IACnE;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC;AAED,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,EACtC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,uBAAuB,CAAC,
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/memory/storage.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAK9C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAGrD;;;;;;GAMG;AACH,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,aAAa,GAAG,SAAS,CAAC;IACnC,KAAK,EAAE,OAAO,GAAG,SAAS,CAAC;IAC3B,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,uBAAuB;IACtC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iGAAiG;IACjG,WAAW,CAAC,EAAE;QACZ,KAAK,EAAE,kBAAkB,CAAC;QAC1B,QAAQ,EAAE,2BAA2B,CAAC;QACtC,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IACnE;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC;AAED,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,EACtC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,uBAAuB,CAAC,CA6ElC;AAMD;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,aAAa,EACtB,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,GAAG,WAAW,GAAG,YAAY,CAAC,GAC1D,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAalC;AAED;;;;;;;GAOG;AACH,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,aAAa,EACtB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,SAAS,WAAW,EAAE,GACnC,OAAO,CAAC,IAAI,CAAC,CAqBf;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,2BAA2B;IAC1C,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,0BAA0B,EAAE,MAAM,CAAC;CACpC;AAED;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,2BAA2B,CAAC,CAiBtC;AAED;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,aAAa,EACtB,YAAY,EAAE,SAAS,WAAW,EAAE,GACnC,OAAO,CAAC,IAAI,CAAC,CAgBf;AAED,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,aAAa,EACtB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,2BAA2B,CAAC,CAmBtC;AAED;;;;;;GAMG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,aAAa,EACtB,GAAG,EAAE,SAAS,MAAM,EAAE,EACtB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,IAAI,CAAC,CAQf"}
|
|
@@ -26,11 +26,13 @@ export async function loadStoredMemory(memoryPath, cwd, options = {}) {
|
|
|
26
26
|
},
|
|
27
27
|
...(options.onWarn ? { onWarn: options.onWarn } : {}),
|
|
28
28
|
});
|
|
29
|
-
// The backfill worker
|
|
30
|
-
//
|
|
31
|
-
//
|
|
32
|
-
//
|
|
33
|
-
//
|
|
29
|
+
// The backfill worker drains any embedding backlog left by prior
|
|
30
|
+
// runs at startup, then stops until a write kicks it: observers and
|
|
31
|
+
// reflectors write rows during turns, the write helpers call
|
|
32
|
+
// `session.notifyWrite()`, and the embedding lands within seconds in
|
|
33
|
+
// the background. Skipping the worker (no `embed` option) is
|
|
34
|
+
// intentional for tests and one-shot tools that do not call
|
|
35
|
+
// recall_memory.
|
|
34
36
|
const worker = options.embed
|
|
35
37
|
? new EmbeddingBackfillWorker({
|
|
36
38
|
session,
|
|
@@ -38,7 +40,10 @@ export async function loadStoredMemory(memoryPath, cwd, options = {}) {
|
|
|
38
40
|
logPath: options.embeddingLogPath ?? defaultEmbeddingLogPath(),
|
|
39
41
|
})
|
|
40
42
|
: undefined;
|
|
41
|
-
worker
|
|
43
|
+
if (worker) {
|
|
44
|
+
session.onWrite(() => worker.kick());
|
|
45
|
+
worker.start();
|
|
46
|
+
}
|
|
42
47
|
// Eager probe: open + run migrations once at startup. This keeps
|
|
43
48
|
// the "fail fast on corruption" property of the old eager loader
|
|
44
49
|
// (an unreadable dataDir is quarantined and onRecover is called
|
|
@@ -98,6 +103,8 @@ export async function appendObservation(session, input) {
|
|
|
98
103
|
await upsertObservation(db, observation);
|
|
99
104
|
return observation;
|
|
100
105
|
});
|
|
106
|
+
if (result)
|
|
107
|
+
session.notifyWrite();
|
|
101
108
|
return result;
|
|
102
109
|
}
|
|
103
110
|
/**
|
|
@@ -110,7 +117,7 @@ export async function appendObservation(session, input) {
|
|
|
110
117
|
*/
|
|
111
118
|
export async function replaceSessionObservations(session, sessionId, observations) {
|
|
112
119
|
const ids = observations.map((observation) => observation.id);
|
|
113
|
-
await session.withDb(async (db) => {
|
|
120
|
+
const wrote = await session.withDb(async (db) => {
|
|
114
121
|
await db.transaction(async (tx) => {
|
|
115
122
|
if (ids.length === 0) {
|
|
116
123
|
await tx.query("DELETE FROM observations WHERE session_id = $1", [sessionId]);
|
|
@@ -122,7 +129,12 @@ export async function replaceSessionObservations(session, sessionId, observation
|
|
|
122
129
|
await upsertObservation(tx, observation);
|
|
123
130
|
}
|
|
124
131
|
});
|
|
132
|
+
return true;
|
|
125
133
|
});
|
|
134
|
+
// Pure deletes need no embedding work, so only upserted rows kick
|
|
135
|
+
// the backfill worker.
|
|
136
|
+
if (wrote && observations.length > 0)
|
|
137
|
+
session.notifyWrite();
|
|
126
138
|
}
|
|
127
139
|
/**
|
|
128
140
|
* Read every observation in the durable store, regardless of session id,
|
|
@@ -154,7 +166,7 @@ export async function readAllObservations(session) {
|
|
|
154
166
|
*/
|
|
155
167
|
export async function replaceAllObservations(session, observations) {
|
|
156
168
|
const ids = observations.map((observation) => observation.id);
|
|
157
|
-
await session.withDb(async (db) => {
|
|
169
|
+
const wrote = await session.withDb(async (db) => {
|
|
158
170
|
await db.transaction(async (tx) => {
|
|
159
171
|
if (ids.length === 0) {
|
|
160
172
|
await tx.query("DELETE FROM observations");
|
|
@@ -166,7 +178,10 @@ export async function replaceAllObservations(session, observations) {
|
|
|
166
178
|
await upsertObservation(tx, observation);
|
|
167
179
|
}
|
|
168
180
|
});
|
|
181
|
+
return true;
|
|
169
182
|
});
|
|
183
|
+
if (wrote && observations.length > 0)
|
|
184
|
+
session.notifyWrite();
|
|
170
185
|
}
|
|
171
186
|
export async function readSessionObservations(session, sessionId) {
|
|
172
187
|
const result = await session.withDb(async (db) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../src/memory/storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAIjC,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AA2ChC,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,UAAsC,EACtC,GAAW,EACX,UAAmC,EAAE;IAErC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE,GAAE,CAAC,CAAC;QAC5B,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACjE,CAAC;IAED,MAAM,YAAY,GAAG,iBAAiB,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IACxD,MAAM,OAAO,GAAG,IAAI,aAAa,CAAC;QAChC,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE;YACX,8DAA8D;YAC9D,iEAAiE;YACjE,iEAAiE;YACjE,2CAA2C;YAC3C,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE;gBACjB,MAAM,aAAa,CAAC,EAAE,CAAC,CAAC;YAC1B,CAAC;YACD,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC/D;QACD,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACtD,CAAC,CAAC;IAEH,iEAAiE;IACjE,
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../src/memory/storage.ts"],"names":[],"mappings":"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"}
|