@duetso/agent 0.1.65 → 0.1.68
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 +4 -2
- package/dist/package.json +1 -1
- package/dist/src/cli/help.d.ts.map +1 -1
- package/dist/src/cli/help.js +4 -1
- package/dist/src/cli/help.js.map +1 -1
- package/dist/src/cli/rpc.d.ts +74 -0
- package/dist/src/cli/rpc.d.ts.map +1 -0
- package/dist/src/cli/rpc.js +282 -0
- package/dist/src/cli/rpc.js.map +1 -0
- package/dist/src/cli/run.d.ts +4 -5
- package/dist/src/cli/run.d.ts.map +1 -1
- package/dist/src/cli/run.js +15 -42
- package/dist/src/cli/run.js.map +1 -1
- package/dist/src/cli.d.ts +1 -0
- package/dist/src/cli.d.ts.map +1 -1
- package/dist/src/cli.js +9 -0
- package/dist/src/cli.js.map +1 -1
- package/dist/src/memory/embedding-worker.d.ts +0 -2
- package/dist/src/memory/embedding-worker.d.ts.map +1 -1
- package/dist/src/memory/embedding-worker.js +10 -7
- package/dist/src/memory/embedding-worker.js.map +1 -1
- package/dist/src/memory/embedding.d.ts +20 -6
- package/dist/src/memory/embedding.d.ts.map +1 -1
- package/dist/src/memory/embedding.js +24 -13
- package/dist/src/memory/embedding.js.map +1 -1
- package/dist/src/memory/migrations.d.ts.map +1 -1
- package/dist/src/memory/migrations.js +87 -0
- package/dist/src/memory/migrations.js.map +1 -1
- package/dist/src/memory/observational.d.ts +105 -14
- package/dist/src/memory/observational.d.ts.map +1 -1
- package/dist/src/memory/observational.js +129 -62
- package/dist/src/memory/observational.js.map +1 -1
- package/dist/src/memory/recall.d.ts.map +1 -1
- package/dist/src/memory/recall.js +2 -1
- package/dist/src/memory/recall.js.map +1 -1
- package/dist/src/memory/storage.d.ts +1 -2
- package/dist/src/memory/storage.d.ts.map +1 -1
- package/dist/src/memory/storage.js +0 -2
- package/dist/src/memory/storage.js.map +1 -1
- package/dist/src/tui/app.d.ts.map +1 -1
- package/dist/src/tui/app.js +18 -4
- package/dist/src/tui/app.js.map +1 -1
- package/dist/src/turn-runner/tools.d.ts +1 -1
- package/dist/src/turn-runner/tools.js +1 -1
- package/dist/src/turn-runner/turn-runner.d.ts +31 -15
- package/dist/src/turn-runner/turn-runner.d.ts.map +1 -1
- package/dist/src/turn-runner/turn-runner.js +45 -22
- package/dist/src/turn-runner/turn-runner.js.map +1 -1
- package/dist/src/types/config.d.ts +13 -0
- package/dist/src/types/config.d.ts.map +1 -1
- package/dist/src/types/memory.d.ts +67 -33
- package/dist/src/types/memory.d.ts.map +1 -1
- package/dist/src/types/protocol.d.ts +47 -5
- package/dist/src/types/protocol.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/src/cli.js
CHANGED
|
@@ -16,11 +16,13 @@ import packageJson from "../package.json" with { type: "json" };
|
|
|
16
16
|
import { runEnvCommand } from "./cli/env.js";
|
|
17
17
|
import { runLoginCommand } from "./cli/login.js";
|
|
18
18
|
import { runMemoryCommand } from "./cli/memory.js";
|
|
19
|
+
import { runRpcCommand } from "./cli/rpc.js";
|
|
19
20
|
import { runRunCommand } from "./cli/run.js";
|
|
20
21
|
import { runSkillsCommand } from "./cli/skills.js";
|
|
21
22
|
import { runUpgradeCommand } from "./cli/upgrade.js";
|
|
22
23
|
import { shimDuetApiKeyToAiGateway } from "./model-resolution/duet-gateway.js";
|
|
23
24
|
export { buildCliTurnConfig, runRunCommand, shouldUseTui } from "./cli/run.js";
|
|
25
|
+
export { runRpcCommand } from "./cli/rpc.js";
|
|
24
26
|
export { runEnvCommand } from "./cli/env.js";
|
|
25
27
|
export { runLoginCommand } from "./cli/login.js";
|
|
26
28
|
export { runSkillsCommand } from "./cli/skills.js";
|
|
@@ -62,6 +64,13 @@ async function main() {
|
|
|
62
64
|
await runMemoryCommand(args.slice(1));
|
|
63
65
|
return;
|
|
64
66
|
}
|
|
67
|
+
// `--rpc` is a top-level routing flag rather than a subcommand because it
|
|
68
|
+
// shares all model/workdir/env flags with the default run command; the
|
|
69
|
+
// difference is only the I/O surface (stdin commands, stdout events).
|
|
70
|
+
if (args.includes("--rpc")) {
|
|
71
|
+
await runRpcCommand(args, PACKAGE_METADATA);
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
65
74
|
await runRunCommand(args, PACKAGE_METADATA);
|
|
66
75
|
}
|
|
67
76
|
catch (err) {
|
package/dist/src/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,8 +4,6 @@ export interface EmbeddingBackfillWorkerOptions {
|
|
|
4
4
|
db: PGlite;
|
|
5
5
|
/** Embedding callable. Defaults to the gateway client; tests inject a stub. */
|
|
6
6
|
embed: EmbedFn;
|
|
7
|
-
/** Identifier for the embedding model, written alongside each vector for future re-embedding. */
|
|
8
|
-
model: string;
|
|
9
7
|
/** Path to append progress lines to. Optional; when omitted the worker logs nothing. */
|
|
10
8
|
logPath?: string;
|
|
11
9
|
}
|
|
@@ -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;AAGnD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AA2B9C,MAAM,WAAW,8BAA8B;IAC7C,EAAE,EAAE,MAAM,CAAC;IACX,+EAA+E;IAC/E,KAAK,EAAE,OAAO,CAAC;IACf,
|
|
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;AAGnD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AA2B9C,MAAM,WAAW,8BAA8B;IAC7C,EAAE,EAAE,MAAM,CAAC;IACX,+EAA+E;IAC/E,KAAK,EAAE,OAAO,CAAC;IACf,wFAAwF;IACxF,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,uBAAuB;IAClC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiC;IACzD,OAAO,CAAC,eAAe,CAAC,CAAkB;IAC1C,OAAO,CAAC,cAAc,CAAC,CAAgB;gBAE3B,OAAO,EAAE,8BAA8B;IAInD,wEAAwE;IACxE,KAAK,IAAI,IAAI;IAMb,yEAAyE;IACnE,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAOb,GAAG;YA4BH,WAAW;YAmBX,YAAY;IA6B1B,OAAO,CAAC,GAAG;CAUZ"}
|
|
@@ -53,11 +53,11 @@ export class EmbeddingBackfillWorker {
|
|
|
53
53
|
await sleep(IDLE_SLEEP_MS, signal);
|
|
54
54
|
continue;
|
|
55
55
|
}
|
|
56
|
-
const
|
|
57
|
-
if (
|
|
58
|
-
throw new Error(`Embedding response length (${
|
|
56
|
+
const result = await this.options.embed(batch.map((row) => row.content));
|
|
57
|
+
if (result.embeddings.length !== batch.length) {
|
|
58
|
+
throw new Error(`Embedding response length (${result.embeddings.length}) did not match batch size (${batch.length})`);
|
|
59
59
|
}
|
|
60
|
-
await this.persistBatch(batch,
|
|
60
|
+
await this.persistBatch(batch, result.embeddings, result.model);
|
|
61
61
|
this.log(`Embedded ${batch.length} observations`);
|
|
62
62
|
await sleep(INTER_BATCH_SLEEP_MS, signal);
|
|
63
63
|
}
|
|
@@ -85,10 +85,13 @@ export class EmbeddingBackfillWorker {
|
|
|
85
85
|
LIMIT $1`, [BATCH_SIZE]);
|
|
86
86
|
return result.rows;
|
|
87
87
|
}
|
|
88
|
-
async persistBatch(batch, vectors) {
|
|
88
|
+
async persistBatch(batch, vectors, model) {
|
|
89
89
|
// One transaction so a partial network or write failure does not
|
|
90
90
|
// leave the embeddings table half-populated relative to the
|
|
91
|
-
// candidate set we just queried.
|
|
91
|
+
// candidate set we just queried. `model` is the identifier the
|
|
92
|
+
// server reported for this batch; storing it verbatim lets a
|
|
93
|
+
// future re-embedding pass match the deprecated tag and refresh
|
|
94
|
+
// only the affected rows.
|
|
92
95
|
await this.options.db.transaction(async (tx) => {
|
|
93
96
|
const now = Date.now();
|
|
94
97
|
for (let index = 0; index < batch.length; index++) {
|
|
@@ -99,7 +102,7 @@ export class EmbeddingBackfillWorker {
|
|
|
99
102
|
ON CONFLICT (observation_id) DO UPDATE SET
|
|
100
103
|
model = EXCLUDED.model,
|
|
101
104
|
vector = EXCLUDED.vector,
|
|
102
|
-
created_at = EXCLUDED.created_at`, [row.id,
|
|
105
|
+
created_at = EXCLUDED.created_at`, [row.id, model, formatVector(vector), now]);
|
|
103
106
|
}
|
|
104
107
|
});
|
|
105
108
|
}
|
|
@@ -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,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,GAAG,EAAE,CAAC;AACtB,MAAM,oBAAoB,GAAG,GAAG,CAAC;AACjC,MAAM,aAAa,GAAG,MAAM,CAAC;AAC7B,MAAM,cAAc,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"embedding-worker.js","sourceRoot":"","sources":["../../../src/memory/embedding-worker.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,13 @@
|
|
|
6
6
|
* for free as a CLI perk; we deliberately do not expose a way to plug
|
|
7
7
|
* in a different provider key here so the runtime stays single-path.
|
|
8
8
|
*
|
|
9
|
+
* Model identity is owned by the server. The endpoint hardcodes the
|
|
10
|
+
* model and echoes it back on every response; we store the echoed
|
|
11
|
+
* value alongside each vector so a future server-side model swap can
|
|
12
|
+
* invalidate stale rows by tag. This client knows nothing about the
|
|
13
|
+
* concrete model name — only the dimension width, which has to match
|
|
14
|
+
* the pgvector column.
|
|
15
|
+
*
|
|
9
16
|
* Behavior:
|
|
10
17
|
* - Inputs are batched up to `EMBEDDING_BATCH_LIMIT` per HTTP call so
|
|
11
18
|
* a single backfill batch never goes over the request body cap.
|
|
@@ -17,21 +24,28 @@
|
|
|
17
24
|
* tool catches it and logs once; the backfill worker logs and
|
|
18
25
|
* sleeps until the user logs in).
|
|
19
26
|
*/
|
|
20
|
-
/**
|
|
21
|
-
export declare const
|
|
27
|
+
/** Embedding dimensions. Sent on every request and matches the pgvector column width. */
|
|
28
|
+
export declare const EMBEDDING_DIMENSIONS = 3072;
|
|
22
29
|
/** Maximum input strings sent in a single embedding request. */
|
|
23
30
|
export declare const EMBEDDING_BATCH_LIMIT = 100;
|
|
31
|
+
/**
|
|
32
|
+
* Result of an `EmbedFn` call. `model` is the identifier the server
|
|
33
|
+
* reported alongside the vectors; storage tags each row with it so a
|
|
34
|
+
* later model swap can invalidate stale rows by string match.
|
|
35
|
+
*/
|
|
36
|
+
export interface EmbedResult {
|
|
37
|
+
embeddings: number[][];
|
|
38
|
+
model: string;
|
|
39
|
+
}
|
|
24
40
|
/**
|
|
25
41
|
* Callable shape consumed by the backfill worker and the recall_memory
|
|
26
|
-
* tool. Inputs map 1:1 to
|
|
42
|
+
* tool. Inputs map 1:1 to `embeddings`.
|
|
27
43
|
*/
|
|
28
|
-
export type EmbedFn = (inputs: string[]) => Promise<
|
|
44
|
+
export type EmbedFn = (inputs: string[]) => Promise<EmbedResult>;
|
|
29
45
|
export declare class EmbeddingUnavailableError extends Error {
|
|
30
46
|
constructor(message: string);
|
|
31
47
|
}
|
|
32
48
|
export interface CreateEmbeddingClientOptions {
|
|
33
|
-
/** Embedding model identifier sent with each request. */
|
|
34
|
-
model?: string;
|
|
35
49
|
/**
|
|
36
50
|
* Override the API key resolver. Defaults to reading `DUET_API_KEY`
|
|
37
51
|
* from `process.env`. Tests inject a fixed value to exercise the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embedding.d.ts","sourceRoot":"","sources":["../../../src/memory/embedding.ts"],"names":[],"mappings":"AAEA
|
|
1
|
+
{"version":3,"file":"embedding.d.ts","sourceRoot":"","sources":["../../../src/memory/embedding.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,yFAAyF;AACzF,eAAO,MAAM,oBAAoB,OAAO,CAAC;AACzC,gEAAgE;AAChE,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAMzC;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,EAAE,EAAE,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,MAAM,MAAM,OAAO,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;AAEjE,qBAAa,yBAA0B,SAAQ,KAAK;gBACtC,OAAO,EAAE,MAAM;CAI5B;AAED,MAAM,WAAW,4BAA4B;IAC3C;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC;IAC7C;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,4BAAiC,GAAG,OAAO,CAuCzF"}
|
|
@@ -7,6 +7,13 @@ import { resolveDuetAppBaseUrl } from "../lib/duet-app-url.js";
|
|
|
7
7
|
* for free as a CLI perk; we deliberately do not expose a way to plug
|
|
8
8
|
* in a different provider key here so the runtime stays single-path.
|
|
9
9
|
*
|
|
10
|
+
* Model identity is owned by the server. The endpoint hardcodes the
|
|
11
|
+
* model and echoes it back on every response; we store the echoed
|
|
12
|
+
* value alongside each vector so a future server-side model swap can
|
|
13
|
+
* invalidate stale rows by tag. This client knows nothing about the
|
|
14
|
+
* concrete model name — only the dimension width, which has to match
|
|
15
|
+
* the pgvector column.
|
|
16
|
+
*
|
|
10
17
|
* Behavior:
|
|
11
18
|
* - Inputs are batched up to `EMBEDDING_BATCH_LIMIT` per HTTP call so
|
|
12
19
|
* a single backfill batch never goes over the request body cap.
|
|
@@ -18,8 +25,8 @@ import { resolveDuetAppBaseUrl } from "../lib/duet-app-url.js";
|
|
|
18
25
|
* tool catches it and logs once; the backfill worker logs and
|
|
19
26
|
* sleeps until the user logs in).
|
|
20
27
|
*/
|
|
21
|
-
/**
|
|
22
|
-
export const
|
|
28
|
+
/** Embedding dimensions. Sent on every request and matches the pgvector column width. */
|
|
29
|
+
export const EMBEDDING_DIMENSIONS = 3072;
|
|
23
30
|
/** Maximum input strings sent in a single embedding request. */
|
|
24
31
|
export const EMBEDDING_BATCH_LIMIT = 100;
|
|
25
32
|
const ENDPOINT_PATH = "/api/v1/embed";
|
|
@@ -37,34 +44,38 @@ export class EmbeddingUnavailableError extends Error {
|
|
|
37
44
|
* `recall_memory` query so connection reuse can amortize TLS setup.
|
|
38
45
|
*/
|
|
39
46
|
export function createEmbeddingClient(options = {}) {
|
|
40
|
-
const model = options.model ?? DEFAULT_EMBEDDING_MODEL;
|
|
41
47
|
const baseUrl = options.baseUrl ?? resolveDuetAppBaseUrl();
|
|
42
48
|
const fetchImpl = options.fetch ?? fetch;
|
|
43
49
|
return async (inputs) => {
|
|
44
50
|
if (inputs.length === 0)
|
|
45
|
-
return [];
|
|
51
|
+
return { embeddings: [], model: "" };
|
|
46
52
|
const apiKey = resolveApiKey(options.apiKey);
|
|
47
53
|
if (!apiKey) {
|
|
48
54
|
// Throwing a typed error lets callers branch on graceful
|
|
49
55
|
// degradation without string-matching the message.
|
|
50
56
|
throw new EmbeddingUnavailableError("DUET_API_KEY is not set; embeddings unavailable. Run `duet login` to enable hybrid memory retrieval.");
|
|
51
57
|
}
|
|
52
|
-
const
|
|
58
|
+
const embeddings = [];
|
|
59
|
+
let model = "";
|
|
53
60
|
for (let offset = 0; offset < inputs.length; offset += EMBEDDING_BATCH_LIMIT) {
|
|
54
61
|
const slice = inputs.slice(offset, offset + EMBEDDING_BATCH_LIMIT);
|
|
55
|
-
const
|
|
62
|
+
const batch = await postBatch({
|
|
56
63
|
url: `${baseUrl}${ENDPOINT_PATH}`,
|
|
57
64
|
apiKey,
|
|
58
|
-
model,
|
|
59
65
|
inputs: slice,
|
|
60
66
|
fetchImpl,
|
|
61
67
|
});
|
|
62
|
-
if (
|
|
63
|
-
throw new Error(`Embedding response length (${
|
|
68
|
+
if (batch.embeddings.length !== slice.length) {
|
|
69
|
+
throw new Error(`Embedding response length (${batch.embeddings.length}) did not match request size (${slice.length})`);
|
|
64
70
|
}
|
|
65
|
-
|
|
71
|
+
embeddings.push(...batch.embeddings);
|
|
72
|
+
// The server returns the same model on every batch within a call.
|
|
73
|
+
// Take the last one so the caller sees what the server most
|
|
74
|
+
// recently agreed to; mid-call mismatches are not a thing we
|
|
75
|
+
// currently need to reconcile.
|
|
76
|
+
model = batch.model;
|
|
66
77
|
}
|
|
67
|
-
return
|
|
78
|
+
return { embeddings, model };
|
|
68
79
|
};
|
|
69
80
|
}
|
|
70
81
|
async function postBatch(options) {
|
|
@@ -77,11 +88,11 @@ async function postBatch(options) {
|
|
|
77
88
|
authorization: `Bearer ${options.apiKey}`,
|
|
78
89
|
"content-type": "application/json",
|
|
79
90
|
},
|
|
80
|
-
body: JSON.stringify({ input: options.inputs,
|
|
91
|
+
body: JSON.stringify({ input: options.inputs, dimensions: EMBEDDING_DIMENSIONS }),
|
|
81
92
|
});
|
|
82
93
|
if (response.ok) {
|
|
83
94
|
const body = (await response.json());
|
|
84
|
-
return body.embeddings;
|
|
95
|
+
return { embeddings: body.data.embeddings, model: body.data.model };
|
|
85
96
|
}
|
|
86
97
|
// 4xx errors (auth, malformed input) will not improve on retry;
|
|
87
98
|
// surface them immediately so callers see the real cause.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embedding.js","sourceRoot":"","sources":["../../../src/memory/embedding.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAE/D
|
|
1
|
+
{"version":3,"file":"embedding.js","sourceRoot":"","sources":["../../../src/memory/embedding.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../../../src/memory/migrations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEhE;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,WAAW,SAAS;IACxB,oFAAoF;IACpF,OAAO,EAAE,MAAM,CAAC;IAChB,yEAAyE;IACzE,WAAW,EAAE,MAAM,CAAC;IACpB,wEAAwE;IACxE,EAAE,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACxC;
|
|
1
|
+
{"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../../../src/memory/migrations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEhE;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,WAAW,SAAS;IACxB,oFAAoF;IACpF,OAAO,EAAE,MAAM,CAAC;IAChB,yEAAyE;IACzE,WAAW,EAAE,MAAM,CAAC;IACpB,wEAAwE;IACxE,EAAE,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACxC;AA0SD,MAAM,WAAW,eAAe;IAC9B,4EAA4E;IAC5E,WAAW,EAAE,MAAM,CAAC;IACpB,uEAAuE;IACvE,SAAS,EAAE,MAAM,CAAC;IAClB,2EAA2E;IAC3E,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAwCxE;AAED,8DAA8D;AAC9D,eAAO,MAAM,qBAAqB,EAAE,MAAwC,CAAC;AAE7E,qDAAqD;AACrD,eAAO,MAAM,qBAAqB,EAAE,SAAS,SAAS,EAAe,CAAC"}
|
|
@@ -180,6 +180,93 @@ const MIGRATIONS = [
|
|
|
180
180
|
ON observations(kind, priority, last_used_at DESC)`);
|
|
181
181
|
},
|
|
182
182
|
},
|
|
183
|
+
{
|
|
184
|
+
version: 5,
|
|
185
|
+
description: "self-heal: collapse duplicate observation rows that bypassed the PK index",
|
|
186
|
+
up: async (tx) => {
|
|
187
|
+
// Some installs accumulated multiple physical rows for the same
|
|
188
|
+
// `id` in `observations` despite `id TEXT PRIMARY KEY` being
|
|
189
|
+
// declared since v1, likely fallout from a prior PGlite corruption
|
|
190
|
+
// event (visible as `memory.db.corrupted-*` directories) that
|
|
191
|
+
// left the unique index out of sync with the heap. Symptom: every
|
|
192
|
+
// `INSERT ... ON CONFLICT (id) DO UPDATE` raised
|
|
193
|
+
// `duplicate key value violates unique constraint "observations_pkey"`,
|
|
194
|
+
// which the runner surfaced as `[system]` errors in the TUI.
|
|
195
|
+
//
|
|
196
|
+
// We can't trust the stale index, so the dedupe stays in the heap:
|
|
197
|
+
// a window function ranks rows per id (freshest `last_used_at`,
|
|
198
|
+
// then `created_at`), and an outer DELETE keyed on `ctid` removes
|
|
199
|
+
// every row that isn't the winner. Disabling index plans for this
|
|
200
|
+
// transaction forces a seq scan on the heap and a TID scan on the
|
|
201
|
+
// delete so the planner can't latch onto the broken index. After
|
|
202
|
+
// the dedupe the heap is consistent and REINDEX can rebuild the
|
|
203
|
+
// unique index from clean data.
|
|
204
|
+
//
|
|
205
|
+
// Forward-only and idempotent: a healthy DB has no dup rows and
|
|
206
|
+
// the DELETE removes nothing.
|
|
207
|
+
await tx.exec(`SET LOCAL enable_indexscan = off`);
|
|
208
|
+
await tx.exec(`SET LOCAL enable_indexonlyscan = off`);
|
|
209
|
+
await tx.exec(`SET LOCAL enable_bitmapscan = off`);
|
|
210
|
+
await tx.exec(`
|
|
211
|
+
DELETE FROM observations
|
|
212
|
+
WHERE ctid IN (
|
|
213
|
+
SELECT ctid FROM (
|
|
214
|
+
SELECT ctid, ROW_NUMBER() OVER (
|
|
215
|
+
PARTITION BY id
|
|
216
|
+
ORDER BY last_used_at DESC, created_at DESC
|
|
217
|
+
) AS rn
|
|
218
|
+
FROM observations
|
|
219
|
+
) ranked
|
|
220
|
+
WHERE rn > 1
|
|
221
|
+
)
|
|
222
|
+
`);
|
|
223
|
+
// After the heap is deduped, rebuild the unique index so it
|
|
224
|
+
// matches. REINDEX covers the production case where the index
|
|
225
|
+
// existed but was stale; ADD PRIMARY KEY covers a recovery state
|
|
226
|
+
// where the unique index was dropped entirely (e.g. by an
|
|
227
|
+
// operator running `DROP CONSTRAINT ... CASCADE` to clear out
|
|
228
|
+
// dependent objects during manual cleanup). Either path fails
|
|
229
|
+
// loudly if duplicates still exist, surfacing a half-healed state
|
|
230
|
+
// instead of masking it.
|
|
231
|
+
const indexExists = await tx.query(`SELECT COUNT(*)::int AS count FROM pg_indexes
|
|
232
|
+
WHERE tablename = 'observations' AND indexname = 'observations_pkey'`);
|
|
233
|
+
if ((indexExists.rows[0]?.count ?? 0) > 0) {
|
|
234
|
+
await tx.exec(`REINDEX INDEX observations_pkey`);
|
|
235
|
+
}
|
|
236
|
+
else {
|
|
237
|
+
await tx.exec(`ALTER TABLE observations ADD PRIMARY KEY (id)`);
|
|
238
|
+
}
|
|
239
|
+
},
|
|
240
|
+
},
|
|
241
|
+
{
|
|
242
|
+
version: 6,
|
|
243
|
+
description: "rebuild embeddings table at 3072 dims for google/gemini-embedding-2",
|
|
244
|
+
up: async (tx) => {
|
|
245
|
+
// The Duet embed endpoint now serves `google/gemini-embedding-2`
|
|
246
|
+
// at 3072 dimensions, replacing the previous text-embedding-3-small
|
|
247
|
+
// path. Every existing 1536-dim vector lives in a different latent
|
|
248
|
+
// space, so keeping them around would mean cosine similarity
|
|
249
|
+
// against new query embeddings is noise. Drop the table and let
|
|
250
|
+
// the backfill worker repopulate it lazily after upgrade.
|
|
251
|
+
//
|
|
252
|
+
// No HNSW index on the new table: pgvector's default
|
|
253
|
+
// `vector_cosine_ops` opclass caps HNSW at 2,000 dimensions, and
|
|
254
|
+
// adding `halfvec(3072)` + a half-precision opclass complicates
|
|
255
|
+
// the schema for a corpus that brute-force-scans in well under
|
|
256
|
+
// 10 ms at the thousands-of-rows scale this database operates at.
|
|
257
|
+
// The existing tsvector GIN index on `observations.content`
|
|
258
|
+
// survives untouched and continues to serve the keyword path.
|
|
259
|
+
await tx.exec(`DROP TABLE IF EXISTS observation_embeddings`);
|
|
260
|
+
await tx.exec(`
|
|
261
|
+
CREATE TABLE observation_embeddings (
|
|
262
|
+
observation_id TEXT PRIMARY KEY REFERENCES observations(id) ON DELETE CASCADE,
|
|
263
|
+
model TEXT NOT NULL,
|
|
264
|
+
vector vector(3072) NOT NULL,
|
|
265
|
+
created_at BIGINT NOT NULL
|
|
266
|
+
)
|
|
267
|
+
`);
|
|
268
|
+
},
|
|
269
|
+
},
|
|
183
270
|
];
|
|
184
271
|
/**
|
|
185
272
|
* Bring the database up to the latest known schema version. Idempotent;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../../src/memory/migrations.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../../src/memory/migrations.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,21 +5,80 @@ import type { MemoryContextCache } from "./store.js";
|
|
|
5
5
|
import { type MemoryDatabase } from "./storage.js";
|
|
6
6
|
import type { Observation, ObservationalMemoryActivityEvent, ObservationalMemorySettings, ObservationalMemorySettingsInput } from "../types/memory.js";
|
|
7
7
|
import { type RawMemoryMessage } from "./observational-prompts.js";
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
8
|
+
/**
|
|
9
|
+
* Default `effectiveContext` when the runner doesn't specify one. 200k is a
|
|
10
|
+
* comfortable mid-range target: well below frontier-model windows so memory
|
|
11
|
+
* compaction kicks in early enough to keep latency and cost predictable,
|
|
12
|
+
* but high enough that long-running sessions retain enough exact transcript
|
|
13
|
+
* for active tool work between compactions.
|
|
14
|
+
*/
|
|
15
|
+
export declare const DEFAULT_EFFECTIVE_CONTEXT = 200000;
|
|
16
|
+
/**
|
|
17
|
+
* Ratios of `effectiveContext` that sum to exactly 100%. These three budgets
|
|
18
|
+
* are the only ones that count against the actor model's per-turn input —
|
|
19
|
+
* `messageTokens` caps the raw-message tail, `observationTokens` caps the
|
|
20
|
+
* local-memory pack rendered into the prefix, and `globalContextTokenBudget`
|
|
21
|
+
* caps the cross-session pack rendered above local. The system prompt and
|
|
22
|
+
* tool-call slack come out of `messageTokens`'s share since the raw tail
|
|
23
|
+
* naturally absorbs whatever's left.
|
|
24
|
+
*/
|
|
25
|
+
export declare const MEMORY_BUDGET_RATIOS: {
|
|
26
|
+
/** Raw-message compaction trigger (per turn). */
|
|
27
|
+
readonly messageTokens: 0.6;
|
|
28
|
+
/** Local-memory pack ceiling between reflection events. */
|
|
29
|
+
readonly observationTokens: 0.325;
|
|
30
|
+
/** Cross-session global pack ceiling. */
|
|
31
|
+
readonly globalContextTokenBudget: 0.075;
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Shared "keep half of the trigger" knob applied to both buffer activations.
|
|
35
|
+
* Each compact/reflect event reclaims roughly half the trigger's worth of
|
|
36
|
+
* space; the next event triggers sooner, trading larger condensation steps
|
|
37
|
+
* for smaller, more frequent ones. Buffer activations don't count toward the
|
|
38
|
+
* actor budget because they're bounded above by their respective triggers,
|
|
39
|
+
* which already do.
|
|
40
|
+
*/
|
|
41
|
+
export declare const BUFFER_RATIO = 0.5;
|
|
42
|
+
/**
|
|
43
|
+
* Token budgets that govern observer-call quality rather than actor-context
|
|
44
|
+
* fit. These never appear in the actor model's request, so they're decoupled
|
|
45
|
+
* from `effectiveContext` and held at fixed values that the observer model
|
|
46
|
+
* handles reliably across providers.
|
|
47
|
+
*/
|
|
48
|
+
export declare const FIXED_OBSERVER_BUDGETS: {
|
|
49
|
+
/**
|
|
50
|
+
* Cap on transcript tokens sent to one observer call. Keeps observer
|
|
51
|
+
* reasoning comfortably below model ceilings while still batching enough
|
|
52
|
+
* history to avoid noisy churn.
|
|
53
|
+
*/
|
|
54
|
+
readonly maxTokensPerBatch: 35000;
|
|
55
|
+
/**
|
|
56
|
+
* Cap on prior-observation tokens included in the observer prompt for
|
|
57
|
+
* dedupe context. Bounded so the observer never receives the whole
|
|
58
|
+
* durable memory database.
|
|
59
|
+
*/
|
|
60
|
+
readonly previousObserverTokens: 4000;
|
|
61
|
+
};
|
|
62
|
+
export interface DerivedMemoryBudgets {
|
|
63
|
+
observation: {
|
|
64
|
+
messageTokens: number;
|
|
65
|
+
maxTokensPerBatch: number;
|
|
66
|
+
bufferActivation: number;
|
|
67
|
+
previousObserverTokens: number;
|
|
17
68
|
};
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
69
|
+
reflection: {
|
|
70
|
+
observationTokens: number;
|
|
71
|
+
bufferActivation: number;
|
|
21
72
|
};
|
|
22
|
-
|
|
73
|
+
globalContextTokenBudget: number;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Compute every numeric token budget the memory pipeline uses from a single
|
|
77
|
+
* `effectiveContext` value. Values are floored to integers and clamped to
|
|
78
|
+
* at least 1 so tiny test-mode contexts still satisfy `buffer < trigger`
|
|
79
|
+
* after rounding.
|
|
80
|
+
*/
|
|
81
|
+
export declare function deriveMemoryBudgets(effectiveContext: number): DerivedMemoryBudgets;
|
|
23
82
|
export interface ObserverResult {
|
|
24
83
|
/** Whether the observer found durable information worth writing to memory. */
|
|
25
84
|
hasMemory: boolean;
|
|
@@ -57,6 +116,11 @@ export declare class ModelByInputTokens {
|
|
|
57
116
|
}
|
|
58
117
|
export interface ObservationalContextTransformOptions {
|
|
59
118
|
memory: MemoryContextCache;
|
|
119
|
+
/**
|
|
120
|
+
* Caller-resolved effective context window (already clamped to the
|
|
121
|
+
* model's hard limit). All numeric memory budgets are derived from this.
|
|
122
|
+
*/
|
|
123
|
+
effectiveContext: number;
|
|
60
124
|
settings?: ObservationalMemorySettingsInput;
|
|
61
125
|
/**
|
|
62
126
|
* Compaction trigger fired when the wire-shaping eviction horizon
|
|
@@ -90,6 +154,11 @@ export interface ObservationalMemoryUpdateOptions {
|
|
|
90
154
|
* session's global layer.
|
|
91
155
|
*/
|
|
92
156
|
sessionId?: string;
|
|
157
|
+
/**
|
|
158
|
+
* Caller-resolved effective context window (already clamped to the
|
|
159
|
+
* model's hard limit). All numeric memory budgets are derived from this.
|
|
160
|
+
*/
|
|
161
|
+
effectiveContext: number;
|
|
93
162
|
settings?: ObservationalMemorySettingsInput;
|
|
94
163
|
actorModel: string;
|
|
95
164
|
messages: AgentMessage[];
|
|
@@ -100,7 +169,21 @@ export interface ObservationalMemoryUpdateResult {
|
|
|
100
169
|
observations: Observation[];
|
|
101
170
|
reflections: Observation[];
|
|
102
171
|
}
|
|
103
|
-
|
|
172
|
+
/**
|
|
173
|
+
* Resolve user-provided non-budget knobs and merge with the budgets derived
|
|
174
|
+
* from `effectiveContext`. Callers must pass `effectiveContext` already
|
|
175
|
+
* clamped to the actor model's hard window when one is known; the function
|
|
176
|
+
* itself only validates that the value is positive.
|
|
177
|
+
*/
|
|
178
|
+
export declare function resolveObservationalMemorySettings(effectiveContext: number, input?: ObservationalMemorySettingsInput): ObservationalMemorySettings;
|
|
179
|
+
/**
|
|
180
|
+
* Sanity-check the derived budgets. The ratio derivation in
|
|
181
|
+
* `deriveMemoryBudgets` already enforces `buffer < trigger` by construction,
|
|
182
|
+
* but tiny `effectiveContext` values (used by tests) can collapse triggers
|
|
183
|
+
* to single-digit token counts where the rounded buffer would tie. Validate
|
|
184
|
+
* at use-time so a misconfigured runner fails loudly rather than silently
|
|
185
|
+
* producing an empty raw-message tail.
|
|
186
|
+
*/
|
|
104
187
|
export declare function validateObservationalMemorySettings(settings: ObservationalMemorySettings): void;
|
|
105
188
|
export declare function createObservationalContextTransform(options: ObservationalContextTransformOptions): (messages: AgentMessage[]) => Promise<AgentMessage[]>;
|
|
106
189
|
export declare function updateObservationalMemory(options: ObservationalMemoryUpdateOptions): Promise<ObservationalMemoryUpdateResult>;
|
|
@@ -115,4 +198,12 @@ export declare function getUnobservedMessageTail(messages: RawMemoryMessage[], o
|
|
|
115
198
|
export declare function agentMessagesToRaw(messages: AgentMessage[]): RawMemoryMessage[];
|
|
116
199
|
export declare function agentMessageToRaw(message: AgentMessage): RawMemoryMessage | undefined;
|
|
117
200
|
export declare function sanitizeObservationLines(observations: string): string;
|
|
201
|
+
/**
|
|
202
|
+
* Heuristic 4-chars-per-token estimator used everywhere the runner needs
|
|
203
|
+
* a budget number without tokenizing the actual provider payload. Exported
|
|
204
|
+
* so surfaces and the runner can attribute the same estimate the memory
|
|
205
|
+
* pipeline does, keeping the segment breakdown on `TurnContextUsageEvent`
|
|
206
|
+
* consistent with the trigger arithmetic in this file.
|
|
207
|
+
*/
|
|
208
|
+
export declare function estimateTokens(text: string): number;
|
|
118
209
|
//# sourceMappingURL=observational.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observational.d.ts","sourceRoot":"","sources":["../../../src/memory/observational.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,KAAK,EAAgB,KAAK,EAAe,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAIrF,OAAO,EAML,KAAK,gBAAgB,EACtB,MAAM,gCAAgC,CAAC;AACxC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAKL,KAAK,cAAc,EACpB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EACV,WAAW,EAEX,gCAAgC,EAChC,2BAA2B,EAC3B,gCAAgC,EACjC,MAAM,oBAAoB,CAAC;AAQ5B,OAAO,EAQL,KAAK,gBAAgB,EACtB,MAAM,4BAA4B,CAAC;AAEpC,eAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"observational.d.ts","sourceRoot":"","sources":["../../../src/memory/observational.ts"],"names":[],"mappings":"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"}
|