@windagency/valora-plugin-memory-vault 1.0.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.
Potentially problematic release.
This version of @windagency/valora-plugin-memory-vault might be problematic. Click here for more details.
- package/dist/config-schema.d.ts +134 -0
- package/dist/config-schema.d.ts.map +1 -0
- package/dist/config-schema.js +61 -0
- package/dist/config-schema.js.map +1 -0
- package/dist/consolidation/cluster.d.ts +17 -0
- package/dist/consolidation/cluster.d.ts.map +1 -0
- package/dist/consolidation/cluster.js +59 -0
- package/dist/consolidation/cluster.js.map +1 -0
- package/dist/consolidation-service.d.ts +75 -0
- package/dist/consolidation-service.d.ts.map +1 -0
- package/dist/consolidation-service.js +373 -0
- package/dist/consolidation-service.js.map +1 -0
- package/dist/constants.d.ts +30 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +30 -0
- package/dist/constants.js.map +1 -0
- package/dist/decay.d.ts +51 -0
- package/dist/decay.d.ts.map +1 -0
- package/dist/decay.js +59 -0
- package/dist/decay.js.map +1 -0
- package/dist/embeddings/embedder.port.d.ts +9 -0
- package/dist/embeddings/embedder.port.d.ts.map +1 -0
- package/dist/embeddings/embedder.port.js +2 -0
- package/dist/embeddings/embedder.port.js.map +1 -0
- package/dist/embeddings/llm-provider-embedder.d.ts +26 -0
- package/dist/embeddings/llm-provider-embedder.d.ts.map +1 -0
- package/dist/embeddings/llm-provider-embedder.js +34 -0
- package/dist/embeddings/llm-provider-embedder.js.map +1 -0
- package/dist/embeddings/resolve-embedder.d.ts +27 -0
- package/dist/embeddings/resolve-embedder.d.ts.map +1 -0
- package/dist/embeddings/resolve-embedder.js +38 -0
- package/dist/embeddings/resolve-embedder.js.map +1 -0
- package/dist/embeddings/vector-store.d.ts +35 -0
- package/dist/embeddings/vector-store.d.ts.map +1 -0
- package/dist/embeddings/vector-store.js +174 -0
- package/dist/embeddings/vector-store.js.map +1 -0
- package/dist/extraction-service.d.ts +33 -0
- package/dist/extraction-service.d.ts.map +1 -0
- package/dist/extraction-service.js +168 -0
- package/dist/extraction-service.js.map +1 -0
- package/dist/index.d.ts +42 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6498 -0
- package/dist/index.js.map +1 -0
- package/dist/manager.d.ts +62 -0
- package/dist/manager.d.ts.map +1 -0
- package/dist/manager.js +377 -0
- package/dist/manager.js.map +1 -0
- package/dist/migration/auto-migrate.d.ts +20 -0
- package/dist/migration/auto-migrate.d.ts.map +1 -0
- package/dist/migration/auto-migrate.js +49 -0
- package/dist/migration/auto-migrate.js.map +1 -0
- package/dist/migration/json-to-vault.d.ts +10 -0
- package/dist/migration/json-to-vault.d.ts.map +1 -0
- package/dist/migration/json-to-vault.js +88 -0
- package/dist/migration/json-to-vault.js.map +1 -0
- package/dist/migration/vault-version.d.ts +4 -0
- package/dist/migration/vault-version.d.ts.map +1 -0
- package/dist/migration/vault-version.js +19 -0
- package/dist/migration/vault-version.js.map +1 -0
- package/dist/retrieval/cosine-ann.d.ts +13 -0
- package/dist/retrieval/cosine-ann.d.ts.map +1 -0
- package/dist/retrieval/cosine-ann.js +26 -0
- package/dist/retrieval/cosine-ann.js.map +1 -0
- package/dist/retrieval/spreading-activation.d.ts +12 -0
- package/dist/retrieval/spreading-activation.d.ts.map +1 -0
- package/dist/retrieval/spreading-activation.js +70 -0
- package/dist/retrieval/spreading-activation.js.map +1 -0
- package/dist/store.d.ts +38 -0
- package/dist/store.d.ts.map +1 -0
- package/dist/store.js +192 -0
- package/dist/store.js.map +1 -0
- package/dist/vault/default-vault-dir.d.ts +17 -0
- package/dist/vault/default-vault-dir.d.ts.map +1 -0
- package/dist/vault/default-vault-dir.js +23 -0
- package/dist/vault/default-vault-dir.js.map +1 -0
- package/dist/vault/file-format.d.ts +44 -0
- package/dist/vault/file-format.d.ts.map +1 -0
- package/dist/vault/file-format.js +214 -0
- package/dist/vault/file-format.js.map +1 -0
- package/dist/vault/vault-index.d.ts +28 -0
- package/dist/vault/vault-index.d.ts.map +1 -0
- package/dist/vault/vault-index.js +98 -0
- package/dist/vault/vault-index.js.map +1 -0
- package/dist/vault/vault-store.d.ts +75 -0
- package/dist/vault/vault-store.d.ts.map +1 -0
- package/dist/vault/vault-store.js +369 -0
- package/dist/vault/vault-store.js.map +1 -0
- package/dist/vault-memory-provider.d.ts +53 -0
- package/dist/vault-memory-provider.d.ts.map +1 -0
- package/dist/vault-memory-provider.js +139 -0
- package/dist/vault-memory-provider.js.map +1 -0
- package/package.json +58 -0
- package/valora-plugin.json +10 -0
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vault-specific configuration schema.
|
|
3
|
+
*
|
|
4
|
+
* All vault-tuning knobs live under `plugins.memory-vault.*`; the host's
|
|
5
|
+
* `memory.*` block owns only `{enabled, provider}`. This schema is the
|
|
6
|
+
* bundled vault's own source of truth, read from the raw plugin namespace
|
|
7
|
+
* via `parseVaultPluginConfig()`.
|
|
8
|
+
*/
|
|
9
|
+
import { z } from 'zod';
|
|
10
|
+
export declare const VAULT_PLUGIN_CONFIG_SCHEMA: z.ZodObject<
|
|
11
|
+
{
|
|
12
|
+
decision_half_life_days: z.ZodDefault<z.ZodNumber>;
|
|
13
|
+
embedding: z.ZodOptional<
|
|
14
|
+
z.ZodObject<
|
|
15
|
+
{
|
|
16
|
+
batch_size: z.ZodDefault<z.ZodNumber>;
|
|
17
|
+
dim: z.ZodDefault<z.ZodNumber>;
|
|
18
|
+
model: z.ZodDefault<z.ZodString>;
|
|
19
|
+
provider: z.ZodDefault<z.ZodString>;
|
|
20
|
+
},
|
|
21
|
+
'strip',
|
|
22
|
+
z.ZodTypeAny,
|
|
23
|
+
{
|
|
24
|
+
batch_size: number;
|
|
25
|
+
dim: number;
|
|
26
|
+
model: string;
|
|
27
|
+
provider: string;
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
batch_size?: number | undefined;
|
|
31
|
+
dim?: number | undefined;
|
|
32
|
+
model?: string | undefined;
|
|
33
|
+
provider?: string | undefined;
|
|
34
|
+
}
|
|
35
|
+
>
|
|
36
|
+
>;
|
|
37
|
+
episodic_half_life_days: z.ZodDefault<z.ZodNumber>;
|
|
38
|
+
error_half_life_multiplier: z.ZodDefault<z.ZodNumber>;
|
|
39
|
+
injection_strength_threshold: z.ZodDefault<z.ZodNumber>;
|
|
40
|
+
injection_token_budget: z.ZodDefault<z.ZodNumber>;
|
|
41
|
+
max_entries_per_store: z.ZodDefault<z.ZodNumber>;
|
|
42
|
+
prune_threshold: z.ZodDefault<z.ZodNumber>;
|
|
43
|
+
recall: z.ZodOptional<
|
|
44
|
+
z.ZodObject<
|
|
45
|
+
{
|
|
46
|
+
co_access_increment: z.ZodDefault<z.ZodNumber>;
|
|
47
|
+
seed_k: z.ZodDefault<z.ZodNumber>;
|
|
48
|
+
walk_decay: z.ZodDefault<z.ZodNumber>;
|
|
49
|
+
walk_depth: z.ZodDefault<z.ZodNumber>;
|
|
50
|
+
},
|
|
51
|
+
'strip',
|
|
52
|
+
z.ZodTypeAny,
|
|
53
|
+
{
|
|
54
|
+
co_access_increment: number;
|
|
55
|
+
seed_k: number;
|
|
56
|
+
walk_decay: number;
|
|
57
|
+
walk_depth: number;
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
co_access_increment?: number | undefined;
|
|
61
|
+
seed_k?: number | undefined;
|
|
62
|
+
walk_decay?: number | undefined;
|
|
63
|
+
walk_depth?: number | undefined;
|
|
64
|
+
}
|
|
65
|
+
>
|
|
66
|
+
>;
|
|
67
|
+
retrieval_boost_days: z.ZodDefault<z.ZodNumber>;
|
|
68
|
+
semantic_half_life_days: z.ZodDefault<z.ZodNumber>;
|
|
69
|
+
},
|
|
70
|
+
'strip',
|
|
71
|
+
z.ZodTypeAny,
|
|
72
|
+
{
|
|
73
|
+
decision_half_life_days: number;
|
|
74
|
+
episodic_half_life_days: number;
|
|
75
|
+
error_half_life_multiplier: number;
|
|
76
|
+
injection_strength_threshold: number;
|
|
77
|
+
injection_token_budget: number;
|
|
78
|
+
max_entries_per_store: number;
|
|
79
|
+
prune_threshold: number;
|
|
80
|
+
retrieval_boost_days: number;
|
|
81
|
+
semantic_half_life_days: number;
|
|
82
|
+
embedding?:
|
|
83
|
+
| {
|
|
84
|
+
batch_size: number;
|
|
85
|
+
dim: number;
|
|
86
|
+
model: string;
|
|
87
|
+
provider: string;
|
|
88
|
+
}
|
|
89
|
+
| undefined;
|
|
90
|
+
recall?:
|
|
91
|
+
| {
|
|
92
|
+
co_access_increment: number;
|
|
93
|
+
seed_k: number;
|
|
94
|
+
walk_decay: number;
|
|
95
|
+
walk_depth: number;
|
|
96
|
+
}
|
|
97
|
+
| undefined;
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
decision_half_life_days?: number | undefined;
|
|
101
|
+
embedding?:
|
|
102
|
+
| {
|
|
103
|
+
batch_size?: number | undefined;
|
|
104
|
+
dim?: number | undefined;
|
|
105
|
+
model?: string | undefined;
|
|
106
|
+
provider?: string | undefined;
|
|
107
|
+
}
|
|
108
|
+
| undefined;
|
|
109
|
+
episodic_half_life_days?: number | undefined;
|
|
110
|
+
error_half_life_multiplier?: number | undefined;
|
|
111
|
+
injection_strength_threshold?: number | undefined;
|
|
112
|
+
injection_token_budget?: number | undefined;
|
|
113
|
+
max_entries_per_store?: number | undefined;
|
|
114
|
+
prune_threshold?: number | undefined;
|
|
115
|
+
recall?:
|
|
116
|
+
| {
|
|
117
|
+
co_access_increment?: number | undefined;
|
|
118
|
+
seed_k?: number | undefined;
|
|
119
|
+
walk_decay?: number | undefined;
|
|
120
|
+
walk_depth?: number | undefined;
|
|
121
|
+
}
|
|
122
|
+
| undefined;
|
|
123
|
+
retrieval_boost_days?: number | undefined;
|
|
124
|
+
semantic_half_life_days?: number | undefined;
|
|
125
|
+
}
|
|
126
|
+
>;
|
|
127
|
+
export type VaultPluginConfig = z.infer<typeof VAULT_PLUGIN_CONFIG_SCHEMA>;
|
|
128
|
+
/**
|
|
129
|
+
* Parse the raw `plugins['memory-vault']` subtree into a fully-defaulted
|
|
130
|
+
* {@link VaultPluginConfig}. Returns the all-defaults config when the
|
|
131
|
+
* subtree is missing or empty.
|
|
132
|
+
*/
|
|
133
|
+
export declare function parseVaultPluginConfig(raw: unknown): VaultPluginConfig;
|
|
134
|
+
//# sourceMappingURL=config-schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-schema.d.ts","sourceRoot":"","sources":["../src/config-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAmCxB,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAYrC,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE3E;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,OAAO,GAAG,iBAAiB,CAEtE"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vault-specific configuration schema.
|
|
3
|
+
*
|
|
4
|
+
* All vault-tuning knobs live under `plugins.memory-vault.*`; the host's
|
|
5
|
+
* `memory.*` block owns only `{enabled, provider}`. This schema is the
|
|
6
|
+
* bundled vault's own source of truth, read from the raw plugin namespace
|
|
7
|
+
* via `parseVaultPluginConfig()`.
|
|
8
|
+
*/
|
|
9
|
+
import { z } from 'zod';
|
|
10
|
+
import {
|
|
11
|
+
DEFAULT_MEMORY_DECISION_HALF_LIFE_DAYS,
|
|
12
|
+
DEFAULT_MEMORY_EMBED_BATCH_SIZE,
|
|
13
|
+
DEFAULT_MEMORY_EMBED_DIM,
|
|
14
|
+
DEFAULT_MEMORY_EMBED_MODEL,
|
|
15
|
+
DEFAULT_MEMORY_EPISODIC_HALF_LIFE_DAYS,
|
|
16
|
+
DEFAULT_MEMORY_ERROR_HALF_LIFE_MULTIPLIER,
|
|
17
|
+
DEFAULT_MEMORY_INJECTION_STRENGTH_THRESHOLD,
|
|
18
|
+
DEFAULT_MEMORY_INJECTION_TOKEN_BUDGET,
|
|
19
|
+
DEFAULT_MEMORY_MAX_ENTRIES_PER_STORE,
|
|
20
|
+
DEFAULT_MEMORY_PRUNE_THRESHOLD,
|
|
21
|
+
DEFAULT_MEMORY_RECALL_CO_ACCESS_INCREMENT,
|
|
22
|
+
DEFAULT_MEMORY_RECALL_SEED_K,
|
|
23
|
+
DEFAULT_MEMORY_RECALL_WALK_DECAY,
|
|
24
|
+
DEFAULT_MEMORY_RECALL_WALK_DEPTH,
|
|
25
|
+
DEFAULT_MEMORY_RETRIEVAL_BOOST_DAYS,
|
|
26
|
+
DEFAULT_MEMORY_SEMANTIC_HALF_LIFE_DAYS
|
|
27
|
+
} from './constants.js';
|
|
28
|
+
const VAULT_EMBEDDING_SCHEMA = z.object({
|
|
29
|
+
batch_size: z.number().min(1).max(256).default(DEFAULT_MEMORY_EMBED_BATCH_SIZE),
|
|
30
|
+
dim: z.number().min(1).default(DEFAULT_MEMORY_EMBED_DIM),
|
|
31
|
+
model: z.string().default(DEFAULT_MEMORY_EMBED_MODEL),
|
|
32
|
+
provider: z.string().default('auto')
|
|
33
|
+
});
|
|
34
|
+
const VAULT_RECALL_SCHEMA = z.object({
|
|
35
|
+
co_access_increment: z.number().min(0).default(DEFAULT_MEMORY_RECALL_CO_ACCESS_INCREMENT),
|
|
36
|
+
seed_k: z.number().min(1).max(100).default(DEFAULT_MEMORY_RECALL_SEED_K),
|
|
37
|
+
walk_decay: z.number().min(0).max(1).default(DEFAULT_MEMORY_RECALL_WALK_DECAY),
|
|
38
|
+
walk_depth: z.number().min(0).max(10).default(DEFAULT_MEMORY_RECALL_WALK_DEPTH)
|
|
39
|
+
});
|
|
40
|
+
export const VAULT_PLUGIN_CONFIG_SCHEMA = z.object({
|
|
41
|
+
decision_half_life_days: z.number().min(1).max(365).default(DEFAULT_MEMORY_DECISION_HALF_LIFE_DAYS),
|
|
42
|
+
embedding: VAULT_EMBEDDING_SCHEMA.optional(),
|
|
43
|
+
episodic_half_life_days: z.number().min(1).max(365).default(DEFAULT_MEMORY_EPISODIC_HALF_LIFE_DAYS),
|
|
44
|
+
error_half_life_multiplier: z.number().min(1).max(10).default(DEFAULT_MEMORY_ERROR_HALF_LIFE_MULTIPLIER),
|
|
45
|
+
injection_strength_threshold: z.number().min(0).max(1).default(DEFAULT_MEMORY_INJECTION_STRENGTH_THRESHOLD),
|
|
46
|
+
injection_token_budget: z.number().min(100).max(10000).default(DEFAULT_MEMORY_INJECTION_TOKEN_BUDGET),
|
|
47
|
+
max_entries_per_store: z.number().min(10).max(10000).default(DEFAULT_MEMORY_MAX_ENTRIES_PER_STORE),
|
|
48
|
+
prune_threshold: z.number().min(0).max(1).default(DEFAULT_MEMORY_PRUNE_THRESHOLD),
|
|
49
|
+
recall: VAULT_RECALL_SCHEMA.optional(),
|
|
50
|
+
retrieval_boost_days: z.number().min(0).max(30).default(DEFAULT_MEMORY_RETRIEVAL_BOOST_DAYS),
|
|
51
|
+
semantic_half_life_days: z.number().min(1).max(365).default(DEFAULT_MEMORY_SEMANTIC_HALF_LIFE_DAYS)
|
|
52
|
+
});
|
|
53
|
+
/**
|
|
54
|
+
* Parse the raw `plugins['memory-vault']` subtree into a fully-defaulted
|
|
55
|
+
* {@link VaultPluginConfig}. Returns the all-defaults config when the
|
|
56
|
+
* subtree is missing or empty.
|
|
57
|
+
*/
|
|
58
|
+
export function parseVaultPluginConfig(raw) {
|
|
59
|
+
return VAULT_PLUGIN_CONFIG_SCHEMA.parse(raw ?? {});
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=config-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-schema.js","sourceRoot":"","sources":["../src/config-schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { MemoryEntry } from '@windagency/valora-plugin-api';
|
|
2
|
+
import type { VectorStore } from '../embeddings/vector-store.js';
|
|
3
|
+
export declare function centroidSummary(cluster: MemoryEntry[]): string;
|
|
4
|
+
/**
|
|
5
|
+
* Cluster entries whose embedding cosine similarity meets `threshold`.
|
|
6
|
+
*
|
|
7
|
+
* The implementation is order-independent: it sorts the input by `entry.id`
|
|
8
|
+
* before clustering, performs a Union-Find pass over all pairwise comparisons,
|
|
9
|
+
* and emits clusters of size ≥ 2 in deterministic order. The same logical
|
|
10
|
+
* input always produces the same output (audit finding H12).
|
|
11
|
+
*/
|
|
12
|
+
export declare function cosineClusters(
|
|
13
|
+
entries: MemoryEntry[],
|
|
14
|
+
vectorStore: VectorStore,
|
|
15
|
+
threshold: number
|
|
16
|
+
): MemoryEntry[][];
|
|
17
|
+
//# sourceMappingURL=cluster.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cluster.d.ts","sourceRoot":"","sources":["../../src/consolidation/cluster.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAEjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAcjE,wBAAgB,eAAe,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,CAE9D;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,GAAG,WAAW,EAAE,EAAE,CAanH"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { cosineSimilarity } from '../retrieval/cosine-ann.js';
|
|
2
|
+
export function centroidSummary(cluster) {
|
|
3
|
+
return cluster.reduce((longest, e) => (e.content.length > longest.content.length ? e : longest)).content;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Cluster entries whose embedding cosine similarity meets `threshold`.
|
|
7
|
+
*
|
|
8
|
+
* The implementation is order-independent: it sorts the input by `entry.id`
|
|
9
|
+
* before clustering, performs a Union-Find pass over all pairwise comparisons,
|
|
10
|
+
* and emits clusters of size ≥ 2 in deterministic order. The same logical
|
|
11
|
+
* input always produces the same output (audit finding H12).
|
|
12
|
+
*/
|
|
13
|
+
export function cosineClusters(entries, vectorStore, threshold) {
|
|
14
|
+
const vectored = collectVectored(entries, vectorStore);
|
|
15
|
+
if (vectored.length === 0) return [];
|
|
16
|
+
const parent = new Array(vectored.length).fill(0).map((_, i) => i);
|
|
17
|
+
for (let i = 0; i < vectored.length; i++) {
|
|
18
|
+
for (let j = i + 1; j < vectored.length; j++) {
|
|
19
|
+
const score = cosineSimilarity(vectored[i].vec, vectored[j].vec);
|
|
20
|
+
if (score >= threshold) union(parent, i, j);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return collectClusters(parent, vectored);
|
|
24
|
+
}
|
|
25
|
+
function collectClusters(parent, vectored) {
|
|
26
|
+
const groups = new Map();
|
|
27
|
+
for (let i = 0; i < vectored.length; i++) {
|
|
28
|
+
const root = find(parent, i);
|
|
29
|
+
const list = groups.get(root) ?? [];
|
|
30
|
+
list.push(vectored[i].entry);
|
|
31
|
+
groups.set(root, list);
|
|
32
|
+
}
|
|
33
|
+
return [...groups.values()].filter((m) => m.length >= 2);
|
|
34
|
+
}
|
|
35
|
+
function collectVectored(entries, vectorStore) {
|
|
36
|
+
const vectored = [];
|
|
37
|
+
for (const entry of entries) {
|
|
38
|
+
const vec = vectorStore.read(entry.id);
|
|
39
|
+
if (vec !== null) vectored.push({ entry, vec });
|
|
40
|
+
}
|
|
41
|
+
// Byte-order sort — locale-independent and deterministic across environments.
|
|
42
|
+
vectored.sort((a, b) => (a.entry.id < b.entry.id ? -1 : a.entry.id > b.entry.id ? 1 : 0));
|
|
43
|
+
return vectored;
|
|
44
|
+
}
|
|
45
|
+
function find(parent, i) {
|
|
46
|
+
while (parent[i] !== i) {
|
|
47
|
+
parent[i] = parent[parent[i]];
|
|
48
|
+
i = parent[i];
|
|
49
|
+
}
|
|
50
|
+
return i;
|
|
51
|
+
}
|
|
52
|
+
function union(parent, a, b) {
|
|
53
|
+
const ra = find(parent, a);
|
|
54
|
+
const rb = find(parent, b);
|
|
55
|
+
if (ra === rb) return;
|
|
56
|
+
if (ra < rb) parent[rb] = ra;
|
|
57
|
+
else parent[ra] = rb;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=cluster.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cluster.js","sourceRoot":"","sources":["../../src/consolidation/cluster.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAY9D,MAAM,UAAU,eAAe,CAAC,OAAsB;IACrD,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;AAC1G,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAAC,OAAsB,EAAE,WAAwB,EAAE,SAAiB;IACjG,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACvD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAErC,MAAM,MAAM,GAAG,IAAI,KAAK,CAAS,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9C,MAAM,KAAK,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAE,CAAC,GAAG,CAAC,CAAC;YACnE,IAAI,KAAK,IAAI,SAAS;gBAAE,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7C,CAAC;IACF,CAAC;IAED,OAAO,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,eAAe,CAAC,MAAgB,EAAE,QAAyB;IACnE,MAAM,MAAM,GAAG,IAAI,GAAG,EAAyB,CAAC;IAChD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC7B,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACpC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC;QAC9B,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACxB,CAAC;IACD,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED,SAAS,eAAe,CAAC,OAAsB,EAAE,WAAwB;IACxE,MAAM,QAAQ,GAAoB,EAAE,CAAC;IACrC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACvC,IAAI,GAAG,KAAK,IAAI;YAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;IACjD,CAAC;IACD,8EAA8E;IAC9E,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1F,OAAO,QAAQ,CAAC;AACjB,CAAC;AAED,SAAS,IAAI,CAAC,MAAgB,EAAE,CAAS;IACxC,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAE,CAAE,CAAC;QAChC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAE,CAAC;IAChB,CAAC;IACD,OAAO,CAAC,CAAC;AACV,CAAC;AAED,SAAS,KAAK,CAAC,MAAgB,EAAE,CAAS,EAAE,CAAS;IACpD,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC3B,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC3B,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO;IACtB,IAAI,EAAE,GAAG,EAAE;QAAE,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;;QACxB,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;AACtB,CAAC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory Consolidation Service.
|
|
3
|
+
*
|
|
4
|
+
* Orchestrates the full consolidation cycle for the agent memory system:
|
|
5
|
+
* 1. Prune decayed entries below the strength threshold
|
|
6
|
+
* 2. Run git-based invalidation to weaken memories referencing changed files
|
|
7
|
+
* 3. Detect similar episodic entries and merge them into semantic patterns
|
|
8
|
+
* 4. Auto-promote high-access verified entries to semantic store
|
|
9
|
+
*
|
|
10
|
+
* Designed to be called from the `valora consolidate` CLI command
|
|
11
|
+
* or as a post-feedback automatic maintenance step.
|
|
12
|
+
*/
|
|
13
|
+
import type { ConsolidationOptions, ConsolidationResult, MemoryStorePort } from '@windagency/valora-plugin-api';
|
|
14
|
+
import type { EmbedderPort } from './embeddings/embedder.port.js';
|
|
15
|
+
import { type ProviderLookup } from './embeddings/resolve-embedder.js';
|
|
16
|
+
export type { ConsolidationOptions, ConsolidationResult };
|
|
17
|
+
/**
|
|
18
|
+
* Optional callback invoked after consolidation finishes. The host wires
|
|
19
|
+
* this to its `pipeline-emitter` so the existing observability surface
|
|
20
|
+
* remains. When omitted (e.g. plugin-direct usage or tests), no event is
|
|
21
|
+
* emitted.
|
|
22
|
+
*/
|
|
23
|
+
export type ConsolidationCompleteListener = (_result: ConsolidationResult) => void;
|
|
24
|
+
/**
|
|
25
|
+
* Optional context the host supplies so the package does not depend on
|
|
26
|
+
* `config/loader` or `output/pipeline-emitter`. When absent, the service
|
|
27
|
+
* uses a sensible 30-day default for the semantic half-life and emits
|
|
28
|
+
* no completion event.
|
|
29
|
+
*/
|
|
30
|
+
export interface ConsolidationServiceContext {
|
|
31
|
+
/** Listener for consolidation-complete events (host wires to pipeline-emitter). */
|
|
32
|
+
onComplete?: ConsolidationCompleteListener;
|
|
33
|
+
/** Provider lookup so cosine consolidation can resolve an embedder. */
|
|
34
|
+
providerLookup?: ProviderLookup;
|
|
35
|
+
/** Override the semantic half-life used for cosine-merged entries. */
|
|
36
|
+
semanticHalfLifeDays?: number;
|
|
37
|
+
}
|
|
38
|
+
export declare class MemoryConsolidationService {
|
|
39
|
+
private readonly context;
|
|
40
|
+
private readonly embedder?;
|
|
41
|
+
private readonly manager;
|
|
42
|
+
private readonly store;
|
|
43
|
+
constructor(store?: MemoryStorePort, embedder?: EmbedderPort, context?: ConsolidationServiceContext);
|
|
44
|
+
/**
|
|
45
|
+
* Build a service with the embedder resolved from the host-provided
|
|
46
|
+
* `providerLookup`. Used by the singleton helper and the CLI entry
|
|
47
|
+
* points so cosine consolidation fires automatically when a provider
|
|
48
|
+
* with `embed?()` is available.
|
|
49
|
+
*
|
|
50
|
+
* Without a provider lookup, the service is constructed embedder-less
|
|
51
|
+
* and falls back to the Jaccard merge path.
|
|
52
|
+
*/
|
|
53
|
+
static create(context?: ConsolidationServiceContext): Promise<MemoryConsolidationService>;
|
|
54
|
+
consolidate(options?: ConsolidationOptions): Promise<ConsolidationResult>;
|
|
55
|
+
private autoPromoteEntries;
|
|
56
|
+
private buildCluster;
|
|
57
|
+
private mergeCluster;
|
|
58
|
+
private readSemanticHalfLifeOrDefault;
|
|
59
|
+
/** Groups episodic entries by their primary tag; entries with no tags are excluded. */
|
|
60
|
+
private buildTagGroups;
|
|
61
|
+
private mergeClusterCosine;
|
|
62
|
+
private mergeCosine;
|
|
63
|
+
private mergeEpisodicEntries;
|
|
64
|
+
private mergeJaccard;
|
|
65
|
+
private runGitInvalidation;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Returns the shared {@link MemoryConsolidationService} for this process,
|
|
69
|
+
* resolving the configured embedder on first use so cosine consolidation can
|
|
70
|
+
* fire when a provider implements `embed?()`. Subsequent calls return the same
|
|
71
|
+
* instance without re-resolving.
|
|
72
|
+
*/
|
|
73
|
+
export declare function getMemoryConsolidation(): Promise<MemoryConsolidationService>;
|
|
74
|
+
export declare function resetMemoryConsolidation(): void;
|
|
75
|
+
//# sourceMappingURL=consolidation-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consolidation-service.d.ts","sourceRoot":"","sources":["../src/consolidation-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EACX,oBAAoB,EACpB,mBAAmB,EAGnB,eAAe,EACf,MAAM,+BAA+B,CAAC;AAIvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAGlE,OAAO,EAAE,KAAK,cAAc,EAAmB,MAAM,kCAAkC,CAAC;AAOxF,YAAY,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,CAAC;AAE1D;;;;;GAKG;AAEH,MAAM,MAAM,6BAA6B,GAAG,CAAC,OAAO,EAAE,mBAAmB,KAAK,IAAI,CAAC;AAEnF;;;;;GAKG;AACH,MAAM,WAAW,2BAA2B;IAC3C,mFAAmF;IACnF,UAAU,CAAC,EAAE,6BAA6B,CAAC;IAC3C,uEAAuE;IACvE,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,sEAAsE;IACtE,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAgDD,qBAAa,0BAA0B;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA8B;IACtD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAe;IACzC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgB;IACxC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAkB;gBAE5B,KAAK,CAAC,EAAE,eAAe,EAAE,QAAQ,CAAC,EAAE,YAAY,EAAE,OAAO,GAAE,2BAAgC;IAOvG;;;;;;;;OAQG;WACU,MAAM,CAAC,OAAO,GAAE,2BAAgC,GAAG,OAAO,CAAC,0BAA0B,CAAC;IAU7F,WAAW,CAAC,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,mBAAmB,CAAC;YAoDrE,kBAAkB;IAgBhC,OAAO,CAAC,YAAY;YAmBN,YAAY;IAoC1B,OAAO,CAAC,6BAA6B;IAIrC,uFAAuF;IACvF,OAAO,CAAC,cAAc;YAWR,kBAAkB;YA0ClB,WAAW;YA0BX,oBAAoB;YASpB,YAAY;YA2BZ,kBAAkB;CA6DhC;AAsBD;;;;;GAKG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,0BAA0B,CAAC,CAOlF;AAED,wBAAgB,wBAAwB,IAAI,IAAI,CAG/C"}
|