@duetso/agent 0.1.201 → 0.2.0
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 +43 -9
- package/dist/package.json +1 -1
- package/dist/src/cli/help.d.ts +1 -0
- package/dist/src/cli/help.d.ts.map +1 -1
- package/dist/src/cli/help.js +73 -26
- package/dist/src/cli/help.js.map +1 -1
- package/dist/src/cli/inline-slash.js +1 -1
- package/dist/src/cli/login.d.ts +2 -3
- package/dist/src/cli/login.d.ts.map +1 -1
- package/dist/src/cli/login.js +17 -32
- package/dist/src/cli/login.js.map +1 -1
- package/dist/src/cli/memory-add.d.ts +8 -1
- package/dist/src/cli/memory-add.d.ts.map +1 -1
- package/dist/src/cli/memory-add.js +49 -53
- package/dist/src/cli/memory-add.js.map +1 -1
- package/dist/src/cli/memory-db.d.ts +23 -0
- package/dist/src/cli/memory-db.d.ts.map +1 -1
- package/dist/src/cli/memory-db.js +48 -1
- package/dist/src/cli/memory-db.js.map +1 -1
- package/dist/src/cli/memory-json.d.ts +67 -0
- package/dist/src/cli/memory-json.d.ts.map +1 -0
- package/dist/src/cli/memory-json.js +28 -0
- package/dist/src/cli/memory-json.js.map +1 -0
- package/dist/src/cli/memory-query.d.ts +20 -1
- package/dist/src/cli/memory-query.d.ts.map +1 -1
- package/dist/src/cli/memory-query.js +45 -20
- package/dist/src/cli/memory-query.js.map +1 -1
- package/dist/src/cli/memory-recall.d.ts +53 -0
- package/dist/src/cli/memory-recall.d.ts.map +1 -0
- package/dist/src/cli/memory-recall.js +217 -0
- package/dist/src/cli/memory-recall.js.map +1 -0
- package/dist/src/cli/memory.d.ts +3 -1
- package/dist/src/cli/memory.d.ts.map +1 -1
- package/dist/src/cli/memory.js +10 -4
- package/dist/src/cli/memory.js.map +1 -1
- package/dist/src/cli/model-gateway.d.ts +3 -3
- package/dist/src/cli/model-gateway.js +3 -3
- package/dist/src/cli/rpc.d.ts +19 -5
- package/dist/src/cli/rpc.d.ts.map +1 -1
- package/dist/src/cli/rpc.js +20 -19
- package/dist/src/cli/rpc.js.map +1 -1
- package/dist/src/cli/run.d.ts +8 -0
- package/dist/src/cli/run.d.ts.map +1 -1
- package/dist/src/cli/run.js +7 -20
- package/dist/src/cli/run.js.map +1 -1
- package/dist/src/cli/send-feedback.d.ts +1 -1
- package/dist/src/cli/send-feedback.js +1 -1
- package/dist/src/cli/shared.d.ts +16 -3
- package/dist/src/cli/shared.d.ts.map +1 -1
- package/dist/src/cli/shared.js +19 -4
- package/dist/src/cli/shared.js.map +1 -1
- package/dist/src/cli/train.d.ts.map +1 -1
- package/dist/src/cli/train.js +40 -23
- package/dist/src/cli/train.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 +1 -0
- package/dist/src/cli.js.map +1 -1
- package/dist/src/lib/duet-api-url.d.ts +9 -0
- package/dist/src/lib/duet-api-url.d.ts.map +1 -0
- package/dist/src/lib/duet-api-url.js +18 -0
- package/dist/src/lib/duet-api-url.js.map +1 -0
- package/dist/src/lib/feedback.d.ts +1 -1
- package/dist/src/lib/feedback.js +4 -4
- package/dist/src/lib/feedback.js.map +1 -1
- package/dist/src/lib/login.d.ts +24 -21
- package/dist/src/lib/login.d.ts.map +1 -1
- package/dist/src/lib/login.js +50 -114
- package/dist/src/lib/login.js.map +1 -1
- package/dist/src/memory/embedding.d.ts +20 -15
- package/dist/src/memory/embedding.d.ts.map +1 -1
- package/dist/src/memory/embedding.js +26 -20
- package/dist/src/memory/embedding.js.map +1 -1
- package/dist/src/memory/recall.d.ts +44 -0
- package/dist/src/memory/recall.d.ts.map +1 -1
- package/dist/src/memory/recall.js +92 -6
- package/dist/src/memory/recall.js.map +1 -1
- package/dist/src/model-resolution/duet-gateway.d.ts +4 -3
- package/dist/src/model-resolution/duet-gateway.d.ts.map +1 -1
- package/dist/src/model-resolution/duet-gateway.js +12 -6
- package/dist/src/model-resolution/duet-gateway.js.map +1 -1
- package/dist/src/tui/app.d.ts +2 -2
- package/dist/src/tui/app.d.ts.map +1 -1
- package/dist/src/tui/app.js +20 -2
- package/dist/src/tui/app.js.map +1 -1
- package/dist/src/tui/paste-controller.d.ts +3 -0
- package/dist/src/tui/paste-controller.d.ts.map +1 -1
- package/dist/src/tui/paste-controller.js +25 -0
- package/dist/src/tui/paste-controller.js.map +1 -1
- package/dist/src/tui/session-subscription.d.ts +10 -0
- package/dist/src/tui/session-subscription.d.ts.map +1 -1
- package/dist/src/tui/session-subscription.js +22 -5
- package/dist/src/tui/session-subscription.js.map +1 -1
- package/dist/src/tui/slash-commands.d.ts +4 -4
- package/dist/src/tui/slash-commands.js +4 -4
- package/dist/src/tui/step-renderer.d.ts +4 -0
- package/dist/src/tui/step-renderer.d.ts.map +1 -1
- package/dist/src/tui/step-renderer.js +41 -37
- package/dist/src/tui/step-renderer.js.map +1 -1
- package/dist/src/tui/tool-formatters.d.ts +2 -2
- package/dist/src/tui/tool-formatters.d.ts.map +1 -1
- package/dist/src/turn-runner/agent-events.d.ts +12 -1
- package/dist/src/turn-runner/agent-events.d.ts.map +1 -1
- package/dist/src/turn-runner/agent-events.js +60 -42
- package/dist/src/turn-runner/agent-events.js.map +1 -1
- package/dist/src/turn-runner/tools.d.ts.map +1 -1
- package/dist/src/turn-runner/tools.js +15 -54
- package/dist/src/turn-runner/tools.js.map +1 -1
- package/dist/src/turn-runner/turn-runner.d.ts +2 -0
- package/dist/src/turn-runner/turn-runner.d.ts.map +1 -1
- package/dist/src/turn-runner/turn-runner.js +4 -2
- package/dist/src/turn-runner/turn-runner.js.map +1 -1
- package/dist/src/types/memory.d.ts +11 -0
- package/dist/src/types/memory.d.ts.map +1 -1
- package/dist/src/types/protocol.d.ts +22 -3
- package/dist/src/types/protocol.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/src/lib/duet-app-url.d.ts +0 -10
- package/dist/src/lib/duet-app-url.d.ts.map +0 -1
- package/dist/src/lib/duet-app-url.js +0 -19
- package/dist/src/lib/duet-app-url.js.map +0 -1
- package/dist/src/lib/sync-skills.d.ts +0 -54
- package/dist/src/lib/sync-skills.d.ts.map +0 -1
- package/dist/src/lib/sync-skills.js +0 -215
- package/dist/src/lib/sync-skills.js.map +0 -1
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import { runMigrations } from "../memory/migrations.js";
|
|
2
|
-
import { MemoryLockTimeoutError } from "../memory/pglite.js";
|
|
3
|
-
import { MemorySession } from "../memory/session.js";
|
|
4
1
|
import { appendObservation } from "../memory/storage.js";
|
|
5
2
|
import { DEFAULT_MEMORY_DB_PATH } from "../session/session-manager.js";
|
|
6
3
|
import { printMemoryAddHelp } from "./help.js";
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
4
|
+
import { toMemoryJson } from "./memory-json.js";
|
|
5
|
+
import { scoreObservation, withMemorySession } from "./memory-db.js";
|
|
6
|
+
import { PRIORITIES, parseEnum, SOURCES } from "./memory-query.js";
|
|
7
|
+
import { fail, resolveUserPath, usageError } from "./shared.js";
|
|
9
8
|
/**
|
|
10
9
|
* Run `duet memory add` — write a single user-added note row into the same
|
|
11
10
|
* `~/.duet/memory.db` the runner reads from, so it surfaces in the next
|
|
@@ -25,44 +24,29 @@ export async function runMemoryAddCommand(args, io = { stdout: process.stdout, s
|
|
|
25
24
|
if (!options)
|
|
26
25
|
return;
|
|
27
26
|
const content = await resolveContent(options.content, io);
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
...(options.
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
try {
|
|
40
|
-
const observation = await appendObservation(session, {
|
|
41
|
-
kind: "note",
|
|
42
|
-
priority: options.priority,
|
|
43
|
-
source: { kind: "user" },
|
|
44
|
-
content,
|
|
45
|
-
tags: options.tags,
|
|
46
|
-
observedDate: new Date().toISOString().slice(0, 10),
|
|
47
|
-
});
|
|
48
|
-
if (!observation) {
|
|
49
|
-
fail(`Could not write memory to ${options.dbPath} (lock contention).`);
|
|
50
|
-
}
|
|
51
|
-
const tagSuffix = observation.tags.length > 0 ? ` [${observation.tags.join(", ")}]` : "";
|
|
52
|
-
io.stdout.write(`Added ${observation.priority}-priority memory ${observation.id} (${observation.observedDate})${tagSuffix}\n`);
|
|
53
|
-
}
|
|
54
|
-
catch (error) {
|
|
55
|
-
if (error instanceof MemoryLockTimeoutError) {
|
|
56
|
-
fail(`Memory database at ${error.dataDir} is still locked by duet pid ${error.holderPid} after ${error.budgetMs / 1000}s. Stop that process (or pass --wait <seconds> to wait longer) and retry.`);
|
|
57
|
-
}
|
|
58
|
-
throw error;
|
|
27
|
+
const observation = await withMemorySession(options.dbPath, (session) => appendObservation(session, {
|
|
28
|
+
kind: "note",
|
|
29
|
+
priority: options.priority,
|
|
30
|
+
source: { kind: options.source },
|
|
31
|
+
content,
|
|
32
|
+
tags: options.tags,
|
|
33
|
+
observedDate: new Date().toISOString().slice(0, 10),
|
|
34
|
+
...(options.sessionId !== undefined ? { sessionId: options.sessionId } : {}),
|
|
35
|
+
}), { waitBudgetMs: options.waitBudgetMs });
|
|
36
|
+
if (!observation) {
|
|
37
|
+
fail(`Could not write memory to ${options.dbPath} (lock contention).`);
|
|
59
38
|
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
39
|
+
if (options.json) {
|
|
40
|
+
// Score with a single `now`; on insert `lastUsedAt == createdAt`, so the
|
|
41
|
+
// pack score reflects a freshly stored row. `relevanceScore` is absent —
|
|
42
|
+
// there is no query to rank the row against on an add.
|
|
43
|
+
const packScore = scoreObservation(observation, Date.now());
|
|
44
|
+
io.stdout.write(`${JSON.stringify(toMemoryJson(observation, { packScore }), null, 2)}\n`);
|
|
45
|
+
return;
|
|
63
46
|
}
|
|
47
|
+
const tagSuffix = observation.tags.length > 0 ? ` [${observation.tags.join(", ")}]` : "";
|
|
48
|
+
io.stdout.write(`Added ${observation.priority}-priority memory ${observation.id} (${observation.observedDate})${tagSuffix}\n`);
|
|
64
49
|
}
|
|
65
|
-
const PRIORITIES = ["high", "medium", "low"];
|
|
66
50
|
/**
|
|
67
51
|
* Parse `duet memory add` flags and positional content. Returns `undefined`
|
|
68
52
|
* when `--help` was handled. Pure (no I/O) so it can be unit-tested; stdin
|
|
@@ -71,6 +55,9 @@ const PRIORITIES = ["high", "medium", "low"];
|
|
|
71
55
|
export function parseMemoryAddArgs(args) {
|
|
72
56
|
let dbPath = DEFAULT_MEMORY_DB_PATH;
|
|
73
57
|
let priority = "medium";
|
|
58
|
+
let source = "user";
|
|
59
|
+
let sessionId;
|
|
60
|
+
let json = false;
|
|
74
61
|
const tags = [];
|
|
75
62
|
let waitBudgetMs;
|
|
76
63
|
const contentParts = [];
|
|
@@ -79,27 +66,33 @@ export function parseMemoryAddArgs(args) {
|
|
|
79
66
|
switch (arg) {
|
|
80
67
|
case "--db":
|
|
81
68
|
if (!args[i + 1] || args[i + 1]?.startsWith("-"))
|
|
82
|
-
|
|
69
|
+
usageError(`Missing value for ${arg}`);
|
|
83
70
|
dbPath = resolveUserPath(args[++i]);
|
|
84
71
|
break;
|
|
85
|
-
case "--priority":
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
72
|
+
case "--priority":
|
|
73
|
+
priority = parseEnum(args[++i], PRIORITIES, arg);
|
|
74
|
+
break;
|
|
75
|
+
case "--source":
|
|
76
|
+
source = parseEnum(args[++i], SOURCES, arg);
|
|
77
|
+
break;
|
|
78
|
+
case "--session":
|
|
79
|
+
if (!args[i + 1] || args[i + 1]?.startsWith("-"))
|
|
80
|
+
usageError(`Missing value for ${arg}`);
|
|
81
|
+
sessionId = args[++i];
|
|
82
|
+
break;
|
|
83
|
+
case "--json":
|
|
84
|
+
json = true;
|
|
91
85
|
break;
|
|
92
|
-
}
|
|
93
86
|
case "--tag":
|
|
94
87
|
if (!args[i + 1] || args[i + 1]?.startsWith("-"))
|
|
95
|
-
|
|
88
|
+
usageError(`Missing value for ${arg}`);
|
|
96
89
|
tags.push(args[++i]);
|
|
97
90
|
break;
|
|
98
91
|
case "--wait": {
|
|
99
92
|
const raw = args[++i];
|
|
100
93
|
const seconds = Number(raw);
|
|
101
94
|
if (!raw || !Number.isFinite(seconds) || seconds < 0) {
|
|
102
|
-
|
|
95
|
+
usageError(`Invalid --wait value: ${raw} (expected non-negative number of seconds)`);
|
|
103
96
|
}
|
|
104
97
|
waitBudgetMs = Math.round(seconds * 1000);
|
|
105
98
|
break;
|
|
@@ -110,7 +103,7 @@ export function parseMemoryAddArgs(args) {
|
|
|
110
103
|
return undefined;
|
|
111
104
|
default:
|
|
112
105
|
if (arg.startsWith("-"))
|
|
113
|
-
|
|
106
|
+
usageError(`Unknown add option: ${arg}`);
|
|
114
107
|
contentParts.push(arg);
|
|
115
108
|
}
|
|
116
109
|
}
|
|
@@ -118,7 +111,10 @@ export function parseMemoryAddArgs(args) {
|
|
|
118
111
|
dbPath,
|
|
119
112
|
content: contentParts.join(" ").trim(),
|
|
120
113
|
priority,
|
|
114
|
+
source,
|
|
121
115
|
tags,
|
|
116
|
+
json,
|
|
117
|
+
...(sessionId !== undefined ? { sessionId } : {}),
|
|
122
118
|
...(waitBudgetMs !== undefined ? { waitBudgetMs } : {}),
|
|
123
119
|
};
|
|
124
120
|
}
|
|
@@ -131,12 +127,12 @@ async function resolveContent(positional, io) {
|
|
|
131
127
|
let content = positional;
|
|
132
128
|
if (content.length === 0) {
|
|
133
129
|
if (io.stdin.isTTY) {
|
|
134
|
-
|
|
130
|
+
usageError("No memory content provided. Pass it as an argument or pipe via stdin.");
|
|
135
131
|
}
|
|
136
132
|
content = (await readStream(io.stdin)).trim();
|
|
137
133
|
}
|
|
138
134
|
if (content.length === 0)
|
|
139
|
-
|
|
135
|
+
usageError("Refusing to add an empty memory.");
|
|
140
136
|
return content;
|
|
141
137
|
}
|
|
142
138
|
async function readStream(stream) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-add.js","sourceRoot":"","sources":["../../../src/cli/memory-add.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"memory-add.js","sourceRoot":"","sources":["../../../src/cli/memory-add.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAEvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAwBhE;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,IAAc,EACd,KAAmB,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE;IAEnE,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACzC,IAAI,CAAC,OAAO;QAAE,OAAO;IAErB,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAE1D,MAAM,WAAW,GAAG,MAAM,iBAAiB,CACzC,OAAO,CAAC,MAAM,EACd,CAAC,OAAO,EAAE,EAAE,CACV,iBAAiB,CAAC,OAAO,EAAE;QACzB,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE;QAChC,OAAO;QACP,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,YAAY,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;QACnD,GAAG,CAAC,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC7E,CAAC,EACJ,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CACvC,CAAC;IACF,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,IAAI,CAAC,6BAA6B,OAAO,CAAC,MAAM,qBAAqB,CAAC,CAAC;IACzE,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,yEAAyE;QACzE,yEAAyE;QACzE,uDAAuD;QACvD,MAAM,SAAS,GAAG,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QAC5D,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAC1F,OAAO;IACT,CAAC;IAED,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACzF,EAAE,CAAC,MAAM,CAAC,KAAK,CACb,SAAS,WAAW,CAAC,QAAQ,oBAAoB,WAAW,CAAC,EAAE,KAAK,WAAW,CAAC,YAAY,IAAI,SAAS,IAAI,CAC9G,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAc;IAC/C,IAAI,MAAM,GAAG,sBAAsB,CAAC;IACpC,IAAI,QAAQ,GAAwB,QAAQ,CAAC;IAC7C,IAAI,MAAM,GAAe,MAAM,CAAC;IAChC,IAAI,SAA6B,CAAC;IAClC,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,IAAI,YAAgC,CAAC;IACrC,MAAM,YAAY,GAAa,EAAE,CAAC;IAElC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;QACrB,QAAQ,GAAG,EAAE,CAAC;YACZ,KAAK,MAAM;gBACT,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC;oBAAE,UAAU,CAAC,qBAAqB,GAAG,EAAE,CAAC,CAAC;gBACzF,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,CAAE,CAAC,CAAC;gBACrC,MAAM;YACR,KAAK,YAAY;gBACf,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;gBACjD,MAAM;YACR,KAAK,UAAU;gBACb,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;gBAC5C,MAAM;YACR,KAAK,WAAW;gBACd,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC;oBAAE,UAAU,CAAC,qBAAqB,GAAG,EAAE,CAAC,CAAC;gBACzF,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,CAAE,CAAC;gBACvB,MAAM;YACR,KAAK,QAAQ;gBACX,IAAI,GAAG,IAAI,CAAC;gBACZ,MAAM;YACR,KAAK,OAAO;gBACV,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC;oBAAE,UAAU,CAAC,qBAAqB,GAAG,EAAE,CAAC,CAAC;gBACzF,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAE,CAAC,CAAC;gBACtB,MAAM;YACR,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBACtB,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC5B,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;oBACrD,UAAU,CAAC,yBAAyB,GAAG,4CAA4C,CAAC,CAAC;gBACvF,CAAC;gBACD,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;gBAC1C,MAAM;YACR,CAAC;YACD,KAAK,QAAQ,CAAC;YACd,KAAK,IAAI;gBACP,kBAAkB,EAAE,CAAC;gBACrB,OAAO,SAAS,CAAC;YACnB;gBACE,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC;oBAAE,UAAU,CAAC,uBAAuB,GAAG,EAAE,CAAC,CAAC;gBAClE,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,OAAO;QACL,MAAM;QACN,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE;QACtC,QAAQ;QACR,MAAM;QACN,IAAI;QACJ,IAAI;QACJ,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjD,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACxD,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,cAAc,CAAC,UAAkB,EAAE,EAAgB;IAChE,IAAI,OAAO,GAAG,UAAU,CAAC;IACzB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACnB,UAAU,CAAC,uEAAuE,CAAC,CAAC;QACtF,CAAC;QACD,OAAO,GAAG,CAAC,MAAM,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAChD,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,UAAU,CAAC,kCAAkC,CAAC,CAAC;IACzE,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,MAA6B;IACrD,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QACjC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAChD,CAAC"}
|
|
@@ -1,11 +1,22 @@
|
|
|
1
|
+
import { MemoryLockTimeoutError } from "../memory/pglite.js";
|
|
2
|
+
import { MemorySession } from "../memory/session.js";
|
|
1
3
|
import type { TrainListEntry, TrainRecord } from "../train/types.js";
|
|
2
4
|
import type { Observation, ObservationSource } from "../types/memory.js";
|
|
5
|
+
/**
|
|
6
|
+
* Report an exhausted memory-DB open lock and exit `75` (the contract's
|
|
7
|
+
* distinguished lock-wait code, distinct from a generic runtime failure).
|
|
8
|
+
* Every memory/train subcommand funnels its {@link MemoryLockTimeoutError}
|
|
9
|
+
* here so the friendly, actionable message and the exit code stay identical.
|
|
10
|
+
*/
|
|
11
|
+
export declare function failMemoryLockTimeout(error: MemoryLockTimeoutError): never;
|
|
3
12
|
/** Rows fetched per page by the ranked, lazily-paginated TUI list. */
|
|
4
13
|
export declare const MEMORY_PAGE_SIZE = 25;
|
|
5
14
|
export interface MemoryQueryFilters {
|
|
6
15
|
kind?: Observation["kind"];
|
|
7
16
|
priority?: Observation["priority"];
|
|
8
17
|
source?: ObservationSource["kind"];
|
|
18
|
+
/** Restrict to rows authored by this session (matches `session_id`). */
|
|
19
|
+
sessionId?: string;
|
|
9
20
|
fromMs?: number;
|
|
10
21
|
toMs?: number;
|
|
11
22
|
}
|
|
@@ -97,4 +108,16 @@ export declare class MemoryDb {
|
|
|
97
108
|
export declare function withMemoryDb<T>(dbPath: string, fn: (db: MemoryDb) => Promise<T>, { waitBudgetMs }?: {
|
|
98
109
|
waitBudgetMs?: number;
|
|
99
110
|
}): Promise<T>;
|
|
111
|
+
/**
|
|
112
|
+
* Run `fn` against a {@link MemorySession} opened on the shared memory
|
|
113
|
+
* database — the entry point for one-shot CLI commands that need the
|
|
114
|
+
* session's refcounted handle and cross-process lock (writes via
|
|
115
|
+
* `appendObservation`, hybrid recall) rather than the raw {@link MemoryDb}
|
|
116
|
+
* query wrapper. Applies migrations on open, installs shutdown handlers, and
|
|
117
|
+
* always disposes; a lock-contention timeout exits `75` via
|
|
118
|
+
* {@link failMemoryLockTimeout} so callers share one error message and code.
|
|
119
|
+
*/
|
|
120
|
+
export declare function withMemorySession<T>(dbPath: string, fn: (session: MemorySession) => Promise<T>, { waitBudgetMs }?: {
|
|
121
|
+
waitBudgetMs?: number;
|
|
122
|
+
}): Promise<T>;
|
|
100
123
|
//# sourceMappingURL=memory-db.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-db.d.ts","sourceRoot":"","sources":["../../../src/cli/memory-db.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"memory-db.d.ts","sourceRoot":"","sources":["../../../src/cli/memory-db.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,10 +2,20 @@ import { observationScore, PRIORITY_WEIGHT } from "../memory/loader.js";
|
|
|
2
2
|
import { runMigrations } from "../memory/migrations.js";
|
|
3
3
|
import { DEFAULT_MANUAL_BIAS, DEFAULT_NOTE_BIAS, DEFAULT_RECENCY_HALF_LIFE_MS, DEFAULT_REFLECTION_BIAS, } from "../memory/observational.js";
|
|
4
4
|
import { DEFAULT_OPEN_LOCK_WAIT_BUDGET_MS, MemoryLockTimeoutError, openPGliteWaitingForLock, } from "../memory/pglite.js";
|
|
5
|
+
import { MemorySession } from "../memory/session.js";
|
|
5
6
|
import { readArchiveManifest, removeArchive } from "../train/archive.js";
|
|
6
7
|
import { isTrainTagged, slugFromTags } from "../train/tags.js";
|
|
7
8
|
import { fail } from "./shared.js";
|
|
8
9
|
import { installShutdownHandlers } from "./shutdown.js";
|
|
10
|
+
/**
|
|
11
|
+
* Report an exhausted memory-DB open lock and exit `75` (the contract's
|
|
12
|
+
* distinguished lock-wait code, distinct from a generic runtime failure).
|
|
13
|
+
* Every memory/train subcommand funnels its {@link MemoryLockTimeoutError}
|
|
14
|
+
* here so the friendly, actionable message and the exit code stay identical.
|
|
15
|
+
*/
|
|
16
|
+
export function failMemoryLockTimeout(error) {
|
|
17
|
+
return fail(`Memory database at ${error.dataDir} is still locked by duet pid ${error.holderPid} after ${error.budgetMs / 1000}s. Stop that process (or pass --wait <seconds> to wait longer) and retry.`, 75);
|
|
18
|
+
}
|
|
9
19
|
/** Rows fetched per page by the ranked, lazily-paginated TUI list. */
|
|
10
20
|
export const MEMORY_PAGE_SIZE = 25;
|
|
11
21
|
/**
|
|
@@ -120,6 +130,8 @@ export class MemoryDb {
|
|
|
120
130
|
bind("priority = $?", filters.priority);
|
|
121
131
|
if (filters.source !== undefined)
|
|
122
132
|
bind("(source_json::json->>'kind') = $?", filters.source);
|
|
133
|
+
if (filters.sessionId !== undefined)
|
|
134
|
+
bind("session_id = $?", filters.sessionId);
|
|
123
135
|
if (filters.fromMs !== undefined)
|
|
124
136
|
bind("created_at >= $?", filters.fromMs);
|
|
125
137
|
if (filters.toMs !== undefined)
|
|
@@ -208,7 +220,7 @@ export async function withMemoryDb(dbPath, fn, { waitBudgetMs } = {}) {
|
|
|
208
220
|
}
|
|
209
221
|
catch (error) {
|
|
210
222
|
if (error instanceof MemoryLockTimeoutError) {
|
|
211
|
-
|
|
223
|
+
failMemoryLockTimeout(error);
|
|
212
224
|
}
|
|
213
225
|
throw error;
|
|
214
226
|
}
|
|
@@ -221,6 +233,41 @@ export async function withMemoryDb(dbPath, fn, { waitBudgetMs } = {}) {
|
|
|
221
233
|
await db.close();
|
|
222
234
|
}
|
|
223
235
|
}
|
|
236
|
+
/**
|
|
237
|
+
* Run `fn` against a {@link MemorySession} opened on the shared memory
|
|
238
|
+
* database — the entry point for one-shot CLI commands that need the
|
|
239
|
+
* session's refcounted handle and cross-process lock (writes via
|
|
240
|
+
* `appendObservation`, hybrid recall) rather than the raw {@link MemoryDb}
|
|
241
|
+
* query wrapper. Applies migrations on open, installs shutdown handlers, and
|
|
242
|
+
* always disposes; a lock-contention timeout exits `75` via
|
|
243
|
+
* {@link failMemoryLockTimeout} so callers share one error message and code.
|
|
244
|
+
*/
|
|
245
|
+
export async function withMemorySession(dbPath, fn, { waitBudgetMs } = {}) {
|
|
246
|
+
const session = new MemorySession({
|
|
247
|
+
path: dbPath,
|
|
248
|
+
openOptions: {
|
|
249
|
+
init: async (db) => {
|
|
250
|
+
await runMigrations(db);
|
|
251
|
+
},
|
|
252
|
+
},
|
|
253
|
+
...(waitBudgetMs !== undefined ? { lockWaitBudgetMs: waitBudgetMs } : {}),
|
|
254
|
+
idleCloseMs: 60_000,
|
|
255
|
+
});
|
|
256
|
+
const removeShutdownHandlers = installShutdownHandlers(() => session.dispose());
|
|
257
|
+
try {
|
|
258
|
+
return await fn(session);
|
|
259
|
+
}
|
|
260
|
+
catch (error) {
|
|
261
|
+
if (error instanceof MemoryLockTimeoutError) {
|
|
262
|
+
failMemoryLockTimeout(error);
|
|
263
|
+
}
|
|
264
|
+
throw error;
|
|
265
|
+
}
|
|
266
|
+
finally {
|
|
267
|
+
removeShutdownHandlers();
|
|
268
|
+
await session.dispose();
|
|
269
|
+
}
|
|
270
|
+
}
|
|
224
271
|
function rowToObservation(row) {
|
|
225
272
|
return {
|
|
226
273
|
id: row.id,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-db.js","sourceRoot":"","sources":["../../../src/cli/memory-db.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,4BAA4B,EAC5B,uBAAuB,GACxB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,gCAAgC,EAChC,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAG/D,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAExD,sEAAsE;AACtE,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"memory-db.js","sourceRoot":"","sources":["../../../src/cli/memory-db.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import type { Observation, ObservationKind, ObservationPriority, ObservationSource } from "../types/memory.js";
|
|
2
|
+
/**
|
|
3
|
+
* Canonical JSON shape for a single memory row, shared by every command that
|
|
4
|
+
* emits an observation (`memory recall`, `memory` query, `memory add`). Kept
|
|
5
|
+
* in one place — see {@link toMemoryJson} — so consumers parse one type
|
|
6
|
+
* everywhere instead of one shape per command.
|
|
7
|
+
*
|
|
8
|
+
* Deviations from the in-memory {@link Observation}:
|
|
9
|
+
* - `createdAt`/`lastUsedAt` are ISO 8601 strings, not millisecond epochs,
|
|
10
|
+
* so wire consumers never have to guess the unit.
|
|
11
|
+
* - `source` is flattened to its `kind` string; the structured
|
|
12
|
+
* `{ kind, name? }` union is a runtime-only detail.
|
|
13
|
+
* - The two ranking scores are named explicitly (`packScore`,
|
|
14
|
+
* `relevanceScore`); there is deliberately no generic `score` field.
|
|
15
|
+
*/
|
|
16
|
+
export interface MemoryJson {
|
|
17
|
+
/** Stable persistence key for the row. */
|
|
18
|
+
id: string;
|
|
19
|
+
/** The memory text. */
|
|
20
|
+
content: string;
|
|
21
|
+
/** Raw observation, reflection, single user note, or bulk-curated manual row. */
|
|
22
|
+
kind: ObservationKind;
|
|
23
|
+
/** Flattened source origin — the `kind` of the structured {@link ObservationSource}. */
|
|
24
|
+
source: ObservationSource["kind"];
|
|
25
|
+
/** Importance signal used by recall and context ranking. */
|
|
26
|
+
priority: ObservationPriority;
|
|
27
|
+
/** When the row was stored, as an ISO 8601 timestamp. */
|
|
28
|
+
createdAt: string;
|
|
29
|
+
/** Most recent turn that used the row, as an ISO 8601 timestamp. */
|
|
30
|
+
lastUsedAt: string;
|
|
31
|
+
/** Calendar date the observation is anchored to. */
|
|
32
|
+
observedDate: string;
|
|
33
|
+
/** Concrete date mentioned by the user/tool when different from `observedDate`. */
|
|
34
|
+
referencedDate?: string;
|
|
35
|
+
/** Original relative date phrase ("tomorrow", "last week") when useful. */
|
|
36
|
+
relativeDate?: string;
|
|
37
|
+
/** 24-hour local time attached to the observation, when available. */
|
|
38
|
+
timeOfDay?: string;
|
|
39
|
+
/**
|
|
40
|
+
* Session that authored the row. Absent on legacy/global rows that predate
|
|
41
|
+
* session tracking; echoed only when the observation actually carries one.
|
|
42
|
+
*/
|
|
43
|
+
sessionId?: string;
|
|
44
|
+
/** Lightweight filtering/grouping labels. */
|
|
45
|
+
tags: string[];
|
|
46
|
+
/**
|
|
47
|
+
* Global-pack ranking score (recency × priority × kind bias). Included only
|
|
48
|
+
* when the caller computed a pack score for this row.
|
|
49
|
+
*/
|
|
50
|
+
packScore?: number;
|
|
51
|
+
/**
|
|
52
|
+
* Query-relevance score (RRF-fused across phrasings). Included only in
|
|
53
|
+
* `memory recall` output; absent — never null — everywhere else.
|
|
54
|
+
*/
|
|
55
|
+
relevanceScore?: number;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Serialize an {@link Observation} into the canonical {@link MemoryJson}
|
|
59
|
+
* shape. Optional ranking scores are attached only when provided, matching
|
|
60
|
+
* the contract that both scores are named explicitly and omitted rather than
|
|
61
|
+
* emitted as null.
|
|
62
|
+
*/
|
|
63
|
+
export declare function toMemoryJson(observation: Observation, opts?: {
|
|
64
|
+
packScore?: number;
|
|
65
|
+
relevanceScore?: number;
|
|
66
|
+
}): MemoryJson;
|
|
67
|
+
//# sourceMappingURL=memory-json.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-json.d.ts","sourceRoot":"","sources":["../../../src/cli/memory-json.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,oBAAoB,CAAC;AAE5B;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,UAAU;IACzB,0CAA0C;IAC1C,EAAE,EAAE,MAAM,CAAC;IACX,uBAAuB;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,iFAAiF;IACjF,IAAI,EAAE,eAAe,CAAC;IACtB,wFAAwF;IACxF,MAAM,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAClC,4DAA4D;IAC5D,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,yDAAyD;IACzD,SAAS,EAAE,MAAM,CAAC;IAClB,oEAAoE;IACpE,UAAU,EAAE,MAAM,CAAC;IACnB,oDAAoD;IACpD,YAAY,EAAE,MAAM,CAAC;IACrB,mFAAmF;IACnF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,2EAA2E;IAC3E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,sEAAsE;IACtE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6CAA6C;IAC7C,IAAI,EAAE,MAAM,EAAE,CAAC;IACf;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,WAAW,EAAE,WAAW,EACxB,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAO,GACzD,UAAU,CAoBZ"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Serialize an {@link Observation} into the canonical {@link MemoryJson}
|
|
3
|
+
* shape. Optional ranking scores are attached only when provided, matching
|
|
4
|
+
* the contract that both scores are named explicitly and omitted rather than
|
|
5
|
+
* emitted as null.
|
|
6
|
+
*/
|
|
7
|
+
export function toMemoryJson(observation, opts = {}) {
|
|
8
|
+
return {
|
|
9
|
+
id: observation.id,
|
|
10
|
+
content: observation.content,
|
|
11
|
+
kind: observation.kind,
|
|
12
|
+
source: observation.source.kind,
|
|
13
|
+
priority: observation.priority,
|
|
14
|
+
createdAt: new Date(observation.createdAt).toISOString(),
|
|
15
|
+
lastUsedAt: new Date(observation.lastUsedAt).toISOString(),
|
|
16
|
+
observedDate: observation.observedDate,
|
|
17
|
+
...(observation.referencedDate !== undefined
|
|
18
|
+
? { referencedDate: observation.referencedDate }
|
|
19
|
+
: {}),
|
|
20
|
+
...(observation.relativeDate !== undefined ? { relativeDate: observation.relativeDate } : {}),
|
|
21
|
+
...(observation.timeOfDay !== undefined ? { timeOfDay: observation.timeOfDay } : {}),
|
|
22
|
+
...(observation.sessionId !== undefined ? { sessionId: observation.sessionId } : {}),
|
|
23
|
+
tags: observation.tags,
|
|
24
|
+
...(opts.packScore !== undefined ? { packScore: opts.packScore } : {}),
|
|
25
|
+
...(opts.relevanceScore !== undefined ? { relevanceScore: opts.relevanceScore } : {}),
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=memory-json.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-json.js","sourceRoot":"","sources":["../../../src/cli/memory-json.ts"],"names":[],"mappings":"AA+DA;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAC1B,WAAwB,EACxB,OAAwD,EAAE;IAE1D,OAAO;QACL,EAAE,EAAE,WAAW,CAAC,EAAE;QAClB,OAAO,EAAE,WAAW,CAAC,OAAO;QAC5B,IAAI,EAAE,WAAW,CAAC,IAAI;QACtB,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,IAAI;QAC/B,QAAQ,EAAE,WAAW,CAAC,QAAQ;QAC9B,SAAS,EAAE,IAAI,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;QACxD,UAAU,EAAE,IAAI,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE;QAC1D,YAAY,EAAE,WAAW,CAAC,YAAY;QACtC,GAAG,CAAC,WAAW,CAAC,cAAc,KAAK,SAAS;YAC1C,CAAC,CAAC,EAAE,cAAc,EAAE,WAAW,CAAC,cAAc,EAAE;YAChD,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,WAAW,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,WAAW,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7F,GAAG,CAAC,WAAW,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,WAAW,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpF,GAAG,CAAC,WAAW,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,WAAW,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpF,IAAI,EAAE,WAAW,CAAC,IAAI;QACtB,GAAG,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtE,GAAG,CAAC,IAAI,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACtF,CAAC;AACJ,CAAC"}
|
|
@@ -3,9 +3,22 @@ import { type MemoryQueryFilters } from "./memory-db.js";
|
|
|
3
3
|
interface MemoryQueryIO {
|
|
4
4
|
stdout: NodeJS.WritableStream;
|
|
5
5
|
}
|
|
6
|
+
/**
|
|
7
|
+
* An observation paired with its global-pack ranking score. `packScore` uses
|
|
8
|
+
* the same name the canonical {@link toMemoryJson} shape emits, so the table
|
|
9
|
+
* renderer and the JSON output read one field instead of drifting.
|
|
10
|
+
*/
|
|
6
11
|
type ScoredObservation = Observation & {
|
|
7
|
-
|
|
12
|
+
packScore: number;
|
|
8
13
|
};
|
|
14
|
+
/**
|
|
15
|
+
* The canonical `--priority` and `--source` value sets, compile-time-checked
|
|
16
|
+
* to enumerate every union member. Exported so sibling memory commands
|
|
17
|
+
* (e.g. `memory add`) validate the same axes against one source of truth
|
|
18
|
+
* instead of redeclaring parallel literal lists that can silently drift.
|
|
19
|
+
*/
|
|
20
|
+
export declare const PRIORITIES: ("high" | "medium" | "low")[];
|
|
21
|
+
export declare const SOURCES: ("user" | "agent" | "system" | "api" | "import")[];
|
|
9
22
|
export interface MemoryQueryOptions {
|
|
10
23
|
dbPath: string;
|
|
11
24
|
json: boolean;
|
|
@@ -18,6 +31,12 @@ export interface MemoryQueryOptions {
|
|
|
18
31
|
*/
|
|
19
32
|
queryMode: boolean;
|
|
20
33
|
}
|
|
34
|
+
/**
|
|
35
|
+
* Validate a flag value against a closed set, exiting `64` (usage error) on a
|
|
36
|
+
* missing or out-of-set value. Shared across memory subcommands so every enum
|
|
37
|
+
* flag reports the same message shape and exit code.
|
|
38
|
+
*/
|
|
39
|
+
export declare function parseEnum<T extends string>(raw: string | undefined, allowed: readonly T[], flag: string): T;
|
|
21
40
|
/**
|
|
22
41
|
* Parse the shared `duet memory` argument set. The same flags drive both the
|
|
23
42
|
* interactive TUI (bare invocation) and the scriptable query (any filter or
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-query.d.ts","sourceRoot":"","sources":["../../../src/cli/memory-query.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAwC,MAAM,oBAAoB,CAAC;AAE5F,OAAO,EAAE,KAAK,kBAAkB,EAAkC,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"memory-query.d.ts","sourceRoot":"","sources":["../../../src/cli/memory-query.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAwC,MAAM,oBAAoB,CAAC;AAE5F,OAAO,EAAE,KAAK,kBAAkB,EAAkC,MAAM,gBAAgB,CAAC;AAIzF,UAAU,aAAa;IACrB,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;CAC/B;AAED;;;;GAIG;AACH,KAAK,iBAAiB,GAAG,WAAW,GAAG;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAe7D;;;;;GAKG;AACH,eAAO,MAAM,UAAU,+BAAmE,CAAC;AAE3F,eAAO,MAAM,OAAO,oDAA6E,CAAC;AAElG,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,kBAAkB,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,SAAS,EAAE,OAAO,CAAC;CACpB;AA4BD;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,EACxC,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,OAAO,EAAE,SAAS,CAAC,EAAE,EACrB,IAAI,EAAE,MAAM,GACX,CAAC,CAMH;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,kBAAkB,GAAG,SAAS,CA2E9E;AAOD,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,iBAAiB,EAAE,GAAG,MAAM,CA4C3E;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,kBAAkB,EAC3B,EAAE,GAAE,aAA0C,GAC7C,OAAO,CAAC,IAAI,CAAC,CAmBf"}
|