audrey 0.17.0 → 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.
Files changed (191) hide show
  1. package/README.md +129 -374
  2. package/dist/mcp-server/config.d.ts +20 -0
  3. package/dist/mcp-server/config.d.ts.map +1 -0
  4. package/dist/mcp-server/config.js +125 -0
  5. package/dist/mcp-server/config.js.map +1 -0
  6. package/dist/mcp-server/index.d.ts +100 -0
  7. package/dist/mcp-server/index.d.ts.map +1 -0
  8. package/dist/mcp-server/index.js +1113 -0
  9. package/dist/mcp-server/index.js.map +1 -0
  10. package/dist/src/adaptive.d.ts +7 -0
  11. package/dist/src/adaptive.d.ts.map +1 -0
  12. package/dist/src/adaptive.js +49 -0
  13. package/dist/src/adaptive.js.map +1 -0
  14. package/dist/src/affect.d.ts +19 -0
  15. package/dist/src/affect.d.ts.map +1 -0
  16. package/dist/src/affect.js +72 -0
  17. package/dist/src/affect.js.map +1 -0
  18. package/dist/src/audrey.d.ts +140 -0
  19. package/dist/src/audrey.d.ts.map +1 -0
  20. package/dist/src/audrey.js +564 -0
  21. package/dist/src/audrey.js.map +1 -0
  22. package/dist/src/capsule.d.ts +68 -0
  23. package/dist/src/capsule.d.ts.map +1 -0
  24. package/dist/src/capsule.js +311 -0
  25. package/dist/src/capsule.js.map +1 -0
  26. package/dist/src/causal.d.ts +28 -0
  27. package/dist/src/causal.d.ts.map +1 -0
  28. package/dist/src/causal.js +65 -0
  29. package/dist/src/causal.js.map +1 -0
  30. package/dist/src/confidence.d.ts +12 -0
  31. package/dist/src/confidence.d.ts.map +1 -0
  32. package/dist/src/confidence.js +63 -0
  33. package/dist/src/confidence.js.map +1 -0
  34. package/dist/src/consolidate.d.ts +8 -0
  35. package/dist/src/consolidate.d.ts.map +1 -0
  36. package/dist/src/consolidate.js +218 -0
  37. package/dist/src/consolidate.js.map +1 -0
  38. package/dist/src/context.d.ts +3 -0
  39. package/dist/src/context.d.ts.map +1 -0
  40. package/dist/src/context.js +19 -0
  41. package/dist/src/context.js.map +1 -0
  42. package/dist/src/db.d.ts +12 -0
  43. package/dist/src/db.d.ts.map +1 -0
  44. package/dist/src/db.js +380 -0
  45. package/dist/src/db.js.map +1 -0
  46. package/dist/src/decay.d.ts +7 -0
  47. package/dist/src/decay.d.ts.map +1 -0
  48. package/dist/src/decay.js +68 -0
  49. package/dist/src/decay.js.map +1 -0
  50. package/dist/src/embedding.d.ts +57 -0
  51. package/dist/src/embedding.d.ts.map +1 -0
  52. package/dist/src/embedding.js +254 -0
  53. package/dist/src/embedding.js.map +1 -0
  54. package/dist/src/encode.d.ts +15 -0
  55. package/dist/src/encode.d.ts.map +1 -0
  56. package/dist/src/encode.js +36 -0
  57. package/dist/src/encode.js.map +1 -0
  58. package/dist/src/events.d.ts +69 -0
  59. package/dist/src/events.d.ts.map +1 -0
  60. package/dist/src/events.js +149 -0
  61. package/dist/src/events.js.map +1 -0
  62. package/dist/src/export.d.ts +3 -0
  63. package/dist/src/export.d.ts.map +1 -0
  64. package/dist/src/export.js +46 -0
  65. package/dist/src/export.js.map +1 -0
  66. package/dist/src/forget.d.ts +11 -0
  67. package/dist/src/forget.d.ts.map +1 -0
  68. package/dist/src/forget.js +105 -0
  69. package/dist/src/forget.js.map +1 -0
  70. package/dist/src/fts.d.ts +34 -0
  71. package/dist/src/fts.d.ts.map +1 -0
  72. package/dist/src/fts.js +117 -0
  73. package/dist/src/fts.js.map +1 -0
  74. package/dist/src/hybrid-recall.d.ts +37 -0
  75. package/dist/src/hybrid-recall.d.ts.map +1 -0
  76. package/dist/src/hybrid-recall.js +213 -0
  77. package/dist/src/hybrid-recall.js.map +1 -0
  78. package/dist/src/import.d.ts +4 -0
  79. package/dist/src/import.d.ts.map +1 -0
  80. package/dist/src/import.js +127 -0
  81. package/dist/src/import.js.map +1 -0
  82. package/dist/src/index.d.ts +22 -0
  83. package/dist/src/index.d.ts.map +1 -0
  84. package/{src → dist/src}/index.js +5 -13
  85. package/dist/src/index.js.map +1 -0
  86. package/dist/src/interference.d.ts +13 -0
  87. package/dist/src/interference.d.ts.map +1 -0
  88. package/dist/src/interference.js +45 -0
  89. package/dist/src/interference.js.map +1 -0
  90. package/dist/src/introspect.d.ts +4 -0
  91. package/dist/src/introspect.d.ts.map +1 -0
  92. package/dist/src/introspect.js +40 -0
  93. package/dist/src/introspect.js.map +1 -0
  94. package/dist/src/llm.d.ts +38 -0
  95. package/dist/src/llm.d.ts.map +1 -0
  96. package/dist/src/llm.js +167 -0
  97. package/dist/src/llm.js.map +1 -0
  98. package/dist/src/migrate.d.ts +6 -0
  99. package/dist/src/migrate.d.ts.map +1 -0
  100. package/dist/src/migrate.js +51 -0
  101. package/dist/src/migrate.js.map +1 -0
  102. package/dist/src/promote.d.ts +40 -0
  103. package/dist/src/promote.d.ts.map +1 -0
  104. package/dist/src/promote.js +200 -0
  105. package/dist/src/promote.js.map +1 -0
  106. package/dist/src/prompts.d.ts +16 -0
  107. package/dist/src/prompts.d.ts.map +1 -0
  108. package/{src → dist/src}/prompts.js +172 -203
  109. package/dist/src/prompts.js.map +1 -0
  110. package/dist/src/recall.d.ts +9 -0
  111. package/dist/src/recall.d.ts.map +1 -0
  112. package/dist/src/recall.js +432 -0
  113. package/dist/src/recall.js.map +1 -0
  114. package/dist/src/redact.d.ts +27 -0
  115. package/dist/src/redact.d.ts.map +1 -0
  116. package/dist/src/redact.js +228 -0
  117. package/dist/src/redact.js.map +1 -0
  118. package/dist/src/rollback.d.ts +8 -0
  119. package/dist/src/rollback.d.ts.map +1 -0
  120. package/dist/src/rollback.js +33 -0
  121. package/dist/src/rollback.js.map +1 -0
  122. package/dist/src/routes.d.ts +7 -0
  123. package/dist/src/routes.d.ts.map +1 -0
  124. package/dist/src/routes.js +226 -0
  125. package/dist/src/routes.js.map +1 -0
  126. package/dist/src/rules-compiler.d.ts +20 -0
  127. package/dist/src/rules-compiler.d.ts.map +1 -0
  128. package/dist/src/rules-compiler.js +143 -0
  129. package/dist/src/rules-compiler.js.map +1 -0
  130. package/dist/src/server.d.ts +12 -0
  131. package/dist/src/server.d.ts.map +1 -0
  132. package/dist/src/server.js +22 -0
  133. package/dist/src/server.js.map +1 -0
  134. package/dist/src/tool-trace.d.ts +37 -0
  135. package/dist/src/tool-trace.d.ts.map +1 -0
  136. package/dist/src/tool-trace.js +142 -0
  137. package/dist/src/tool-trace.js.map +1 -0
  138. package/dist/src/types.d.ts +446 -0
  139. package/dist/src/types.d.ts.map +1 -0
  140. package/dist/src/types.js +6 -0
  141. package/dist/src/types.js.map +1 -0
  142. package/dist/src/ulid.d.ts +3 -0
  143. package/dist/src/ulid.d.ts.map +1 -0
  144. package/dist/src/ulid.js +11 -0
  145. package/dist/src/ulid.js.map +1 -0
  146. package/dist/src/utils.d.ts +10 -0
  147. package/dist/src/utils.d.ts.map +1 -0
  148. package/dist/src/utils.js +41 -0
  149. package/dist/src/utils.js.map +1 -0
  150. package/dist/src/validate.d.ts +22 -0
  151. package/dist/src/validate.d.ts.map +1 -0
  152. package/dist/src/validate.js +109 -0
  153. package/dist/src/validate.js.map +1 -0
  154. package/docs/production-readiness.md +28 -0
  155. package/examples/fintech-ops-demo.js +1 -1
  156. package/examples/healthcare-ops-demo.js +1 -1
  157. package/examples/stripe-demo.js +1 -1
  158. package/package.json +34 -13
  159. package/benchmarks/baselines.js +0 -169
  160. package/benchmarks/cases.js +0 -421
  161. package/benchmarks/reference-results.js +0 -70
  162. package/benchmarks/report.js +0 -255
  163. package/benchmarks/run.js +0 -514
  164. package/mcp-server/config.js +0 -133
  165. package/mcp-server/index.js +0 -1265
  166. package/mcp-server/serve.js +0 -482
  167. package/src/adaptive.js +0 -53
  168. package/src/affect.js +0 -64
  169. package/src/audrey.js +0 -642
  170. package/src/causal.js +0 -95
  171. package/src/confidence.js +0 -120
  172. package/src/consolidate.js +0 -281
  173. package/src/context.js +0 -15
  174. package/src/db.js +0 -391
  175. package/src/decay.js +0 -84
  176. package/src/embedding.js +0 -260
  177. package/src/encode.js +0 -69
  178. package/src/export.js +0 -67
  179. package/src/forget.js +0 -111
  180. package/src/fts.js +0 -134
  181. package/src/import.js +0 -273
  182. package/src/interference.js +0 -51
  183. package/src/introspect.js +0 -48
  184. package/src/llm.js +0 -249
  185. package/src/migrate.js +0 -58
  186. package/src/recall.js +0 -573
  187. package/src/rollback.js +0 -42
  188. package/src/ulid.js +0 -18
  189. package/src/utils.js +0 -63
  190. package/src/validate.js +0 -172
  191. package/types/index.d.ts +0 -434
package/src/validate.js DELETED
@@ -1,172 +0,0 @@
1
- import { generateId } from './ulid.js';
2
- import { safeJsonParse } from './utils.js';
3
- import { buildContradictionDetectionPrompt } from './prompts.js';
4
-
5
- const REINFORCEMENT_THRESHOLD = 0.85;
6
- const CONTRADICTION_THRESHOLD = 0.60;
7
-
8
- /**
9
- * @param {import('better-sqlite3').Database} db
10
- * @param {import('./embedding.js').EmbeddingProvider} embeddingProvider
11
- * @param {{ id: string, content: string, source: string }} episode
12
- * @param {{ threshold?: number, contradictionThreshold?: number, llmProvider?: { json: (messages: any) => Promise<any> } }} [options]
13
- * @returns {Promise<{ action: string, semanticId?: string, similarity?: number, contradictionId?: string, resolution?: string }>}
14
- */
15
- export async function validateMemory(db, embeddingProvider, episode, options = {}) {
16
- const {
17
- threshold = REINFORCEMENT_THRESHOLD,
18
- contradictionThreshold = CONTRADICTION_THRESHOLD,
19
- llmProvider,
20
- } = options;
21
-
22
- const episodeVector = await embeddingProvider.embed(episode.content);
23
- const episodeBuffer = embeddingProvider.vectorToBuffer(episodeVector);
24
-
25
- const nearestSemantic = db.prepare(`
26
- SELECT s.*, (1.0 - v.distance) AS similarity
27
- FROM vec_semantics v
28
- JOIN semantics s ON s.id = v.id
29
- WHERE v.embedding MATCH ?
30
- AND k = 1
31
- AND (v.state = 'active' OR v.state = 'context_dependent')
32
- `).get(episodeBuffer);
33
-
34
- let bestMatch = null;
35
- let bestSimilarity = 0;
36
-
37
- if (nearestSemantic) {
38
- bestMatch = nearestSemantic;
39
- bestSimilarity = nearestSemantic.similarity;
40
- }
41
-
42
- if (bestMatch && bestSimilarity >= threshold) {
43
- const evidenceIds = safeJsonParse(bestMatch.evidence_episode_ids, []);
44
- if (!evidenceIds.includes(episode.id)) {
45
- evidenceIds.push(episode.id);
46
- }
47
-
48
- const diversity = computeSourceDiversity(db, evidenceIds, episode);
49
-
50
- const now = new Date().toISOString();
51
- db.prepare(`
52
- UPDATE semantics SET
53
- supporting_count = supporting_count + 1,
54
- evidence_episode_ids = ?,
55
- evidence_count = ?,
56
- source_type_diversity = ?,
57
- last_reinforced_at = ?
58
- WHERE id = ?
59
- `).run(
60
- JSON.stringify(evidenceIds),
61
- evidenceIds.length,
62
- diversity,
63
- now,
64
- bestMatch.id,
65
- );
66
-
67
- return {
68
- action: 'reinforced',
69
- semanticId: bestMatch.id,
70
- similarity: bestSimilarity,
71
- };
72
- }
73
-
74
- if (bestMatch && bestSimilarity >= contradictionThreshold && llmProvider) {
75
- const messages = buildContradictionDetectionPrompt(episode.content, bestMatch.content);
76
- const verdict = await llmProvider.json(messages);
77
-
78
- if (verdict.contradicts) {
79
- const resolution = verdict.resolution === 'context_dependent'
80
- ? { type: 'context_dependent', conditions: verdict.conditions, explanation: verdict.explanation }
81
- : verdict.resolution
82
- ? { type: verdict.resolution, explanation: verdict.explanation }
83
- : null;
84
-
85
- const contradictionId = createContradiction(
86
- db,
87
- bestMatch.id,
88
- 'semantic',
89
- episode.id,
90
- 'episodic',
91
- resolution,
92
- );
93
-
94
- if (verdict.resolution === 'new_wins') {
95
- db.prepare("UPDATE semantics SET state = 'disputed' WHERE id = ?").run(bestMatch.id);
96
- } else if (verdict.resolution === 'context_dependent' && verdict.conditions) {
97
- db.prepare("UPDATE semantics SET state = 'context_dependent', conditions = ? WHERE id = ?")
98
- .run(JSON.stringify(verdict.conditions), bestMatch.id);
99
- }
100
-
101
- return {
102
- action: 'contradiction',
103
- contradictionId,
104
- semanticId: bestMatch.id,
105
- similarity: bestSimilarity,
106
- resolution: verdict.resolution || null,
107
- };
108
- }
109
- }
110
-
111
- return { action: 'none' };
112
- }
113
-
114
- function computeSourceDiversity(db, evidenceIds, currentEpisode) {
115
- const sourceTypes = new Set();
116
- sourceTypes.add(currentEpisode.source);
117
-
118
- if (evidenceIds.length > 0) {
119
- const placeholders = evidenceIds.map(() => '?').join(',');
120
- const rows = db.prepare(
121
- `SELECT DISTINCT source FROM episodes WHERE id IN (${placeholders})`
122
- ).all(...evidenceIds);
123
- for (const row of rows) {
124
- sourceTypes.add(row.source);
125
- }
126
- }
127
-
128
- return sourceTypes.size;
129
- }
130
-
131
- /**
132
- * @param {import('better-sqlite3').Database} db
133
- * @param {string} claimAId
134
- * @param {string} claimAType
135
- * @param {string} claimBId
136
- * @param {string} claimBType
137
- * @param {object|null} resolution
138
- * @returns {string}
139
- */
140
- export function createContradiction(db, claimAId, claimAType, claimBId, claimBType, resolution) {
141
- const id = generateId();
142
- const now = new Date().toISOString();
143
-
144
- const state = resolution ? 'resolved' : 'open';
145
- const resolvedAt = resolution ? now : null;
146
- const resolutionJson = resolution ? JSON.stringify(resolution) : null;
147
-
148
- db.prepare(`
149
- INSERT INTO contradictions (id, claim_a_id, claim_a_type, claim_b_id, claim_b_type,
150
- state, resolution, resolved_at, created_at)
151
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
152
- `).run(id, claimAId, claimAType, claimBId, claimBType, state, resolutionJson, resolvedAt, now);
153
-
154
- return id;
155
- }
156
-
157
- /**
158
- * @param {import('better-sqlite3').Database} db
159
- * @param {string} contradictionId
160
- * @param {string} newEvidenceId
161
- * @returns {void}
162
- */
163
- export function reopenContradiction(db, contradictionId, newEvidenceId) {
164
- const now = new Date().toISOString();
165
- db.prepare(`
166
- UPDATE contradictions SET
167
- state = 'reopened',
168
- reopen_evidence_id = ?,
169
- reopened_at = ?
170
- WHERE id = ?
171
- `).run(newEvidenceId, now, contradictionId);
172
- }
package/types/index.d.ts DELETED
@@ -1,434 +0,0 @@
1
- import { EventEmitter } from 'node:events';
2
- import type { Database } from 'better-sqlite3';
3
-
4
- // === Configuration ===
5
-
6
- export interface EmbeddingConfig {
7
- provider: 'mock' | 'local' | 'gemini' | 'openai';
8
- dimensions?: number;
9
- apiKey?: string;
10
- device?: 'gpu' | 'cpu';
11
- model?: string;
12
- }
13
-
14
- export interface LLMConfig {
15
- provider: 'mock' | 'anthropic' | 'openai';
16
- apiKey?: string;
17
- model?: string;
18
- }
19
-
20
- export interface ConfidenceWeights {
21
- source?: number;
22
- evidence?: number;
23
- recency?: number;
24
- retrieval?: number;
25
- }
26
-
27
- export interface HalfLives {
28
- episodic?: number;
29
- semantic?: number;
30
- procedural?: number;
31
- }
32
-
33
- export interface ConfidenceConfig {
34
- weights?: ConfidenceWeights;
35
- halfLives?: HalfLives;
36
- sourceReliability?: Record<string, number>;
37
- }
38
-
39
- export interface ConsolidationConfig {
40
- minEpisodes?: number;
41
- }
42
-
43
- export interface DecayConfig {
44
- dormantThreshold?: number;
45
- }
46
-
47
- export interface ContextConfig {
48
- enabled?: boolean;
49
- weight?: number;
50
- }
51
-
52
- export interface AffectConfig {
53
- enabled?: boolean;
54
- weight?: number;
55
- arousalWeight?: number;
56
- resonance?: {
57
- enabled?: boolean;
58
- threshold?: number;
59
- maxResults?: number;
60
- };
61
- }
62
-
63
- export interface InterferenceConfig {
64
- enabled?: boolean;
65
- k?: number;
66
- threshold?: number;
67
- weight?: number;
68
- }
69
-
70
- export interface AudreyConfig {
71
- dataDir: string;
72
- agent?: string;
73
- embedding: EmbeddingConfig;
74
- llm?: LLMConfig;
75
- confidence?: ConfidenceConfig;
76
- consolidation?: ConsolidationConfig;
77
- decay?: DecayConfig;
78
- context?: ContextConfig;
79
- affect?: AffectConfig;
80
- interference?: InterferenceConfig;
81
- }
82
-
83
- // === Encode ===
84
-
85
- export type SourceType = 'direct-observation' | 'told-by-user' | 'tool-result' | 'inference' | 'model-generated';
86
-
87
- export interface AffectParams {
88
- valence?: number;
89
- arousal?: number;
90
- label?: string;
91
- }
92
-
93
- export interface EncodeParams {
94
- content: string;
95
- source: SourceType;
96
- salience?: number;
97
- tags?: string[];
98
- context?: Record<string, unknown>;
99
- affect?: AffectParams;
100
- causal?: { trigger?: string; consequence?: string };
101
- supersedes?: string;
102
- private?: boolean;
103
- agent?: string;
104
- }
105
-
106
- // === Recall ===
107
-
108
- export interface RecallOptions {
109
- limit?: number;
110
- minConfidence?: number;
111
- types?: Array<'episodic' | 'semantic' | 'procedural'>;
112
- includeProvenance?: boolean;
113
- includeDormant?: boolean;
114
- includePrivate?: boolean;
115
- tags?: string[];
116
- sources?: SourceType[];
117
- after?: string;
118
- before?: string;
119
- context?: Record<string, unknown>;
120
- affect?: AffectParams;
121
- scope?: 'shared' | 'agent';
122
- agent?: string;
123
- retrieval?: 'hybrid' | 'vector' | 'keyword';
124
- }
125
-
126
- export interface RecallResult {
127
- id: string;
128
- content: string;
129
- type: 'episodic' | 'semantic' | 'procedural';
130
- confidence: number;
131
- score: number;
132
- source: string;
133
- createdAt: string;
134
- agent: string;
135
- state?: string;
136
- contextMatch?: number;
137
- moodCongruence?: number;
138
- provenance?: {
139
- tags?: string[];
140
- context?: Record<string, unknown>;
141
- affect?: AffectParams;
142
- evidenceEpisodeIds?: string[];
143
- };
144
- _recallErrors?: Array<{ type: string; message: string }>;
145
- }
146
-
147
- export type RecallResults = RecallResult[] & {
148
- partialFailure?: boolean;
149
- errors?: Array<{ type: string; message: string }>;
150
- };
151
-
152
- // === Consolidation ===
153
-
154
- export interface ConsolidateOptions {
155
- minClusterSize?: number;
156
- similarityThreshold?: number;
157
- }
158
-
159
- export interface ConsolidationResult {
160
- runId: string;
161
- episodesEvaluated: number;
162
- clustersFound: number;
163
- semanticsCreated: number;
164
- proceduresCreated: number;
165
- inputIds: string[];
166
- outputIds: string[];
167
- }
168
-
169
- // === Dream ===
170
-
171
- export interface DreamOptions {
172
- dormantThreshold?: number;
173
- minClusterSize?: number;
174
- similarityThreshold?: number;
175
- }
176
-
177
- export interface DreamResult {
178
- consolidation: ConsolidationResult;
179
- decay: {
180
- totalEvaluated: number;
181
- transitionedToDormant: number;
182
- timestamp: string;
183
- };
184
- stats: IntrospectResult;
185
- }
186
-
187
- // === Introspect ===
188
-
189
- export interface IntrospectResult {
190
- episodic: number;
191
- semantic: number;
192
- procedural: number;
193
- causalLinks: number;
194
- dormant: number;
195
- contradictions: {
196
- open: number;
197
- resolved: number;
198
- context_dependent: number;
199
- reopened: number;
200
- };
201
- lastConsolidation: string | null;
202
- totalConsolidationRuns: number;
203
- }
204
-
205
- // === Export / Import ===
206
-
207
- export interface Snapshot {
208
- version: string;
209
- exportedAt: string;
210
- episodes: unknown[];
211
- semantics: unknown[];
212
- procedures: unknown[];
213
- causalLinks: unknown[];
214
- contradictions: unknown[];
215
- consolidationRuns: unknown[];
216
- consolidationMetrics: unknown[];
217
- config: Record<string, string>;
218
- }
219
-
220
- // === Forget ===
221
-
222
- export interface ForgetOptions {
223
- purge?: boolean;
224
- }
225
-
226
- export interface ForgetResult {
227
- id: string;
228
- type: 'episodic' | 'semantic' | 'procedural';
229
- purged: boolean;
230
- }
231
-
232
- export interface ForgetByQueryOptions {
233
- minSimilarity?: number;
234
- purge?: boolean;
235
- limit?: number;
236
- }
237
-
238
- export interface PurgeResult {
239
- episodesRemoved: number;
240
- semanticsRemoved: number;
241
- proceduresRemoved: number;
242
- }
243
-
244
- // === Greeting / Reflect ===
245
-
246
- export interface GreetingOptions {
247
- context?: string;
248
- }
249
-
250
- export interface GreetingResult {
251
- principles: string[];
252
- recentMemories: RecallResult[];
253
- mood: { valence: number; arousal: number; label: string } | null;
254
- stats: IntrospectResult;
255
- }
256
-
257
- export interface ReflectResult {
258
- encoded: number;
259
- memories: Array<{ id: string; content: string }>;
260
- skipped?: string;
261
- }
262
-
263
- // === Embedding Providers ===
264
-
265
- export interface EmbeddingProvider {
266
- readonly dimensions: number;
267
- readonly modelName: string;
268
- readonly modelVersion: string;
269
- embed(text: string): Promise<number[]>;
270
- embedBatch(texts: string[]): Promise<number[][]>;
271
- vectorToBuffer(vector: number[]): Buffer;
272
- }
273
-
274
- export class MockEmbeddingProvider implements EmbeddingProvider {
275
- readonly dimensions: number;
276
- readonly modelName: string;
277
- readonly modelVersion: string;
278
- constructor(dimensions?: number);
279
- embed(text: string): Promise<number[]>;
280
- embedBatch(texts: string[]): Promise<number[][]>;
281
- vectorToBuffer(vector: number[]): Buffer;
282
- }
283
-
284
- export class LocalEmbeddingProvider implements EmbeddingProvider {
285
- readonly dimensions: number;
286
- readonly modelName: string;
287
- readonly modelVersion: string;
288
- embed(text: string): Promise<number[]>;
289
- embedBatch(texts: string[]): Promise<number[][]>;
290
- vectorToBuffer(vector: number[]): Buffer;
291
- }
292
-
293
- export class OpenAIEmbeddingProvider implements EmbeddingProvider {
294
- readonly dimensions: number;
295
- readonly modelName: string;
296
- readonly modelVersion: string;
297
- constructor(options: { apiKey: string; dimensions?: number; model?: string });
298
- embed(text: string): Promise<number[]>;
299
- embedBatch(texts: string[]): Promise<number[][]>;
300
- vectorToBuffer(vector: number[]): Buffer;
301
- }
302
-
303
- export class GeminiEmbeddingProvider implements EmbeddingProvider {
304
- readonly dimensions: number;
305
- readonly modelName: string;
306
- readonly modelVersion: string;
307
- constructor(options: { apiKey: string; dimensions?: number; model?: string });
308
- embed(text: string): Promise<number[]>;
309
- embedBatch(texts: string[]): Promise<number[][]>;
310
- vectorToBuffer(vector: number[]): Buffer;
311
- }
312
-
313
- export function createEmbeddingProvider(config: EmbeddingConfig): EmbeddingProvider;
314
-
315
- // === LLM Providers ===
316
-
317
- export interface LLMProvider {
318
- readonly modelName: string;
319
- generate(prompt: string): Promise<string>;
320
- }
321
-
322
- export class MockLLMProvider implements LLMProvider {
323
- readonly modelName: string;
324
- generate(prompt: string): Promise<string>;
325
- }
326
-
327
- export class AnthropicLLMProvider implements LLMProvider {
328
- readonly modelName: string;
329
- constructor(options: { apiKey: string; model?: string });
330
- generate(prompt: string): Promise<string>;
331
- }
332
-
333
- export class OpenAILLMProvider implements LLMProvider {
334
- readonly modelName: string;
335
- constructor(options: { apiKey: string; model?: string });
336
- generate(prompt: string): Promise<string>;
337
- }
338
-
339
- export function createLLMProvider(config: LLMConfig): LLMProvider;
340
-
341
- // === Core Class ===
342
-
343
- export class Audrey extends EventEmitter {
344
- readonly agent: string;
345
- readonly dataDir: string;
346
- readonly db: Database;
347
- readonly embeddingProvider: EmbeddingProvider;
348
- readonly llmProvider: LLMProvider | null;
349
-
350
- constructor(config: AudreyConfig);
351
-
352
- encode(params: EncodeParams): Promise<string>;
353
- recall(query: string, options?: RecallOptions): Promise<RecallResults>;
354
- recallStream(query: string, options?: RecallOptions): AsyncGenerator<RecallResult>;
355
- consolidate(options?: ConsolidateOptions): Promise<ConsolidationResult>;
356
- dream(options?: DreamOptions): Promise<DreamResult>;
357
- introspect(): IntrospectResult;
358
- export(): Snapshot;
359
- import(snapshot: Snapshot): Promise<void>;
360
- forget(id: string, options?: ForgetOptions): ForgetResult;
361
- forgetByQuery(query: string, options?: ForgetByQueryOptions): Promise<ForgetResult | null>;
362
- purge(): PurgeResult;
363
- greeting(options?: GreetingOptions): Promise<GreetingResult>;
364
- reflect(turns: string): Promise<ReflectResult>;
365
- startAutoConsolidate(intervalMs: number, options?: ConsolidateOptions): void;
366
- stopAutoConsolidate(): void;
367
- waitForIdle(): Promise<void>;
368
- close(): void;
369
- }
370
-
371
- // === Database ===
372
-
373
- export function createDatabase(dataDir: string, options?: { dimensions?: number }): { db: Database; migrated: boolean };
374
- export function closeDatabase(db: Database): void;
375
- export function readStoredDimensions(dataDir: string): number | null;
376
-
377
- // === Standalone Functions ===
378
-
379
- export function recall(db: Database, embeddingProvider: EmbeddingProvider, query: string, options?: RecallOptions): Promise<RecallResults>;
380
- export function recallStream(db: Database, embeddingProvider: EmbeddingProvider, query: string, options?: RecallOptions): AsyncGenerator<RecallResult>;
381
- export function exportMemories(db: Database): Snapshot;
382
- export function importMemories(db: Database, embeddingProvider: EmbeddingProvider, snapshot: Snapshot): Promise<void>;
383
- export function forgetMemory(db: Database, id: string, options?: ForgetOptions): ForgetResult;
384
- export function forgetByQuery(db: Database, embeddingProvider: EmbeddingProvider, query: string, options?: ForgetByQueryOptions): Promise<ForgetResult | null>;
385
- export function purgeMemories(db: Database): PurgeResult;
386
- export function reembedAll(db: Database, embeddingProvider: EmbeddingProvider): Promise<{ reembedded: number }>;
387
- export function suggestConsolidationParams(db: Database): { minClusterSize: number; similarityThreshold: number } | null;
388
-
389
- // === Confidence ===
390
-
391
- export function computeConfidence(params: {
392
- sourceType: SourceType;
393
- supportingCount?: number;
394
- contradictingCount?: number;
395
- ageDays?: number;
396
- halfLifeDays?: number;
397
- retrievalCount?: number;
398
- daysSinceRetrieval?: number;
399
- }): number;
400
- export function sourceReliability(source: SourceType): number;
401
- export function salienceModifier(salience: number): number;
402
- export const DEFAULT_SOURCE_RELIABILITY: Record<SourceType, number>;
403
- export const DEFAULT_WEIGHTS: ConfidenceWeights;
404
- export const DEFAULT_HALF_LIVES: HalfLives;
405
-
406
- // === Causal ===
407
-
408
- export function addCausalLink(db: Database, params: { causeId: string; effectId: string; strength?: number; description?: string }): string;
409
- export function getCausalChain(db: Database, id: string, options?: { depth?: number; direction?: 'forward' | 'backward' | 'both' }): unknown[];
410
- export function articulateCausalLink(db: Database, llmProvider: LLMProvider, linkId: string): Promise<string>;
411
-
412
- // === Prompts ===
413
-
414
- export function buildPrincipleExtractionPrompt(episodes: Array<{ content: string }>): string;
415
- export function buildContradictionDetectionPrompt(memory: string, candidate: string): string;
416
- export function buildCausalArticulationPrompt(cause: string, effect: string): string;
417
- export function buildContextResolutionPrompt(contradiction: string, contextA: string, contextB: string): string;
418
-
419
- // === Affect ===
420
-
421
- export function arousalSalienceBoost(arousal?: number): number;
422
- export function affectSimilarity(a: AffectParams, b: AffectParams): number;
423
- export function moodCongruenceModifier(memoryAffect: AffectParams, queryAffect: AffectParams, weight?: number): number;
424
- export function detectResonance(db: Database, embeddingProvider: EmbeddingProvider, episodeId: string, params: EncodeParams, config: { threshold?: number; maxResults?: number }): Promise<unknown[]>;
425
-
426
- // === Interference ===
427
-
428
- export function applyInterference(db: Database, embeddingProvider: EmbeddingProvider, episodeId: string, params: EncodeParams, config: InterferenceConfig): Promise<unknown[]>;
429
- export function interferenceModifier(interferenceCount: number): number;
430
-
431
- // === Context ===
432
-
433
- export function contextMatchRatio(encodingContext: Record<string, unknown>, retrievalContext: Record<string, unknown>): number;
434
- export function contextModifier(encodingContext: Record<string, unknown>, retrievalContext: Record<string, unknown>, weight?: number): number;