@codemem/core 0.26.2 → 0.28.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.
Files changed (68) hide show
  1. package/dist/coordinator-actions.d.ts +7 -0
  2. package/dist/coordinator-actions.d.ts.map +1 -1
  3. package/dist/{coordinator-api-YsLNyP4R.js → coordinator-api-DQR63YA8.js} +18 -1
  4. package/dist/{coordinator-api-YsLNyP4R.js.map → coordinator-api-DQR63YA8.js.map} +1 -1
  5. package/dist/coordinator-api.d.ts.map +1 -1
  6. package/dist/coordinator-runtime.d.ts +1 -0
  7. package/dist/coordinator-runtime.d.ts.map +1 -1
  8. package/dist/extraction-tier-routing.d.ts +2 -0
  9. package/dist/extraction-tier-routing.d.ts.map +1 -1
  10. package/dist/index.d.ts +2 -2
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +7417 -7051
  13. package/dist/index.js.map +1 -1
  14. package/dist/ingest-pipeline.d.ts +26 -0
  15. package/dist/ingest-pipeline.d.ts.map +1 -1
  16. package/dist/internal/cloudflare-coordinator.js +1 -1
  17. package/dist/maintenance/ai-structured.d.ts +32 -0
  18. package/dist/maintenance/ai-structured.d.ts.map +1 -0
  19. package/dist/maintenance/backfill-narrative.d.ts +18 -0
  20. package/dist/maintenance/backfill-narrative.d.ts.map +1 -0
  21. package/dist/maintenance/backfill-tags.d.ts +19 -0
  22. package/dist/maintenance/backfill-tags.d.ts.map +1 -0
  23. package/dist/maintenance/dedup-keys.d.ts +32 -0
  24. package/dist/maintenance/dedup-keys.d.ts.map +1 -0
  25. package/dist/maintenance/dedup.d.ts +25 -0
  26. package/dist/maintenance/dedup.d.ts.map +1 -0
  27. package/dist/maintenance/init-vacuum.d.ts +9 -0
  28. package/dist/maintenance/init-vacuum.d.ts.map +1 -0
  29. package/dist/maintenance/low-signal.d.ts +19 -0
  30. package/dist/maintenance/low-signal.d.ts.map +1 -0
  31. package/dist/maintenance/memory-role-helpers.d.ts +18 -0
  32. package/dist/maintenance/memory-role-helpers.d.ts.map +1 -0
  33. package/dist/maintenance/memory-role-report.d.ts +4 -0
  34. package/dist/maintenance/memory-role-report.d.ts.map +1 -0
  35. package/dist/maintenance/narrative-extract.d.ts +2 -0
  36. package/dist/maintenance/narrative-extract.d.ts.map +1 -0
  37. package/dist/maintenance/reliability.d.ts +33 -0
  38. package/dist/maintenance/reliability.d.ts.map +1 -0
  39. package/dist/maintenance/relink.d.ts +7 -0
  40. package/dist/maintenance/relink.d.ts.map +1 -0
  41. package/dist/maintenance/status.d.ts +6 -0
  42. package/dist/maintenance/status.d.ts.map +1 -0
  43. package/dist/maintenance/tag-helpers.d.ts +11 -0
  44. package/dist/maintenance/tag-helpers.d.ts.map +1 -0
  45. package/dist/maintenance/types.d.ts +246 -0
  46. package/dist/maintenance/types.d.ts.map +1 -0
  47. package/dist/maintenance/with-db.d.ts +3 -0
  48. package/dist/maintenance/with-db.d.ts.map +1 -0
  49. package/dist/maintenance.d.ts +20 -434
  50. package/dist/maintenance.d.ts.map +1 -1
  51. package/dist/observer-client.d.ts +4 -0
  52. package/dist/observer-client.d.ts.map +1 -1
  53. package/dist/observer-config.d.ts.map +1 -1
  54. package/dist/pack-eval-fixtures.d.ts +2 -0
  55. package/dist/pack-eval-fixtures.d.ts.map +1 -1
  56. package/dist/pack.d.ts.map +1 -1
  57. package/dist/query-sanitizer.d.ts +9 -0
  58. package/dist/query-sanitizer.d.ts.map +1 -0
  59. package/dist/ref-queries.d.ts +2 -0
  60. package/dist/ref-queries.d.ts.map +1 -1
  61. package/dist/search.d.ts +0 -4
  62. package/dist/search.d.ts.map +1 -1
  63. package/dist/sync-daemon.d.ts.map +1 -1
  64. package/dist/sync-discovery.d.ts.map +1 -1
  65. package/dist/sync-pass.d.ts.map +1 -1
  66. package/dist/types.d.ts +12 -0
  67. package/dist/types.d.ts.map +1 -1
  68. package/package.json +1 -1
@@ -18,9 +18,35 @@
18
18
  * 11. Persist session summary
19
19
  * 12. End session
20
20
  */
21
+ import { drizzle } from "drizzle-orm/better-sqlite3";
21
22
  import type { IngestPayload } from "./ingest-types.js";
22
23
  import { type ObserverClient } from "./observer-client.js";
23
24
  import type { MemoryStore } from "./store.js";
25
+ /**
26
+ * Soft-delete prior active `session_summary` memories written by the observer
27
+ * for a session so each session holds at most one live observer summary.
28
+ *
29
+ * The observer pipeline writes a summary per flush batch. Long-running
30
+ * "durable" sessions therefore accumulate hundreds of per-flush summaries that
31
+ * crowd out typed observations and poison retrieval. This helper enforces the
32
+ * "one active observer summary per session" invariant by superseding earlier
33
+ * active rows whose `metadata.source === "observer_summary"`, leaving them
34
+ * soft-deleted for audit (with `superseded_at` metadata) and recording
35
+ * replication ops so peers drop the stale rows.
36
+ *
37
+ * Must be called *before* the new summary is persisted. If it ran afterward,
38
+ * `store.remember`'s title dedupe could return an existing stale summary's id
39
+ * rather than inserting a new row, and this helper would then treat that
40
+ * stale id as the replacement and wipe out newer summaries in the session.
41
+ * Running first ensures the dedupe query sees no prior active matches.
42
+ *
43
+ * Only `observer_summary` rows are touched; manually-created or
44
+ * legacy-imported session summaries are left alone.
45
+ *
46
+ * Returns the ids of the superseded rows so callers can backfill
47
+ * `superseded_by` once the new replacement id is known.
48
+ */
49
+ export declare function supersedePriorObserverSummaries(store: MemoryStore, d: ReturnType<typeof drizzle>, sessionId: number): number[];
24
50
  export interface IngestOptions {
25
51
  /** Observer LLM client. */
26
52
  observer: ObserverClient;
@@ -1 +1 @@
1
- {"version":3,"file":"ingest-pipeline.d.ts","sourceRoot":"","sources":["../src/ingest-pipeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AA6BH,OAAO,KAAK,EACX,aAAa,EAMb,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,KAAK,cAAc,EAAwC,MAAM,sBAAsB,CAAC;AAIjG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AA8F9C,MAAM,WAAW,aAAa;IAC7B,2BAA2B;IAC3B,QAAQ,EAAE,cAAc,CAAC;IACzB,yFAAyF;IACzF,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,KAAK,cAAc,CAAC;IACxF,yEAAyE;IACzE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8DAA8D;IAC9D,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gDAAgD;IAChD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,yDAAyD;IACzD,UAAU,CAAC,EAAE,OAAO,CAAC;CACrB;AAwCD;;;;;;GAMG;AACH,wBAAsB,MAAM,CAC3B,OAAO,EAAE,aAAa,EACtB,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,aAAa,GACpB,OAAO,CAAC,IAAI,CAAC,CAidf;AA2BD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,WAAW,EAAE,WAAW,SAAK,GAAG,MAAM,CAShF;AAMD;;;;;GAKG;AACH,wBAAsB,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBtF"}
1
+ {"version":3,"file":"ingest-pipeline.d.ts","sourceRoot":"","sources":["../src/ingest-pipeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AA0BrD,OAAO,KAAK,EACX,aAAa,EAMb,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,KAAK,cAAc,EAAwC,MAAM,sBAAsB,CAAC;AAIjG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAyC9C;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,+BAA+B,CAC9C,KAAK,EAAE,WAAW,EAClB,CAAC,EAAE,UAAU,CAAC,OAAO,OAAO,CAAC,EAC7B,SAAS,EAAE,MAAM,GACf,MAAM,EAAE,CAgDV;AAuFD,MAAM,WAAW,aAAa;IAC7B,2BAA2B;IAC3B,QAAQ,EAAE,cAAc,CAAC;IACzB,yFAAyF;IACzF,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,KAAK,cAAc,CAAC;IACxF,yEAAyE;IACzE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8DAA8D;IAC9D,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gDAAgD;IAChD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,yDAAyD;IACzD,UAAU,CAAC,EAAE,OAAO,CAAC;CACrB;AAwCD;;;;;;GAMG;AACH,wBAAsB,MAAM,CAC3B,OAAO,EAAE,aAAa,EACtB,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,aAAa,GACpB,OAAO,CAAC,IAAI,CAAC,CAydf;AA2BD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,WAAW,EAAE,WAAW,SAAK,GAAG,MAAM,CAShF;AAMD;;;;;GAKG;AACH,wBAAsB,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBtF"}
@@ -1,4 +1,4 @@
1
- import { r as e, t } from "../coordinator-api-YsLNyP4R.js";
1
+ import { r as e, t } from "../coordinator-api-DQR63YA8.js";
2
2
  //#region src/d1-coordinator-store.ts
3
3
  function n(e) {
4
4
  if (e == null) throw Error("expected row");
@@ -0,0 +1,32 @@
1
+ import type { Database } from "../db.js";
2
+ import { ObserverClient } from "../observer-client.js";
3
+ type StructuredBackfillObserver = Pick<ObserverClient, "observe" | "observeStructuredJson" | "getStatus">;
4
+ export interface AIBackfillStructuredContentResult {
5
+ checked: number;
6
+ updated: number;
7
+ skipped: number;
8
+ failed: number;
9
+ samples?: Array<{
10
+ id: number;
11
+ kind: string;
12
+ title: string;
13
+ narrative: string | null;
14
+ facts: string[];
15
+ concepts: string[];
16
+ }>;
17
+ }
18
+ export interface AIBackfillStructuredContentOptions {
19
+ limit?: number | null;
20
+ kinds?: string[] | null;
21
+ dryRun?: boolean;
22
+ overwrite?: boolean;
23
+ observer?: StructuredBackfillObserver;
24
+ }
25
+ /**
26
+ * AI-powered backfill for older non-session-summary memories that still lack
27
+ * structured content (`narrative`, `facts`, `concepts`). Uses GPT-5.4 via the
28
+ * existing ObserverClient/OpenAI integration.
29
+ */
30
+ export declare function aiBackfillStructuredContent(db: Database, opts?: AIBackfillStructuredContentOptions): Promise<AIBackfillStructuredContentResult>;
31
+ export {};
32
+ //# sourceMappingURL=ai-structured.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-structured.d.ts","sourceRoot":"","sources":["../../src/maintenance/ai-structured.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAOzC,OAAO,EAAsB,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAqC3E,KAAK,0BAA0B,GAAG,IAAI,CACrC,cAAc,EACd,SAAS,GAAG,uBAAuB,GAAG,WAAW,CACjD,CAAC;AAEF,MAAM,WAAW,iCAAiC;IACjD,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,KAAK,CAAC;QACf,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;KACnB,CAAC,CAAC;CACH;AAED,MAAM,WAAW,kCAAkC;IAClD,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,0BAA0B,CAAC;CACtC;AAyLD;;;;GAIG;AACH,wBAAsB,2BAA2B,CAChD,EAAE,EAAE,QAAQ,EACZ,IAAI,GAAE,kCAAuC,GAC3C,OAAO,CAAC,iCAAiC,CAAC,CAiK5C"}
@@ -0,0 +1,18 @@
1
+ import type { Database } from "../db.js";
2
+ export interface BackfillNarrativeResult {
3
+ checked: number;
4
+ updated: number;
5
+ skipped: number;
6
+ }
7
+ export interface BackfillNarrativeOptions {
8
+ limit?: number | null;
9
+ dryRun?: boolean;
10
+ }
11
+ /**
12
+ * Backfill narrative for session_summary memories that have structured
13
+ * body_text with `## Completed` / `## Learned` sections but no narrative.
14
+ *
15
+ * Only touches session_summary kind. Does not overwrite existing narratives.
16
+ */
17
+ export declare function backfillNarrativeFromBody(db: Database, opts?: BackfillNarrativeOptions): BackfillNarrativeResult;
18
+ //# sourceMappingURL=backfill-narrative.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backfill-narrative.d.ts","sourceRoot":"","sources":["../../src/maintenance/backfill-narrative.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAGzC,MAAM,WAAW,uBAAuB;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,wBAAwB;IACxC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACxC,EAAE,EAAE,QAAQ,EACZ,IAAI,GAAE,wBAA6B,GACjC,uBAAuB,CA8CzB"}
@@ -0,0 +1,19 @@
1
+ import type { Database } from "../db.js";
2
+ export interface BackfillTagsTextOptions {
3
+ limit?: number | null;
4
+ since?: string | null;
5
+ project?: string | null;
6
+ activeOnly?: boolean;
7
+ dryRun?: boolean;
8
+ memoryIds?: number[] | null;
9
+ }
10
+ export interface BackfillTagsTextResult {
11
+ checked: number;
12
+ updated: number;
13
+ skipped: number;
14
+ }
15
+ /**
16
+ * Populate memory_items.tags_text for rows where it is empty.
17
+ */
18
+ export declare function backfillTagsText(db: Database, opts?: BackfillTagsTextOptions): BackfillTagsTextResult;
19
+ //# sourceMappingURL=backfill-tags.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backfill-tags.d.ts","sourceRoot":"","sources":["../../src/maintenance/backfill-tags.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAIzC,MAAM,WAAW,uBAAuB;IACvC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,sBAAsB;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC/B,EAAE,EAAE,QAAQ,EACZ,IAAI,GAAE,uBAA4B,GAChC,sBAAsB,CAwFxB"}
@@ -0,0 +1,32 @@
1
+ import type { Database } from "../db.js";
2
+ export interface BackfillDedupKeysResult {
3
+ checked: number;
4
+ updated: number;
5
+ skipped: number;
6
+ }
7
+ export interface BackfillDedupKeysPlan extends BackfillDedupKeysResult {
8
+ backfillable: number;
9
+ updates: Array<{
10
+ id: number;
11
+ dedupKey: string;
12
+ }>;
13
+ lastScannedId: number;
14
+ exhausted: boolean;
15
+ }
16
+ export interface BackfillDedupKeysOptions {
17
+ limit?: number | null;
18
+ dryRun?: boolean;
19
+ }
20
+ interface BackfillDedupKeysPlanOptions {
21
+ rowLimit?: number | null;
22
+ updateLimit?: number | null;
23
+ afterId?: number | null;
24
+ }
25
+ export declare function planMemoryDedupKeys(db: Database, options?: BackfillDedupKeysPlanOptions): BackfillDedupKeysPlan;
26
+ export declare function applyMemoryDedupKeyUpdates(db: Database, updates: Array<{
27
+ id: number;
28
+ dedupKey: string;
29
+ }>): void;
30
+ export declare function backfillMemoryDedupKeys(db: Database, opts?: BackfillDedupKeysOptions): BackfillDedupKeysResult;
31
+ export {};
32
+ //# sourceMappingURL=dedup-keys.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dedup-keys.d.ts","sourceRoot":"","sources":["../../src/maintenance/dedup-keys.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAGzC,MAAM,WAAW,uBAAuB;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,qBAAsB,SAAQ,uBAAuB;IACrE,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjD,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,wBAAwB;IACxC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,UAAU,4BAA4B;IACrC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAqCD,wBAAgB,mBAAmB,CAClC,EAAE,EAAE,QAAQ,EACZ,OAAO,GAAE,4BAAiC,GACxC,qBAAqB,CAsEvB;AAED,wBAAgB,0BAA0B,CACzC,EAAE,EAAE,QAAQ,EACZ,OAAO,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,GAC9C,IAAI,CAWN;AAED,wBAAgB,uBAAuB,CACtC,EAAE,EAAE,QAAQ,EACZ,IAAI,GAAE,wBAA6B,GACjC,uBAAuB,CAMzB"}
@@ -0,0 +1,25 @@
1
+ import type { Database } from "../db.js";
2
+ export interface DedupNearDuplicatesResult {
3
+ checked: number;
4
+ deactivated: number;
5
+ pairs: Array<{
6
+ kept_id: number;
7
+ deactivated_id: number;
8
+ title: string;
9
+ }>;
10
+ }
11
+ export interface DedupNearDuplicatesOptions {
12
+ /** Max time gap in milliseconds between duplicate candidates (default: 1 hour). */
13
+ windowMs?: number;
14
+ limit?: number | null;
15
+ dryRun?: boolean;
16
+ }
17
+ /**
18
+ * Find and deactivate near-duplicate memories: cross-session pairs with
19
+ * identical normalized titles created within a configurable time window.
20
+ *
21
+ * Keeps the higher-confidence member (ties: most recent). Does not delete
22
+ * rows — only sets `active = 0`.
23
+ */
24
+ export declare function dedupNearDuplicateMemories(db: Database, opts?: DedupNearDuplicatesOptions): DedupNearDuplicatesResult;
25
+ //# sourceMappingURL=dedup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dedup.d.ts","sourceRoot":"","sources":["../../src/maintenance/dedup.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,WAAW,yBAAyB;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACzE;AAED,MAAM,WAAW,0BAA0B;IAC1C,mFAAmF;IACnF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACzC,EAAE,EAAE,QAAQ,EACZ,IAAI,GAAE,0BAA+B,GACnC,yBAAyB,CA4E3B"}
@@ -0,0 +1,9 @@
1
+ export declare function initDatabase(dbPath?: string): {
2
+ path: string;
3
+ sizeBytes: number;
4
+ };
5
+ export declare function vacuumDatabase(dbPath?: string): {
6
+ path: string;
7
+ sizeBytes: number;
8
+ };
9
+ //# sourceMappingURL=init-vacuum.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init-vacuum.d.ts","sourceRoot":"","sources":["../../src/maintenance/init-vacuum.ts"],"names":[],"mappings":"AAUA,wBAAgB,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAejF;AAED,wBAAgB,cAAc,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAMnF"}
@@ -0,0 +1,19 @@
1
+ import type { Database } from "../db.js";
2
+ export interface DeactivateLowSignalResult {
3
+ checked: number;
4
+ deactivated: number;
5
+ }
6
+ export interface DeactivateLowSignalMemoriesOptions {
7
+ kinds?: string[] | null;
8
+ limit?: number | null;
9
+ dryRun?: boolean;
10
+ }
11
+ /**
12
+ * Deactivate low-signal observations only.
13
+ */
14
+ export declare function deactivateLowSignalObservations(db: Database, limit?: number | null, dryRun?: boolean): DeactivateLowSignalResult;
15
+ /**
16
+ * Deactivate low-signal memories across selected kinds (does not delete rows).
17
+ */
18
+ export declare function deactivateLowSignalMemories(db: Database, opts?: DeactivateLowSignalMemoriesOptions): DeactivateLowSignalResult;
19
+ //# sourceMappingURL=low-signal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"low-signal.d.ts","sourceRoot":"","sources":["../../src/maintenance/low-signal.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAGzC,MAAM,WAAW,yBAAyB;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kCAAkC;IAClD,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;CACjB;AA0BD;;GAEG;AACH,wBAAgB,+BAA+B,CAC9C,EAAE,EAAE,QAAQ,EACZ,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,EACrB,MAAM,UAAQ,GACZ,yBAAyB,CAM3B;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAC1C,EAAE,EAAE,QAAQ,EACZ,IAAI,GAAE,kCAAuC,GAC3C,yBAAyB,CA0C3B"}
@@ -0,0 +1,18 @@
1
+ import type { MemoryRole, MemoryRoleProbeComparison, MemoryRoleProbeItem, MemoryRoleProbeResult } from "./types.js";
2
+ export interface InferredMemoryRole {
3
+ role: MemoryRole;
4
+ reason: string;
5
+ }
6
+ export declare function classifyProjectQuality(project: unknown): "normal" | "empty" | "garbage_like";
7
+ export declare function safeParseMetadata(raw: string | null): Record<string, unknown>;
8
+ export declare function subtractKeyedCounts<T extends string>(baseline: Partial<Record<T, number>>, candidate: Partial<Record<T, number>>): Record<T, number>;
9
+ export declare function subtractBurden(baseline: MemoryRoleProbeResult["top_burden"] | null, candidate: MemoryRoleProbeResult["top_burden"] | null): MemoryRoleProbeResult["top_burden"] | null;
10
+ export declare function compareProbeResults(baseline: MemoryRoleProbeResult[], candidate: MemoryRoleProbeResult[]): MemoryRoleProbeComparison[];
11
+ export declare function scoreProbeScenario(items: MemoryRoleProbeItem[], query: string, mode: string): MemoryRoleProbeResult["scenario_score"] | undefined;
12
+ export declare function stableProbeItemKey(input: {
13
+ import_key?: string | null;
14
+ kind: string;
15
+ title: string;
16
+ body_text: string;
17
+ }): string;
18
+ //# sourceMappingURL=memory-role-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-role-helpers.d.ts","sourceRoot":"","sources":["../../src/maintenance/memory-role-helpers.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACX,UAAU,EACV,yBAAyB,EACzB,mBAAmB,EACnB,qBAAqB,EACrB,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,kBAAkB;IAClC,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,cAAc,CAO5F;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAE7E;AAED,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,MAAM,EACnD,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EACpC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GACnC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAOnB;AAED,wBAAgB,cAAc,CAC7B,QAAQ,EAAE,qBAAqB,CAAC,YAAY,CAAC,GAAG,IAAI,EACpD,SAAS,EAAE,qBAAqB,CAAC,YAAY,CAAC,GAAG,IAAI,GACnD,qBAAqB,CAAC,YAAY,CAAC,GAAG,IAAI,CAO5C;AAED,wBAAgB,mBAAmB,CAClC,QAAQ,EAAE,qBAAqB,EAAE,EACjC,SAAS,EAAE,qBAAqB,EAAE,GAChC,yBAAyB,EAAE,CAsF7B;AAED,wBAAgB,kBAAkB,CACjC,KAAK,EAAE,mBAAmB,EAAE,EAC5B,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,GACV,qBAAqB,CAAC,gBAAgB,CAAC,GAAG,SAAS,CAwGrD;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE;IACzC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CAClB,GAAG,MAAM,CAIT"}
@@ -0,0 +1,4 @@
1
+ import type { MemoryRoleReport, MemoryRoleReportComparison, MemoryRoleReportComparisonOptions, MemoryRoleReportOptions } from "./types.js";
2
+ export declare function getMemoryRoleReport(dbPath?: string, opts?: MemoryRoleReportOptions): MemoryRoleReport;
3
+ export declare function compareMemoryRoleReports(baselineDbPath: string, candidateDbPath: string, opts?: MemoryRoleReportComparisonOptions): MemoryRoleReportComparison;
4
+ //# sourceMappingURL=memory-role-report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-role-report.d.ts","sourceRoot":"","sources":["../../src/maintenance/memory-role-report.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAIX,gBAAgB,EAChB,0BAA0B,EAC1B,iCAAiC,EACjC,uBAAuB,EACvB,MAAM,YAAY,CAAC;AAsBpB,wBAAgB,mBAAmB,CAClC,MAAM,CAAC,EAAE,MAAM,EACf,IAAI,GAAE,uBAA4B,GAChC,gBAAgB,CAgVlB;AAED,wBAAgB,wBAAwB,CACvC,cAAc,EAAE,MAAM,EACtB,eAAe,EAAE,MAAM,EACvB,IAAI,GAAE,iCAAsC,GAC1C,0BAA0B,CAiC5B"}
@@ -0,0 +1,2 @@
1
+ export declare function extractNarrativeFromBody(bodyText: string): string | null;
2
+ //# sourceMappingURL=narrative-extract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"narrative-extract.d.ts","sourceRoot":"","sources":["../../src/maintenance/narrative-extract.ts"],"names":[],"mappings":"AAEA,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAgBxE"}
@@ -0,0 +1,33 @@
1
+ export interface ReliabilityMetrics {
2
+ counts: {
3
+ inserted_events: number;
4
+ dropped_events: number;
5
+ started_batches: number;
6
+ running_batches: number;
7
+ completed_batches: number;
8
+ errored_batches: number;
9
+ terminal_batches: number;
10
+ sessions_with_events: number;
11
+ sessions_with_started_at: number;
12
+ retry_depth_max: number;
13
+ };
14
+ rates: {
15
+ flush_success_rate: number;
16
+ dropped_event_rate: number;
17
+ session_boundary_accuracy: number;
18
+ };
19
+ window_hours: number | null;
20
+ }
21
+ export declare function getReliabilityMetrics(dbPath?: string, windowHours?: number | null): ReliabilityMetrics;
22
+ export interface GateResult {
23
+ passed: boolean;
24
+ failures: string[];
25
+ metrics: ReliabilityMetrics;
26
+ }
27
+ export declare function rawEventsGate(dbPath?: string, opts?: {
28
+ minFlushSuccessRate?: number;
29
+ maxDroppedEventRate?: number;
30
+ minSessionBoundaryAccuracy?: number;
31
+ windowHours?: number;
32
+ }): GateResult;
33
+ //# sourceMappingURL=reliability.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reliability.d.ts","sourceRoot":"","sources":["../../src/maintenance/reliability.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,kBAAkB;IAClC,MAAM,EAAE;QACP,eAAe,EAAE,MAAM,CAAC;QACxB,cAAc,EAAE,MAAM,CAAC;QACvB,eAAe,EAAE,MAAM,CAAC;QACxB,eAAe,EAAE,MAAM,CAAC;QACxB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,eAAe,EAAE,MAAM,CAAC;QACxB,gBAAgB,EAAE,MAAM,CAAC;QACzB,oBAAoB,EAAE,MAAM,CAAC;QAC7B,wBAAwB,EAAE,MAAM,CAAC;QACjC,eAAe,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,KAAK,EAAE;QACN,kBAAkB,EAAE,MAAM,CAAC;QAC3B,kBAAkB,EAAE,MAAM,CAAC;QAC3B,yBAAyB,EAAE,MAAM,CAAC;KAClC,CAAC;IACF,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,wBAAgB,qBAAqB,CACpC,MAAM,CAAC,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,GACzB,kBAAkB,CAoLpB;AAED,MAAM,WAAW,UAAU;IAC1B,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,kBAAkB,CAAC;CAC5B;AAED,wBAAgB,aAAa,CAC5B,MAAM,CAAC,EAAE,MAAM,EACf,IAAI,CAAC,EAAE;IACN,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB,GACC,UAAU,CA0BZ"}
@@ -0,0 +1,7 @@
1
+ import type { Database } from "../db.js";
2
+ import type { RawEventRelinkApplyOptions, RawEventRelinkApplyResult, RawEventRelinkPlan, RawEventRelinkPlanOptions, RawEventRelinkReport, RawEventRelinkReportOptions } from "./types.js";
3
+ export declare function applyRawEventRelinkPlanWithDb(db: Database, opts?: RawEventRelinkApplyOptions): RawEventRelinkApplyResult;
4
+ export declare function getRawEventRelinkReport(dbPath?: string, opts?: RawEventRelinkReportOptions): RawEventRelinkReport;
5
+ export declare function getRawEventRelinkPlan(dbPath?: string, opts?: RawEventRelinkPlanOptions): RawEventRelinkPlan;
6
+ export declare function applyRawEventRelinkPlan(dbPath?: string, opts?: RawEventRelinkApplyOptions): RawEventRelinkApplyResult;
7
+ //# sourceMappingURL=relink.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relink.d.ts","sourceRoot":"","sources":["../../src/maintenance/relink.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,KAAK,EAEX,0BAA0B,EAC1B,yBAAyB,EAEzB,kBAAkB,EAClB,yBAAyB,EACzB,oBAAoB,EACpB,2BAA2B,EAC3B,MAAM,YAAY,CAAC;AA4MpB,wBAAgB,6BAA6B,CAC5C,EAAE,EAAE,QAAQ,EACZ,IAAI,GAAE,0BAA+B,GACnC,yBAAyB,CAuF3B;AAED,wBAAgB,uBAAuB,CACtC,MAAM,CAAC,EAAE,MAAM,EACf,IAAI,GAAE,2BAAgC,GACpC,oBAAoB,CAEtB;AAED,wBAAgB,qBAAqB,CACpC,MAAM,CAAC,EAAE,MAAM,EACf,IAAI,GAAE,yBAA8B,GAClC,kBAAkB,CAiEpB;AAED,wBAAgB,uBAAuB,CACtC,MAAM,CAAC,EAAE,MAAM,EACf,IAAI,GAAE,0BAA+B,GACnC,yBAAyB,CAE3B"}
@@ -0,0 +1,6 @@
1
+ import type { RawEventStatusResult } from "./types.js";
2
+ export declare function getRawEventStatus(dbPath?: string, limit?: number): RawEventStatusResult;
3
+ export declare function retryRawEventFailures(dbPath?: string, limit?: number): {
4
+ retried: number;
5
+ };
6
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/maintenance/status.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAGvD,wBAAgB,iBAAiB,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,oBAAoB,CA0FnF;AAED,wBAAgB,qBAAqB,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CA0CtF"}
@@ -0,0 +1,11 @@
1
+ export declare function normalizeTag(value: string): string;
2
+ export declare function fileTags(pathValue: string): string[];
3
+ export declare function parseJsonStringList(value: string | null): string[];
4
+ export declare function deriveTags(input: {
5
+ kind: string;
6
+ title: string;
7
+ concepts: string[];
8
+ filesRead: string[];
9
+ filesModified: string[];
10
+ }): string[];
11
+ //# sourceMappingURL=tag-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tag-helpers.d.ts","sourceRoot":"","sources":["../../src/maintenance/tag-helpers.ts"],"names":[],"mappings":"AAEA,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQlD;AAED,wBAAgB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAiBpD;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,EAAE,CAWlE;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,aAAa,EAAE,MAAM,EAAE,CAAC;CACxB,GAAG,MAAM,EAAE,CA+BX"}
@@ -0,0 +1,246 @@
1
+ export interface RawEventStatusItem {
2
+ source: string;
3
+ stream_id: string;
4
+ opencode_session_id: string | null;
5
+ cwd: string | null;
6
+ project: string | null;
7
+ started_at: string | null;
8
+ last_seen_ts_wall_ms: number | null;
9
+ last_received_event_seq: number;
10
+ last_flushed_event_seq: number;
11
+ updated_at: string;
12
+ session_stream_id: string;
13
+ session_id: string;
14
+ }
15
+ export interface RawEventStatusResult {
16
+ items: RawEventStatusItem[];
17
+ totals: {
18
+ pending: number;
19
+ sessions: number;
20
+ };
21
+ ingest: {
22
+ available: true;
23
+ mode: "stream_queue";
24
+ max_body_bytes: number;
25
+ };
26
+ }
27
+ export type MemoryRole = "recap" | "durable" | "ephemeral" | "general";
28
+ export interface MemoryRoleReportOptions {
29
+ project?: string | null;
30
+ allProjects?: boolean;
31
+ includeInactive?: boolean;
32
+ probes?: string[];
33
+ }
34
+ export interface MemoryRoleProbeItem {
35
+ id: number;
36
+ stable_key: string;
37
+ kind: string;
38
+ title: string;
39
+ role: MemoryRole;
40
+ role_reason: string;
41
+ mapping: "mapped" | "unmapped";
42
+ session_class: string;
43
+ summary_disposition: string;
44
+ }
45
+ export interface MemoryRoleProbeResult {
46
+ query: string;
47
+ scenario_id?: string;
48
+ scenario_title?: string;
49
+ scenario_category?: string;
50
+ mode: string;
51
+ item_ids: number[];
52
+ items: MemoryRoleProbeItem[];
53
+ top_role_counts: Record<MemoryRole, number>;
54
+ top_mapping_counts: Record<"mapped" | "unmapped", number>;
55
+ top_burden: {
56
+ recap_share: number;
57
+ unmapped_share: number;
58
+ recap_unmapped_share: number;
59
+ };
60
+ simulated_demoted_unmapped_recap?: {
61
+ item_ids: number[];
62
+ top_role_counts: Record<MemoryRole, number>;
63
+ top_mapping_counts: Record<"mapped" | "unmapped", number>;
64
+ top_burden: {
65
+ recap_share: number;
66
+ unmapped_share: number;
67
+ recap_unmapped_share: number;
68
+ };
69
+ };
70
+ simulated_demoted_unmapped_recap_and_ephemeral?: {
71
+ item_ids: number[];
72
+ top_role_counts: Record<MemoryRole, number>;
73
+ top_mapping_counts: Record<"mapped" | "unmapped", number>;
74
+ top_burden: {
75
+ recap_share: number;
76
+ unmapped_share: number;
77
+ recap_unmapped_share: number;
78
+ };
79
+ };
80
+ scenario_score?: {
81
+ mode_match: boolean;
82
+ primary_in_top1: boolean;
83
+ primary_in_top3_count: number;
84
+ anti_signal_in_top1: boolean;
85
+ primary_match_count: number;
86
+ anti_signal_count: number;
87
+ recap_count: number;
88
+ unmapped_recap_count: number;
89
+ administrative_chatter_count: number;
90
+ score: number;
91
+ };
92
+ }
93
+ export interface MemoryRoleReport {
94
+ totals: {
95
+ memories: number;
96
+ active: number;
97
+ sessions: number;
98
+ };
99
+ counts_by_kind: Record<string, number>;
100
+ counts_by_role: Record<MemoryRole, number>;
101
+ counts_by_mapping: Record<"mapped" | "unmapped", number>;
102
+ summary_lineages: {
103
+ session_summary: number;
104
+ legacy_metadata_summary: number;
105
+ };
106
+ summary_mapping: {
107
+ mapped: number;
108
+ unmapped: number;
109
+ };
110
+ project_quality: {
111
+ normal: number;
112
+ empty: number;
113
+ garbage_like: number;
114
+ };
115
+ session_duration_buckets: Record<string, number>;
116
+ session_class_buckets: Record<string, number>;
117
+ summary_disposition_buckets: Record<string, number>;
118
+ role_examples: Partial<Record<MemoryRole, Array<{
119
+ id: number;
120
+ kind: string;
121
+ title: string;
122
+ role_reason: string;
123
+ }>>>;
124
+ probe_results: MemoryRoleProbeResult[];
125
+ }
126
+ export interface MemoryRoleReportComparisonOptions extends MemoryRoleReportOptions {
127
+ }
128
+ export interface MemoryRoleProbeComparison {
129
+ query: string;
130
+ baseline_scenario_id?: string;
131
+ candidate_scenario_id?: string;
132
+ baseline_scenario_title?: string;
133
+ candidate_scenario_title?: string;
134
+ baseline_scenario_category?: string;
135
+ candidate_scenario_category?: string;
136
+ baseline_mode: string | null;
137
+ candidate_mode: string | null;
138
+ baseline_item_ids: number[];
139
+ candidate_item_ids: number[];
140
+ shared_item_keys: string[];
141
+ baseline_top_burden: MemoryRoleProbeResult["top_burden"] | null;
142
+ candidate_top_burden: MemoryRoleProbeResult["top_burden"] | null;
143
+ delta_top_burden: MemoryRoleProbeResult["top_burden"] | null;
144
+ baseline_top_mapping_counts: Record<"mapped" | "unmapped", number> | null;
145
+ candidate_top_mapping_counts: Record<"mapped" | "unmapped", number> | null;
146
+ delta_top_mapping_counts: Record<"mapped" | "unmapped", number> | null;
147
+ baseline_scenario_score?: MemoryRoleProbeResult["scenario_score"];
148
+ candidate_scenario_score?: MemoryRoleProbeResult["scenario_score"];
149
+ delta_scenario_score?: Partial<Record<keyof NonNullable<MemoryRoleProbeResult["scenario_score"]>, number>>;
150
+ }
151
+ export interface MemoryRoleReportComparison {
152
+ baseline: MemoryRoleReport;
153
+ candidate: MemoryRoleReport;
154
+ delta: {
155
+ totals: MemoryRoleReport["totals"];
156
+ counts_by_role: Record<MemoryRole, number>;
157
+ counts_by_mapping: Record<"mapped" | "unmapped", number>;
158
+ summary_mapping: Record<"mapped" | "unmapped", number>;
159
+ session_duration_buckets: Record<string, number>;
160
+ session_class_buckets: Record<string, number>;
161
+ summary_disposition_buckets: Record<string, number>;
162
+ };
163
+ probe_comparisons: MemoryRoleProbeComparison[];
164
+ }
165
+ export interface RawEventRelinkGroup {
166
+ source: string;
167
+ stable_id: string;
168
+ local_sessions: number;
169
+ mapped_sessions: number;
170
+ unmapped_sessions: number;
171
+ eligible: boolean;
172
+ blockers: string[];
173
+ canonical_session_id: number;
174
+ canonical_reason: string;
175
+ would_create_bridge: boolean;
176
+ sessions_to_compact: number;
177
+ all_session_ids: number[];
178
+ sample_session_ids: number[];
179
+ active_memories: number;
180
+ repointable_active_memories: number;
181
+ oldest_started_at: string | null;
182
+ latest_started_at: string | null;
183
+ project: string | null;
184
+ }
185
+ export interface RawEventRelinkReportOptions {
186
+ project?: string | null;
187
+ allProjects?: boolean;
188
+ limit?: number;
189
+ }
190
+ export interface RawEventRelinkReport {
191
+ totals: {
192
+ recoverable_sessions: number;
193
+ distinct_stable_ids: number;
194
+ groups_with_multiple_sessions: number;
195
+ groups_with_mapped_session: number;
196
+ groups_without_mapped_session: number;
197
+ eligible_groups: number;
198
+ ineligible_groups: number;
199
+ active_memories: number;
200
+ repointable_active_memories: number;
201
+ };
202
+ groups: RawEventRelinkGroup[];
203
+ }
204
+ export interface RawEventRelinkAction {
205
+ action: "create_bridge" | "repoint_memories" | "compact_sessions";
206
+ stable_id: string;
207
+ canonical_session_id: number;
208
+ session_ids: number[];
209
+ memory_count: number;
210
+ reason: string;
211
+ }
212
+ export interface RawEventRelinkPlanOptions extends RawEventRelinkReportOptions {
213
+ }
214
+ export interface RawEventRelinkPlan {
215
+ totals: {
216
+ groups: number;
217
+ eligible_groups: number;
218
+ skipped_groups: number;
219
+ actions: number;
220
+ bridge_creations: number;
221
+ memory_repoints: number;
222
+ session_compactions: number;
223
+ };
224
+ actions: RawEventRelinkAction[];
225
+ skipped_groups: Array<{
226
+ stable_id: string;
227
+ blockers: string[];
228
+ }>;
229
+ }
230
+ export interface RawEventRelinkApplyOptions extends RawEventRelinkReportOptions {
231
+ }
232
+ export interface RawEventRelinkApplyResult {
233
+ totals: {
234
+ groups: number;
235
+ eligible_groups: number;
236
+ skipped_groups: number;
237
+ bridge_creations: number;
238
+ memory_repoints: number;
239
+ session_compactions: number;
240
+ };
241
+ skipped_groups: Array<{
242
+ stable_id: string;
243
+ blockers: string[];
244
+ }>;
245
+ }
246
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/maintenance/types.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,kBAAkB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,uBAAuB,EAAE,MAAM,CAAC;IAChC,sBAAsB,EAAE,MAAM,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACpC,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAC5B,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9C,MAAM,EAAE;QAAE,SAAS,EAAE,IAAI,CAAC;QAAC,IAAI,EAAE,cAAc,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC;CAC1E;AAED,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC;AAEvE,MAAM,WAAW,uBAAuB;IACvC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,UAAU,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,QAAQ,GAAG,UAAU,CAAC;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,qBAAqB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,EAAE,mBAAmB,EAAE,CAAC;IAC7B,eAAe,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAC5C,kBAAkB,EAAE,MAAM,CAAC,QAAQ,GAAG,UAAU,EAAE,MAAM,CAAC,CAAC;IAC1D,UAAU,EAAE;QACX,WAAW,EAAE,MAAM,CAAC;QACpB,cAAc,EAAE,MAAM,CAAC;QACvB,oBAAoB,EAAE,MAAM,CAAC;KAC7B,CAAC;IACF,gCAAgC,CAAC,EAAE;QAClC,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,eAAe,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC5C,kBAAkB,EAAE,MAAM,CAAC,QAAQ,GAAG,UAAU,EAAE,MAAM,CAAC,CAAC;QAC1D,UAAU,EAAE;YACX,WAAW,EAAE,MAAM,CAAC;YACpB,cAAc,EAAE,MAAM,CAAC;YACvB,oBAAoB,EAAE,MAAM,CAAC;SAC7B,CAAC;KACF,CAAC;IACF,8CAA8C,CAAC,EAAE;QAChD,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,eAAe,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC5C,kBAAkB,EAAE,MAAM,CAAC,QAAQ,GAAG,UAAU,EAAE,MAAM,CAAC,CAAC;QAC1D,UAAU,EAAE;YACX,WAAW,EAAE,MAAM,CAAC;YACpB,cAAc,EAAE,MAAM,CAAC;YACvB,oBAAoB,EAAE,MAAM,CAAC;SAC7B,CAAC;KACF,CAAC;IACF,cAAc,CAAC,EAAE;QAChB,UAAU,EAAE,OAAO,CAAC;QACpB,eAAe,EAAE,OAAO,CAAC;QACzB,qBAAqB,EAAE,MAAM,CAAC;QAC9B,mBAAmB,EAAE,OAAO,CAAC;QAC7B,mBAAmB,EAAE,MAAM,CAAC;QAC5B,iBAAiB,EAAE,MAAM,CAAC;QAC1B,WAAW,EAAE,MAAM,CAAC;QACpB,oBAAoB,EAAE,MAAM,CAAC;QAC7B,4BAA4B,EAAE,MAAM,CAAC;QACrC,KAAK,EAAE,MAAM,CAAC;KACd,CAAC;CACF;AAED,MAAM,WAAW,gBAAgB;IAChC,MAAM,EAAE;QACP,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,cAAc,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAC3C,iBAAiB,EAAE,MAAM,CAAC,QAAQ,GAAG,UAAU,EAAE,MAAM,CAAC,CAAC;IACzD,gBAAgB,EAAE;QACjB,eAAe,EAAE,MAAM,CAAC;QACxB,uBAAuB,EAAE,MAAM,CAAC;KAChC,CAAC;IACF,eAAe,EAAE;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,eAAe,EAAE;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,YAAY,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,wBAAwB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjD,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C,2BAA2B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpD,aAAa,EAAE,OAAO,CACrB,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAC3F,CAAC;IACF,aAAa,EAAE,qBAAqB,EAAE,CAAC;CACvC;AAED,MAAM,WAAW,iCAAkC,SAAQ,uBAAuB;CAAG;AAErF,MAAM,WAAW,yBAAyB;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,mBAAmB,EAAE,qBAAqB,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;IAChE,oBAAoB,EAAE,qBAAqB,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;IACjE,gBAAgB,EAAE,qBAAqB,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;IAC7D,2BAA2B,EAAE,MAAM,CAAC,QAAQ,GAAG,UAAU,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IAC1E,4BAA4B,EAAE,MAAM,CAAC,QAAQ,GAAG,UAAU,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IAC3E,wBAAwB,EAAE,MAAM,CAAC,QAAQ,GAAG,UAAU,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IACvE,uBAAuB,CAAC,EAAE,qBAAqB,CAAC,gBAAgB,CAAC,CAAC;IAClE,wBAAwB,CAAC,EAAE,qBAAqB,CAAC,gBAAgB,CAAC,CAAC;IACnE,oBAAoB,CAAC,EAAE,OAAO,CAC7B,MAAM,CAAC,MAAM,WAAW,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,CAAC,EAAE,MAAM,CAAC,CAC1E,CAAC;CACF;AAED,MAAM,WAAW,0BAA0B;IAC1C,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,SAAS,EAAE,gBAAgB,CAAC;IAC5B,KAAK,EAAE;QACN,MAAM,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QACnC,cAAc,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC3C,iBAAiB,EAAE,MAAM,CAAC,QAAQ,GAAG,UAAU,EAAE,MAAM,CAAC,CAAC;QACzD,eAAe,EAAE,MAAM,CAAC,QAAQ,GAAG,UAAU,EAAE,MAAM,CAAC,CAAC;QACvD,wBAAwB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjD,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC9C,2BAA2B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACpD,CAAC;IACF,iBAAiB,EAAE,yBAAyB,EAAE,CAAC;CAC/C;AAED,MAAM,WAAW,mBAAmB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,eAAe,EAAE,MAAM,CAAC;IACxB,2BAA2B,EAAE,MAAM,CAAC;IACpC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,2BAA2B;IAC3C,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,oBAAoB;IACpC,MAAM,EAAE;QACP,oBAAoB,EAAE,MAAM,CAAC;QAC7B,mBAAmB,EAAE,MAAM,CAAC;QAC5B,6BAA6B,EAAE,MAAM,CAAC;QACtC,0BAA0B,EAAE,MAAM,CAAC;QACnC,6BAA6B,EAAE,MAAM,CAAC;QACtC,eAAe,EAAE,MAAM,CAAC;QACxB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,eAAe,EAAE,MAAM,CAAC;QACxB,2BAA2B,EAAE,MAAM,CAAC;KACpC,CAAC;IACF,MAAM,EAAE,mBAAmB,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,oBAAoB;IACpC,MAAM,EAAE,eAAe,GAAG,kBAAkB,GAAG,kBAAkB,CAAC;IAClE,SAAS,EAAE,MAAM,CAAC;IAClB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,yBAA0B,SAAQ,2BAA2B;CAAG;AAEjF,MAAM,WAAW,kBAAkB;IAClC,MAAM,EAAE;QACP,MAAM,EAAE,MAAM,CAAC;QACf,eAAe,EAAE,MAAM,CAAC;QACxB,cAAc,EAAE,MAAM,CAAC;QACvB,OAAO,EAAE,MAAM,CAAC;QAChB,gBAAgB,EAAE,MAAM,CAAC;QACzB,eAAe,EAAE,MAAM,CAAC;QACxB,mBAAmB,EAAE,MAAM,CAAC;KAC5B,CAAC;IACF,OAAO,EAAE,oBAAoB,EAAE,CAAC;IAChC,cAAc,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;CACjE;AAED,MAAM,WAAW,0BAA2B,SAAQ,2BAA2B;CAAG;AAElF,MAAM,WAAW,yBAAyB;IACzC,MAAM,EAAE;QACP,MAAM,EAAE,MAAM,CAAC;QACf,eAAe,EAAE,MAAM,CAAC;QACxB,cAAc,EAAE,MAAM,CAAC;QACvB,gBAAgB,EAAE,MAAM,CAAC;QACzB,eAAe,EAAE,MAAM,CAAC;QACxB,mBAAmB,EAAE,MAAM,CAAC;KAC5B,CAAC;IACF,cAAc,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;CACjE"}
@@ -0,0 +1,3 @@
1
+ import { type Database } from "../db.js";
2
+ export declare function withDb<T>(dbPath: string | undefined, fn: (db: Database, resolvedPath: string) => T): T;
3
+ //# sourceMappingURL=with-db.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"with-db.d.ts","sourceRoot":"","sources":["../../src/maintenance/with-db.ts"],"names":[],"mappings":"AAGA,OAAO,EAA8B,KAAK,QAAQ,EAAiB,MAAM,UAAU,CAAC;AAEpF,wBAAgB,MAAM,CAAC,CAAC,EACvB,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,EAAE,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,KAAK,CAAC,GAC3C,CAAC,CASH"}