@duetso/agent 0.3.4 → 0.3.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/dist/package.json +1 -1
- package/dist/src/memory/embedding-worker.d.ts +34 -1
- package/dist/src/memory/embedding-worker.d.ts.map +1 -1
- package/dist/src/memory/embedding-worker.js +91 -20
- package/dist/src/memory/embedding-worker.js.map +1 -1
- package/dist/src/memory/session.d.ts +13 -1
- package/dist/src/memory/session.d.ts.map +1 -1
- package/dist/src/memory/session.js +26 -6
- 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 +32 -4
- package/dist/src/memory/storage.js.map +1 -1
- package/package.json +1 -1
package/dist/package.json
CHANGED
|
@@ -28,6 +28,13 @@ export interface EmbeddingBackfillWorkerOptions {
|
|
|
28
28
|
* the worker's back.
|
|
29
29
|
*/
|
|
30
30
|
attemptCooldownMs?: number;
|
|
31
|
+
/**
|
|
32
|
+
* Pause between drain batches, in milliseconds, after the worker
|
|
33
|
+
* relinquishes the cross-process lock so a waiting peer duet process
|
|
34
|
+
* can acquire it before the next batch re-opens. Defaults to 250ms.
|
|
35
|
+
* Tests override this to keep the suite fast.
|
|
36
|
+
*/
|
|
37
|
+
interBatchYieldMs?: number;
|
|
31
38
|
/**
|
|
32
39
|
* Maximum size of the live log file in bytes before it is rotated
|
|
33
40
|
* to `<logPath>.1` (replacing any prior rotation). Defaults to 1 MB.
|
|
@@ -42,6 +49,7 @@ export declare class EmbeddingBackfillWorker {
|
|
|
42
49
|
private readonly retrySleepMs;
|
|
43
50
|
private readonly errorSleepMs;
|
|
44
51
|
private readonly attemptCooldownMs;
|
|
52
|
+
private readonly interBatchYieldMs;
|
|
45
53
|
private readonly logMaxBytes;
|
|
46
54
|
private readonly recentAttempts;
|
|
47
55
|
private abortController?;
|
|
@@ -66,7 +74,32 @@ export declare class EmbeddingBackfillWorker {
|
|
|
66
74
|
*/
|
|
67
75
|
stop(): Promise<void>;
|
|
68
76
|
private run;
|
|
69
|
-
|
|
77
|
+
/**
|
|
78
|
+
* Drain the backlog one `BATCH_SIZE` chunk at a time, each chunk in its
|
|
79
|
+
* own `withDb`. Between batches the worker relinquishes the memory
|
|
80
|
+
* session and pauses so a peer duet process is not starved for the
|
|
81
|
+
* whole drain (see the class doc). Returns "drained" when the backlog
|
|
82
|
+
* is empty, "cooling" when the only remaining rows are inside the
|
|
83
|
+
* attempt cooldown, or "lock-busy" when the cross-process lock could
|
|
84
|
+
* not be acquired for a batch.
|
|
85
|
+
*/
|
|
86
|
+
private drainInBatches;
|
|
87
|
+
/**
|
|
88
|
+
* Embed on an already-open handle until either a *full* batch was
|
|
89
|
+
* written — meaning more backlog is likely, so we return "more" and let
|
|
90
|
+
* the caller relinquish the lock before re-opening for the next batch —
|
|
91
|
+
* or the backlog is exhausted, returning the terminal status
|
|
92
|
+
* ("drained"/"cooling").
|
|
93
|
+
*
|
|
94
|
+
* A *partial* batch (fewer than `BATCH_SIZE` rows) means no more
|
|
95
|
+
* non-excluded rows remain, so the terminal check runs in this same
|
|
96
|
+
* open rather than re-opening for a near-certainly-empty select. This
|
|
97
|
+
* keeps a single-batch drain atomic (it resolves without ever yielding
|
|
98
|
+
* the event loop), so an un-kicked write that lands right after the
|
|
99
|
+
* drain is not swept in by a follow-on select — only full multi-batch
|
|
100
|
+
* drains yield the cross-process lock between batches.
|
|
101
|
+
*/
|
|
102
|
+
private drainBatch;
|
|
70
103
|
/**
|
|
71
104
|
* True when unembedded rows exist that `selectBatch` could not see
|
|
72
105
|
* because every one of them is inside the attempt cooldown. Only
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embedding-worker.d.ts","sourceRoot":"","sources":["../../../src/memory/embedding-worker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAe,MAAM,sBAAsB,CAAC;AAGhE,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":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAe,MAAM,sBAAsB,CAAC;AAGhE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAoElD,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;;;;;OAKG;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,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;IASnD,+EAA+E;IAC/E,KAAK,IAAI,IAAI;IAeb;;;;;OAKG;IACH,IAAI,IAAI,IAAI;IAUZ;;;;OAIG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YASb,GAAG;IA0BjB;;;;;;;;OAQG;YACW,cAAc;IAuB5B;;;;;;;;;;;;;;OAcG;YACW,UAAU;IAoBxB;;;;;OAKG;YACW,gBAAgB;IAY9B,iEAAiE;IACjE,OAAO,CAAC,KAAK;YAkBC,WAAW;IAyBzB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAcxB,OAAO,CAAC,GAAG;CA+BZ;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,2BAA2B,CAC/C,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,SAAS;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,EAChD,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,IAAI,CAAC,CAwBf;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,aAAa,EACtB,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,CAAC,CAejB"}
|
|
@@ -10,10 +10,18 @@ import { dirname } from "node:path";
|
|
|
10
10
|
* background, after which the row becomes hybrid-retrievable.
|
|
11
11
|
*
|
|
12
12
|
* Drain shape:
|
|
13
|
-
* 1.
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
13
|
+
* 1. Drain unembedded rows in `BATCH_SIZE` chunks, each chunk in its
|
|
14
|
+
* own `withDb`, until a select returns zero rows. Between batches
|
|
15
|
+
* the worker `relinquish()`es the memory session — closing the
|
|
16
|
+
* handle and releasing the cross-process `.duet-open.lock` now
|
|
17
|
+
* rather than after the idle-close timer — then pauses briefly so a
|
|
18
|
+
* peer duet process waiting to open the same memory.db can take the
|
|
19
|
+
* lock before this worker re-acquires it for the next batch. This
|
|
20
|
+
* keeps the worker from starving a foreground session's turn-init
|
|
21
|
+
* for the whole (potentially many-batch) drain. The trade is one
|
|
22
|
+
* WASM reopen per batch while a backlog is actively draining; that
|
|
23
|
+
* is transient background work, unlike the perpetual idle tick
|
|
24
|
+
* guarded against below.
|
|
17
25
|
* 2. If the drain came back empty and no `kick()` arrived meanwhile,
|
|
18
26
|
* the loop exits. A perpetual idle tick is deliberately avoided:
|
|
19
27
|
* each tick re-opens WASM Postgres once the session idle-closes,
|
|
@@ -32,6 +40,19 @@ import { dirname } from "node:path";
|
|
|
32
40
|
const BATCH_SIZE = 50;
|
|
33
41
|
const DEFAULT_RETRY_SLEEP_MS = 10_000;
|
|
34
42
|
const DEFAULT_ERROR_SLEEP_MS = 60_000;
|
|
43
|
+
// Pause between drain batches after the worker relinquishes the
|
|
44
|
+
// cross-process lock, giving a peer duet process that is polling for the
|
|
45
|
+
// same memory.db a window to acquire it before this worker re-opens for
|
|
46
|
+
// the next batch. Small relative to a real embedding batch (a network
|
|
47
|
+
// round-trip) so it barely affects drain throughput, yet wide enough to
|
|
48
|
+
// overlap a fresh peer's early poll backoff (pollAcquireOpenLock starts
|
|
49
|
+
// at 50/100/200/400ms) — the case that matters in production, where the
|
|
50
|
+
// contending peer is a just-launched session's turn-init. It does not
|
|
51
|
+
// guarantee a hit for a peer already deep in the ~1000ms backoff ceiling
|
|
52
|
+
// (that backoff never resets), but each batch reopens the window, so no
|
|
53
|
+
// peer is starved for the whole drain. Tests that need a hard per-cycle
|
|
54
|
+
// guarantee widen this past 1000ms via `interBatchYieldMs`.
|
|
55
|
+
const DEFAULT_INTER_BATCH_YIELD_MS = 250;
|
|
35
56
|
// Cap how often a single observation may be re-embedded. The production
|
|
36
57
|
// memory store can churn rows (the reflector deletes and re-inserts a
|
|
37
58
|
// session's observations, which cascade-deletes their embeddings). If
|
|
@@ -50,6 +71,7 @@ export class EmbeddingBackfillWorker {
|
|
|
50
71
|
retrySleepMs;
|
|
51
72
|
errorSleepMs;
|
|
52
73
|
attemptCooldownMs;
|
|
74
|
+
interBatchYieldMs;
|
|
53
75
|
logMaxBytes;
|
|
54
76
|
// Per-id record of the last attempt timestamp. selectBatch filters
|
|
55
77
|
// out ids attempted within the cooldown, breaking the hot loop when
|
|
@@ -74,6 +96,7 @@ export class EmbeddingBackfillWorker {
|
|
|
74
96
|
this.retrySleepMs = options.retrySleepMs ?? DEFAULT_RETRY_SLEEP_MS;
|
|
75
97
|
this.errorSleepMs = options.errorSleepMs ?? DEFAULT_ERROR_SLEEP_MS;
|
|
76
98
|
this.attemptCooldownMs = options.attemptCooldownMs ?? DEFAULT_ATTEMPT_COOLDOWN_MS;
|
|
99
|
+
this.interBatchYieldMs = options.interBatchYieldMs ?? DEFAULT_INTER_BATCH_YIELD_MS;
|
|
77
100
|
this.logMaxBytes = options.logMaxBytes ?? DEFAULT_LOG_MAX_BYTES;
|
|
78
101
|
}
|
|
79
102
|
/** Start a drain loop. Idempotent — a second call while running is a no-op. */
|
|
@@ -127,12 +150,7 @@ export class EmbeddingBackfillWorker {
|
|
|
127
150
|
while (!signal.aborted) {
|
|
128
151
|
this.pendingKick = false;
|
|
129
152
|
try {
|
|
130
|
-
|
|
131
|
-
// outstanding while we hold the lock, then exit so the
|
|
132
|
-
// session can idle-close and another duet CLI can take a
|
|
133
|
-
// turn. A returned `undefined` means the lock could not be
|
|
134
|
-
// acquired in time — retry after a short sleep.
|
|
135
|
-
const outcome = await this.options.session.withDb((db) => this.drain(db, signal));
|
|
153
|
+
const outcome = await this.drainInBatches(signal);
|
|
136
154
|
if (signal.aborted)
|
|
137
155
|
return;
|
|
138
156
|
if (outcome === "drained") {
|
|
@@ -140,9 +158,10 @@ export class EmbeddingBackfillWorker {
|
|
|
140
158
|
return;
|
|
141
159
|
continue;
|
|
142
160
|
}
|
|
143
|
-
// "cooling": the only unembedded rows were attempted recently
|
|
144
|
-
//
|
|
145
|
-
//
|
|
161
|
+
// "cooling": the only unembedded rows were attempted recently —
|
|
162
|
+
// retry once the cooldown can have expired. "lock-busy": the
|
|
163
|
+
// cross-process lock could not be acquired within the budget —
|
|
164
|
+
// retry after a short sleep so the peer holding it can finish.
|
|
146
165
|
await this.sleep(outcome === "cooling" ? this.attemptCooldownMs : this.retrySleepMs, signal);
|
|
147
166
|
}
|
|
148
167
|
catch (error) {
|
|
@@ -153,24 +172,76 @@ export class EmbeddingBackfillWorker {
|
|
|
153
172
|
}
|
|
154
173
|
}
|
|
155
174
|
}
|
|
156
|
-
|
|
175
|
+
/**
|
|
176
|
+
* Drain the backlog one `BATCH_SIZE` chunk at a time, each chunk in its
|
|
177
|
+
* own `withDb`. Between batches the worker relinquishes the memory
|
|
178
|
+
* session and pauses so a peer duet process is not starved for the
|
|
179
|
+
* whole drain (see the class doc). Returns "drained" when the backlog
|
|
180
|
+
* is empty, "cooling" when the only remaining rows are inside the
|
|
181
|
+
* attempt cooldown, or "lock-busy" when the cross-process lock could
|
|
182
|
+
* not be acquired for a batch.
|
|
183
|
+
*/
|
|
184
|
+
async drainInBatches(signal) {
|
|
185
|
+
let first = true;
|
|
157
186
|
while (!signal.aborted) {
|
|
187
|
+
if (!first) {
|
|
188
|
+
// Release the cross-process lock now (rather than waiting out the
|
|
189
|
+
// idle-close timer) and pause so a polling peer can take it
|
|
190
|
+
// before this worker re-opens for the next batch.
|
|
191
|
+
await this.options.session.relinquish();
|
|
192
|
+
await this.sleep(this.interBatchYieldMs, signal);
|
|
193
|
+
if (signal.aborted)
|
|
194
|
+
return "drained";
|
|
195
|
+
}
|
|
196
|
+
first = false;
|
|
197
|
+
const outcome = await this.options.session.withDb((db) => this.drainBatch(db));
|
|
198
|
+
if (signal.aborted)
|
|
199
|
+
return "drained";
|
|
200
|
+
// `undefined` means the lock could not be acquired within the
|
|
201
|
+
// budget; surface it so the caller backs off and retries.
|
|
202
|
+
if (outcome === undefined)
|
|
203
|
+
return "lock-busy";
|
|
204
|
+
if (outcome === "more")
|
|
205
|
+
continue;
|
|
206
|
+
return outcome;
|
|
207
|
+
}
|
|
208
|
+
return "drained";
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Embed on an already-open handle until either a *full* batch was
|
|
212
|
+
* written — meaning more backlog is likely, so we return "more" and let
|
|
213
|
+
* the caller relinquish the lock before re-opening for the next batch —
|
|
214
|
+
* or the backlog is exhausted, returning the terminal status
|
|
215
|
+
* ("drained"/"cooling").
|
|
216
|
+
*
|
|
217
|
+
* A *partial* batch (fewer than `BATCH_SIZE` rows) means no more
|
|
218
|
+
* non-excluded rows remain, so the terminal check runs in this same
|
|
219
|
+
* open rather than re-opening for a near-certainly-empty select. This
|
|
220
|
+
* keeps a single-batch drain atomic (it resolves without ever yielding
|
|
221
|
+
* the event loop), so an un-kicked write that lands right after the
|
|
222
|
+
* drain is not swept in by a follow-on select — only full multi-batch
|
|
223
|
+
* drains yield the cross-process lock between batches.
|
|
224
|
+
*/
|
|
225
|
+
async drainBatch(db) {
|
|
226
|
+
while (true) {
|
|
158
227
|
const batch = await this.selectBatch(db);
|
|
159
228
|
if (batch.length === 0) {
|
|
160
229
|
return (await this.hasCooledBacklog(db)) ? "cooling" : "drained";
|
|
161
230
|
}
|
|
162
|
-
// Stamp the attempt before we await the embedding so a
|
|
163
|
-
//
|
|
164
|
-
//
|
|
231
|
+
// Stamp the attempt before we await the embedding so a failure
|
|
232
|
+
// mid-call still counts as an attempt and the same ids do not get
|
|
233
|
+
// retried in a tight loop on the next drain.
|
|
165
234
|
const attemptAt = Date.now();
|
|
166
235
|
for (const row of batch)
|
|
167
236
|
this.recentAttempts.set(row.id, attemptAt);
|
|
168
237
|
await embedAndPersistObservations(db, batch, this.options.embed);
|
|
169
238
|
this.log(`Embedded ${batch.length} observations`);
|
|
239
|
+
// Full batch: yield the lock before draining the next one.
|
|
240
|
+
if (batch.length >= BATCH_SIZE)
|
|
241
|
+
return "more";
|
|
242
|
+
// Partial batch: fall through to resolve the terminal state in the
|
|
243
|
+
// same open.
|
|
170
244
|
}
|
|
171
|
-
// Aborted mid-drain; the caller returns on the aborted signal
|
|
172
|
-
// before reading this, so the value only needs to typecheck.
|
|
173
|
-
return "cooling";
|
|
174
245
|
}
|
|
175
246
|
/**
|
|
176
247
|
* True when unembedded rows exist that `selectBatch` could not see
|
|
@@ -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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"}
|
|
@@ -62,7 +62,9 @@ export declare class MemorySession {
|
|
|
62
62
|
* returns whatever `fn` returns. Errors thrown inside `fn`
|
|
63
63
|
* propagate.
|
|
64
64
|
*/
|
|
65
|
-
withDb<T>(fn: (db: PGlite) => Promise<T
|
|
65
|
+
withDb<T>(fn: (db: PGlite) => Promise<T>, opts?: {
|
|
66
|
+
lockWaitBudgetMs?: number;
|
|
67
|
+
}): Promise<T | undefined>;
|
|
66
68
|
/**
|
|
67
69
|
* Subscribe to observation-write notifications. The storage write
|
|
68
70
|
* helpers call `notifyWrite()` after landing new observation rows;
|
|
@@ -85,6 +87,16 @@ export declare class MemorySession {
|
|
|
85
87
|
*/
|
|
86
88
|
dispose(): Promise<void>;
|
|
87
89
|
private runDispose;
|
|
90
|
+
/**
|
|
91
|
+
* Immediately close the handle and release the cross-process lock when
|
|
92
|
+
* no `withDb` is in flight, instead of waiting out the idle-close
|
|
93
|
+
* timer. The embedding backfill worker calls this at each batch
|
|
94
|
+
* boundary so a peer duet process draining the same memory.db is not
|
|
95
|
+
* starved for the whole (multi-batch) drain. A no-op while any op is
|
|
96
|
+
* in flight (`refs > 0`) — that op still owns the open — or while the
|
|
97
|
+
* session is disposed/opening.
|
|
98
|
+
*/
|
|
99
|
+
relinquish(): Promise<void>;
|
|
88
100
|
private ensureOpen;
|
|
89
101
|
private openWithPolling;
|
|
90
102
|
private scheduleIdleClose;
|
|
@@ -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,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,
|
|
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,EACZ,EAAE,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,EAC9B,IAAI,CAAC,EAAE;QAAE,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAAE,GACnC,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IA0BzB;;;;;;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;IAYxB;;;;;;;;OAQG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;YAMnB,UAAU;YAqBV,eAAe;IAY7B,OAAO,CAAC,iBAAiB;IAWzB,OAAO,CAAC,eAAe;YAOT,QAAQ;CAevB"}
|
|
@@ -48,7 +48,7 @@ export class MemorySession {
|
|
|
48
48
|
* returns whatever `fn` returns. Errors thrown inside `fn`
|
|
49
49
|
* propagate.
|
|
50
50
|
*/
|
|
51
|
-
async withDb(fn) {
|
|
51
|
+
async withDb(fn, opts) {
|
|
52
52
|
if (this.disposed)
|
|
53
53
|
return undefined;
|
|
54
54
|
this.cancelIdleClose();
|
|
@@ -59,7 +59,7 @@ export class MemorySession {
|
|
|
59
59
|
// a closed db.
|
|
60
60
|
this.refs++;
|
|
61
61
|
try {
|
|
62
|
-
const db = await this.ensureOpen();
|
|
62
|
+
const db = await this.ensureOpen(opts?.lockWaitBudgetMs);
|
|
63
63
|
if (!db)
|
|
64
64
|
return undefined;
|
|
65
65
|
// Once the handle is open, run fn even if dispose was called
|
|
@@ -121,12 +121,27 @@ export class MemorySession {
|
|
|
121
121
|
}
|
|
122
122
|
await this.closeNow();
|
|
123
123
|
}
|
|
124
|
-
|
|
124
|
+
/**
|
|
125
|
+
* Immediately close the handle and release the cross-process lock when
|
|
126
|
+
* no `withDb` is in flight, instead of waiting out the idle-close
|
|
127
|
+
* timer. The embedding backfill worker calls this at each batch
|
|
128
|
+
* boundary so a peer duet process draining the same memory.db is not
|
|
129
|
+
* starved for the whole (multi-batch) drain. A no-op while any op is
|
|
130
|
+
* in flight (`refs > 0`) — that op still owns the open — or while the
|
|
131
|
+
* session is disposed/opening.
|
|
132
|
+
*/
|
|
133
|
+
async relinquish() {
|
|
134
|
+
if (this.disposed || this.refs > 0 || this.opening)
|
|
135
|
+
return;
|
|
136
|
+
this.cancelIdleClose();
|
|
137
|
+
await this.closeNow();
|
|
138
|
+
}
|
|
139
|
+
async ensureOpen(lockWaitBudgetMs) {
|
|
125
140
|
if (this.db)
|
|
126
141
|
return this.db;
|
|
127
142
|
if (this.opening)
|
|
128
143
|
return this.opening;
|
|
129
|
-
this.opening = this.openWithPolling()
|
|
144
|
+
this.opening = this.openWithPolling(lockWaitBudgetMs)
|
|
130
145
|
.then((db) => {
|
|
131
146
|
this.db = db;
|
|
132
147
|
return db;
|
|
@@ -143,8 +158,13 @@ export class MemorySession {
|
|
|
143
158
|
});
|
|
144
159
|
return this.opening;
|
|
145
160
|
}
|
|
146
|
-
async openWithPolling() {
|
|
147
|
-
|
|
161
|
+
async openWithPolling(lockWaitBudgetMs) {
|
|
162
|
+
// A per-call budget (passed by `withDb`) overrides the session
|
|
163
|
+
// default for the open this call initiates. Concurrent callers that
|
|
164
|
+
// join an in-flight open (`this.opening`) inherit that open's budget;
|
|
165
|
+
// the per-call budget only applies when this call starts the open.
|
|
166
|
+
const budget = lockWaitBudgetMs ?? this.lockWaitBudgetMs;
|
|
167
|
+
const lockPath = await pollAcquireOpenLock(this.path, budget);
|
|
148
168
|
const opened = await openPGliteHoldingLock(this.path, this.openOptions, lockPath);
|
|
149
169
|
this.lockPath = opened.lockPath;
|
|
150
170
|
return opened.db;
|
|
@@ -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;IAEnC,cAAc,GAAG,IAAI,GAAG,EAAc,CAAC;IAChD,EAAE,CAAqB;IACvB,QAAQ,CAAqB;IAC7B,OAAO,CAA0C;IACjD,IAAI,GAAG,CAAC,CAAC;IACT,SAAS,CAA4C;IACrD,QAAQ,GAAG,KAAK,CAAC;IACjB,SAAS,CAA4B;IAE7C,YAAY,IAA0B;QACpC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACpC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,qBAAqB,CAAC;QAC7D,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,IAAI,gCAAgC,CAAC;QAClF,IAAI,IAAI,CAAC,MAAM;YAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAC7C,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,MAAM,
|
|
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,EAAyB,KAAK,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAUrE,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,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,EAAyB,KAAK,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAUrE,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAcrD;;;;;;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,CA8GlC;AAMD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,aAAa,EACtB,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,GAAG,WAAW,GAAG,YAAY,CAAC,EAC3D,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GAChC,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CA2BlC;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"}
|
|
@@ -7,6 +7,17 @@ import { createMemoryId } from "./id.js";
|
|
|
7
7
|
import { runMigrations } from "./migrations.js";
|
|
8
8
|
import { estimateTokens } from "./observational.js";
|
|
9
9
|
import { MemorySession } from "./session.js";
|
|
10
|
+
/**
|
|
11
|
+
* Lock-wait budget for the synchronous startup steps in
|
|
12
|
+
* `loadStoredMemory` (the eager open-probe and the reused-open backfill /
|
|
13
|
+
* context-pack builds). Deliberately much shorter than the session's
|
|
14
|
+
* default 30s open-lock budget: when a peer duet process holds the
|
|
15
|
+
* cross-process lock, startup must degrade to the async path in a few
|
|
16
|
+
* seconds instead of blocking the first turn while several init steps
|
|
17
|
+
* each wait a full budget. The steady-state write path keeps the full
|
|
18
|
+
* default so a legitimate mid-turn burst still waits its turn.
|
|
19
|
+
*/
|
|
20
|
+
const INIT_LOCK_WAIT_BUDGET_MS = 5_000;
|
|
10
21
|
export async function loadStoredMemory(memoryPath, cwd, options = {}) {
|
|
11
22
|
if (!memoryPath) {
|
|
12
23
|
const noop = async () => { };
|
|
@@ -50,7 +61,22 @@ export async function loadStoredMemory(memoryPath, cwd, options = {}) {
|
|
|
50
61
|
// before any turn dispatches) without changing the steady-state
|
|
51
62
|
// lazy-open behavior. The handle idle-closes within 2s afterwards
|
|
52
63
|
// unless the contextPack rebuild below grabs it first.
|
|
53
|
-
|
|
64
|
+
//
|
|
65
|
+
// Use a short lock-wait budget here rather than the session default
|
|
66
|
+
// (30s): if a peer duet process holds the cross-process open-lock,
|
|
67
|
+
// this probe — and the backfill/context-pack steps that reuse its
|
|
68
|
+
// open — must degrade in a few seconds instead of chaining several
|
|
69
|
+
// full 30s waits and hanging the first turn for minutes. On a busy
|
|
70
|
+
// peer the probe returns undefined; we then skip the follow-on init
|
|
71
|
+
// steps (the backfill catch-up and initial context-pack build, which
|
|
72
|
+
// would only re-block on the same lock) and defer them to the async
|
|
73
|
+
// worker + later compaction. (This is a distinct path from quarantine
|
|
74
|
+
// recovery, where the probe SUCCEEDS against the fresh dataDir and the
|
|
75
|
+
// follow-on steps run as normal — here they are skipped.) The
|
|
76
|
+
// steady-state write path keeps the full budget.
|
|
77
|
+
const probed = await session.withDb(async () => true, {
|
|
78
|
+
lockWaitBudgetMs: INIT_LOCK_WAIT_BUDGET_MS,
|
|
79
|
+
});
|
|
54
80
|
// Bounded synchronous catch-up before the worker starts (and before
|
|
55
81
|
// the first turn can dispatch): embed the newest rows still missing
|
|
56
82
|
// vectors so a memory written by an embed-less flow (`duet memory
|
|
@@ -58,8 +84,10 @@ export async function loadStoredMemory(memoryPath, cwd, options = {}) {
|
|
|
58
84
|
// recallable in the very first turn rather than whenever the async
|
|
59
85
|
// drain lands. Capped at one embedding HTTP request; the worker owns
|
|
60
86
|
// any deeper backlog. Best-effort: on failure (no API key, endpoint
|
|
61
|
-
// down) the worker's retry loop takes over.
|
|
62
|
-
|
|
87
|
+
// down) the worker's retry loop takes over. Skipped when the probe
|
|
88
|
+
// could not acquire the lock — the worker picks up the backlog once
|
|
89
|
+
// the peer releases.
|
|
90
|
+
if (probed && options.embed) {
|
|
63
91
|
try {
|
|
64
92
|
await backfillNewestEmbeddings(session, options.embed, EMBEDDING_BATCH_LIMIT);
|
|
65
93
|
}
|
|
@@ -68,7 +96,7 @@ export async function loadStoredMemory(memoryPath, cwd, options = {}) {
|
|
|
68
96
|
}
|
|
69
97
|
}
|
|
70
98
|
worker?.start();
|
|
71
|
-
if (options.contextPack) {
|
|
99
|
+
if (probed && options.contextPack) {
|
|
72
100
|
// Initial compaction trigger: freeze the rendered memory pack
|
|
73
101
|
// before the first turn dispatches so the prefix is stable from
|
|
74
102
|
// turn 1, not turn 2. Migrations ran during the probe above; the
|
|
@@ -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;AAGjC,OAAO,EAAE,qBAAqB,EAAgB,MAAM,gBAAgB,CAAC;AACrE,OAAO,EACL,wBAAwB,EACxB,2BAA2B,EAC3B,uBAAuB,GACxB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../src/memory/storage.ts"],"names":[],"mappings":"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"}
|