@getplumb/core 0.4.2 → 0.4.4
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/chunker.d.ts +2 -27
- package/dist/chunker.d.ts.map +1 -1
- package/dist/chunker.js +2 -36
- package/dist/chunker.js.map +1 -1
- package/dist/context-builder.d.ts +19 -7
- package/dist/context-builder.d.ts.map +1 -1
- package/dist/context-builder.js +54 -20
- package/dist/context-builder.js.map +1 -1
- package/dist/embedder.d.ts.map +1 -1
- package/dist/embedder.js +6 -0
- package/dist/embedder.js.map +1 -1
- package/dist/index.d.ts +5 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -3
- package/dist/index.js.map +1 -1
- package/dist/local-store.d.ts +24 -29
- package/dist/local-store.d.ts.map +1 -1
- package/dist/local-store.js +81 -298
- package/dist/local-store.js.map +1 -1
- package/dist/memory-facts-search.d.ts +33 -0
- package/dist/memory-facts-search.d.ts.map +1 -0
- package/dist/memory-facts-search.js +143 -0
- package/dist/memory-facts-search.js.map +1 -0
- package/dist/read-path.d.ts +22 -13
- package/dist/read-path.d.ts.map +1 -1
- package/dist/read-path.js +19 -15
- package/dist/read-path.js.map +1 -1
- package/dist/schema.d.ts +13 -8
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +63 -83
- package/dist/schema.js.map +1 -1
- package/dist/scorer.d.ts +12 -10
- package/dist/scorer.d.ts.map +1 -1
- package/dist/scorer.js +13 -10
- package/dist/scorer.js.map +1 -1
- package/dist/store.d.ts +1 -6
- package/dist/store.d.ts.map +1 -1
- package/dist/types.d.ts +27 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/wasm-db.d.ts +17 -20
- package/dist/wasm-db.d.ts.map +1 -1
- package/dist/wasm-db.js +51 -56
- package/dist/wasm-db.js.map +1 -1
- package/package.json +5 -6
package/dist/chunker.d.ts
CHANGED
|
@@ -1,35 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Chunker —
|
|
3
|
-
*
|
|
4
|
-
* Design (T-004):
|
|
5
|
-
* - Each exchange is formatted as "User: {msg}\nAgent: {response}"
|
|
6
|
-
* - Short exchanges (≤ CHUNK_WORDS words) produce one chunk
|
|
7
|
-
* - Long exchanges are split with OVERLAP_WORDS word overlap to preserve
|
|
8
|
-
* context at chunk boundaries
|
|
9
|
-
*
|
|
10
|
-
* Word-based splitting is used (not token-based) to avoid a tokenizer
|
|
11
|
-
* dependency at ingest time. At 384-dim bge-small, 300 words ≈ 400 tokens
|
|
12
|
-
* which is within the model's 512-token limit.
|
|
2
|
+
* Chunker — exchange formatting for indexing.
|
|
13
3
|
*/
|
|
14
4
|
import type { MessageExchange } from './types.js';
|
|
15
|
-
export declare const CHUNK_WORDS = 300;
|
|
16
|
-
export declare const OVERLAP_WORDS = 50;
|
|
17
|
-
export interface Chunk {
|
|
18
|
-
/** Full formatted text of this chunk. */
|
|
19
|
-
readonly text: string;
|
|
20
|
-
/** 0-based index within this exchange's chunk sequence. */
|
|
21
|
-
readonly chunkIndex: number;
|
|
22
|
-
/** Total chunks produced from this exchange. */
|
|
23
|
-
readonly totalChunks: number;
|
|
24
|
-
}
|
|
25
5
|
/**
|
|
26
6
|
* Format a MessageExchange into its canonical chunk text.
|
|
27
|
-
* Used
|
|
7
|
+
* Used by ingest() for the stored chunk_text column.
|
|
28
8
|
*/
|
|
29
9
|
export declare function formatExchange(exchange: MessageExchange): string;
|
|
30
|
-
/**
|
|
31
|
-
* Split a MessageExchange into one or more overlapping text chunks.
|
|
32
|
-
* Returns at least one chunk (even for empty exchanges).
|
|
33
|
-
*/
|
|
34
|
-
export declare function chunkExchange(exchange: MessageExchange): Chunk[];
|
|
35
10
|
//# sourceMappingURL=chunker.d.ts.map
|
package/dist/chunker.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunker.d.ts","sourceRoot":"","sources":["../src/chunker.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"chunker.d.ts","sourceRoot":"","sources":["../src/chunker.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM,CAEhE"}
|
package/dist/chunker.js
CHANGED
|
@@ -1,45 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Chunker —
|
|
3
|
-
*
|
|
4
|
-
* Design (T-004):
|
|
5
|
-
* - Each exchange is formatted as "User: {msg}\nAgent: {response}"
|
|
6
|
-
* - Short exchanges (≤ CHUNK_WORDS words) produce one chunk
|
|
7
|
-
* - Long exchanges are split with OVERLAP_WORDS word overlap to preserve
|
|
8
|
-
* context at chunk boundaries
|
|
9
|
-
*
|
|
10
|
-
* Word-based splitting is used (not token-based) to avoid a tokenizer
|
|
11
|
-
* dependency at ingest time. At 384-dim bge-small, 300 words ≈ 400 tokens
|
|
12
|
-
* which is within the model's 512-token limit.
|
|
2
|
+
* Chunker — exchange formatting for indexing.
|
|
13
3
|
*/
|
|
14
|
-
export const CHUNK_WORDS = 300;
|
|
15
|
-
export const OVERLAP_WORDS = 50;
|
|
16
4
|
/**
|
|
17
5
|
* Format a MessageExchange into its canonical chunk text.
|
|
18
|
-
* Used
|
|
6
|
+
* Used by ingest() for the stored chunk_text column.
|
|
19
7
|
*/
|
|
20
8
|
export function formatExchange(exchange) {
|
|
21
9
|
return `User: ${exchange.userMessage}\nAgent: ${exchange.agentResponse}`;
|
|
22
10
|
}
|
|
23
|
-
/**
|
|
24
|
-
* Split a MessageExchange into one or more overlapping text chunks.
|
|
25
|
-
* Returns at least one chunk (even for empty exchanges).
|
|
26
|
-
*/
|
|
27
|
-
export function chunkExchange(exchange) {
|
|
28
|
-
const text = formatExchange(exchange);
|
|
29
|
-
const words = text.split(/\s+/).filter((w) => w.length > 0);
|
|
30
|
-
if (words.length <= CHUNK_WORDS) {
|
|
31
|
-
return [{ text, chunkIndex: 0, totalChunks: 1 }];
|
|
32
|
-
}
|
|
33
|
-
const chunks = [];
|
|
34
|
-
let start = 0;
|
|
35
|
-
while (start < words.length) {
|
|
36
|
-
const end = Math.min(start + CHUNK_WORDS, words.length);
|
|
37
|
-
chunks.push(words.slice(start, end).join(' '));
|
|
38
|
-
if (end >= words.length)
|
|
39
|
-
break;
|
|
40
|
-
start += CHUNK_WORDS - OVERLAP_WORDS;
|
|
41
|
-
}
|
|
42
|
-
const totalChunks = chunks.length;
|
|
43
|
-
return chunks.map((chunkText, chunkIndex) => ({ text: chunkText, chunkIndex, totalChunks }));
|
|
44
|
-
}
|
|
45
11
|
//# sourceMappingURL=chunker.js.map
|
package/dist/chunker.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunker.js","sourceRoot":"","sources":["../src/chunker.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"chunker.js","sourceRoot":"","sources":["../src/chunker.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,QAAyB;IACtD,OAAO,SAAS,QAAQ,CAAC,WAAW,YAAY,QAAQ,CAAC,aAAa,EAAE,CAAC;AAC3E,CAAC"}
|
|
@@ -1,17 +1,29 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Context builder — formats a MemoryContext into a [MEMORY
|
|
2
|
+
* Context builder — formats a MemoryContext into a [PLUMB MEMORY] string
|
|
3
3
|
* suitable for injection into an agent's system prompt.
|
|
4
4
|
*
|
|
5
5
|
* Output format (example):
|
|
6
6
|
*
|
|
7
|
-
* [MEMORY
|
|
7
|
+
* [PLUMB MEMORY]
|
|
8
8
|
*
|
|
9
|
-
* ##
|
|
10
|
-
*
|
|
9
|
+
* ## Remembered facts
|
|
10
|
+
* [HIGH] [tech-planning] today: "User prefers TypeScript for all new code"
|
|
11
|
+
* [MED] [plumb-dev] 3 days ago: "Plumb uses BM25 + vector KNN..."
|
|
11
12
|
*
|
|
12
|
-
*
|
|
13
|
+
* Tier labels: [HIGH] = strong match (treat as fact), [MED] = likely, [LOW] = hint.
|
|
14
|
+
* Always includes a tool hint section. Returns empty string only when
|
|
15
|
+
* relatedMemories is empty.
|
|
13
16
|
*/
|
|
14
17
|
import type { MemoryContext } from './read-path.js';
|
|
18
|
+
/**
|
|
19
|
+
* Maps a boosted memory fact score to a display tier label.
|
|
20
|
+
* Thresholds are calibrated for RRF hybrid scores (BM25 + vector KNN) after
|
|
21
|
+
* MEMORY_FACT_BOOST (2.0×) is applied. Observed boosted score range: 0.044–0.066.
|
|
22
|
+
* [HIGH] ≥ 0.062 — top ~10%: strong match, treat as ground truth
|
|
23
|
+
* [MED] 0.054–0.062 — middle band: likely relevant
|
|
24
|
+
* [LOW] < 0.054 — bottom half: weak signal, treat as hint
|
|
25
|
+
*/
|
|
26
|
+
export declare function scoreFactTier(boostedScore: number): '[HIGH]' | '[MED] ' | '[LOW] ';
|
|
15
27
|
/**
|
|
16
28
|
* Converts an age in fractional days to a human-readable string.
|
|
17
29
|
* Examples: 'today', 'yesterday', '3 days ago', '2 weeks ago', '1 month ago'.
|
|
@@ -20,8 +32,8 @@ export declare function formatAge(ageInDays: number): string;
|
|
|
20
32
|
/**
|
|
21
33
|
* Formats a MemoryContext into a [MEMORY CONTEXT] prompt block.
|
|
22
34
|
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
35
|
+
* Always returns a non-empty string with a tool hint section,
|
|
36
|
+
* even when there are no related memories.
|
|
25
37
|
*/
|
|
26
38
|
export declare function formatContextBlock(context: MemoryContext): string;
|
|
27
39
|
//# sourceMappingURL=context-builder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-builder.d.ts","sourceRoot":"","sources":["../src/context-builder.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"context-builder.d.ts","sourceRoot":"","sources":["../src/context-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAmB,MAAM,gBAAgB,CAAC;AAIrE;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAIlF;AAID;;;GAGG;AACH,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAUnD;AAeD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CA0BjE"}
|
package/dist/context-builder.js
CHANGED
|
@@ -1,16 +1,35 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Context builder — formats a MemoryContext into a [MEMORY
|
|
2
|
+
* Context builder — formats a MemoryContext into a [PLUMB MEMORY] string
|
|
3
3
|
* suitable for injection into an agent's system prompt.
|
|
4
4
|
*
|
|
5
5
|
* Output format (example):
|
|
6
6
|
*
|
|
7
|
-
* [MEMORY
|
|
7
|
+
* [PLUMB MEMORY]
|
|
8
8
|
*
|
|
9
|
-
* ##
|
|
10
|
-
*
|
|
9
|
+
* ## Remembered facts
|
|
10
|
+
* [HIGH] [tech-planning] today: "User prefers TypeScript for all new code"
|
|
11
|
+
* [MED] [plumb-dev] 3 days ago: "Plumb uses BM25 + vector KNN..."
|
|
11
12
|
*
|
|
12
|
-
*
|
|
13
|
+
* Tier labels: [HIGH] = strong match (treat as fact), [MED] = likely, [LOW] = hint.
|
|
14
|
+
* Always includes a tool hint section. Returns empty string only when
|
|
15
|
+
* relatedMemories is empty.
|
|
13
16
|
*/
|
|
17
|
+
// ─── Confidence tier helpers ──────────────────────────────────────────────────
|
|
18
|
+
/**
|
|
19
|
+
* Maps a boosted memory fact score to a display tier label.
|
|
20
|
+
* Thresholds are calibrated for RRF hybrid scores (BM25 + vector KNN) after
|
|
21
|
+
* MEMORY_FACT_BOOST (2.0×) is applied. Observed boosted score range: 0.044–0.066.
|
|
22
|
+
* [HIGH] ≥ 0.062 — top ~10%: strong match, treat as ground truth
|
|
23
|
+
* [MED] 0.054–0.062 — middle band: likely relevant
|
|
24
|
+
* [LOW] < 0.054 — bottom half: weak signal, treat as hint
|
|
25
|
+
*/
|
|
26
|
+
export function scoreFactTier(boostedScore) {
|
|
27
|
+
if (boostedScore >= 0.062)
|
|
28
|
+
return '[HIGH]';
|
|
29
|
+
if (boostedScore >= 0.054)
|
|
30
|
+
return '[MED] ';
|
|
31
|
+
return '[LOW] ';
|
|
32
|
+
}
|
|
14
33
|
// ─── Age formatting ───────────────────────────────────────────────────────────
|
|
15
34
|
/**
|
|
16
35
|
* Converts an age in fractional days to a human-readable string.
|
|
@@ -36,29 +55,44 @@ export function formatAge(ageInDays) {
|
|
|
36
55
|
return `${Math.floor(ageInDays / 365)} years ago`;
|
|
37
56
|
}
|
|
38
57
|
// ─── Line formatters ──────────────────────────────────────────────────────────
|
|
39
|
-
function
|
|
40
|
-
const
|
|
41
|
-
const
|
|
42
|
-
const
|
|
58
|
+
function formatMemoryLine(memory) {
|
|
59
|
+
const tier = scoreFactTier(memory.score);
|
|
60
|
+
const excerpt = memory.content.slice(0, 200);
|
|
61
|
+
const sessionLabel = memory.sourceSessionLabel ?? memory.sourceSessionId;
|
|
62
|
+
const ageInDays = (Date.now() - memory.timestamp.getTime()) / (1_000 * 60 * 60 * 24);
|
|
43
63
|
const age = formatAge(ageInDays);
|
|
44
|
-
return
|
|
64
|
+
return `${tier} [${sessionLabel}] ${age}: "${excerpt}"`;
|
|
45
65
|
}
|
|
46
66
|
// ─── Public API ───────────────────────────────────────────────────────────────
|
|
47
67
|
/**
|
|
48
68
|
* Formats a MemoryContext into a [MEMORY CONTEXT] prompt block.
|
|
49
69
|
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
70
|
+
* Always returns a non-empty string with a tool hint section,
|
|
71
|
+
* even when there are no related memories.
|
|
52
72
|
*/
|
|
53
73
|
export function formatContextBlock(context) {
|
|
54
|
-
const {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
74
|
+
const { relatedMemories } = context;
|
|
75
|
+
const lines = ['[PLUMB MEMORY]'];
|
|
76
|
+
// ── Render ## Remembered facts section (memory_facts, Layer 2) ──────────
|
|
77
|
+
if (relatedMemories.length > 0) {
|
|
78
|
+
lines.push('');
|
|
79
|
+
lines.push('## Remembered facts');
|
|
80
|
+
for (const memory of relatedMemories)
|
|
81
|
+
lines.push(formatMemoryLine(memory));
|
|
82
|
+
}
|
|
83
|
+
// ── Append tool hints ─────────────────────────────────────────────────────
|
|
84
|
+
if (relatedMemories.length > 0) {
|
|
85
|
+
lines.push('');
|
|
86
|
+
lines.push('## Memory tools available');
|
|
87
|
+
lines.push('- `plumb_search` — search for specific subtopics not covered above');
|
|
88
|
+
lines.push('- `plumb_remember` — store a new fact for future sessions');
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
// No memories — show only tool hints with alternate text
|
|
92
|
+
lines.push('## Memory tools available');
|
|
93
|
+
lines.push('- `plumb_search` — look up relevant context from memory');
|
|
94
|
+
lines.push('- `plumb_remember` — store a new fact for future sessions');
|
|
95
|
+
}
|
|
62
96
|
return lines.join('\n');
|
|
63
97
|
}
|
|
64
98
|
//# sourceMappingURL=context-builder.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-builder.js","sourceRoot":"","sources":["../src/context-builder.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"context-builder.js","sourceRoot":"","sources":["../src/context-builder.ts"],"names":[],"mappings":"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"}
|
package/dist/embedder.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embedder.d.ts","sourceRoot":"","sources":["../src/embedder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,sDAAsD;AACtD,eAAO,MAAM,SAAS,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"embedder.d.ts","sourceRoot":"","sources":["../src/embedder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,sDAAsD;AACtD,eAAO,MAAM,SAAS,MAAM,CAAC;AAiC7B;;;;GAIG;AACH,wBAAsB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAO/D;AAED;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAKrE;AA+BD;;;;;;;;;;;;GAYG;AACH,wBAAsB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAKvF;AAED;;;;GAIG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAElD;AAED;;;;GAIG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAElD"}
|
package/dist/embedder.js
CHANGED
|
@@ -28,6 +28,12 @@ async function getEmbedPipeline() {
|
|
|
28
28
|
// @ts-ignore — @xenova/transformers has incomplete typings
|
|
29
29
|
const { pipeline, env } = await import('@xenova/transformers');
|
|
30
30
|
env.allowLocalModels = true;
|
|
31
|
+
// Limit ONNX WASM to 1 thread so embedding doesn't peg all CPU cores.
|
|
32
|
+
// Without this, Xenova spawns up to N worker threads (one per core),
|
|
33
|
+
// making OpenClaw unusable during seeding or heavy ingest.
|
|
34
|
+
// 1 thread = ~2–4× slower embeddings but the gateway stays responsive.
|
|
35
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
36
|
+
env.backends.onnx.wasm.numThreads = 1;
|
|
31
37
|
_embedPipeline = (await pipeline('feature-extraction', 'Xenova/bge-small-en-v1.5'));
|
|
32
38
|
}
|
|
33
39
|
catch {
|
package/dist/embedder.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embedder.js","sourceRoot":"","sources":["../src/embedder.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"embedder.js","sourceRoot":"","sources":["../src/embedder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,sDAAsD;AACtD,MAAM,CAAC,MAAM,SAAS,GAAG,GAAG,CAAC;AAI7B,IAAI,cAAc,GAAoB,IAAI,CAAC;AAC3C,IAAI,gBAAgB,GAAG,KAAK,CAAC;AAE7B,KAAK,UAAU,gBAAgB;IAC7B,IAAI,gBAAgB;QAAE,OAAO,IAAI,CAAC;IAClC,IAAI,cAAc,KAAK,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC;YACH,4EAA4E;YAC5E,6EAA6E;YAC7E,4DAA4D;YAC5D,6DAA6D;YAC7D,2DAA2D;YAC3D,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;YAC9D,GAAqC,CAAC,gBAAgB,GAAG,IAAI,CAAC;YAC/D,sEAAsE;YACtE,qEAAqE;YACrE,2DAA2D;YAC3D,uEAAuE;YACvE,8DAA8D;YAC7D,GAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;YAC/C,cAAc,GAAG,CAAC,MAAM,QAAQ,CAAC,oBAAoB,EAAE,0BAA0B,CAAC,CAAa,CAAC;QAClG,CAAC;QAAC,MAAM,CAAC;YACP,gBAAgB,GAAG,IAAI,CAAC;YACxB,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,cAAc,CAAC;AACxB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,IAAY;IACtC,MAAM,IAAI,GAAG,MAAM,gBAAgB,EAAE,CAAC;IACtC,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;IACjF,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtE,OAAO,IAAI,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACvC,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,KAAa;IAC5C,MAAM,IAAI,GAAG,MAAM,gBAAgB,EAAE,CAAC;IACtC,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,IAAI,YAAY,CAAC,SAAS,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACnF,OAAO,IAAI,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACvC,CAAC;AASD,IAAI,eAAe,GAA0B,IAAI,CAAC;AAClD,IAAI,iBAAiB,GAAG,KAAK,CAAC;AAE9B,KAAK,UAAU,iBAAiB;IAC9B,IAAI,iBAAiB;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,eAAe,KAAK,IAAI,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,6DAA6D;YAC7D,2DAA2D;YAC3D,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;YAC1D,eAAe,GAAG,CAAC,MAAM,QAAQ,CAC/B,qBAAqB,EACrB,+BAA+B,CAChC,CAAmB,CAAC;QACvB,CAAC;QAAC,MAAM,CAAC;YACP,iBAAiB,GAAG,IAAI,CAAC;YACzB,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,eAAe,CAAC;AACzB,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,KAAa,EAAE,QAAkB;IAClE,wEAAwE;IACxE,6DAA6D;IAC7D,wDAAwD;IACxD,OAAO,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AAC/B,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,gBAAgB,EAAE,CAAC;AAC3B,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,2BAA2B;AAC7B,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,17 +1,14 @@
|
|
|
1
|
-
export type {
|
|
1
|
+
export type { StoreStatus, MemoryFact, IngestMemoryFactInput } from './types.js';
|
|
2
2
|
export type { MemoryStore } from './store.js';
|
|
3
|
-
export
|
|
4
|
-
export { scoreRawLog } from './scorer.js';
|
|
3
|
+
export { scoreMemoryFact, computeDecay } from './scorer.js';
|
|
5
4
|
export { LocalStore } from './local-store.js';
|
|
6
|
-
export type { LocalStoreOptions,
|
|
5
|
+
export type { LocalStoreOptions, MemoryFactSearchResult } from './local-store.js';
|
|
7
6
|
export { embed, embedQuery, rerankScores, EMBED_DIM } from './embedder.js';
|
|
8
7
|
export { Bm25, tokenize } from './bm25.js';
|
|
9
|
-
export {
|
|
10
|
-
export type { Chunk } from './chunker.js';
|
|
11
|
-
export { searchRawLog } from './raw-log-search.js';
|
|
12
|
-
export type { RawChunk, MemoryContext, ReadPathOptions, ReadPathStore } from './read-path.js';
|
|
8
|
+
export type { MemoryFactChunk, MemoryContext, ReadPathOptions, ReadPathStore } from './read-path.js';
|
|
13
9
|
export { buildMemoryContext } from './read-path.js';
|
|
14
10
|
export { formatContextBlock, formatAge } from './context-builder.js';
|
|
15
11
|
export { openDb } from './wasm-db.js';
|
|
16
12
|
export type { WasmDb } from './wasm-db.js';
|
|
13
|
+
export { serializeEmbedding, deserializeEmbedding } from './vector-search.js';
|
|
17
14
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACjF,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,YAAY,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAClF,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC3C,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACrG,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,YAAY,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { scoreMemoryFact, computeDecay } from './scorer.js';
|
|
2
2
|
export { LocalStore } from './local-store.js';
|
|
3
3
|
export { embed, embedQuery, rerankScores, EMBED_DIM } from './embedder.js';
|
|
4
4
|
export { Bm25, tokenize } from './bm25.js';
|
|
5
|
-
export { chunkExchange, formatExchange, CHUNK_WORDS, OVERLAP_WORDS } from './chunker.js';
|
|
6
|
-
export { searchRawLog } from './raw-log-search.js';
|
|
7
5
|
export { buildMemoryContext } from './read-path.js';
|
|
8
6
|
export { formatContextBlock, formatAge } from './context-builder.js';
|
|
9
7
|
export { openDb } from './wasm-db.js';
|
|
8
|
+
export { serializeEmbedding, deserializeEmbedding } from './vector-search.js';
|
|
10
9
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAE3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC"}
|
package/dist/local-store.d.ts
CHANGED
|
@@ -1,27 +1,8 @@
|
|
|
1
1
|
import { type WasmDb } from './wasm-db.js';
|
|
2
2
|
import type { MemoryStore } from './store.js';
|
|
3
|
-
import type {
|
|
4
|
-
import { type
|
|
5
|
-
export type {
|
|
6
|
-
export interface RawLogEntry {
|
|
7
|
-
readonly id: string;
|
|
8
|
-
readonly userId: string;
|
|
9
|
-
readonly sessionId: string;
|
|
10
|
-
readonly sessionLabel: string | null;
|
|
11
|
-
readonly userMessage: string;
|
|
12
|
-
readonly agentResponse: string;
|
|
13
|
-
readonly timestamp: string;
|
|
14
|
-
readonly source: string;
|
|
15
|
-
readonly chunkText: string;
|
|
16
|
-
readonly chunkIndex: number;
|
|
17
|
-
readonly contentHash: string | null;
|
|
18
|
-
readonly embedStatus: string;
|
|
19
|
-
readonly embedError: string | null;
|
|
20
|
-
readonly embedModel: string | null;
|
|
21
|
-
}
|
|
22
|
-
export interface ExportData {
|
|
23
|
-
readonly rawLog: readonly RawLogEntry[];
|
|
24
|
-
}
|
|
3
|
+
import type { StoreStatus, IngestMemoryFactInput } from './types.js';
|
|
4
|
+
import { type MemoryFactSearchResult } from './memory-facts-search.js';
|
|
5
|
+
export type { MemoryFactSearchResult };
|
|
25
6
|
export interface LocalStoreOptions {
|
|
26
7
|
/** Absolute path to the SQLite database file. Defaults to ~/.plumb/memory.db */
|
|
27
8
|
dbPath?: string;
|
|
@@ -35,6 +16,13 @@ export interface LocalStoreOptions {
|
|
|
35
16
|
/** Sleep duration when embed queue is empty (default 5000ms) */
|
|
36
17
|
embedIdleMs?: number;
|
|
37
18
|
};
|
|
19
|
+
/**
|
|
20
|
+
* Skip pre-warming the embedder/reranker pipelines at init time.
|
|
21
|
+
* Use in CLI tools (e.g. seed-dev.mjs) where startup latency matters and
|
|
22
|
+
* the model will load on first embed() call anyway.
|
|
23
|
+
* Default: false (warm at init for consistent query latency in the gateway).
|
|
24
|
+
*/
|
|
25
|
+
skipWarm?: boolean;
|
|
38
26
|
}
|
|
39
27
|
export declare class LocalStore implements MemoryStore {
|
|
40
28
|
#private;
|
|
@@ -49,17 +37,24 @@ export declare class LocalStore implements MemoryStore {
|
|
|
49
37
|
*/
|
|
50
38
|
static create(options?: LocalStoreOptions): Promise<LocalStore>;
|
|
51
39
|
status(): Promise<StoreStatus>;
|
|
52
|
-
ingest(exchange: MessageExchange): Promise<IngestResult>;
|
|
53
40
|
/**
|
|
54
|
-
*
|
|
55
|
-
*
|
|
41
|
+
* Ingest a curated memory fact (T-118).
|
|
42
|
+
* Facts are stored as single chunks (no splitting) with embed_status='pending'.
|
|
43
|
+
* Accepts optional confidence (0–1) and decayRate ('slow'|'medium'|'fast').
|
|
44
|
+
*/
|
|
45
|
+
ingestMemoryFact(input: IngestMemoryFactInput): Promise<{
|
|
46
|
+
factId: string;
|
|
47
|
+
}>;
|
|
48
|
+
/**
|
|
49
|
+
* Hybrid search over memory_facts (Layer 2 retrieval).
|
|
50
|
+
* See memory-facts-search.ts for the full pipeline description.
|
|
56
51
|
*/
|
|
57
|
-
|
|
52
|
+
searchMemoryFacts(query: string, limit?: number): Promise<readonly MemoryFactSearchResult[]>;
|
|
58
53
|
/**
|
|
59
|
-
*
|
|
60
|
-
*
|
|
54
|
+
* Soft-delete a memory fact by id (sets deleted_at timestamp).
|
|
55
|
+
* Soft-deleted facts are excluded from search results.
|
|
61
56
|
*/
|
|
62
|
-
|
|
57
|
+
delete(factId: string): Promise<void>;
|
|
63
58
|
/**
|
|
64
59
|
* Start background backlog processor drain loop (T-095).
|
|
65
60
|
* Launches continuous async loop for embed backlog.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-store.d.ts","sourceRoot":"","sources":["../src/local-store.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"local-store.d.ts","sourceRoot":"","sources":["../src/local-store.ts"],"names":[],"mappings":"AAGA,OAAO,EAAU,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAEnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAgB,WAAW,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAEnF,OAAO,EAAqB,KAAK,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAG1F,YAAY,EAAE,sBAAsB,EAAE,CAAC;AAEvC,MAAM,WAAW,iBAAiB;IAChC,gFAAgF;IAChF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uFAAuF;IACvF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,OAAO,CAAC,EAAE;QACR,gEAAgE;QAChE,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAGD,qBAAa,UAAW,YAAW,WAAW;;IAiB5C,0DAA0D;IAC1D,IAAI,EAAE,IAAI,MAAM,CAEf;IAED,mCAAmC;IACnC,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,OAAO;IAYP;;;OAGG;WACU,MAAM,CAAC,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,UAAU,CAAC;IA2BnE,MAAM,IAAI,OAAO,CAAC,WAAW,CAAC;IA8BpC;;;;OAIG;IACG,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IA4BjF;;;OAGG;IACG,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,OAAO,CAAC,SAAS,sBAAsB,EAAE,CAAC;IAU9F;;;OAGG;IACG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU3C;;;OAGG;IACH,qBAAqB,IAAI,IAAI;IAsB7B;;;OAGG;IACG,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;IAsI3C,qEAAqE;IACrE,KAAK,IAAI,IAAI;CAGd"}
|