@duetso/agent 0.1.190 → 0.1.192
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 +27 -0
- package/dist/package.json +2 -2
- 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 +65 -0
- package/dist/src/cli/help.js.map +1 -1
- package/dist/src/cli/memory-db.d.ts +21 -1
- package/dist/src/cli/memory-db.d.ts.map +1 -1
- package/dist/src/cli/memory-db.js +54 -1
- package/dist/src/cli/memory-db.js.map +1 -1
- package/dist/src/cli/memory-reflect.js +1 -1
- package/dist/src/cli/memory-reflect.js.map +1 -1
- package/dist/src/cli/train.d.ts +31 -0
- package/dist/src/cli/train.d.ts.map +1 -0
- package/dist/src/cli/train.js +565 -0
- package/dist/src/cli/train.js.map +1 -0
- package/dist/src/cli.d.ts +1 -0
- package/dist/src/cli.d.ts.map +1 -1
- package/dist/src/cli.js +6 -0
- package/dist/src/cli.js.map +1 -1
- package/dist/src/memory/context-pack.d.ts.map +1 -1
- package/dist/src/memory/context-pack.js +1 -0
- package/dist/src/memory/context-pack.js.map +1 -1
- package/dist/src/memory/loader.d.ts +4 -1
- package/dist/src/memory/loader.d.ts.map +1 -1
- package/dist/src/memory/loader.js +7 -3
- package/dist/src/memory/loader.js.map +1 -1
- package/dist/src/memory/observational.d.ts +3 -0
- package/dist/src/memory/observational.d.ts.map +1 -1
- package/dist/src/memory/observational.js +16 -0
- package/dist/src/memory/observational.js.map +1 -1
- package/dist/src/train/archive.d.ts +26 -0
- package/dist/src/train/archive.d.ts.map +1 -0
- package/dist/src/train/archive.js +98 -0
- package/dist/src/train/archive.js.map +1 -0
- package/dist/src/train/tags.d.ts +17 -0
- package/dist/src/train/tags.d.ts.map +1 -0
- package/dist/src/train/tags.js +24 -0
- package/dist/src/train/tags.js.map +1 -0
- package/dist/src/train/types.d.ts +62 -0
- package/dist/src/train/types.d.ts.map +1 -0
- package/dist/src/train/types.js +2 -0
- package/dist/src/train/types.js.map +1 -0
- package/dist/src/types/memory.d.ts +25 -9
- package/dist/src/types/memory.d.ts.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -353,6 +353,33 @@ The interactive TUI accepts image attachments (PNG, JPEG, GIF, WebP):
|
|
|
353
353
|
|
|
354
354
|
</details>
|
|
355
355
|
|
|
356
|
+
<details>
|
|
357
|
+
<summary><b>Train a folder of docs into durable memory</b></summary>
|
|
358
|
+
|
|
359
|
+
`duet train <folder>` launches a sub-agent inside the folder, lets it read whatever is there with its native tools (markdown, CSVs, PDFs, spreadsheets, screenshots, source — anything the agent can open), and produces two artifacts:
|
|
360
|
+
|
|
361
|
+
- **One high-priority manual (user-curated) row** in `~/.duet/memory.db`, tagged `train` and `train:<slug>`. Fresh `duet` sessions load it into their initial memory pack with a ranking boost (via `manualBias`), and writing it as a `manual` row means `duet memory reflect` never compacts it away.
|
|
362
|
+
- **`~/.duet/train/<memory-id>/`** — a hidden archive: a copy of every source file plus a `manifest.json`. Provenance only; the DB row is the source of truth. Deleting the memory via `duet memory` removes the archive too.
|
|
363
|
+
|
|
364
|
+
```bash
|
|
365
|
+
duet train ./snowflake-notes # writes to ~/.duet/memory.db
|
|
366
|
+
duet train ./snowflake-notes --slug snow # custom slug (default: folder basename)
|
|
367
|
+
duet train ./snowflake-notes --model opus-4.8
|
|
368
|
+
duet train ./snowflake-notes --db /tmp/scratch.db # write to a throwaway DB instead
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
Re-running `train` on the same slug **replaces** the prior row and its archive — there is at most one `train:<slug>` observation at a time.
|
|
372
|
+
|
|
373
|
+
Three things to know:
|
|
374
|
+
|
|
375
|
+
- **The current session won't see the new memory.** Memory loads at session start. Start a fresh `duet` session to test recall.
|
|
376
|
+
- **Synthesis needs an API key.** `DUET_API_KEY` (recommended), or any of the provider keys covered above.
|
|
377
|
+
- **The corpus folder's `.env` is loaded** (so a project folder can supply its own provider credentials). Check folders you didn't author before training them.
|
|
378
|
+
|
|
379
|
+
The CLI also prints the observation content to stdout, so it's pipeable: `duet train ./docs | tee notes.txt`.
|
|
380
|
+
|
|
381
|
+
</details>
|
|
382
|
+
|
|
356
383
|
<details>
|
|
357
384
|
<summary><b>CLI Login</b></summary>
|
|
358
385
|
|
package/dist/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@duetso/agent",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.192",
|
|
4
4
|
"description": "An opinionated full-stack agent turn runner with native memories, interrupts, and multi-agent orchestration",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"agent",
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
"check-types": "tsc --noEmit",
|
|
44
44
|
"cli": "bun src/cli.ts",
|
|
45
45
|
"dev": "tsc --watch",
|
|
46
|
-
"eval": "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 ./evals/*.eval.ts'",
|
|
46
|
+
"eval": "docker run --rm -v \"$PWD:/src:ro\" -w /work -e HOME=/tmp/home -e DUET_TEST_IN_DOCKER=1 -e DUET_API_KEY -e ANTHROPIC_API_KEY -e OPENAI_API_KEY -e EVAL_MODEL -e JUDGE_MODEL -e COVERAGE_THRESHOLD oven/bun:1.3.11 sh -lc 'cp -R /src/. /work && bun install --frozen-lockfile && bun test ./evals/*.eval.ts'",
|
|
47
47
|
"format": "oxfmt --write --no-error-on-unmatched-pattern",
|
|
48
48
|
"format:check": "oxfmt --check --no-error-on-unmatched-pattern",
|
|
49
49
|
"lint": "oxlint src/",
|
package/dist/src/cli/help.d.ts
CHANGED
|
@@ -11,6 +11,7 @@ export declare function printEnvHelp(): void;
|
|
|
11
11
|
export declare function printSkillsHelp(): void;
|
|
12
12
|
export declare function printMemoryHelp(): void;
|
|
13
13
|
export declare function printMemoryReflectHelp(): void;
|
|
14
|
+
export declare function printTrainHelp(): void;
|
|
14
15
|
export declare function printSendFeedbackHelp(): void;
|
|
15
16
|
export declare function printUpgradeHelp(packageName: string): void;
|
|
16
17
|
//# sourceMappingURL=help.d.ts.map
|
|
@@ -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,
|
|
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,CAqFtD;AAED,wBAAgB,cAAc,IAAI,IAAI,CA0BrC;AAED,wBAAgB,YAAY,IAAI,IAAI,CAsBnC;AAED,wBAAgB,eAAe,IAAI,IAAI,CAqBtC;AAED,wBAAgB,eAAe,IAAI,IAAI,CA2BtC;AAED,wBAAgB,sBAAsB,IAAI,IAAI,CAuC7C;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
|
@@ -87,6 +87,7 @@ EXAMPLES
|
|
|
87
87
|
duet login
|
|
88
88
|
duet env
|
|
89
89
|
duet memory
|
|
90
|
+
duet train ./docs/my-project
|
|
90
91
|
duet send-feedback "the TUI flickers when..."
|
|
91
92
|
duet upgrade
|
|
92
93
|
`);
|
|
@@ -231,6 +232,70 @@ OPTIONS
|
|
|
231
232
|
-h, --help Show this help
|
|
232
233
|
`);
|
|
233
234
|
}
|
|
235
|
+
export function printTrainHelp() {
|
|
236
|
+
console.log(`
|
|
237
|
+
duet train — Ingest a project corpus into one durable memory observation
|
|
238
|
+
|
|
239
|
+
USAGE
|
|
240
|
+
duet train <folder> [--slug <name>] [--model <name>] [--db <path>] [--wait <seconds>]
|
|
241
|
+
duet train list [--db <path>] [--json]
|
|
242
|
+
duet train show <slug> [--db <path>] [--json]
|
|
243
|
+
duet train update <slug> --content-file <path> [--db <path>] [--json]
|
|
244
|
+
duet train delete <slug> [--db <path>] [--json]
|
|
245
|
+
|
|
246
|
+
DESCRIPTION
|
|
247
|
+
Launches a duet agent with the corpus folder as its working directory.
|
|
248
|
+
The agent reads the corpus using its native file-reading tools (any
|
|
249
|
+
format the duet agent normally reads — markdown, plain text, CSVs, PDFs,
|
|
250
|
+
spreadsheets, source code) and writes a single handoff file at the
|
|
251
|
+
corpus root:
|
|
252
|
+
|
|
253
|
+
.duet-train.json — structured handoff with headline + observation.
|
|
254
|
+
|
|
255
|
+
'train' then persists the synthesis into ~/.duet/memory.db as a manual
|
|
256
|
+
(user-curated) row (tagged 'train' and 'train:<slug>'), archives the
|
|
257
|
+
corpus under ~/.duet/train/<memory-id>/, removes the handoff file, and
|
|
258
|
+
prints the observation content to stdout so what you see is what landed
|
|
259
|
+
in memory.
|
|
260
|
+
|
|
261
|
+
The management subcommands all key on the user-facing <slug> (resolved
|
|
262
|
+
to the underlying row internally):
|
|
263
|
+
list — every training (one row per slug), joined to its archive
|
|
264
|
+
manifest to show slug, headline, model, file count, date,
|
|
265
|
+
and memory id.
|
|
266
|
+
show — the same metadata plus the full synthesized observation text.
|
|
267
|
+
update — replace just the observation text from --content-file, in
|
|
268
|
+
place; the corpus archive is preserved untouched. Use this to
|
|
269
|
+
hand-correct a memory without re-running synthesis (re-running
|
|
270
|
+
'duet train <folder> --slug <slug>' is the re-synthesis path).
|
|
271
|
+
delete — permanently remove the row and its corpus archive.
|
|
272
|
+
Pass --json to any of them for machine-readable output.
|
|
273
|
+
|
|
274
|
+
Subsequent runs against the same slug replace the prior row in place,
|
|
275
|
+
so the memory pool does not bloat. Writing the row as a manual row
|
|
276
|
+
earns it a ranking boost in the memory pack (via manualBias) and exempts
|
|
277
|
+
it from 'duet memory reflect' compaction; deleting it via 'duet memory'
|
|
278
|
+
also removes its archive. Note: train loads the corpus folder's .env (for provider
|
|
279
|
+
credentials), so check folders you did not author before training.
|
|
280
|
+
|
|
281
|
+
OPTIONS
|
|
282
|
+
--slug <name> Override the corpus slug (default: sanitized folder basename)
|
|
283
|
+
--model <name> Model used by the synthesis sub-agent (default: same resolution as 'duet run')
|
|
284
|
+
--db <path> Memory database path (default: ~/.duet/memory.db)
|
|
285
|
+
--wait <seconds> Seconds to wait for the cross-process open-lock
|
|
286
|
+
(default: 30; 0 fails immediately)
|
|
287
|
+
-h, --help Show this help
|
|
288
|
+
|
|
289
|
+
EXAMPLES
|
|
290
|
+
duet train ./docs/my-project
|
|
291
|
+
duet train ./research --slug acme-research --model sonnet-4.6
|
|
292
|
+
duet train list
|
|
293
|
+
duet train list --json
|
|
294
|
+
duet train show acme-research
|
|
295
|
+
duet train update acme-research --content-file ./edited.md
|
|
296
|
+
duet train delete acme-research
|
|
297
|
+
`);
|
|
298
|
+
}
|
|
234
299
|
export function printSendFeedbackHelp() {
|
|
235
300
|
console.log(`
|
|
236
301
|
duet send-feedback — Send free-form markdown feedback to the Duet team
|
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;;;;;;;;;;;;;;;;;;;gDAmBkC,WAAW;;;;;;;;;;;;;gHAaqD,+BAA+B;;;;;oFAK3D,qBAAqB
|
|
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;;;;;;;;;;;;;;;;;;;gDAmBkC,WAAW;;;;;;;;;;;;;gHAaqD,+BAA+B;;;;;oFAK3D,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8CxG,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;;;;;;;;;;;;;;;;;;;;;;;;;CAyBb,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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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,3 +1,4 @@
|
|
|
1
|
+
import type { TrainListEntry, TrainRecord } from "../train/types.js";
|
|
1
2
|
import type { Observation } from "../types/memory.js";
|
|
2
3
|
/** Rows fetched per page by the ranked, lazily-paginated TUI list. */
|
|
3
4
|
export declare const MEMORY_PAGE_SIZE = 25;
|
|
@@ -50,9 +51,28 @@ export declare class MemoryDb {
|
|
|
50
51
|
offset: number;
|
|
51
52
|
now?: number;
|
|
52
53
|
}): Promise<Observation[]>;
|
|
54
|
+
/**
|
|
55
|
+
* Every `duet train` row (those tagged `train`), newest-first, joined to its
|
|
56
|
+
* archive manifest for headline/model/provenance. Backs `duet train list`.
|
|
57
|
+
*/
|
|
58
|
+
listTrainings(): Promise<TrainListEntry[]>;
|
|
59
|
+
/**
|
|
60
|
+
* Resolve a slug to its single training row plus the synthesized content,
|
|
61
|
+
* or `undefined` when no row carries `train:<slug>`. Backs `duet train
|
|
62
|
+
* show`, `update`, and `delete`, which all key on the user-facing slug
|
|
63
|
+
* rather than the internal observation id.
|
|
64
|
+
*/
|
|
65
|
+
findTrainingBySlug(slug: string): Promise<TrainRecord | undefined>;
|
|
66
|
+
private readTrainObservations;
|
|
67
|
+
private toTrainEntry;
|
|
53
68
|
/** Replace just the `content` of an observation, preserving everything else. */
|
|
54
69
|
updateContent(id: string, content: string): Promise<void>;
|
|
55
|
-
/**
|
|
70
|
+
/**
|
|
71
|
+
* Permanently remove an observation. There is no undo. Rows written by
|
|
72
|
+
* `duet train` keep a corpus archive under `~/.duet/train/<id>/` that
|
|
73
|
+
* shares the row's lifecycle, so it is removed too (a no-op for every
|
|
74
|
+
* other row — there is simply no directory to delete).
|
|
75
|
+
*/
|
|
56
76
|
delete(id: string): Promise<void>;
|
|
57
77
|
close(): Promise<void>;
|
|
58
78
|
}
|
|
@@ -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":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,sEAAsE;AACtE,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAEnC;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,WAAW,EAAE,GAAG,GAAE,MAAmB,GAAG,MAAM,CAK3F;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;IA6B1B;;;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"}
|
|
@@ -2,6 +2,8 @@ import { observationScore, PRIORITY_WEIGHT } from "../memory/loader.js";
|
|
|
2
2
|
import { runMigrations } from "../memory/migrations.js";
|
|
3
3
|
import { DEFAULT_RECENCY_HALF_LIFE_MS, DEFAULT_REFLECTION_BIAS } from "../memory/observational.js";
|
|
4
4
|
import { DEFAULT_OPEN_LOCK_WAIT_BUDGET_MS, openPGliteWaitingForLock } from "../memory/pglite.js";
|
|
5
|
+
import { readArchiveManifest, removeArchive } from "../train/archive.js";
|
|
6
|
+
import { isTrainTagged, slugFromTags } from "../train/tags.js";
|
|
5
7
|
/** Rows fetched per page by the ranked, lazily-paginated TUI list. */
|
|
6
8
|
export const MEMORY_PAGE_SIZE = 25;
|
|
7
9
|
/**
|
|
@@ -92,13 +94,64 @@ export class MemoryDb {
|
|
|
92
94
|
]);
|
|
93
95
|
return result.rows.map(rowToObservation);
|
|
94
96
|
}
|
|
97
|
+
/**
|
|
98
|
+
* Every `duet train` row (those tagged `train`), newest-first, joined to its
|
|
99
|
+
* archive manifest for headline/model/provenance. Backs `duet train list`.
|
|
100
|
+
*/
|
|
101
|
+
async listTrainings() {
|
|
102
|
+
const observations = await this.readTrainObservations();
|
|
103
|
+
const entries = await Promise.all(observations.map((row) => this.toTrainEntry(row)));
|
|
104
|
+
entries.sort((a, b) => b.createdAt - a.createdAt);
|
|
105
|
+
return entries;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Resolve a slug to its single training row plus the synthesized content,
|
|
109
|
+
* or `undefined` when no row carries `train:<slug>`. Backs `duet train
|
|
110
|
+
* show`, `update`, and `delete`, which all key on the user-facing slug
|
|
111
|
+
* rather than the internal observation id.
|
|
112
|
+
*/
|
|
113
|
+
async findTrainingBySlug(slug) {
|
|
114
|
+
const observations = await this.readTrainObservations();
|
|
115
|
+
const row = observations.find((observation) => slugFromTags(observation.tags) === slug);
|
|
116
|
+
if (!row)
|
|
117
|
+
return undefined;
|
|
118
|
+
return { ...(await this.toTrainEntry(row)), content: row.content };
|
|
119
|
+
}
|
|
120
|
+
async readTrainObservations() {
|
|
121
|
+
const result = await this.db.query(`SELECT id, created_at, last_used_at, session_id, kind, observed_date, referenced_date,
|
|
122
|
+
relative_date, time_of_day, priority, source_json, content, tags_json
|
|
123
|
+
FROM observations`);
|
|
124
|
+
return result.rows
|
|
125
|
+
.map(rowToObservation)
|
|
126
|
+
.filter((observation) => isTrainTagged(observation.tags));
|
|
127
|
+
}
|
|
128
|
+
async toTrainEntry(observation) {
|
|
129
|
+
const manifest = await readArchiveManifest(observation.id);
|
|
130
|
+
return {
|
|
131
|
+
slug: slugFromTags(observation.tags) ?? "(unknown)",
|
|
132
|
+
memoryId: observation.id,
|
|
133
|
+
createdAt: observation.createdAt,
|
|
134
|
+
observedDate: observation.observedDate,
|
|
135
|
+
headline: manifest?.headline,
|
|
136
|
+
model: manifest?.model,
|
|
137
|
+
sourceFolder: manifest?.sourceFolder,
|
|
138
|
+
fileCount: manifest?.files.length,
|
|
139
|
+
hasArchive: manifest !== undefined,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
95
142
|
/** Replace just the `content` of an observation, preserving everything else. */
|
|
96
143
|
async updateContent(id, content) {
|
|
97
144
|
await this.db.query(`UPDATE observations SET content = $1 WHERE id = $2`, [content, id]);
|
|
98
145
|
}
|
|
99
|
-
/**
|
|
146
|
+
/**
|
|
147
|
+
* Permanently remove an observation. There is no undo. Rows written by
|
|
148
|
+
* `duet train` keep a corpus archive under `~/.duet/train/<id>/` that
|
|
149
|
+
* shares the row's lifecycle, so it is removed too (a no-op for every
|
|
150
|
+
* other row — there is simply no directory to delete).
|
|
151
|
+
*/
|
|
100
152
|
async delete(id) {
|
|
101
153
|
await this.db.query(`DELETE FROM observations WHERE id = $1`, [id]);
|
|
154
|
+
await removeArchive(id);
|
|
102
155
|
}
|
|
103
156
|
async close() {
|
|
104
157
|
await this.db.close();
|
|
@@ -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,EAAE,4BAA4B,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACnG,OAAO,EAAE,gCAAgC,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"memory-db.js","sourceRoot":"","sources":["../../../src/cli/memory-db.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,7 +25,7 @@ export async function runMemoryReflectCommand(args, io = { stdout: process.stdou
|
|
|
25
25
|
await runMigrations(db);
|
|
26
26
|
},
|
|
27
27
|
},
|
|
28
|
-
...(options.waitBudgetMs !== undefined ? {
|
|
28
|
+
...(options.waitBudgetMs !== undefined ? { lockWaitBudgetMs: options.waitBudgetMs } : {}),
|
|
29
29
|
idleCloseMs: 60_000,
|
|
30
30
|
});
|
|
31
31
|
const removeShutdownHandlers = installShutdownHandlers(() => session.dispose());
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-reflect.js","sourceRoot":"","sources":["../../../src/cli/memory-reflect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EACL,yBAAyB,EACzB,mCAAmC,EACnC,sBAAsB,EACtB,kCAAkC,GACnC,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAiBxD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,IAAc,EACd,KAAuB,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE;IAEzE,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,CAAC,OAAO;QAAE,OAAO;IAErB,MAAM,OAAO,GAAG,IAAI,aAAa,CAAC;QAChC,IAAI,EAAE,OAAO,CAAC,MAAM;QACpB,WAAW,EAAE;YACX,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE;gBACjB,MAAM,aAAa,CAAC,EAAE,CAAC,CAAC;YAC1B,CAAC;SACF;QACD,GAAG,CAAC,OAAO,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"memory-reflect.js","sourceRoot":"","sources":["../../../src/cli/memory-reflect.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { TrainListEntry } from "../train/types.js";
|
|
2
|
+
export interface TrainCommandOptions {
|
|
3
|
+
folder: string;
|
|
4
|
+
slug: string;
|
|
5
|
+
/** Undefined means "resolve at run time via resolveCliModel". */
|
|
6
|
+
model: string | undefined;
|
|
7
|
+
dbPath: string;
|
|
8
|
+
waitBudgetMs?: number;
|
|
9
|
+
}
|
|
10
|
+
interface TrainCommandIO {
|
|
11
|
+
stdout: NodeJS.WritableStream;
|
|
12
|
+
stderr: NodeJS.WritableStream;
|
|
13
|
+
}
|
|
14
|
+
export declare function parseTrainArgs(args: string[]): TrainCommandOptions | undefined;
|
|
15
|
+
/**
|
|
16
|
+
* Run `duet train <folder>` — launch a sub-agent that reads the corpus
|
|
17
|
+
* and writes a structured handoff file (.duet-train.json), persist the
|
|
18
|
+
* synthesized observation into durable memory (replacing any prior
|
|
19
|
+
* `train:<slug>` row), archive the corpus under `~/.duet/train/<memoryId>/`,
|
|
20
|
+
* and verify both side effects landed.
|
|
21
|
+
*/
|
|
22
|
+
export declare function runTrainCommand(args: string[], io?: TrainCommandIO): Promise<void>;
|
|
23
|
+
/** Render the list as an aligned text table. Pure so it is unit-testable
|
|
24
|
+
* without a database. */
|
|
25
|
+
export declare function formatTrainList(entries: TrainListEntry[]): string;
|
|
26
|
+
export declare function runTrainListCommand(args: string[], io: TrainCommandIO): Promise<void>;
|
|
27
|
+
export declare function runTrainShowCommand(args: string[], io: TrainCommandIO): Promise<void>;
|
|
28
|
+
export declare function runTrainUpdateCommand(args: string[], io: TrainCommandIO): Promise<void>;
|
|
29
|
+
export declare function runTrainDeleteCommand(args: string[], io: TrainCommandIO): Promise<void>;
|
|
30
|
+
export {};
|
|
31
|
+
//# sourceMappingURL=train.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"train.d.ts","sourceRoot":"","sources":["../../../src/cli/train.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAEV,cAAc,EAGf,MAAM,mBAAmB,CAAC;AAO3B,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,UAAU,cAAc;IACtB,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;CAC/B;AAcD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,mBAAmB,GAAG,SAAS,CA0D9E;AA8ID;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EAAE,EACd,EAAE,GAAE,cAAmE,GACtE,OAAO,CAAC,IAAI,CAAC,CAwKf;AAMD;0BAC0B;AAC1B,wBAAgB,eAAe,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,MAAM,CAwCjE;AA4FD,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ3F;AAED,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAU3F;AAED,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAuB7F;AAED,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAkB7F"}
|