@duetso/agent 0.1.198 → 0.1.200
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/package.json +1 -1
- package/dist/src/cli/help.d.ts.map +1 -1
- package/dist/src/cli/help.js +43 -17
- package/dist/src/cli/help.js.map +1 -1
- package/dist/src/cli/memory-db.d.ts +26 -5
- package/dist/src/cli/memory-db.d.ts.map +1 -1
- package/dist/src/cli/memory-db.js +62 -5
- package/dist/src/cli/memory-db.js.map +1 -1
- package/dist/src/cli/memory-query.d.ts +35 -0
- package/dist/src/cli/memory-query.d.ts.map +1 -0
- package/dist/src/cli/memory-query.js +190 -0
- package/dist/src/cli/memory-query.js.map +1 -0
- package/dist/src/cli/memory.d.ts +7 -2
- package/dist/src/cli/memory.d.ts.map +1 -1
- package/dist/src/cli/memory.js +16 -42
- package/dist/src/cli/memory.js.map +1 -1
- package/dist/src/cli/model.d.ts.map +1 -1
- package/dist/src/cli/model.js +19 -22
- package/dist/src/cli/model.js.map +1 -1
- package/dist/src/cli/train.d.ts.map +1 -1
- package/dist/src/cli/train.js +22 -35
- package/dist/src/cli/train.js.map +1 -1
- package/dist/src/turn-runner/prompts.d.ts +12 -0
- package/dist/src/turn-runner/prompts.d.ts.map +1 -1
- package/dist/src/turn-runner/prompts.js +19 -1
- package/dist/src/turn-runner/prompts.js.map +1 -1
- package/dist/src/turn-runner/tools.d.ts +2 -1
- package/dist/src/turn-runner/tools.d.ts.map +1 -1
- package/dist/src/turn-runner/tools.js +7 -1
- package/dist/src/turn-runner/tools.js.map +1 -1
- package/dist/src/turn-runner/turn-runner.d.ts +3 -0
- package/dist/src/turn-runner/turn-runner.d.ts.map +1 -1
- package/dist/src/turn-runner/turn-runner.js +57 -17
- package/dist/src/turn-runner/turn-runner.js.map +1 -1
- package/dist/src/types/state-machine.d.ts +26 -0
- package/dist/src/types/state-machine.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../../src/cli/help.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,eAAO,MAAM,+BAA+B,IAAI,CAAC;AAEjD,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAyFtD;AAED,wBAAgB,cAAc,IAAI,IAAI,CA0BrC;AAED,wBAAgB,YAAY,IAAI,IAAI,CAsBnC;AAED,wBAAgB,eAAe,IAAI,IAAI,CAqBtC;AAED,wBAAgB,eAAe,IAAI,IAAI,
|
|
1
|
+
{"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../../src/cli/help.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,eAAO,MAAM,+BAA+B,IAAI,CAAC;AAEjD,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAyFtD;AAED,wBAAgB,cAAc,IAAI,IAAI,CA0BrC;AAED,wBAAgB,YAAY,IAAI,IAAI,CAsBnC;AAED,wBAAgB,eAAe,IAAI,IAAI,CAqBtC;AAED,wBAAgB,eAAe,IAAI,IAAI,CAuDtC;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAyBzC;AAED,wBAAgB,sBAAsB,IAAI,IAAI,CAuC7C;AAED,wBAAgB,cAAc,IAAI,IAAI,CAsCrC;AAED,wBAAgB,cAAc,IAAI,IAAI,CA+DrC;AAED,wBAAgB,qBAAqB,IAAI,IAAI,CAiB5C;AAED,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAe1D"}
|
package/dist/src/cli/help.js
CHANGED
|
@@ -15,7 +15,7 @@ USAGE
|
|
|
15
15
|
duet login [--no-browser] [--skip-skill-sync]
|
|
16
16
|
duet env [--env-file <path>] [--import [path]|--keys]
|
|
17
17
|
duet skills [--workdir <path>]
|
|
18
|
-
duet memory [--db <path>]
|
|
18
|
+
duet memory [--db <path>] [--json] [filters]
|
|
19
19
|
duet model -m <model> [--type text|image|video] [prompt]
|
|
20
20
|
duet send-feedback [--file <path>] [text...]
|
|
21
21
|
duet upgrade [--manager npm|bun|pnpm|yarn]
|
|
@@ -25,7 +25,7 @@ COMMANDS
|
|
|
25
25
|
login Sign in via browser; saves DUET_API_KEY and syncs default skills (recommended)
|
|
26
26
|
env Manually create or update the shared duet env file with provider API keys
|
|
27
27
|
skills List installed skills + collisions as JSON
|
|
28
|
-
memory
|
|
28
|
+
memory Browse memories in a TUI, or query them with --json/filters (alias: memories)
|
|
29
29
|
model Call a gateway model directly (text/image/video) via the AI SDK
|
|
30
30
|
send-feedback Send free-form markdown feedback to the Duet team
|
|
31
31
|
upgrade Upgrade the global ${packageName} installation
|
|
@@ -170,28 +170,54 @@ OUTPUT
|
|
|
170
170
|
}
|
|
171
171
|
export function printMemoryHelp() {
|
|
172
172
|
console.log(`
|
|
173
|
-
duet memory — Browse, edit, and delete observational memories
|
|
173
|
+
duet memory — Browse, query, edit, and delete observational memories
|
|
174
174
|
|
|
175
175
|
USAGE
|
|
176
176
|
duet memory [--db <path>] [--wait <seconds>]
|
|
177
|
+
duet memory [--json] [--type <kind>] [--priority <level>] [--source <origin>]
|
|
178
|
+
[--from <date>] [--to <date>]
|
|
177
179
|
duet memory reflect [options]
|
|
178
180
|
|
|
179
181
|
ALIASES
|
|
180
182
|
duet memories
|
|
181
183
|
|
|
184
|
+
DESCRIPTION
|
|
185
|
+
Bare \`duet memory\` opens an interactive TUI to browse, edit, and delete
|
|
186
|
+
durable observations. Passing --json or any filter flag instead runs a
|
|
187
|
+
non-TUI, scriptable query: it prints a flat, chronological list (newest
|
|
188
|
+
createdAt first) of the matching observations, each carrying a computed
|
|
189
|
+
\`score\` field matching the runner's global-pack ranking. With --json the
|
|
190
|
+
output is a machine-readable array; otherwise an aligned table is printed.
|
|
191
|
+
|
|
192
|
+
Examples:
|
|
193
|
+
duet memory
|
|
194
|
+
duet memory --json --type reflection --from 2026-06-26
|
|
195
|
+
duet memory --json --from "$(date -u -d '24 hours ago' +%Y-%m-%dT%H:%M:%S)"
|
|
196
|
+
|
|
182
197
|
SUBCOMMANDS
|
|
183
198
|
add Write a single user-added note memory
|
|
184
199
|
(run \`duet memory add --help\` for add-specific options)
|
|
185
200
|
reflect Condense old global observations into reflection rows
|
|
186
201
|
(run \`duet memory reflect --help\` for reflect-specific options)
|
|
187
202
|
|
|
203
|
+
QUERY OPTIONS
|
|
204
|
+
--json Emit a JSON array instead of a table (also enables query mode)
|
|
205
|
+
--type <kind> Filter by kind: observation | reflection | note | manual
|
|
206
|
+
--kind <kind> Alias for --type
|
|
207
|
+
--priority <level> Filter by priority: high | medium | low
|
|
208
|
+
--source <origin> Filter by source: user | agent | system
|
|
209
|
+
--from <date> Inclusive lower bound on createdAt. Accepts
|
|
210
|
+
YYYY-MM-DD (start of day UTC) or YYYY-MM-DDTHH:MM:SS (UTC)
|
|
211
|
+
--to <date> Inclusive upper bound on createdAt. Accepts
|
|
212
|
+
YYYY-MM-DD (end of day UTC) or YYYY-MM-DDTHH:MM:SS (UTC)
|
|
213
|
+
|
|
188
214
|
OPTIONS
|
|
189
215
|
--db <path> Memory database path (default: ~/.duet/memory.db)
|
|
190
216
|
--wait <seconds> Seconds to wait for the cross-process open-lock when a peer
|
|
191
217
|
duet process is holding it (default: 30; 0 fails immediately)
|
|
192
218
|
-h, --help Show this help
|
|
193
219
|
|
|
194
|
-
KEYS
|
|
220
|
+
KEYS (TUI)
|
|
195
221
|
↑ / ↓ Move selection
|
|
196
222
|
e Edit selected memory in $EDITOR
|
|
197
223
|
d Delete selected memory
|
|
@@ -287,20 +313,20 @@ OPTIONS
|
|
|
287
313
|
-o, --out <path> Write output here; image/video auto-name when omitted
|
|
288
314
|
--system <text> System prompt for text/image-language models
|
|
289
315
|
--size <WxH> Image size, e.g. 1024x1024
|
|
290
|
-
--aspect <W:H>
|
|
316
|
+
--aspect <W:H> Aspect ratio, e.g. 16:9
|
|
291
317
|
--n <count> Number of outputs to generate
|
|
292
|
-
--seed <int>
|
|
293
|
-
--duration <seconds>
|
|
294
|
-
--resolution <WxH>
|
|
295
|
-
--fps <int>
|
|
296
|
-
--env-file <path>
|
|
297
|
-
-h, --help
|
|
318
|
+
--seed <int> Generation seed
|
|
319
|
+
--duration <seconds> Video length
|
|
320
|
+
--resolution <WxH> Video resolution, e.g. 1280x720
|
|
321
|
+
--fps <int> Video frames per second
|
|
322
|
+
--env-file <path> Shared env file to load after cwd .env
|
|
323
|
+
-h, --help Show this help
|
|
298
324
|
|
|
299
325
|
EXAMPLES
|
|
300
326
|
duet model -m openai/gpt-5.5 "write a haiku about gateways"
|
|
301
|
-
duet model -m
|
|
327
|
+
duet model -m bfl/flux-pro-1.1 -o art.png "a fox in snow"
|
|
302
328
|
duet model -m google/gemini-2.5-flash-image --type image --image src.png "add a hat"
|
|
303
|
-
duet model -m bytedance/seedance-
|
|
329
|
+
duet model -m bytedance/seedance-2.0 --type video -o clip.mp4 "slow pan over dunes"
|
|
304
330
|
`);
|
|
305
331
|
}
|
|
306
332
|
export function printTrainHelp() {
|
|
@@ -309,10 +335,10 @@ duet train — Ingest a project corpus into one durable memory observation
|
|
|
309
335
|
|
|
310
336
|
USAGE
|
|
311
337
|
duet train <folder> [--slug <name>] [--model <name>] [--db <path>] [--wait <seconds>]
|
|
312
|
-
duet train list [--db <path>] [--json]
|
|
313
|
-
duet train show <slug> [--db <path>] [--json]
|
|
314
|
-
duet train update <slug> --content-file <path> [--db <path>] [--json]
|
|
315
|
-
duet train delete <slug> [--db <path>] [--json]
|
|
338
|
+
duet train list [--db <path>] [--json] [--wait <seconds>]
|
|
339
|
+
duet train show <slug> [--db <path>] [--json] [--wait <seconds>]
|
|
340
|
+
duet train update <slug> --content-file <path> [--db <path>] [--json] [--wait <seconds>]
|
|
341
|
+
duet train delete <slug> [--db <path>] [--json] [--wait <seconds>]
|
|
316
342
|
|
|
317
343
|
DESCRIPTION
|
|
318
344
|
Launches a duet agent with the corpus folder as its working directory.
|
package/dist/src/cli/help.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"help.js","sourceRoot":"","sources":["../../../src/cli/help.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAExE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,CAAC;AAEjD,MAAM,UAAU,YAAY,CAAC,WAAmB;IAC9C,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;gDAqBkC,WAAW;;;;;;;;;;;;;gHAaqD,+BAA+B;;;;;oFAK3D,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgDxG,CAAC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;wEAW0D,qBAAqB;;;;;;;;;;;;;CAa5F,CAAC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;yDAa2C,qBAAqB;;;;;;IAM1E,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;CAChC,CAAC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;CAmBb,CAAC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,OAAO,CAAC,GAAG,CAAC
|
|
1
|
+
{"version":3,"file":"help.js","sourceRoot":"","sources":["../../../src/cli/help.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAExE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,CAAC;AAEjD,MAAM,UAAU,YAAY,CAAC,WAAmB;IAC9C,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;gDAqBkC,WAAW;;;;;;;;;;;;;gHAaqD,+BAA+B;;;;;oFAK3D,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgDxG,CAAC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;wEAW0D,qBAAqB;;;;;;;;;;;;;CAa5F,CAAC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;yDAa2C,qBAAqB;;;;;;IAM1E,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;CAChC,CAAC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;CAmBb,CAAC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqDb,CAAC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;CAuBb,CAAC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqCb,CAAC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoCb,CAAC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6Db,CAAC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;CAeb,CAAC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,WAAmB;IAClD,OAAO,CAAC,GAAG,CAAC;oCACsB,WAAW;;;;;;;;;;;;CAY9C,CAAC,CAAC;AACH,CAAC"}
|
|
@@ -1,13 +1,23 @@
|
|
|
1
1
|
import type { TrainListEntry, TrainRecord } from "../train/types.js";
|
|
2
|
-
import type { Observation } from "../types/memory.js";
|
|
2
|
+
import type { Observation, ObservationSource } from "../types/memory.js";
|
|
3
3
|
/** Rows fetched per page by the ranked, lazily-paginated TUI list. */
|
|
4
4
|
export declare const MEMORY_PAGE_SIZE = 25;
|
|
5
|
+
export interface MemoryQueryFilters {
|
|
6
|
+
kind?: Observation["kind"];
|
|
7
|
+
priority?: Observation["priority"];
|
|
8
|
+
source?: ObservationSource["kind"];
|
|
9
|
+
fromMs?: number;
|
|
10
|
+
toMs?: number;
|
|
11
|
+
}
|
|
5
12
|
/**
|
|
6
13
|
* Absolute global-pack score for one observation under the CLI defaults.
|
|
7
|
-
* Reuses the shared {@link observationScore} formula
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
14
|
+
* Reuses the shared {@link observationScore} formula but layers the manual
|
|
15
|
+
* multiplier on top — `observationScore` only applies `reflectionBias`, so
|
|
16
|
+
* calling it directly would under-report curated/manual rows by the manual
|
|
17
|
+
* multiplier. The runner's `loadGlobalPack` applies `manualBias` to
|
|
18
|
+
* `kind === "manual"` as a separate factor, and the value surfaced here must
|
|
19
|
+
* match that ranking so the TUI ordering and the per-row score number agree
|
|
20
|
+
* with the runtime ranking across every kind, including manual rows.
|
|
11
21
|
*/
|
|
12
22
|
export declare function scoreObservation(observation: Observation, now?: number): number;
|
|
13
23
|
/**
|
|
@@ -51,6 +61,8 @@ export declare class MemoryDb {
|
|
|
51
61
|
offset: number;
|
|
52
62
|
now?: number;
|
|
53
63
|
}): Promise<Observation[]>;
|
|
64
|
+
/** Query observations newest-first with the optional `duet memory` query filters. */
|
|
65
|
+
queryObservations(filters?: MemoryQueryFilters): Promise<Observation[]>;
|
|
54
66
|
/**
|
|
55
67
|
* Every `duet train` row (those tagged `train`), newest-first, joined to its
|
|
56
68
|
* archive manifest for headline/model/provenance. Backs `duet train list`.
|
|
@@ -76,4 +88,13 @@ export declare class MemoryDb {
|
|
|
76
88
|
delete(id: string): Promise<void>;
|
|
77
89
|
close(): Promise<void>;
|
|
78
90
|
}
|
|
91
|
+
/**
|
|
92
|
+
* Open the memory database for a one-shot CLI subcommand, run `fn`, and always
|
|
93
|
+
* close it. Cross-process lock contention surfaces as the same friendly,
|
|
94
|
+
* actionable message every memory/train subcommand uses rather than a raw
|
|
95
|
+
* error. Shared by `duet train` management commands and `duet memory` queries.
|
|
96
|
+
*/
|
|
97
|
+
export declare function withMemoryDb<T>(dbPath: string, fn: (db: MemoryDb) => Promise<T>, { waitBudgetMs }?: {
|
|
98
|
+
waitBudgetMs?: number;
|
|
99
|
+
}): Promise<T>;
|
|
79
100
|
//# 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":"AAgBA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAIzE,sEAAsE;AACtE,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAEnC,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC3B,QAAQ,CAAC,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC;IACnC,MAAM,CAAC,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,WAAW,EAAE,GAAG,GAAE,MAAmB,GAAG,MAAM,CAO3F;AAED;;;;GAIG;AACH,qBAAa,QAAQ;IACC,OAAO,CAAC,QAAQ,CAAC,EAAE;IAAvC,OAAO;IAEP;;;;;;;;;OASG;WACU,IAAI,CACf,IAAI,EAAE,MAAM,EACZ,EAAE,YAA+C,EAAE,GAAE;QAAE,YAAY,CAAC,EAAE,MAAM,CAAA;KAAO,GAClF,OAAO,CAAC,QAAQ,CAAC;IAiBpB,yDAAyD;IACnD,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IAO9B;;;;;;;;;;;;OAYG;IACG,UAAU,CAAC,EACf,KAAK,EACL,MAAM,EACN,GAAgB,GACjB,EAAE;QACD,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAkC1B,qFAAqF;IAC/E,iBAAiB,CAAC,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAwBjF;;;OAGG;IACG,aAAa,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAOhD;;;;;OAKG;IACG,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;YAO1D,qBAAqB;YAWrB,YAAY;IAe1B,gFAAgF;IAC1E,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/D;;;;;OAKG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKjC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B;AAED;;;;;GAKG;AACH,wBAAsB,YAAY,CAAC,CAAC,EAClC,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,CAAC,EAAE,EAAE,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,EAChC,EAAE,YAAY,EAAE,GAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAA;CAAO,GAC/C,OAAO,CAAC,CAAC,CAAC,CAqBZ"}
|
|
@@ -1,17 +1,22 @@
|
|
|
1
1
|
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
|
-
import { DEFAULT_OPEN_LOCK_WAIT_BUDGET_MS, openPGliteWaitingForLock } from "../memory/pglite.js";
|
|
4
|
+
import { DEFAULT_OPEN_LOCK_WAIT_BUDGET_MS, MemoryLockTimeoutError, openPGliteWaitingForLock, } from "../memory/pglite.js";
|
|
5
5
|
import { readArchiveManifest, removeArchive } from "../train/archive.js";
|
|
6
6
|
import { isTrainTagged, slugFromTags } from "../train/tags.js";
|
|
7
|
+
import { fail } from "./shared.js";
|
|
8
|
+
import { installShutdownHandlers } from "./shutdown.js";
|
|
7
9
|
/** Rows fetched per page by the ranked, lazily-paginated TUI list. */
|
|
8
10
|
export const MEMORY_PAGE_SIZE = 25;
|
|
9
11
|
/**
|
|
10
12
|
* Absolute global-pack score for one observation under the CLI defaults.
|
|
11
|
-
* Reuses the shared {@link observationScore} formula
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
13
|
+
* Reuses the shared {@link observationScore} formula but layers the manual
|
|
14
|
+
* multiplier on top — `observationScore` only applies `reflectionBias`, so
|
|
15
|
+
* calling it directly would under-report curated/manual rows by the manual
|
|
16
|
+
* multiplier. The runner's `loadGlobalPack` applies `manualBias` to
|
|
17
|
+
* `kind === "manual"` as a separate factor, and the value surfaced here must
|
|
18
|
+
* match that ranking so the TUI ordering and the per-row score number agree
|
|
19
|
+
* with the runtime ranking across every kind, including manual rows.
|
|
15
20
|
*/
|
|
16
21
|
export function scoreObservation(observation, now = Date.now()) {
|
|
17
22
|
return observationScore(observation, now, {
|
|
@@ -101,6 +106,32 @@ export class MemoryDb {
|
|
|
101
106
|
]);
|
|
102
107
|
return result.rows.map(rowToObservation);
|
|
103
108
|
}
|
|
109
|
+
/** Query observations newest-first with the optional `duet memory` query filters. */
|
|
110
|
+
async queryObservations(filters = {}) {
|
|
111
|
+
const conditions = [];
|
|
112
|
+
const params = [];
|
|
113
|
+
const bind = (clause, value) => {
|
|
114
|
+
params.push(value);
|
|
115
|
+
conditions.push(clause.replace("$?", `$${params.length}`));
|
|
116
|
+
};
|
|
117
|
+
if (filters.kind !== undefined)
|
|
118
|
+
bind("kind = $?", filters.kind);
|
|
119
|
+
if (filters.priority !== undefined)
|
|
120
|
+
bind("priority = $?", filters.priority);
|
|
121
|
+
if (filters.source !== undefined)
|
|
122
|
+
bind("(source_json::json->>'kind') = $?", filters.source);
|
|
123
|
+
if (filters.fromMs !== undefined)
|
|
124
|
+
bind("created_at >= $?", filters.fromMs);
|
|
125
|
+
if (filters.toMs !== undefined)
|
|
126
|
+
bind("created_at <= $?", filters.toMs);
|
|
127
|
+
const where = conditions.length > 0 ? `WHERE ${conditions.join(" AND ")}` : "";
|
|
128
|
+
const result = await this.db.query(`SELECT id, created_at, last_used_at, session_id, kind, observed_date, referenced_date, relative_date,
|
|
129
|
+
time_of_day, priority, source_json, content, tags_json
|
|
130
|
+
FROM observations
|
|
131
|
+
${where}
|
|
132
|
+
ORDER BY created_at DESC, id ASC`, params);
|
|
133
|
+
return result.rows.map(rowToObservation);
|
|
134
|
+
}
|
|
104
135
|
/**
|
|
105
136
|
* Every `duet train` row (those tagged `train`), newest-first, joined to its
|
|
106
137
|
* archive manifest for headline/model/provenance. Backs `duet train list`.
|
|
@@ -164,6 +195,32 @@ export class MemoryDb {
|
|
|
164
195
|
await this.db.close();
|
|
165
196
|
}
|
|
166
197
|
}
|
|
198
|
+
/**
|
|
199
|
+
* Open the memory database for a one-shot CLI subcommand, run `fn`, and always
|
|
200
|
+
* close it. Cross-process lock contention surfaces as the same friendly,
|
|
201
|
+
* actionable message every memory/train subcommand uses rather than a raw
|
|
202
|
+
* error. Shared by `duet train` management commands and `duet memory` queries.
|
|
203
|
+
*/
|
|
204
|
+
export async function withMemoryDb(dbPath, fn, { waitBudgetMs } = {}) {
|
|
205
|
+
let db;
|
|
206
|
+
try {
|
|
207
|
+
db = await MemoryDb.open(dbPath, { waitBudgetMs });
|
|
208
|
+
}
|
|
209
|
+
catch (error) {
|
|
210
|
+
if (error instanceof MemoryLockTimeoutError) {
|
|
211
|
+
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.`);
|
|
212
|
+
}
|
|
213
|
+
throw error;
|
|
214
|
+
}
|
|
215
|
+
const removeShutdownHandlers = installShutdownHandlers(() => db.close());
|
|
216
|
+
try {
|
|
217
|
+
return await fn(db);
|
|
218
|
+
}
|
|
219
|
+
finally {
|
|
220
|
+
removeShutdownHandlers();
|
|
221
|
+
await db.close();
|
|
222
|
+
}
|
|
223
|
+
}
|
|
167
224
|
function rowToObservation(row) {
|
|
168
225
|
return {
|
|
169
226
|
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,
|
|
1
|
+
{"version":3,"file":"memory-db.js","sourceRoot":"","sources":["../../../src/cli/memory-db.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { Observation } from "../types/memory.js";
|
|
2
|
+
import { type MemoryQueryFilters } from "./memory-db.js";
|
|
3
|
+
interface MemoryQueryIO {
|
|
4
|
+
stdout: NodeJS.WritableStream;
|
|
5
|
+
}
|
|
6
|
+
type ScoredObservation = Observation & {
|
|
7
|
+
score: number;
|
|
8
|
+
};
|
|
9
|
+
export interface MemoryQueryOptions {
|
|
10
|
+
dbPath: string;
|
|
11
|
+
json: boolean;
|
|
12
|
+
filters: MemoryQueryFilters;
|
|
13
|
+
waitBudgetMs?: number;
|
|
14
|
+
/**
|
|
15
|
+
* True when the invocation requested a non-TUI query — i.e. it passed
|
|
16
|
+
* `--json` or any filter flag. Bare `duet memory` (only `--db`/`--wait`)
|
|
17
|
+
* leaves this false and opens the interactive TUI instead.
|
|
18
|
+
*/
|
|
19
|
+
queryMode: boolean;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Parse the shared `duet memory` argument set. The same flags drive both the
|
|
23
|
+
* interactive TUI (bare invocation) and the scriptable query (any filter or
|
|
24
|
+
* `--json`); `queryMode` records which path the caller asked for. Returns
|
|
25
|
+
* `undefined` when `--help` was handled.
|
|
26
|
+
*/
|
|
27
|
+
export declare function parseMemoryArgs(args: string[]): MemoryQueryOptions | undefined;
|
|
28
|
+
export declare function formatMemoryTable(observations: ScoredObservation[]): string;
|
|
29
|
+
/**
|
|
30
|
+
* Run the non-TUI query path of `duet memory`: fetch the filtered rows,
|
|
31
|
+
* compute each row's global-pack score, and print JSON or an aligned table.
|
|
32
|
+
*/
|
|
33
|
+
export declare function runMemoryQuery(options: MemoryQueryOptions, io?: MemoryQueryIO): Promise<void>;
|
|
34
|
+
export {};
|
|
35
|
+
//# sourceMappingURL=memory-query.d.ts.map
|
|
@@ -0,0 +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;AAGzF,UAAU,aAAa;IACrB,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;CAC/B;AAED,KAAK,iBAAiB,GAAG,WAAW,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAmBzD,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;AAwCD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,kBAAkB,GAAG,SAAS,CAoE9E;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,CAgBf"}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import { DEFAULT_MEMORY_DB_PATH } from "../session/session-manager.js";
|
|
2
|
+
import { printMemoryHelp } from "./help.js";
|
|
3
|
+
import { scoreObservation, withMemoryDb } from "./memory-db.js";
|
|
4
|
+
import { fail, resolveUserPath } from "./shared.js";
|
|
5
|
+
/**
|
|
6
|
+
* Build a runtime filter list that must enumerate *every* member of `T`.
|
|
7
|
+
* A bare `satisfies readonly T[]` only checks each element is a valid `T`; it
|
|
8
|
+
* silently tolerates a missing member — that gap is how `note` dropped out of
|
|
9
|
+
* the kind filter and made `--type note` get rejected. This helper fails to
|
|
10
|
+
* compile when the array omits any union member, so adding a new
|
|
11
|
+
* `ObservationKind`/priority/source forces the matching filter to grow with it.
|
|
12
|
+
*/
|
|
13
|
+
function exhaustiveList() {
|
|
14
|
+
return (list) => list;
|
|
15
|
+
}
|
|
16
|
+
const KINDS = exhaustiveList()(["observation", "reflection", "note", "manual"]);
|
|
17
|
+
const PRIORITIES = exhaustiveList()(["high", "medium", "low"]);
|
|
18
|
+
const SOURCES = exhaustiveList()(["user", "agent", "system"]);
|
|
19
|
+
/** Parse UTC date filters; date-only bounds cover the whole day. */
|
|
20
|
+
function parseDateBound(raw, flag, edge) {
|
|
21
|
+
if (/^\d{4}-\d{2}-\d{2}$/.test(raw)) {
|
|
22
|
+
const iso = `${raw}T${edge === "start" ? "00:00:00.000" : "23:59:59.999"}Z`;
|
|
23
|
+
const ms = Date.parse(iso);
|
|
24
|
+
if (Number.isNaN(ms))
|
|
25
|
+
fail(`Invalid ${flag} date: ${raw}`);
|
|
26
|
+
// Reject impossible calendar dates (e.g. 2026-02-31) that JS silently
|
|
27
|
+
// normalizes into a different day rather than returning NaN — otherwise a
|
|
28
|
+
// typo slides the createdAt window and the wrong rows get exported.
|
|
29
|
+
if (new Date(ms).toISOString().slice(0, 10) !== raw) {
|
|
30
|
+
fail(`Invalid ${flag} date: ${raw} is not a real calendar date`);
|
|
31
|
+
}
|
|
32
|
+
return ms;
|
|
33
|
+
}
|
|
34
|
+
if (/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}$/.test(raw)) {
|
|
35
|
+
const ms = Date.parse(`${raw}Z`);
|
|
36
|
+
if (Number.isNaN(ms))
|
|
37
|
+
fail(`Invalid ${flag} datetime: ${raw}`);
|
|
38
|
+
// Same round-trip guard for the datetime form (e.g. 2026-02-31T00:00:00).
|
|
39
|
+
if (new Date(ms).toISOString().slice(0, 19) !== raw) {
|
|
40
|
+
fail(`Invalid ${flag} datetime: ${raw} is not a real calendar datetime`);
|
|
41
|
+
}
|
|
42
|
+
return ms;
|
|
43
|
+
}
|
|
44
|
+
fail(`Invalid ${flag} value: ${raw} (expected YYYY-MM-DD or YYYY-MM-DDTHH:MM:SS)`);
|
|
45
|
+
}
|
|
46
|
+
function parseEnum(raw, allowed, flag) {
|
|
47
|
+
if (!raw || raw.startsWith("-"))
|
|
48
|
+
fail(`Missing value for ${flag}`);
|
|
49
|
+
if (!allowed.includes(raw)) {
|
|
50
|
+
fail(`Invalid ${flag} value: ${raw} (expected one of ${allowed.join(", ")})`);
|
|
51
|
+
}
|
|
52
|
+
return raw;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Parse the shared `duet memory` argument set. The same flags drive both the
|
|
56
|
+
* interactive TUI (bare invocation) and the scriptable query (any filter or
|
|
57
|
+
* `--json`); `queryMode` records which path the caller asked for. Returns
|
|
58
|
+
* `undefined` when `--help` was handled.
|
|
59
|
+
*/
|
|
60
|
+
export function parseMemoryArgs(args) {
|
|
61
|
+
let dbPath = DEFAULT_MEMORY_DB_PATH;
|
|
62
|
+
let json = false;
|
|
63
|
+
let waitBudgetMs;
|
|
64
|
+
let hasFilter = false;
|
|
65
|
+
const filters = {};
|
|
66
|
+
for (let i = 0; i < args.length; i++) {
|
|
67
|
+
const arg = args[i];
|
|
68
|
+
switch (arg) {
|
|
69
|
+
case "--db":
|
|
70
|
+
if (!args[i + 1] || args[i + 1]?.startsWith("-"))
|
|
71
|
+
fail(`Missing value for ${arg}`);
|
|
72
|
+
dbPath = resolveUserPath(args[++i]);
|
|
73
|
+
break;
|
|
74
|
+
// `--type` and `--kind` are aliases for the same `Observation.kind` axis.
|
|
75
|
+
case "--type":
|
|
76
|
+
case "--kind":
|
|
77
|
+
filters.kind = parseEnum(args[++i], KINDS, arg);
|
|
78
|
+
hasFilter = true;
|
|
79
|
+
break;
|
|
80
|
+
case "--priority":
|
|
81
|
+
filters.priority = parseEnum(args[++i], PRIORITIES, arg);
|
|
82
|
+
hasFilter = true;
|
|
83
|
+
break;
|
|
84
|
+
case "--source":
|
|
85
|
+
filters.source = parseEnum(args[++i], SOURCES, arg);
|
|
86
|
+
hasFilter = true;
|
|
87
|
+
break;
|
|
88
|
+
case "--from": {
|
|
89
|
+
const raw = args[++i];
|
|
90
|
+
if (!raw || raw.startsWith("-"))
|
|
91
|
+
fail(`Missing value for ${arg}`);
|
|
92
|
+
filters.fromMs = parseDateBound(raw, arg, "start");
|
|
93
|
+
hasFilter = true;
|
|
94
|
+
break;
|
|
95
|
+
}
|
|
96
|
+
case "--to": {
|
|
97
|
+
const raw = args[++i];
|
|
98
|
+
if (!raw || raw.startsWith("-"))
|
|
99
|
+
fail(`Missing value for ${arg}`);
|
|
100
|
+
filters.toMs = parseDateBound(raw, arg, "end");
|
|
101
|
+
hasFilter = true;
|
|
102
|
+
break;
|
|
103
|
+
}
|
|
104
|
+
case "--json":
|
|
105
|
+
json = true;
|
|
106
|
+
break;
|
|
107
|
+
case "--wait": {
|
|
108
|
+
const raw = args[++i];
|
|
109
|
+
const seconds = Number(raw);
|
|
110
|
+
if (!Number.isFinite(seconds) || seconds < 0) {
|
|
111
|
+
fail(`Invalid --wait value: ${raw} (expected non-negative number of seconds)`);
|
|
112
|
+
}
|
|
113
|
+
waitBudgetMs = seconds * 1000;
|
|
114
|
+
break;
|
|
115
|
+
}
|
|
116
|
+
case "--help":
|
|
117
|
+
case "-h":
|
|
118
|
+
printMemoryHelp();
|
|
119
|
+
return undefined;
|
|
120
|
+
default:
|
|
121
|
+
fail(`Unknown memory option: ${arg}`);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
if (filters.fromMs !== undefined && filters.toMs !== undefined && filters.fromMs > filters.toMs) {
|
|
125
|
+
fail("--from must not be after --to");
|
|
126
|
+
}
|
|
127
|
+
return { dbPath, json, filters, waitBudgetMs, queryMode: json || hasFilter };
|
|
128
|
+
}
|
|
129
|
+
function truncate(value, max) {
|
|
130
|
+
const collapsed = value.replace(/\s+/g, " ");
|
|
131
|
+
return collapsed.length <= max ? collapsed : `${collapsed.slice(0, max - 1)}…`;
|
|
132
|
+
}
|
|
133
|
+
export function formatMemoryTable(observations) {
|
|
134
|
+
if (observations.length === 0) {
|
|
135
|
+
return "No memories matched. Adjust the filters or run `duet memory --help`.";
|
|
136
|
+
}
|
|
137
|
+
const rows = observations.map((o) => ({
|
|
138
|
+
created: new Date(o.createdAt).toISOString().slice(0, 10),
|
|
139
|
+
kind: o.kind,
|
|
140
|
+
priority: o.priority,
|
|
141
|
+
source: o.source.kind,
|
|
142
|
+
score: o.score.toFixed(2),
|
|
143
|
+
content: truncate(o.content, 60),
|
|
144
|
+
id: o.id,
|
|
145
|
+
}));
|
|
146
|
+
const headers = {
|
|
147
|
+
created: "CREATED",
|
|
148
|
+
kind: "KIND",
|
|
149
|
+
priority: "PRIORITY",
|
|
150
|
+
source: "SOURCE",
|
|
151
|
+
score: "SCORE",
|
|
152
|
+
content: "CONTENT",
|
|
153
|
+
id: "MEMORY ID",
|
|
154
|
+
};
|
|
155
|
+
const width = (key, cap) => Math.min(cap, Math.max(headers[key].length, ...rows.map((row) => row[key].length)));
|
|
156
|
+
const w = {
|
|
157
|
+
created: width("created", 10),
|
|
158
|
+
kind: width("kind", 11),
|
|
159
|
+
priority: width("priority", 8),
|
|
160
|
+
source: width("source", 6),
|
|
161
|
+
score: width("score", 8),
|
|
162
|
+
content: width("content", 60),
|
|
163
|
+
id: width("id", 20),
|
|
164
|
+
};
|
|
165
|
+
const line = (cells) => [
|
|
166
|
+
cells.created.padEnd(w.created),
|
|
167
|
+
cells.kind.padEnd(w.kind),
|
|
168
|
+
cells.priority.padEnd(w.priority),
|
|
169
|
+
cells.source.padEnd(w.source),
|
|
170
|
+
cells.score.padStart(w.score),
|
|
171
|
+
truncate(cells.content, w.content).padEnd(w.content),
|
|
172
|
+
cells.id,
|
|
173
|
+
].join(" ");
|
|
174
|
+
return [line(headers), ...rows.map(line)].join("\n");
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Run the non-TUI query path of `duet memory`: fetch the filtered rows,
|
|
178
|
+
* compute each row's global-pack score, and print JSON or an aligned table.
|
|
179
|
+
*/
|
|
180
|
+
export async function runMemoryQuery(options, io = { stdout: process.stdout }) {
|
|
181
|
+
const observations = await withMemoryDb(options.dbPath, (db) => db.queryObservations(options.filters), { waitBudgetMs: options.waitBudgetMs });
|
|
182
|
+
// Score with a single `now` so every row's value is comparable.
|
|
183
|
+
const now = Date.now();
|
|
184
|
+
const scored = observations.map((o) => ({
|
|
185
|
+
...o,
|
|
186
|
+
score: scoreObservation(o, now),
|
|
187
|
+
}));
|
|
188
|
+
io.stdout.write(options.json ? `${JSON.stringify(scored, null, 2)}\n` : `${formatMemoryTable(scored)}\n`);
|
|
189
|
+
}
|
|
190
|
+
//# sourceMappingURL=memory-query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-query.js","sourceRoot":"","sources":["../../../src/cli/memory-query.ts"],"names":[],"mappings":"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"}
|
package/dist/src/cli/memory.d.ts
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Run `duet memory` (alias: `duet memories`)
|
|
3
|
-
*
|
|
2
|
+
* Run `duet memory` (alias: `duet memories`).
|
|
3
|
+
*
|
|
4
|
+
* One entry point for fetching and viewing durable memories: bare `duet
|
|
5
|
+
* memory` opens the interactive TUI for browsing/editing/deleting, while
|
|
6
|
+
* passing `--json` or any filter flag (`--type`/`--kind`/`--priority`/
|
|
7
|
+
* `--source`/`--from`/`--to`) turns the same invocation into a non-TUI,
|
|
8
|
+
* scriptable query. `duet memory reflect` remains a separate subcommand.
|
|
4
9
|
*
|
|
5
10
|
* Defaults to the same `~/.duet/memory.db` the runner writes to so changes
|
|
6
11
|
* propagate to the next session immediately.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../../src/cli/memory.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../../src/cli/memory.ts"],"names":[],"mappings":"AASA;;;;;;;;;;;GAWG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAwCpE"}
|