audrey 0.17.0 → 0.21.0

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