audrey 1.1.3 → 1.2.1

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 +97 -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 +54 -22
  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,222 +0,0 @@
1
- % Primary URL: https://arxiv.org/abs/2504.19413
2
- @misc{chhikara2025mem0,
3
- title = {Mem0: Building Production-Ready AI Agents with Scalable Long-Term Memory},
4
- author = {Chhikara, Prateek and Khant, Dev and Aryan, Saket and Singh, Taranjeet and Yadav, Deshraj},
5
- year = {2025},
6
- eprint = {2504.19413},
7
- archivePrefix = {arXiv},
8
- primaryClass = {cs.CL},
9
- url = {https://arxiv.org/abs/2504.19413}
10
- }
11
-
12
- % Primary URL: https://arxiv.org/abs/2310.08560
13
- @misc{packer2024memgpt,
14
- title = {MemGPT: Towards LLMs as Operating Systems},
15
- author = {Packer, Charles and Wooders, Sarah and Lin, Kevin and Fang, Vivian and Patil, Shishir G. and Stoica, Ion and Gonzalez, Joseph E.},
16
- year = {2024},
17
- eprint = {2310.08560},
18
- archivePrefix = {arXiv},
19
- primaryClass = {cs.AI},
20
- url = {https://arxiv.org/abs/2310.08560}
21
- }
22
-
23
- % Primary URL: https://arxiv.org/abs/2410.10813
24
- @misc{wu2025longmemeval,
25
- title = {LongMemEval: Benchmarking Chat Assistants on Long-Term Interactive Memory},
26
- author = {Wu, Di and Wang, Hongwei and Yu, Wenhao and Zhang, Yuwei and Chang, Kai-Wei and Yu, Dong},
27
- year = {2025},
28
- eprint = {2410.10813},
29
- archivePrefix = {arXiv},
30
- primaryClass = {cs.CL},
31
- url = {https://arxiv.org/abs/2410.10813}
32
- }
33
-
34
- % Primary URL: https://arxiv.org/abs/2402.17753
35
- @misc{maharana2024locomo,
36
- title = {Evaluating Very Long-Term Conversational Memory of LLM Agents},
37
- author = {Maharana, Adyasha and Lee, Dong-Ho and Tulyakov, Sergey and Bansal, Mohit and Barbieri, Francesco and Fang, Yuwei},
38
- year = {2024},
39
- eprint = {2402.17753},
40
- archivePrefix = {arXiv},
41
- primaryClass = {cs.CL},
42
- url = {https://arxiv.org/abs/2402.17753}
43
- }
44
-
45
- % Primary URL: https://arxiv.org/abs/2210.07316
46
- @misc{muennighoff2023mteb,
47
- title = {MTEB: Massive Text Embedding Benchmark},
48
- author = {Muennighoff, Niklas and Tazi, Nouamane and Magne, Loic and Reimers, Nils},
49
- year = {2023},
50
- eprint = {2210.07316},
51
- archivePrefix = {arXiv},
52
- primaryClass = {cs.CL},
53
- url = {https://arxiv.org/abs/2210.07316}
54
- }
55
-
56
- % Primary URL: https://arxiv.org/abs/2510.17281
57
- @misc{ai2026memorybench,
58
- title = {MemoryBench: A Benchmark for Memory and Continual Learning in LLM Systems},
59
- author = {Ai, Qingyao and Tang, Yichen and Wang, Changyue and Long, Jianming and Su, Weihang and Liu, Yiqun},
60
- year = {2026},
61
- eprint = {2510.17281},
62
- archivePrefix = {arXiv},
63
- primaryClass = {cs.LG},
64
- url = {https://arxiv.org/abs/2510.17281}
65
- }
66
-
67
- % Primary URL: https://arxiv.org/abs/2501.13956
68
- @misc{rasmussen2025zep,
69
- title = {Zep: A Temporal Knowledge Graph Architecture for Agent Memory},
70
- author = {Rasmussen, Preston and Paliychuk, Pavlo and Beauvais, Travis and Ryan, Jack and Chalef, Daniel},
71
- year = {2025},
72
- eprint = {2501.13956},
73
- archivePrefix = {arXiv},
74
- primaryClass = {cs.CL},
75
- url = {https://arxiv.org/abs/2501.13956}
76
- }
77
-
78
- % Primary URL: https://github.com/getzep/graphiti
79
- @misc{zep2026graphiti,
80
- title = {Graphiti: Build Real-Time Knowledge Graphs for AI Agents},
81
- author = {{Zep}},
82
- year = {2026},
83
- howpublished = {GitHub repository},
84
- url = {https://github.com/getzep/graphiti},
85
- note = {Accessed 2026-05-08}
86
- }
87
-
88
- % Primary URL: https://arxiv.org/abs/2507.03724
89
- @misc{li2025memos,
90
- title = {MemOS: A Memory OS for AI System},
91
- author = {Li, Zhiyu and Xi, Chenyang and Li, Chunyu and Chen, Ding and Chen, Boyu and Song, Shichao and Niu, Simin and Wang, Hanyu and Yang, Jiawei and Tang, Chen and Yu, Qingchen and Zhao, Jihao and Wang, Yezhaohui and Liu, Peng and Lin, Zehao and Wang, Pengyuan and Huo, Jiahao and Chen, Tianyi and Chen, Kai and Li, Kehang and Tao, Zhen and Lai, Huayi and Wu, Hao and Tang, Bo and Wang, Zhengren and Fan, Zhaoxin and Zhang, Ningyu and Zhang, Linfeng and Yan, Junchi and Yang, Mingchuan and Xu, Tong and Xu, Wei and Chen, Huajun and Wang, Haofen and Yang, Hongkang and Zhang, Wentao and Xu, Zhi-Qin John and Chen, Siheng and Xiong, Feiyu},
92
- year = {2025},
93
- eprint = {2507.03724},
94
- archivePrefix = {arXiv},
95
- primaryClass = {cs.CL},
96
- url = {https://arxiv.org/abs/2507.03724}
97
- }
98
-
99
- % Primary URL: https://langchain-ai.github.io/langmem/
100
- @misc{langchain2026langmem,
101
- title = {LangMem Documentation},
102
- author = {{LangChain}},
103
- year = {2026},
104
- howpublished = {Official documentation},
105
- url = {https://langchain-ai.github.io/langmem/},
106
- note = {Accessed 2026-05-08}
107
- }
108
-
109
- % Primary URL: https://github.com/langchain-ai/langmem
110
- @misc{langchain2026langmemrepo,
111
- title = {LangMem},
112
- author = {{LangChain}},
113
- year = {2026},
114
- howpublished = {GitHub repository},
115
- url = {https://github.com/langchain-ai/langmem},
116
- note = {Accessed 2026-05-08}
117
- }
118
-
119
- % Primary URL: https://supermemory.ai/docs
120
- @misc{supermemory2026docs,
121
- title = {supermemory Documentation: Memory API for the AI Era},
122
- author = {{Supermemory}},
123
- year = {2026},
124
- howpublished = {Official documentation},
125
- url = {https://supermemory.ai/docs},
126
- note = {Accessed 2026-05-08}
127
- }
128
-
129
- % Primary URL: https://github.com/supermemoryai/supermemory
130
- @misc{supermemory2026repo,
131
- title = {Supermemory: Memory Engine and App},
132
- author = {{Supermemory}},
133
- year = {2026},
134
- howpublished = {GitHub repository},
135
- url = {https://github.com/supermemoryai/supermemory},
136
- note = {Accessed 2026-05-08}
137
- }
138
-
139
- % Primary URL: https://arxiv.org/abs/2505.24478
140
- @misc{markovic2025cognee,
141
- title = {Optimizing the Interface Between Knowledge Graphs and LLMs for Complex Reasoning},
142
- author = {Markovic, Vasilije and Obradovic, Lazar and Hajdu, Laszlo and Pavlovic, Jovan},
143
- year = {2025},
144
- eprint = {2505.24478},
145
- archivePrefix = {arXiv},
146
- primaryClass = {cs.AI},
147
- url = {https://arxiv.org/abs/2505.24478}
148
- }
149
-
150
- % Primary URL: https://github.com/topoteretes/cognee
151
- @misc{cognee2026repo,
152
- title = {Cognee: Knowledge Engine for AI Agent Memory},
153
- author = {{Cognee}},
154
- year = {2026},
155
- howpublished = {GitHub repository},
156
- url = {https://github.com/topoteretes/cognee},
157
- note = {Accessed 2026-05-08}
158
- }
159
-
160
- % Primary URL: https://modelcontextprotocol.io/specification/2025-11-25/schema
161
- @misc{mcp2025schema,
162
- title = {Model Context Protocol Schema Reference, Protocol Revision 2025-11-25},
163
- author = {{Model Context Protocol}},
164
- year = {2025},
165
- howpublished = {Official specification},
166
- url = {https://modelcontextprotocol.io/specification/2025-11-25/schema},
167
- note = {Accessed 2026-05-08}
168
- }
169
-
170
- % Primary URL: https://arxiv.org/abs/2510.15994
171
- @misc{zhang2026mcpsecuritybench,
172
- title = {MCP Security Bench (MSB): Benchmarking Attacks Against Model Context Protocol in LLM Agents},
173
- author = {Zhang, Dongsen and Li, Zekun and Luo, Xu and Liu, Xuannan and Li, Peipei and Xu, Wenjun},
174
- year = {2026},
175
- eprint = {2510.15994},
176
- archivePrefix = {arXiv},
177
- primaryClass = {cs.CR},
178
- url = {https://arxiv.org/abs/2510.15994}
179
- }
180
-
181
- % Primary URL: https://arxiv.org/abs/2512.06556
182
- @misc{jamshidi2025toolpoisoning,
183
- title = {Securing the Model Context Protocol: Defending LLMs Against Tool Poisoning and Adversarial Attacks},
184
- author = {Jamshidi, Saeid and Nafi, Kawser Wazed and Dakhel, Arghavan Moradi and Shahabi, Negar and Khomh, Foutse and Ezzati-Jivan, Naser},
185
- year = {2025},
186
- eprint = {2512.06556},
187
- archivePrefix = {arXiv},
188
- primaryClass = {cs.CR},
189
- url = {https://arxiv.org/abs/2512.06556}
190
- }
191
-
192
- % Primary URL: https://blog.modelcontextprotocol.io/posts/2026-03-16-tool-annotations/
193
- @misc{mcp2026toolannotations,
194
- title = {Tool Annotations as Risk Vocabulary: What Hints Can and Can't Do},
195
- author = {Hungerford, Ola and Morrow, Sam and Chang, Luca},
196
- year = {2026},
197
- month = {March},
198
- howpublished = {Model Context Protocol Blog},
199
- url = {https://blog.modelcontextprotocol.io/posts/2026-03-16-tool-annotations/},
200
- note = {Accessed 2026-05-08}
201
- }
202
-
203
- % Primary URL: https://code.claude.com/docs/en/hooks
204
- @misc{anthropic2026claudecodehooks,
205
- title = {Claude Code Hooks Reference},
206
- author = {{Anthropic}},
207
- year = {2026},
208
- howpublished = {Official documentation},
209
- url = {https://code.claude.com/docs/en/hooks},
210
- note = {Accessed 2026-05-08}
211
- }
212
-
213
- % Primary URL: https://mem0.ai/blog/mem0-the-token-efficient-memory-algorithm
214
- @misc{mem02026tokenefficient,
215
- title = {Introducing The Token-Efficient Memory Algorithm},
216
- author = {Yadav, Deshraj},
217
- year = {2026},
218
- month = {April},
219
- howpublished = {Mem0 Blog},
220
- url = {https://mem0.ai/blog/mem0-the-token-efficient-memory-algorithm},
221
- note = {Accessed 2026-05-08}
222
- }
@@ -1,440 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- import { spawnSync } from 'node:child_process';
4
- import { createHash } from 'node:crypto';
5
- import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
6
- import { dirname, resolve } from 'node:path';
7
- import { fileURLToPath } from 'node:url';
8
- import { verifyExternalGuardBenchEvidence } from '../benchmarks/verify-external-evidence.mjs';
9
- import { verifyBrowserLaunchResults } from './verify-browser-launch-results.mjs';
10
- import { verifyReleaseReadiness } from './verify-release-readiness.mjs';
11
-
12
- const ROOT = process.cwd();
13
- const DEFAULT_VERSION = '1.1.1';
14
- const DEFAULT_OUT = '.tmp/release-artifacts/completion-audit.json';
15
- const NPM_REGISTRY = 'https://registry.npmjs.org/';
16
-
17
- function fromRoot(path) {
18
- return resolve(ROOT, path);
19
- }
20
-
21
- function readText(path) {
22
- return readFileSync(fromRoot(path), 'utf-8');
23
- }
24
-
25
- function readJson(path) {
26
- return JSON.parse(readText(path).replace(/^\uFEFF/, ''));
27
- }
28
-
29
- function parseArgs(argv = process.argv.slice(2)) {
30
- const args = {
31
- version: DEFAULT_VERSION,
32
- out: DEFAULT_OUT,
33
- json: false,
34
- };
35
-
36
- for (let i = 0; i < argv.length; i++) {
37
- const token = argv[i];
38
- if ((token === '--version' || token === '--target-version') && argv[i + 1])
39
- args.version = argv[++i];
40
- else if (token === '--out' && argv[i + 1]) args.out = argv[++i];
41
- else if (token === '--json') args.json = true;
42
- else if (token === '--help' || token === '-h') args.help = true;
43
- else throw new Error(`Unknown argument: ${token}`);
44
- }
45
-
46
- return args;
47
- }
48
-
49
- function usage() {
50
- return `Usage: node scripts/audit-release-completion.mjs [options]
51
-
52
- Options:
53
- --version <version> Target release version. Default: ${DEFAULT_VERSION}.
54
- --out <path> Output JSON report. Default: ${DEFAULT_OUT}.
55
- --json Print the full machine-readable report.
56
- `;
57
- }
58
-
59
- function commandFor(command, args) {
60
- if (process.platform === 'win32' && command === 'npm') {
61
- return { command: process.env.ComSpec ?? 'cmd.exe', args: ['/d', '/c', 'npm', ...args] };
62
- }
63
- return { command, args };
64
- }
65
-
66
- function run(command, args, options = {}) {
67
- const prepared = commandFor(command, args);
68
- const result = spawnSync(prepared.command, prepared.args, {
69
- cwd: ROOT,
70
- encoding: 'utf-8',
71
- timeout: options.timeout ?? 120_000,
72
- env: process.env,
73
- });
74
- return {
75
- command: [command, ...args].join(' '),
76
- ok: result.status === 0,
77
- status: result.status,
78
- stdout: result.stdout?.trim() ?? '',
79
- stderr: result.stderr?.trim() ?? '',
80
- error: result.error?.message ?? null,
81
- };
82
- }
83
-
84
- function sha256(path) {
85
- return createHash('sha256')
86
- .update(readFileSync(fromRoot(path)))
87
- .digest('hex');
88
- }
89
-
90
- function artifactEvidence(path) {
91
- if (!existsSync(fromRoot(path))) return { path, exists: false };
92
- return {
93
- path,
94
- exists: true,
95
- sha256: sha256(path),
96
- bytes: readFileSync(fromRoot(path)).byteLength,
97
- };
98
- }
99
-
100
- function checklistItem(id, requirement, status, evidence = [], gaps = []) {
101
- return { id, requirement, status, evidence, gaps };
102
- }
103
-
104
- function statusFromGaps(gaps, passed = true) {
105
- if (!passed) return 'failed';
106
- return gaps.length ? 'pending' : 'passed';
107
- }
108
-
109
- function commandEvidence(result) {
110
- const firstLine = `${result.stderr}\n${result.stdout}`
111
- .split(/\r?\n/)
112
- .map(line => line.trim())
113
- .find(Boolean);
114
- return `${result.command}: ${result.ok ? 'ok' : `exit ${result.status ?? 'unknown'}`}${firstLine ? ` (${firstLine})` : ''}`;
115
- }
116
-
117
- function extractRemoteRefs(output) {
118
- const refs = new Map();
119
- for (const line of output.split(/\r?\n/)) {
120
- const [sha, ref] = line.trim().split(/\s+/);
121
- if (sha && ref) refs.set(ref, sha);
122
- }
123
- return refs;
124
- }
125
-
126
- function latestGitObjectReport() {
127
- const path = '.tmp/release-git-object-report.json';
128
- return existsSync(fromRoot(path)) ? readJson(path) : null;
129
- }
130
-
131
- async function checkPypi(version) {
132
- try {
133
- const response = await fetch(`https://pypi.org/pypi/audrey-memory/${version}/json`);
134
- return { ok: response.ok, status: response.status };
135
- } catch (error) {
136
- return { ok: false, status: 'network-error', error: error.message };
137
- }
138
- }
139
-
140
- function localPathSweep(paths) {
141
- const failures = [];
142
- const localPathPattern = /(^|[^a-z])[A-Z]:\\|\\\\\?\\|file:\/\//i;
143
- for (const path of paths) {
144
- const absolute = fromRoot(path);
145
- if (!existsSync(absolute)) continue;
146
- const scan = run(
147
- 'rg',
148
- ['-n', '-F', '-e', 'B:\\Projects', '-e', 'C:\\Users', '-e', '\\\\?\\', '-e', 'file://', path],
149
- { timeout: 30_000 },
150
- );
151
- if (scan.status === 0) failures.push(`${path}: local path match found`);
152
- if (scan.status !== 0 && scan.status !== 1)
153
- failures.push(`${path}: local path sweep failed (${scan.stderr || scan.stdout})`);
154
- if (scan.stdout && localPathPattern.test(scan.stdout))
155
- failures.push(`${path}: local path sweep output contains local path`);
156
- }
157
- return failures;
158
- }
159
-
160
- export async function auditReleaseCompletion(options = {}) {
161
- const version = options.version ?? DEFAULT_VERSION;
162
- const out = options.out ?? DEFAULT_OUT;
163
- const pkg = readJson('package.json');
164
- const readiness = await verifyReleaseReadiness({ targetVersion: version, allowPending: true });
165
- const strictReadiness = await verifyReleaseReadiness({
166
- targetVersion: version,
167
- allowPending: false,
168
- });
169
- const browserResults = await verifyBrowserLaunchResults();
170
- const externalEvidence = await verifyExternalGuardBenchEvidence({
171
- allowPending: true,
172
- write: false,
173
- });
174
- const paperVerify = run('node', ['scripts/verify-paper-artifacts.mjs'], { timeout: 180_000 });
175
- const paperBundleVerify = run('node', ['scripts/verify-paper-submission-bundle.mjs'], {
176
- timeout: 120_000,
177
- });
178
- const audit = run('npm', ['audit', '--omit=dev', '--audit-level=moderate'], { timeout: 120_000 });
179
- const diffCheck = run('git', ['diff', '--check'], { timeout: 60_000 });
180
- const bundleVerify = run(
181
- 'git',
182
- ['bundle', 'verify', `.tmp/release-artifacts/audrey-${version}.git.bundle`],
183
- { timeout: 60_000 },
184
- );
185
- const remoteRefsResult = run(
186
- 'git',
187
- [
188
- '-c',
189
- 'http.sslBackend=openssl',
190
- 'ls-remote',
191
- 'origin',
192
- 'refs/heads/master',
193
- `refs/tags/v${version}`,
194
- ],
195
- { timeout: 60_000 },
196
- );
197
- const npmView = run('npm', ['view', `audrey@${version}`, 'version', '--registry', NPM_REGISTRY], {
198
- timeout: 60_000,
199
- });
200
- const pypi = await checkPypi(version);
201
- const gitObjects = latestGitObjectReport();
202
- const remoteRefs = extractRemoteRefs(remoteRefsResult.stdout);
203
- const artifactReport = existsSync(fromRoot('.tmp/release-artifacts/release-finalize-report.json'))
204
- ? readJson('.tmp/release-artifacts/release-finalize-report.json')
205
- : null;
206
- const localPathFailures = localPathSweep(['docs/paper/output', 'benchmarks/output']);
207
-
208
- const checklist = [];
209
- const versionGaps = [];
210
- if (pkg.version !== version)
211
- versionGaps.push(`package.json is ${pkg.version}, expected ${version}`);
212
- if (!readiness.ok)
213
- versionGaps.push(...readiness.failures.map(failure => `readiness failure: ${failure}`));
214
- checklist.push(
215
- checklistItem(
216
- 'code-release-local-readiness',
217
- `Audrey codebase is cut to ${version} and local release gates are coherent.`,
218
- statusFromGaps(versionGaps, readiness.ok),
219
- [
220
- `package.json version=${pkg.version}`,
221
- `readiness ok=${readiness.ok}`,
222
- `strict readiness ok=${strictReadiness.ok}`,
223
- `pending blockers=${readiness.blockers.length}`,
224
- ],
225
- versionGaps,
226
- ),
227
- );
228
-
229
- const sourceGaps = [];
230
- const remoteMaster = remoteRefs.get('refs/heads/master');
231
- const remoteTag =
232
- remoteRefs.get(`refs/tags/v${version}`) ?? remoteRefs.get(`refs/tags/v${version}^{}`);
233
- if (!bundleVerify.ok) sourceGaps.push('release Git bundle does not verify');
234
- if (!gitObjects?.commit) sourceGaps.push('missing external release commit object report');
235
- if (gitObjects?.commit && remoteMaster !== gitObjects.commit) {
236
- sourceGaps.push(
237
- `remote master is ${remoteMaster ?? 'missing'}, not release commit ${gitObjects.commit}`,
238
- );
239
- }
240
- if (!remoteTag) sourceGaps.push(`remote tag v${version} is missing`);
241
- checklist.push(
242
- checklistItem(
243
- 'source-control-release-state',
244
- `Final release commit and v${version} tag are present on the public repository.`,
245
- statusFromGaps(sourceGaps, bundleVerify.ok && remoteRefsResult.ok),
246
- [
247
- commandEvidence(bundleVerify),
248
- `external commit=${gitObjects?.commit ?? 'missing'}`,
249
- `external tag object=${gitObjects?.tag ?? 'missing'}`,
250
- `remote master=${remoteMaster ?? 'missing'}`,
251
- `remote tag=${remoteTag ?? 'missing'}`,
252
- ],
253
- sourceGaps,
254
- ),
255
- );
256
-
257
- const npmArtifact = artifactEvidence(`.tmp/release-artifacts/audrey-${version}.tgz`);
258
- const npmGaps = [];
259
- if (!npmArtifact.exists) npmGaps.push('npm tarball missing');
260
- if (!npmView.ok)
261
- npmGaps.push(`audrey@${version} is not published on npm or npm registry check failed`);
262
- checklist.push(
263
- checklistItem(
264
- 'npm-package-publication',
265
- `audrey@${version} npm package is packaged and published.`,
266
- statusFromGaps(npmGaps),
267
- [JSON.stringify(npmArtifact), commandEvidence(npmView)],
268
- npmGaps,
269
- ),
270
- );
271
-
272
- const wheel = artifactEvidence(`python/dist/audrey_memory-${version}-py3-none-any.whl`);
273
- const sdist = artifactEvidence(`python/dist/audrey_memory-${version}.tar.gz`);
274
- const pypiGaps = [];
275
- if (!wheel.exists) pypiGaps.push('Python wheel missing');
276
- if (!sdist.exists) pypiGaps.push('Python sdist missing');
277
- if (!pypi.ok)
278
- pypiGaps.push(`audrey-memory ${version} is not published on PyPI (status=${pypi.status})`);
279
- checklist.push(
280
- checklistItem(
281
- 'python-package-publication',
282
- `audrey-memory ${version} Python package is built and published.`,
283
- statusFromGaps(pypiGaps),
284
- [JSON.stringify(wheel), JSON.stringify(sdist), `PyPI status=${pypi.status}`],
285
- pypiGaps,
286
- ),
287
- );
288
-
289
- const paperGaps = [];
290
- if (!paperVerify.ok) paperGaps.push('paper artifact verifier failed');
291
- if (!paperBundleVerify.ok) paperGaps.push('paper submission bundle verifier failed');
292
- checklist.push(
293
- checklistItem(
294
- 'paper-local-quality',
295
- 'Research paper, claim register, bibliography, evidence ledger, arXiv source, and submission bundle verify locally.',
296
- statusFromGaps(paperGaps, paperVerify.ok && paperBundleVerify.ok),
297
- [commandEvidence(paperVerify), commandEvidence(paperBundleVerify)],
298
- paperGaps,
299
- ),
300
- );
301
-
302
- const publicationGaps = [];
303
- if (!browserResults.ok) publicationGaps.push(...browserResults.failures);
304
- if (!browserResults.ready) publicationGaps.push(...browserResults.blockers);
305
- checklist.push(
306
- checklistItem(
307
- 'paper-publication',
308
- 'Paper is publicly submitted/published across the launch targets recorded by the browser launch ledger.',
309
- statusFromGaps(publicationGaps, browserResults.ok),
310
- [
311
- `browser results ok=${browserResults.ok}`,
312
- `browser results ready=${browserResults.ready}`,
313
- `submitted=${browserResults.targets.filter(target => target.status === 'submitted').length}/${browserResults.targets.length}`,
314
- ],
315
- publicationGaps,
316
- ),
317
- );
318
-
319
- const guardGaps = [];
320
- if (!externalEvidence.ok) guardGaps.push(...externalEvidence.failures);
321
- for (const adapter of externalEvidence.adapters.filter(
322
- adapter => adapter.status !== 'verified',
323
- )) {
324
- guardGaps.push(
325
- `${adapter.id}: ${adapter.missingEnv?.length ? `missing ${adapter.missingEnv.join(', ')}` : adapter.evidenceKind}`,
326
- );
327
- }
328
- checklist.push(
329
- checklistItem(
330
- 'external-guardbench-evidence',
331
- 'External GuardBench adapters are live-verified, not only dry-run verified.',
332
- statusFromGaps(guardGaps, externalEvidence.ok),
333
- externalEvidence.adapters.map(
334
- adapter => `${adapter.id}: ${adapter.status}/${adapter.evidenceKind}`,
335
- ),
336
- guardGaps,
337
- ),
338
- );
339
-
340
- const safetyGaps = [];
341
- if (!audit.ok) safetyGaps.push('production dependency audit failed');
342
- if (!diffCheck.ok) safetyGaps.push('git diff --check failed');
343
- safetyGaps.push(...localPathFailures);
344
- checklist.push(
345
- checklistItem(
346
- 'release-safety-hygiene',
347
- 'Release artifacts pass dependency audit, whitespace checks, and local-path leak sweeps.',
348
- statusFromGaps(safetyGaps, audit.ok && diffCheck.ok),
349
- [
350
- commandEvidence(audit),
351
- commandEvidence(diffCheck),
352
- `local path sweep failures=${localPathFailures.length}`,
353
- ],
354
- safetyGaps,
355
- ),
356
- );
357
-
358
- const finalizerGaps = [];
359
- if (!artifactReport) finalizerGaps.push('missing release-finalize-report.json');
360
- checklist.push(
361
- checklistItem(
362
- 'release-finalizer-artifacts',
363
- 'Finalization report records packaged npm/Python artifacts and source-control handoff artifacts.',
364
- statusFromGaps(finalizerGaps),
365
- artifactReport?.artifacts?.map(artifact => `${artifact.path} sha256=${artifact.sha256}`) ??
366
- [],
367
- finalizerGaps,
368
- ),
369
- );
370
-
371
- const complete = checklist.every(item => item.status === 'passed');
372
- const report = {
373
- schemaVersion: '1.0.0',
374
- suite: 'Audrey release completion audit',
375
- generatedAt: new Date().toISOString(),
376
- objective: `audrey ${version} release + published audrey research paper`,
377
- successCriteria: [
378
- `Audrey code is cut to ${version} with local gates passing.`,
379
- `Final release commit and v${version} tag are on the public repository.`,
380
- 'npm and Python packages are packaged and publicly published.',
381
- 'Paper artifacts verify locally and compile for arXiv.',
382
- 'Paper publication targets are publicly submitted and operator verified.',
383
- 'GuardBench local and external evidence is verified without leaked secrets or local paths.',
384
- ],
385
- complete,
386
- checklist,
387
- readiness: {
388
- ok: readiness.ok,
389
- ready: readiness.ready,
390
- blockers: readiness.blockers,
391
- failures: readiness.failures,
392
- },
393
- strictReadiness: {
394
- ok: strictReadiness.ok,
395
- ready: strictReadiness.ready,
396
- blockers: strictReadiness.blockers,
397
- failures: strictReadiness.failures,
398
- },
399
- };
400
-
401
- mkdirSync(dirname(fromRoot(out)), { recursive: true });
402
- writeFileSync(fromRoot(out), `${JSON.stringify(report, null, 2)}\n`, 'utf-8');
403
- return report;
404
- }
405
-
406
- async function main() {
407
- const args = parseArgs();
408
- if (args.help) {
409
- console.log(usage());
410
- return;
411
- }
412
-
413
- const report = await auditReleaseCompletion(args);
414
- if (args.json) {
415
- console.log(JSON.stringify(report, null, 2));
416
- } else {
417
- console.log(`Audrey release completion audit: complete=${report.complete}`);
418
- for (const item of report.checklist) {
419
- console.log(
420
- `- ${item.id}: ${item.status}${item.gaps.length ? ` (${item.gaps.length} gap(s))` : ''}`,
421
- );
422
- }
423
- }
424
-
425
- if (!report.complete) process.exit(1);
426
- }
427
-
428
- function isDirectRun() {
429
- return (
430
- Boolean(process.argv[1]) &&
431
- resolve(process.argv[1]).toLowerCase() === fileURLToPath(import.meta.url).toLowerCase()
432
- );
433
- }
434
-
435
- if (isDirectRun()) {
436
- main().catch(error => {
437
- console.error(error.stack ?? error.message);
438
- process.exit(1);
439
- });
440
- }