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
@@ -1,255 +0,0 @@
1
- import { mkdirSync, writeFileSync } from 'node:fs';
2
- import { join } from 'node:path';
3
-
4
- const PALETTE = {
5
- audrey: '#0f766e',
6
- vector: '#0369a1',
7
- keyword: '#6d28d9',
8
- recent: '#b45309',
9
- external: '#1d4ed8',
10
- accent: '#111827',
11
- muted: '#6b7280',
12
- surface: '#f8fafc',
13
- border: '#cbd5e1',
14
- };
15
-
16
- function escapeHtml(text) {
17
- return String(text)
18
- .replaceAll('&', '&')
19
- .replaceAll('<', '&lt;')
20
- .replaceAll('>', '&gt;')
21
- .replaceAll('"', '&quot;');
22
- }
23
-
24
- function chartBarColor(label) {
25
- if (label === 'Audrey') return PALETTE.audrey;
26
- if (label.includes('Vector')) return PALETTE.vector;
27
- if (label.includes('Keyword')) return PALETTE.keyword;
28
- if (label.includes('Recent')) return PALETTE.recent;
29
- return PALETTE.external;
30
- }
31
-
32
- function renderBarChart({ title, rows, valueSuffix = '%', maxValue = 100 }) {
33
- const width = 960;
34
- const height = 420;
35
- const margin = { top: 56, right: 32, bottom: 88, left: 64 };
36
- const plotWidth = width - margin.left - margin.right;
37
- const plotHeight = height - margin.top - margin.bottom;
38
- const barWidth = Math.max(32, Math.floor(plotWidth / Math.max(rows.length, 1)) - 18);
39
- const gap = rows.length > 1 ? (plotWidth - barWidth * rows.length) / (rows.length - 1) : 0;
40
-
41
- const bars = rows.map((row, index) => {
42
- const value = Math.max(0, Math.min(maxValue, row.value));
43
- const barHeight = (value / maxValue) * plotHeight;
44
- const x = margin.left + index * (barWidth + gap);
45
- const y = margin.top + plotHeight - barHeight;
46
- return `
47
- <rect x="${x}" y="${y}" width="${barWidth}" height="${barHeight}" rx="8" fill="${chartBarColor(row.label)}" />
48
- <text x="${x + barWidth / 2}" y="${y - 10}" text-anchor="middle" font-size="15" fill="${PALETTE.accent}">${value.toFixed(1)}${valueSuffix}</text>
49
- <text x="${x + barWidth / 2}" y="${height - 42}" text-anchor="middle" font-size="14" fill="${PALETTE.muted}">${escapeHtml(row.label)}</text>
50
- `;
51
- }).join('\n');
52
-
53
- const grid = [0, 25, 50, 75, 100].map(tick => {
54
- const y = margin.top + plotHeight - (tick / maxValue) * plotHeight;
55
- return `
56
- <line x1="${margin.left}" y1="${y}" x2="${width - margin.right}" y2="${y}" stroke="${PALETTE.border}" stroke-dasharray="4 4" />
57
- <text x="${margin.left - 10}" y="${y + 5}" text-anchor="end" font-size="13" fill="${PALETTE.muted}">${tick}${valueSuffix}</text>
58
- `;
59
- }).join('\n');
60
-
61
- return `<?xml version="1.0" encoding="UTF-8"?>
62
- <svg xmlns="http://www.w3.org/2000/svg" width="${width}" height="${height}" viewBox="0 0 ${width} ${height}" role="img" aria-label="${escapeHtml(title)}">
63
- <rect width="100%" height="100%" fill="white" />
64
- <text x="${margin.left}" y="34" font-size="24" font-weight="700" fill="${PALETTE.accent}">${escapeHtml(title)}</text>
65
- ${grid}
66
- ${bars}
67
- </svg>`;
68
- }
69
-
70
- function renderTrendList(trends) {
71
- return trends.map(trend => `
72
- <li>
73
- <strong>${escapeHtml(trend.title)}</strong><br />
74
- ${escapeHtml(trend.summary)}<br />
75
- <a href="${trend.source}">${escapeHtml(trend.source)}</a>
76
- </li>
77
- `).join('\n');
78
- }
79
-
80
- function renderCaseRows(localCases) {
81
- return localCases.map(caseResult => `
82
- <tr>
83
- <td>${escapeHtml(caseResult.title)}</td>
84
- <td>${escapeHtml(caseResult.suite)}</td>
85
- <td>${escapeHtml(caseResult.family)}</td>
86
- ${caseResult.results.map(result => {
87
- const bg = result.passed ? '#ecfdf5' : result.score >= 0.5 ? '#fff7ed' : '#fef2f2';
88
- const fg = result.passed ? '#065f46' : result.score >= 0.5 ? '#9a3412' : '#991b1b';
89
- return `<td style="background:${bg};color:${fg}">${result.score.toFixed(2)}<br /><span style="font-size:12px">${escapeHtml(result.summary)}</span></td>`;
90
- }).join('')}
91
- </tr>
92
- `).join('\n');
93
- }
94
-
95
- function renderSuiteSections(suiteCharts) {
96
- if (suiteCharts.length === 0) return '';
97
- return suiteCharts.map(chart => `
98
- <section class="callout">
99
- <h2>${escapeHtml(chart.title)}</h2>
100
- <p>${escapeHtml(chart.description)}</p>
101
- <img src="./${escapeHtml(chart.fileName)}" alt="${escapeHtml(chart.title)} chart" />
102
- </section>
103
- `).join('\n');
104
- }
105
-
106
- export function writeBenchmarkArtifacts({
107
- outputDir,
108
- summary,
109
- localOverall,
110
- localSuites,
111
- externalOverall,
112
- trends,
113
- readmeAssetsDir,
114
- }) {
115
- mkdirSync(outputDir, { recursive: true });
116
-
117
- const localChart = renderBarChart({
118
- title: 'Audrey vs Local Memory Baselines',
119
- rows: localOverall.map(row => ({ label: row.system, value: row.scorePercent })),
120
- });
121
- const externalChart = renderBarChart({
122
- title: 'Published LLM Memory Standards (LoCoMo)',
123
- rows: externalOverall.map(row => ({ label: row.system, value: row.score })),
124
- });
125
-
126
- writeFileSync(join(outputDir, 'local-overall.svg'), localChart, 'utf8');
127
- writeFileSync(join(outputDir, 'published-locomo.svg'), externalChart, 'utf8');
128
- writeFileSync(join(outputDir, 'summary.json'), JSON.stringify(summary, null, 2), 'utf8');
129
-
130
- const suiteCharts = localSuites.map(suite => {
131
- const fileName = `${suite.id}-overall.svg`;
132
- const chart = renderBarChart({
133
- title: `${suite.title} Benchmark`,
134
- rows: suite.overall.map(row => ({ label: row.system, value: row.scorePercent })),
135
- });
136
- writeFileSync(join(outputDir, fileName), chart, 'utf8');
137
- return {
138
- id: suite.id,
139
- title: `${suite.title} Benchmark`,
140
- description: suite.description,
141
- fileName,
142
- path: join(outputDir, fileName),
143
- };
144
- });
145
-
146
- let readmeAssets = null;
147
- if (readmeAssetsDir) {
148
- mkdirSync(readmeAssetsDir, { recursive: true });
149
- const localReadmeChart = join(readmeAssetsDir, 'local-benchmark.svg');
150
- const externalReadmeChart = join(readmeAssetsDir, 'published-memory-standards.svg');
151
- writeFileSync(localReadmeChart, localChart, 'utf8');
152
- writeFileSync(externalReadmeChart, externalChart, 'utf8');
153
-
154
- const operationsSuite = suiteCharts.find(chart => chart.id === 'operations');
155
- let operationsReadmeChart = null;
156
- if (operationsSuite) {
157
- operationsReadmeChart = join(readmeAssetsDir, 'operations-benchmark.svg');
158
- writeFileSync(
159
- operationsReadmeChart,
160
- renderBarChart({
161
- title: 'Audrey Memory Operations Benchmark',
162
- rows: (localSuites.find(suite => suite.id === 'operations')?.overall || [])
163
- .map(row => ({ label: row.system, value: row.scorePercent })),
164
- }),
165
- 'utf8',
166
- );
167
- }
168
-
169
- readmeAssets = {
170
- localChart: localReadmeChart,
171
- operationsChart: operationsReadmeChart,
172
- externalChart: externalReadmeChart,
173
- };
174
- }
175
-
176
- const html = `<!doctype html>
177
- <html lang="en">
178
- <head>
179
- <meta charset="utf-8" />
180
- <title>Audrey Memory Benchmark</title>
181
- <style>
182
- body { font-family: "Segoe UI", Arial, sans-serif; margin: 32px; color: ${PALETTE.accent}; background: ${PALETTE.surface}; }
183
- main { max-width: 1120px; margin: 0 auto; }
184
- h1, h2 { margin-bottom: 12px; }
185
- p, li { line-height: 1.5; }
186
- .callout { background: white; border: 1px solid ${PALETTE.border}; border-radius: 16px; padding: 20px; margin-bottom: 24px; }
187
- .grid { display: grid; gap: 24px; grid-template-columns: 1fr; }
188
- img { width: 100%; border: 1px solid ${PALETTE.border}; border-radius: 16px; background: white; }
189
- table { width: 100%; border-collapse: collapse; background: white; border-radius: 16px; overflow: hidden; }
190
- th, td { border: 1px solid ${PALETTE.border}; padding: 12px; vertical-align: top; text-align: left; }
191
- th { background: #e2e8f0; }
192
- code { background: #e2e8f0; padding: 2px 6px; border-radius: 6px; }
193
- </style>
194
- </head>
195
- <body>
196
- <main>
197
- <h1>Audrey Memory Benchmark</h1>
198
- <div class="callout">
199
- <p><strong>Method:</strong> Audrey is scored on a LongMemEval-inspired retrieval benchmark plus an operation-level lifecycle benchmark. The report still separates local Audrey-versus-baseline results from published external LoCoMo numbers so the comparison stays honest.</p>
200
- <p><strong>Run:</strong> <code>${escapeHtml(summary.command)}</code></p>
201
- <p><strong>Generated:</strong> ${escapeHtml(summary.generatedAt)}</p>
202
- </div>
203
-
204
- <div class="grid">
205
- <section class="callout">
206
- <h2>Combined Local Benchmark</h2>
207
- <img src="./local-overall.svg" alt="Combined local benchmark bar chart" />
208
- </section>
209
-
210
- ${renderSuiteSections(suiteCharts)}
211
-
212
- <section class="callout">
213
- <h2>Published Leaderboard</h2>
214
- <img src="./published-locomo.svg" alt="Published LoCoMo leaderboard bar chart" />
215
- </section>
216
- </div>
217
-
218
- <section class="callout">
219
- <h2>Case Matrix</h2>
220
- <table>
221
- <thead>
222
- <tr>
223
- <th>Case</th>
224
- <th>Suite</th>
225
- <th>Family</th>
226
- ${summary.local.overall.map(row => `<th>${escapeHtml(row.system)}</th>`).join('')}
227
- </tr>
228
- </thead>
229
- <tbody>
230
- ${renderCaseRows(summary.local.cases)}
231
- </tbody>
232
- </table>
233
- </section>
234
-
235
- <section class="callout">
236
- <h2>March 23, 2026 Memory Trends</h2>
237
- <ul>
238
- ${renderTrendList(trends)}
239
- </ul>
240
- </section>
241
- </main>
242
- </body>
243
- </html>`;
244
-
245
- writeFileSync(join(outputDir, 'report.html'), html, 'utf8');
246
-
247
- return {
248
- json: join(outputDir, 'summary.json'),
249
- html: join(outputDir, 'report.html'),
250
- localChart: join(outputDir, 'local-overall.svg'),
251
- suiteCharts,
252
- externalChart: join(outputDir, 'published-locomo.svg'),
253
- readmeAssets,
254
- };
255
- }