audrey 1.1.3 → 1.2.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 (285) hide show
  1. package/CHANGELOG.md +93 -0
  2. package/README.md +39 -12
  3. package/dist/mcp-server/codex-hooks-probe.d.ts +22 -0
  4. package/dist/mcp-server/codex-hooks-probe.d.ts.map +1 -0
  5. package/dist/mcp-server/codex-hooks-probe.js +160 -0
  6. package/dist/mcp-server/codex-hooks-probe.js.map +1 -0
  7. package/dist/mcp-server/config.d.ts +26 -2
  8. package/dist/mcp-server/config.d.ts.map +1 -1
  9. package/dist/mcp-server/config.js +52 -20
  10. package/dist/mcp-server/config.js.map +1 -1
  11. package/dist/mcp-server/hooks.d.ts +28 -0
  12. package/dist/mcp-server/hooks.d.ts.map +1 -1
  13. package/dist/mcp-server/hooks.js +91 -2
  14. package/dist/mcp-server/hooks.js.map +1 -1
  15. package/dist/mcp-server/index.d.ts +242 -2
  16. package/dist/mcp-server/index.d.ts.map +1 -1
  17. package/dist/mcp-server/index.js +806 -240
  18. package/dist/mcp-server/index.js.map +1 -1
  19. package/dist/mcp-server/tool-schemas.d.ts +32 -2
  20. package/dist/mcp-server/tool-schemas.d.ts.map +1 -1
  21. package/dist/mcp-server/tool-schemas.js +55 -0
  22. package/dist/mcp-server/tool-schemas.js.map +1 -1
  23. package/dist/src/audrey.d.ts +14 -2
  24. package/dist/src/audrey.d.ts.map +1 -1
  25. package/dist/src/audrey.js +152 -28
  26. package/dist/src/audrey.js.map +1 -1
  27. package/dist/src/autopilot.d.ts +22 -0
  28. package/dist/src/autopilot.d.ts.map +1 -1
  29. package/dist/src/autopilot.js +271 -50
  30. package/dist/src/autopilot.js.map +1 -1
  31. package/dist/src/capsule.d.ts +23 -0
  32. package/dist/src/capsule.d.ts.map +1 -1
  33. package/dist/src/capsule.js +56 -11
  34. package/dist/src/capsule.js.map +1 -1
  35. package/dist/src/confidence.d.ts +9 -1
  36. package/dist/src/confidence.d.ts.map +1 -1
  37. package/dist/src/confidence.js +16 -2
  38. package/dist/src/confidence.js.map +1 -1
  39. package/dist/src/consolidate.d.ts +4 -0
  40. package/dist/src/consolidate.d.ts.map +1 -1
  41. package/dist/src/consolidate.js +206 -34
  42. package/dist/src/consolidate.js.map +1 -1
  43. package/dist/src/controller.d.ts +17 -1
  44. package/dist/src/controller.d.ts.map +1 -1
  45. package/dist/src/controller.js +244 -128
  46. package/dist/src/controller.js.map +1 -1
  47. package/dist/src/db.d.ts.map +1 -1
  48. package/dist/src/db.js +233 -56
  49. package/dist/src/db.js.map +1 -1
  50. package/dist/src/encode.d.ts +2 -1
  51. package/dist/src/encode.d.ts.map +1 -1
  52. package/dist/src/encode.js +41 -4
  53. package/dist/src/encode.js.map +1 -1
  54. package/dist/src/events.d.ts +48 -1
  55. package/dist/src/events.d.ts.map +1 -1
  56. package/dist/src/events.js +160 -62
  57. package/dist/src/events.js.map +1 -1
  58. package/dist/src/export.d.ts.map +1 -1
  59. package/dist/src/export.js +4 -4
  60. package/dist/src/export.js.map +1 -1
  61. package/dist/src/grounding.d.ts +111 -0
  62. package/dist/src/grounding.d.ts.map +1 -0
  63. package/dist/src/grounding.js +259 -0
  64. package/dist/src/grounding.js.map +1 -0
  65. package/dist/src/hybrid-recall.d.ts +16 -7
  66. package/dist/src/hybrid-recall.d.ts.map +1 -1
  67. package/dist/src/hybrid-recall.js +22 -11
  68. package/dist/src/hybrid-recall.js.map +1 -1
  69. package/dist/src/import.d.ts +10 -0
  70. package/dist/src/import.d.ts.map +1 -1
  71. package/dist/src/import.js +122 -22
  72. package/dist/src/import.js.map +1 -1
  73. package/dist/src/llm.d.ts.map +1 -1
  74. package/dist/src/llm.js +16 -0
  75. package/dist/src/llm.js.map +1 -1
  76. package/dist/src/preflight.d.ts.map +1 -1
  77. package/dist/src/preflight.js +89 -47
  78. package/dist/src/preflight.js.map +1 -1
  79. package/dist/src/project.d.ts +4 -1
  80. package/dist/src/project.d.ts.map +1 -1
  81. package/dist/src/project.js +65 -5
  82. package/dist/src/project.js.map +1 -1
  83. package/dist/src/recall.d.ts.map +1 -1
  84. package/dist/src/recall.js +138 -13
  85. package/dist/src/recall.js.map +1 -1
  86. package/dist/src/redact.d.ts +1 -1
  87. package/dist/src/redact.d.ts.map +1 -1
  88. package/dist/src/redact.js +185 -5
  89. package/dist/src/redact.js.map +1 -1
  90. package/dist/src/routes.d.ts.map +1 -1
  91. package/dist/src/routes.js +91 -18
  92. package/dist/src/routes.js.map +1 -1
  93. package/dist/src/trust.d.ts +35 -0
  94. package/dist/src/trust.d.ts.map +1 -0
  95. package/dist/src/trust.js +77 -0
  96. package/dist/src/trust.js.map +1 -0
  97. package/dist/src/types.d.ts +24 -0
  98. package/dist/src/types.d.ts.map +1 -1
  99. package/package.json +3 -37
  100. package/benchmarks/adapter-kit.mjs +0 -20
  101. package/benchmarks/adapter-self-test.mjs +0 -170
  102. package/benchmarks/adapters/example-allow.mjs +0 -31
  103. package/benchmarks/adapters/mem0-platform.mjs +0 -274
  104. package/benchmarks/adapters/registry.json +0 -51
  105. package/benchmarks/adapters/zep-cloud.mjs +0 -304
  106. package/benchmarks/baselines.js +0 -174
  107. package/benchmarks/build-leaderboard.mjs +0 -183
  108. package/benchmarks/cases.js +0 -549
  109. package/benchmarks/create-conformance-card.mjs +0 -148
  110. package/benchmarks/create-submission-bundle.mjs +0 -190
  111. package/benchmarks/dry-run-external-adapters.mjs +0 -177
  112. package/benchmarks/guardbench.js +0 -1265
  113. package/benchmarks/output/adapter-self-test/guardbench-adapter-self-test.json +0 -50
  114. package/benchmarks/output/external/guardbench-external-dry-run.json +0 -69
  115. package/benchmarks/output/external/guardbench-external-evidence.json +0 -56
  116. package/benchmarks/output/guardbench-conformance-card.json +0 -63
  117. package/benchmarks/output/guardbench-manifest.json +0 -414
  118. package/benchmarks/output/guardbench-raw.json +0 -1279
  119. package/benchmarks/output/guardbench-summary.json +0 -2123
  120. package/benchmarks/output/leaderboard/guardbench-leaderboard.json +0 -93
  121. package/benchmarks/output/leaderboard/guardbench-leaderboard.md +0 -7
  122. package/benchmarks/output/submission-bundle/guardbench-conformance-card.json +0 -63
  123. package/benchmarks/output/submission-bundle/guardbench-manifest.json +0 -414
  124. package/benchmarks/output/submission-bundle/guardbench-raw.json +0 -1279
  125. package/benchmarks/output/submission-bundle/guardbench-summary.json +0 -2123
  126. package/benchmarks/output/submission-bundle/schemas/guardbench-adapter-registry.schema.json +0 -69
  127. package/benchmarks/output/submission-bundle/schemas/guardbench-adapter-self-test.schema.json +0 -156
  128. package/benchmarks/output/submission-bundle/schemas/guardbench-conformance-card.schema.json +0 -184
  129. package/benchmarks/output/submission-bundle/schemas/guardbench-external-dry-run.schema.json +0 -74
  130. package/benchmarks/output/submission-bundle/schemas/guardbench-external-evidence.schema.json +0 -108
  131. package/benchmarks/output/submission-bundle/schemas/guardbench-external-run.schema.json +0 -160
  132. package/benchmarks/output/submission-bundle/schemas/guardbench-leaderboard.schema.json +0 -179
  133. package/benchmarks/output/submission-bundle/schemas/guardbench-manifest.schema.json +0 -213
  134. package/benchmarks/output/submission-bundle/schemas/guardbench-publication-verification.schema.json +0 -47
  135. package/benchmarks/output/submission-bundle/schemas/guardbench-raw.schema.json +0 -184
  136. package/benchmarks/output/submission-bundle/schemas/guardbench-submission-manifest.schema.json +0 -151
  137. package/benchmarks/output/submission-bundle/schemas/guardbench-summary.schema.json +0 -249
  138. package/benchmarks/output/submission-bundle/submission-manifest.json +0 -131
  139. package/benchmarks/output/submission-bundle/validation-report.json +0 -31
  140. package/benchmarks/output/summary.json +0 -2354
  141. package/benchmarks/perf-snapshot.js +0 -307
  142. package/benchmarks/perf.bench.js +0 -169
  143. package/benchmarks/public-paths.mjs +0 -97
  144. package/benchmarks/reference-results.js +0 -75
  145. package/benchmarks/report.js +0 -280
  146. package/benchmarks/run-external-guardbench.mjs +0 -303
  147. package/benchmarks/run.js +0 -735
  148. package/benchmarks/schemas/guardbench-adapter-registry.schema.json +0 -69
  149. package/benchmarks/schemas/guardbench-adapter-self-test.schema.json +0 -156
  150. package/benchmarks/schemas/guardbench-conformance-card.schema.json +0 -184
  151. package/benchmarks/schemas/guardbench-external-dry-run.schema.json +0 -74
  152. package/benchmarks/schemas/guardbench-external-evidence.schema.json +0 -108
  153. package/benchmarks/schemas/guardbench-external-run.schema.json +0 -160
  154. package/benchmarks/schemas/guardbench-leaderboard.schema.json +0 -179
  155. package/benchmarks/schemas/guardbench-manifest.schema.json +0 -213
  156. package/benchmarks/schemas/guardbench-publication-verification.schema.json +0 -47
  157. package/benchmarks/schemas/guardbench-raw.schema.json +0 -184
  158. package/benchmarks/schemas/guardbench-submission-manifest.schema.json +0 -151
  159. package/benchmarks/schemas/guardbench-summary.schema.json +0 -249
  160. package/benchmarks/snapshots/perf-0.22.2.json +0 -123
  161. package/benchmarks/snapshots/perf-0.23.0.json +0 -123
  162. package/benchmarks/validate-adapter-module.mjs +0 -107
  163. package/benchmarks/validate-adapter-registry.mjs +0 -145
  164. package/benchmarks/validate-adapter-self-test.mjs +0 -96
  165. package/benchmarks/validate-guardbench-artifacts.mjs +0 -400
  166. package/benchmarks/verify-external-evidence.mjs +0 -351
  167. package/benchmarks/verify-publication-artifacts.mjs +0 -309
  168. package/benchmarks/verify-submission-bundle.mjs +0 -172
  169. package/docs/AUDREY_PAPER_OUTLINE.md +0 -178
  170. package/docs/MEMORY_BENCHMARKING.md +0 -59
  171. package/docs/PRODUCTION_BACKLOG.md +0 -321
  172. package/docs/assets/audrey-feature-grid.jpg +0 -0
  173. package/docs/assets/audrey-logo.svg +0 -45
  174. package/docs/assets/audrey-wordmark.png +0 -0
  175. package/docs/paper/00-master.md +0 -48
  176. package/docs/paper/01-introduction.md +0 -27
  177. package/docs/paper/02-related-work.md +0 -47
  178. package/docs/paper/03-problem-definition.md +0 -108
  179. package/docs/paper/04-design.md +0 -164
  180. package/docs/paper/05-guardbench-spec.md +0 -412
  181. package/docs/paper/06-implementation.md +0 -115
  182. package/docs/paper/07-evaluation.md +0 -168
  183. package/docs/paper/08-discussion-limitations.md +0 -61
  184. package/docs/paper/09-conclusion.md +0 -11
  185. package/docs/paper/SUBMISSION_README.md +0 -162
  186. package/docs/paper/appendix-a-demo-transcript.md +0 -114
  187. package/docs/paper/arxiv-compile-report.schema.json +0 -116
  188. package/docs/paper/arxiv-source.schema.json +0 -61
  189. package/docs/paper/audrey-paper-v1.md +0 -1108
  190. package/docs/paper/browser-launch-plan.json +0 -209
  191. package/docs/paper/browser-launch-plan.schema.json +0 -100
  192. package/docs/paper/browser-launch-results.json +0 -86
  193. package/docs/paper/browser-launch-results.schema.json +0 -66
  194. package/docs/paper/claim-register.json +0 -138
  195. package/docs/paper/claim-register.schema.json +0 -81
  196. package/docs/paper/evidence-ledger.md +0 -103
  197. package/docs/paper/output/arxiv/README-arxiv.txt +0 -8
  198. package/docs/paper/output/arxiv/arxiv-manifest.json +0 -41
  199. package/docs/paper/output/arxiv/main.tex +0 -951
  200. package/docs/paper/output/arxiv/references.bib +0 -222
  201. package/docs/paper/output/arxiv-compile-report.json +0 -24
  202. package/docs/paper/output/submission-bundle/LICENSE +0 -21
  203. package/docs/paper/output/submission-bundle/README.md +0 -440
  204. package/docs/paper/output/submission-bundle/benchmarks/output/adapter-self-test/guardbench-adapter-self-test.json +0 -50
  205. package/docs/paper/output/submission-bundle/benchmarks/output/external/guardbench-external-dry-run.json +0 -69
  206. package/docs/paper/output/submission-bundle/benchmarks/output/external/guardbench-external-evidence.json +0 -56
  207. package/docs/paper/output/submission-bundle/benchmarks/output/guardbench-conformance-card.json +0 -63
  208. package/docs/paper/output/submission-bundle/benchmarks/output/guardbench-manifest.json +0 -414
  209. package/docs/paper/output/submission-bundle/benchmarks/output/guardbench-raw.json +0 -1279
  210. package/docs/paper/output/submission-bundle/benchmarks/output/guardbench-summary.json +0 -2123
  211. package/docs/paper/output/submission-bundle/benchmarks/output/leaderboard/guardbench-leaderboard.json +0 -93
  212. package/docs/paper/output/submission-bundle/benchmarks/output/leaderboard/guardbench-leaderboard.md +0 -7
  213. package/docs/paper/output/submission-bundle/benchmarks/output/submission-bundle/submission-manifest.json +0 -131
  214. package/docs/paper/output/submission-bundle/benchmarks/output/submission-bundle/validation-report.json +0 -31
  215. package/docs/paper/output/submission-bundle/benchmarks/output/summary.json +0 -2354
  216. package/docs/paper/output/submission-bundle/benchmarks/schemas/guardbench-adapter-registry.schema.json +0 -69
  217. package/docs/paper/output/submission-bundle/benchmarks/schemas/guardbench-adapter-self-test.schema.json +0 -156
  218. package/docs/paper/output/submission-bundle/benchmarks/schemas/guardbench-conformance-card.schema.json +0 -184
  219. package/docs/paper/output/submission-bundle/benchmarks/schemas/guardbench-external-dry-run.schema.json +0 -74
  220. package/docs/paper/output/submission-bundle/benchmarks/schemas/guardbench-external-evidence.schema.json +0 -108
  221. package/docs/paper/output/submission-bundle/benchmarks/schemas/guardbench-external-run.schema.json +0 -160
  222. package/docs/paper/output/submission-bundle/benchmarks/schemas/guardbench-leaderboard.schema.json +0 -179
  223. package/docs/paper/output/submission-bundle/benchmarks/schemas/guardbench-manifest.schema.json +0 -213
  224. package/docs/paper/output/submission-bundle/benchmarks/schemas/guardbench-publication-verification.schema.json +0 -47
  225. package/docs/paper/output/submission-bundle/benchmarks/schemas/guardbench-raw.schema.json +0 -184
  226. package/docs/paper/output/submission-bundle/benchmarks/schemas/guardbench-submission-manifest.schema.json +0 -151
  227. package/docs/paper/output/submission-bundle/benchmarks/schemas/guardbench-summary.schema.json +0 -249
  228. package/docs/paper/output/submission-bundle/docs/AUDREY_PAPER_OUTLINE.md +0 -178
  229. package/docs/paper/output/submission-bundle/docs/paper/00-master.md +0 -48
  230. package/docs/paper/output/submission-bundle/docs/paper/01-introduction.md +0 -27
  231. package/docs/paper/output/submission-bundle/docs/paper/02-related-work.md +0 -47
  232. package/docs/paper/output/submission-bundle/docs/paper/03-problem-definition.md +0 -108
  233. package/docs/paper/output/submission-bundle/docs/paper/04-design.md +0 -164
  234. package/docs/paper/output/submission-bundle/docs/paper/05-guardbench-spec.md +0 -412
  235. package/docs/paper/output/submission-bundle/docs/paper/06-implementation.md +0 -115
  236. package/docs/paper/output/submission-bundle/docs/paper/07-evaluation.md +0 -168
  237. package/docs/paper/output/submission-bundle/docs/paper/08-discussion-limitations.md +0 -61
  238. package/docs/paper/output/submission-bundle/docs/paper/09-conclusion.md +0 -11
  239. package/docs/paper/output/submission-bundle/docs/paper/SUBMISSION_README.md +0 -162
  240. package/docs/paper/output/submission-bundle/docs/paper/appendix-a-demo-transcript.md +0 -114
  241. package/docs/paper/output/submission-bundle/docs/paper/arxiv-compile-report.schema.json +0 -116
  242. package/docs/paper/output/submission-bundle/docs/paper/arxiv-source.schema.json +0 -61
  243. package/docs/paper/output/submission-bundle/docs/paper/audrey-paper-v1.md +0 -1108
  244. package/docs/paper/output/submission-bundle/docs/paper/browser-launch-plan.json +0 -209
  245. package/docs/paper/output/submission-bundle/docs/paper/browser-launch-plan.schema.json +0 -100
  246. package/docs/paper/output/submission-bundle/docs/paper/browser-launch-results.json +0 -86
  247. package/docs/paper/output/submission-bundle/docs/paper/browser-launch-results.schema.json +0 -66
  248. package/docs/paper/output/submission-bundle/docs/paper/claim-register.json +0 -138
  249. package/docs/paper/output/submission-bundle/docs/paper/claim-register.schema.json +0 -81
  250. package/docs/paper/output/submission-bundle/docs/paper/evidence-ledger.md +0 -103
  251. package/docs/paper/output/submission-bundle/docs/paper/output/arxiv/README-arxiv.txt +0 -8
  252. package/docs/paper/output/submission-bundle/docs/paper/output/arxiv/arxiv-manifest.json +0 -41
  253. package/docs/paper/output/submission-bundle/docs/paper/output/arxiv/main.tex +0 -951
  254. package/docs/paper/output/submission-bundle/docs/paper/output/arxiv/references.bib +0 -222
  255. package/docs/paper/output/submission-bundle/docs/paper/output/arxiv-compile-report.json +0 -24
  256. package/docs/paper/output/submission-bundle/docs/paper/paper-submission-bundle.schema.json +0 -70
  257. package/docs/paper/output/submission-bundle/docs/paper/publication-pack.json +0 -81
  258. package/docs/paper/output/submission-bundle/docs/paper/publication-pack.schema.json +0 -60
  259. package/docs/paper/output/submission-bundle/docs/paper/references.bib +0 -222
  260. package/docs/paper/output/submission-bundle/package.json +0 -235
  261. package/docs/paper/output/submission-bundle/paper-submission-manifest.json +0 -379
  262. package/docs/paper/paper-submission-bundle.schema.json +0 -70
  263. package/docs/paper/publication-pack.json +0 -81
  264. package/docs/paper/publication-pack.schema.json +0 -60
  265. package/docs/paper/references.bib +0 -222
  266. package/scripts/audit-release-completion.mjs +0 -440
  267. package/scripts/create-arxiv-source.mjs +0 -368
  268. package/scripts/create-paper-submission-bundle.mjs +0 -214
  269. package/scripts/finalize-release.mjs +0 -601
  270. package/scripts/prepare-release-cut.mjs +0 -277
  271. package/scripts/publish-release-bundle.mjs +0 -252
  272. package/scripts/publish-release-github-api.mjs +0 -494
  273. package/scripts/run-vitest.mjs +0 -34
  274. package/scripts/smoke-cli.js +0 -92
  275. package/scripts/sync-paper-artifacts.mjs +0 -112
  276. package/scripts/verify-arxiv-compile.mjs +0 -476
  277. package/scripts/verify-arxiv-source.mjs +0 -224
  278. package/scripts/verify-browser-launch-plan.mjs +0 -254
  279. package/scripts/verify-browser-launch-results.mjs +0 -303
  280. package/scripts/verify-paper-artifacts.mjs +0 -798
  281. package/scripts/verify-paper-claims.mjs +0 -254
  282. package/scripts/verify-paper-submission-bundle.mjs +0 -218
  283. package/scripts/verify-publication-pack.mjs +0 -210
  284. package/scripts/verify-python-package.py +0 -201
  285. package/scripts/verify-release-readiness.mjs +0 -920
@@ -1,51 +0,0 @@
1
- {
2
- "schemaVersion": "1.0.0",
3
- "suite": "GuardBench adapter registry",
4
- "adapters": [
5
- {
6
- "id": "example-allow",
7
- "name": "Example Allow Adapter",
8
- "path": "benchmarks/adapters/example-allow.mjs",
9
- "status": "reference",
10
- "credentialMode": "none",
11
- "requiredEnv": [],
12
- "description": "Credential-free reference adapter for validating module loading, self-test generation, and report validation.",
13
- "commands": {
14
- "moduleValidate": "npm run bench:guard:adapter-module:validate -- --adapter benchmarks/adapters/example-allow.mjs",
15
- "selfTest": "npm run bench:guard:adapter-self-test -- --adapter benchmarks/adapters/example-allow.mjs",
16
- "selfTestValidate": "npm run bench:guard:adapter-self-test:validate -- --report benchmarks/output/adapter-self-test/guardbench-adapter-self-test.json",
17
- "externalRun": "npm run bench:guard:adapter-conformance"
18
- }
19
- },
20
- {
21
- "id": "mem0-platform",
22
- "name": "Mem0 Platform",
23
- "path": "benchmarks/adapters/mem0-platform.mjs",
24
- "status": "external-system",
25
- "credentialMode": "runtime-env",
26
- "requiredEnv": ["MEM0_API_KEY"],
27
- "description": "Mem0 Platform REST adapter using V3 add, V2 search, event polling, and entity cleanup.",
28
- "commands": {
29
- "moduleValidate": "npm run bench:guard:adapter-module:validate -- --adapter benchmarks/adapters/mem0-platform.mjs",
30
- "selfTest": "npm run bench:guard:adapter-self-test -- --adapter benchmarks/adapters/mem0-platform.mjs",
31
- "selfTestValidate": "npm run bench:guard:adapter-self-test:validate -- --report benchmarks/output/adapter-self-test/guardbench-adapter-self-test.json",
32
- "externalRun": "npm run bench:guard:mem0"
33
- }
34
- },
35
- {
36
- "id": "zep-cloud",
37
- "name": "Zep Cloud",
38
- "path": "benchmarks/adapters/zep-cloud.mjs",
39
- "status": "external-system",
40
- "credentialMode": "runtime-env",
41
- "requiredEnv": ["ZEP_API_KEY"],
42
- "description": "Zep Cloud REST adapter using v2 users, sessions, memory.add, graph.search, and user cleanup.",
43
- "commands": {
44
- "moduleValidate": "npm run bench:guard:adapter-module:validate -- --adapter benchmarks/adapters/zep-cloud.mjs",
45
- "selfTest": "npm run bench:guard:adapter-self-test -- --adapter benchmarks/adapters/zep-cloud.mjs",
46
- "selfTestValidate": "npm run bench:guard:adapter-self-test:validate -- --report benchmarks/output/adapter-self-test/guardbench-adapter-self-test.json",
47
- "externalRun": "npm run bench:guard:zep"
48
- }
49
- }
50
- ]
51
- }
@@ -1,304 +0,0 @@
1
- import { randomBytes } from 'node:crypto';
2
-
3
- const DEFAULT_BASE_URL = 'https://api.getzep.com';
4
- const DEFAULT_INGEST_DELAY_MS = 0;
5
- const BATCH_SIZE = 50;
6
-
7
- function requireEnv(name) {
8
- const value = process.env[name];
9
- if (!value) {
10
- throw new Error(`${name} is required for the Zep Cloud GuardBench adapter.`);
11
- }
12
- return value;
13
- }
14
-
15
- function sleep(ms) {
16
- return new Promise(resolve => setTimeout(resolve, ms));
17
- }
18
-
19
- function actionText(action) {
20
- return [action.action, action.command, action.tool, action.cwd, ...(action.files ?? [])]
21
- .filter(Boolean)
22
- .join('\n');
23
- }
24
-
25
- function normalize(text) {
26
- return String(text || '').toLowerCase();
27
- }
28
-
29
- function tokenize(text) {
30
- return normalize(text)
31
- .replace(/[^a-z0-9]+/g, ' ')
32
- .trim()
33
- .split(/\s+/)
34
- .filter(token => token.length > 2);
35
- }
36
-
37
- function tokenOverlap(a, b) {
38
- const tokens = tokenize(a);
39
- if (tokens.length === 0) return 0;
40
- const other = new Set(tokenize(b));
41
- let matches = 0;
42
- for (const token of tokens) {
43
- if (other.has(token)) matches++;
44
- }
45
- return matches / tokens.length;
46
- }
47
-
48
- function resultText(result) {
49
- return [result?.fact, result?.content, result?.summary, result?.name, result?.context]
50
- .filter(Boolean)
51
- .join('\n');
52
- }
53
-
54
- function collectSearchResults(response) {
55
- const rows = [];
56
- for (const key of ['edges', 'episodes', 'nodes', 'observations', 'thread_summaries']) {
57
- if (Array.isArray(response?.[key])) rows.push(...response[key]);
58
- }
59
- if (response?.context) rows.push({ uuid: 'zep-context', context: response.context });
60
- return rows;
61
- }
62
-
63
- function evidenceIds(results) {
64
- return results.map(
65
- (result, index) =>
66
- result?.uuid ??
67
- result?.id ??
68
- result?.task_id ??
69
- result?.thread_id ??
70
- `zep-result-${index + 1}`,
71
- );
72
- }
73
-
74
- function decisionFromSearchResults(results, action, unsupportedFault = null) {
75
- if (unsupportedFault) {
76
- return {
77
- decision: 'warn',
78
- riskScore: 0.55,
79
- evidenceIds: evidenceIds(results),
80
- recommendedActions: [
81
- 'External adapter cannot inject storage faults into Zep Cloud; verify memory health separately.',
82
- ],
83
- summary: `Zep Cloud adapter cannot emulate fault injection: ${unsupportedFault}.`,
84
- };
85
- }
86
-
87
- const query = actionText(action);
88
- const texts = results.map(resultText);
89
- const joined = texts.join('\n').toLowerCase();
90
- if (/\b(must-follow|never|do not|high-risk|conflicting)\b/i.test(joined)) {
91
- const relevant = texts.some(text => tokenOverlap(query, text) >= 0.18);
92
- return {
93
- decision: relevant ? 'block' : 'warn',
94
- riskScore: relevant ? 0.85 : 0.55,
95
- evidenceIds: evidenceIds(results),
96
- recommendedActions: ['Review retrieved Zep graph memory before acting.'],
97
- summary: relevant
98
- ? 'Zep returned policy-like graph memory with lexical overlap; adapter escalated from retrieval to a block.'
99
- : 'Zep returned policy-like graph memory without enough lexical overlap for a block.',
100
- };
101
- }
102
-
103
- if (results.length > 0) {
104
- return {
105
- decision: 'warn',
106
- riskScore: 0.35,
107
- evidenceIds: evidenceIds(results),
108
- recommendedActions: ['Treat retrieved Zep graph memory as advisory context.'],
109
- summary: 'Zep returned related graph memory, but no policy-like control evidence was found.',
110
- };
111
- }
112
-
113
- return {
114
- decision: 'allow',
115
- riskScore: 0,
116
- evidenceIds: [],
117
- recommendedActions: [],
118
- summary: 'Zep returned no relevant graph memory for this action.',
119
- };
120
- }
121
-
122
- class ZepCloudClient {
123
- constructor({
124
- apiKey = requireEnv('ZEP_API_KEY'),
125
- baseUrl = process.env.ZEP_BASE_URL ?? DEFAULT_BASE_URL,
126
- authScheme = process.env.ZEP_AUTH_SCHEME ?? 'Api-Key',
127
- fetchImpl = globalThis.fetch,
128
- } = {}) {
129
- this.apiKey = apiKey;
130
- this.baseUrl = baseUrl.replace(/\/+$/, '');
131
- this.authScheme = authScheme;
132
- this.fetch = fetchImpl;
133
- }
134
-
135
- get authorization() {
136
- return this.authScheme ? `${this.authScheme} ${this.apiKey}` : this.apiKey;
137
- }
138
-
139
- async request(
140
- path,
141
- { method = 'GET', body, okStatuses = [200, 201, 204], ignoreNotFound = false } = {},
142
- ) {
143
- const response = await this.fetch(`${this.baseUrl}${path}`, {
144
- method,
145
- headers: {
146
- Authorization: this.authorization,
147
- 'Content-Type': 'application/json',
148
- },
149
- body: body == null ? undefined : JSON.stringify(body),
150
- });
151
-
152
- if (ignoreNotFound && response.status === 404) return null;
153
- if (!okStatuses.includes(response.status)) {
154
- const text = await response.text();
155
- throw new Error(`Zep ${method} ${path} failed ${response.status}: ${text.slice(0, 500)}`);
156
- }
157
-
158
- if (response.status === 204) return null;
159
- const text = await response.text();
160
- return text ? JSON.parse(text) : null;
161
- }
162
-
163
- async createUser(userId) {
164
- return this.request('/api/v2/users', {
165
- method: 'POST',
166
- body: { user_id: userId },
167
- });
168
- }
169
-
170
- async createSession({ sessionId, userId }) {
171
- return this.request('/api/v2/sessions', {
172
- method: 'POST',
173
- body: { session_id: sessionId, user_id: userId },
174
- });
175
- }
176
-
177
- async addMessages({ sessionId, messages }) {
178
- if (messages.length === 0) return null;
179
- return this.request(`/api/v2/sessions/${encodeURIComponent(sessionId)}/memory`, {
180
- method: 'POST',
181
- body: { messages, return_context: false },
182
- });
183
- }
184
-
185
- async searchGraph({ userId, query }) {
186
- return this.request('/api/v2/graph/search', {
187
- method: 'POST',
188
- body: {
189
- user_id: userId,
190
- query: query.slice(0, 400),
191
- scope: 'edges',
192
- limit: 10,
193
- },
194
- });
195
- }
196
-
197
- async deleteUser(userId) {
198
- return this.request(`/api/v2/users/${encodeURIComponent(userId)}`, {
199
- method: 'DELETE',
200
- ignoreNotFound: true,
201
- });
202
- }
203
- }
204
-
205
- function message(content) {
206
- return {
207
- role: 'guardbench',
208
- role_type: 'norole',
209
- content,
210
- };
211
- }
212
-
213
- function memoryMessagesFromScenario(scenario) {
214
- const messages = [];
215
- for (const memory of scenario.seed.seededMemories ?? []) {
216
- messages.push(message(memory.content));
217
- }
218
- for (const event of scenario.seed.seededToolEvents ?? []) {
219
- const seededSecret =
220
- event.errorSummaryPattern && scenario.privateSeed?.seededSecrets?.[0]
221
- ? `${'x'.repeat(1990)} ${scenario.privateSeed.seededSecrets[0]}`
222
- : '';
223
- messages.push(
224
- message(
225
- [
226
- `Tool event: ${event.tool ?? 'tool'}`,
227
- event.action ? `Action: ${event.action}` : '',
228
- event.outcome ? `Outcome: ${event.outcome}` : '',
229
- event.errorSummary ? `Error: ${event.errorSummary}` : '',
230
- event.errorSummaryPattern ? `Error pattern: ${event.errorSummaryPattern}` : '',
231
- seededSecret ? `Error: ${seededSecret}` : '',
232
- event.output ? `Output: ${event.output}` : '',
233
- ]
234
- .filter(Boolean)
235
- .join('\n'),
236
- ),
237
- );
238
- }
239
- if (scenario.seed.seededNoise?.count) {
240
- for (let i = 0; i < scenario.seed.seededNoise.count; i++) {
241
- messages.push(
242
- message(
243
- `Irrelevant background memory ${i}: UI color preference, lunch note, or unrelated calendar detail.`,
244
- ),
245
- );
246
- }
247
- }
248
- return messages;
249
- }
250
-
251
- async function addInBatches(client, { sessionId, messages }) {
252
- for (let i = 0; i < messages.length; i += BATCH_SIZE) {
253
- await client.addMessages({
254
- sessionId,
255
- messages: messages.slice(i, i + BATCH_SIZE),
256
- });
257
- }
258
- }
259
-
260
- function idForScenario(kind, scenario) {
261
- const prefix = process.env.ZEP_GUARDBENCH_USER_PREFIX ?? 'audrey-guardbench';
262
- const runId =
263
- process.env.ZEP_GUARDBENCH_RUN_ID ?? `${Date.now()}-${randomBytes(8).toString('hex')}`;
264
- return `${prefix}-${runId}-${kind}-${scenario.id}`.toLowerCase();
265
- }
266
-
267
- export function createGuardBenchAdapter(options = {}) {
268
- return {
269
- name: 'Zep Cloud',
270
- description:
271
- 'Zep Cloud REST adapter using v2 users, sessions, memory.add, graph.search, and user cleanup.',
272
- async setup({ scenario }) {
273
- const client = new ZepCloudClient(options);
274
- const userId = idForScenario('user', scenario);
275
- const sessionId = idForScenario('session', scenario);
276
- const messages = memoryMessagesFromScenario(scenario);
277
- await client.createUser(userId);
278
- await client.createSession({ sessionId, userId });
279
- await addInBatches(client, { sessionId, messages });
280
- const ingestDelayMs = Number(
281
- options.ingestDelayMs ??
282
- process.env.ZEP_GUARDBENCH_INGEST_DELAY_MS ??
283
- DEFAULT_INGEST_DELAY_MS,
284
- );
285
- if (ingestDelayMs > 0) await sleep(ingestDelayMs);
286
- return { client, userId, sessionId };
287
- },
288
- async decide({ scenario, action, state }) {
289
- const search = await state.client.searchGraph({
290
- userId: state.userId,
291
- query: actionText(action),
292
- });
293
- const results = collectSearchResults(search);
294
- return decisionFromSearchResults(results, action, scenario.seed.faultInjection);
295
- },
296
- async cleanup({ state }) {
297
- if (state?.client && state?.userId && process.env.ZEP_GUARDBENCH_SKIP_CLEANUP !== '1') {
298
- await state.client.deleteUser(state.userId);
299
- }
300
- },
301
- };
302
- }
303
-
304
- export default createGuardBenchAdapter();
@@ -1,174 +0,0 @@
1
- import { createEmbeddingProvider } from '../dist/src/embedding.js';
2
- import { cosineSimilarity } from '../dist/src/utils.js';
3
-
4
- function normalize(text) {
5
- return String(text || '').toLowerCase();
6
- }
7
-
8
- function tokenize(text) {
9
- return normalize(text)
10
- .replace(/[^a-z0-9]+/g, ' ')
11
- .trim()
12
- .split(/\s+/)
13
- .filter(Boolean);
14
- }
15
-
16
- function keywordScore(queryTokens, content) {
17
- const contentTokens = new Set(tokenize(content));
18
- if (queryTokens.length === 0) return 0;
19
- let matches = 0;
20
- for (const token of queryTokens) {
21
- if (contentTokens.has(token)) matches++;
22
- }
23
- return matches / queryTokens.length;
24
- }
25
-
26
- function sortByScore(rows) {
27
- return rows
28
- .filter(row => Number.isFinite(row.score))
29
- .sort(
30
- (a, b) =>
31
- b.score - a.score || String(b.createdAt || '').localeCompare(String(a.createdAt || '')),
32
- );
33
- }
34
-
35
- function flattenMemories(benchmarkCase, ids = []) {
36
- return benchmarkCase.memory.map((memory, index) => ({
37
- id: ids[index] || `memory-${index + 1}`,
38
- content: memory.content,
39
- source: memory.source,
40
- createdAt: memory.createdAt || new Date(Date.UTC(2026, 0, index + 1)).toISOString(),
41
- private: Boolean(memory.private),
42
- }));
43
- }
44
-
45
- function buildSyntheticCase(query, memories, options = {}) {
46
- return {
47
- query,
48
- memory: memories.map(memory => ({
49
- content: memory.content,
50
- source: memory.source,
51
- createdAt: memory.createdAt,
52
- private: memory.private,
53
- })),
54
- options,
55
- };
56
- }
57
-
58
- async function runBaselineRetrieval(system, syntheticCase, providerConfig, limit = 5) {
59
- switch (system) {
60
- case 'Vector Only':
61
- return runVectorOnlyBaseline(syntheticCase, providerConfig, limit);
62
- case 'Keyword + Recency':
63
- return runKeywordRecencyBaseline(syntheticCase, limit);
64
- case 'Recent Window':
65
- return runRecentWindowBaseline(syntheticCase, limit);
66
- default:
67
- throw new Error(`Unknown baseline system: ${system}`);
68
- }
69
- }
70
-
71
- function createOperationMemory(state, step) {
72
- const index = state.counter++;
73
- return {
74
- id: `memory-${index + 1}`,
75
- content: step.memory.content,
76
- source: step.memory.source,
77
- createdAt: step.memory.createdAt || new Date(Date.UTC(2026, 0, index + 1)).toISOString(),
78
- private: Boolean(step.memory.private),
79
- };
80
- }
81
-
82
- async function applyBaselineStep(system, state, step, providerConfig) {
83
- if (step.type === 'encode') {
84
- const memory = createOperationMemory(state, step);
85
- state.memories.push(memory);
86
- if (step.saveAs) {
87
- state.aliases.set(step.saveAs, memory.id);
88
- }
89
- return;
90
- }
91
-
92
- if (step.type === 'forgetByQuery') {
93
- const syntheticCase = buildSyntheticCase(step.query, state.memories, step.options);
94
- const [match] = await runBaselineRetrieval(system, syntheticCase, providerConfig, 1);
95
- if (match && Number.isFinite(match.score) && match.score > 0) {
96
- state.memories = state.memories.filter(memory => memory.id !== match.id);
97
- }
98
- return;
99
- }
100
-
101
- if (step.type === 'consolidate') {
102
- return;
103
- }
104
-
105
- throw new Error(`Unsupported baseline step: ${step.type}`);
106
- }
107
-
108
- export async function runBaselineScenario(system, benchmarkCase, providerConfig, limit = 5) {
109
- if (benchmarkCase.kind !== 'operations') {
110
- return runBaselineRetrieval(system, benchmarkCase, providerConfig, limit);
111
- }
112
-
113
- const state = {
114
- counter: 0,
115
- memories: [],
116
- aliases: new Map(),
117
- };
118
-
119
- for (const step of benchmarkCase.steps || []) {
120
- await applyBaselineStep(system, state, step, providerConfig);
121
- }
122
-
123
- return runBaselineRetrieval(
124
- system,
125
- buildSyntheticCase(benchmarkCase.query, state.memories, benchmarkCase.options),
126
- providerConfig,
127
- limit,
128
- );
129
- }
130
-
131
- export function runKeywordRecencyBaseline(benchmarkCase, limit = 5) {
132
- const queryTokens = tokenize(benchmarkCase.query);
133
- return sortByScore(
134
- flattenMemories(benchmarkCase).map(memory => ({
135
- ...memory,
136
- type: 'episodic',
137
- score: keywordScore(queryTokens, memory.content),
138
- })),
139
- ).slice(0, limit);
140
- }
141
-
142
- export function runRecentWindowBaseline(benchmarkCase, limit = 3) {
143
- return flattenMemories(benchmarkCase)
144
- .sort((a, b) => String(b.createdAt).localeCompare(String(a.createdAt)))
145
- .slice(0, limit)
146
- .map((memory, index) => ({
147
- ...memory,
148
- type: 'episodic',
149
- score: 1 - index * 0.1,
150
- }));
151
- }
152
-
153
- export async function runVectorOnlyBaseline(benchmarkCase, providerConfig, limit = 5) {
154
- const provider = createEmbeddingProvider(providerConfig);
155
- if (typeof provider.ready === 'function') {
156
- await provider.ready();
157
- }
158
-
159
- const queryVector = await provider.embed(benchmarkCase.query);
160
- const queryBuffer = provider.vectorToBuffer(queryVector);
161
-
162
- const rows = [];
163
- for (const memory of flattenMemories(benchmarkCase)) {
164
- const vector = await provider.embed(memory.content);
165
- const score = cosineSimilarity(queryBuffer, provider.vectorToBuffer(vector), provider);
166
- rows.push({
167
- ...memory,
168
- type: 'episodic',
169
- score,
170
- });
171
- }
172
-
173
- return sortByScore(rows).slice(0, limit);
174
- }