audrey 0.21.0 → 1.0.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.
- package/CHANGELOG.md +238 -0
- package/LICENSE +21 -21
- package/README.md +281 -33
- package/SECURITY.md +30 -0
- package/benchmarks/adapter-kit.mjs +20 -0
- package/benchmarks/adapter-self-test.mjs +166 -0
- package/benchmarks/adapters/example-allow.mjs +28 -0
- package/benchmarks/adapters/mem0-platform.mjs +267 -0
- package/benchmarks/adapters/registry.json +51 -0
- package/benchmarks/adapters/zep-cloud.mjs +280 -0
- package/benchmarks/baselines.js +169 -0
- package/benchmarks/build-leaderboard.mjs +170 -0
- package/benchmarks/cases.js +537 -0
- package/benchmarks/create-conformance-card.mjs +139 -0
- package/benchmarks/create-submission-bundle.mjs +176 -0
- package/benchmarks/dry-run-external-adapters.mjs +165 -0
- package/benchmarks/guardbench.js +1035 -0
- package/benchmarks/output/adapter-self-test/guardbench-adapter-self-test.json +50 -0
- package/benchmarks/output/external/guardbench-external-dry-run.json +69 -0
- package/benchmarks/output/external/guardbench-external-evidence.json +56 -0
- package/benchmarks/output/guardbench-conformance-card.json +63 -0
- package/benchmarks/output/guardbench-manifest.json +414 -0
- package/benchmarks/output/guardbench-raw.json +1171 -0
- package/benchmarks/output/guardbench-summary.json +1981 -0
- package/benchmarks/output/leaderboard/guardbench-leaderboard.json +93 -0
- package/benchmarks/output/leaderboard/guardbench-leaderboard.md +7 -0
- package/benchmarks/output/submission-bundle/guardbench-conformance-card.json +63 -0
- package/benchmarks/output/submission-bundle/guardbench-manifest.json +414 -0
- package/benchmarks/output/submission-bundle/guardbench-raw.json +1171 -0
- package/benchmarks/output/submission-bundle/guardbench-summary.json +1981 -0
- package/benchmarks/output/submission-bundle/schemas/guardbench-adapter-registry.schema.json +69 -0
- package/benchmarks/output/submission-bundle/schemas/guardbench-adapter-self-test.schema.json +156 -0
- package/benchmarks/output/submission-bundle/schemas/guardbench-conformance-card.schema.json +184 -0
- package/benchmarks/output/submission-bundle/schemas/guardbench-external-dry-run.schema.json +74 -0
- package/benchmarks/output/submission-bundle/schemas/guardbench-external-evidence.schema.json +108 -0
- package/benchmarks/output/submission-bundle/schemas/guardbench-external-run.schema.json +160 -0
- package/benchmarks/output/submission-bundle/schemas/guardbench-leaderboard.schema.json +179 -0
- package/benchmarks/output/submission-bundle/schemas/guardbench-manifest.schema.json +213 -0
- package/benchmarks/output/submission-bundle/schemas/guardbench-publication-verification.schema.json +47 -0
- package/benchmarks/output/submission-bundle/schemas/guardbench-raw.schema.json +164 -0
- package/benchmarks/output/submission-bundle/schemas/guardbench-submission-manifest.schema.json +151 -0
- package/benchmarks/output/submission-bundle/schemas/guardbench-summary.schema.json +228 -0
- package/benchmarks/output/submission-bundle/submission-manifest.json +131 -0
- package/benchmarks/output/submission-bundle/validation-report.json +31 -0
- package/benchmarks/output/summary.json +2354 -0
- package/benchmarks/perf-snapshot.js +304 -0
- package/benchmarks/perf.bench.js +161 -0
- package/benchmarks/public-paths.mjs +78 -0
- package/benchmarks/reference-results.js +70 -0
- package/benchmarks/report.js +259 -0
- package/benchmarks/run-external-guardbench.mjs +281 -0
- package/benchmarks/run.js +682 -0
- package/benchmarks/schemas/guardbench-adapter-registry.schema.json +69 -0
- package/benchmarks/schemas/guardbench-adapter-self-test.schema.json +156 -0
- package/benchmarks/schemas/guardbench-conformance-card.schema.json +184 -0
- package/benchmarks/schemas/guardbench-external-dry-run.schema.json +74 -0
- package/benchmarks/schemas/guardbench-external-evidence.schema.json +108 -0
- package/benchmarks/schemas/guardbench-external-run.schema.json +160 -0
- package/benchmarks/schemas/guardbench-leaderboard.schema.json +179 -0
- package/benchmarks/schemas/guardbench-manifest.schema.json +213 -0
- package/benchmarks/schemas/guardbench-publication-verification.schema.json +47 -0
- package/benchmarks/schemas/guardbench-raw.schema.json +164 -0
- package/benchmarks/schemas/guardbench-submission-manifest.schema.json +151 -0
- package/benchmarks/schemas/guardbench-summary.schema.json +228 -0
- package/benchmarks/snapshots/perf-0.22.2.json +123 -0
- package/benchmarks/snapshots/perf-0.23.0.json +123 -0
- package/benchmarks/validate-adapter-module.mjs +104 -0
- package/benchmarks/validate-adapter-registry.mjs +134 -0
- package/benchmarks/validate-adapter-self-test.mjs +96 -0
- package/benchmarks/validate-guardbench-artifacts.mjs +343 -0
- package/benchmarks/verify-external-evidence.mjs +296 -0
- package/benchmarks/verify-publication-artifacts.mjs +286 -0
- package/benchmarks/verify-submission-bundle.mjs +167 -0
- package/dist/mcp-server/config.d.ts +5 -4
- package/dist/mcp-server/config.d.ts.map +1 -1
- package/dist/mcp-server/config.js +6 -8
- package/dist/mcp-server/config.js.map +1 -1
- package/dist/mcp-server/index.d.ts +281 -23
- package/dist/mcp-server/index.d.ts.map +1 -1
- package/dist/mcp-server/index.js +1186 -82
- package/dist/mcp-server/index.js.map +1 -1
- package/dist/src/action-key.d.ts +9 -0
- package/dist/src/action-key.d.ts.map +1 -0
- package/dist/src/action-key.js +49 -0
- package/dist/src/action-key.js.map +1 -0
- package/dist/src/adaptive.d.ts.map +1 -1
- package/dist/src/adaptive.js +8 -6
- package/dist/src/adaptive.js.map +1 -1
- package/dist/src/affect.d.ts +4 -1
- package/dist/src/affect.d.ts.map +1 -1
- package/dist/src/affect.js +14 -12
- package/dist/src/affect.js.map +1 -1
- package/dist/src/audrey.d.ts +57 -4
- package/dist/src/audrey.d.ts.map +1 -1
- package/dist/src/audrey.js +512 -65
- package/dist/src/audrey.js.map +1 -1
- package/dist/src/capsule.d.ts +2 -1
- package/dist/src/capsule.d.ts.map +1 -1
- package/dist/src/capsule.js +18 -8
- package/dist/src/capsule.js.map +1 -1
- package/dist/src/causal.d.ts.map +1 -1
- package/dist/src/causal.js +23 -5
- package/dist/src/causal.js.map +1 -1
- package/dist/src/confidence.d.ts.map +1 -1
- package/dist/src/confidence.js +3 -0
- package/dist/src/confidence.js.map +1 -1
- package/dist/src/consolidate.d.ts +1 -0
- package/dist/src/consolidate.d.ts.map +1 -1
- package/dist/src/consolidate.js +70 -54
- package/dist/src/consolidate.js.map +1 -1
- package/dist/src/controller.d.ts +94 -0
- package/dist/src/controller.d.ts.map +1 -0
- package/dist/src/controller.js +350 -0
- package/dist/src/controller.js.map +1 -0
- package/dist/src/db.d.ts.map +1 -1
- package/dist/src/db.js +181 -169
- package/dist/src/db.js.map +1 -1
- package/dist/src/decay.d.ts.map +1 -1
- package/dist/src/decay.js +62 -55
- package/dist/src/decay.js.map +1 -1
- package/dist/src/embedding.d.ts +2 -1
- package/dist/src/embedding.d.ts.map +1 -1
- package/dist/src/embedding.js +60 -22
- package/dist/src/embedding.js.map +1 -1
- package/dist/src/encode.d.ts +9 -2
- package/dist/src/encode.d.ts.map +1 -1
- package/dist/src/encode.js +25 -12
- package/dist/src/encode.js.map +1 -1
- package/dist/src/export.d.ts.map +1 -1
- package/dist/src/export.js +5 -3
- package/dist/src/export.js.map +1 -1
- package/dist/src/feedback.d.ts +35 -0
- package/dist/src/feedback.d.ts.map +1 -0
- package/dist/src/feedback.js +129 -0
- package/dist/src/feedback.js.map +1 -0
- package/dist/src/forget.d.ts.map +1 -1
- package/dist/src/forget.js +68 -60
- package/dist/src/forget.js.map +1 -1
- package/dist/src/fts.js +1 -1
- package/dist/src/fts.js.map +1 -1
- package/dist/src/hybrid-recall.d.ts +2 -1
- package/dist/src/hybrid-recall.d.ts.map +1 -1
- package/dist/src/hybrid-recall.js +41 -32
- package/dist/src/hybrid-recall.js.map +1 -1
- package/dist/src/impact.d.ts +47 -0
- package/dist/src/impact.d.ts.map +1 -0
- package/dist/src/impact.js +146 -0
- package/dist/src/impact.js.map +1 -0
- package/dist/src/import.d.ts +177 -1
- package/dist/src/import.d.ts.map +1 -1
- package/dist/src/import.js +235 -46
- package/dist/src/import.js.map +1 -1
- package/dist/src/index.d.ts +5 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +3 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/interference.d.ts +5 -2
- package/dist/src/interference.d.ts.map +1 -1
- package/dist/src/interference.js +39 -32
- package/dist/src/interference.js.map +1 -1
- package/dist/src/introspect.js +18 -18
- package/dist/src/llm.d.ts.map +1 -1
- package/dist/src/llm.js +1 -0
- package/dist/src/llm.js.map +1 -1
- package/dist/src/migrate.d.ts.map +1 -1
- package/dist/src/migrate.js +21 -9
- package/dist/src/migrate.js.map +1 -1
- package/dist/src/preflight.d.ts +2 -1
- package/dist/src/preflight.d.ts.map +1 -1
- package/dist/src/preflight.js +66 -5
- package/dist/src/preflight.js.map +1 -1
- package/dist/src/profile.d.ts +23 -0
- package/dist/src/profile.d.ts.map +1 -0
- package/dist/src/profile.js +51 -0
- package/dist/src/profile.js.map +1 -0
- package/dist/src/promote.d.ts.map +1 -1
- package/dist/src/promote.js +8 -9
- package/dist/src/promote.js.map +1 -1
- package/dist/src/prompts.d.ts.map +1 -1
- package/dist/src/prompts.js +165 -136
- package/dist/src/prompts.js.map +1 -1
- package/dist/src/recall.d.ts +9 -6
- package/dist/src/recall.d.ts.map +1 -1
- package/dist/src/recall.js +204 -62
- package/dist/src/recall.js.map +1 -1
- package/dist/src/redact.d.ts +7 -1
- package/dist/src/redact.d.ts.map +1 -1
- package/dist/src/redact.js +94 -11
- package/dist/src/redact.js.map +1 -1
- package/dist/src/reflexes.d.ts +1 -0
- package/dist/src/reflexes.d.ts.map +1 -1
- package/dist/src/reflexes.js +3 -0
- package/dist/src/reflexes.js.map +1 -1
- package/dist/src/rollback.d.ts.map +1 -1
- package/dist/src/rollback.js +13 -8
- package/dist/src/rollback.js.map +1 -1
- package/dist/src/routes.d.ts +1 -0
- package/dist/src/routes.d.ts.map +1 -1
- package/dist/src/routes.js +251 -6
- package/dist/src/routes.js.map +1 -1
- package/dist/src/rules-compiler.d.ts.map +1 -1
- package/dist/src/rules-compiler.js +36 -6
- package/dist/src/rules-compiler.js.map +1 -1
- package/dist/src/server.d.ts +2 -1
- package/dist/src/server.d.ts.map +1 -1
- package/dist/src/server.js +42 -4
- package/dist/src/server.js.map +1 -1
- package/dist/src/tool-trace.d.ts.map +1 -1
- package/dist/src/tool-trace.js +42 -29
- package/dist/src/tool-trace.js.map +1 -1
- package/dist/src/types.d.ts +28 -1
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/ulid.d.ts.map +1 -1
- package/dist/src/ulid.js +52 -2
- package/dist/src/ulid.js.map +1 -1
- package/dist/src/utils.d.ts.map +1 -1
- package/dist/src/utils.js +8 -1
- package/dist/src/utils.js.map +1 -1
- package/dist/src/validate.d.ts +2 -0
- package/dist/src/validate.d.ts.map +1 -1
- package/dist/src/validate.js +77 -46
- package/dist/src/validate.js.map +1 -1
- package/docs/AUDREY_PAPER_OUTLINE.md +175 -0
- package/docs/MEMORY_BENCHMARKING.md +59 -0
- package/docs/PRODUCTION_BACKLOG.md +304 -0
- package/docs/paper/00-master.md +48 -0
- package/docs/paper/01-introduction.md +27 -0
- package/docs/paper/02-related-work.md +47 -0
- package/docs/paper/03-problem-definition.md +108 -0
- package/docs/paper/04-design.md +164 -0
- package/docs/paper/05-guardbench-spec.md +412 -0
- package/docs/paper/06-implementation.md +113 -0
- package/docs/paper/07-evaluation.md +168 -0
- package/docs/paper/08-discussion-limitations.md +61 -0
- package/docs/paper/09-conclusion.md +11 -0
- package/docs/paper/SUBMISSION_README.md +162 -0
- package/docs/paper/appendix-a-demo-transcript.md +114 -0
- package/docs/paper/arxiv-compile-report.schema.json +116 -0
- package/docs/paper/arxiv-source.schema.json +61 -0
- package/docs/paper/audrey-paper-v1.md +1106 -0
- package/docs/paper/browser-launch-plan.json +209 -0
- package/docs/paper/browser-launch-plan.schema.json +100 -0
- package/docs/paper/browser-launch-results.json +86 -0
- package/docs/paper/browser-launch-results.schema.json +66 -0
- package/docs/paper/claim-register.json +138 -0
- package/docs/paper/claim-register.schema.json +81 -0
- package/docs/paper/evidence-ledger.md +103 -0
- package/docs/paper/output/arxiv/README-arxiv.txt +8 -0
- package/docs/paper/output/arxiv/arxiv-manifest.json +41 -0
- package/docs/paper/output/arxiv/main.tex +949 -0
- package/docs/paper/output/arxiv/references.bib +222 -0
- package/docs/paper/output/arxiv-compile-report.json +24 -0
- package/docs/paper/output/submission-bundle/LICENSE +21 -0
- package/docs/paper/output/submission-bundle/README.md +533 -0
- package/docs/paper/output/submission-bundle/benchmarks/output/adapter-self-test/guardbench-adapter-self-test.json +50 -0
- package/docs/paper/output/submission-bundle/benchmarks/output/external/guardbench-external-dry-run.json +69 -0
- package/docs/paper/output/submission-bundle/benchmarks/output/external/guardbench-external-evidence.json +56 -0
- package/docs/paper/output/submission-bundle/benchmarks/output/guardbench-conformance-card.json +63 -0
- package/docs/paper/output/submission-bundle/benchmarks/output/guardbench-manifest.json +414 -0
- package/docs/paper/output/submission-bundle/benchmarks/output/guardbench-raw.json +1171 -0
- package/docs/paper/output/submission-bundle/benchmarks/output/guardbench-summary.json +1981 -0
- package/docs/paper/output/submission-bundle/benchmarks/output/leaderboard/guardbench-leaderboard.json +93 -0
- package/docs/paper/output/submission-bundle/benchmarks/output/leaderboard/guardbench-leaderboard.md +7 -0
- package/docs/paper/output/submission-bundle/benchmarks/output/submission-bundle/submission-manifest.json +131 -0
- package/docs/paper/output/submission-bundle/benchmarks/output/submission-bundle/validation-report.json +31 -0
- package/docs/paper/output/submission-bundle/benchmarks/output/summary.json +2354 -0
- package/docs/paper/output/submission-bundle/benchmarks/schemas/guardbench-adapter-registry.schema.json +69 -0
- package/docs/paper/output/submission-bundle/benchmarks/schemas/guardbench-adapter-self-test.schema.json +156 -0
- package/docs/paper/output/submission-bundle/benchmarks/schemas/guardbench-conformance-card.schema.json +184 -0
- package/docs/paper/output/submission-bundle/benchmarks/schemas/guardbench-external-dry-run.schema.json +74 -0
- package/docs/paper/output/submission-bundle/benchmarks/schemas/guardbench-external-evidence.schema.json +108 -0
- package/docs/paper/output/submission-bundle/benchmarks/schemas/guardbench-external-run.schema.json +160 -0
- package/docs/paper/output/submission-bundle/benchmarks/schemas/guardbench-leaderboard.schema.json +179 -0
- package/docs/paper/output/submission-bundle/benchmarks/schemas/guardbench-manifest.schema.json +213 -0
- package/docs/paper/output/submission-bundle/benchmarks/schemas/guardbench-publication-verification.schema.json +47 -0
- package/docs/paper/output/submission-bundle/benchmarks/schemas/guardbench-raw.schema.json +164 -0
- package/docs/paper/output/submission-bundle/benchmarks/schemas/guardbench-submission-manifest.schema.json +151 -0
- package/docs/paper/output/submission-bundle/benchmarks/schemas/guardbench-summary.schema.json +228 -0
- package/docs/paper/output/submission-bundle/docs/AUDREY_PAPER_OUTLINE.md +175 -0
- package/docs/paper/output/submission-bundle/docs/paper/00-master.md +48 -0
- package/docs/paper/output/submission-bundle/docs/paper/01-introduction.md +27 -0
- package/docs/paper/output/submission-bundle/docs/paper/02-related-work.md +47 -0
- package/docs/paper/output/submission-bundle/docs/paper/03-problem-definition.md +108 -0
- package/docs/paper/output/submission-bundle/docs/paper/04-design.md +164 -0
- package/docs/paper/output/submission-bundle/docs/paper/05-guardbench-spec.md +412 -0
- package/docs/paper/output/submission-bundle/docs/paper/06-implementation.md +113 -0
- package/docs/paper/output/submission-bundle/docs/paper/07-evaluation.md +168 -0
- package/docs/paper/output/submission-bundle/docs/paper/08-discussion-limitations.md +61 -0
- package/docs/paper/output/submission-bundle/docs/paper/09-conclusion.md +11 -0
- package/docs/paper/output/submission-bundle/docs/paper/SUBMISSION_README.md +162 -0
- package/docs/paper/output/submission-bundle/docs/paper/appendix-a-demo-transcript.md +114 -0
- package/docs/paper/output/submission-bundle/docs/paper/arxiv-compile-report.schema.json +116 -0
- package/docs/paper/output/submission-bundle/docs/paper/arxiv-source.schema.json +61 -0
- package/docs/paper/output/submission-bundle/docs/paper/audrey-paper-v1.md +1106 -0
- package/docs/paper/output/submission-bundle/docs/paper/browser-launch-plan.json +209 -0
- package/docs/paper/output/submission-bundle/docs/paper/browser-launch-plan.schema.json +100 -0
- package/docs/paper/output/submission-bundle/docs/paper/browser-launch-results.json +86 -0
- package/docs/paper/output/submission-bundle/docs/paper/browser-launch-results.schema.json +66 -0
- package/docs/paper/output/submission-bundle/docs/paper/claim-register.json +138 -0
- package/docs/paper/output/submission-bundle/docs/paper/claim-register.schema.json +81 -0
- package/docs/paper/output/submission-bundle/docs/paper/evidence-ledger.md +103 -0
- package/docs/paper/output/submission-bundle/docs/paper/output/arxiv/README-arxiv.txt +8 -0
- package/docs/paper/output/submission-bundle/docs/paper/output/arxiv/arxiv-manifest.json +41 -0
- package/docs/paper/output/submission-bundle/docs/paper/output/arxiv/main.tex +949 -0
- package/docs/paper/output/submission-bundle/docs/paper/output/arxiv/references.bib +222 -0
- package/docs/paper/output/submission-bundle/docs/paper/output/arxiv-compile-report.json +24 -0
- package/docs/paper/output/submission-bundle/docs/paper/paper-submission-bundle.schema.json +70 -0
- package/docs/paper/output/submission-bundle/docs/paper/publication-pack.json +81 -0
- package/docs/paper/output/submission-bundle/docs/paper/publication-pack.schema.json +60 -0
- package/docs/paper/output/submission-bundle/docs/paper/references.bib +222 -0
- package/docs/paper/output/submission-bundle/package.json +212 -0
- package/docs/paper/output/submission-bundle/paper-submission-manifest.json +379 -0
- package/docs/paper/paper-submission-bundle.schema.json +70 -0
- package/docs/paper/publication-pack.json +81 -0
- package/docs/paper/publication-pack.schema.json +60 -0
- package/docs/paper/references.bib +222 -0
- package/package.json +103 -26
- package/scripts/audit-release-completion.mjs +362 -0
- package/scripts/create-arxiv-source.mjs +362 -0
- package/scripts/create-paper-submission-bundle.mjs +210 -0
- package/scripts/finalize-release.mjs +526 -0
- package/scripts/prepare-release-cut.mjs +269 -0
- package/scripts/publish-release-bundle.mjs +209 -0
- package/scripts/publish-release-github-api.mjs +429 -0
- package/scripts/run-vitest.mjs +34 -0
- package/scripts/smoke-cli.js +72 -0
- package/scripts/sync-paper-artifacts.mjs +109 -0
- package/scripts/verify-arxiv-compile.mjs +440 -0
- package/scripts/verify-arxiv-source.mjs +194 -0
- package/scripts/verify-browser-launch-plan.mjs +237 -0
- package/scripts/verify-browser-launch-results.mjs +285 -0
- package/scripts/verify-paper-artifacts.mjs +338 -0
- package/scripts/verify-paper-claims.mjs +226 -0
- package/scripts/verify-paper-submission-bundle.mjs +207 -0
- package/scripts/verify-publication-pack.mjs +196 -0
- package/scripts/verify-python-package.py +201 -0
- package/scripts/verify-release-readiness.mjs +741 -0
- package/docs/assets/benchmarks/local-benchmark.svg +0 -45
- package/docs/assets/benchmarks/operations-benchmark.svg +0 -45
- package/docs/assets/benchmarks/published-memory-standards.svg +0 -50
- package/docs/audrey-for-dummies.md +0 -670
- package/docs/benchmarking.md +0 -151
- package/docs/future-of-llm-memory.md +0 -452
- package/docs/mcp-hosts.md +0 -206
- package/docs/ollama-local-agents.md +0 -128
- package/docs/production-readiness.md +0 -128
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
2
|
+
import { join, resolve } from 'node:path';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
4
|
+
import { validateAdapterRegistry } from './validate-adapter-registry.mjs';
|
|
5
|
+
import { validateAdapterModuleFile } from './validate-adapter-module.mjs';
|
|
6
|
+
import { validateAdapterSelfTestFile } from './validate-adapter-self-test.mjs';
|
|
7
|
+
import { validateExternalAdapterDryRunMatrix } from './dry-run-external-adapters.mjs';
|
|
8
|
+
import { validateExternalEvidenceReport } from './verify-external-evidence.mjs';
|
|
9
|
+
import { validateGuardBenchArtifacts, validateSchema } from './validate-guardbench-artifacts.mjs';
|
|
10
|
+
import { verifyGuardBenchSubmissionBundle } from './verify-submission-bundle.mjs';
|
|
11
|
+
import { containsLocalPath, findLocalPathLeaks, publicPath, walkFiles } from './public-paths.mjs';
|
|
12
|
+
|
|
13
|
+
const DEFAULT_ADAPTER = 'benchmarks/adapters/example-allow.mjs';
|
|
14
|
+
const DEFAULT_ARTIFACTS_DIR = 'benchmarks/output';
|
|
15
|
+
const DEFAULT_BUNDLE_DIR = 'benchmarks/output/submission-bundle';
|
|
16
|
+
const DEFAULT_EXTERNAL_DRY_RUN = 'benchmarks/output/external/guardbench-external-dry-run.json';
|
|
17
|
+
const DEFAULT_EXTERNAL_EVIDENCE = 'benchmarks/output/external/guardbench-external-evidence.json';
|
|
18
|
+
const DEFAULT_LEADERBOARD = 'benchmarks/output/leaderboard/guardbench-leaderboard.json';
|
|
19
|
+
const DEFAULT_SCHEMA = 'benchmarks/schemas/guardbench-publication-verification.schema.json';
|
|
20
|
+
|
|
21
|
+
export function parsePublicationVerifierArgs(argv = process.argv.slice(2)) {
|
|
22
|
+
const args = {
|
|
23
|
+
adapter: DEFAULT_ADAPTER,
|
|
24
|
+
artifactsDir: DEFAULT_ARTIFACTS_DIR,
|
|
25
|
+
bundleDir: DEFAULT_BUNDLE_DIR,
|
|
26
|
+
externalDryRun: DEFAULT_EXTERNAL_DRY_RUN,
|
|
27
|
+
externalEvidence: DEFAULT_EXTERNAL_EVIDENCE,
|
|
28
|
+
leaderboard: DEFAULT_LEADERBOARD,
|
|
29
|
+
json: false,
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
for (let i = 0; i < argv.length; i++) {
|
|
33
|
+
const token = argv[i];
|
|
34
|
+
if (token === '--adapter' && argv[i + 1]) args.adapter = argv[++i];
|
|
35
|
+
else if ((token === '--artifacts-dir' || token === '--dir') && argv[i + 1]) args.artifactsDir = argv[++i];
|
|
36
|
+
else if ((token === '--bundle-dir' || token === '--bundle') && argv[i + 1]) args.bundleDir = argv[++i];
|
|
37
|
+
else if (token === '--external-dry-run' && argv[i + 1]) args.externalDryRun = argv[++i];
|
|
38
|
+
else if (token === '--external-evidence' && argv[i + 1]) args.externalEvidence = argv[++i];
|
|
39
|
+
else if (token === '--leaderboard' && argv[i + 1]) args.leaderboard = argv[++i];
|
|
40
|
+
else if (token === '--json') args.json = true;
|
|
41
|
+
else if (token === '--help' || token === '-h') args.help = true;
|
|
42
|
+
else throw new Error(`Unknown argument: ${token}`);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
return args;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function usage() {
|
|
49
|
+
return `Usage: node benchmarks/verify-publication-artifacts.mjs [options]
|
|
50
|
+
|
|
51
|
+
Options:
|
|
52
|
+
--adapter <path> Default adapter module. Default: ${DEFAULT_ADAPTER}.
|
|
53
|
+
--artifacts-dir <path> GuardBench output artifact directory. Default: ${DEFAULT_ARTIFACTS_DIR}.
|
|
54
|
+
--bundle-dir <path> GuardBench submission bundle. Default: ${DEFAULT_BUNDLE_DIR}.
|
|
55
|
+
--external-dry-run <path> GuardBench external adapter dry-run matrix. Default: ${DEFAULT_EXTERNAL_DRY_RUN}.
|
|
56
|
+
--external-evidence <path> GuardBench external live-evidence verification report. Default: ${DEFAULT_EXTERNAL_EVIDENCE}.
|
|
57
|
+
--leaderboard <path> GuardBench leaderboard JSON. Default: ${DEFAULT_LEADERBOARD}.
|
|
58
|
+
--json Print the machine-readable verification report.
|
|
59
|
+
`;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function readJson(path) {
|
|
63
|
+
return JSON.parse(readFileSync(path, 'utf-8'));
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
function checkLeaderboard(path) {
|
|
67
|
+
const leaderboardPath = resolve(path);
|
|
68
|
+
const failures = [];
|
|
69
|
+
let leaderboard = null;
|
|
70
|
+
|
|
71
|
+
if (!existsSync(leaderboardPath)) {
|
|
72
|
+
failures.push(`Missing GuardBench leaderboard: ${leaderboardPath}`);
|
|
73
|
+
} else {
|
|
74
|
+
try {
|
|
75
|
+
leaderboard = readJson(leaderboardPath);
|
|
76
|
+
const schema = readJson('benchmarks/schemas/guardbench-leaderboard.schema.json');
|
|
77
|
+
failures.push(...validateSchema(leaderboard, schema, 'guardbench-leaderboard'));
|
|
78
|
+
if (!leaderboard.rows?.some(row => row.verification?.ok === true)) {
|
|
79
|
+
failures.push('GuardBench leaderboard has no verified rows');
|
|
80
|
+
}
|
|
81
|
+
} catch (error) {
|
|
82
|
+
failures.push(error.message);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
return {
|
|
87
|
+
ok: failures.length === 0,
|
|
88
|
+
path: publicPath(leaderboardPath),
|
|
89
|
+
rows: leaderboard?.rows?.length ?? 0,
|
|
90
|
+
failures,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
function checkExternalDryRun(path) {
|
|
95
|
+
const matrixPath = resolve(path);
|
|
96
|
+
const failures = [];
|
|
97
|
+
let matrix = null;
|
|
98
|
+
|
|
99
|
+
if (!existsSync(matrixPath)) {
|
|
100
|
+
failures.push(`Missing GuardBench external adapter dry-run matrix: ${matrixPath}`);
|
|
101
|
+
} else {
|
|
102
|
+
try {
|
|
103
|
+
matrix = readJson(matrixPath);
|
|
104
|
+
failures.push(...validateExternalAdapterDryRunMatrix(matrix));
|
|
105
|
+
if (!matrix.adapters?.some(row => row.id === 'mem0-platform')) {
|
|
106
|
+
failures.push('GuardBench external adapter dry-run matrix has no mem0-platform row');
|
|
107
|
+
}
|
|
108
|
+
if (!matrix.adapters?.some(row => row.id === 'zep-cloud')) {
|
|
109
|
+
failures.push('GuardBench external adapter dry-run matrix has no zep-cloud row');
|
|
110
|
+
}
|
|
111
|
+
} catch (error) {
|
|
112
|
+
failures.push(error.message);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
return {
|
|
117
|
+
ok: failures.length === 0,
|
|
118
|
+
path: publicPath(matrixPath),
|
|
119
|
+
adapters: matrix?.adapters?.length ?? 0,
|
|
120
|
+
missingEnv: matrix?.adapters?.flatMap(row => row.missingEnv ?? []) ?? [],
|
|
121
|
+
failures,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
function checkExternalEvidence(path) {
|
|
126
|
+
const reportPath = resolve(path);
|
|
127
|
+
const failures = [];
|
|
128
|
+
let evidence = null;
|
|
129
|
+
|
|
130
|
+
if (!existsSync(reportPath)) {
|
|
131
|
+
failures.push(`Missing GuardBench external evidence report: ${reportPath}`);
|
|
132
|
+
} else {
|
|
133
|
+
try {
|
|
134
|
+
evidence = readJson(reportPath);
|
|
135
|
+
failures.push(...validateExternalEvidenceReport(evidence));
|
|
136
|
+
if (evidence.ok !== true) {
|
|
137
|
+
failures.push('GuardBench external evidence report is not ok');
|
|
138
|
+
}
|
|
139
|
+
if (!evidence.adapters?.some(row => row.id === 'mem0-platform')) {
|
|
140
|
+
failures.push('GuardBench external evidence report has no mem0-platform row');
|
|
141
|
+
}
|
|
142
|
+
if (!evidence.adapters?.some(row => row.id === 'zep-cloud')) {
|
|
143
|
+
failures.push('GuardBench external evidence report has no zep-cloud row');
|
|
144
|
+
}
|
|
145
|
+
} catch (error) {
|
|
146
|
+
failures.push(error.message);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
return {
|
|
151
|
+
ok: failures.length === 0,
|
|
152
|
+
path: publicPath(reportPath),
|
|
153
|
+
adapters: evidence?.adapters?.length ?? 0,
|
|
154
|
+
verified: evidence?.adapters?.filter(row => row.status === 'verified').length ?? 0,
|
|
155
|
+
pending: evidence?.adapters?.filter(row => row.status === 'pending').length ?? 0,
|
|
156
|
+
failures,
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
function scanTextFile(path) {
|
|
161
|
+
try {
|
|
162
|
+
return containsLocalPath(readFileSync(path, 'utf-8'));
|
|
163
|
+
} catch {
|
|
164
|
+
return false;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
function checkLocalPathLeaks(options = {}) {
|
|
169
|
+
const failures = [];
|
|
170
|
+
const artifactsDir = resolve(options.artifactsDir ?? DEFAULT_ARTIFACTS_DIR);
|
|
171
|
+
const bundleDir = resolve(options.bundleDir ?? DEFAULT_BUNDLE_DIR);
|
|
172
|
+
const files = [
|
|
173
|
+
join(artifactsDir, 'guardbench-manifest.json'),
|
|
174
|
+
join(artifactsDir, 'guardbench-summary.json'),
|
|
175
|
+
join(artifactsDir, 'guardbench-raw.json'),
|
|
176
|
+
join(artifactsDir, 'guardbench-conformance-card.json'),
|
|
177
|
+
join(artifactsDir, 'adapter-self-test', 'guardbench-adapter-self-test.json'),
|
|
178
|
+
resolve(options.externalDryRun ?? DEFAULT_EXTERNAL_DRY_RUN),
|
|
179
|
+
resolve(options.externalEvidence ?? DEFAULT_EXTERNAL_EVIDENCE),
|
|
180
|
+
resolve(options.leaderboard ?? DEFAULT_LEADERBOARD),
|
|
181
|
+
];
|
|
182
|
+
|
|
183
|
+
for (const path of files) {
|
|
184
|
+
if (existsSync(path) && scanTextFile(path)) {
|
|
185
|
+
failures.push(`${publicPath(path)} contains a local absolute path`);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
if (existsSync(bundleDir)) {
|
|
189
|
+
for (const file of walkFiles(bundleDir)) {
|
|
190
|
+
const path = join(bundleDir, file);
|
|
191
|
+
if (scanTextFile(path)) failures.push(`${publicPath(path)} contains a local absolute path`);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
return {
|
|
196
|
+
ok: failures.length === 0,
|
|
197
|
+
filesChecked: files.filter(path => existsSync(path)).map(path => publicPath(path)),
|
|
198
|
+
bundleDir: publicPath(bundleDir),
|
|
199
|
+
failures,
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
export function validatePublicationVerificationReport(report, options = {}) {
|
|
204
|
+
const schema = readJson(options.schema ?? DEFAULT_SCHEMA);
|
|
205
|
+
return validateSchema(report, schema, 'guardbench-publication-verification');
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
export async function verifyGuardBenchPublicationArtifacts(options = {}) {
|
|
209
|
+
const registry = await validateAdapterRegistry();
|
|
210
|
+
const adapterModule = await validateAdapterModuleFile({ adapter: options.adapter ?? DEFAULT_ADAPTER });
|
|
211
|
+
const selfTest = validateAdapterSelfTestFile({
|
|
212
|
+
report: join(resolve(options.artifactsDir ?? DEFAULT_ARTIFACTS_DIR), 'adapter-self-test', 'guardbench-adapter-self-test.json'),
|
|
213
|
+
});
|
|
214
|
+
const artifacts = validateGuardBenchArtifacts({ dir: options.artifactsDir ?? DEFAULT_ARTIFACTS_DIR });
|
|
215
|
+
const bundle = verifyGuardBenchSubmissionBundle({ dir: options.bundleDir ?? DEFAULT_BUNDLE_DIR });
|
|
216
|
+
const externalDryRun = checkExternalDryRun(options.externalDryRun ?? DEFAULT_EXTERNAL_DRY_RUN);
|
|
217
|
+
const externalEvidence = checkExternalEvidence(options.externalEvidence ?? DEFAULT_EXTERNAL_EVIDENCE);
|
|
218
|
+
const leaderboard = checkLeaderboard(options.leaderboard ?? DEFAULT_LEADERBOARD);
|
|
219
|
+
const localPaths = checkLocalPathLeaks(options);
|
|
220
|
+
const checks = {
|
|
221
|
+
registry,
|
|
222
|
+
adapterModule,
|
|
223
|
+
selfTest,
|
|
224
|
+
artifacts,
|
|
225
|
+
bundle,
|
|
226
|
+
externalDryRun,
|
|
227
|
+
externalEvidence,
|
|
228
|
+
leaderboard,
|
|
229
|
+
localPaths,
|
|
230
|
+
};
|
|
231
|
+
const failures = Object.entries(checks).flatMap(([name, report]) =>
|
|
232
|
+
(report.failures ?? []).map(failure => `${name}: ${failure}`));
|
|
233
|
+
|
|
234
|
+
const report = {
|
|
235
|
+
schemaVersion: '1.0.0',
|
|
236
|
+
suite: 'GuardBench publication artifact verification',
|
|
237
|
+
generatedAt: new Date().toISOString(),
|
|
238
|
+
ok: failures.length === 0,
|
|
239
|
+
checks,
|
|
240
|
+
failures,
|
|
241
|
+
};
|
|
242
|
+
const reportLocalPathLeaks = findLocalPathLeaks({ checks });
|
|
243
|
+
if (reportLocalPathLeaks.length > 0) {
|
|
244
|
+
failures.push(...reportLocalPathLeaks.map(leak => `publication report contains local absolute path: ${leak}`));
|
|
245
|
+
report.ok = false;
|
|
246
|
+
report.failures = failures;
|
|
247
|
+
}
|
|
248
|
+
const schemaFailures = validatePublicationVerificationReport(report);
|
|
249
|
+
if (schemaFailures.length > 0) {
|
|
250
|
+
throw new Error(`GuardBench publication verification schema validation failed: ${schemaFailures.join('; ')}`);
|
|
251
|
+
}
|
|
252
|
+
return report;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
async function main() {
|
|
256
|
+
const args = parsePublicationVerifierArgs();
|
|
257
|
+
if (args.help) {
|
|
258
|
+
console.log(usage());
|
|
259
|
+
return;
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
const report = await verifyGuardBenchPublicationArtifacts(args);
|
|
263
|
+
if (args.json) {
|
|
264
|
+
console.log(JSON.stringify(report, null, 2));
|
|
265
|
+
} else if (report.ok) {
|
|
266
|
+
console.log('GuardBench publication artifact verification passed.');
|
|
267
|
+
console.log(`Registry adapters: ${report.checks.registry.adapters.length}`);
|
|
268
|
+
console.log(`Submission bundle files: ${report.checks.bundle.files.length}`);
|
|
269
|
+
console.log(`External dry-run adapters: ${report.checks.externalDryRun.adapters}`);
|
|
270
|
+
console.log(`External live evidence: ${report.checks.externalEvidence.verified} verified, ${report.checks.externalEvidence.pending} pending`);
|
|
271
|
+
console.log(`Leaderboard rows: ${report.checks.leaderboard.rows}`);
|
|
272
|
+
console.log(`Local path sweep: ${report.checks.localPaths.filesChecked.length} files plus bundle`);
|
|
273
|
+
} else {
|
|
274
|
+
console.error('GuardBench publication artifact verification failed:');
|
|
275
|
+
for (const failure of report.failures) console.error(`- ${failure}`);
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
if (!report.ok) process.exit(1);
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
if (process.argv[1] && resolve(process.argv[1]) === fileURLToPath(import.meta.url)) {
|
|
282
|
+
main().catch(error => {
|
|
283
|
+
console.error(error.stack ?? error.message);
|
|
284
|
+
process.exit(1);
|
|
285
|
+
});
|
|
286
|
+
}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import { existsSync, readdirSync, readFileSync } from 'node:fs';
|
|
2
|
+
import { createHash } from 'node:crypto';
|
|
3
|
+
import { join, relative, resolve } from 'node:path';
|
|
4
|
+
import { validateGuardBenchArtifacts, validateSchema } from './validate-guardbench-artifacts.mjs';
|
|
5
|
+
import { publicPath, scanFilesForLocalPaths } from './public-paths.mjs';
|
|
6
|
+
|
|
7
|
+
const REQUIRED_FILES = [
|
|
8
|
+
'guardbench-conformance-card.json',
|
|
9
|
+
'guardbench-manifest.json',
|
|
10
|
+
'guardbench-raw.json',
|
|
11
|
+
'guardbench-summary.json',
|
|
12
|
+
'schemas/guardbench-adapter-registry.schema.json',
|
|
13
|
+
'schemas/guardbench-adapter-self-test.schema.json',
|
|
14
|
+
'schemas/guardbench-conformance-card.schema.json',
|
|
15
|
+
'schemas/guardbench-external-dry-run.schema.json',
|
|
16
|
+
'schemas/guardbench-external-evidence.schema.json',
|
|
17
|
+
'schemas/guardbench-external-run.schema.json',
|
|
18
|
+
'schemas/guardbench-leaderboard.schema.json',
|
|
19
|
+
'schemas/guardbench-manifest.schema.json',
|
|
20
|
+
'schemas/guardbench-publication-verification.schema.json',
|
|
21
|
+
'schemas/guardbench-raw.schema.json',
|
|
22
|
+
'schemas/guardbench-summary.schema.json',
|
|
23
|
+
'schemas/guardbench-submission-manifest.schema.json',
|
|
24
|
+
'validation-report.json',
|
|
25
|
+
];
|
|
26
|
+
|
|
27
|
+
function readJson(path) {
|
|
28
|
+
return JSON.parse(readFileSync(path, 'utf-8'));
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function sha256File(path) {
|
|
32
|
+
return createHash('sha256').update(readFileSync(path)).digest('hex');
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function walkFiles(dir, root = dir) {
|
|
36
|
+
return readdirSync(dir, { withFileTypes: true }).flatMap(entry => {
|
|
37
|
+
const path = join(dir, entry.name);
|
|
38
|
+
if (entry.isDirectory()) return walkFiles(path, root);
|
|
39
|
+
return relative(root, path).replaceAll('\\', '/');
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export function verifyGuardBenchSubmissionBundle(options = {}) {
|
|
44
|
+
const dir = resolve(options.dir ?? 'benchmarks/output/submission-bundle');
|
|
45
|
+
const manifestPath = join(dir, 'submission-manifest.json');
|
|
46
|
+
const failures = [];
|
|
47
|
+
let manifest = null;
|
|
48
|
+
|
|
49
|
+
try {
|
|
50
|
+
manifest = readJson(manifestPath);
|
|
51
|
+
} catch (error) {
|
|
52
|
+
failures.push(`submission-manifest.json: ${error.message}`);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
if (!manifest) {
|
|
56
|
+
return { ok: false, dir, failures };
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
if (manifest.suite !== 'GuardBench submission bundle') {
|
|
60
|
+
failures.push('submission-manifest.json: suite must be GuardBench submission bundle');
|
|
61
|
+
}
|
|
62
|
+
try {
|
|
63
|
+
const schema = readJson(join(dir, 'schemas', 'guardbench-submission-manifest.schema.json'));
|
|
64
|
+
for (const error of validateSchema(manifest, schema, 'submission-manifest')) {
|
|
65
|
+
failures.push(`submission-manifest.json: ${error}`);
|
|
66
|
+
}
|
|
67
|
+
} catch (error) {
|
|
68
|
+
failures.push(`schemas/guardbench-submission-manifest.schema.json: ${error.message}`);
|
|
69
|
+
}
|
|
70
|
+
const listed = new Map((manifest.files ?? []).map(file => [file.path, file]));
|
|
71
|
+
for (const file of REQUIRED_FILES) {
|
|
72
|
+
if (!listed.has(file)) failures.push(`submission-manifest.json: missing required file record ${file}`);
|
|
73
|
+
}
|
|
74
|
+
if (listed.has('submission-manifest.json')) {
|
|
75
|
+
failures.push('submission-manifest.json: must not include a self-hash file record');
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
for (const [file, record] of listed) {
|
|
79
|
+
const path = join(dir, file);
|
|
80
|
+
if (!existsSync(path)) {
|
|
81
|
+
failures.push(`${file}: listed in manifest but missing from bundle`);
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
const actualHash = sha256File(path);
|
|
85
|
+
if (record.sha256 !== actualHash) failures.push(`${file}: sha256 mismatch`);
|
|
86
|
+
const actualBytes = readFileSync(path).byteLength;
|
|
87
|
+
if (record.bytes !== actualBytes) failures.push(`${file}: byte length mismatch`);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
const actualFiles = walkFiles(dir).filter(file => file !== 'submission-manifest.json').sort();
|
|
91
|
+
const listedFiles = [...listed.keys()].sort();
|
|
92
|
+
const actualSet = new Set(actualFiles);
|
|
93
|
+
const listedSet = new Set(listedFiles);
|
|
94
|
+
for (const file of actualFiles) {
|
|
95
|
+
if (!listedSet.has(file)) failures.push(`${file}: present in bundle but missing from manifest`);
|
|
96
|
+
}
|
|
97
|
+
for (const file of listedFiles) {
|
|
98
|
+
if (!actualSet.has(file)) failures.push(`${file}: listed in manifest but not present in bundle`);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
const artifactValidation = validateGuardBenchArtifacts({
|
|
102
|
+
dir,
|
|
103
|
+
schemasDir: join(dir, 'schemas'),
|
|
104
|
+
});
|
|
105
|
+
if (!artifactValidation.ok) {
|
|
106
|
+
failures.push(...artifactValidation.failures.map(failure => `artifact validation: ${failure}`));
|
|
107
|
+
}
|
|
108
|
+
if (manifest.validation?.ok !== true) {
|
|
109
|
+
failures.push('submission-manifest.json: embedded validation status is not ok');
|
|
110
|
+
}
|
|
111
|
+
for (const file of scanFilesForLocalPaths(dir, actualFiles)) {
|
|
112
|
+
failures.push(`${file}: contains a local absolute path`);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
return {
|
|
116
|
+
ok: failures.length === 0,
|
|
117
|
+
dir: publicPath(dir),
|
|
118
|
+
subject: manifest.subject ?? null,
|
|
119
|
+
files: listedFiles,
|
|
120
|
+
artifactValidation,
|
|
121
|
+
failures,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
function parseArgs(argv = process.argv.slice(2)) {
|
|
126
|
+
const args = { dir: 'benchmarks/output/submission-bundle', json: false };
|
|
127
|
+
for (let i = 0; i < argv.length; i++) {
|
|
128
|
+
const token = argv[i];
|
|
129
|
+
if ((token === '--dir' || token === '--bundle-dir') && argv[i + 1]) args.dir = argv[++i];
|
|
130
|
+
else if (token === '--json') args.json = true;
|
|
131
|
+
else if (token === '--help' || token === '-h') args.help = true;
|
|
132
|
+
else throw new Error(`Unknown argument: ${token}`);
|
|
133
|
+
}
|
|
134
|
+
return args;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
function usage() {
|
|
138
|
+
return [
|
|
139
|
+
'Usage: node benchmarks/verify-submission-bundle.mjs [--dir benchmarks/output/submission-bundle] [--json]',
|
|
140
|
+
'',
|
|
141
|
+
'Verifies a GuardBench submission bundle manifest, file hashes, bundled schemas,',
|
|
142
|
+
'and artifact validation report.',
|
|
143
|
+
].join('\n');
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
async function main() {
|
|
147
|
+
const args = parseArgs();
|
|
148
|
+
if (args.help) {
|
|
149
|
+
console.log(usage());
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
const report = verifyGuardBenchSubmissionBundle(args);
|
|
153
|
+
if (args.json) console.log(JSON.stringify(report, null, 2));
|
|
154
|
+
else if (report.ok) console.log(`GuardBench submission bundle verification passed: ${report.dir}`);
|
|
155
|
+
else {
|
|
156
|
+
console.error('GuardBench submission bundle verification failed:');
|
|
157
|
+
for (const failure of report.failures) console.error(`- ${failure}`);
|
|
158
|
+
}
|
|
159
|
+
if (!report.ok) process.exit(1);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
if (process.argv[1] && resolve(process.argv[1]).endsWith('verify-submission-bundle.mjs')) {
|
|
163
|
+
main().catch(error => {
|
|
164
|
+
console.error(error.stack ?? error.message);
|
|
165
|
+
process.exit(1);
|
|
166
|
+
});
|
|
167
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { AudreyConfig, EmbeddingConfig, LLMConfig } from '../src/types.js';
|
|
2
|
-
export declare const VERSION = "0.
|
|
2
|
+
export declare const VERSION = "1.0.0";
|
|
3
3
|
export declare const SERVER_NAME = "audrey-memory";
|
|
4
4
|
export declare const DEFAULT_AGENT = "local-agent";
|
|
5
5
|
export declare const DEFAULT_DATA_DIR: string;
|
|
@@ -21,8 +21,9 @@ interface McpEnvOptions {
|
|
|
21
21
|
export declare function resolveDataDir(env?: Record<string, string | undefined>): string;
|
|
22
22
|
/**
|
|
23
23
|
* Resolves which embedding provider to use.
|
|
24
|
-
* Priority: explicit config ->
|
|
25
|
-
*
|
|
24
|
+
* Priority: explicit config -> local.
|
|
25
|
+
* Cloud providers are never auto-selected from ambient API keys; choose them
|
|
26
|
+
* explicitly with AUDREY_EMBEDDING_PROVIDER=gemini|openai.
|
|
26
27
|
*/
|
|
27
28
|
export declare function resolveEmbeddingProvider(env: Record<string, string | undefined>, explicit?: string | undefined): EmbeddingConfig & {
|
|
28
29
|
dimensions: number;
|
|
@@ -39,6 +40,6 @@ export declare function buildStdioMcpServerConfig(env?: Record<string, string |
|
|
|
39
40
|
env: Record<string, string>;
|
|
40
41
|
};
|
|
41
42
|
export declare function formatMcpHostConfig(host?: string | undefined, env?: Record<string, string | undefined>): string;
|
|
42
|
-
export declare function buildInstallArgs(env?: Record<string, string | undefined
|
|
43
|
+
export declare function buildInstallArgs(env?: Record<string, string | undefined>, options?: McpEnvOptions): string[];
|
|
43
44
|
export {};
|
|
44
45
|
//# sourceMappingURL=config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../mcp-server/config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEhF,eAAO,MAAM,OAAO,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../mcp-server/config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEhF,eAAO,MAAM,OAAO,UAAU,CAAC;AAC/B,eAAO,MAAM,WAAW,kBAAkB,CAAC;AAC3C,eAAO,MAAM,aAAa,gBAAgB,CAAC;AAC3C,eAAO,MAAM,gBAAgB,QAAqC,CAAC;AACnE,eAAO,MAAM,cAAc,QAAwD,CAAC;AAEpF,eAAO,MAAM,gBAAgB;;;;;;;;;CASnB,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,MAAM,OAAO,gBAAgB,CAAC;AAEvD,UAAU,aAAa;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAyBD,wBAAgB,cAAc,CAAC,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,GAAG,MAAM,CAE5F;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EACvC,QAAQ,GAAE,MAAM,GAAG,SAA4C,GAC9D,eAAe,GAAG;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,CAe1C;AAED,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EACvC,QAAQ,GAAE,MAAM,GAAG,SAAsC,GACxD,CAAC,SAAS,GAAG;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,IAAI,CAoB1C;AAED,wBAAgB,iBAAiB,IAAI,YAAY,CAehD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAIjE;AAED,wBAAgB,iBAAiB,CAC/B,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,EACrD,KAAK,SAAuC,EAC5C,OAAO,GAAE,aAAkB,GAC1B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAyCxB;AAED,wBAAgB,yBAAyB,CACvC,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,EACrD,IAAI,GAAE,MAAM,GAAG,SAAqB,GACnC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAOlE;AA6BD,wBAAgB,mBAAmB,CACjC,IAAI,GAAE,MAAM,GAAG,SAAqB,EACpC,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,GACpD,MAAM,CAgBR;AAED,wBAAgB,gBAAgB,CAC9B,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,EACrD,OAAO,GAAE,aAAkB,GAC1B,MAAM,EAAE,CAaV"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { homedir } from 'node:os';
|
|
2
2
|
import { join } from 'node:path';
|
|
3
3
|
import { fileURLToPath } from 'node:url';
|
|
4
|
-
export const VERSION = '0.
|
|
4
|
+
export const VERSION = '1.0.0';
|
|
5
5
|
export const SERVER_NAME = 'audrey-memory';
|
|
6
6
|
export const DEFAULT_AGENT = 'local-agent';
|
|
7
7
|
export const DEFAULT_DATA_DIR = join(homedir(), '.audrey', 'data');
|
|
@@ -41,8 +41,9 @@ export function resolveDataDir(env = process.env) {
|
|
|
41
41
|
}
|
|
42
42
|
/**
|
|
43
43
|
* Resolves which embedding provider to use.
|
|
44
|
-
* Priority: explicit config ->
|
|
45
|
-
*
|
|
44
|
+
* Priority: explicit config -> local.
|
|
45
|
+
* Cloud providers are never auto-selected from ambient API keys; choose them
|
|
46
|
+
* explicitly with AUDREY_EMBEDDING_PROVIDER=gemini|openai.
|
|
46
47
|
*/
|
|
47
48
|
export function resolveEmbeddingProvider(env, explicit = env['AUDREY_EMBEDDING_PROVIDER']) {
|
|
48
49
|
if (explicit && explicit !== 'auto') {
|
|
@@ -59,9 +60,6 @@ export function resolveEmbeddingProvider(env, explicit = env['AUDREY_EMBEDDING_P
|
|
|
59
60
|
result.device = env['AUDREY_DEVICE'] || 'gpu';
|
|
60
61
|
return result;
|
|
61
62
|
}
|
|
62
|
-
if (env['GOOGLE_API_KEY'] || env['GEMINI_API_KEY']) {
|
|
63
|
-
return { provider: 'gemini', apiKey: env['GOOGLE_API_KEY'] || env['GEMINI_API_KEY'], dimensions: 3072 };
|
|
64
|
-
}
|
|
65
63
|
return { provider: 'local', dimensions: 384, device: env['AUDREY_DEVICE'] || 'gpu' };
|
|
66
64
|
}
|
|
67
65
|
export function resolveLLMProvider(env, explicit = env['AUDREY_LLM_PROVIDER']) {
|
|
@@ -198,8 +196,8 @@ export function formatMcpHostConfig(host = 'generic', env = process.env) {
|
|
|
198
196
|
}
|
|
199
197
|
return JSON.stringify(jsonHostConfig(normalizedHost, env), null, 2);
|
|
200
198
|
}
|
|
201
|
-
export function buildInstallArgs(env = process.env) {
|
|
202
|
-
const envPairs = buildAudreyMcpEnv(env, env['AUDREY_AGENT'] || HOST_AGENT_NAMES['claude-code'], { includeSecrets:
|
|
199
|
+
export function buildInstallArgs(env = process.env, options = {}) {
|
|
200
|
+
const envPairs = buildAudreyMcpEnv(env, env['AUDREY_AGENT'] || HOST_AGENT_NAMES['claude-code'], { includeSecrets: options.includeSecrets ?? false });
|
|
203
201
|
const args = ['mcp', 'add', '-s', 'user', SERVER_NAME];
|
|
204
202
|
for (const [key, value] of Object.entries(envPairs)) {
|
|
205
203
|
args.push('-e', `${key}=${value}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../mcp-server/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGzC,MAAM,CAAC,MAAM,OAAO,GAAG,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../mcp-server/config.ts"],"names":[],"mappings":"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"}
|