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,41 @@
1
+ export function cosineSimilarity(bufA, bufB, provider) {
2
+ const a = provider.bufferToVector(bufA);
3
+ const b = provider.bufferToVector(bufB);
4
+ let dot = 0, magA = 0, magB = 0;
5
+ for (let i = 0; i < a.length; i++) {
6
+ const ai = a[i];
7
+ const bi = b[i];
8
+ dot += ai * bi;
9
+ magA += ai * ai;
10
+ magB += bi * bi;
11
+ }
12
+ const mag = Math.sqrt(magA) * Math.sqrt(magB);
13
+ return mag === 0 ? 0 : dot / mag;
14
+ }
15
+ export function daysBetween(dateStr, now) {
16
+ return Math.max(0, (now.getTime() - new Date(dateStr).getTime()) / (1000 * 60 * 60 * 24));
17
+ }
18
+ export function safeJsonParse(str, fallback) {
19
+ if (!str)
20
+ return fallback;
21
+ try {
22
+ return JSON.parse(str);
23
+ }
24
+ catch {
25
+ return fallback;
26
+ }
27
+ }
28
+ export function requireApiKey(apiKey, operation, envVar) {
29
+ if (typeof apiKey !== 'string' || apiKey.trim() === '') {
30
+ throw new Error(`${operation} requires ${envVar}`);
31
+ }
32
+ }
33
+ export async function describeHttpError(response) {
34
+ if (typeof response.text !== 'function') {
35
+ return `${response.status}`;
36
+ }
37
+ const body = await response.text().catch(() => '');
38
+ const normalized = body.replace(/\s+/g, ' ').trim().slice(0, 300);
39
+ return normalized ? `${response.status} ${normalized}` : `${response.status}`;
40
+ }
41
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,IAAY,EAAE,QAA2B;IACtF,MAAM,CAAC,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,CAAC,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC;IAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC;QACjB,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC;QACjB,GAAG,IAAI,EAAE,GAAG,EAAE,CAAC;QACf,IAAI,IAAI,EAAE,GAAG,EAAE,CAAC;QAChB,IAAI,IAAI,EAAE,GAAG,EAAE,CAAC;IAClB,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9C,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAAe,EAAE,GAAS;IACpD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;AAC5F,CAAC;AAED,MAAM,UAAU,aAAa,CAAI,GAA8B,EAAE,QAAW;IAC1E,IAAI,CAAC,GAAG;QAAE,OAAO,QAAQ,CAAC;IAC1B,IAAI,CAAC;QAAC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAAC,CAAC;IAC/B,MAAM,CAAC;QAAC,OAAO,QAAQ,CAAC;IAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAiC,EAAE,SAAiB,EAAE,MAAc;IAChG,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACvD,MAAM,IAAI,KAAK,CAAC,GAAG,SAAS,aAAa,MAAM,EAAE,CAAC,CAAC;IACrD,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,QAAyD;IAC/F,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QACxC,OAAO,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;IAC9B,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACnD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAClE,OAAO,UAAU,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,IAAI,UAAU,EAAE,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;AAChF,CAAC"}
@@ -0,0 +1,22 @@
1
+ import Database from 'better-sqlite3';
2
+ import type { EmbeddingProvider, LLMProvider } from './types.js';
3
+ interface ValidateResult {
4
+ action: string;
5
+ semanticId?: string;
6
+ similarity?: number;
7
+ contradictionId?: string;
8
+ resolution?: string | null;
9
+ }
10
+ export declare function validateMemory(db: Database.Database, embeddingProvider: EmbeddingProvider, episode: {
11
+ id: string;
12
+ content: string;
13
+ source: string;
14
+ }, options?: {
15
+ threshold?: number;
16
+ contradictionThreshold?: number;
17
+ llmProvider?: LLMProvider | null;
18
+ }): Promise<ValidateResult>;
19
+ export declare function createContradiction(db: Database.Database, claimAId: string, claimAType: string, claimBId: string, claimBType: string, resolution: object | null): string;
20
+ export declare function reopenContradiction(db: Database.Database, contradictionId: string, newEvidenceId: string): void;
21
+ export {};
22
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/validate.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAe,MAAM,YAAY,CAAC;AAgB9E,UAAU,cAAc;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,wBAAsB,cAAc,CAClC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,iBAAiB,EAAE,iBAAiB,EACpC,OAAO,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EACxD,OAAO,GAAE;IACP,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;CAC7B,GACL,OAAO,CAAC,cAAc,CAAC,CAsGzB;AAuBD,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GAAG,IAAI,GACxB,MAAM,CAeR;AAED,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,eAAe,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI,CAS/G"}
@@ -0,0 +1,109 @@
1
+ import { generateId } from './ulid.js';
2
+ import { safeJsonParse } from './utils.js';
3
+ import { buildContradictionDetectionPrompt } from './prompts.js';
4
+ const REINFORCEMENT_THRESHOLD = 0.85;
5
+ const CONTRADICTION_THRESHOLD = 0.60;
6
+ export async function validateMemory(db, embeddingProvider, episode, options = {}) {
7
+ const { threshold = REINFORCEMENT_THRESHOLD, contradictionThreshold = CONTRADICTION_THRESHOLD, llmProvider, } = options;
8
+ const episodeVector = await embeddingProvider.embed(episode.content);
9
+ const episodeBuffer = embeddingProvider.vectorToBuffer(episodeVector);
10
+ const nearestSemantic = db.prepare(`
11
+ SELECT s.*, (1.0 - v.distance) AS similarity
12
+ FROM vec_semantics v
13
+ JOIN semantics s ON s.id = v.id
14
+ WHERE v.embedding MATCH ?
15
+ AND k = 1
16
+ AND (v.state = 'active' OR v.state = 'context_dependent')
17
+ `).get(episodeBuffer);
18
+ let bestMatch = null;
19
+ let bestSimilarity = 0;
20
+ if (nearestSemantic) {
21
+ bestMatch = nearestSemantic;
22
+ bestSimilarity = nearestSemantic.similarity;
23
+ }
24
+ if (bestMatch && bestSimilarity >= threshold) {
25
+ const evidenceIds = safeJsonParse(bestMatch.evidence_episode_ids, []);
26
+ if (!evidenceIds.includes(episode.id)) {
27
+ evidenceIds.push(episode.id);
28
+ }
29
+ const diversity = computeSourceDiversity(db, evidenceIds, episode);
30
+ const now = new Date().toISOString();
31
+ db.prepare(`
32
+ UPDATE semantics SET
33
+ supporting_count = supporting_count + 1,
34
+ evidence_episode_ids = ?,
35
+ evidence_count = ?,
36
+ source_type_diversity = ?,
37
+ last_reinforced_at = ?
38
+ WHERE id = ?
39
+ `).run(JSON.stringify(evidenceIds), evidenceIds.length, diversity, now, bestMatch.id);
40
+ return {
41
+ action: 'reinforced',
42
+ semanticId: bestMatch.id,
43
+ similarity: bestSimilarity,
44
+ };
45
+ }
46
+ if (bestMatch && bestSimilarity >= contradictionThreshold && llmProvider) {
47
+ const messages = buildContradictionDetectionPrompt(episode.content, bestMatch.content);
48
+ const verdict = await llmProvider.json(messages);
49
+ if (verdict.contradicts) {
50
+ const resolution = verdict.resolution === 'context_dependent'
51
+ ? { type: 'context_dependent', conditions: verdict.conditions, explanation: verdict.explanation }
52
+ : verdict.resolution
53
+ ? { type: verdict.resolution, explanation: verdict.explanation }
54
+ : null;
55
+ const contradictionId = createContradiction(db, bestMatch.id, 'semantic', episode.id, 'episodic', resolution);
56
+ if (verdict.resolution === 'new_wins') {
57
+ db.prepare("UPDATE semantics SET state = 'disputed' WHERE id = ?").run(bestMatch.id);
58
+ }
59
+ else if (verdict.resolution === 'context_dependent' && verdict.conditions) {
60
+ db.prepare("UPDATE semantics SET state = 'context_dependent', conditions = ? WHERE id = ?")
61
+ .run(JSON.stringify(verdict.conditions), bestMatch.id);
62
+ }
63
+ return {
64
+ action: 'contradiction',
65
+ contradictionId,
66
+ semanticId: bestMatch.id,
67
+ similarity: bestSimilarity,
68
+ resolution: verdict.resolution || null,
69
+ };
70
+ }
71
+ }
72
+ return { action: 'none' };
73
+ }
74
+ function computeSourceDiversity(db, evidenceIds, currentEpisode) {
75
+ const sourceTypes = new Set();
76
+ sourceTypes.add(currentEpisode.source);
77
+ if (evidenceIds.length > 0) {
78
+ const placeholders = evidenceIds.map(() => '?').join(',');
79
+ const rows = db.prepare(`SELECT DISTINCT source FROM episodes WHERE id IN (${placeholders})`).all(...evidenceIds);
80
+ for (const row of rows) {
81
+ sourceTypes.add(row.source);
82
+ }
83
+ }
84
+ return sourceTypes.size;
85
+ }
86
+ export function createContradiction(db, claimAId, claimAType, claimBId, claimBType, resolution) {
87
+ const id = generateId();
88
+ const now = new Date().toISOString();
89
+ const state = resolution ? 'resolved' : 'open';
90
+ const resolvedAt = resolution ? now : null;
91
+ const resolutionJson = resolution ? JSON.stringify(resolution) : null;
92
+ db.prepare(`
93
+ INSERT INTO contradictions (id, claim_a_id, claim_a_type, claim_b_id, claim_b_type,
94
+ state, resolution, resolved_at, created_at)
95
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
96
+ `).run(id, claimAId, claimAType, claimBId, claimBType, state, resolutionJson, resolvedAt, now);
97
+ return id;
98
+ }
99
+ export function reopenContradiction(db, contradictionId, newEvidenceId) {
100
+ const now = new Date().toISOString();
101
+ db.prepare(`
102
+ UPDATE contradictions SET
103
+ state = 'reopened',
104
+ reopen_evidence_id = ?,
105
+ reopened_at = ?
106
+ WHERE id = ?
107
+ `).run(newEvidenceId, now, contradictionId);
108
+ }
109
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/validate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="960" height="300" viewBox="0 0 960 300" role="img" aria-labelledby="title desc">
2
+ <title id="title">Audrey logo</title>
3
+ <desc id="desc">A luminous memory orb and Audrey wordmark for a local-first AI memory runtime.</desc>
4
+ <defs>
5
+ <radialGradient id="orb" cx="42%" cy="35%" r="70%">
6
+ <stop offset="0%" stop-color="#f7dfad"/>
7
+ <stop offset="42%" stop-color="#d08f61"/>
8
+ <stop offset="78%" stop-color="#3b5f72"/>
9
+ <stop offset="100%" stop-color="#172a31"/>
10
+ </radialGradient>
11
+ <linearGradient id="ring" x1="68" x2="242" y1="56" y2="238" gradientUnits="userSpaceOnUse">
12
+ <stop offset="0%" stop-color="#f2c777"/>
13
+ <stop offset="50%" stop-color="#78a6ad"/>
14
+ <stop offset="100%" stop-color="#273d45"/>
15
+ </linearGradient>
16
+ <linearGradient id="word" x1="302" x2="814" y1="94" y2="218" gradientUnits="userSpaceOnUse">
17
+ <stop offset="0%" stop-color="#f4d7a1"/>
18
+ <stop offset="46%" stop-color="#d08f61"/>
19
+ <stop offset="100%" stop-color="#85aeb2"/>
20
+ </linearGradient>
21
+ <filter id="softGlow" x="-30%" y="-30%" width="160%" height="160%">
22
+ <feGaussianBlur stdDeviation="8" result="blur"/>
23
+ <feMerge>
24
+ <feMergeNode in="blur"/>
25
+ <feMergeNode in="SourceGraphic"/>
26
+ </feMerge>
27
+ </filter>
28
+ </defs>
29
+
30
+ <rect width="960" height="300" rx="36" fill="#0f171a"/>
31
+ <path d="M54 228C131 266 220 247 274 181C324 120 320 61 270 42C224 25 154 50 103 99C56 144 30 193 54 228Z" fill="#122126"/>
32
+ <circle cx="158" cy="150" r="74" fill="url(#orb)" filter="url(#softGlow)"/>
33
+ <path d="M105 163C126 138 151 128 180 134C204 139 219 154 222 177" fill="none" stroke="#f8e7c7" stroke-width="8" stroke-linecap="round"/>
34
+ <path d="M98 132C123 106 153 98 188 108C214 115 233 132 244 159" fill="none" stroke="#1d3037" stroke-width="10" stroke-linecap="round"/>
35
+ <path d="M84 190C113 207 145 212 180 205C217 197 247 176 269 142" fill="none" stroke="url(#ring)" stroke-width="5" stroke-linecap="round"/>
36
+ <path d="M86 109C113 78 149 60 194 57C231 55 261 66 284 90" fill="none" stroke="url(#ring)" stroke-width="4" stroke-linecap="round" opacity="0.85"/>
37
+ <circle cx="83" cy="190" r="7" fill="#f2c777"/>
38
+ <circle cx="284" cy="90" r="6" fill="#85aeb2"/>
39
+ <circle cx="269" cy="142" r="5" fill="#f8e7c7"/>
40
+
41
+ <text x="320" y="150" fill="url(#word)" font-family="Georgia, 'Times New Roman', serif" font-size="88" font-weight="700" letter-spacing="-3">Audrey</text>
42
+ <text x="326" y="198" fill="#c7d0cc" font-family="'Segoe UI', Candara, sans-serif" font-size="24" letter-spacing="4">LOCAL-FIRST MEMORY FOR AGENTS</text>
43
+ <path d="M327 219H811" stroke="#30484d" stroke-width="2"/>
44
+ <text x="326" y="250" fill="#8ea19b" font-family="'Segoe UI', Candara, sans-serif" font-size="20">recall / preflight / reflexes / consolidation / one SQLite brain</text>
45
+ </svg>
Binary file