audrey 1.0.1 → 1.0.3

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 (235) hide show
  1. package/CHANGELOG.md +57 -0
  2. package/README.md +13 -3
  3. package/benchmarks/adapter-self-test.mjs +6 -2
  4. package/benchmarks/adapters/example-allow.mjs +5 -2
  5. package/benchmarks/adapters/mem0-platform.mjs +19 -12
  6. package/benchmarks/adapters/zep-cloud.mjs +51 -27
  7. package/benchmarks/baselines.js +11 -6
  8. package/benchmarks/build-leaderboard.mjs +36 -23
  9. package/benchmarks/cases.js +24 -12
  10. package/benchmarks/create-conformance-card.mjs +12 -3
  11. package/benchmarks/create-submission-bundle.mjs +22 -8
  12. package/benchmarks/dry-run-external-adapters.mjs +24 -12
  13. package/benchmarks/guardbench.js +263 -123
  14. package/benchmarks/output/adapter-self-test/guardbench-adapter-self-test.json +4 -4
  15. package/benchmarks/output/external/guardbench-external-dry-run.json +1 -1
  16. package/benchmarks/output/external/guardbench-external-evidence.json +1 -1
  17. package/benchmarks/output/guardbench-conformance-card.json +12 -12
  18. package/benchmarks/output/guardbench-raw.json +106 -106
  19. package/benchmarks/output/guardbench-summary.json +168 -168
  20. package/benchmarks/output/leaderboard/guardbench-leaderboard.json +5 -5
  21. package/benchmarks/output/leaderboard/guardbench-leaderboard.md +2 -2
  22. package/benchmarks/output/submission-bundle/guardbench-conformance-card.json +12 -12
  23. package/benchmarks/output/submission-bundle/guardbench-raw.json +106 -106
  24. package/benchmarks/output/submission-bundle/guardbench-summary.json +168 -168
  25. package/benchmarks/output/submission-bundle/submission-manifest.json +11 -11
  26. package/benchmarks/output/submission-bundle/validation-report.json +1 -1
  27. package/benchmarks/output/summary.json +58 -58
  28. package/benchmarks/perf-snapshot.js +12 -9
  29. package/benchmarks/perf.bench.js +14 -6
  30. package/benchmarks/public-paths.mjs +11 -5
  31. package/benchmarks/reference-results.js +10 -5
  32. package/benchmarks/report.js +48 -27
  33. package/benchmarks/run-external-guardbench.mjs +47 -25
  34. package/benchmarks/run.js +112 -59
  35. package/benchmarks/validate-adapter-module.mjs +13 -10
  36. package/benchmarks/validate-adapter-registry.mjs +16 -5
  37. package/benchmarks/validate-guardbench-artifacts.mjs +76 -19
  38. package/benchmarks/verify-external-evidence.mjs +86 -31
  39. package/benchmarks/verify-publication-artifacts.mjs +34 -11
  40. package/benchmarks/verify-submission-bundle.mjs +9 -4
  41. package/dist/mcp-server/config.d.ts +1 -1
  42. package/dist/mcp-server/config.d.ts.map +1 -1
  43. package/dist/mcp-server/config.js +5 -3
  44. package/dist/mcp-server/config.js.map +1 -1
  45. package/dist/mcp-server/index.d.ts +7 -347
  46. package/dist/mcp-server/index.d.ts.map +1 -1
  47. package/dist/mcp-server/index.js +289 -256
  48. package/dist/mcp-server/index.js.map +1 -1
  49. package/dist/mcp-server/tool-schemas.d.ts +341 -0
  50. package/dist/mcp-server/tool-schemas.d.ts.map +1 -0
  51. package/dist/mcp-server/tool-schemas.js +248 -0
  52. package/dist/mcp-server/tool-schemas.js.map +1 -0
  53. package/dist/mcp-server/tool-validation.d.ts +17 -0
  54. package/dist/mcp-server/tool-validation.d.ts.map +1 -0
  55. package/dist/mcp-server/tool-validation.js +41 -0
  56. package/dist/mcp-server/tool-validation.js.map +1 -0
  57. package/dist/src/action-key.d.ts.map +1 -1
  58. package/dist/src/action-key.js +6 -2
  59. package/dist/src/action-key.js.map +1 -1
  60. package/dist/src/adaptive.d.ts.map +1 -1
  61. package/dist/src/adaptive.js +4 -2
  62. package/dist/src/adaptive.js.map +1 -1
  63. package/dist/src/affect.d.ts.map +1 -1
  64. package/dist/src/affect.js +8 -5
  65. package/dist/src/affect.js.map +1 -1
  66. package/dist/src/audrey.d.ts +1 -1
  67. package/dist/src/audrey.d.ts.map +1 -1
  68. package/dist/src/audrey.js +93 -49
  69. package/dist/src/audrey.js.map +1 -1
  70. package/dist/src/capsule.d.ts.map +1 -1
  71. package/dist/src/capsule.js +37 -15
  72. package/dist/src/capsule.js.map +1 -1
  73. package/dist/src/causal.d.ts +1 -1
  74. package/dist/src/causal.d.ts.map +1 -1
  75. package/dist/src/causal.js +4 -2
  76. package/dist/src/causal.js.map +1 -1
  77. package/dist/src/confidence.d.ts.map +1 -1
  78. package/dist/src/confidence.js +5 -5
  79. package/dist/src/confidence.js.map +1 -1
  80. package/dist/src/consolidate.d.ts.map +1 -1
  81. package/dist/src/consolidate.js +17 -9
  82. package/dist/src/consolidate.js.map +1 -1
  83. package/dist/src/context.js +1 -1
  84. package/dist/src/context.js.map +1 -1
  85. package/dist/src/controller.d.ts.map +1 -1
  86. package/dist/src/controller.js +24 -13
  87. package/dist/src/controller.js.map +1 -1
  88. package/dist/src/db.d.ts.map +1 -1
  89. package/dist/src/db.js +78 -27
  90. package/dist/src/db.js.map +1 -1
  91. package/dist/src/decay.d.ts +1 -1
  92. package/dist/src/decay.d.ts.map +1 -1
  93. package/dist/src/decay.js +1 -1
  94. package/dist/src/decay.js.map +1 -1
  95. package/dist/src/embedding.d.ts +12 -4
  96. package/dist/src/embedding.d.ts.map +1 -1
  97. package/dist/src/embedding.js +18 -16
  98. package/dist/src/embedding.js.map +1 -1
  99. package/dist/src/encode.d.ts.map +1 -1
  100. package/dist/src/encode.js +5 -4
  101. package/dist/src/encode.js.map +1 -1
  102. package/dist/src/events.d.ts +3 -2
  103. package/dist/src/events.d.ts.map +1 -1
  104. package/dist/src/events.js +7 -3
  105. package/dist/src/events.js.map +1 -1
  106. package/dist/src/export.d.ts.map +1 -1
  107. package/dist/src/export.js +21 -7
  108. package/dist/src/export.js.map +1 -1
  109. package/dist/src/feedback.d.ts.map +1 -1
  110. package/dist/src/feedback.js +1 -1
  111. package/dist/src/feedback.js.map +1 -1
  112. package/dist/src/forget.d.ts.map +1 -1
  113. package/dist/src/forget.js +12 -6
  114. package/dist/src/forget.js.map +1 -1
  115. package/dist/src/fts.d.ts.map +1 -1
  116. package/dist/src/fts.js +20 -8
  117. package/dist/src/fts.js.map +1 -1
  118. package/dist/src/hybrid-recall.d.ts.map +1 -1
  119. package/dist/src/hybrid-recall.js +12 -6
  120. package/dist/src/hybrid-recall.js.map +1 -1
  121. package/dist/src/impact.d.ts.map +1 -1
  122. package/dist/src/impact.js +26 -10
  123. package/dist/src/impact.js.map +1 -1
  124. package/dist/src/import.d.ts.map +1 -1
  125. package/dist/src/import.js +11 -6
  126. package/dist/src/import.js.map +1 -1
  127. package/dist/src/index.d.ts +3 -3
  128. package/dist/src/index.d.ts.map +1 -1
  129. package/dist/src/index.js +3 -3
  130. package/dist/src/index.js.map +1 -1
  131. package/dist/src/interference.d.ts.map +1 -1
  132. package/dist/src/interference.js +10 -5
  133. package/dist/src/interference.js.map +1 -1
  134. package/dist/src/introspect.d.ts.map +1 -1
  135. package/dist/src/introspect.js +12 -6
  136. package/dist/src/introspect.js.map +1 -1
  137. package/dist/src/llm.d.ts +2 -2
  138. package/dist/src/llm.d.ts.map +1 -1
  139. package/dist/src/llm.js +6 -6
  140. package/dist/src/llm.js.map +1 -1
  141. package/dist/src/migrate.d.ts.map +1 -1
  142. package/dist/src/migrate.js +10 -4
  143. package/dist/src/migrate.js.map +1 -1
  144. package/dist/src/preflight.d.ts.map +1 -1
  145. package/dist/src/preflight.js +6 -8
  146. package/dist/src/preflight.js.map +1 -1
  147. package/dist/src/profile.d.ts.map +1 -1
  148. package/dist/src/profile.js.map +1 -1
  149. package/dist/src/promote.d.ts.map +1 -1
  150. package/dist/src/promote.js +16 -7
  151. package/dist/src/promote.js.map +1 -1
  152. package/dist/src/prompts.d.ts.map +1 -1
  153. package/dist/src/prompts.js +1 -2
  154. package/dist/src/prompts.js.map +1 -1
  155. package/dist/src/recall.d.ts.map +1 -1
  156. package/dist/src/recall.js +85 -18
  157. package/dist/src/recall.js.map +1 -1
  158. package/dist/src/redact.d.ts.map +1 -1
  159. package/dist/src/redact.js +9 -4
  160. package/dist/src/redact.js.map +1 -1
  161. package/dist/src/reflexes.d.ts.map +1 -1
  162. package/dist/src/reflexes.js +1 -7
  163. package/dist/src/reflexes.js.map +1 -1
  164. package/dist/src/rollback.d.ts.map +1 -1
  165. package/dist/src/rollback.js +4 -2
  166. package/dist/src/rollback.js.map +1 -1
  167. package/dist/src/routes.d.ts.map +1 -1
  168. package/dist/src/routes.js +33 -13
  169. package/dist/src/routes.js.map +1 -1
  170. package/dist/src/rules-compiler.d.ts.map +1 -1
  171. package/dist/src/rules-compiler.js +24 -2
  172. package/dist/src/rules-compiler.js.map +1 -1
  173. package/dist/src/server.js +2 -2
  174. package/dist/src/server.js.map +1 -1
  175. package/dist/src/tool-trace.d.ts +2 -2
  176. package/dist/src/tool-trace.d.ts.map +1 -1
  177. package/dist/src/tool-trace.js +12 -4
  178. package/dist/src/tool-trace.js.map +1 -1
  179. package/dist/src/types.d.ts.map +1 -1
  180. package/dist/src/ulid.js +1 -1
  181. package/dist/src/ulid.js.map +1 -1
  182. package/dist/src/utils.d.ts.map +1 -1
  183. package/dist/src/utils.js.map +1 -1
  184. package/dist/src/validate.d.ts.map +1 -1
  185. package/dist/src/validate.js +20 -10
  186. package/dist/src/validate.js.map +1 -1
  187. package/docs/paper/07-evaluation.md +5 -5
  188. package/docs/paper/audrey-paper-v1.md +5 -5
  189. package/docs/paper/evidence-ledger.md +1 -1
  190. package/docs/paper/output/arxiv/arxiv-manifest.json +4 -4
  191. package/docs/paper/output/arxiv/main.tex +5 -5
  192. package/docs/paper/output/arxiv-compile-report.json +3 -3
  193. package/docs/paper/output/submission-bundle/README.md +13 -3
  194. package/docs/paper/output/submission-bundle/benchmarks/output/adapter-self-test/guardbench-adapter-self-test.json +4 -4
  195. package/docs/paper/output/submission-bundle/benchmarks/output/external/guardbench-external-dry-run.json +1 -1
  196. package/docs/paper/output/submission-bundle/benchmarks/output/external/guardbench-external-evidence.json +1 -1
  197. package/docs/paper/output/submission-bundle/benchmarks/output/guardbench-conformance-card.json +12 -12
  198. package/docs/paper/output/submission-bundle/benchmarks/output/guardbench-raw.json +106 -106
  199. package/docs/paper/output/submission-bundle/benchmarks/output/guardbench-summary.json +168 -168
  200. package/docs/paper/output/submission-bundle/benchmarks/output/leaderboard/guardbench-leaderboard.json +5 -5
  201. package/docs/paper/output/submission-bundle/benchmarks/output/leaderboard/guardbench-leaderboard.md +2 -2
  202. package/docs/paper/output/submission-bundle/benchmarks/output/submission-bundle/submission-manifest.json +11 -11
  203. package/docs/paper/output/submission-bundle/benchmarks/output/submission-bundle/validation-report.json +1 -1
  204. package/docs/paper/output/submission-bundle/benchmarks/output/summary.json +64 -64
  205. package/docs/paper/output/submission-bundle/docs/paper/07-evaluation.md +5 -5
  206. package/docs/paper/output/submission-bundle/docs/paper/audrey-paper-v1.md +5 -5
  207. package/docs/paper/output/submission-bundle/docs/paper/evidence-ledger.md +1 -1
  208. package/docs/paper/output/submission-bundle/docs/paper/output/arxiv/arxiv-manifest.json +4 -4
  209. package/docs/paper/output/submission-bundle/docs/paper/output/arxiv/main.tex +5 -5
  210. package/docs/paper/output/submission-bundle/docs/paper/output/arxiv-compile-report.json +3 -3
  211. package/docs/paper/output/submission-bundle/package.json +17 -4
  212. package/docs/paper/output/submission-bundle/paper-submission-manifest.json +34 -34
  213. package/examples/fintech-ops-demo.js +12 -5
  214. package/examples/healthcare-ops-demo.js +8 -4
  215. package/examples/ollama-memory-agent.js +41 -13
  216. package/examples/stripe-demo.js +12 -5
  217. package/package.json +17 -4
  218. package/scripts/audit-release-completion.mjs +179 -101
  219. package/scripts/create-arxiv-source.mjs +20 -14
  220. package/scripts/create-paper-submission-bundle.mjs +6 -2
  221. package/scripts/finalize-release.mjs +111 -36
  222. package/scripts/prepare-release-cut.mjs +14 -6
  223. package/scripts/publish-release-bundle.mjs +62 -23
  224. package/scripts/publish-release-github-api.mjs +89 -24
  225. package/scripts/smoke-cli.js +9 -9
  226. package/scripts/sync-paper-artifacts.mjs +5 -1
  227. package/scripts/verify-arxiv-compile.mjs +52 -16
  228. package/scripts/verify-arxiv-source.mjs +45 -15
  229. package/scripts/verify-browser-launch-plan.mjs +28 -11
  230. package/scripts/verify-browser-launch-results.mjs +32 -14
  231. package/scripts/verify-paper-artifacts.mjs +539 -79
  232. package/scripts/verify-paper-claims.mjs +48 -20
  233. package/scripts/verify-paper-submission-bundle.mjs +22 -11
  234. package/scripts/verify-publication-pack.mjs +23 -9
  235. package/scripts/verify-release-readiness.mjs +211 -76
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": "1.0.0",
3
3
  "suite": "GuardBench submission bundle",
4
- "generatedAt": "2026-05-15T17:52:13.050Z",
4
+ "generatedAt": "2026-05-29T13:33:23.534Z",
5
5
  "sourceDir": "benchmarks/output",
6
6
  "subject": {
7
7
  "name": "Audrey Guard",
@@ -16,9 +16,9 @@
16
16
  "evidenceRecall": 1,
17
17
  "redactionLeaks": 0,
18
18
  "latency": {
19
- "p50Ms": 2.465,
20
- "p95Ms": 30.791,
21
- "maxMs": 30.791
19
+ "p50Ms": 3.09,
20
+ "p95Ms": 28.181,
21
+ "maxMs": 28.181
22
22
  }
23
23
  },
24
24
  "conformance": {
@@ -44,8 +44,8 @@
44
44
  "files": [
45
45
  {
46
46
  "path": "guardbench-conformance-card.json",
47
- "bytes": 1735,
48
- "sha256": "65d4a10afe10178e4e4e3d508e0e06ce5a4b28713debc27cf4d9b60a46050d2f"
47
+ "bytes": 1748,
48
+ "sha256": "88cba808b893cde3530f4e29317d4cf9ae3b20f08456c58d97d4e5300f5f9298"
49
49
  },
50
50
  {
51
51
  "path": "guardbench-manifest.json",
@@ -54,13 +54,13 @@
54
54
  },
55
55
  {
56
56
  "path": "guardbench-raw.json",
57
- "bytes": 43455,
58
- "sha256": "3b78d1a2432e7d72752f96d9ac4b2b49cf6f59eb65548fbadb21ea6adbb86b37"
57
+ "bytes": 43466,
58
+ "sha256": "66d4b69087258638f3572a40e1fd59bb84067034f899eaa2c27eed2dde554b2b"
59
59
  },
60
60
  {
61
61
  "path": "guardbench-summary.json",
62
- "bytes": 69350,
63
- "sha256": "21023f230b761f1b43f8ecabe519dd6b320c62ad56f0b6aa28bbcf7a2c8838f5"
62
+ "bytes": 69359,
63
+ "sha256": "91f264dd889e2c639a6fc6d1b867bc228b94c84ed5120345e23dddb79c11ee74"
64
64
  },
65
65
  {
66
66
  "path": "schemas/guardbench-adapter-registry.schema.json",
@@ -125,7 +125,7 @@
125
125
  {
126
126
  "path": "validation-report.json",
127
127
  "bytes": 739,
128
- "sha256": "570d28760ad3611ccf4f08e98281a3fe659730463d13e96ff31073c7ee10ce65"
128
+ "sha256": "284c40f608508d59e8cdc8047371dfcf0a9824a891ff37b77035241ab5de275f"
129
129
  }
130
130
  ]
131
131
  }
@@ -1,5 +1,5 @@
1
1
  {
2
- "generatedAt": "2026-05-15T17:52:13.050Z",
2
+ "generatedAt": "2026-05-29T13:33:23.534Z",
3
3
  "sourceValidation": {
4
4
  "ok": true,
5
5
  "dir": "benchmarks/output",
@@ -1,5 +1,5 @@
1
1
  {
2
- "generatedAt": "2026-05-15T17:53:31.952Z",
2
+ "generatedAt": "2026-05-29T13:34:04.184Z",
3
3
  "command": "node benchmarks/run.js --provider mock --dimensions 64",
4
4
  "config": {
5
5
  "provider": "mock",
@@ -23,19 +23,19 @@
23
23
  "system": "Audrey",
24
24
  "scorePercent": 100,
25
25
  "passRate": 100,
26
- "avgDurationMs": 26.333333333333332
26
+ "avgDurationMs": 14.166666666666666
27
27
  },
28
28
  {
29
29
  "system": "Vector Only",
30
30
  "scorePercent": 41.66666666666667,
31
31
  "passRate": 25,
32
- "avgDurationMs": 0.3333333333333333
32
+ "avgDurationMs": 0.5
33
33
  },
34
34
  {
35
35
  "system": "Keyword + Recency",
36
36
  "scorePercent": 41.66666666666667,
37
37
  "passRate": 25,
38
- "avgDurationMs": 0.5
38
+ "avgDurationMs": 0.5833333333333334
39
39
  },
40
40
  {
41
41
  "system": "Recent Window",
@@ -170,7 +170,7 @@
170
170
  "system": "Audrey",
171
171
  "scorePercent": 100,
172
172
  "passRate": 100,
173
- "avgDurationMs": 24
173
+ "avgDurationMs": 14.625
174
174
  },
175
175
  {
176
176
  "system": "Vector Only",
@@ -182,7 +182,7 @@
182
182
  "system": "Keyword + Recency",
183
183
  "scorePercent": 50,
184
184
  "passRate": 37.5,
185
- "avgDurationMs": 0.75
185
+ "avgDurationMs": 0.875
186
186
  },
187
187
  {
188
188
  "system": "Recent Window",
@@ -277,7 +277,7 @@
277
277
  "results": [
278
278
  {
279
279
  "system": "Audrey",
280
- "durationMs": 34,
280
+ "durationMs": 23,
281
281
  "passed": true,
282
282
  "score": 1,
283
283
  "summary": "retrieved expected evidence",
@@ -289,7 +289,7 @@
289
289
  },
290
290
  {
291
291
  "system": "Vector Only",
292
- "durationMs": 1,
292
+ "durationMs": 2,
293
293
  "passed": true,
294
294
  "score": 1,
295
295
  "summary": "retrieved expected evidence",
@@ -301,7 +301,7 @@
301
301
  },
302
302
  {
303
303
  "system": "Keyword + Recency",
304
- "durationMs": 6,
304
+ "durationMs": 7,
305
305
  "passed": true,
306
306
  "score": 1,
307
307
  "summary": "retrieved expected evidence",
@@ -336,7 +336,7 @@
336
336
  "results": [
337
337
  {
338
338
  "system": "Audrey",
339
- "durationMs": 20,
339
+ "durationMs": 13,
340
340
  "passed": true,
341
341
  "score": 1,
342
342
  "summary": "retrieved expected evidence",
@@ -347,7 +347,7 @@
347
347
  },
348
348
  {
349
349
  "system": "Vector Only",
350
- "durationMs": 0,
350
+ "durationMs": 1,
351
351
  "passed": false,
352
352
  "score": 0.5,
353
353
  "summary": "retrieved expected evidence, but conflicting evidence still appeared later",
@@ -394,7 +394,7 @@
394
394
  "results": [
395
395
  {
396
396
  "system": "Audrey",
397
- "durationMs": 25,
397
+ "durationMs": 13,
398
398
  "passed": true,
399
399
  "score": 1,
400
400
  "summary": "retrieved expected evidence",
@@ -407,7 +407,7 @@
407
407
  },
408
408
  {
409
409
  "system": "Vector Only",
410
- "durationMs": 1,
410
+ "durationMs": 0,
411
411
  "passed": true,
412
412
  "score": 1,
413
413
  "summary": "retrieved expected evidence",
@@ -457,7 +457,7 @@
457
457
  "results": [
458
458
  {
459
459
  "system": "Audrey",
460
- "durationMs": 19,
460
+ "durationMs": 13,
461
461
  "passed": true,
462
462
  "score": 1,
463
463
  "summary": "retrieved expected evidence",
@@ -518,7 +518,7 @@
518
518
  "results": [
519
519
  {
520
520
  "system": "Audrey",
521
- "durationMs": 20,
521
+ "durationMs": 12,
522
522
  "passed": true,
523
523
  "score": 1,
524
524
  "summary": "correct abstention",
@@ -574,7 +574,7 @@
574
574
  "results": [
575
575
  {
576
576
  "system": "Audrey",
577
- "durationMs": 38,
577
+ "durationMs": 13,
578
578
  "passed": true,
579
579
  "score": 1,
580
580
  "summary": "retrieved expected evidence",
@@ -632,7 +632,7 @@
632
632
  "results": [
633
633
  {
634
634
  "system": "Audrey",
635
- "durationMs": 22,
635
+ "durationMs": 17,
636
636
  "passed": true,
637
637
  "score": 1,
638
638
  "summary": "retrieved expected evidence",
@@ -693,7 +693,7 @@
693
693
  "results": [
694
694
  {
695
695
  "system": "Audrey",
696
- "durationMs": 14,
696
+ "durationMs": 13,
697
697
  "passed": true,
698
698
  "score": 1,
699
699
  "summary": "correct abstention",
@@ -702,7 +702,7 @@
702
702
  },
703
703
  {
704
704
  "system": "Vector Only",
705
- "durationMs": 1,
705
+ "durationMs": 0,
706
706
  "passed": false,
707
707
  "score": 0,
708
708
  "summary": "leaked restricted content",
@@ -750,7 +750,7 @@
750
750
  "system": "Audrey",
751
751
  "scorePercent": 100,
752
752
  "passRate": 100,
753
- "avgDurationMs": 31
753
+ "avgDurationMs": 13.25
754
754
  },
755
755
  {
756
756
  "system": "Keyword + Recency",
@@ -762,7 +762,7 @@
762
762
  "system": "Vector Only",
763
763
  "scorePercent": 12.5,
764
764
  "passRate": 0,
765
- "avgDurationMs": 0.25
765
+ "avgDurationMs": 0.75
766
766
  },
767
767
  {
768
768
  "system": "Recent Window",
@@ -821,7 +821,7 @@
821
821
  "results": [
822
822
  {
823
823
  "system": "Audrey",
824
- "durationMs": 20,
824
+ "durationMs": 11,
825
825
  "passed": true,
826
826
  "score": 1,
827
827
  "summary": "retrieved expected evidence",
@@ -879,7 +879,7 @@
879
879
  "results": [
880
880
  {
881
881
  "system": "Audrey",
882
- "durationMs": 19,
882
+ "durationMs": 12,
883
883
  "passed": true,
884
884
  "score": 1,
885
885
  "summary": "correct abstention",
@@ -888,7 +888,7 @@
888
888
  },
889
889
  {
890
890
  "system": "Vector Only",
891
- "durationMs": 0,
891
+ "durationMs": 1,
892
892
  "passed": false,
893
893
  "score": 0,
894
894
  "summary": "leaked restricted content",
@@ -932,7 +932,7 @@
932
932
  "results": [
933
933
  {
934
934
  "system": "Audrey",
935
- "durationMs": 63,
935
+ "durationMs": 14,
936
936
  "passed": true,
937
937
  "score": 1,
938
938
  "summary": "retrieved expected evidence",
@@ -993,7 +993,7 @@
993
993
  "results": [
994
994
  {
995
995
  "system": "Audrey",
996
- "durationMs": 22,
996
+ "durationMs": 16,
997
997
  "passed": true,
998
998
  "score": 1,
999
999
  "summary": "retrieved expected evidence",
@@ -1004,7 +1004,7 @@
1004
1004
  },
1005
1005
  {
1006
1006
  "system": "Vector Only",
1007
- "durationMs": 0,
1007
+ "durationMs": 1,
1008
1008
  "passed": false,
1009
1009
  "score": 0,
1010
1010
  "summary": "missed target evidence",
@@ -1118,7 +1118,7 @@
1118
1118
  "results": [
1119
1119
  {
1120
1120
  "system": "Audrey",
1121
- "durationMs": 15,
1121
+ "durationMs": 18,
1122
1122
  "passed": true,
1123
1123
  "score": 1,
1124
1124
  "summary": "matched all required signals",
@@ -1176,7 +1176,7 @@
1176
1176
  "results": [
1177
1177
  {
1178
1178
  "system": "Audrey",
1179
- "durationMs": 14,
1179
+ "durationMs": 12,
1180
1180
  "passed": true,
1181
1181
  "score": 1,
1182
1182
  "summary": "matched all required signals",
@@ -1234,12 +1234,12 @@
1234
1234
  "results": [
1235
1235
  {
1236
1236
  "system": "Audrey",
1237
- "durationMs": 15,
1237
+ "durationMs": 13,
1238
1238
  "passed": true,
1239
1239
  "score": 1,
1240
1240
  "summary": "matched all required signals",
1241
1241
  "topResults": [
1242
- "guard_hardened:replay_rejected error:guard receipt already has an outcome: 01KRPCBA92C019YZAVN2M187H1",
1242
+ "guard_hardened:replay_rejected error:guard receipt already has an outcome: 01KSSZ29C75TB1E56B31P9ZW4B",
1243
1243
  "decision:caution verdict:caution risk:0.55 Caution: 1 memory signal, 1 medium severity found before acting.",
1244
1244
  "warning:recent_failure severity:medium npm test failed 1x recently: Vitest failed with spawn EPERM Before re-running npm test, check what changed since the last failure."
1245
1245
  ],
@@ -1292,12 +1292,12 @@
1292
1292
  "results": [
1293
1293
  {
1294
1294
  "system": "Audrey",
1295
- "durationMs": 10,
1295
+ "durationMs": 11,
1296
1296
  "passed": true,
1297
1297
  "score": 1,
1298
1298
  "summary": "matched all required signals",
1299
1299
  "topResults": [
1300
- "guard_hardened:non_guard_receipt_rejected error:not a guard receipt: 01KRPCBA9CMSC7CEQJPFZA6E17",
1300
+ "guard_hardened:non_guard_receipt_rejected error:not a guard receipt: 01KSSZ29CKZF534VNBKZV6WGSP",
1301
1301
  "decision:go verdict:clear risk:0 No relevant memory risks, prior failures, or must-follow procedures were found."
1302
1302
  ],
1303
1303
  "retrievalSummary": "guard_hardened:non_guard_receipt_rejected error:not a guard receipt: 01K | decision:go verdict:clear risk:0 No relevant memory risks, prior failure"
@@ -1352,7 +1352,7 @@
1352
1352
  "results": [
1353
1353
  {
1354
1354
  "system": "Audrey",
1355
- "durationMs": 34,
1355
+ "durationMs": 23,
1356
1356
  "passed": true,
1357
1357
  "score": 1,
1358
1358
  "summary": "retrieved expected evidence",
@@ -1364,7 +1364,7 @@
1364
1364
  },
1365
1365
  {
1366
1366
  "system": "Vector Only",
1367
- "durationMs": 1,
1367
+ "durationMs": 2,
1368
1368
  "passed": true,
1369
1369
  "score": 1,
1370
1370
  "summary": "retrieved expected evidence",
@@ -1376,7 +1376,7 @@
1376
1376
  },
1377
1377
  {
1378
1378
  "system": "Keyword + Recency",
1379
- "durationMs": 6,
1379
+ "durationMs": 7,
1380
1380
  "passed": true,
1381
1381
  "score": 1,
1382
1382
  "summary": "retrieved expected evidence",
@@ -1411,7 +1411,7 @@
1411
1411
  "results": [
1412
1412
  {
1413
1413
  "system": "Audrey",
1414
- "durationMs": 20,
1414
+ "durationMs": 13,
1415
1415
  "passed": true,
1416
1416
  "score": 1,
1417
1417
  "summary": "retrieved expected evidence",
@@ -1422,7 +1422,7 @@
1422
1422
  },
1423
1423
  {
1424
1424
  "system": "Vector Only",
1425
- "durationMs": 0,
1425
+ "durationMs": 1,
1426
1426
  "passed": false,
1427
1427
  "score": 0.5,
1428
1428
  "summary": "retrieved expected evidence, but conflicting evidence still appeared later",
@@ -1469,7 +1469,7 @@
1469
1469
  "results": [
1470
1470
  {
1471
1471
  "system": "Audrey",
1472
- "durationMs": 25,
1472
+ "durationMs": 13,
1473
1473
  "passed": true,
1474
1474
  "score": 1,
1475
1475
  "summary": "retrieved expected evidence",
@@ -1482,7 +1482,7 @@
1482
1482
  },
1483
1483
  {
1484
1484
  "system": "Vector Only",
1485
- "durationMs": 1,
1485
+ "durationMs": 0,
1486
1486
  "passed": true,
1487
1487
  "score": 1,
1488
1488
  "summary": "retrieved expected evidence",
@@ -1532,7 +1532,7 @@
1532
1532
  "results": [
1533
1533
  {
1534
1534
  "system": "Audrey",
1535
- "durationMs": 19,
1535
+ "durationMs": 13,
1536
1536
  "passed": true,
1537
1537
  "score": 1,
1538
1538
  "summary": "retrieved expected evidence",
@@ -1593,7 +1593,7 @@
1593
1593
  "results": [
1594
1594
  {
1595
1595
  "system": "Audrey",
1596
- "durationMs": 20,
1596
+ "durationMs": 12,
1597
1597
  "passed": true,
1598
1598
  "score": 1,
1599
1599
  "summary": "correct abstention",
@@ -1649,7 +1649,7 @@
1649
1649
  "results": [
1650
1650
  {
1651
1651
  "system": "Audrey",
1652
- "durationMs": 38,
1652
+ "durationMs": 13,
1653
1653
  "passed": true,
1654
1654
  "score": 1,
1655
1655
  "summary": "retrieved expected evidence",
@@ -1707,7 +1707,7 @@
1707
1707
  "results": [
1708
1708
  {
1709
1709
  "system": "Audrey",
1710
- "durationMs": 22,
1710
+ "durationMs": 17,
1711
1711
  "passed": true,
1712
1712
  "score": 1,
1713
1713
  "summary": "retrieved expected evidence",
@@ -1768,7 +1768,7 @@
1768
1768
  "results": [
1769
1769
  {
1770
1770
  "system": "Audrey",
1771
- "durationMs": 14,
1771
+ "durationMs": 13,
1772
1772
  "passed": true,
1773
1773
  "score": 1,
1774
1774
  "summary": "correct abstention",
@@ -1777,7 +1777,7 @@
1777
1777
  },
1778
1778
  {
1779
1779
  "system": "Vector Only",
1780
- "durationMs": 1,
1780
+ "durationMs": 0,
1781
1781
  "passed": false,
1782
1782
  "score": 0,
1783
1783
  "summary": "leaked restricted content",
@@ -1824,7 +1824,7 @@
1824
1824
  "results": [
1825
1825
  {
1826
1826
  "system": "Audrey",
1827
- "durationMs": 20,
1827
+ "durationMs": 11,
1828
1828
  "passed": true,
1829
1829
  "score": 1,
1830
1830
  "summary": "retrieved expected evidence",
@@ -1882,7 +1882,7 @@
1882
1882
  "results": [
1883
1883
  {
1884
1884
  "system": "Audrey",
1885
- "durationMs": 19,
1885
+ "durationMs": 12,
1886
1886
  "passed": true,
1887
1887
  "score": 1,
1888
1888
  "summary": "correct abstention",
@@ -1891,7 +1891,7 @@
1891
1891
  },
1892
1892
  {
1893
1893
  "system": "Vector Only",
1894
- "durationMs": 0,
1894
+ "durationMs": 1,
1895
1895
  "passed": false,
1896
1896
  "score": 0,
1897
1897
  "summary": "leaked restricted content",
@@ -1935,7 +1935,7 @@
1935
1935
  "results": [
1936
1936
  {
1937
1937
  "system": "Audrey",
1938
- "durationMs": 63,
1938
+ "durationMs": 14,
1939
1939
  "passed": true,
1940
1940
  "score": 1,
1941
1941
  "summary": "retrieved expected evidence",
@@ -1996,7 +1996,7 @@
1996
1996
  "results": [
1997
1997
  {
1998
1998
  "system": "Audrey",
1999
- "durationMs": 22,
1999
+ "durationMs": 16,
2000
2000
  "passed": true,
2001
2001
  "score": 1,
2002
2002
  "summary": "retrieved expected evidence",
@@ -2007,7 +2007,7 @@
2007
2007
  },
2008
2008
  {
2009
2009
  "system": "Vector Only",
2010
- "durationMs": 0,
2010
+ "durationMs": 1,
2011
2011
  "passed": false,
2012
2012
  "score": 0,
2013
2013
  "summary": "missed target evidence",
@@ -2058,7 +2058,7 @@
2058
2058
  "results": [
2059
2059
  {
2060
2060
  "system": "Audrey",
2061
- "durationMs": 15,
2061
+ "durationMs": 18,
2062
2062
  "passed": true,
2063
2063
  "score": 1,
2064
2064
  "summary": "matched all required signals",
@@ -2116,7 +2116,7 @@
2116
2116
  "results": [
2117
2117
  {
2118
2118
  "system": "Audrey",
2119
- "durationMs": 14,
2119
+ "durationMs": 12,
2120
2120
  "passed": true,
2121
2121
  "score": 1,
2122
2122
  "summary": "matched all required signals",
@@ -2174,12 +2174,12 @@
2174
2174
  "results": [
2175
2175
  {
2176
2176
  "system": "Audrey",
2177
- "durationMs": 15,
2177
+ "durationMs": 13,
2178
2178
  "passed": true,
2179
2179
  "score": 1,
2180
2180
  "summary": "matched all required signals",
2181
2181
  "topResults": [
2182
- "guard_hardened:replay_rejected error:guard receipt already has an outcome: 01KRPCBA92C019YZAVN2M187H1",
2182
+ "guard_hardened:replay_rejected error:guard receipt already has an outcome: 01KSSZ29C75TB1E56B31P9ZW4B",
2183
2183
  "decision:caution verdict:caution risk:0.55 Caution: 1 memory signal, 1 medium severity found before acting.",
2184
2184
  "warning:recent_failure severity:medium npm test failed 1x recently: Vitest failed with spawn EPERM Before re-running npm test, check what changed since the last failure."
2185
2185
  ],
@@ -2232,12 +2232,12 @@
2232
2232
  "results": [
2233
2233
  {
2234
2234
  "system": "Audrey",
2235
- "durationMs": 10,
2235
+ "durationMs": 11,
2236
2236
  "passed": true,
2237
2237
  "score": 1,
2238
2238
  "summary": "matched all required signals",
2239
2239
  "topResults": [
2240
- "guard_hardened:non_guard_receipt_rejected error:not a guard receipt: 01KRPCBA9CMSC7CEQJPFZA6E17",
2240
+ "guard_hardened:non_guard_receipt_rejected error:not a guard receipt: 01KSSZ29CKZF534VNBKZV6WGSP",
2241
2241
  "decision:go verdict:clear risk:0 No relevant memory risks, prior failures, or must-follow procedures were found."
2242
2242
  ],
2243
2243
  "retrievalSummary": "guard_hardened:non_guard_receipt_rejected error:not a guard receipt: 01K | decision:go verdict:clear risk:0 No relevant memory risks, prior failure"
@@ -157,8 +157,8 @@ function parseArgs(argv = process.argv.slice(2)) {
157
157
  if (token === '--sizes' && argv[i + 1]) {
158
158
  args.sizes = argv[++i]
159
159
  .split(',')
160
- .map((s) => Number.parseInt(s.trim(), 10))
161
- .filter((n) => Number.isFinite(n) && n > 0);
160
+ .map(s => Number.parseInt(s.trim(), 10))
161
+ .filter(n => Number.isFinite(n) && n > 0);
162
162
  } else if (token === '--recall-runs' && argv[i + 1]) {
163
163
  args.recallRuns = Number.parseInt(argv[++i], 10);
164
164
  } else if (token === '--out' && argv[i + 1]) {
@@ -180,7 +180,7 @@ async function runOneSize({ size, recallRuns }) {
180
180
  });
181
181
 
182
182
  const queueProcessingTimes = [];
183
- audrey.on('post-encode-complete', (event) => {
183
+ audrey.on('post-encode-complete', event => {
184
184
  queueProcessingTimes.push(event.processing_ms);
185
185
  });
186
186
 
@@ -223,7 +223,10 @@ async function runOneSize({ size, recallRuns }) {
223
223
  }
224
224
  }
225
225
 
226
- export async function runPerfSnapshot({ sizes = DEFAULT_SIZES, recallRuns = DEFAULT_RECALL_RUNS } = {}) {
226
+ export async function runPerfSnapshot({
227
+ sizes = DEFAULT_SIZES,
228
+ recallRuns = DEFAULT_RECALL_RUNS,
229
+ } = {}) {
227
230
  const startedAt = Date.now();
228
231
  const sized = [];
229
232
  for (const size of sizes) {
@@ -265,11 +268,11 @@ export function formatMarkdownTable(snapshot) {
265
268
  lines.push(
266
269
  `Node ${snapshot.machine.node} · ${snapshot.machine.cpuCount}x ${snapshot.machine.cpuModel} · ${snapshot.machine.memoryGb} GB RAM`,
267
270
  );
271
+ lines.push(`Generated ${snapshot.generatedAt}${snapshot.gitSha ? ` (${snapshot.gitSha})` : ''}`);
272
+ lines.push('');
268
273
  lines.push(
269
- `Generated ${snapshot.generatedAt}${snapshot.gitSha ? ` (${snapshot.gitSha})` : ''}`,
274
+ '| Corpus size | Encode p50 (ms) | Encode p95 (ms) | Recall p50 (ms) | Recall p95 (ms) | Recall p99 (ms) |',
270
275
  );
271
- lines.push('');
272
- lines.push('| Corpus size | Encode p50 (ms) | Encode p95 (ms) | Recall p50 (ms) | Recall p95 (ms) | Recall p99 (ms) |');
273
276
  lines.push('|---|---|---|---|---|---|');
274
277
  for (const row of snapshot.sizes) {
275
278
  lines.push(
@@ -287,7 +290,7 @@ export function formatMarkdownTable(snapshot) {
287
290
  if (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) {
288
291
  const args = parseArgs();
289
292
  runPerfSnapshot({ sizes: args.sizes, recallRuns: args.recallRuns })
290
- .then((snapshot) => {
293
+ .then(snapshot => {
291
294
  if (args.out) {
292
295
  writeFileSync(args.out, JSON.stringify(snapshot, null, 2) + '\n');
293
296
  }
@@ -297,7 +300,7 @@ if (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href)
297
300
  process.stdout.write(formatMarkdownTable(snapshot) + '\n');
298
301
  }
299
302
  })
300
- .catch((err) => {
303
+ .catch(err => {
301
304
  console.error('[audrey] perf snapshot failed:', err);
302
305
  process.exit(1);
303
306
  });
@@ -136,16 +136,24 @@ export async function runPerfBenchmark({
136
136
  };
137
137
 
138
138
  if (queueProcessingTimes.length !== runs) {
139
- throw new Error(`expected ${runs} post-encode queue events, got ${queueProcessingTimes.length}`);
139
+ throw new Error(
140
+ `expected ${runs} post-encode queue events, got ${queueProcessingTimes.length}`,
141
+ );
140
142
  }
141
143
 
142
144
  assertBudget('encode response p95', result.encode_response_ms.p95, budgets.encodeResponseP95Ms);
143
145
  assertBudget('hybrid recall p95', result.hybrid_recall_ms.p95, budgets.hybridRecallP95Ms);
144
- assertBudget('queue processing p50', result.queue_processing_ms.p50, budgets.queueProcessingP50Ms);
145
-
146
- out(`Audrey perf gate passed: encode p95=${result.encode_response_ms.p95}ms, `
147
- + `hybrid recall p95=${result.hybrid_recall_ms.p95}ms, `
148
- + `queue p50=${result.queue_processing_ms.p50}ms`);
146
+ assertBudget(
147
+ 'queue processing p50',
148
+ result.queue_processing_ms.p50,
149
+ budgets.queueProcessingP50Ms,
150
+ );
151
+
152
+ out(
153
+ `Audrey perf gate passed: encode p95=${result.encode_response_ms.p95}ms, ` +
154
+ `hybrid recall p95=${result.hybrid_recall_ms.p95}ms, ` +
155
+ `queue p50=${result.queue_processing_ms.p50}ms`,
156
+ );
149
157
  return result;
150
158
  } finally {
151
159
  audrey.close();