@cleocode/core 2026.9.13 → 2026.9.15
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/docs/export-document.js +112 -8
- package/dist/docs/export-document.js.map +2 -2
- package/dist/lifecycle/kind-requirements.d.ts +35 -0
- package/dist/lifecycle/kind-requirements.d.ts.map +1 -0
- package/dist/lifecycle/kind-requirements.js +43 -0
- package/dist/lifecycle/kind-requirements.js.map +1 -0
- package/dist/llm/api-mode.d.ts +40 -0
- package/dist/llm/api-mode.d.ts.map +1 -1
- package/dist/llm/api-mode.js +57 -1
- package/dist/llm/api-mode.js.map +1 -1
- package/dist/llm/cli-ops.d.ts.map +1 -1
- package/dist/llm/cli-ops.js +9 -11
- package/dist/llm/cli-ops.js.map +1 -1
- package/dist/llm/plugin-facade.js +59 -1
- package/dist/llm/plugin-facade.js.map +2 -2
- package/dist/memory/brain-embedding.d.ts +47 -2
- package/dist/memory/brain-embedding.d.ts.map +1 -1
- package/dist/memory/brain-embedding.js +61 -2
- package/dist/memory/brain-embedding.js.map +1 -1
- package/dist/memory/embedding-local.d.ts +45 -1
- package/dist/memory/embedding-local.d.ts.map +1 -1
- package/dist/memory/embedding-local.js +81 -6
- package/dist/memory/embedding-local.js.map +1 -1
- package/dist/memory/retrieval/observe.d.ts +14 -0
- package/dist/memory/retrieval/observe.d.ts.map +1 -1
- package/dist/memory/retrieval/observe.js +50 -14
- package/dist/memory/retrieval/observe.js.map +1 -1
- package/dist/memory/transcript-extractor.d.ts +13 -0
- package/dist/memory/transcript-extractor.d.ts.map +1 -1
- package/dist/memory/transcript-extractor.js +28 -3
- package/dist/memory/transcript-extractor.js.map +1 -1
- package/dist/memory/transcript-scanner.d.ts +12 -1
- package/dist/memory/transcript-scanner.d.ts.map +1 -1
- package/dist/memory/transcript-scanner.js +9 -3
- package/dist/memory/transcript-scanner.js.map +1 -1
- package/dist/reconciliation/reconciliation-engine.d.ts.map +1 -1
- package/dist/reconciliation/reconciliation-engine.js +8 -0
- package/dist/reconciliation/reconciliation-engine.js.map +1 -1
- package/dist/resources/spawn-wrapper.d.ts.map +1 -1
- package/dist/resources/spawn-wrapper.js +6 -3
- package/dist/resources/spawn-wrapper.js.map +1 -1
- package/dist/selfimprove/fix-gen.js +57 -1
- package/dist/selfimprove/fix-gen.js.map +2 -2
- package/dist/tasks/complete.d.ts.map +1 -1
- package/dist/tasks/complete.js +8 -1
- package/dist/tasks/complete.js.map +1 -1
- package/package.json +23 -13
|
@@ -16,7 +16,16 @@ export interface EmbeddingProvider {
|
|
|
16
16
|
embed(text: string): Promise<Float32Array>;
|
|
17
17
|
/** Number of dimensions the provider produces. Must match vec0 table. */
|
|
18
18
|
readonly dimensions: number;
|
|
19
|
-
/**
|
|
19
|
+
/**
|
|
20
|
+
* Whether the provider CAN produce embeddings — capability, not state.
|
|
21
|
+
*
|
|
22
|
+
* Implementations MUST NOT return "has already produced one": a provider
|
|
23
|
+
* that reports unavailable until it has embedded something can never be
|
|
24
|
+
* asked to embed anything, because every caller checks this first. That
|
|
25
|
+
* deadlock made local embeddings entirely inert (gh#1217). A provider whose
|
|
26
|
+
* model loads lazily is AVAILABLE before the first load; it becomes
|
|
27
|
+
* unavailable only once loading has actually failed.
|
|
28
|
+
*/
|
|
20
29
|
isAvailable(): boolean;
|
|
21
30
|
}
|
|
22
31
|
/** Matches the brain_embeddings vec0 table: FLOAT[384]. */
|
|
@@ -37,7 +46,14 @@ export declare function clearEmbeddingProvider(): void;
|
|
|
37
46
|
* Returns null when no provider is set or not available (FTS5-only fallback).
|
|
38
47
|
*/
|
|
39
48
|
export declare function embedText(text: string): Promise<Float32Array | null>;
|
|
40
|
-
/**
|
|
49
|
+
/**
|
|
50
|
+
* Check whether embedding is available — i.e. a provider is registered and
|
|
51
|
+
* has not failed to load.
|
|
52
|
+
*
|
|
53
|
+
* This is a CAPABILITY check. It is deliberately true before the first
|
|
54
|
+
* embedding is produced: gating the only call that can warm a lazy provider on
|
|
55
|
+
* that provider already being warm is the gh#1217 deadlock.
|
|
56
|
+
*/
|
|
41
57
|
export declare function isEmbeddingAvailable(): boolean;
|
|
42
58
|
/**
|
|
43
59
|
* Initialize the default local embedding provider.
|
|
@@ -52,4 +68,33 @@ export declare function isEmbeddingAvailable(): boolean;
|
|
|
52
68
|
* @task T136 @epic T134
|
|
53
69
|
*/
|
|
54
70
|
export declare function initDefaultProvider(): Promise<void>;
|
|
71
|
+
/**
|
|
72
|
+
* Register the default provider if nothing has registered one yet.
|
|
73
|
+
*
|
|
74
|
+
* ## Why a consumer must ask rather than assume (T12314)
|
|
75
|
+
*
|
|
76
|
+
* Registration is scheduled by a `setImmediate` in the brain DB open path and
|
|
77
|
+
* its failures are swallowed, so a consumer that asks
|
|
78
|
+
* {@link isEmbeddingAvailable} can legitimately be told "no" for two unrelated
|
|
79
|
+
* reasons: the provider failed, or it simply has not been registered yet. For
|
|
80
|
+
* as long as the availability check was unsatisfiable (T12129) that difference
|
|
81
|
+
* could not be observed. With the deadlock gone it is the whole story —
|
|
82
|
+
* measured against the installed 2026.9.14, the provider was absent at import,
|
|
83
|
+
* and registering it explicitly took **0 ms** and then produced a real
|
|
84
|
+
* 384-dimension vector.
|
|
85
|
+
*
|
|
86
|
+
* Registration is therefore free: the ~22 MB model download happens on the
|
|
87
|
+
* first {@link embedText}, not here. There is no cost argument for making a
|
|
88
|
+
* consumer race a deferred registration it cannot see.
|
|
89
|
+
*
|
|
90
|
+
* @returns `true` when a provider is registered once this resolves.
|
|
91
|
+
* @remarks A load failure is NOT hidden — the provider registers, and its
|
|
92
|
+
* subsequent failure latches and is reported by the consumer. Returning
|
|
93
|
+
* `false` here means no provider could be constructed at all.
|
|
94
|
+
* @example
|
|
95
|
+
* ```ts
|
|
96
|
+
* if (!(await ensureEmbeddingProvider())) reportUnavailable();
|
|
97
|
+
* ```
|
|
98
|
+
*/
|
|
99
|
+
export declare function ensureEmbeddingProvider(): Promise<boolean>;
|
|
55
100
|
//# sourceMappingURL=brain-embedding.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brain-embedding.d.ts","sourceRoot":"","sources":["../../src/memory/brain-embedding.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,2EAA2E;AAC3E,MAAM,WAAW,iBAAiB;IAChC,wDAAwD;IACxD,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAC3C,yEAAyE;IACzE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B
|
|
1
|
+
{"version":3,"file":"brain-embedding.d.ts","sourceRoot":"","sources":["../../src/memory/brain-embedding.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,2EAA2E;AAC3E,MAAM,WAAW,iBAAiB;IAChC,wDAAwD;IACxD,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAC3C,yEAAyE;IACzE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B;;;;;;;;;OASG;IACH,WAAW,IAAI,OAAO,CAAC;CACxB;AAED,2DAA2D;AAC3D,eAAO,MAAM,oBAAoB,MAAM,CAAC;AAIxC;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAOtE;AAED,gEAAgE;AAChE,wBAAgB,oBAAoB,IAAI,iBAAiB,GAAG,IAAI,CAE/D;AAED,iEAAiE;AACjE,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C;AAED;;;GAGG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAc1E;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAE9C;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAIzD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,OAAO,CAAC,CAShE"}
|
|
@@ -40,9 +40,28 @@ export function clearEmbeddingProvider() {
|
|
|
40
40
|
export async function embedText(text) {
|
|
41
41
|
if (!currentProvider?.isAvailable())
|
|
42
42
|
return null;
|
|
43
|
-
|
|
43
|
+
try {
|
|
44
|
+
return await currentProvider.embed(text);
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
// gh#1217: `isAvailable()` is capability, so the first real embed is also
|
|
48
|
+
// the first model load and CAN fail (offline with no cached model, for
|
|
49
|
+
// one). Callers treat `null` as "no vector — fall back to FTS5", which is
|
|
50
|
+
// the correct degradation. Throwing instead would reject the whole search,
|
|
51
|
+
// and on the fire-and-forget write path it would surface as an unhandled
|
|
52
|
+
// rejection. The provider latches its own failure, so this is not a retry
|
|
53
|
+
// loop.
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
44
56
|
}
|
|
45
|
-
/**
|
|
57
|
+
/**
|
|
58
|
+
* Check whether embedding is available — i.e. a provider is registered and
|
|
59
|
+
* has not failed to load.
|
|
60
|
+
*
|
|
61
|
+
* This is a CAPABILITY check. It is deliberately true before the first
|
|
62
|
+
* embedding is produced: gating the only call that can warm a lazy provider on
|
|
63
|
+
* that provider already being warm is the gh#1217 deadlock.
|
|
64
|
+
*/
|
|
46
65
|
export function isEmbeddingAvailable() {
|
|
47
66
|
return currentProvider?.isAvailable() ?? false;
|
|
48
67
|
}
|
|
@@ -63,4 +82,44 @@ export async function initDefaultProvider() {
|
|
|
63
82
|
const provider = new LocalEmbeddingProvider();
|
|
64
83
|
setEmbeddingProvider(provider);
|
|
65
84
|
}
|
|
85
|
+
/**
|
|
86
|
+
* Register the default provider if nothing has registered one yet.
|
|
87
|
+
*
|
|
88
|
+
* ## Why a consumer must ask rather than assume (T12314)
|
|
89
|
+
*
|
|
90
|
+
* Registration is scheduled by a `setImmediate` in the brain DB open path and
|
|
91
|
+
* its failures are swallowed, so a consumer that asks
|
|
92
|
+
* {@link isEmbeddingAvailable} can legitimately be told "no" for two unrelated
|
|
93
|
+
* reasons: the provider failed, or it simply has not been registered yet. For
|
|
94
|
+
* as long as the availability check was unsatisfiable (T12129) that difference
|
|
95
|
+
* could not be observed. With the deadlock gone it is the whole story —
|
|
96
|
+
* measured against the installed 2026.9.14, the provider was absent at import,
|
|
97
|
+
* and registering it explicitly took **0 ms** and then produced a real
|
|
98
|
+
* 384-dimension vector.
|
|
99
|
+
*
|
|
100
|
+
* Registration is therefore free: the ~22 MB model download happens on the
|
|
101
|
+
* first {@link embedText}, not here. There is no cost argument for making a
|
|
102
|
+
* consumer race a deferred registration it cannot see.
|
|
103
|
+
*
|
|
104
|
+
* @returns `true` when a provider is registered once this resolves.
|
|
105
|
+
* @remarks A load failure is NOT hidden — the provider registers, and its
|
|
106
|
+
* subsequent failure latches and is reported by the consumer. Returning
|
|
107
|
+
* `false` here means no provider could be constructed at all.
|
|
108
|
+
* @example
|
|
109
|
+
* ```ts
|
|
110
|
+
* if (!(await ensureEmbeddingProvider())) reportUnavailable();
|
|
111
|
+
* ```
|
|
112
|
+
*/
|
|
113
|
+
export async function ensureEmbeddingProvider() {
|
|
114
|
+
if (currentProvider !== null)
|
|
115
|
+
return true;
|
|
116
|
+
try {
|
|
117
|
+
await initDefaultProvider();
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
// Construction itself failed; the caller reports an unavailable provider.
|
|
121
|
+
return false;
|
|
122
|
+
}
|
|
123
|
+
return currentProvider !== null;
|
|
124
|
+
}
|
|
66
125
|
//# sourceMappingURL=brain-embedding.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brain-embedding.js","sourceRoot":"","sources":["../../src/memory/brain-embedding.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;
|
|
1
|
+
{"version":3,"file":"brain-embedding.js","sourceRoot":"","sources":["../../src/memory/brain-embedding.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAqBH,2DAA2D;AAC3D,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,CAAC;AAExC,IAAI,eAAe,GAA6B,IAAI,CAAC;AAErD;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAA2B;IAC9D,IAAI,QAAQ,CAAC,UAAU,KAAK,oBAAoB,EAAE,CAAC;QACjD,MAAM,IAAI,KAAK,CACb,kCAAkC,QAAQ,CAAC,UAAU,8BAA8B,oBAAoB,GAAG,CAC3G,CAAC;IACJ,CAAC;IACD,eAAe,GAAG,QAAQ,CAAC;AAC7B,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,oBAAoB;IAClC,OAAO,eAAe,CAAC;AACzB,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,sBAAsB;IACpC,eAAe,GAAG,IAAI,CAAC;AACzB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAY;IAC1C,IAAI,CAAC,eAAe,EAAE,WAAW,EAAE;QAAE,OAAO,IAAI,CAAC;IACjD,IAAI,CAAC;QACH,OAAO,MAAM,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,0EAA0E;QAC1E,uEAAuE;QACvE,0EAA0E;QAC1E,2EAA2E;QAC3E,yEAAyE;QACzE,0EAA0E;QAC1E,QAAQ;QACR,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB;IAClC,OAAO,eAAe,EAAE,WAAW,EAAE,IAAI,KAAK,CAAC;AACjD,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACvC,MAAM,EAAE,sBAAsB,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;IACxE,MAAM,QAAQ,GAAG,IAAI,sBAAsB,EAAE,CAAC;IAC9C,oBAAoB,CAAC,QAAQ,CAAC,CAAC;AACjC,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB;IAC3C,IAAI,eAAe,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC1C,IAAI,CAAC;QACH,MAAM,mBAAmB,EAAE,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,0EAA0E;QAC1E,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,eAAe,KAAK,IAAI,CAAC;AAClC,CAAC"}
|
|
@@ -17,6 +17,25 @@
|
|
|
17
17
|
* `prebuild-install` transitive via `sharp@0.34+`.
|
|
18
18
|
*/
|
|
19
19
|
import type { EmbeddingProvider } from './brain-embedding.js';
|
|
20
|
+
/**
|
|
21
|
+
* Has the pipeline actually been loaded in this process?
|
|
22
|
+
*
|
|
23
|
+
* Distinct from {@link LocalEmbeddingProvider.isAvailable}, which reports
|
|
24
|
+
* CAPABILITY. This reports STATE, and exists for diagnostics — notably to warn
|
|
25
|
+
* when `brain.embedding.enabled` is true but nothing was ever embedded.
|
|
26
|
+
*
|
|
27
|
+
* @returns `true` once a real embedding pipeline exists.
|
|
28
|
+
*
|
|
29
|
+
* @task T12129 (gh#1217)
|
|
30
|
+
*/
|
|
31
|
+
export declare function isEmbeddingPipelineLoaded(): boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Reset the module-level pipeline state. Test-only.
|
|
34
|
+
*
|
|
35
|
+
* @internal
|
|
36
|
+
* @task T12129 (gh#1217)
|
|
37
|
+
*/
|
|
38
|
+
export declare function __resetLocalEmbeddingStateForTests(): void;
|
|
20
39
|
/**
|
|
21
40
|
* Local embedding provider backed by @huggingface/transformers.
|
|
22
41
|
*
|
|
@@ -32,7 +51,32 @@ export declare class LocalEmbeddingProvider implements EmbeddingProvider {
|
|
|
32
51
|
/** Number of dimensions produced — must match brain_embeddings vec0 table. */
|
|
33
52
|
readonly dimensions = 384;
|
|
34
53
|
/**
|
|
35
|
-
* Whether
|
|
54
|
+
* Whether this provider CAN produce embeddings — not whether it already has.
|
|
55
|
+
*
|
|
56
|
+
* ## The deadlock this fixes (gh#1217)
|
|
57
|
+
*
|
|
58
|
+
* This previously returned `_ready`, the "pipeline has loaded" flag. But
|
|
59
|
+
* `_ready` is set only by `loadPipeline()`, which runs only inside
|
|
60
|
+
* {@link embed} — and every caller of `embed` first checks `isAvailable()`.
|
|
61
|
+
* In any fresh CLI process `_ready` is false, so nothing ever called
|
|
62
|
+
* `embed`, so `_ready` never became true. **The readiness check could only
|
|
63
|
+
* be satisfied by the call it guarded.**
|
|
64
|
+
*
|
|
65
|
+
* The observable result was total, silent inertness: `cleo brain
|
|
66
|
+
* maintenance` reported `{processed: 0, skipped: 0, errors: 0}` forever,
|
|
67
|
+
* `brain_embeddings` stayed empty after dozens of observations, new writes
|
|
68
|
+
* were never embedded, and every hybrid search quietly degraded to FTS5 —
|
|
69
|
+
* while `brain.embedding.enabled` was true and the provider itself was
|
|
70
|
+
* perfectly healthy when called directly.
|
|
71
|
+
*
|
|
72
|
+
* Availability is therefore capability: this provider can load its pipeline
|
|
73
|
+
* on demand, and says so until a load actually fails. The ~22 MB first-call
|
|
74
|
+
* download is the expected cost of the lazy design, not a reason to refuse
|
|
75
|
+
* to begin.
|
|
76
|
+
*
|
|
77
|
+
* @returns `true` unless loading the pipeline has already failed here.
|
|
78
|
+
*
|
|
79
|
+
* @task T12129 (gh#1217)
|
|
36
80
|
*/
|
|
37
81
|
isAvailable(): boolean;
|
|
38
82
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embedding-local.d.ts","sourceRoot":"","sources":["../../src/memory/embedding-local.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"embedding-local.d.ts","sourceRoot":"","sources":["../../src/memory/embedding-local.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAiD9D;;;;;;;;;;GAUG;AACH,wBAAgB,yBAAyB,IAAI,OAAO,CAEnD;AAED;;;;;GAKG;AACH,wBAAgB,kCAAkC,IAAI,IAAI,CAKzD;AAED;;;;;;;;;;GAUG;AACH,qBAAa,sBAAuB,YAAW,iBAAiB;IAC9D,8EAA8E;IAC9E,QAAQ,CAAC,UAAU,OAAwB;IAE3C;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACH,WAAW,IAAI,OAAO;IAItB;;;;;;OAMG;IACG,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAShD;;;;;OAKG;IACG,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;CAS3D;AAKD;;;;GAIG;AACH,wBAAgB,yBAAyB,IAAI,sBAAsB,CAKlE"}
|
|
@@ -23,17 +23,67 @@ const MODEL_NAME = 'Xenova/all-MiniLM-L6-v2';
|
|
|
23
23
|
let _pipeline = null;
|
|
24
24
|
/** Whether the pipeline has been successfully initialized. */
|
|
25
25
|
let _ready = false;
|
|
26
|
+
/**
|
|
27
|
+
* Whether loading the pipeline failed in THIS process (no model cached and no
|
|
28
|
+
* network, unsupported platform, corrupt download). Latched so a failed load
|
|
29
|
+
* is not retried on every call — one download attempt per process is enough to
|
|
30
|
+
* establish that embeddings are not obtainable here.
|
|
31
|
+
*
|
|
32
|
+
* @task T12129 (gh#1217)
|
|
33
|
+
*/
|
|
34
|
+
let _loadFailed = false;
|
|
35
|
+
/** Reason for the latched failure, surfaced in diagnostics. */
|
|
36
|
+
let _loadError = null;
|
|
26
37
|
/**
|
|
27
38
|
* Load the transformers feature-extraction pipeline lazily.
|
|
28
39
|
* Dynamic import prevents the heavy model from loading unless embedding is enabled.
|
|
40
|
+
*
|
|
41
|
+
* On first call this downloads ~22 MB. That cost is expected and is the reason
|
|
42
|
+
* the load is lazy — it is NOT a reason to refuse to start it (gh#1217).
|
|
29
43
|
*/
|
|
30
44
|
async function loadPipeline() {
|
|
31
45
|
if (_ready)
|
|
32
46
|
return;
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
47
|
+
if (_loadFailed) {
|
|
48
|
+
throw new Error(`Local embedding pipeline is unavailable in this process: ${_loadError}`);
|
|
49
|
+
}
|
|
50
|
+
try {
|
|
51
|
+
// Dynamic import — only resolves when embedding is explicitly enabled
|
|
52
|
+
const { pipeline } = await import('@huggingface/transformers');
|
|
53
|
+
_pipeline = await pipeline('feature-extraction', MODEL_NAME);
|
|
54
|
+
_ready = true;
|
|
55
|
+
}
|
|
56
|
+
catch (err) {
|
|
57
|
+
_loadFailed = true;
|
|
58
|
+
_loadError = err instanceof Error ? err.message : String(err);
|
|
59
|
+
throw err;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Has the pipeline actually been loaded in this process?
|
|
64
|
+
*
|
|
65
|
+
* Distinct from {@link LocalEmbeddingProvider.isAvailable}, which reports
|
|
66
|
+
* CAPABILITY. This reports STATE, and exists for diagnostics — notably to warn
|
|
67
|
+
* when `brain.embedding.enabled` is true but nothing was ever embedded.
|
|
68
|
+
*
|
|
69
|
+
* @returns `true` once a real embedding pipeline exists.
|
|
70
|
+
*
|
|
71
|
+
* @task T12129 (gh#1217)
|
|
72
|
+
*/
|
|
73
|
+
export function isEmbeddingPipelineLoaded() {
|
|
74
|
+
return _ready;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Reset the module-level pipeline state. Test-only.
|
|
78
|
+
*
|
|
79
|
+
* @internal
|
|
80
|
+
* @task T12129 (gh#1217)
|
|
81
|
+
*/
|
|
82
|
+
export function __resetLocalEmbeddingStateForTests() {
|
|
83
|
+
_pipeline = null;
|
|
84
|
+
_ready = false;
|
|
85
|
+
_loadFailed = false;
|
|
86
|
+
_loadError = null;
|
|
37
87
|
}
|
|
38
88
|
/**
|
|
39
89
|
* Local embedding provider backed by @huggingface/transformers.
|
|
@@ -50,10 +100,35 @@ export class LocalEmbeddingProvider {
|
|
|
50
100
|
/** Number of dimensions produced — must match brain_embeddings vec0 table. */
|
|
51
101
|
dimensions = EMBEDDING_DIMENSIONS;
|
|
52
102
|
/**
|
|
53
|
-
* Whether
|
|
103
|
+
* Whether this provider CAN produce embeddings — not whether it already has.
|
|
104
|
+
*
|
|
105
|
+
* ## The deadlock this fixes (gh#1217)
|
|
106
|
+
*
|
|
107
|
+
* This previously returned `_ready`, the "pipeline has loaded" flag. But
|
|
108
|
+
* `_ready` is set only by `loadPipeline()`, which runs only inside
|
|
109
|
+
* {@link embed} — and every caller of `embed` first checks `isAvailable()`.
|
|
110
|
+
* In any fresh CLI process `_ready` is false, so nothing ever called
|
|
111
|
+
* `embed`, so `_ready` never became true. **The readiness check could only
|
|
112
|
+
* be satisfied by the call it guarded.**
|
|
113
|
+
*
|
|
114
|
+
* The observable result was total, silent inertness: `cleo brain
|
|
115
|
+
* maintenance` reported `{processed: 0, skipped: 0, errors: 0}` forever,
|
|
116
|
+
* `brain_embeddings` stayed empty after dozens of observations, new writes
|
|
117
|
+
* were never embedded, and every hybrid search quietly degraded to FTS5 —
|
|
118
|
+
* while `brain.embedding.enabled` was true and the provider itself was
|
|
119
|
+
* perfectly healthy when called directly.
|
|
120
|
+
*
|
|
121
|
+
* Availability is therefore capability: this provider can load its pipeline
|
|
122
|
+
* on demand, and says so until a load actually fails. The ~22 MB first-call
|
|
123
|
+
* download is the expected cost of the lazy design, not a reason to refuse
|
|
124
|
+
* to begin.
|
|
125
|
+
*
|
|
126
|
+
* @returns `true` unless loading the pipeline has already failed here.
|
|
127
|
+
*
|
|
128
|
+
* @task T12129 (gh#1217)
|
|
54
129
|
*/
|
|
55
130
|
isAvailable() {
|
|
56
|
-
return
|
|
131
|
+
return !_loadFailed;
|
|
57
132
|
}
|
|
58
133
|
/**
|
|
59
134
|
* Convert a single text string into a 384-dimension float vector.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embedding-local.js","sourceRoot":"","sources":["../../src/memory/embedding-local.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAE5D,4DAA4D;AAC5D,MAAM,UAAU,GAAG,yBAAyB,CAAC;AAE7C,6DAA6D;AAC7D,IAAI,SAAS,GAAyE,IAAI,CAAC;AAE3F,8DAA8D;AAC9D,IAAI,MAAM,GAAG,KAAK,CAAC;AAEnB
|
|
1
|
+
{"version":3,"file":"embedding-local.js","sourceRoot":"","sources":["../../src/memory/embedding-local.ts"],"names":[],"mappings":"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"}
|
|
@@ -44,6 +44,20 @@ export interface PopulateEmbeddingsResult {
|
|
|
44
44
|
processed: number;
|
|
45
45
|
skipped: number;
|
|
46
46
|
errors: number;
|
|
47
|
+
/**
|
|
48
|
+
* Why nothing was processed, when nothing was.
|
|
49
|
+
*
|
|
50
|
+
* A bare `{processed: 0, skipped: 0, errors: 0}` is indistinguishable
|
|
51
|
+
* between "everything is already embedded" and "embeddings are switched off
|
|
52
|
+
* or broken" — and for the whole of gh#1217 it silently meant the latter
|
|
53
|
+
* while `brain.embedding.enabled` was true. Reporting the reason is the
|
|
54
|
+
* difference between a no-op and an outage.
|
|
55
|
+
*
|
|
56
|
+
* Absent when work was actually attempted.
|
|
57
|
+
*
|
|
58
|
+
* @task T12129 (gh#1217)
|
|
59
|
+
*/
|
|
60
|
+
inactiveReason?: 'no-provider' | 'provider-load-failed' | 'no-brain-db';
|
|
47
61
|
}
|
|
48
62
|
/**
|
|
49
63
|
* Options for the embedding backfill pipeline.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observe.d.ts","sourceRoot":"","sources":["../../../src/memory/retrieval/observe.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAGV,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"observe.d.ts","sourceRoot":"","sources":["../../../src/memory/retrieval/observe.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAGV,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAsF1E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAsB,YAAY,CAChC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,kBAAkB,EAC1B,SAAS,CAAC,EAAE,yBAAyB,GACpC,OAAO,CAAC,kBAAkB,CAAC,CAkU7B;AAMD,+CAA+C;AAC/C,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf;;;;;;;;;;;;OAYG;IACH,cAAc,CAAC,EAAE,aAAa,GAAG,sBAAsB,GAAG,aAAa,CAAC;CACzE;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,yBAAyB;IACxC,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACvD;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,yBAAyB,GAClC,OAAO,CAAC,wBAAwB,CAAC,CAmFnC"}
|
|
@@ -6,11 +6,12 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { createHash } from 'node:crypto';
|
|
8
8
|
import { generateProjectHash } from '../../nexus/hash.js';
|
|
9
|
+
import { pushWarning } from '../../output.js';
|
|
9
10
|
import { worktreeScope } from '../../paths.js';
|
|
10
11
|
import { sessionExistsInTasksDb, sessionExistsInTasksDbFresh, } from '../../store/cross-db-cleanup.js';
|
|
11
12
|
import { getBrainAccessor } from '../../store/memory-accessor.js';
|
|
12
13
|
import { getDb } from '../../store/sqlite.js';
|
|
13
|
-
import { embedText, isEmbeddingAvailable } from '../brain-embedding.js';
|
|
14
|
+
import { embedText, ensureEmbeddingProvider, isEmbeddingAvailable } from '../brain-embedding.js';
|
|
14
15
|
import { addGraphEdge, upsertGraphNode } from '../graph-auto-populate.js';
|
|
15
16
|
import { computeObservationQuality } from '../quality-scoring.js';
|
|
16
17
|
// ============================================================================
|
|
@@ -305,23 +306,31 @@ export async function observeBrain(projectRoot, params, execution) {
|
|
|
305
306
|
// into a false failure for the already-durable observation.
|
|
306
307
|
return { id: row.id, type: row.type, createdAt: row.createdAt };
|
|
307
308
|
}
|
|
308
|
-
// Populate embedding
|
|
309
|
+
// Populate embedding for this observation (T5387).
|
|
309
310
|
// Fire-and-forget: embedding runs in the background so it never blocks the CLI.
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
311
|
+
// T12314: the availability check used to happen HERE, before the deferred
|
|
312
|
+
// provider registration had run, so a write early in a process saw no
|
|
313
|
+
// provider and silently skipped embedding the observation it had just
|
|
314
|
+
// stored. The check now happens inside the deferred work, after ensuring a
|
|
315
|
+
// provider exists — registration is free, and the model load is bounded by
|
|
316
|
+
// the same fire-and-forget contract as before.
|
|
317
|
+
setImmediate(() => {
|
|
318
|
+
void (async () => {
|
|
319
|
+
try {
|
|
320
|
+
if (!(await ensureEmbeddingProvider()))
|
|
321
|
+
return;
|
|
322
|
+
const vector = await embedText(text);
|
|
314
323
|
if (vector && nativeDb) {
|
|
315
324
|
nativeDb
|
|
316
325
|
.prepare('INSERT OR REPLACE INTO brain_embeddings (id, embedding) VALUES (?, ?)')
|
|
317
326
|
.run(id, Buffer.from(vector.buffer));
|
|
318
327
|
}
|
|
319
|
-
}
|
|
320
|
-
|
|
328
|
+
}
|
|
329
|
+
catch {
|
|
321
330
|
// Silently skip embedding failures — observation is already persisted
|
|
322
|
-
}
|
|
323
|
-
});
|
|
324
|
-
}
|
|
331
|
+
}
|
|
332
|
+
})();
|
|
333
|
+
});
|
|
325
334
|
// Regenerate memory bridge for high-value observation types (T5240).
|
|
326
335
|
// Only learning and decision types trigger bridge refresh to avoid excessive writes.
|
|
327
336
|
if (type === 'decision') {
|
|
@@ -374,14 +383,41 @@ export async function observeBrain(projectRoot, params, execution) {
|
|
|
374
383
|
* @task T142
|
|
375
384
|
*/
|
|
376
385
|
export async function populateEmbeddings(projectRoot, options) {
|
|
377
|
-
|
|
378
|
-
|
|
386
|
+
// gh#1217: this check used to be unsatisfiable. `isEmbeddingAvailable()`
|
|
387
|
+
// reported whether the lazy model had ALREADY loaded, and the only thing
|
|
388
|
+
// that loads it is an embed call — which this function is. So the backfill
|
|
389
|
+
// returned 0/0/0 on every run, forever, and said nothing about why.
|
|
390
|
+
// `isAvailable()` is now capability, so this gate means what it reads as:
|
|
391
|
+
// "is there a provider that could do this at all?"
|
|
392
|
+
// T12314: registration is scheduled by a setImmediate in the DB open path,
|
|
393
|
+
// so asking availability first races a registration this process cannot see.
|
|
394
|
+
// Registering costs nothing — the model download happens on first embed.
|
|
395
|
+
const registered = await ensureEmbeddingProvider();
|
|
396
|
+
if (!registered || !isEmbeddingAvailable()) {
|
|
397
|
+
pushWarning({
|
|
398
|
+
code: 'W_EMBEDDINGS_UNAVAILABLE',
|
|
399
|
+
severity: 'warn',
|
|
400
|
+
message: registered
|
|
401
|
+
? 'Embedding backfill did nothing: the embedding provider is registered but ' +
|
|
402
|
+
'reported itself unavailable, which means a previous load failed in this ' +
|
|
403
|
+
'process (commonly: no cached model and no network for the ~22 MB first-run ' +
|
|
404
|
+
'download). Hybrid search will fall back to FTS5.'
|
|
405
|
+
: 'Embedding backfill did nothing: no embedding provider could be constructed. ' +
|
|
406
|
+
'Check that brain.embedding.enabled is true and that the transformers runtime ' +
|
|
407
|
+
'is installed. Hybrid search will fall back to FTS5.',
|
|
408
|
+
});
|
|
409
|
+
return {
|
|
410
|
+
processed: 0,
|
|
411
|
+
skipped: 0,
|
|
412
|
+
errors: 0,
|
|
413
|
+
inactiveReason: registered ? 'provider-load-failed' : 'no-provider',
|
|
414
|
+
};
|
|
379
415
|
}
|
|
380
416
|
const { getBrainDb, getBrainNativeDb } = await import('../../store/memory-sqlite.js');
|
|
381
417
|
await getBrainDb(projectRoot);
|
|
382
418
|
const nativeDb = getBrainNativeDb(projectRoot);
|
|
383
419
|
if (!nativeDb) {
|
|
384
|
-
return { processed: 0, skipped: 0, errors: 0 };
|
|
420
|
+
return { processed: 0, skipped: 0, errors: 0, inactiveReason: 'no-brain-db' };
|
|
385
421
|
}
|
|
386
422
|
const batchSize = options?.batchSize ?? 50;
|
|
387
423
|
const { onProgress } = options ?? {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observe.js","sourceRoot":"","sources":["../../../src/memory/retrieval/observe.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAQzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EACL,sBAAsB,EACtB,2BAA2B,GAC5B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAElE,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAElE,+EAA+E;AAC/E,kCAAkC;AAClC,+EAA+E;AAE/E,wEAAwE;AACxE,MAAM,aAAa,GAA8D;IAC/E,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE;IAC9D,EAAE,QAAQ,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE;IACzE,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE;IACpE,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE;IACtE,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE;CACxE,CAAC;AAEF,uEAAuE;AACvE,SAAS,uBAAuB,CAAC,IAAY;IAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACjC,KAAK,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,aAAa,EAAE,CAAC;QAC/C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC5B,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,8EAA8E;AAC9E,IAAI,UAAU,GAAG,CAAC,CAAC;AAEnB,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E;;;;;;;;;;;;GAYG;AACH,KAAK,UAAU,yBAAyB,CACtC,WAAmB,EACnB,aAAqB,EACrB,QAAsD;IAEtD,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;IAClE,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAErD,IAAI,CAAC,OAAO;QAAE,OAAO;IAErB,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC;IACxC,IAAI,CAAC,MAAM;QAAE,OAAO;IAEpB,MAAM,QAAQ,CAAC,OAAO,CAAC;QACrB,UAAU,EAAE,aAAa;QACzB,QAAQ,EAAE,aAAa;QACvB,MAAM;QACN,QAAQ,EAAE,aAAa;KACxB,CAAC,CAAC;AACL,CAAC;AAED,+EAA+E;AAC/E,8BAA8B;AAC9B,+EAA+E;AAE/E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,WAAmB,EACnB,MAA0B,EAC1B,SAAqC;IAErC,IAAI,SAAS,EAAE,CAAC;QACd,SAAS,CAAC,YAAY,EAAE,CAAC;QACzB,IAAI,WAAW,KAAK,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;YACnD,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;QAC5E,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;YAC5C,MAAM,IAAI,KAAK,CACb,gFAAgF,CACjF,CAAC;QACJ,CAAC;QACD,MAAM,SAAS,GAAG,aAAa,CAAC,QAAQ,EAAE,EAAE,SAAS,CAAC;QACtD,IAAI,SAAS,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;QAC/E,CAAC;QACD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;YACzC,OAAO,aAAa,CAAC,GAAG,CACtB;gBACE,YAAY,EAAE,SAAS,CAAC,QAAQ,CAAC,WAAW;gBAC5C,WAAW,EAAE,mBAAmB,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC;gBAChE,SAAS;aACV,EACD,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,QAAQ,EAAE,SAAS,CAAC,CACrD,CAAC;QACJ,CAAC;IACH,CAAC;IACD,MAAM,EACJ,IAAI,EACJ,KAAK,EAAE,UAAU,EACjB,IAAI,EAAE,SAAS,EACf,OAAO,EACP,eAAe,EACf,UAAU,EACV,KAAK,EACL,gBAAgB,EAAE,qBAAqB,EACvC,QAAQ,EACR,cAAc,EACd,MAAM,EACN,eAAe,EACf,SAAS,EACT,UAAU,GACX,GAAG,MAAM,CAAC;IAEX,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,CAAC;IAED,sEAAsE;IACtE,wEAAwE;IACxE,yEAAyE;IACzE,uEAAuE;IACvE,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,IAAI,wBAAwB,GAAG,eAAe,CAAC;QAC/C,IAAI,eAAe,EAAE,CAAC;YACpB,IAAI,aAAkC,CAAC;YACvC,IAAI,OAAO,GAA6C,IAAI,CAAC;YAC7D,IAAI,CAAC;gBACH,OAAO,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,CAAC;gBACnC,IAAI,MAAM,sBAAsB,CAAC,eAAe,EAAE,OAAO,CAAC,EAAE,CAAC;oBAC3D,aAAa,GAAG,IAAI,CAAC;gBACvB,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,8DAA8D;YAChE,CAAC;YACD,IAAI,aAAa,KAAK,IAAI,EAAE,CAAC;gBAC3B,IAAI,CAAC;oBACH,mEAAmE;oBACnE,iEAAiE;oBACjE,aAAa,GAAG,MAAM,2BAA2B,CAAC,eAAe,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;gBAC3F,CAAC;gBAAC,MAAM,CAAC;oBACP,uEAAuE;gBACzE,CAAC;YACH,CAAC;YACD,IAAI,aAAa,KAAK,KAAK;gBAAE,wBAAwB,GAAG,SAAS,CAAC;QACpE,CAAC;QACD,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;QACxE,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC;YACrC,IAAI,EAAE,SAAS;YACf,WAAW;YACX,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,eAAe,EAAE,wBAAwB,EAAE;SACjE,CAAC,CAAC;QACH,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,kCAAkC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACnE,CAAC;QACD,OAAO,MAAM,CAAC,MAAM,CAAC;IACvB,CAAC;IAED,yEAAyE;IACzE,2EAA2E;IAC3E,wEAAwE;IACxE,gEAAgE;IAChE,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;QAClE,MAAM,KAAK,GAAG,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC/C,MAAM,kBAAkB,GACtB,qBAAqB;YACrB,CAAC,UAAU,KAAK,QAAQ;gBACtB,CAAC,CAAC,OAAO;gBACT,CAAC,CAAC,UAAU,KAAK,iBAAiB;oBAChC,CAAC,CAAC,cAAc;oBAChB,CAAC,CAAC,OAAO,CAAC,CAAC;QACjB,MAAM,UAAU,GAAG,MAAM,eAAe,CAAC,WAAW,EAAE;YACpD,IAAI;YACJ,KAAK;YACL,UAAU,EAAE,UAAU;YACtB,IAAI,EAAE,OAAO;YACb,UAAU,EAAE,GAAG;YACf,MAAM,EAAE,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY;YACzD,eAAe;YACf,gBAAgB,EAAE,kBAAkB;YACpC,OAAO,EAAE,kBAAkB,KAAK,OAAO,IAAI,kBAAkB,KAAK,cAAc;SACjF,CAAC,CAAC;QACH,IAAI,UAAU,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YACnC,iEAAiE;YACjE,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACpE,OAAO;gBACL,EAAE,EAAE,UAAU,CAAC,EAAE,IAAI,UAAU,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;gBACxD,IAAI,EAAE,SAAS,IAAI,aAAa;gBAChC,SAAS,EAAE,GAAG;aACf,CAAC;QACJ,CAAC;QACD,8EAA8E;IAChF,CAAC;IAED,MAAM,IAAI,GAAG,SAAS,IAAI,uBAAuB,CAAC,IAAI,CAAC,CAAC;IACxD,MAAM,KAAK,GAAG,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEpE,gDAAgD;IAChD,sDAAsD;IACtD,yFAAyF;IACzF,4EAA4E;IAC5E,8DAA8D;IAC9D,MAAM,wBAAwB,GAC5B,qBAAqB;QACrB,CAAC,UAAU,KAAK,QAAQ;YACtB,CAAC,CAAC,OAAO;YACT,CAAC,CAAC,UAAU,KAAK,iBAAiB;gBAChC,CAAC,CAAC,cAAc;gBAChB,CAAC,CAAC,OAAO,CAAC,CAAC;IAEjB,iFAAiF;IACjF,8DAA8D;IAC9D,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IAChD,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC;IAC/C,MAAM,mBAAmB,GAAG,eAAe,CAAC,IAAI,IAAI,CAAC,CAAC;IACtD,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC,CAAC;IACpE,MAAM,UAAU,GAAoB,mBAAmB,IAAI,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;IAC5F,MAAM,UAAU,GAAG,UAAmB,CAAC;IACvC,MAAM,QAAQ,GACZ,wBAAwB,KAAK,OAAO,IAAI,wBAAwB,KAAK,cAAc,CAAC;IAEtF,qFAAqF;IACrF,uFAAuF;IACvF,yEAAyE;IACzE,MAAM,WAAW,GAAG,UAAU,CAAC,QAAQ,CAAC;SACrC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;SACjC,MAAM,CAAC,KAAK,CAAC;SACb,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEhB,qEAAqE;IACrE,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,8BAA8B,CAAC,CAAC;IAC1E,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,MAAM,QAAQ,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAE/C,0EAA0E;IAC1E,+EAA+E;IAC/E,MAAM,cAAc,GAAG,eAAe,IAAI,IAAI,CAAC;IAE/C,sFAAsF;IACtF,MAAM,YAAY,GAAG,yBAAyB,CAAC;QAC7C,IAAI;QACJ,KAAK;QACL,gBAAgB,EAAE,wBAAwB;QAC1C,UAAU;KACX,CAAC,CAAC;IAEH,gFAAgF;IAChF,iFAAiF;IACjF,MAAM,EAAE,GAAG,SAAS,EAAE,UAAU;QAC9B,CAAC,CAAC,SAAS,UAAU,CAAC,QAAQ,CAAC;aAC1B,MAAM,CACL,IAAI,CAAC,SAAS,CAAC;YACb,SAAS,CAAC,QAAQ,CAAC,SAAS;YAC5B,SAAS,CAAC,QAAQ,CAAC,SAAS;YAC5B,SAAS,CAAC,QAAQ,CAAC,cAAc;YACjC,SAAS,CAAC,UAAU,CAAC,YAAY;SAClC,CAAC,CACH;aACA,MAAM,CAAC,KAAK,CAAC,EAAE;QACpB,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;IACzE,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,WAAW,CAAC,CAAC;IACrD,SAAS,EAAE,YAAY,EAAE,CAAC;IAE1B,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,cAAc,CACvC;QACE,EAAE;QACF,IAAI;QACJ,KAAK;QACL,SAAS,EAAE,IAAI;QACf,WAAW;QACX,OAAO,EAAE,OAAO,IAAI,IAAI;QACxB,eAAe,EAAE,cAAc;QAC/B,UAAU,EAAE,UAAU,IAAI,OAAO;QACjC,KAAK,EAAE,KAAK,IAAI,IAAI;QACpB,YAAY;QACZ,SAAS,EAAE,GAAG;QACd,6DAA6D;QAC7D,UAAU;QACV,UAAU;QACV,gBAAgB,EAAE,wBAAwB;QAC1C,QAAQ;QACR,sDAAsD;QACtD,GAAG,CAAC,cAAc,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC;YAC7C,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE;YACrD,CAAC,CAAC,EAAE,CAAC;QACP,kCAAkC;QAClC,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrC,GAAG,CAAC,eAAe,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC;YAC/C,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE;YACtD,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,SAAS,EAAE,UAAU;YACvB,CAAC,CAAC;gBACE,eAAe,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI;gBAC/E,MAAM,EAAE,MAAM,IAAI,IAAI;gBACtB,eAAe,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI;aAClF;YACH,CAAC,CAAC,EAAE,CAAC;KACR,EACD,SAAS,CACV,CAAC;IAEF,IAAI,SAAS,EAAE,CAAC;QACd,8EAA8E;QAC9E,+EAA+E;QAC/E,4DAA4D;QAC5D,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC;IAClE,CAAC;IAED,uDAAuD;IACvD,gFAAgF;IAChF,IAAI,oBAAoB,EAAE,EAAE,CAAC;QAC3B,YAAY,CAAC,GAAG,EAAE;YAChB,SAAS,CAAC,IAAI,CAAC;iBACZ,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;gBACf,IAAI,MAAM,IAAI,QAAQ,EAAE,CAAC;oBACvB,QAAQ;yBACL,OAAO,CAAC,uEAAuE,CAAC;yBAChF,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;gBACzC,CAAC;YACH,CAAC,CAAC;iBACD,KAAK,CAAC,GAAG,EAAE;gBACV,sEAAsE;YACxE,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACL,CAAC;IAED,qEAAqE;IACrE,qFAAqF;IACrF,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;QACxB,MAAM,CAAC,qBAAqB,CAAC;aAC1B,IAAI,CAAC,CAAC,EAAE,mBAAmB,EAAE,EAAE,EAAE,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;aACnE,KAAK,CAAC,GAAG,EAAE;YACV,0CAA0C;QAC5C,CAAC,CAAC,CAAC;IACP,CAAC;IAED,uFAAuF;IACvF,qFAAqF;IACrF,IAAI,cAAc,EAAE,CAAC;QACnB,yBAAyB,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YAClE,iCAAiC;QACnC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,6EAA6E;IAC7E,IAAI,CAAC;QACH,MAAM,eAAe,CACnB,WAAW,EACX,eAAe,GAAG,CAAC,EAAE,EAAE,EACvB,aAAa,EACb,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,EAC3B,GAAG,CAAC,YAAY,IAAI,GAAG,EACvB,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,KAAK,EAC1B,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,SAAS,EAAE,CAC9D,CAAC;QAEF,yEAAyE;QACzE,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,eAAe,CACnB,WAAW,EACX,WAAW,cAAc,EAAE,EAC3B,SAAS,EACT,cAAc,EACd,GAAG,EACH,EAAE,CACH,CAAC;YACF,MAAM,YAAY,CAChB,WAAW,EACX,eAAe,GAAG,CAAC,EAAE,EAAE,EACvB,WAAW,cAAc,EAAE,EAC3B,aAAa,EACb,GAAG,EACH,cAAc,CACf,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,sEAAsE;IACxE,CAAC;IAED,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,SAAS,EAAE,GAAG,CAAC,SAAS;KACzB,CAAC;AACJ,CAAC;AAmCD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,WAAmB,EACnB,OAAmC;IAEnC,IAAI,CAAC,oBAAoB,EAAE,EAAE,CAAC;QAC5B,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IACjD,CAAC;IAED,MAAM,EAAE,UAAU,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,8BAA8B,CAAC,CAAC;IACtF,MAAM,UAAU,CAAC,WAAW,CAAC,CAAC;IAC9B,MAAM,QAAQ,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAE/C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IACjD,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,IAAI,EAAE,CAAC;IAC3C,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,IAAI,EAAE,CAAC;IACrC,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,uCAAuC;IACvC,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,4BAA4B,CAAC,CAAC;IAChE,MAAM,IAAI,GAAG,QAAQ,CACnB,QAAQ,CAAC,OAAO,CAAC;;;;;;GAMlB,CAAC,CACD,CAAC;IAEF,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;IAC1B,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC;QAChD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC;QAC3C,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;YACxB,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;gBAC3D,IAAI,MAAM,EAAE,CAAC;oBACX,QAAQ;yBACL,OAAO,CAAC,uEAAuE,CAAC;yBAChF,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;oBAC3C,SAAS,EAAE,CAAC;gBACd,CAAC;qBAAM,CAAC;oBACN,OAAO,EAAE,CAAC;gBACZ,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,EAAE,CAAC;YACX,CAAC;YACD,SAAS,EAAE,CAAC;YACZ,UAAU,EAAE,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AACxC,CAAC"}
|
|
1
|
+
{"version":3,"file":"observe.js","sourceRoot":"","sources":["../../../src/memory/retrieval/observe.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAQzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EACL,sBAAsB,EACtB,2BAA2B,GAC5B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAElE,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AACjG,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAElE,+EAA+E;AAC/E,kCAAkC;AAClC,+EAA+E;AAE/E,wEAAwE;AACxE,MAAM,aAAa,GAA8D;IAC/E,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE;IAC9D,EAAE,QAAQ,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE;IACzE,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE;IACpE,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE;IACtE,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE;CACxE,CAAC;AAEF,uEAAuE;AACvE,SAAS,uBAAuB,CAAC,IAAY;IAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACjC,KAAK,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,aAAa,EAAE,CAAC;QAC/C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC5B,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,8EAA8E;AAC9E,IAAI,UAAU,GAAG,CAAC,CAAC;AAEnB,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E;;;;;;;;;;;;GAYG;AACH,KAAK,UAAU,yBAAyB,CACtC,WAAmB,EACnB,aAAqB,EACrB,QAAsD;IAEtD,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;IAClE,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAErD,IAAI,CAAC,OAAO;QAAE,OAAO;IAErB,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC;IACxC,IAAI,CAAC,MAAM;QAAE,OAAO;IAEpB,MAAM,QAAQ,CAAC,OAAO,CAAC;QACrB,UAAU,EAAE,aAAa;QACzB,QAAQ,EAAE,aAAa;QACvB,MAAM;QACN,QAAQ,EAAE,aAAa;KACxB,CAAC,CAAC;AACL,CAAC;AAED,+EAA+E;AAC/E,8BAA8B;AAC9B,+EAA+E;AAE/E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,WAAmB,EACnB,MAA0B,EAC1B,SAAqC;IAErC,IAAI,SAAS,EAAE,CAAC;QACd,SAAS,CAAC,YAAY,EAAE,CAAC;QACzB,IAAI,WAAW,KAAK,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;YACnD,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;QAC5E,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;YAC5C,MAAM,IAAI,KAAK,CACb,gFAAgF,CACjF,CAAC;QACJ,CAAC;QACD,MAAM,SAAS,GAAG,aAAa,CAAC,QAAQ,EAAE,EAAE,SAAS,CAAC;QACtD,IAAI,SAAS,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;QAC/E,CAAC;QACD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;YACzC,OAAO,aAAa,CAAC,GAAG,CACtB;gBACE,YAAY,EAAE,SAAS,CAAC,QAAQ,CAAC,WAAW;gBAC5C,WAAW,EAAE,mBAAmB,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC;gBAChE,SAAS;aACV,EACD,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,QAAQ,EAAE,SAAS,CAAC,CACrD,CAAC;QACJ,CAAC;IACH,CAAC;IACD,MAAM,EACJ,IAAI,EACJ,KAAK,EAAE,UAAU,EACjB,IAAI,EAAE,SAAS,EACf,OAAO,EACP,eAAe,EACf,UAAU,EACV,KAAK,EACL,gBAAgB,EAAE,qBAAqB,EACvC,QAAQ,EACR,cAAc,EACd,MAAM,EACN,eAAe,EACf,SAAS,EACT,UAAU,GACX,GAAG,MAAM,CAAC;IAEX,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,CAAC;IAED,sEAAsE;IACtE,wEAAwE;IACxE,yEAAyE;IACzE,uEAAuE;IACvE,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,IAAI,wBAAwB,GAAG,eAAe,CAAC;QAC/C,IAAI,eAAe,EAAE,CAAC;YACpB,IAAI,aAAkC,CAAC;YACvC,IAAI,OAAO,GAA6C,IAAI,CAAC;YAC7D,IAAI,CAAC;gBACH,OAAO,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,CAAC;gBACnC,IAAI,MAAM,sBAAsB,CAAC,eAAe,EAAE,OAAO,CAAC,EAAE,CAAC;oBAC3D,aAAa,GAAG,IAAI,CAAC;gBACvB,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,8DAA8D;YAChE,CAAC;YACD,IAAI,aAAa,KAAK,IAAI,EAAE,CAAC;gBAC3B,IAAI,CAAC;oBACH,mEAAmE;oBACnE,iEAAiE;oBACjE,aAAa,GAAG,MAAM,2BAA2B,CAAC,eAAe,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;gBAC3F,CAAC;gBAAC,MAAM,CAAC;oBACP,uEAAuE;gBACzE,CAAC;YACH,CAAC;YACD,IAAI,aAAa,KAAK,KAAK;gBAAE,wBAAwB,GAAG,SAAS,CAAC;QACpE,CAAC;QACD,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;QACxE,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC;YACrC,IAAI,EAAE,SAAS;YACf,WAAW;YACX,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,eAAe,EAAE,wBAAwB,EAAE;SACjE,CAAC,CAAC;QACH,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,kCAAkC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACnE,CAAC;QACD,OAAO,MAAM,CAAC,MAAM,CAAC;IACvB,CAAC;IAED,yEAAyE;IACzE,2EAA2E;IAC3E,wEAAwE;IACxE,gEAAgE;IAChE,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;QAClE,MAAM,KAAK,GAAG,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC/C,MAAM,kBAAkB,GACtB,qBAAqB;YACrB,CAAC,UAAU,KAAK,QAAQ;gBACtB,CAAC,CAAC,OAAO;gBACT,CAAC,CAAC,UAAU,KAAK,iBAAiB;oBAChC,CAAC,CAAC,cAAc;oBAChB,CAAC,CAAC,OAAO,CAAC,CAAC;QACjB,MAAM,UAAU,GAAG,MAAM,eAAe,CAAC,WAAW,EAAE;YACpD,IAAI;YACJ,KAAK;YACL,UAAU,EAAE,UAAU;YACtB,IAAI,EAAE,OAAO;YACb,UAAU,EAAE,GAAG;YACf,MAAM,EAAE,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY;YACzD,eAAe;YACf,gBAAgB,EAAE,kBAAkB;YACpC,OAAO,EAAE,kBAAkB,KAAK,OAAO,IAAI,kBAAkB,KAAK,cAAc;SACjF,CAAC,CAAC;QACH,IAAI,UAAU,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YACnC,iEAAiE;YACjE,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACpE,OAAO;gBACL,EAAE,EAAE,UAAU,CAAC,EAAE,IAAI,UAAU,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;gBACxD,IAAI,EAAE,SAAS,IAAI,aAAa;gBAChC,SAAS,EAAE,GAAG;aACf,CAAC;QACJ,CAAC;QACD,8EAA8E;IAChF,CAAC;IAED,MAAM,IAAI,GAAG,SAAS,IAAI,uBAAuB,CAAC,IAAI,CAAC,CAAC;IACxD,MAAM,KAAK,GAAG,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEpE,gDAAgD;IAChD,sDAAsD;IACtD,yFAAyF;IACzF,4EAA4E;IAC5E,8DAA8D;IAC9D,MAAM,wBAAwB,GAC5B,qBAAqB;QACrB,CAAC,UAAU,KAAK,QAAQ;YACtB,CAAC,CAAC,OAAO;YACT,CAAC,CAAC,UAAU,KAAK,iBAAiB;gBAChC,CAAC,CAAC,cAAc;gBAChB,CAAC,CAAC,OAAO,CAAC,CAAC;IAEjB,iFAAiF;IACjF,8DAA8D;IAC9D,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IAChD,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC;IAC/C,MAAM,mBAAmB,GAAG,eAAe,CAAC,IAAI,IAAI,CAAC,CAAC;IACtD,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC,CAAC;IACpE,MAAM,UAAU,GAAoB,mBAAmB,IAAI,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;IAC5F,MAAM,UAAU,GAAG,UAAmB,CAAC;IACvC,MAAM,QAAQ,GACZ,wBAAwB,KAAK,OAAO,IAAI,wBAAwB,KAAK,cAAc,CAAC;IAEtF,qFAAqF;IACrF,uFAAuF;IACvF,yEAAyE;IACzE,MAAM,WAAW,GAAG,UAAU,CAAC,QAAQ,CAAC;SACrC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;SACjC,MAAM,CAAC,KAAK,CAAC;SACb,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEhB,qEAAqE;IACrE,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,8BAA8B,CAAC,CAAC;IAC1E,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,MAAM,QAAQ,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAE/C,0EAA0E;IAC1E,+EAA+E;IAC/E,MAAM,cAAc,GAAG,eAAe,IAAI,IAAI,CAAC;IAE/C,sFAAsF;IACtF,MAAM,YAAY,GAAG,yBAAyB,CAAC;QAC7C,IAAI;QACJ,KAAK;QACL,gBAAgB,EAAE,wBAAwB;QAC1C,UAAU;KACX,CAAC,CAAC;IAEH,gFAAgF;IAChF,iFAAiF;IACjF,MAAM,EAAE,GAAG,SAAS,EAAE,UAAU;QAC9B,CAAC,CAAC,SAAS,UAAU,CAAC,QAAQ,CAAC;aAC1B,MAAM,CACL,IAAI,CAAC,SAAS,CAAC;YACb,SAAS,CAAC,QAAQ,CAAC,SAAS;YAC5B,SAAS,CAAC,QAAQ,CAAC,SAAS;YAC5B,SAAS,CAAC,QAAQ,CAAC,cAAc;YACjC,SAAS,CAAC,UAAU,CAAC,YAAY;SAClC,CAAC,CACH;aACA,MAAM,CAAC,KAAK,CAAC,EAAE;QACpB,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;IACzE,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,WAAW,CAAC,CAAC;IACrD,SAAS,EAAE,YAAY,EAAE,CAAC;IAE1B,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,cAAc,CACvC;QACE,EAAE;QACF,IAAI;QACJ,KAAK;QACL,SAAS,EAAE,IAAI;QACf,WAAW;QACX,OAAO,EAAE,OAAO,IAAI,IAAI;QACxB,eAAe,EAAE,cAAc;QAC/B,UAAU,EAAE,UAAU,IAAI,OAAO;QACjC,KAAK,EAAE,KAAK,IAAI,IAAI;QACpB,YAAY;QACZ,SAAS,EAAE,GAAG;QACd,6DAA6D;QAC7D,UAAU;QACV,UAAU;QACV,gBAAgB,EAAE,wBAAwB;QAC1C,QAAQ;QACR,sDAAsD;QACtD,GAAG,CAAC,cAAc,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC;YAC7C,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE;YACrD,CAAC,CAAC,EAAE,CAAC;QACP,kCAAkC;QAClC,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrC,GAAG,CAAC,eAAe,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC;YAC/C,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE;YACtD,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,SAAS,EAAE,UAAU;YACvB,CAAC,CAAC;gBACE,eAAe,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI;gBAC/E,MAAM,EAAE,MAAM,IAAI,IAAI;gBACtB,eAAe,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI;aAClF;YACH,CAAC,CAAC,EAAE,CAAC;KACR,EACD,SAAS,CACV,CAAC;IAEF,IAAI,SAAS,EAAE,CAAC;QACd,8EAA8E;QAC9E,+EAA+E;QAC/E,4DAA4D;QAC5D,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC;IAClE,CAAC;IAED,mDAAmD;IACnD,gFAAgF;IAChF,0EAA0E;IAC1E,sEAAsE;IACtE,sEAAsE;IACtE,2EAA2E;IAC3E,2EAA2E;IAC3E,+CAA+C;IAC/C,YAAY,CAAC,GAAG,EAAE;QAChB,KAAK,CAAC,KAAK,IAAI,EAAE;YACf,IAAI,CAAC;gBACH,IAAI,CAAC,CAAC,MAAM,uBAAuB,EAAE,CAAC;oBAAE,OAAO;gBAC/C,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;gBACrC,IAAI,MAAM,IAAI,QAAQ,EAAE,CAAC;oBACvB,QAAQ;yBACL,OAAO,CAAC,uEAAuE,CAAC;yBAChF,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;gBACzC,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,sEAAsE;YACxE,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,qEAAqE;IACrE,qFAAqF;IACrF,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;QACxB,MAAM,CAAC,qBAAqB,CAAC;aAC1B,IAAI,CAAC,CAAC,EAAE,mBAAmB,EAAE,EAAE,EAAE,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;aACnE,KAAK,CAAC,GAAG,EAAE;YACV,0CAA0C;QAC5C,CAAC,CAAC,CAAC;IACP,CAAC;IAED,uFAAuF;IACvF,qFAAqF;IACrF,IAAI,cAAc,EAAE,CAAC;QACnB,yBAAyB,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YAClE,iCAAiC;QACnC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,6EAA6E;IAC7E,IAAI,CAAC;QACH,MAAM,eAAe,CACnB,WAAW,EACX,eAAe,GAAG,CAAC,EAAE,EAAE,EACvB,aAAa,EACb,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,EAC3B,GAAG,CAAC,YAAY,IAAI,GAAG,EACvB,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,KAAK,EAC1B,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,SAAS,EAAE,CAC9D,CAAC;QAEF,yEAAyE;QACzE,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,eAAe,CACnB,WAAW,EACX,WAAW,cAAc,EAAE,EAC3B,SAAS,EACT,cAAc,EACd,GAAG,EACH,EAAE,CACH,CAAC;YACF,MAAM,YAAY,CAChB,WAAW,EACX,eAAe,GAAG,CAAC,EAAE,EAAE,EACvB,WAAW,cAAc,EAAE,EAC3B,aAAa,EACb,GAAG,EACH,cAAc,CACf,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,sEAAsE;IACxE,CAAC;IAED,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,SAAS,EAAE,GAAG,CAAC,SAAS;KACzB,CAAC;AACJ,CAAC;AAiDD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,WAAmB,EACnB,OAAmC;IAEnC,yEAAyE;IACzE,yEAAyE;IACzE,2EAA2E;IAC3E,oEAAoE;IACpE,0EAA0E;IAC1E,mDAAmD;IACnD,2EAA2E;IAC3E,6EAA6E;IAC7E,yEAAyE;IACzE,MAAM,UAAU,GAAG,MAAM,uBAAuB,EAAE,CAAC;IACnD,IAAI,CAAC,UAAU,IAAI,CAAC,oBAAoB,EAAE,EAAE,CAAC;QAC3C,WAAW,CAAC;YACV,IAAI,EAAE,0BAA0B;YAChC,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,UAAU;gBACjB,CAAC,CAAC,2EAA2E;oBAC3E,0EAA0E;oBAC1E,6EAA6E;oBAC7E,kDAAkD;gBACpD,CAAC,CAAC,8EAA8E;oBAC9E,+EAA+E;oBAC/E,qDAAqD;SAC1D,CAAC,CAAC;QACH,OAAO;YACL,SAAS,EAAE,CAAC;YACZ,OAAO,EAAE,CAAC;YACV,MAAM,EAAE,CAAC;YACT,cAAc,EAAE,UAAU,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,aAAa;SACpE,CAAC;IACJ,CAAC;IAED,MAAM,EAAE,UAAU,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,8BAA8B,CAAC,CAAC;IACtF,MAAM,UAAU,CAAC,WAAW,CAAC,CAAC;IAC9B,MAAM,QAAQ,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAE/C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,cAAc,EAAE,aAAa,EAAE,CAAC;IAChF,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,IAAI,EAAE,CAAC;IAC3C,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,IAAI,EAAE,CAAC;IACrC,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,uCAAuC;IACvC,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,4BAA4B,CAAC,CAAC;IAChE,MAAM,IAAI,GAAG,QAAQ,CACnB,QAAQ,CAAC,OAAO,CAAC;;;;;;GAMlB,CAAC,CACD,CAAC;IAEF,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;IAC1B,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC;QAChD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC;QAC3C,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;YACxB,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;gBAC3D,IAAI,MAAM,EAAE,CAAC;oBACX,QAAQ;yBACL,OAAO,CAAC,uEAAuE,CAAC;yBAChF,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;oBAC3C,SAAS,EAAE,CAAC;gBACd,CAAC;qBAAM,CAAC;oBACN,OAAO,EAAE,CAAC;gBACZ,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,EAAE,CAAC;YACX,CAAC;YACD,SAAS,EAAE,CAAC;YACZ,UAAU,EAAE,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AACxC,CAAC"}
|
|
@@ -65,6 +65,19 @@ export interface ExtractionResult {
|
|
|
65
65
|
/** Bytes freed by deleting the JSONL (0 if not deleted or dry-run). */
|
|
66
66
|
bytesFreed: number;
|
|
67
67
|
}
|
|
68
|
+
/**
|
|
69
|
+
* System prompt for transcript extraction.
|
|
70
|
+
*
|
|
71
|
+
* Exported so its agreement with {@link ExtractionResponseSchema} is testable.
|
|
72
|
+
* gh#1219: the prompt and the schema disagreed — the prompt asked for an empty
|
|
73
|
+
* ARRAY while the schema required the object `{memories: [...]}` — and nothing
|
|
74
|
+
* in the build could notice, because the only thing that reconciles them is a
|
|
75
|
+
* model's interpretation at run time. The tests in
|
|
76
|
+
* `__tests__/transcript-extraction-gh1219.test.ts` are what keep them aligned.
|
|
77
|
+
*
|
|
78
|
+
* @task T12133 (gh#1219)
|
|
79
|
+
*/
|
|
80
|
+
export declare const EXTRACTION_SYSTEM_PROMPT = "You are extracting durable knowledge from a Claude coding session transcript.\nExtract ONLY high-value items that a developer would want to remember across sessions.\nReject noise: greetings, meta-commentary, transient state, tool output without findings.\n\nFor each extraction provide:\n- type: decision|pattern|learning|constraint|correction\n- content: the knowledge itself (<=500 chars, declarative form)\n- importance: 0.0-1.0 (only >=0.6 will be stored)\n- entities: code symbols, files, concepts mentioned\n- justification: why worth remembering (<=200 chars)\n\nType definitions:\n- decision: architectural/design choice with rationale (\"We chose X because Y\")\n- pattern: recurring approach that works (\"When X, do Y because Z\")\n- learning: factual knowledge gained (\"X depends on Y via Z\")\n- constraint: rule/limitation discovered (\"X must always Y\")\n- correction: anti-pattern to avoid (\"Avoid X; use Z instead\")\n\nOUTPUT FORMAT (gh#1219 \u2014 this must agree with the schema, or nothing is stored):\nRespond with a single JSON object of exactly this shape:\n {\"memories\": [ {type, content, importance, entities, justification}, ... ]}\nThe top level is an OBJECT with one key, \"memories\". It is NOT a bare array.\nWhen nothing is worth remembering, return {\"memories\": []} \u2014 an empty array\nINSIDE the object, never a bare [] and never a different key name.\nMaximum 7 entries.";
|
|
68
81
|
/**
|
|
69
82
|
* Extract memories from a single Claude session JSONL file.
|
|
70
83
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transcript-extractor.d.ts","sourceRoot":"","sources":["../../src/memory/transcript-extractor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAgCH,oEAAoE;AACpE,MAAM,WAAW,wBAAwB;IACvC,+CAA+C;IAC/C,cAAc,EAAE,MAAM,CAAC;IACvB,6CAA6C;IAC7C,WAAW,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,6DAA6D;AAC7D,MAAM,WAAW,gBAAgB;IAC/B,wCAAwC;IACxC,cAAc,EAAE,MAAM,CAAC;IACvB,0CAA0C;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,6CAA6C;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,2CAA2C;IAC3C,cAAc,EAAE,MAAM,CAAC;IACvB,4DAA4D;IAC5D,WAAW,EAAE,MAAM,CAAC;IACpB,oEAAoE;IACpE,aAAa,EAAE,MAAM,CAAC;IACtB,0DAA0D;IAC1D,OAAO,EAAE,OAAO,CAAC;IACjB,8CAA8C;IAC9C,MAAM,EAAE,OAAO,CAAC;IAChB,0BAA0B;IAC1B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,uEAAuE;IACvE,UAAU,EAAE,MAAM,CAAC;CACpB;
|
|
1
|
+
{"version":3,"file":"transcript-extractor.d.ts","sourceRoot":"","sources":["../../src/memory/transcript-extractor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAgCH,oEAAoE;AACpE,MAAM,WAAW,wBAAwB;IACvC,+CAA+C;IAC/C,cAAc,EAAE,MAAM,CAAC;IACvB,6CAA6C;IAC7C,WAAW,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,6DAA6D;AAC7D,MAAM,WAAW,gBAAgB;IAC/B,wCAAwC;IACxC,cAAc,EAAE,MAAM,CAAC;IACvB,0CAA0C;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,6CAA6C;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,2CAA2C;IAC3C,cAAc,EAAE,MAAM,CAAC;IACvB,4DAA4D;IAC5D,WAAW,EAAE,MAAM,CAAC;IACpB,oEAAoE;IACpE,aAAa,EAAE,MAAM,CAAC;IACtB,0DAA0D;IAC1D,OAAO,EAAE,OAAO,CAAC;IACjB,8CAA8C;IAC9C,MAAM,EAAE,OAAO,CAAC;IAChB,0BAA0B;IAC1B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,uEAAuE;IACvE,UAAU,EAAE,MAAM,CAAC;CACpB;AAMD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,wBAAwB,84CAwBlB,CAAC;AAMpB;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,gBAAgB,CAAC,CAiK3B;AAMD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CA2EzD;AAiND;;;;;;;;GAQG;AACH,wBAAsB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAKlF"}
|
|
@@ -43,7 +43,19 @@ const ExtractionResponseSchema = z.object({
|
|
|
43
43
|
// ---------------------------------------------------------------------------
|
|
44
44
|
// Prompt
|
|
45
45
|
// ---------------------------------------------------------------------------
|
|
46
|
-
|
|
46
|
+
/**
|
|
47
|
+
* System prompt for transcript extraction.
|
|
48
|
+
*
|
|
49
|
+
* Exported so its agreement with {@link ExtractionResponseSchema} is testable.
|
|
50
|
+
* gh#1219: the prompt and the schema disagreed — the prompt asked for an empty
|
|
51
|
+
* ARRAY while the schema required the object `{memories: [...]}` — and nothing
|
|
52
|
+
* in the build could notice, because the only thing that reconciles them is a
|
|
53
|
+
* model's interpretation at run time. The tests in
|
|
54
|
+
* `__tests__/transcript-extraction-gh1219.test.ts` are what keep them aligned.
|
|
55
|
+
*
|
|
56
|
+
* @task T12133 (gh#1219)
|
|
57
|
+
*/
|
|
58
|
+
export const EXTRACTION_SYSTEM_PROMPT = `You are extracting durable knowledge from a Claude coding session transcript.
|
|
47
59
|
Extract ONLY high-value items that a developer would want to remember across sessions.
|
|
48
60
|
Reject noise: greetings, meta-commentary, transient state, tool output without findings.
|
|
49
61
|
|
|
@@ -61,7 +73,13 @@ Type definitions:
|
|
|
61
73
|
- constraint: rule/limitation discovered ("X must always Y")
|
|
62
74
|
- correction: anti-pattern to avoid ("Avoid X; use Z instead")
|
|
63
75
|
|
|
64
|
-
|
|
76
|
+
OUTPUT FORMAT (gh#1219 — this must agree with the schema, or nothing is stored):
|
|
77
|
+
Respond with a single JSON object of exactly this shape:
|
|
78
|
+
{"memories": [ {type, content, importance, entities, justification}, ... ]}
|
|
79
|
+
The top level is an OBJECT with one key, "memories". It is NOT a bare array.
|
|
80
|
+
When nothing is worth remembering, return {"memories": []} — an empty array
|
|
81
|
+
INSIDE the object, never a bare [] and never a different key name.
|
|
82
|
+
Maximum 7 entries.`;
|
|
65
83
|
// ---------------------------------------------------------------------------
|
|
66
84
|
// Public API
|
|
67
85
|
// ---------------------------------------------------------------------------
|
|
@@ -142,7 +160,7 @@ export async function extractTranscript(options) {
|
|
|
142
160
|
let memories = [];
|
|
143
161
|
try {
|
|
144
162
|
const clipped = clipTranscript(transcriptText, 60_000);
|
|
145
|
-
const userPrompt = `Session ID: ${sessionId}\n\nTranscript:\n${clipped}\n\nExtract up to 7 high-value memories.
|
|
163
|
+
const userPrompt = `Session ID: ${sessionId}\n\nTranscript:\n${clipped}\n\nExtract up to 7 high-value memories. Respond with the JSON object {"memories": [...]}, using {"memories": []} if nothing is valuable.`;
|
|
146
164
|
if (backend.name === 'transformers') {
|
|
147
165
|
// transformers.js direct path — uses pipeline() without Vercel AI SDK
|
|
148
166
|
memories = await extractWithTransformers(userPrompt, result.warnings);
|
|
@@ -154,6 +172,13 @@ export async function extractTranscript(options) {
|
|
|
154
172
|
schema: ExtractionResponseSchema,
|
|
155
173
|
system: EXTRACTION_SYSTEM_PROMPT,
|
|
156
174
|
prompt: userPrompt,
|
|
175
|
+
// gh#1219: without this the AI SDK warns "The feature responseFormat is
|
|
176
|
+
// not supported. JSON response format schema is only supported with
|
|
177
|
+
// structuredOutputs" and sends NO schema on the wire, leaving
|
|
178
|
+
// correctness entirely to prompt discipline. Providers that do not
|
|
179
|
+
// consume the `openai` namespace ignore it, so this is safe for the
|
|
180
|
+
// anthropic / ollama / transformers backends too.
|
|
181
|
+
providerOptions: { openai: { structuredOutputs: true } },
|
|
157
182
|
});
|
|
158
183
|
memories = object.memories;
|
|
159
184
|
}
|