@duetso/agent 0.1.56 → 0.1.58
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 +2 -2
- package/dist/src/cli/memory-db.d.ts +1 -1
- package/dist/src/cli/memory-db.js +3 -2
- package/dist/src/cli/memory-db.js.map +1 -1
- package/dist/src/memory/context-pack.d.ts +3 -3
- package/dist/src/memory/context-pack.d.ts.map +1 -1
- package/dist/src/memory/context-pack.js +2 -2
- package/dist/src/memory/loader.d.ts +12 -45
- package/dist/src/memory/loader.d.ts.map +1 -1
- package/dist/src/memory/loader.js +61 -77
- package/dist/src/memory/loader.js.map +1 -1
- package/dist/src/memory/migrations.d.ts.map +1 -1
- package/dist/src/memory/migrations.js +28 -0
- package/dist/src/memory/migrations.js.map +1 -1
- package/dist/src/memory/observational-prompts.d.ts.map +1 -1
- package/dist/src/memory/observational-prompts.js +3 -0
- package/dist/src/memory/observational-prompts.js.map +1 -1
- package/dist/src/memory/observational.d.ts +15 -3
- package/dist/src/memory/observational.d.ts.map +1 -1
- package/dist/src/memory/observational.js +117 -40
- package/dist/src/memory/observational.js.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 +48 -27
- package/dist/src/memory/storage.d.ts.map +1 -1
- package/dist/src/memory/storage.js +65 -42
- package/dist/src/memory/storage.js.map +1 -1
- package/dist/src/memory/store.d.ts +20 -21
- package/dist/src/memory/store.d.ts.map +1 -1
- package/dist/src/memory/store.js +15 -99
- package/dist/src/memory/store.js.map +1 -1
- package/dist/src/tui/app.d.ts.map +1 -1
- package/dist/src/tui/app.js +146 -51
- package/dist/src/tui/app.js.map +1 -1
- package/dist/src/tui/clipboard.d.ts +16 -11
- package/dist/src/tui/clipboard.d.ts.map +1 -1
- package/dist/src/tui/clipboard.js +16 -11
- package/dist/src/tui/clipboard.js.map +1 -1
- package/dist/src/tui/theme.d.ts +12 -1
- package/dist/src/tui/theme.d.ts.map +1 -1
- package/dist/src/tui/theme.js +15 -1
- package/dist/src/tui/theme.js.map +1 -1
- package/dist/src/tui/transcript-log.d.ts +1 -1
- package/dist/src/tui/transcript-log.js +1 -1
- package/dist/src/turn-runner/tools.d.ts +1 -1
- package/dist/src/turn-runner/turn-runner.d.ts +2 -2
- package/dist/src/turn-runner/turn-runner.d.ts.map +1 -1
- package/dist/src/turn-runner/turn-runner.js +9 -5
- package/dist/src/turn-runner/turn-runner.js.map +1 -1
- package/dist/src/types/memory.d.ts +20 -36
- package/dist/src/types/memory.d.ts.map +1 -1
- package/package.json +2 -2
package/dist/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@duetso/agent",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.58",
|
|
4
4
|
"description": "An opinionated full-stack agent turn runner with native memories, interrupts, and multi-agent orchestration",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"agent",
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
"format:check": "oxfmt --check --no-error-on-unmatched-pattern",
|
|
49
49
|
"lint": "oxlint src/",
|
|
50
50
|
"prepack": "bun run build",
|
|
51
|
-
"test": "docker run --rm -v \"$PWD:/src:ro\" -w /work -e HOME=/tmp/home -e DUET_TEST_IN_DOCKER=1 oven/bun:1.3.11 sh -lc 'cp -R /src/. /work && bun install --frozen-lockfile && bun test ./test/*.test.ts'",
|
|
51
|
+
"test": "docker run --rm -v \"$PWD:/src:ro\" -w /work -e HOME=/tmp/home -e DUET_TEST_IN_DOCKER=1 oven/bun:1.3.11 sh -lc 'apt-get update -qq && apt-get install -y -qq git >/dev/null && cp -R /src/. /work && bun install --frozen-lockfile && bun test ./test/*.test.ts'",
|
|
52
52
|
"example": "bun examples/basic.ts",
|
|
53
53
|
"example:state-machine": "bun examples/state-machine.ts",
|
|
54
54
|
"example:tui-playground": "bun examples/tui-playground.ts",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Observation } from "../types/memory.js";
|
|
2
2
|
/**
|
|
3
|
-
* Thin read/edit/delete wrapper over the PGlite database
|
|
3
|
+
* Thin read/edit/delete wrapper over the PGlite database the memory pipeline writes
|
|
4
4
|
* to. The `duet memory` command opens the same on-disk file, so changes
|
|
5
5
|
* made here are visible to subsequent runner sessions.
|
|
6
6
|
*/
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { runMigrations } from "../memory/migrations.js";
|
|
2
2
|
import { openPGlite } from "../memory/pglite.js";
|
|
3
3
|
/**
|
|
4
|
-
* Thin read/edit/delete wrapper over the PGlite database
|
|
4
|
+
* Thin read/edit/delete wrapper over the PGlite database the memory pipeline writes
|
|
5
5
|
* to. The `duet memory` command opens the same on-disk file, so changes
|
|
6
6
|
* made here are visible to subsequent runner sessions.
|
|
7
7
|
*/
|
|
@@ -29,7 +29,7 @@ export class MemoryDb {
|
|
|
29
29
|
}
|
|
30
30
|
/** Load all observations ordered most recent first. */
|
|
31
31
|
async list() {
|
|
32
|
-
const result = await this.db.query(`SELECT id, created_at, session_id, kind, observed_date, referenced_date, relative_date,
|
|
32
|
+
const result = await this.db.query(`SELECT id, created_at, last_used_at, session_id, kind, observed_date, referenced_date, relative_date,
|
|
33
33
|
time_of_day, priority, source_json, content, tags_json
|
|
34
34
|
FROM observations
|
|
35
35
|
ORDER BY created_at DESC`);
|
|
@@ -51,6 +51,7 @@ function rowToObservation(row) {
|
|
|
51
51
|
return {
|
|
52
52
|
id: row.id,
|
|
53
53
|
createdAt: row.created_at,
|
|
54
|
+
lastUsedAt: row.last_used_at,
|
|
54
55
|
...(row.session_id !== null ? { sessionId: row.session_id } : {}),
|
|
55
56
|
kind: row.kind,
|
|
56
57
|
observedDate: row.observed_date,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-db.js","sourceRoot":"","sources":["../../../src/cli/memory-db.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAGjD;;;;GAIG;AACH,MAAM,OAAO,QAAQ;IACkB;IAArC,YAAqC,EAAU;QAAV,OAAE,GAAF,EAAE,CAAQ;IAAG,CAAC;IAEnD;;;;OAIG;IACH,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAY;QAC5B,sEAAsE;QACtE,gEAAgE;QAChE,kEAAkE;QAClE,kEAAkE;QAClE,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE;YAChC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;gBACvB,MAAM,aAAa,CAAC,QAAQ,CAAC,CAAC;YAChC,CAAC;SACF,CAAC,CAAC;QACH,OAAO,IAAI,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC1B,CAAC;IAED,uDAAuD;IACvD,KAAK,CAAC,IAAI;QACR,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAChC;;;gCAG0B,CAC3B,CAAC;QACF,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC3C,CAAC;IAED,gFAAgF;IAChF,KAAK,CAAC,aAAa,CAAC,EAAU,EAAE,OAAe;QAC7C,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,oDAAoD,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IAC3F,CAAC;IAED,2DAA2D;IAC3D,KAAK,CAAC,MAAM,CAAC,EAAU;QACrB,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,wCAAwC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACtE,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;CACF;
|
|
1
|
+
{"version":3,"file":"memory-db.js","sourceRoot":"","sources":["../../../src/cli/memory-db.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAGjD;;;;GAIG;AACH,MAAM,OAAO,QAAQ;IACkB;IAArC,YAAqC,EAAU;QAAV,OAAE,GAAF,EAAE,CAAQ;IAAG,CAAC;IAEnD;;;;OAIG;IACH,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAY;QAC5B,sEAAsE;QACtE,gEAAgE;QAChE,kEAAkE;QAClE,kEAAkE;QAClE,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE;YAChC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;gBACvB,MAAM,aAAa,CAAC,QAAQ,CAAC,CAAC;YAChC,CAAC;SACF,CAAC,CAAC;QACH,OAAO,IAAI,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC1B,CAAC;IAED,uDAAuD;IACvD,KAAK,CAAC,IAAI;QACR,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAChC;;;gCAG0B,CAC3B,CAAC;QACF,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC3C,CAAC;IAED,gFAAgF;IAChF,KAAK,CAAC,aAAa,CAAC,EAAU,EAAE,OAAe;QAC7C,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,oDAAoD,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IAC3F,CAAC;IAED,2DAA2D;IAC3D,KAAK,CAAC,MAAM,CAAC,EAAU;QACrB,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,wCAAwC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACtE,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;CACF;AAkBD,SAAS,gBAAgB,CAAC,GAAmB;IAC3C,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,UAAU,EAAE,GAAG,CAAC,YAAY;QAC5B,GAAG,CAAC,GAAG,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,YAAY,EAAE,GAAG,CAAC,aAAa;QAC/B,GAAG,CAAC,GAAG,CAAC,eAAe,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,GAAG,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChF,GAAG,CAAC,GAAG,CAAC,aAAa,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,GAAG,CAAC,GAAG,CAAC,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnE,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAA0B;QAC5D,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAa;KAC5C,CAAC;AACJ,CAAC"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { PGlite } from "@electric-sql/pglite";
|
|
2
2
|
import type { ObservationalMemorySettings } from "../types/memory.js";
|
|
3
|
-
import type {
|
|
3
|
+
import type { MemoryContextCache } from "./store.js";
|
|
4
4
|
/**
|
|
5
5
|
* Compaction trigger: rebuild the frozen memory pack rendered above
|
|
6
|
-
* the message tail, then store it on the runner's
|
|
6
|
+
* the message tail, then store it on the runner's MemoryContextCache.
|
|
7
7
|
*
|
|
8
8
|
* Three events trigger a refresh and exactly three:
|
|
9
9
|
* 1. `loadStoredMemory()` finishes — initial seed.
|
|
@@ -22,7 +22,7 @@ import type { MemoryStore } from "./store.js";
|
|
|
22
22
|
*/
|
|
23
23
|
export declare function rebuildMemoryContextPack(options: {
|
|
24
24
|
db: PGlite | undefined;
|
|
25
|
-
|
|
25
|
+
cache: MemoryContextCache;
|
|
26
26
|
settings: ObservationalMemorySettings;
|
|
27
27
|
sessionId?: string;
|
|
28
28
|
}): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-pack.d.ts","sourceRoot":"","sources":["../../../src/memory/context-pack.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AAEtE,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"context-pack.d.ts","sourceRoot":"","sources":["../../../src/memory/context-pack.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AAEtE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,wBAAwB,CAAC,OAAO,EAAE;IACtD,EAAE,EAAE,MAAM,GAAG,SAAS,CAAC;IACvB,KAAK,EAAE,kBAAkB,CAAC;IAC1B,QAAQ,EAAE,2BAA2B,CAAC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBhB"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { loadGlobalPack, loadLocalPack } from "./loader.js";
|
|
2
2
|
/**
|
|
3
3
|
* Compaction trigger: rebuild the frozen memory pack rendered above
|
|
4
|
-
* the message tail, then store it on the runner's
|
|
4
|
+
* the message tail, then store it on the runner's MemoryContextCache.
|
|
5
5
|
*
|
|
6
6
|
* Three events trigger a refresh and exactly three:
|
|
7
7
|
* 1. `loadStoredMemory()` finishes — initial seed.
|
|
@@ -35,6 +35,6 @@ export async function rebuildMemoryContextPack(options) {
|
|
|
35
35
|
? loadLocalPack(options.db, { sessionId: options.sessionId })
|
|
36
36
|
: Promise.resolve([]),
|
|
37
37
|
]);
|
|
38
|
-
options.
|
|
38
|
+
options.cache.setContextPack({ global: globalPack, local: localPack });
|
|
39
39
|
}
|
|
40
40
|
//# sourceMappingURL=context-pack.js.map
|
|
@@ -1,34 +1,5 @@
|
|
|
1
1
|
import type { PGlite } from "@electric-sql/pglite";
|
|
2
2
|
import type { Observation } from "../types/memory.js";
|
|
3
|
-
export interface ScoreInputs {
|
|
4
|
-
/** Wall-clock time at which scoring is happening. Same value across one ranking pass. */
|
|
5
|
-
now: number;
|
|
6
|
-
/** Half-life for the recency exponential decay. Same units as createdAt (milliseconds). */
|
|
7
|
-
halfLifeMs: number;
|
|
8
|
-
/** Multiplier applied when an observation is a reflection rather than a raw observation. */
|
|
9
|
-
reflectionBias: number;
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* Combined relevance score used to rank the global layer.
|
|
13
|
-
*
|
|
14
|
-
* score = priorityWeight * recencyDecay * kindBias
|
|
15
|
-
*
|
|
16
|
-
* - priorityWeight: 3 / 2 / 1 for high / medium / low.
|
|
17
|
-
* - recencyDecay: `0.5 ^ (ageMs / halfLifeMs)`. Equals 1.0 at age 0,
|
|
18
|
-
* 0.5 at one half-life, ~0.0625 at four half-lives. Smooth and
|
|
19
|
-
* parameterizable; no cliffs.
|
|
20
|
-
* - kindBias: `reflectionBias` for reflections, 1.0 for raw
|
|
21
|
-
* observations. Default 1.3 keeps reflections preferred at matched
|
|
22
|
-
* priority/recency without shutting raw observations out.
|
|
23
|
-
*
|
|
24
|
-
* Examples at the default 7d half-life and 1.3 reflection bias:
|
|
25
|
-
* - high reflection, 0d: 3 * 1.0 * 1.3 = 3.9
|
|
26
|
-
* - high observation, 0d: 3 * 1.0 * 1.0 = 3.0
|
|
27
|
-
* - medium reflection, 0d: 2 * 1.0 * 1.3 = 2.6
|
|
28
|
-
* - high reflection, 7d: 3 * 0.5 * 1.3 = 1.95
|
|
29
|
-
* - low observation, 30d: 1 * 0.0508 * 1.0 = 0.05 (effectively pruned)
|
|
30
|
-
*/
|
|
31
|
-
export declare function score(observation: Observation, inputs: ScoreInputs): number;
|
|
32
3
|
export interface LoadGlobalPackOptions {
|
|
33
4
|
/**
|
|
34
5
|
* Session whose rows are excluded from the global pack. The current
|
|
@@ -41,28 +12,24 @@ export interface LoadGlobalPackOptions {
|
|
|
41
12
|
excludeSessionId?: string;
|
|
42
13
|
/** Maximum tokens of `content` packed into the result. Defaults to 8000. */
|
|
43
14
|
tokenBudget?: number;
|
|
44
|
-
/**
|
|
15
|
+
/** Half-life in milliseconds applied to time since `last_used_at`. */
|
|
45
16
|
recencyHalfLifeMs: number;
|
|
46
|
-
/** Reflection bias multiplier. */
|
|
17
|
+
/** Reflection bias multiplier applied as a `kind = 'reflection'` factor. */
|
|
47
18
|
reflectionBias: number;
|
|
48
|
-
/**
|
|
49
|
-
* Override for `Date.now()`, used by tests so fixture data with
|
|
50
|
-
* fixed `created_at` values produces deterministic scores.
|
|
51
|
-
*/
|
|
52
|
-
now?: number;
|
|
53
19
|
}
|
|
54
20
|
/**
|
|
55
|
-
* Load the highest-
|
|
56
|
-
* up to the token budget. Returns rows ordered by descending
|
|
21
|
+
* Load the highest-ranked rows from every session except the caller's,
|
|
22
|
+
* up to the token budget. Returns rows ordered by descending rank so
|
|
57
23
|
* the renderer can preserve the ranking visually.
|
|
58
24
|
*
|
|
59
|
-
*
|
|
60
|
-
* (
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
*
|
|
64
|
-
*
|
|
65
|
-
*
|
|
25
|
+
* The SQL `ORDER BY` materializes
|
|
26
|
+
* `ln(priority) + ln(kindBias) + last_used_at / h`, which is monotone
|
|
27
|
+
* in the full score, so the database returns rows in the exact order
|
|
28
|
+
* the runtime ranking would. JS then walks the result greedily,
|
|
29
|
+
* skipping rows that would overflow the token budget but continuing
|
|
30
|
+
* past them — a smaller row later in the ranking may still fit, and
|
|
31
|
+
* leaving the budget half-empty just because the highest-ranked row
|
|
32
|
+
* is a long reflection would waste prompt space.
|
|
66
33
|
*/
|
|
67
34
|
export declare function loadGlobalPack(db: PGlite, options: LoadGlobalPackOptions): Promise<Observation[]>;
|
|
68
35
|
export interface LoadLocalPackOptions {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../src/memory/loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAwC,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../src/memory/loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAwC,MAAM,oBAAoB,CAAC;AA6C5F,MAAM,WAAW,qBAAqB;IACpC;;;;;;;OAOG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,4EAA4E;IAC5E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sEAAsE;IACtE,iBAAiB,EAAE,MAAM,CAAC;IAC1B,4EAA4E;IAC5E,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,cAAc,CAClC,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,WAAW,EAAE,CAAC,CAwDxB;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;GAQG;AACH,wBAAsB,aAAa,CACjC,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,WAAW,EAAE,CAAC,CAUxB"}
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* compaction summary; reordering it would lose the time signal.
|
|
12
12
|
*
|
|
13
13
|
* - Global layer: every other session's rows, ranked by
|
|
14
|
-
* `priority *
|
|
14
|
+
* `priority * usageDecay * kindBias`. Reflections rank higher than
|
|
15
15
|
* raw observations through `reflectionBias`. Greedy-fitted to a
|
|
16
16
|
* fixed token budget so the prompt prefix stays bounded regardless
|
|
17
17
|
* of how big the durable memory database has grown.
|
|
@@ -23,6 +23,16 @@
|
|
|
23
23
|
* pack is the most stable prefix (rebuilt only on compaction), local
|
|
24
24
|
* is medium-stability (replaced on each reflection), and the message
|
|
25
25
|
* tail is the only part that grows turn over turn.
|
|
26
|
+
*
|
|
27
|
+
* Ranking is pushed entirely into SQL. The full score
|
|
28
|
+
* `priority * 0.5^((now - last_used_at) / h) * kindBias` factors as
|
|
29
|
+
* `const(now) * priority * 2^(last_used_at / h) * kindBias`; the
|
|
30
|
+
* `const(now)` term is the same for every candidate in one ranking
|
|
31
|
+
* pass and so cannot affect order. Equivalently in log space,
|
|
32
|
+
* `rank = ln(priority) + ln(kindBias) + last_used_at / h`. That is a
|
|
33
|
+
* pure function of columns and config — Postgres does the work, the
|
|
34
|
+
* `idx_obs_kind_priority_lastused` index covers the ORDER BY, and JS
|
|
35
|
+
* only does the final greedy token-budget fit.
|
|
26
36
|
*/
|
|
27
37
|
const PRIORITY_WEIGHT = {
|
|
28
38
|
high: 3,
|
|
@@ -30,94 +40,67 @@ const PRIORITY_WEIGHT = {
|
|
|
30
40
|
low: 1,
|
|
31
41
|
};
|
|
32
42
|
/**
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
* score = priorityWeight * recencyDecay * kindBias
|
|
36
|
-
*
|
|
37
|
-
* - priorityWeight: 3 / 2 / 1 for high / medium / low.
|
|
38
|
-
* - recencyDecay: `0.5 ^ (ageMs / halfLifeMs)`. Equals 1.0 at age 0,
|
|
39
|
-
* 0.5 at one half-life, ~0.0625 at four half-lives. Smooth and
|
|
40
|
-
* parameterizable; no cliffs.
|
|
41
|
-
* - kindBias: `reflectionBias` for reflections, 1.0 for raw
|
|
42
|
-
* observations. Default 1.3 keeps reflections preferred at matched
|
|
43
|
-
* priority/recency without shutting raw observations out.
|
|
44
|
-
*
|
|
45
|
-
* Examples at the default 7d half-life and 1.3 reflection bias:
|
|
46
|
-
* - high reflection, 0d: 3 * 1.0 * 1.3 = 3.9
|
|
47
|
-
* - high observation, 0d: 3 * 1.0 * 1.0 = 3.0
|
|
48
|
-
* - medium reflection, 0d: 2 * 1.0 * 1.3 = 2.6
|
|
49
|
-
* - high reflection, 7d: 3 * 0.5 * 1.3 = 1.95
|
|
50
|
-
* - low observation, 30d: 1 * 0.0508 * 1.0 = 0.05 (effectively pruned)
|
|
51
|
-
*/
|
|
52
|
-
export function score(observation, inputs) {
|
|
53
|
-
const priorityWeight = PRIORITY_WEIGHT[observation.priority];
|
|
54
|
-
const ageMs = Math.max(0, inputs.now - observation.createdAt);
|
|
55
|
-
const recencyDecay = Math.pow(0.5, ageMs / inputs.halfLifeMs);
|
|
56
|
-
const kindBias = observation.kind === "reflection" ? inputs.reflectionBias : 1.0;
|
|
57
|
-
return priorityWeight * recencyDecay * kindBias;
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Load the highest-scoring rows from every session except the caller's,
|
|
61
|
-
* up to the token budget. Returns rows ordered by descending score so
|
|
43
|
+
* Load the highest-ranked rows from every session except the caller's,
|
|
44
|
+
* up to the token budget. Returns rows ordered by descending rank so
|
|
62
45
|
* the renderer can preserve the ranking visually.
|
|
63
46
|
*
|
|
64
|
-
*
|
|
65
|
-
* (
|
|
66
|
-
*
|
|
67
|
-
*
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
*
|
|
47
|
+
* The SQL `ORDER BY` materializes
|
|
48
|
+
* `ln(priority) + ln(kindBias) + last_used_at / h`, which is monotone
|
|
49
|
+
* in the full score, so the database returns rows in the exact order
|
|
50
|
+
* the runtime ranking would. JS then walks the result greedily,
|
|
51
|
+
* skipping rows that would overflow the token budget but continuing
|
|
52
|
+
* past them — a smaller row later in the ranking may still fit, and
|
|
53
|
+
* leaving the budget half-empty just because the highest-ranked row
|
|
54
|
+
* is a long reflection would waste prompt space.
|
|
71
55
|
*/
|
|
72
56
|
export async function loadGlobalPack(db, options) {
|
|
73
57
|
const tokenBudget = options.tokenBudget ?? 8000;
|
|
74
|
-
|
|
75
|
-
//
|
|
76
|
-
//
|
|
77
|
-
//
|
|
78
|
-
|
|
79
|
-
const
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
58
|
+
// Upper bound on how many rows could ever fit: assume each row is
|
|
59
|
+
// at least ~50 tokens of content. Asking the planner for more than
|
|
60
|
+
// this is wasted work; asking for fewer risks the greedy-fit
|
|
61
|
+
// exhausting candidates before the budget closes.
|
|
62
|
+
const candidateLimit = Math.max(50, Math.ceil(tokenBudget / 50));
|
|
63
|
+
const params = [
|
|
64
|
+
PRIORITY_WEIGHT.high,
|
|
65
|
+
PRIORITY_WEIGHT.medium,
|
|
66
|
+
PRIORITY_WEIGHT.low,
|
|
67
|
+
options.reflectionBias,
|
|
68
|
+
options.recencyHalfLifeMs,
|
|
69
|
+
];
|
|
70
|
+
let scopeClause = "";
|
|
71
|
+
if (options.excludeSessionId !== undefined) {
|
|
72
|
+
// NULL session_id rows (legacy, pre-sessionId tracking) are kept
|
|
73
|
+
// in the global pool because they cannot match any current
|
|
74
|
+
// session. Without `IS DISTINCT FROM` Postgres would treat
|
|
75
|
+
// NULL = X as NULL, which filters those legacy rows out of every
|
|
76
|
+
// query.
|
|
77
|
+
scopeClause = `WHERE session_id IS DISTINCT FROM $${params.length + 1}`;
|
|
78
|
+
params.push(options.excludeSessionId);
|
|
87
79
|
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
// Without `IS DISTINCT FROM` Postgres would treat NULL = X as NULL,
|
|
92
|
-
// which filters those legacy rows out of every query.
|
|
93
|
-
result = await db.query(`SELECT id, created_at, session_id, kind, observed_date, referenced_date,
|
|
80
|
+
params.push(candidateLimit);
|
|
81
|
+
const limitParam = params.length;
|
|
82
|
+
const sql = `SELECT id, created_at, last_used_at, session_id, kind, observed_date, referenced_date,
|
|
94
83
|
relative_date, time_of_day, priority, source_json, content, tags_json
|
|
95
84
|
FROM observations
|
|
96
|
-
|
|
97
|
-
ORDER BY
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
const ranked =
|
|
107
|
-
.map((observation) => ({ observation, score: score(observation, scoreInputs) }))
|
|
108
|
-
.sort((a, b) => b.score - a.score);
|
|
85
|
+
${scopeClause}
|
|
86
|
+
ORDER BY
|
|
87
|
+
ln(CASE priority WHEN 'high' THEN $1::float
|
|
88
|
+
WHEN 'medium' THEN $2::float
|
|
89
|
+
ELSE $3::float END)
|
|
90
|
+
+ ln(CASE kind WHEN 'reflection' THEN $4::float ELSE 1.0 END)
|
|
91
|
+
+ last_used_at::float / $5::float
|
|
92
|
+
DESC
|
|
93
|
+
LIMIT $${limitParam}`;
|
|
94
|
+
const result = await db.query(sql, params);
|
|
95
|
+
const ranked = result.rows.map(rowToObservation);
|
|
109
96
|
const packed = [];
|
|
110
97
|
let usedTokens = 0;
|
|
111
|
-
for (const
|
|
112
|
-
const tokens = estimateTokens(
|
|
98
|
+
for (const observation of ranked) {
|
|
99
|
+
const tokens = estimateTokens(observation.content);
|
|
113
100
|
if (usedTokens + tokens > tokenBudget) {
|
|
114
|
-
// Skip oversize rows but keep iterating: a smaller row later in
|
|
115
|
-
// the ranking may still fit, which avoids leaving the budget
|
|
116
|
-
// half-empty just because one high-scoring row was a long
|
|
117
|
-
// reflection.
|
|
118
101
|
continue;
|
|
119
102
|
}
|
|
120
|
-
packed.push(
|
|
103
|
+
packed.push(observation);
|
|
121
104
|
usedTokens += tokens;
|
|
122
105
|
}
|
|
123
106
|
return packed;
|
|
@@ -132,7 +115,7 @@ export async function loadGlobalPack(db, options) {
|
|
|
132
115
|
* back down when it gets too large.
|
|
133
116
|
*/
|
|
134
117
|
export async function loadLocalPack(db, options) {
|
|
135
|
-
const result = await db.query(`SELECT id, created_at, session_id, kind, observed_date, referenced_date,
|
|
118
|
+
const result = await db.query(`SELECT id, created_at, last_used_at, session_id, kind, observed_date, referenced_date,
|
|
136
119
|
relative_date, time_of_day, priority, source_json, content, tags_json
|
|
137
120
|
FROM observations
|
|
138
121
|
WHERE session_id = $1
|
|
@@ -143,6 +126,7 @@ function rowToObservation(row) {
|
|
|
143
126
|
return {
|
|
144
127
|
id: row.id,
|
|
145
128
|
createdAt: row.created_at,
|
|
129
|
+
lastUsedAt: row.last_used_at,
|
|
146
130
|
...(row.session_id !== null ? { sessionId: row.session_id } : {}),
|
|
147
131
|
kind: row.kind,
|
|
148
132
|
observedDate: row.observed_date,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../src/memory/loader.ts"],"names":[],"mappings":"AAGA
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../src/memory/loader.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH,MAAM,eAAe,GAAwC;IAC3D,IAAI,EAAE,CAAC;IACP,MAAM,EAAE,CAAC;IACT,GAAG,EAAE,CAAC;CACP,CAAC;AAoBF;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,EAAU,EACV,OAA8B;IAE9B,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC;IAEhD,kEAAkE;IAClE,mEAAmE;IACnE,6DAA6D;IAC7D,kDAAkD;IAClD,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,CAAC,CAAC;IAEjE,MAAM,MAAM,GAAc;QACxB,eAAe,CAAC,IAAI;QACpB,eAAe,CAAC,MAAM;QACtB,eAAe,CAAC,GAAG;QACnB,OAAO,CAAC,cAAc;QACtB,OAAO,CAAC,iBAAiB;KAC1B,CAAC;IACF,IAAI,WAAW,GAAG,EAAE,CAAC;IACrB,IAAI,OAAO,CAAC,gBAAgB,KAAK,SAAS,EAAE,CAAC;QAC3C,iEAAiE;QACjE,2DAA2D;QAC3D,2DAA2D;QAC3D,iEAAiE;QACjE,SAAS;QACT,WAAW,GAAG,sCAAsC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACxC,CAAC;IACD,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC5B,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC;IAEjC,MAAM,GAAG,GAAG;;;SAGL,WAAW;;;;;;;;gBAQJ,UAAU,EAAE,CAAC;IAE3B,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,KAAK,CAAY,GAAG,EAAE,MAAM,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAEjD,MAAM,MAAM,GAAkB,EAAE,CAAC;IACjC,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,KAAK,MAAM,WAAW,IAAI,MAAM,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,cAAc,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QACnD,IAAI,UAAU,GAAG,MAAM,GAAG,WAAW,EAAE,CAAC;YACtC,SAAS;QACX,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACzB,UAAU,IAAI,MAAM,CAAC;IACvB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAMD;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,EAAU,EACV,OAA6B;IAE7B,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,KAAK,CAC3B;;;;6BAIyB,EACzB,CAAC,OAAO,CAAC,SAAS,CAAC,CACpB,CAAC;IACF,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;AAC3C,CAAC;AAkBD,SAAS,gBAAgB,CAAC,GAAc;IACtC,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,UAAU,EAAE,GAAG,CAAC,YAAY;QAC5B,GAAG,CAAC,GAAG,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,YAAY,EAAE,GAAG,CAAC,aAAa;QAC/B,GAAG,CAAC,GAAG,CAAC,eAAe,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,GAAG,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChF,GAAG,CAAC,GAAG,CAAC,aAAa,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,GAAG,CAAC,GAAG,CAAC,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnE,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAA0B;QAC5D,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAa;KAC5C,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,SAAS,cAAc,CAAC,IAAY;IAClC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACpC,CAAC"}
|
|
@@ -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;AAgND,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"}
|
|
@@ -152,6 +152,34 @@ const MIGRATIONS = [
|
|
|
152
152
|
ON observations USING gin (to_tsvector('english', content))`);
|
|
153
153
|
},
|
|
154
154
|
},
|
|
155
|
+
{
|
|
156
|
+
version: 4,
|
|
157
|
+
description: "add last_used_at column for usage-decay ranking",
|
|
158
|
+
up: async (tx) => {
|
|
159
|
+
// last_used_at drives the global-layer ranking instead of
|
|
160
|
+
// created_at. Bumped at end of turn for every observation the
|
|
161
|
+
// observer reports as having informed the assistant's response,
|
|
162
|
+
// so memories that keep being used keep surfacing.
|
|
163
|
+
//
|
|
164
|
+
// Two-step add: column comes in nullable, backfills to
|
|
165
|
+
// created_at for every existing row (so legacy rows enter the
|
|
166
|
+
// ranking with their original recency), then we tighten to
|
|
167
|
+
// NOT NULL. PGlite doesn't accept column-level defaults that
|
|
168
|
+
// reference other columns, which is why this can't be a single
|
|
169
|
+
// ALTER TABLE.
|
|
170
|
+
await tx.exec(`ALTER TABLE observations ADD COLUMN IF NOT EXISTS last_used_at BIGINT`);
|
|
171
|
+
await tx.exec(`UPDATE observations SET last_used_at = created_at WHERE last_used_at IS NULL`);
|
|
172
|
+
await tx.exec(`ALTER TABLE observations ALTER COLUMN last_used_at SET NOT NULL`);
|
|
173
|
+
// Replace the created_at-keyed ranking index with a
|
|
174
|
+
// last_used_at-keyed one. The loader's ORDER BY now sorts by
|
|
175
|
+
// last_used_at; keeping the old index would be dead weight
|
|
176
|
+
// since no query path consults created_at as the ranking key
|
|
177
|
+
// any more.
|
|
178
|
+
await tx.exec(`DROP INDEX IF EXISTS idx_obs_kind_priority_created`);
|
|
179
|
+
await tx.exec(`CREATE INDEX IF NOT EXISTS idx_obs_kind_priority_lastused
|
|
180
|
+
ON observations(kind, priority, last_used_at DESC)`);
|
|
181
|
+
},
|
|
182
|
+
},
|
|
155
183
|
];
|
|
156
184
|
/**
|
|
157
185
|
* 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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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observational-prompts.d.ts","sourceRoot":"","sources":["../../../src/memory/observational-prompts.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEvE,MAAM,MAAM,gBAAgB,GAAG,KAAK,CAAC,WAAW,GAAG,YAAY,CAAC,CAAC;AAEjE,4FAA4F;AAC5F,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;IAC/C,OAAO,EAAE,gBAAgB,CAAC;IAC1B,+FAA+F;IAC/F,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,eAAO,MAAM,6BAA6B,QAQzC,CAAC;AAEF,eAAO,MAAM,0BAA0B,gGACwD,CAAC;AAEhG,eAAO,MAAM,gCAAgC,QAU5C,CAAC;AAyCF,eAAO,MAAM,mBAAmB,QAsB/B,CAAC;AAEF,wBAAgB,yBAAyB,CAAC,kBAAkB,UAAQ,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"observational-prompts.d.ts","sourceRoot":"","sources":["../../../src/memory/observational-prompts.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEvE,MAAM,MAAM,gBAAgB,GAAG,KAAK,CAAC,WAAW,GAAG,YAAY,CAAC,CAAC;AAEjE,4FAA4F;AAC5F,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;IAC/C,OAAO,EAAE,gBAAgB,CAAC;IAC1B,+FAA+F;IAC/F,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,eAAO,MAAM,6BAA6B,QAQzC,CAAC;AAEF,eAAO,MAAM,0BAA0B,gGACwD,CAAC;AAEhG,eAAO,MAAM,gCAAgC,QAU5C,CAAC;AAyCF,eAAO,MAAM,mBAAmB,QAsB/B,CAAC;AAEF,wBAAgB,yBAAyB,CAAC,kBAAkB,UAAQ,GAAG,MAAM,CA+C5E;AAED,wBAAgB,yBAAyB,CACvC,WAAW,CAAC,EAAE,MAAM,EACpB,kBAAkB,UAAQ,GACzB,MAAM,CA6BR;AAED,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,gBAAgB,EAAE,EAC5B,oBAAoB,EAAE,MAAM,EAC5B,YAAY,EAAE,MAAM,EACpB,KAAK,CAAC,EAAE;IAAE,YAAY,EAAE,MAAM,CAAA;CAAE,EAChC,GAAG,OAAa,GACf,gBAAgB,CA0ClB;AAED,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,GAAG,gBAAgB,CAYxF;AAMD,wBAAgB,0BAA0B,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAcvE;AAED,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,KAAK,CAAC,EAAE;IAAE,YAAY,EAAE,MAAM,CAAA;CAAE,GAC/B,MAAM,CAgBR"}
|
|
@@ -120,6 +120,9 @@ export function buildObserverOutputFormat(includeThreadTitle = false) {
|
|
|
120
120
|
- Secondary: other pending tasks, marked "waiting for user" when appropriate
|
|
121
121
|
- If the agent started doing something without user approval, note that it is off-task
|
|
122
122
|
|
|
123
|
+
usedObservationIds:
|
|
124
|
+
The existing observations block above lists prior cross-session memories with explicit \`[memory id: mem_xxx]\` markers. If the assistant's response in this exchange leaned on one or more of those memories — referenced facts, preferences, prior decisions, or context drawn from them — list the matching ids here. Omit or return [] when no prior memory was actually used. Only cite ids that appear verbatim in the markers above; do not invent ids.
|
|
125
|
+
|
|
123
126
|
suggestedContinuation:
|
|
124
127
|
Hint for the agent's immediate next message. If the assistant needs to respond to the user, say that it should pause for user reply before continuing other tasks.
|
|
125
128
|
${threadTitleSection}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observational-prompts.js","sourceRoot":"","sources":["../../../src/memory/observational-prompts.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAgB5B,MAAM,CAAC,MAAM,6BAA6B,GAAG,MAAM,CAAA;;;;;;;;CAQlD,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GACrC,6FAA6F,CAAC;AAEhG,MAAM,CAAC,MAAM,gCAAgC,GAAG,MAAM,CAAA;;;;;;;;;;CAUrD,CAAC;AAEF,MAAM,gCAAgC,GAAG,MAAM,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqC9C,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAA;;;;;;;;;;;;;;;;;;;;;;CAsBxC,CAAC;AAEF,MAAM,UAAU,yBAAyB,CAAC,kBAAkB,GAAG,KAAK;IAClE,MAAM,kBAAkB,GAAG,kBAAkB;QAC3C,CAAC,CAAC,MAAM,CAAA;;OAEL;QACH,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO,MAAM,CAAA
|
|
1
|
+
{"version":3,"file":"observational-prompts.js","sourceRoot":"","sources":["../../../src/memory/observational-prompts.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type { AgentMessage } from "@earendil-works/pi-agent-core";
|
|
2
2
|
import type { Model, Usage } from "@earendil-works/pi-ai";
|
|
3
3
|
import { type WireGuardHorizon } from "../turn-runner/wire-shaping.js";
|
|
4
|
-
import type {
|
|
4
|
+
import type { MemoryContextCache } from "./store.js";
|
|
5
|
+
import { type MemoryDatabase } from "./storage.js";
|
|
5
6
|
import type { Observation, ObservationalMemoryActivityEvent, ObservationalMemorySettings, ObservationalMemorySettingsInput } from "../types/memory.js";
|
|
6
7
|
import { type RawMemoryMessage } from "./observational-prompts.js";
|
|
7
8
|
export declare const OBSERVATIONAL_MEMORY_DEFAULTS: {
|
|
@@ -24,6 +25,14 @@ export interface ObserverResult {
|
|
|
24
25
|
hasMemory: boolean;
|
|
25
26
|
/** New observation log text extracted from raw messages. */
|
|
26
27
|
observations: string;
|
|
28
|
+
/**
|
|
29
|
+
* Ids of prior memories that the observer reports as having actually
|
|
30
|
+
* informed the assistant's response in this exchange. The runner
|
|
31
|
+
* advances `lastUsedAt` on these rows so reused memories keep
|
|
32
|
+
* climbing in the global ranking even as their original
|
|
33
|
+
* `createdAt` recedes.
|
|
34
|
+
*/
|
|
35
|
+
usedObservationIds?: string[];
|
|
27
36
|
/** Current task state distilled for continuity and optional thread metadata. */
|
|
28
37
|
currentTask?: string;
|
|
29
38
|
/** Hint for the actor's next response after context has been compressed. */
|
|
@@ -47,7 +56,7 @@ export declare class ModelByInputTokens {
|
|
|
47
56
|
getThresholds(): number[];
|
|
48
57
|
}
|
|
49
58
|
export interface ObservationalContextTransformOptions {
|
|
50
|
-
memory:
|
|
59
|
+
memory: MemoryContextCache;
|
|
51
60
|
settings?: ObservationalMemorySettingsInput;
|
|
52
61
|
/**
|
|
53
62
|
* Compaction trigger fired when the wire-shaping eviction horizon
|
|
@@ -70,7 +79,10 @@ export interface ObservationalContextTransformOptions {
|
|
|
70
79
|
horizon: WireGuardHorizon;
|
|
71
80
|
}
|
|
72
81
|
export interface ObservationalMemoryUpdateOptions {
|
|
73
|
-
memory
|
|
82
|
+
/** PGlite database that owns the durable memory rows. */
|
|
83
|
+
db: MemoryDatabase;
|
|
84
|
+
/** Frozen context-pack cache; queried for the global memories the observer can attribute usage against. */
|
|
85
|
+
memory: MemoryContextCache;
|
|
74
86
|
/**
|
|
75
87
|
* Session that owns the runner. Stamped onto every observation and
|
|
76
88
|
* reflection produced by this update so the loader can later split
|
|
@@ -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,
|
|
1
|
+
{"version":3,"file":"observational.d.ts","sourceRoot":"","sources":["../../../src/memory/observational.ts"],"names":[],"mappings":"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"}
|