audrey 0.16.1 → 0.20.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.
- package/LICENSE +21 -21
- package/README.md +146 -724
- package/dist/mcp-server/config.d.ts +20 -0
- package/dist/mcp-server/config.d.ts.map +1 -0
- package/dist/mcp-server/config.js +125 -0
- package/dist/mcp-server/config.js.map +1 -0
- package/dist/mcp-server/index.d.ts +100 -0
- package/dist/mcp-server/index.d.ts.map +1 -0
- package/dist/mcp-server/index.js +1113 -0
- package/dist/mcp-server/index.js.map +1 -0
- package/dist/src/adaptive.d.ts +7 -0
- package/dist/src/adaptive.d.ts.map +1 -0
- package/dist/src/adaptive.js +49 -0
- package/dist/src/adaptive.js.map +1 -0
- package/dist/src/affect.d.ts +19 -0
- package/dist/src/affect.d.ts.map +1 -0
- package/dist/src/affect.js +72 -0
- package/dist/src/affect.js.map +1 -0
- package/dist/src/audrey.d.ts +140 -0
- package/dist/src/audrey.d.ts.map +1 -0
- package/dist/src/audrey.js +564 -0
- package/dist/src/audrey.js.map +1 -0
- package/dist/src/capsule.d.ts +68 -0
- package/dist/src/capsule.d.ts.map +1 -0
- package/dist/src/capsule.js +311 -0
- package/dist/src/capsule.js.map +1 -0
- package/dist/src/causal.d.ts +28 -0
- package/dist/src/causal.d.ts.map +1 -0
- package/dist/src/causal.js +65 -0
- package/dist/src/causal.js.map +1 -0
- package/dist/src/confidence.d.ts +12 -0
- package/dist/src/confidence.d.ts.map +1 -0
- package/dist/src/confidence.js +63 -0
- package/dist/src/confidence.js.map +1 -0
- package/dist/src/consolidate.d.ts +8 -0
- package/dist/src/consolidate.d.ts.map +1 -0
- package/dist/src/consolidate.js +218 -0
- package/dist/src/consolidate.js.map +1 -0
- package/dist/src/context.d.ts +3 -0
- package/dist/src/context.d.ts.map +1 -0
- package/dist/src/context.js +19 -0
- package/dist/src/context.js.map +1 -0
- package/dist/src/db.d.ts +12 -0
- package/dist/src/db.d.ts.map +1 -0
- package/dist/src/db.js +380 -0
- package/dist/src/db.js.map +1 -0
- package/dist/src/decay.d.ts +7 -0
- package/dist/src/decay.d.ts.map +1 -0
- package/dist/src/decay.js +68 -0
- package/dist/src/decay.js.map +1 -0
- package/dist/src/embedding.d.ts +57 -0
- package/dist/src/embedding.d.ts.map +1 -0
- package/dist/src/embedding.js +254 -0
- package/dist/src/embedding.js.map +1 -0
- package/dist/src/encode.d.ts +15 -0
- package/dist/src/encode.d.ts.map +1 -0
- package/dist/src/encode.js +36 -0
- package/dist/src/encode.js.map +1 -0
- package/dist/src/events.d.ts +69 -0
- package/dist/src/events.d.ts.map +1 -0
- package/dist/src/events.js +149 -0
- package/dist/src/events.js.map +1 -0
- package/dist/src/export.d.ts +3 -0
- package/dist/src/export.d.ts.map +1 -0
- package/dist/src/export.js +46 -0
- package/dist/src/export.js.map +1 -0
- package/dist/src/forget.d.ts +11 -0
- package/dist/src/forget.d.ts.map +1 -0
- package/dist/src/forget.js +105 -0
- package/dist/src/forget.js.map +1 -0
- package/dist/src/fts.d.ts +34 -0
- package/dist/src/fts.d.ts.map +1 -0
- package/dist/src/fts.js +117 -0
- package/dist/src/fts.js.map +1 -0
- package/dist/src/hybrid-recall.d.ts +37 -0
- package/dist/src/hybrid-recall.d.ts.map +1 -0
- package/dist/src/hybrid-recall.js +213 -0
- package/dist/src/hybrid-recall.js.map +1 -0
- package/dist/src/import.d.ts +4 -0
- package/dist/src/import.d.ts.map +1 -0
- package/dist/src/import.js +127 -0
- package/dist/src/import.js.map +1 -0
- package/dist/src/index.d.ts +22 -0
- package/dist/src/index.d.ts.map +1 -0
- package/{src → dist/src}/index.js +5 -13
- package/dist/src/index.js.map +1 -0
- package/dist/src/interference.d.ts +13 -0
- package/dist/src/interference.d.ts.map +1 -0
- package/dist/src/interference.js +45 -0
- package/dist/src/interference.js.map +1 -0
- package/dist/src/introspect.d.ts +4 -0
- package/dist/src/introspect.d.ts.map +1 -0
- package/dist/src/introspect.js +40 -0
- package/dist/src/introspect.js.map +1 -0
- package/dist/src/llm.d.ts +38 -0
- package/dist/src/llm.d.ts.map +1 -0
- package/dist/src/llm.js +167 -0
- package/dist/src/llm.js.map +1 -0
- package/dist/src/migrate.d.ts +6 -0
- package/dist/src/migrate.d.ts.map +1 -0
- package/dist/src/migrate.js +51 -0
- package/dist/src/migrate.js.map +1 -0
- package/dist/src/promote.d.ts +40 -0
- package/dist/src/promote.d.ts.map +1 -0
- package/dist/src/promote.js +200 -0
- package/dist/src/promote.js.map +1 -0
- package/dist/src/prompts.d.ts +16 -0
- package/dist/src/prompts.d.ts.map +1 -0
- package/{src → dist/src}/prompts.js +172 -203
- package/dist/src/prompts.js.map +1 -0
- package/dist/src/recall.d.ts +9 -0
- package/dist/src/recall.d.ts.map +1 -0
- package/dist/src/recall.js +432 -0
- package/dist/src/recall.js.map +1 -0
- package/dist/src/redact.d.ts +27 -0
- package/dist/src/redact.d.ts.map +1 -0
- package/dist/src/redact.js +228 -0
- package/dist/src/redact.js.map +1 -0
- package/dist/src/rollback.d.ts +8 -0
- package/dist/src/rollback.d.ts.map +1 -0
- package/dist/src/rollback.js +33 -0
- package/dist/src/rollback.js.map +1 -0
- package/dist/src/routes.d.ts +7 -0
- package/dist/src/routes.d.ts.map +1 -0
- package/dist/src/routes.js +226 -0
- package/dist/src/routes.js.map +1 -0
- package/dist/src/rules-compiler.d.ts +20 -0
- package/dist/src/rules-compiler.d.ts.map +1 -0
- package/dist/src/rules-compiler.js +143 -0
- package/dist/src/rules-compiler.js.map +1 -0
- package/dist/src/server.d.ts +12 -0
- package/dist/src/server.d.ts.map +1 -0
- package/dist/src/server.js +22 -0
- package/dist/src/server.js.map +1 -0
- package/dist/src/tool-trace.d.ts +37 -0
- package/dist/src/tool-trace.d.ts.map +1 -0
- package/dist/src/tool-trace.js +142 -0
- package/dist/src/tool-trace.js.map +1 -0
- package/dist/src/types.d.ts +446 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +6 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/ulid.d.ts +3 -0
- package/dist/src/ulid.d.ts.map +1 -0
- package/dist/src/ulid.js +11 -0
- package/dist/src/ulid.js.map +1 -0
- package/dist/src/utils.d.ts +10 -0
- package/dist/src/utils.d.ts.map +1 -0
- package/dist/src/utils.js +41 -0
- package/dist/src/utils.js.map +1 -0
- package/dist/src/validate.d.ts +22 -0
- package/dist/src/validate.d.ts.map +1 -0
- package/dist/src/validate.js +109 -0
- package/dist/src/validate.js.map +1 -0
- package/docs/assets/benchmarks/local-benchmark.svg +45 -0
- package/docs/assets/benchmarks/operations-benchmark.svg +45 -0
- package/docs/assets/benchmarks/published-memory-standards.svg +50 -0
- package/docs/benchmarking.md +151 -0
- package/docs/production-readiness.md +124 -0
- package/examples/fintech-ops-demo.js +67 -0
- package/examples/healthcare-ops-demo.js +67 -0
- package/examples/stripe-demo.js +105 -0
- package/package.json +53 -13
- package/mcp-server/config.js +0 -80
- package/mcp-server/index.js +0 -729
- package/src/adaptive.js +0 -53
- package/src/affect.js +0 -64
- package/src/audrey.js +0 -604
- package/src/causal.js +0 -95
- package/src/confidence.js +0 -120
- package/src/consolidate.js +0 -265
- package/src/context.js +0 -15
- package/src/db.js +0 -370
- package/src/decay.js +0 -84
- package/src/embedding.js +0 -256
- package/src/encode.js +0 -63
- package/src/export.js +0 -67
- package/src/forget.js +0 -111
- package/src/import.js +0 -245
- package/src/interference.js +0 -51
- package/src/introspect.js +0 -48
- package/src/llm.js +0 -246
- package/src/migrate.js +0 -58
- package/src/recall.js +0 -352
- package/src/rollback.js +0 -42
- package/src/ulid.js +0 -18
- package/src/utils.js +0 -38
- package/src/validate.js +0 -172
|
@@ -0,0 +1,564 @@
|
|
|
1
|
+
import { EventEmitter } from 'node:events';
|
|
2
|
+
import { createDatabase, closeDatabase } from './db.js';
|
|
3
|
+
import { createEmbeddingProvider } from './embedding.js';
|
|
4
|
+
import { createLLMProvider } from './llm.js';
|
|
5
|
+
import { encodeEpisode } from './encode.js';
|
|
6
|
+
import { recall as recallFn, recallStream as recallStreamFn } from './recall.js';
|
|
7
|
+
import { validateMemory } from './validate.js';
|
|
8
|
+
import { runConsolidation } from './consolidate.js';
|
|
9
|
+
import { applyDecay } from './decay.js';
|
|
10
|
+
import { rollbackConsolidation, getConsolidationHistory } from './rollback.js';
|
|
11
|
+
import { forgetMemory, forgetByQuery as forgetByQueryFn, purgeMemories } from './forget.js';
|
|
12
|
+
import { introspect as introspectFn } from './introspect.js';
|
|
13
|
+
import { buildContextResolutionPrompt, buildReflectionPrompt } from './prompts.js';
|
|
14
|
+
import { exportMemories } from './export.js';
|
|
15
|
+
import { importMemories } from './import.js';
|
|
16
|
+
import { suggestConsolidationParams as suggestParamsFn } from './adaptive.js';
|
|
17
|
+
import { reembedAll } from './migrate.js';
|
|
18
|
+
import { applyInterference } from './interference.js';
|
|
19
|
+
import { detectResonance } from './affect.js';
|
|
20
|
+
import { observeTool } from './tool-trace.js';
|
|
21
|
+
import { listEvents, countEvents, recentFailures, } from './events.js';
|
|
22
|
+
import { buildCapsule } from './capsule.js';
|
|
23
|
+
import { findPromotionCandidates, } from './promote.js';
|
|
24
|
+
import { renderAllRules } from './rules-compiler.js';
|
|
25
|
+
import { insertEvent } from './events.js';
|
|
26
|
+
import { mkdirSync, writeFileSync, existsSync } from 'node:fs';
|
|
27
|
+
import { dirname, join, resolve as pathResolve } from 'node:path';
|
|
28
|
+
export class Audrey extends EventEmitter {
|
|
29
|
+
agent;
|
|
30
|
+
dataDir;
|
|
31
|
+
embeddingProvider;
|
|
32
|
+
db;
|
|
33
|
+
llmProvider;
|
|
34
|
+
confidenceConfig;
|
|
35
|
+
consolidationConfig;
|
|
36
|
+
decayConfig;
|
|
37
|
+
interferenceConfig;
|
|
38
|
+
contextConfig;
|
|
39
|
+
affectConfig;
|
|
40
|
+
autoReflect;
|
|
41
|
+
_migrationPending;
|
|
42
|
+
_autoConsolidateTimer;
|
|
43
|
+
_closed;
|
|
44
|
+
constructor({ dataDir = './audrey-data', agent = 'default', embedding = { provider: 'mock', dimensions: 64 }, llm, confidence = {}, consolidation = {}, decay = {}, interference = {}, context = {}, affect = {}, autoReflect = false, } = {}) {
|
|
45
|
+
super();
|
|
46
|
+
const dormantThreshold = decay.dormantThreshold ?? 0.1;
|
|
47
|
+
if (dormantThreshold < 0 || dormantThreshold > 1) {
|
|
48
|
+
throw new Error(`dormantThreshold must be between 0 and 1, got: ${dormantThreshold}`);
|
|
49
|
+
}
|
|
50
|
+
const minEpisodes = consolidation.minEpisodes ?? 3;
|
|
51
|
+
if (!Number.isInteger(minEpisodes) || minEpisodes < 1) {
|
|
52
|
+
throw new Error(`minEpisodes must be a positive integer, got: ${minEpisodes}`);
|
|
53
|
+
}
|
|
54
|
+
this.agent = agent;
|
|
55
|
+
this.dataDir = dataDir;
|
|
56
|
+
this.embeddingProvider = createEmbeddingProvider(embedding);
|
|
57
|
+
const { db, migrated } = createDatabase(dataDir, { dimensions: this.embeddingProvider.dimensions });
|
|
58
|
+
this.db = db;
|
|
59
|
+
this._migrationPending = migrated;
|
|
60
|
+
this.llmProvider = llm ? createLLMProvider(llm) : null;
|
|
61
|
+
this.confidenceConfig = {
|
|
62
|
+
weights: confidence.weights,
|
|
63
|
+
halfLives: confidence.halfLives,
|
|
64
|
+
sourceReliability: confidence.sourceReliability,
|
|
65
|
+
interferenceWeight: interference.weight ?? 0.1,
|
|
66
|
+
contextWeight: context.weight ?? 0.3,
|
|
67
|
+
affectWeight: affect.weight ?? 0.2,
|
|
68
|
+
};
|
|
69
|
+
this.consolidationConfig = {
|
|
70
|
+
minEpisodes: consolidation.minEpisodes || 3,
|
|
71
|
+
};
|
|
72
|
+
this.decayConfig = { dormantThreshold: decay.dormantThreshold || 0.1 };
|
|
73
|
+
this._autoConsolidateTimer = null;
|
|
74
|
+
this._closed = false;
|
|
75
|
+
this.interferenceConfig = {
|
|
76
|
+
enabled: interference.enabled ?? true,
|
|
77
|
+
k: interference.k ?? 5,
|
|
78
|
+
threshold: interference.threshold ?? 0.6,
|
|
79
|
+
weight: interference.weight ?? 0.1,
|
|
80
|
+
};
|
|
81
|
+
this.contextConfig = {
|
|
82
|
+
enabled: context.enabled ?? true,
|
|
83
|
+
weight: context.weight ?? 0.3,
|
|
84
|
+
};
|
|
85
|
+
this.affectConfig = {
|
|
86
|
+
enabled: affect.enabled ?? true,
|
|
87
|
+
weight: affect.weight ?? 0.2,
|
|
88
|
+
arousalWeight: affect.arousalWeight ?? 0.3,
|
|
89
|
+
resonance: {
|
|
90
|
+
enabled: affect.resonance?.enabled ?? true,
|
|
91
|
+
k: affect.resonance?.k ?? 5,
|
|
92
|
+
threshold: affect.resonance?.threshold ?? 0.5,
|
|
93
|
+
affectThreshold: affect.resonance?.affectThreshold ?? 0.6,
|
|
94
|
+
},
|
|
95
|
+
};
|
|
96
|
+
this.autoReflect = autoReflect;
|
|
97
|
+
}
|
|
98
|
+
async _ensureMigrated() {
|
|
99
|
+
if (!this._migrationPending)
|
|
100
|
+
return;
|
|
101
|
+
const counts = await reembedAll(this.db, this.embeddingProvider);
|
|
102
|
+
this._migrationPending = false;
|
|
103
|
+
this.emit('migration', counts);
|
|
104
|
+
}
|
|
105
|
+
_emitValidation(id, params) {
|
|
106
|
+
validateMemory(this.db, this.embeddingProvider, { id, ...params }, {
|
|
107
|
+
llmProvider: this.llmProvider,
|
|
108
|
+
})
|
|
109
|
+
.then(validation => {
|
|
110
|
+
if (validation.action === 'reinforced') {
|
|
111
|
+
this.emit('reinforcement', {
|
|
112
|
+
episodeId: id,
|
|
113
|
+
targetId: validation.semanticId,
|
|
114
|
+
similarity: validation.similarity,
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
else if (validation.action === 'contradiction') {
|
|
118
|
+
this.emit('contradiction', {
|
|
119
|
+
episodeId: id,
|
|
120
|
+
contradictionId: validation.contradictionId,
|
|
121
|
+
semanticId: validation.semanticId,
|
|
122
|
+
similarity: validation.similarity,
|
|
123
|
+
resolution: validation.resolution,
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
})
|
|
127
|
+
.catch(err => this.emit('error', err));
|
|
128
|
+
}
|
|
129
|
+
async encode(params) {
|
|
130
|
+
await this._ensureMigrated();
|
|
131
|
+
const encodeParams = { ...params, arousalWeight: this.affectConfig.arousalWeight };
|
|
132
|
+
const id = await encodeEpisode(this.db, this.embeddingProvider, encodeParams);
|
|
133
|
+
this.emit('encode', { id, ...params });
|
|
134
|
+
if (this.interferenceConfig.enabled) {
|
|
135
|
+
applyInterference(this.db, this.embeddingProvider, id, params, this.interferenceConfig)
|
|
136
|
+
.then(affected => {
|
|
137
|
+
if (affected.length > 0) {
|
|
138
|
+
this.emit('interference', { episodeId: id, affected });
|
|
139
|
+
}
|
|
140
|
+
})
|
|
141
|
+
.catch(err => this.emit('error', err));
|
|
142
|
+
}
|
|
143
|
+
if (this.affectConfig.enabled && this.affectConfig.resonance.enabled && params.affect?.valence !== undefined) {
|
|
144
|
+
detectResonance(this.db, this.embeddingProvider, id, params, this.affectConfig.resonance)
|
|
145
|
+
.then(echoes => {
|
|
146
|
+
if (echoes.length > 0) {
|
|
147
|
+
this.emit('resonance', { episodeId: id, affect: params.affect, echoes });
|
|
148
|
+
}
|
|
149
|
+
})
|
|
150
|
+
.catch(err => this.emit('error', err));
|
|
151
|
+
}
|
|
152
|
+
this._emitValidation(id, params);
|
|
153
|
+
return id;
|
|
154
|
+
}
|
|
155
|
+
async reflect(turns) {
|
|
156
|
+
if (!this.llmProvider)
|
|
157
|
+
return { encoded: 0, memories: [], skipped: 'no llm provider' };
|
|
158
|
+
const prompt = buildReflectionPrompt(turns);
|
|
159
|
+
let raw;
|
|
160
|
+
try {
|
|
161
|
+
raw = await this.llmProvider.chat(prompt);
|
|
162
|
+
}
|
|
163
|
+
catch (err) {
|
|
164
|
+
this.emit('error', err);
|
|
165
|
+
return { encoded: 0, memories: [], skipped: 'llm error' };
|
|
166
|
+
}
|
|
167
|
+
let parsed;
|
|
168
|
+
try {
|
|
169
|
+
parsed = JSON.parse(raw);
|
|
170
|
+
}
|
|
171
|
+
catch {
|
|
172
|
+
return { encoded: 0, memories: [], skipped: 'invalid llm response' };
|
|
173
|
+
}
|
|
174
|
+
const memories = parsed.memories ?? [];
|
|
175
|
+
let encoded = 0;
|
|
176
|
+
for (const mem of memories) {
|
|
177
|
+
if (!mem.content || !mem.source)
|
|
178
|
+
continue;
|
|
179
|
+
try {
|
|
180
|
+
await this.encode({
|
|
181
|
+
content: mem.content,
|
|
182
|
+
source: mem.source,
|
|
183
|
+
salience: mem.salience,
|
|
184
|
+
tags: mem.tags,
|
|
185
|
+
private: mem.private ?? false,
|
|
186
|
+
affect: mem.affect ?? undefined,
|
|
187
|
+
});
|
|
188
|
+
encoded++;
|
|
189
|
+
}
|
|
190
|
+
catch (err) {
|
|
191
|
+
this.emit('error', err);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
return { encoded, memories: memories };
|
|
195
|
+
}
|
|
196
|
+
async encodeBatch(paramsList) {
|
|
197
|
+
await this._ensureMigrated();
|
|
198
|
+
const ids = [];
|
|
199
|
+
for (const params of paramsList) {
|
|
200
|
+
const id = await encodeEpisode(this.db, this.embeddingProvider, params);
|
|
201
|
+
ids.push(id);
|
|
202
|
+
this.emit('encode', { id, ...params });
|
|
203
|
+
}
|
|
204
|
+
for (let i = 0; i < ids.length; i++) {
|
|
205
|
+
this._emitValidation(ids[i], paramsList[i]);
|
|
206
|
+
}
|
|
207
|
+
return ids;
|
|
208
|
+
}
|
|
209
|
+
async recall(query, options = {}) {
|
|
210
|
+
await this._ensureMigrated();
|
|
211
|
+
return recallFn(this.db, this.embeddingProvider, query, {
|
|
212
|
+
...options,
|
|
213
|
+
confidenceConfig: this._recallConfig(options),
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
async *recallStream(query, options = {}) {
|
|
217
|
+
await this._ensureMigrated();
|
|
218
|
+
yield* recallStreamFn(this.db, this.embeddingProvider, query, {
|
|
219
|
+
...options,
|
|
220
|
+
confidenceConfig: this._recallConfig(options),
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
_recallConfig(options) {
|
|
224
|
+
let config = options.confidenceConfig ?? this.confidenceConfig;
|
|
225
|
+
if (this.contextConfig.enabled && options.context) {
|
|
226
|
+
config = { ...config, retrievalContext: options.context };
|
|
227
|
+
}
|
|
228
|
+
if (this.affectConfig.enabled && options.mood) {
|
|
229
|
+
config = { ...config, retrievalMood: options.mood };
|
|
230
|
+
}
|
|
231
|
+
return config;
|
|
232
|
+
}
|
|
233
|
+
async consolidate(options = {}) {
|
|
234
|
+
await this._ensureMigrated();
|
|
235
|
+
const result = await runConsolidation(this.db, this.embeddingProvider, {
|
|
236
|
+
minClusterSize: options.minClusterSize || this.consolidationConfig.minEpisodes,
|
|
237
|
+
similarityThreshold: options.similarityThreshold || 0.80,
|
|
238
|
+
extractPrinciple: options.extractPrinciple,
|
|
239
|
+
llmProvider: options.llmProvider || this.llmProvider || undefined,
|
|
240
|
+
});
|
|
241
|
+
const run = db_prepare_get_status(this.db, result.runId);
|
|
242
|
+
const output = { ...result, status: run?.status || 'completed' };
|
|
243
|
+
this.emit('consolidation', output);
|
|
244
|
+
return output;
|
|
245
|
+
}
|
|
246
|
+
decay(options = {}) {
|
|
247
|
+
const result = applyDecay(this.db, {
|
|
248
|
+
dormantThreshold: options.dormantThreshold || this.decayConfig.dormantThreshold,
|
|
249
|
+
halfLives: options.halfLives ?? this.confidenceConfig.halfLives,
|
|
250
|
+
});
|
|
251
|
+
this.emit('decay', result);
|
|
252
|
+
return result;
|
|
253
|
+
}
|
|
254
|
+
rollback(runId) {
|
|
255
|
+
const result = rollbackConsolidation(this.db, runId);
|
|
256
|
+
this.emit('rollback', { runId, ...result });
|
|
257
|
+
return result;
|
|
258
|
+
}
|
|
259
|
+
async resolveTruth(contradictionId) {
|
|
260
|
+
if (!this.llmProvider) {
|
|
261
|
+
throw new Error('resolveTruth requires an LLM provider');
|
|
262
|
+
}
|
|
263
|
+
const contradiction = this.db.prepare('SELECT * FROM contradictions WHERE id = ?').get(contradictionId);
|
|
264
|
+
if (!contradiction)
|
|
265
|
+
throw new Error(`Contradiction not found: ${contradictionId}`);
|
|
266
|
+
const claimA = this._loadClaimContent(contradiction.claim_a_id, contradiction.claim_a_type);
|
|
267
|
+
const claimB = this._loadClaimContent(contradiction.claim_b_id, contradiction.claim_b_type);
|
|
268
|
+
const messages = buildContextResolutionPrompt(claimA, claimB);
|
|
269
|
+
const result = await this.llmProvider.json(messages);
|
|
270
|
+
const now = new Date().toISOString();
|
|
271
|
+
const newState = result.resolution === 'context_dependent' ? 'context_dependent' : 'resolved';
|
|
272
|
+
this.db.prepare(`
|
|
273
|
+
UPDATE contradictions SET state = ?, resolution = ?, resolved_at = ?
|
|
274
|
+
WHERE id = ?
|
|
275
|
+
`).run(newState, JSON.stringify(result), now, contradictionId);
|
|
276
|
+
if (result.resolution === 'a_wins' && contradiction.claim_a_type === 'semantic') {
|
|
277
|
+
this.db.prepare("UPDATE semantics SET state = 'active' WHERE id = ?").run(contradiction.claim_a_id);
|
|
278
|
+
}
|
|
279
|
+
if (result.resolution === 'b_wins' && contradiction.claim_b_type === 'semantic') {
|
|
280
|
+
this.db.prepare("UPDATE semantics SET state = 'active' WHERE id = ?").run(contradiction.claim_b_id);
|
|
281
|
+
}
|
|
282
|
+
if (result.resolution === 'context_dependent') {
|
|
283
|
+
if (contradiction.claim_a_type === 'semantic' && result.conditions) {
|
|
284
|
+
this.db.prepare("UPDATE semantics SET state = 'context_dependent', conditions = ? WHERE id = ?")
|
|
285
|
+
.run(JSON.stringify(result.conditions), contradiction.claim_a_id);
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
return result;
|
|
289
|
+
}
|
|
290
|
+
_loadClaimContent(claimId, claimType) {
|
|
291
|
+
if (claimType === 'semantic') {
|
|
292
|
+
const row = this.db.prepare('SELECT content FROM semantics WHERE id = ?').get(claimId);
|
|
293
|
+
if (!row)
|
|
294
|
+
throw new Error(`Semantic memory not found: ${claimId}`);
|
|
295
|
+
return row.content;
|
|
296
|
+
}
|
|
297
|
+
else if (claimType === 'episodic') {
|
|
298
|
+
const row = this.db.prepare('SELECT content FROM episodes WHERE id = ?').get(claimId);
|
|
299
|
+
if (!row)
|
|
300
|
+
throw new Error(`Episode not found: ${claimId}`);
|
|
301
|
+
return row.content;
|
|
302
|
+
}
|
|
303
|
+
throw new Error(`Unknown claim type: ${claimType}`);
|
|
304
|
+
}
|
|
305
|
+
consolidationHistory() {
|
|
306
|
+
return getConsolidationHistory(this.db);
|
|
307
|
+
}
|
|
308
|
+
introspect() {
|
|
309
|
+
return introspectFn(this.db);
|
|
310
|
+
}
|
|
311
|
+
memoryStatus() {
|
|
312
|
+
const episodes = this.db.prepare('SELECT COUNT(*) as c FROM episodes').get().c;
|
|
313
|
+
const semantics = this.db.prepare('SELECT COUNT(*) as c FROM semantics').get().c;
|
|
314
|
+
const procedures = this.db.prepare('SELECT COUNT(*) as c FROM procedures').get().c;
|
|
315
|
+
const searchableEpisodes = this.db.prepare('SELECT COUNT(*) as c FROM episodes WHERE embedding IS NOT NULL').get().c;
|
|
316
|
+
const searchableSemantics = this.db.prepare('SELECT COUNT(*) as c FROM semantics WHERE embedding IS NOT NULL').get().c;
|
|
317
|
+
const searchableProcedures = this.db.prepare('SELECT COUNT(*) as c FROM procedures WHERE embedding IS NOT NULL').get().c;
|
|
318
|
+
let vecEpisodes = 0, vecSemantics = 0, vecProcedures = 0;
|
|
319
|
+
try {
|
|
320
|
+
vecEpisodes = this.db.prepare('SELECT COUNT(*) as c FROM vec_episodes').get().c;
|
|
321
|
+
vecSemantics = this.db.prepare('SELECT COUNT(*) as c FROM vec_semantics').get().c;
|
|
322
|
+
vecProcedures = this.db.prepare('SELECT COUNT(*) as c FROM vec_procedures').get().c;
|
|
323
|
+
}
|
|
324
|
+
catch {
|
|
325
|
+
// vec tables may not exist if no dimensions configured
|
|
326
|
+
}
|
|
327
|
+
const dimsRow = this.db.prepare("SELECT value FROM audrey_config WHERE key = 'dimensions'").get();
|
|
328
|
+
const dimensions = dimsRow ? parseInt(dimsRow.value, 10) : null;
|
|
329
|
+
const versionRow = this.db.prepare("SELECT value FROM audrey_config WHERE key = 'schema_version'").get();
|
|
330
|
+
const schemaVersion = versionRow ? parseInt(versionRow.value, 10) : 0;
|
|
331
|
+
const device = this.embeddingProvider._actualDevice
|
|
332
|
+
?? this.embeddingProvider.device
|
|
333
|
+
?? null;
|
|
334
|
+
const healthy = episodes === vecEpisodes
|
|
335
|
+
&& semantics === vecSemantics
|
|
336
|
+
&& procedures === vecProcedures;
|
|
337
|
+
const reembedRecommended = searchableEpisodes !== vecEpisodes
|
|
338
|
+
|| searchableSemantics !== vecSemantics
|
|
339
|
+
|| searchableProcedures !== vecProcedures;
|
|
340
|
+
return {
|
|
341
|
+
episodes,
|
|
342
|
+
vec_episodes: vecEpisodes,
|
|
343
|
+
semantics,
|
|
344
|
+
vec_semantics: vecSemantics,
|
|
345
|
+
procedures,
|
|
346
|
+
vec_procedures: vecProcedures,
|
|
347
|
+
searchable_episodes: searchableEpisodes,
|
|
348
|
+
searchable_semantics: searchableSemantics,
|
|
349
|
+
searchable_procedures: searchableProcedures,
|
|
350
|
+
dimensions,
|
|
351
|
+
schema_version: schemaVersion,
|
|
352
|
+
device: device ?? null,
|
|
353
|
+
healthy,
|
|
354
|
+
reembed_recommended: reembedRecommended,
|
|
355
|
+
};
|
|
356
|
+
}
|
|
357
|
+
async greeting({ context, recentLimit = 10, principleLimit = 5, identityLimit = 5 } = {}) {
|
|
358
|
+
const recent = this.db.prepare('SELECT id, content, source, tags, salience, created_at FROM episodes WHERE "private" = 0 ORDER BY created_at DESC LIMIT ?').all(recentLimit);
|
|
359
|
+
const principles = this.db.prepare('SELECT id, content, salience, created_at FROM semantics WHERE state = ? ORDER BY salience DESC LIMIT ?').all('active', principleLimit);
|
|
360
|
+
const identity = this.db.prepare('SELECT id, content, tags, salience, created_at FROM episodes WHERE "private" = 1 ORDER BY created_at DESC LIMIT ?').all(identityLimit);
|
|
361
|
+
const unresolved = this.db.prepare("SELECT id, content, tags, salience, created_at FROM episodes WHERE tags LIKE '%unresolved%' AND salience > 0.3 ORDER BY created_at DESC LIMIT 10").all();
|
|
362
|
+
const rawAffectRows = this.db.prepare("SELECT affect FROM episodes WHERE affect IS NOT NULL AND affect != '{}' ORDER BY created_at DESC LIMIT 20").all();
|
|
363
|
+
const affectParsed = rawAffectRows
|
|
364
|
+
.map(r => { try {
|
|
365
|
+
return JSON.parse(r.affect);
|
|
366
|
+
}
|
|
367
|
+
catch {
|
|
368
|
+
return null;
|
|
369
|
+
} })
|
|
370
|
+
.filter((a) => a !== null && a.valence !== undefined);
|
|
371
|
+
let mood;
|
|
372
|
+
if (affectParsed.length === 0) {
|
|
373
|
+
mood = { valence: 0, arousal: 0, samples: 0 };
|
|
374
|
+
}
|
|
375
|
+
else {
|
|
376
|
+
const sumV = affectParsed.reduce((s, a) => s + (a.valence ?? 0), 0);
|
|
377
|
+
const sumA = affectParsed.reduce((s, a) => s + (a.arousal ?? 0), 0);
|
|
378
|
+
mood = {
|
|
379
|
+
valence: sumV / affectParsed.length,
|
|
380
|
+
arousal: sumA / affectParsed.length,
|
|
381
|
+
samples: affectParsed.length,
|
|
382
|
+
};
|
|
383
|
+
}
|
|
384
|
+
const result = { recent, principles, mood, unresolved, identity };
|
|
385
|
+
if (context) {
|
|
386
|
+
result.contextual = await this.recall(context, { limit: 5, includePrivate: true });
|
|
387
|
+
}
|
|
388
|
+
return result;
|
|
389
|
+
}
|
|
390
|
+
async dream(options = {}) {
|
|
391
|
+
await this._ensureMigrated();
|
|
392
|
+
const consolidation = await this.consolidate({
|
|
393
|
+
minClusterSize: options.minClusterSize,
|
|
394
|
+
similarityThreshold: options.similarityThreshold,
|
|
395
|
+
});
|
|
396
|
+
const decay = this.decay({
|
|
397
|
+
dormantThreshold: options.dormantThreshold,
|
|
398
|
+
});
|
|
399
|
+
const stats = this.introspect();
|
|
400
|
+
const result = {
|
|
401
|
+
consolidation,
|
|
402
|
+
decay,
|
|
403
|
+
stats,
|
|
404
|
+
};
|
|
405
|
+
this.emit('dream', result);
|
|
406
|
+
return result;
|
|
407
|
+
}
|
|
408
|
+
export() {
|
|
409
|
+
return exportMemories(this.db);
|
|
410
|
+
}
|
|
411
|
+
async import(snapshot) {
|
|
412
|
+
return importMemories(this.db, this.embeddingProvider, snapshot);
|
|
413
|
+
}
|
|
414
|
+
startAutoConsolidate(intervalMs, options = {}) {
|
|
415
|
+
if (intervalMs < 1000) {
|
|
416
|
+
throw new Error('Auto-consolidation interval must be at least 1000ms');
|
|
417
|
+
}
|
|
418
|
+
if (this._autoConsolidateTimer) {
|
|
419
|
+
throw new Error('Auto-consolidation is already running');
|
|
420
|
+
}
|
|
421
|
+
this._autoConsolidateTimer = setInterval(() => {
|
|
422
|
+
this.consolidate(options).catch(err => this.emit('error', err));
|
|
423
|
+
}, intervalMs);
|
|
424
|
+
if (typeof this._autoConsolidateTimer.unref === 'function') {
|
|
425
|
+
this._autoConsolidateTimer.unref();
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
stopAutoConsolidate() {
|
|
429
|
+
if (this._autoConsolidateTimer) {
|
|
430
|
+
clearInterval(this._autoConsolidateTimer);
|
|
431
|
+
this._autoConsolidateTimer = null;
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
suggestConsolidationParams() {
|
|
435
|
+
return suggestParamsFn(this.db);
|
|
436
|
+
}
|
|
437
|
+
forget(id, options = {}) {
|
|
438
|
+
const result = forgetMemory(this.db, id, options);
|
|
439
|
+
this.emit('forget', result);
|
|
440
|
+
return result;
|
|
441
|
+
}
|
|
442
|
+
async forgetByQuery(query, options = {}) {
|
|
443
|
+
await this._ensureMigrated();
|
|
444
|
+
const result = await forgetByQueryFn(this.db, this.embeddingProvider, query, options);
|
|
445
|
+
if (result)
|
|
446
|
+
this.emit('forget', result);
|
|
447
|
+
return result;
|
|
448
|
+
}
|
|
449
|
+
purge() {
|
|
450
|
+
const result = purgeMemories(this.db);
|
|
451
|
+
this.emit('purge', result);
|
|
452
|
+
return result;
|
|
453
|
+
}
|
|
454
|
+
close() {
|
|
455
|
+
if (this._closed)
|
|
456
|
+
return;
|
|
457
|
+
this._closed = true;
|
|
458
|
+
this.stopAutoConsolidate();
|
|
459
|
+
closeDatabase(this.db);
|
|
460
|
+
}
|
|
461
|
+
async waitForIdle() {
|
|
462
|
+
return Promise.resolve();
|
|
463
|
+
}
|
|
464
|
+
observeTool(input) {
|
|
465
|
+
const result = observeTool(this.db, {
|
|
466
|
+
...input,
|
|
467
|
+
actorAgent: input.actorAgent ?? this.agent,
|
|
468
|
+
});
|
|
469
|
+
this.emit('tool-observed', result.event);
|
|
470
|
+
return result;
|
|
471
|
+
}
|
|
472
|
+
listEvents(query = {}) {
|
|
473
|
+
return listEvents(this.db, query);
|
|
474
|
+
}
|
|
475
|
+
countEvents(query = {}) {
|
|
476
|
+
return countEvents(this.db, query);
|
|
477
|
+
}
|
|
478
|
+
recentFailures(options = {}) {
|
|
479
|
+
return recentFailures(this.db, options);
|
|
480
|
+
}
|
|
481
|
+
async capsule(query, options = {}) {
|
|
482
|
+
const capsule = await buildCapsule(this, query, options);
|
|
483
|
+
this.emit('capsule', capsule);
|
|
484
|
+
return capsule;
|
|
485
|
+
}
|
|
486
|
+
findPromotionCandidates(options = {}) {
|
|
487
|
+
return findPromotionCandidates(this.db, options);
|
|
488
|
+
}
|
|
489
|
+
async promote(options = {}) {
|
|
490
|
+
const target = options.target ?? 'claude-rules';
|
|
491
|
+
if (target !== 'claude-rules') {
|
|
492
|
+
throw new Error(`promote target "${target}" is not implemented yet. PR 4 v1 ships claude-rules only.`);
|
|
493
|
+
}
|
|
494
|
+
const candidates = findPromotionCandidates(this.db, {
|
|
495
|
+
minConfidence: options.minConfidence,
|
|
496
|
+
minEvidence: options.minEvidence,
|
|
497
|
+
limit: options.limit,
|
|
498
|
+
target,
|
|
499
|
+
});
|
|
500
|
+
const dryRun = options.dryRun ?? !options.yes;
|
|
501
|
+
const projectDir = pathResolve(options.projectDir ?? process.cwd());
|
|
502
|
+
const promotedAt = new Date().toISOString();
|
|
503
|
+
const docs = renderAllRules(candidates, promotedAt);
|
|
504
|
+
const applied = [];
|
|
505
|
+
if (!dryRun) {
|
|
506
|
+
for (let i = 0; i < candidates.length; i++) {
|
|
507
|
+
const candidate = candidates[i];
|
|
508
|
+
const doc = docs[i];
|
|
509
|
+
const absolutePath = join(projectDir, doc.relativePath);
|
|
510
|
+
mkdirSync(dirname(absolutePath), { recursive: true });
|
|
511
|
+
const overwritten = existsSync(absolutePath);
|
|
512
|
+
writeFileSync(absolutePath, doc.body, 'utf-8');
|
|
513
|
+
insertEvent(this.db, {
|
|
514
|
+
eventType: 'Promotion',
|
|
515
|
+
source: 'promote-command',
|
|
516
|
+
actorAgent: this.agent,
|
|
517
|
+
toolName: target,
|
|
518
|
+
outcome: 'succeeded',
|
|
519
|
+
cwd: projectDir,
|
|
520
|
+
fileFingerprints: [doc.relativePath],
|
|
521
|
+
redactionState: 'clean',
|
|
522
|
+
metadata: {
|
|
523
|
+
memory_ids: [candidate.memory_id],
|
|
524
|
+
memory_type: candidate.memory_type,
|
|
525
|
+
candidate_id: candidate.candidate_id,
|
|
526
|
+
confidence: Number(candidate.confidence.toFixed(3)),
|
|
527
|
+
evidence_count: candidate.evidence_count,
|
|
528
|
+
failure_prevented: candidate.failure_prevented,
|
|
529
|
+
score: Number(candidate.score.toFixed(2)),
|
|
530
|
+
target,
|
|
531
|
+
absolute_path: absolutePath,
|
|
532
|
+
relative_path: doc.relativePath,
|
|
533
|
+
overwritten,
|
|
534
|
+
},
|
|
535
|
+
});
|
|
536
|
+
applied.push({
|
|
537
|
+
candidate_id: candidate.candidate_id,
|
|
538
|
+
memory_id: candidate.memory_id,
|
|
539
|
+
target,
|
|
540
|
+
relative_path: doc.relativePath,
|
|
541
|
+
absolute_path: absolutePath,
|
|
542
|
+
overwritten,
|
|
543
|
+
});
|
|
544
|
+
}
|
|
545
|
+
}
|
|
546
|
+
const result = {
|
|
547
|
+
target,
|
|
548
|
+
dry_run: dryRun,
|
|
549
|
+
project_dir: projectDir,
|
|
550
|
+
promoted_at: promotedAt,
|
|
551
|
+
candidates: candidates.map((c, i) => ({
|
|
552
|
+
...c,
|
|
553
|
+
rendered_path: docs[i].relativePath,
|
|
554
|
+
})),
|
|
555
|
+
applied,
|
|
556
|
+
};
|
|
557
|
+
this.emit('promote', result);
|
|
558
|
+
return result;
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
function db_prepare_get_status(db, runId) {
|
|
562
|
+
return db.prepare('SELECT status FROM consolidation_runs WHERE id = ?').get(runId);
|
|
563
|
+
}
|
|
564
|
+
//# sourceMappingURL=audrey.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audrey.js","sourceRoot":"","sources":["../../src/audrey.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory Capsule — structured, evidence-backed retrieval packet.
|
|
3
|
+
*
|
|
4
|
+
* Replaces "loose list of relevant memories" with a ranked, categorized,
|
|
5
|
+
* token-budgeted, explainable packet organized into nine sections:
|
|
6
|
+
* must_follow — rules the agent must respect this turn
|
|
7
|
+
* project_facts — stable facts about entities/concepts in the project
|
|
8
|
+
* user_preferences — how this user works (told-by-user or tagged preference)
|
|
9
|
+
* procedures — procedural memories the agent should apply
|
|
10
|
+
* risks — recent failures + memories tagged risk/warning/failure
|
|
11
|
+
* recent_changes — memories created or reinforced in the last N hours
|
|
12
|
+
* contradictions — open contradictions in the memory store
|
|
13
|
+
* uncertain_or_disputed — low-confidence or disputed-state memories
|
|
14
|
+
* evidence — IDs of every memory referenced in the other sections
|
|
15
|
+
*
|
|
16
|
+
* Every entry carries a `reason` explaining why it was included.
|
|
17
|
+
*/
|
|
18
|
+
import type { Audrey } from './audrey.js';
|
|
19
|
+
import type { RecallOptions, MemoryState } from './types.js';
|
|
20
|
+
export type CapsuleMode = 'balanced' | 'conservative' | 'aggressive';
|
|
21
|
+
export interface CapsuleOptions {
|
|
22
|
+
limit?: number;
|
|
23
|
+
budgetChars?: number;
|
|
24
|
+
mode?: CapsuleMode;
|
|
25
|
+
recentChangeWindowHours?: number;
|
|
26
|
+
includeRisks?: boolean;
|
|
27
|
+
includeContradictions?: boolean;
|
|
28
|
+
recall?: RecallOptions;
|
|
29
|
+
}
|
|
30
|
+
export type CapsuleEntryType = 'episode' | 'semantic' | 'procedural' | 'tool_failure' | 'contradiction';
|
|
31
|
+
export interface CapsuleEntry {
|
|
32
|
+
memory_id: string;
|
|
33
|
+
memory_type: CapsuleEntryType;
|
|
34
|
+
content: string;
|
|
35
|
+
confidence: number;
|
|
36
|
+
scope?: string;
|
|
37
|
+
evidence?: string[];
|
|
38
|
+
reason: string;
|
|
39
|
+
source?: string;
|
|
40
|
+
tags?: string[];
|
|
41
|
+
state?: MemoryState;
|
|
42
|
+
created_at?: string;
|
|
43
|
+
recommended_action?: string;
|
|
44
|
+
}
|
|
45
|
+
export interface MemoryCapsule {
|
|
46
|
+
query: string;
|
|
47
|
+
generated_at: string;
|
|
48
|
+
budget_chars: number;
|
|
49
|
+
used_chars: number;
|
|
50
|
+
truncated: boolean;
|
|
51
|
+
policy: {
|
|
52
|
+
mode: CapsuleMode;
|
|
53
|
+
recent_change_window_hours: number;
|
|
54
|
+
};
|
|
55
|
+
sections: {
|
|
56
|
+
must_follow: CapsuleEntry[];
|
|
57
|
+
project_facts: CapsuleEntry[];
|
|
58
|
+
user_preferences: CapsuleEntry[];
|
|
59
|
+
procedures: CapsuleEntry[];
|
|
60
|
+
risks: CapsuleEntry[];
|
|
61
|
+
recent_changes: CapsuleEntry[];
|
|
62
|
+
contradictions: CapsuleEntry[];
|
|
63
|
+
uncertain_or_disputed: CapsuleEntry[];
|
|
64
|
+
};
|
|
65
|
+
evidence_ids: string[];
|
|
66
|
+
}
|
|
67
|
+
export declare function buildCapsule(audrey: Audrey, query: string, options?: CapsuleOptions): Promise<MemoryCapsule>;
|
|
68
|
+
//# sourceMappingURL=capsule.d.ts.map
|