@sanity/ailf 2.0.0 → 2.0.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.
- package/canonical/grader-references/README.md +2 -2
- package/canonical/reference-solutions/content-lake/mutations.ts +160 -0
- package/canonical/reference-solutions/content-lake/realtime.ts +187 -0
- package/canonical/reference-solutions/image-handling/asset-pipeline.tsx +166 -0
- package/canonical/reference-solutions/portable-text/custom-blocks.ts +204 -0
- package/canonical/reference-solutions/portable-text/rendering.tsx +163 -0
- package/config/features.ts +1 -1
- package/config/models.ts +28 -23
- package/config/sources.ts +1 -1
- package/config/thresholds.ts +1 -1
- package/dist/_vendor/ailf-core/__tests__/comparison-formatters.test.d.ts +10 -0
- package/dist/_vendor/ailf-core/__tests__/comparison-formatters.test.js +185 -0
- package/dist/_vendor/ailf-core/artifact-capture/__tests__/noop-collector.test.d.ts +6 -0
- package/dist/_vendor/ailf-core/artifact-capture/__tests__/noop-collector.test.js +42 -0
- package/dist/_vendor/ailf-core/artifact-capture/noop-collector.d.ts +14 -0
- package/dist/_vendor/ailf-core/artifact-capture/noop-collector.js +25 -0
- package/dist/_vendor/ailf-core/config-helpers.d.ts +6 -0
- package/dist/_vendor/ailf-core/config-helpers.js +29 -0
- package/dist/_vendor/ailf-core/examples/index.d.ts +164 -94
- package/dist/_vendor/ailf-core/examples/index.js +208 -114
- package/dist/_vendor/ailf-core/index.d.ts +1 -0
- package/dist/_vendor/ailf-core/index.js +1 -0
- package/dist/_vendor/ailf-core/ports/artifact-collector.d.ts +94 -0
- package/dist/_vendor/ailf-core/ports/artifact-collector.js +13 -0
- package/dist/_vendor/ailf-core/ports/capture-comparator.d.ts +138 -0
- package/dist/_vendor/ailf-core/ports/capture-comparator.js +10 -0
- package/dist/_vendor/ailf-core/ports/context.d.ts +20 -1
- package/dist/_vendor/ailf-core/ports/eval-runner.d.ts +6 -0
- package/dist/_vendor/ailf-core/ports/index.d.ts +2 -0
- package/dist/_vendor/ailf-core/ports/pipeline-step.d.ts +11 -0
- package/dist/_vendor/ailf-core/ports/task-source.d.ts +3 -3
- package/dist/_vendor/ailf-core/ports/task-source.js +3 -3
- package/dist/_vendor/ailf-core/schemas/pipeline-request.d.ts +6 -1
- package/dist/_vendor/ailf-core/schemas/pipeline-request.js +14 -2
- package/dist/_vendor/ailf-core/services/config-helpers.d.ts +16 -1
- package/dist/_vendor/ailf-core/services/config-helpers.js +21 -0
- package/dist/_vendor/ailf-core/services/index.d.ts +1 -1
- package/dist/_vendor/ailf-core/services/index.js +1 -1
- package/dist/_vendor/ailf-core/services/scoring.js +9 -0
- package/dist/_vendor/ailf-core/types/generalized-task.d.ts +12 -1
- package/dist/_vendor/ailf-core/types/generalized-task.js +1 -1
- package/dist/_vendor/ailf-core/types/index.d.ts +47 -4
- package/dist/_vendor/ailf-core/types/plugin-registry.d.ts +27 -0
- package/dist/_vendor/ailf-shared/eval-modes.d.ts +15 -0
- package/dist/_vendor/ailf-shared/eval-modes.js +18 -0
- package/dist/_vendor/ailf-tasks/cli.d.ts +8 -0
- package/dist/_vendor/ailf-tasks/cli.js +61 -0
- package/dist/_vendor/ailf-tasks/index.d.ts +13 -0
- package/dist/_vendor/ailf-tasks/index.js +16 -0
- package/dist/_vendor/ailf-tasks/parser.d.ts +27 -0
- package/dist/_vendor/ailf-tasks/parser.js +73 -0
- package/dist/_vendor/ailf-tasks/schemas.d.ts +198 -0
- package/dist/_vendor/ailf-tasks/schemas.js +180 -0
- package/dist/_vendor/ailf-tasks/validation.d.ts +47 -0
- package/dist/_vendor/ailf-tasks/validation.js +162 -0
- package/dist/adapters/api-client/remediation.js +2 -2
- package/dist/adapters/config-sources/file-config-adapter.js +6 -1
- package/dist/adapters/eval-runners/promptfoo-eval-adapter.js +8 -2
- package/dist/adapters/index.d.ts +0 -1
- package/dist/adapters/index.js +0 -1
- package/dist/adapters/task-sources/composite-task-source.d.ts +1 -1
- package/dist/adapters/task-sources/composite-task-source.js +1 -1
- package/dist/adapters/task-sources/content-lake-task-source.d.ts +4 -6
- package/dist/adapters/task-sources/content-lake-task-source.js +4 -6
- package/dist/adapters/task-sources/index.d.ts +1 -2
- package/dist/adapters/task-sources/index.js +1 -2
- package/dist/adapters/task-sources/repo-schemas.d.ts +1 -1
- package/dist/adapters/task-sources/repo-schemas.js +2 -2
- package/dist/adapters/task-sources/repo-task-source.js +1 -1
- package/dist/adapters/task-sources/repo-trigger.d.ts +1 -1
- package/dist/adapters/task-sources/repo-trigger.js +1 -1
- package/dist/adapters/task-sources/task-file-loader.d.ts +9 -6
- package/dist/adapters/task-sources/task-file-loader.js +20 -6
- package/dist/agent-observer/test-imports.d.ts +7 -0
- package/dist/agent-observer/test-imports.js +185 -0
- package/dist/artifact-capture/comparator.d.ts +22 -0
- package/dist/artifact-capture/comparator.js +493 -0
- package/dist/artifact-capture/filesystem-collector.d.ts +42 -0
- package/dist/artifact-capture/filesystem-collector.js +237 -0
- package/dist/artifact-capture/redact-artifact.d.ts +20 -0
- package/dist/artifact-capture/redact-artifact.js +115 -0
- package/dist/assertions/source-isolation.d.ts +1 -1
- package/dist/assertions/source-isolation.js +1 -1
- package/dist/cli.js +4 -0
- package/dist/commands/calculate-scores.js +1 -0
- package/dist/commands/capture-compare.d.ts +15 -0
- package/dist/commands/capture-compare.js +253 -0
- package/dist/commands/capture-list.d.ts +12 -0
- package/dist/commands/capture-list.js +147 -0
- package/dist/commands/capture.d.ts +9 -0
- package/dist/commands/capture.js +16 -0
- package/dist/commands/chronic-failures.d.ts +8 -0
- package/dist/commands/chronic-failures.js +33 -0
- package/dist/commands/explain-handler.d.ts +1 -1
- package/dist/commands/explain-handler.js +37 -8
- package/dist/commands/fetch-docs.js +1 -0
- package/dist/commands/generate-configs.d.ts +3 -3
- package/dist/commands/generate-configs.js +20 -8
- package/dist/commands/init.d.ts +2 -3
- package/dist/commands/init.js +56 -170
- package/dist/commands/pipeline-action.d.ts +7 -1
- package/dist/commands/pipeline-action.js +43 -19
- package/dist/commands/pipeline.d.ts +6 -1
- package/dist/commands/pipeline.js +7 -2
- package/dist/commands/pr-comment.js +1 -0
- package/dist/commands/publish.js +1 -0
- package/dist/commands/shared/help.js +2 -2
- package/dist/commands/update-quality-scores.d.ts +5 -0
- package/dist/commands/update-quality-scores.js +20 -0
- package/dist/composition-root.d.ts +2 -3
- package/dist/composition-root.js +27 -14
- package/dist/config/features.ts +23 -0
- package/dist/config/models.ts +100 -0
- package/dist/config/prompts.ts +16 -0
- package/dist/config/rubrics.ts +225 -0
- package/dist/config/schedules.ts +47 -0
- package/dist/config/sinks.ts +37 -0
- package/dist/config/sources.ts +21 -0
- package/dist/config/thresholds.ts +61 -0
- package/dist/lib/agent-behavior-report.d.ts +8 -0
- package/dist/lib/agent-behavior-report.js +185 -0
- package/dist/lib/baseline.d.ts +19 -0
- package/dist/lib/baseline.js +153 -0
- package/dist/lib/calculate-scores.d.ts +23 -0
- package/dist/lib/calculate-scores.js +42 -0
- package/dist/lib/compare.d.ts +18 -0
- package/dist/lib/compare.js +170 -0
- package/dist/lib/coverage-audit.d.ts +4 -0
- package/dist/lib/coverage-audit.js +42 -0
- package/dist/lib/discovery-report.d.ts +13 -0
- package/dist/lib/discovery-report.js +57 -0
- package/dist/lib/fetch-docs.d.ts +30 -0
- package/dist/lib/fetch-docs.js +171 -0
- package/dist/lib/generate-configs.d.ts +25 -0
- package/dist/lib/generate-configs.js +42 -0
- package/dist/lib/grader-api.d.ts +21 -0
- package/dist/lib/grader-api.js +34 -0
- package/dist/lib/grader-compare.d.ts +19 -0
- package/dist/lib/grader-compare.js +91 -0
- package/dist/lib/grader-consistency.d.ts +27 -0
- package/dist/lib/grader-consistency.js +79 -0
- package/dist/lib/grader-sensitivity.d.ts +19 -0
- package/dist/lib/grader-sensitivity.js +75 -0
- package/dist/lib/grader-validate.d.ts +19 -0
- package/dist/lib/grader-validate.js +78 -0
- package/dist/lib/measure-retrieval.d.ts +14 -0
- package/dist/lib/measure-retrieval.js +71 -0
- package/dist/lib/pr-comment.d.ts +16 -0
- package/dist/lib/pr-comment.js +28 -0
- package/dist/lib/readiness-report.d.ts +13 -0
- package/dist/lib/readiness-report.js +108 -0
- package/dist/lib/webhook-server.d.ts +11 -0
- package/dist/lib/webhook-server.js +24 -0
- package/dist/lib/weekly-digest.d.ts +24 -0
- package/dist/lib/weekly-digest.js +148 -0
- package/dist/orchestration/build-app-context.js +13 -0
- package/dist/orchestration/cache-context.d.ts +23 -0
- package/dist/orchestration/cache-context.js +43 -0
- package/dist/orchestration/env-bridge.d.ts +21 -0
- package/dist/orchestration/env-bridge.js +66 -0
- package/dist/orchestration/load-pipeline-tasks.d.ts +34 -0
- package/dist/orchestration/load-pipeline-tasks.js +52 -0
- package/dist/orchestration/pipeline-orchestrator.js +75 -5
- package/dist/orchestration/step-runner.js +5 -1
- package/dist/orchestration/steps/calculate-scores-step.d.ts +1 -0
- package/dist/orchestration/steps/calculate-scores-step.js +13 -0
- package/dist/orchestration/steps/callback-step.js +10 -1
- package/dist/orchestration/steps/compare-step.js +6 -3
- package/dist/orchestration/steps/discovery-report-step.js +6 -2
- package/dist/orchestration/steps/fetch-docs-shell.d.ts +17 -0
- package/dist/orchestration/steps/fetch-docs-shell.js +30 -0
- package/dist/orchestration/steps/fetch-docs-step.d.ts +1 -0
- package/dist/orchestration/steps/fetch-docs-step.js +30 -16
- package/dist/orchestration/steps/gap-analysis-step.js +13 -2
- package/dist/orchestration/steps/generate-configs-step.d.ts +1 -0
- package/dist/orchestration/steps/generate-configs-step.js +50 -15
- package/dist/orchestration/steps/mirror-repo-tasks-step.d.ts +1 -1
- package/dist/orchestration/steps/mirror-repo-tasks-step.js +1 -1
- package/dist/orchestration/steps/publish-report-step.js +19 -0
- package/dist/orchestration/steps/readiness-step.js +8 -3
- package/dist/orchestration/steps/report-step.js +17 -4
- package/dist/orchestration/steps/run-eval-step.d.ts +1 -0
- package/dist/orchestration/steps/run-eval-step.js +51 -31
- package/dist/pipeline/agent-behavior-report.js +6 -0
- package/dist/pipeline/attribution.d.ts +1 -1
- package/dist/pipeline/attribution.js +1 -1
- package/dist/pipeline/cache.js +29 -15
- package/dist/pipeline/calculate-scores.d.ts +2 -0
- package/dist/pipeline/calculate-scores.js +70 -33
- package/dist/pipeline/chronic-failures.d.ts +55 -0
- package/dist/pipeline/chronic-failures.js +110 -0
- package/dist/pipeline/compiler/__tests__/mcp-server-handler.test.js +33 -0
- package/dist/pipeline/compiler/__tests__/promptfoo-compiler.test.js +2 -3
- package/dist/pipeline/compiler/__tests__/task-bridge.test.d.ts +9 -0
- package/dist/pipeline/compiler/__tests__/task-bridge.test.js +339 -0
- package/dist/pipeline/compiler/__tests__/tool-loop-openai.test.d.ts +10 -0
- package/dist/pipeline/compiler/__tests__/tool-loop-openai.test.js +509 -0
- package/dist/pipeline/compiler/assertion-mapper.d.ts +1 -1
- package/dist/pipeline/compiler/assertion-mapper.js +1 -1
- package/dist/pipeline/compiler/compiler-to-yaml.d.ts +2 -7
- package/dist/pipeline/compiler/compiler-to-yaml.js +2 -7
- package/dist/pipeline/compiler/config-loader.d.ts +14 -0
- package/dist/pipeline/compiler/config-loader.js +42 -2
- package/dist/pipeline/compiler/fixture-resolver.d.ts +1 -1
- package/dist/pipeline/compiler/fixture-resolver.js +1 -1
- package/dist/pipeline/compiler/ignore-fields.d.ts +1 -1
- package/dist/pipeline/compiler/ignore-fields.js +1 -1
- package/dist/pipeline/compiler/index.d.ts +2 -5
- package/dist/pipeline/compiler/index.js +2 -5
- package/dist/pipeline/compiler/literacy-bridge.d.ts +1 -1
- package/dist/pipeline/compiler/literacy-bridge.js +1 -1
- package/dist/pipeline/compiler/mode-bases/agent-harness.d.ts +1 -1
- package/dist/pipeline/compiler/mode-bases/agent-harness.js +1 -1
- package/dist/pipeline/compiler/mode-bases/knowledge-probe.d.ts +1 -1
- package/dist/pipeline/compiler/mode-bases/knowledge-probe.js +1 -1
- package/dist/pipeline/compiler/mode-bases/literacy.d.ts +13 -2
- package/dist/pipeline/compiler/mode-bases/literacy.js +55 -1
- package/dist/pipeline/compiler/mode-bases/mcp-server.d.ts +1 -1
- package/dist/pipeline/compiler/mode-bases/mcp-server.js +1 -1
- package/dist/pipeline/compiler/mode-handlers/agent-harness/index.d.ts +1 -1
- package/dist/pipeline/compiler/mode-handlers/agent-harness/index.js +1 -1
- package/dist/pipeline/compiler/mode-handlers/agent-harness-handler.d.ts +70 -0
- package/dist/pipeline/compiler/mode-handlers/agent-harness-handler.js +485 -0
- package/dist/pipeline/compiler/mode-handlers/index.d.ts +2 -2
- package/dist/pipeline/compiler/mode-handlers/index.js +2 -2
- package/dist/pipeline/compiler/mode-handlers/knowledge-probe/index.d.ts +1 -1
- package/dist/pipeline/compiler/mode-handlers/knowledge-probe/index.js +1 -1
- package/dist/pipeline/compiler/mode-handlers/knowledge-probe-handler.d.ts +76 -0
- package/dist/pipeline/compiler/mode-handlers/knowledge-probe-handler.js +245 -0
- package/dist/pipeline/compiler/mode-handlers/literacy/index.d.ts +1 -1
- package/dist/pipeline/compiler/mode-handlers/literacy/index.js +1 -1
- package/dist/pipeline/compiler/mode-handlers/literacy-handler.d.ts +89 -0
- package/dist/pipeline/compiler/mode-handlers/literacy-handler.js +379 -0
- package/dist/pipeline/compiler/mode-handlers/mcp-assertions.d.ts +50 -0
- package/dist/pipeline/compiler/mode-handlers/mcp-assertions.js +334 -0
- package/dist/pipeline/compiler/mode-handlers/mcp-server/assertions.d.ts +1 -1
- package/dist/pipeline/compiler/mode-handlers/mcp-server/assertions.js +1 -1
- package/dist/pipeline/compiler/mode-handlers/mcp-server/index.d.ts +1 -1
- package/dist/pipeline/compiler/mode-handlers/mcp-server/index.js +1 -1
- package/dist/pipeline/compiler/mode-handlers/mcp-server/provider-config.js +4 -0
- package/dist/pipeline/compiler/mode-handlers/mcp-server-handler.d.ts +69 -0
- package/dist/pipeline/compiler/mode-handlers/mcp-server-handler.js +307 -0
- package/dist/pipeline/compiler/mode-handlers/mcp-tool-provider/index.js +22 -5
- package/dist/pipeline/compiler/mode-handlers/mcp-tool-provider/mcp-connection.js +6 -0
- package/dist/pipeline/compiler/mode-handlers/mcp-tool-provider/tool-loop-openai.d.ts +10 -5
- package/dist/pipeline/compiler/mode-handlers/mcp-tool-provider/tool-loop-openai.js +314 -7
- package/dist/pipeline/compiler/mode-handlers/mcp-tool-provider/types.d.ts +10 -0
- package/dist/pipeline/compiler/mode-handlers/mcp-tool-provider.d.ts +65 -0
- package/dist/pipeline/compiler/mode-handlers/mcp-tool-provider.js +368 -0
- package/dist/pipeline/compiler/presets/sanity-literacy.d.ts +1 -1
- package/dist/pipeline/compiler/presets/sanity-literacy.js +1 -1
- package/dist/pipeline/compiler/promptfoo-compiler.d.ts +1 -4
- package/dist/pipeline/compiler/promptfoo-compiler.js +3 -12
- package/dist/pipeline/compiler/provider-assembler.js +13 -7
- package/dist/pipeline/compiler/sandbox/docker-sandbox.d.ts +1 -1
- package/dist/pipeline/compiler/sandbox/docker-sandbox.js +1 -1
- package/dist/pipeline/compiler/sandbox/fixture-provisioner.d.ts +1 -1
- package/dist/pipeline/compiler/sandbox/fixture-provisioner.js +1 -1
- package/dist/pipeline/compiler/sandbox/git-worktree-sandbox.d.ts +1 -1
- package/dist/pipeline/compiler/sandbox/git-worktree-sandbox.js +1 -1
- package/dist/pipeline/compiler/sandbox/index.d.ts +1 -1
- package/dist/pipeline/compiler/sandbox/index.js +1 -1
- package/dist/pipeline/compiler/sandbox/sandbox-selector.d.ts +1 -1
- package/dist/pipeline/compiler/sandbox/sandbox-selector.js +1 -1
- package/dist/pipeline/compiler/sandbox/sandbox-strategy.d.ts +1 -1
- package/dist/pipeline/compiler/sandbox/sandbox-strategy.js +1 -1
- package/dist/pipeline/compiler/sandbox/tempdir-sandbox.d.ts +1 -1
- package/dist/pipeline/compiler/sandbox/tempdir-sandbox.js +1 -1
- package/dist/pipeline/compiler/scoring-bridge.d.ts +1 -1
- package/dist/pipeline/compiler/scoring-bridge.js +1 -1
- package/dist/pipeline/compiler/task-bridge.d.ts +41 -0
- package/dist/pipeline/compiler/task-bridge.js +92 -0
- package/dist/pipeline/compiler/task-graph-builder.d.ts +1 -4
- package/dist/pipeline/compiler/task-graph-builder.js +1 -4
- package/dist/pipeline/compiler/telemetry/index.d.ts +1 -1
- package/dist/pipeline/compiler/telemetry/index.js +1 -1
- package/dist/pipeline/compiler/variable-resolver.d.ts +1 -1
- package/dist/pipeline/compiler/variable-resolver.js +1 -1
- package/dist/pipeline/coverage-audit.d.ts +1 -1
- package/dist/pipeline/coverage-audit.js +1 -1
- package/dist/pipeline/degradations.d.ts +1 -1
- package/dist/pipeline/degradations.js +1 -1
- package/dist/pipeline/failure-modes.d.ts +1 -1
- package/dist/pipeline/failure-modes.js +13 -1
- package/dist/pipeline/gap-analysis.d.ts +1 -1
- package/dist/pipeline/gap-analysis.js +3 -1
- package/dist/pipeline/generate-configs.d.ts +2 -2
- package/dist/pipeline/generate-configs.js +15 -8
- package/dist/pipeline/grader-compare-runner.d.ts +1 -1
- package/dist/pipeline/grader-compare-runner.js +7 -1
- package/dist/pipeline/grader-comparison.d.ts +1 -1
- package/dist/pipeline/grader-comparison.js +1 -1
- package/dist/pipeline/grader-consistency-runner.d.ts +1 -1
- package/dist/pipeline/grader-consistency-runner.js +7 -1
- package/dist/pipeline/grader-consistency.d.ts +1 -1
- package/dist/pipeline/grader-consistency.js +1 -1
- package/dist/pipeline/grader-sensitivity-runner.d.ts +1 -1
- package/dist/pipeline/grader-sensitivity-runner.js +1 -1
- package/dist/pipeline/grader-sensitivity.d.ts +1 -1
- package/dist/pipeline/grader-sensitivity.js +1 -1
- package/dist/pipeline/grader-validate-runner.d.ts +1 -1
- package/dist/pipeline/grader-validate-runner.js +2 -2
- package/dist/pipeline/grader-validation.d.ts +1 -1
- package/dist/pipeline/grader-validation.js +1 -1
- package/dist/pipeline/map-request-to-config.js +15 -2
- package/dist/pipeline/mirror-repo-tasks.d.ts +1 -1
- package/dist/pipeline/mirror-repo-tasks.js +1 -1
- package/dist/pipeline/plan-format.d.ts +1 -1
- package/dist/pipeline/plan-format.js +1 -1
- package/dist/pipeline/plan.d.ts +1 -1
- package/dist/pipeline/plan.js +67 -29
- package/dist/pipeline/probe.d.ts +1 -1
- package/dist/pipeline/probe.js +1 -1
- package/dist/pipeline/readiness-report.d.ts +2 -2
- package/dist/pipeline/readiness-report.js +2 -2
- package/dist/pipeline/release-classification.d.ts +1 -1
- package/dist/pipeline/release-classification.js +1 -1
- package/dist/pipeline/release-report.d.ts +1 -1
- package/dist/pipeline/release-report.js +1 -1
- package/dist/pipeline/repo-eval-comment.d.ts +1 -1
- package/dist/pipeline/repo-eval-comment.js +1 -1
- package/dist/pipeline/repo-threshold-evaluator.d.ts +1 -1
- package/dist/pipeline/repo-threshold-evaluator.js +1 -1
- package/dist/pipeline/resolve-mappings.d.ts +6 -6
- package/dist/pipeline/resolve-mappings.js +44 -44
- package/dist/pipeline/retrieval-metrics.d.ts +3 -3
- package/dist/pipeline/retrieval-metrics.js +28 -20
- package/dist/pipeline/steps/calculate-scores-step.d.ts +11 -0
- package/dist/pipeline/steps/calculate-scores-step.js +89 -0
- package/dist/pipeline/steps/compare-step.d.ts +18 -0
- package/dist/pipeline/steps/compare-step.js +90 -0
- package/dist/pipeline/steps/eval-step.d.ts +53 -0
- package/dist/pipeline/steps/eval-step.js +347 -0
- package/dist/pipeline/steps/fetch-docs-step.d.ts +11 -0
- package/dist/pipeline/steps/fetch-docs-step.js +84 -0
- package/dist/pipeline/steps/generate-configs-step.d.ts +11 -0
- package/dist/pipeline/steps/generate-configs-step.js +98 -0
- package/dist/pipeline/steps/grader-consistency-step.d.ts +21 -0
- package/dist/pipeline/steps/grader-consistency-step.js +74 -0
- package/dist/pipeline/steps/publish-report-step.d.ts +57 -0
- package/dist/pipeline/steps/publish-report-step.js +243 -0
- package/dist/pipeline/steps/report-step.d.ts +13 -0
- package/dist/pipeline/steps/report-step.js +56 -0
- package/dist/pipeline/steps/update-scores-step.d.ts +11 -0
- package/dist/pipeline/steps/update-scores-step.js +42 -0
- package/dist/pipeline/targeted-loo.d.ts +1 -1
- package/dist/pipeline/targeted-loo.js +1 -1
- package/dist/pipeline/thresholds.d.ts +1 -1
- package/dist/pipeline/thresholds.js +1 -1
- package/dist/pipeline/validate.js +13 -0
- package/dist/report-store.d.ts +17 -0
- package/dist/report-store.js +24 -0
- package/dist/scripts/agent-behavior-report.d.ts +19 -0
- package/dist/scripts/agent-behavior-report.js +315 -0
- package/dist/scripts/baseline.d.ts +43 -0
- package/dist/scripts/baseline.js +267 -0
- package/dist/scripts/calculate-scores.d.ts +166 -0
- package/dist/scripts/calculate-scores.js +1296 -0
- package/dist/scripts/compare.d.ts +22 -0
- package/dist/scripts/compare.js +334 -0
- package/dist/scripts/coverage-audit.d.ts +44 -0
- package/dist/scripts/coverage-audit.js +209 -0
- package/dist/scripts/debug-eval.d.ts +19 -0
- package/dist/scripts/debug-eval.js +73 -0
- package/dist/scripts/discovery-report.d.ts +58 -0
- package/dist/scripts/discovery-report.js +250 -0
- package/dist/scripts/fetch-docs.d.ts +35 -0
- package/dist/scripts/fetch-docs.js +472 -0
- package/dist/scripts/generate-configs.d.ts +66 -0
- package/dist/scripts/generate-configs.js +459 -0
- package/dist/scripts/grader-api.d.ts +27 -0
- package/dist/scripts/grader-api.js +206 -0
- package/dist/scripts/grader-compare.d.ts +22 -0
- package/dist/scripts/grader-compare.js +368 -0
- package/dist/scripts/grader-consistency.d.ts +20 -0
- package/dist/scripts/grader-consistency.js +313 -0
- package/dist/scripts/grader-sensitivity.d.ts +22 -0
- package/dist/scripts/grader-sensitivity.js +354 -0
- package/dist/scripts/grader-validate.d.ts +19 -0
- package/dist/scripts/grader-validate.js +267 -0
- package/dist/scripts/measure-retrieval.d.ts +10 -0
- package/dist/scripts/measure-retrieval.js +145 -0
- package/dist/scripts/migrate-task-mode.d.ts +1 -1
- package/dist/scripts/migrate-task-mode.js +1 -1
- package/dist/scripts/migrate-tasks-to-content-lake.d.ts +1 -1
- package/dist/scripts/migrate-tasks-to-content-lake.js +1 -1
- package/dist/scripts/pipeline.d.ts +76 -0
- package/dist/scripts/pipeline.js +1031 -0
- package/dist/scripts/pr-comment.d.ts +10 -0
- package/dist/scripts/pr-comment.js +510 -0
- package/dist/scripts/readiness-report.d.ts +88 -0
- package/dist/scripts/readiness-report.js +342 -0
- package/dist/scripts/update-quality-scores.d.ts +15 -0
- package/dist/scripts/update-quality-scores.js +184 -0
- package/dist/scripts/validate-task-sources.d.ts +1 -1
- package/dist/scripts/validate-task-sources.js +1 -1
- package/dist/scripts/validate.d.ts +13 -0
- package/dist/scripts/validate.js +79 -0
- package/dist/scripts/webhook-server.d.ts +26 -0
- package/dist/scripts/webhook-server.js +147 -0
- package/dist/scripts/weekly-digest.d.ts +24 -0
- package/dist/scripts/weekly-digest.js +144 -0
- package/dist/sinks/format-slack.d.ts +64 -0
- package/dist/sinks/format-slack.js +306 -0
- package/dist/sinks/slack-sink.d.ts +27 -0
- package/dist/sinks/slack-sink.js +78 -0
- package/dist/sinks/types.d.ts +1 -1
- package/dist/sinks/types.js +1 -1
- package/dist/sinks/webhook-sink.d.ts +19 -0
- package/dist/sinks/webhook-sink.js +50 -0
- package/dist/tasks/knowledge-probe/define-type-api.task.ts +66 -0
- package/dist/tasks/knowledge-probe/groq-projections.task.ts +62 -0
- package/dist/tasks/literacy/content-lake.task.ts +181 -0
- package/dist/tasks/literacy/frameworks.task.ts +129 -0
- package/dist/tasks/literacy/functions.task.ts +70 -0
- package/dist/tasks/literacy/groq.task.ts +259 -0
- package/dist/tasks/literacy/image-handling.task.ts +95 -0
- package/dist/tasks/literacy/nextjs-live.task.ts +76 -0
- package/dist/tasks/literacy/portable-text.task.ts +169 -0
- package/dist/tasks/literacy/studio-setup.task.ts +134 -0
- package/dist/tasks/literacy/visual-editing.task.ts +147 -0
- package/package.json +24 -24
- package/tasks/.expanded.agentic.yaml +280 -0
- package/tasks/.expanded.yaml +565 -0
- package/tasks/knowledge-probe/define-type-api.task.ts +11 -0
- package/tasks/knowledge-probe/groq-projections.task.ts +3 -0
- package/tasks/literacy/content-lake.task.ts +181 -0
- package/tasks/literacy/frameworks.task.ts +1 -0
- package/tasks/literacy/functions.task.ts +1 -0
- package/tasks/literacy/groq.task.ts +1 -0
- package/tasks/literacy/image-handling.task.ts +95 -0
- package/tasks/literacy/nextjs-live.task.ts +2 -1
- package/tasks/literacy/portable-text.task.ts +169 -0
- package/tasks/literacy/studio-setup.task.ts +5 -2
- package/tasks/literacy/visual-editing.task.ts +1 -0
- package/LICENSE +0 -21
- package/tasks/frameworks.yaml +0 -98
- package/tasks/functions.yaml +0 -51
- package/tasks/groq.yaml +0 -216
- package/tasks/nextjs-live.yaml +0 -62
- package/tasks/studio-setup.yaml +0 -111
- package/tasks/visual-editing.yaml +0 -120
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FilesystemArtifactCollector — writes captured artifacts to a local directory.
|
|
3
|
+
*
|
|
4
|
+
* Accumulates artifact entries in memory during pipeline execution.
|
|
5
|
+
* On flush(), creates a structured directory with one subdirectory per
|
|
6
|
+
* step, writes all artifacts, and generates a manifest.json.
|
|
7
|
+
*
|
|
8
|
+
* Design principles:
|
|
9
|
+
* - capture() and captureFile() are synchronous (no I/O during step execution)
|
|
10
|
+
* - flush() does all I/O at pipeline end
|
|
11
|
+
* - Failures in capture/captureFile are swallowed (P5: non-blocking)
|
|
12
|
+
*/
|
|
13
|
+
import { execFileSync } from "node:child_process";
|
|
14
|
+
import { copyFileSync, mkdirSync, readFileSync, rmSync, statSync, writeFileSync, } from "node:fs";
|
|
15
|
+
import path from "node:path";
|
|
16
|
+
import { redactArtifactData } from "./redact-artifact.js";
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
// Timestamp-prefixed capture ID (same shape as report-store.ts IDs)
|
|
19
|
+
// ---------------------------------------------------------------------------
|
|
20
|
+
function generateCaptureId() {
|
|
21
|
+
const now = Date.now();
|
|
22
|
+
const uuid = crypto.randomUUID();
|
|
23
|
+
const hex = now.toString(16).padStart(12, "0");
|
|
24
|
+
return (hex.slice(0, 8) +
|
|
25
|
+
"-" +
|
|
26
|
+
hex.slice(8, 12) +
|
|
27
|
+
"-7" +
|
|
28
|
+
uuid.slice(15, 18) +
|
|
29
|
+
"-" +
|
|
30
|
+
uuid.slice(19, 23) +
|
|
31
|
+
"-" +
|
|
32
|
+
uuid.slice(24));
|
|
33
|
+
}
|
|
34
|
+
function formatTimestamp(date) {
|
|
35
|
+
const y = date.getFullYear();
|
|
36
|
+
const m = String(date.getMonth() + 1).padStart(2, "0");
|
|
37
|
+
const d = String(date.getDate()).padStart(2, "0");
|
|
38
|
+
const h = String(date.getHours()).padStart(2, "0");
|
|
39
|
+
const min = String(date.getMinutes()).padStart(2, "0");
|
|
40
|
+
const s = String(date.getSeconds()).padStart(2, "0");
|
|
41
|
+
return `${y}${m}${d}-${h}${min}${s}`;
|
|
42
|
+
}
|
|
43
|
+
function detectFormat(entry) {
|
|
44
|
+
if (entry.filePath) {
|
|
45
|
+
const ext = path.extname(entry.filePath).toLowerCase();
|
|
46
|
+
if (ext === ".json")
|
|
47
|
+
return "json";
|
|
48
|
+
if (ext === ".md")
|
|
49
|
+
return "markdown";
|
|
50
|
+
if (ext === ".yaml" || ext === ".yml")
|
|
51
|
+
return "text";
|
|
52
|
+
return "text";
|
|
53
|
+
}
|
|
54
|
+
// In-memory data — if it's an object/array, it's JSON
|
|
55
|
+
if (typeof entry.data === "object" && entry.data !== null)
|
|
56
|
+
return "json";
|
|
57
|
+
return "text";
|
|
58
|
+
}
|
|
59
|
+
function fileExtension(format) {
|
|
60
|
+
switch (format) {
|
|
61
|
+
case "json":
|
|
62
|
+
return ".json";
|
|
63
|
+
case "markdown":
|
|
64
|
+
return ".md";
|
|
65
|
+
default:
|
|
66
|
+
return ".txt";
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// ---------------------------------------------------------------------------
|
|
70
|
+
// Collector
|
|
71
|
+
// ---------------------------------------------------------------------------
|
|
72
|
+
export class FilesystemArtifactCollector {
|
|
73
|
+
enabled = true;
|
|
74
|
+
extrasEnabled;
|
|
75
|
+
entries = [];
|
|
76
|
+
captureId;
|
|
77
|
+
outputDir;
|
|
78
|
+
startedAt;
|
|
79
|
+
options;
|
|
80
|
+
constructor(options) {
|
|
81
|
+
this.options = options;
|
|
82
|
+
this.extrasEnabled = options.extras;
|
|
83
|
+
this.captureId = generateCaptureId();
|
|
84
|
+
this.startedAt = new Date().toISOString();
|
|
85
|
+
// Use the last 4 hex chars (from the random UUID portion) — the first
|
|
86
|
+
// chars are timestamp-derived and change too slowly to disambiguate.
|
|
87
|
+
const shortId = this.captureId.replace(/-/g, "").slice(-4);
|
|
88
|
+
const timestamp = formatTimestamp(new Date());
|
|
89
|
+
this.outputDir = path.join(options.captureDir, `${options.mode}-${timestamp}-${shortId}`);
|
|
90
|
+
}
|
|
91
|
+
capture(step, type, data, meta) {
|
|
92
|
+
try {
|
|
93
|
+
this.entries.push({
|
|
94
|
+
step,
|
|
95
|
+
type,
|
|
96
|
+
data,
|
|
97
|
+
meta,
|
|
98
|
+
capturedAt: new Date().toISOString(),
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
// P5: non-blocking — swallow capture errors
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
captureFile(step, type, filePath, meta) {
|
|
106
|
+
try {
|
|
107
|
+
this.entries.push({
|
|
108
|
+
step,
|
|
109
|
+
type,
|
|
110
|
+
filePath,
|
|
111
|
+
meta,
|
|
112
|
+
capturedAt: new Date().toISOString(),
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
// P5: non-blocking — swallow capture errors
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
async flush() {
|
|
120
|
+
const manifestEntries = [];
|
|
121
|
+
let totalBytes = 0;
|
|
122
|
+
// Create the root output directory
|
|
123
|
+
mkdirSync(this.outputDir, { recursive: true });
|
|
124
|
+
for (const entry of this.entries) {
|
|
125
|
+
try {
|
|
126
|
+
const format = detectFormat(entry);
|
|
127
|
+
const ext = entry.filePath
|
|
128
|
+
? path.extname(entry.filePath)
|
|
129
|
+
: fileExtension(format);
|
|
130
|
+
const relativePath = path.join(entry.step, `${entry.type}${ext}`);
|
|
131
|
+
const absolutePath = path.join(this.outputDir, relativePath);
|
|
132
|
+
// Ensure step subdirectory exists
|
|
133
|
+
mkdirSync(path.dirname(absolutePath), { recursive: true });
|
|
134
|
+
// Write the artifact — JSON artifacts are redacted before persistence
|
|
135
|
+
let bytes;
|
|
136
|
+
if (entry.filePath && format === "json") {
|
|
137
|
+
// JSON file on disk: read → parse → redact → write
|
|
138
|
+
const raw = readFileSync(entry.filePath, "utf-8");
|
|
139
|
+
try {
|
|
140
|
+
const parsed = JSON.parse(raw);
|
|
141
|
+
const redacted = redactArtifactData(parsed);
|
|
142
|
+
const content = JSON.stringify(redacted, null, 2);
|
|
143
|
+
writeFileSync(absolutePath, content, "utf-8");
|
|
144
|
+
bytes = Buffer.byteLength(content, "utf-8");
|
|
145
|
+
}
|
|
146
|
+
catch {
|
|
147
|
+
// Unparseable JSON — copy as-is (comparator will scan it later)
|
|
148
|
+
copyFileSync(entry.filePath, absolutePath);
|
|
149
|
+
bytes = statSync(absolutePath).size;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
else if (entry.filePath) {
|
|
153
|
+
// Non-JSON file: copy as-is
|
|
154
|
+
copyFileSync(entry.filePath, absolutePath);
|
|
155
|
+
bytes = statSync(absolutePath).size;
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
let content;
|
|
159
|
+
if (format === "json") {
|
|
160
|
+
try {
|
|
161
|
+
content = JSON.stringify(redactArtifactData(entry.data), null, 2);
|
|
162
|
+
}
|
|
163
|
+
catch {
|
|
164
|
+
// Fallback: serialize unredacted (e.g., circular references)
|
|
165
|
+
content = JSON.stringify(entry.data, null, 2);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
content = String(entry.data ?? "");
|
|
170
|
+
}
|
|
171
|
+
writeFileSync(absolutePath, content, "utf-8");
|
|
172
|
+
bytes = Buffer.byteLength(content, "utf-8");
|
|
173
|
+
}
|
|
174
|
+
totalBytes += bytes;
|
|
175
|
+
manifestEntries.push({
|
|
176
|
+
step: entry.step,
|
|
177
|
+
type: entry.type,
|
|
178
|
+
path: relativePath,
|
|
179
|
+
capturedAt: entry.capturedAt,
|
|
180
|
+
bytes,
|
|
181
|
+
format,
|
|
182
|
+
...(entry.meta ? { meta: entry.meta } : {}),
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
catch {
|
|
186
|
+
// P5: skip individual artifact failures, continue with the rest
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
// Write manifest
|
|
190
|
+
const manifest = {
|
|
191
|
+
version: 1,
|
|
192
|
+
captureId: this.captureId,
|
|
193
|
+
startedAt: this.startedAt,
|
|
194
|
+
completedAt: new Date().toISOString(),
|
|
195
|
+
pipeline: {
|
|
196
|
+
mode: this.options.mode,
|
|
197
|
+
...(this.options.pipeline?.variant
|
|
198
|
+
? { variant: this.options.pipeline.variant }
|
|
199
|
+
: {}),
|
|
200
|
+
...(this.options.pipeline?.source
|
|
201
|
+
? { source: this.options.pipeline.source }
|
|
202
|
+
: {}),
|
|
203
|
+
...(this.options.pipeline?.areas
|
|
204
|
+
? { areas: this.options.pipeline.areas }
|
|
205
|
+
: {}),
|
|
206
|
+
},
|
|
207
|
+
artifacts: manifestEntries,
|
|
208
|
+
};
|
|
209
|
+
const manifestContent = JSON.stringify(manifest, null, 2);
|
|
210
|
+
writeFileSync(path.join(this.outputDir, "manifest.json"), manifestContent, "utf-8");
|
|
211
|
+
// Compress to tar.gz if configured
|
|
212
|
+
if (this.options.compress) {
|
|
213
|
+
try {
|
|
214
|
+
const archivePath = `${this.outputDir}.tar.gz`;
|
|
215
|
+
const parentDir = path.dirname(this.outputDir);
|
|
216
|
+
const dirName = path.basename(this.outputDir);
|
|
217
|
+
execFileSync("tar", ["-czf", archivePath, "-C", parentDir, dirName]);
|
|
218
|
+
rmSync(this.outputDir, { recursive: true });
|
|
219
|
+
return {
|
|
220
|
+
artifactCount: manifestEntries.length,
|
|
221
|
+
destination: archivePath,
|
|
222
|
+
totalBytes,
|
|
223
|
+
compressed: true,
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
catch {
|
|
227
|
+
// Non-blocking: compression failed, keep the raw directory
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
return {
|
|
231
|
+
artifactCount: manifestEntries.length,
|
|
232
|
+
destination: this.outputDir,
|
|
233
|
+
totalBytes,
|
|
234
|
+
compressed: false,
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Artifact redaction — strips sensitive data from captured artifacts before
|
|
3
|
+
* they are written to disk.
|
|
4
|
+
*
|
|
5
|
+
* Applied during FilesystemArtifactCollector.flush() so that secrets
|
|
6
|
+
* (resolved env vars, auth headers, session cookies) never reach storage.
|
|
7
|
+
*
|
|
8
|
+
* Two-layer approach:
|
|
9
|
+
* 1. **Header stripping** — known-sensitive HTTP header keys are replaced
|
|
10
|
+
* with "[REDACTED]" regardless of value.
|
|
11
|
+
* 2. **Value-pattern redaction** — string values anywhere in the JSON tree
|
|
12
|
+
* that match known secret formats are replaced with "[REDACTED]".
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* Deep-clone and redact a parsed JSON artifact.
|
|
16
|
+
*
|
|
17
|
+
* Safe to call on any artifact format — non-object inputs are returned
|
|
18
|
+
* as-is (nothing to redact in a plain string or number).
|
|
19
|
+
*/
|
|
20
|
+
export declare function redactArtifactData(data: unknown): unknown;
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Artifact redaction — strips sensitive data from captured artifacts before
|
|
3
|
+
* they are written to disk.
|
|
4
|
+
*
|
|
5
|
+
* Applied during FilesystemArtifactCollector.flush() so that secrets
|
|
6
|
+
* (resolved env vars, auth headers, session cookies) never reach storage.
|
|
7
|
+
*
|
|
8
|
+
* Two-layer approach:
|
|
9
|
+
* 1. **Header stripping** — known-sensitive HTTP header keys are replaced
|
|
10
|
+
* with "[REDACTED]" regardless of value.
|
|
11
|
+
* 2. **Value-pattern redaction** — string values anywhere in the JSON tree
|
|
12
|
+
* that match known secret formats are replaced with "[REDACTED]".
|
|
13
|
+
*/
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
// Sensitive HTTP header keys (case-insensitive)
|
|
16
|
+
// ---------------------------------------------------------------------------
|
|
17
|
+
/**
|
|
18
|
+
* HTTP headers that should always be redacted in captured artifacts.
|
|
19
|
+
*
|
|
20
|
+
* Stored lower-cased; lookup is done after lower-casing the key. This is
|
|
21
|
+
* intentionally a blocklist rather than an allowlist so that debugging-useful
|
|
22
|
+
* headers (x-request-id, content-type, etc.) are preserved.
|
|
23
|
+
*/
|
|
24
|
+
const SENSITIVE_HEADER_KEYS = new Set([
|
|
25
|
+
"authorization",
|
|
26
|
+
"proxy-authorization",
|
|
27
|
+
"cookie",
|
|
28
|
+
"set-cookie",
|
|
29
|
+
"x-api-key",
|
|
30
|
+
"x-auth-token",
|
|
31
|
+
]);
|
|
32
|
+
// ---------------------------------------------------------------------------
|
|
33
|
+
// Secret value patterns (same family as comparator + telemetry redactor)
|
|
34
|
+
// ---------------------------------------------------------------------------
|
|
35
|
+
const SECRET_VALUE_PATTERNS = [
|
|
36
|
+
/^Bearer\s+\S{20,}/, // Authorization header values
|
|
37
|
+
/^Basic\s+[A-Za-z0-9+/=]{20,}/, // Basic auth
|
|
38
|
+
/^sk-[a-zA-Z0-9_-]{20,}/, // OpenAI-style keys
|
|
39
|
+
/^sk[A-Z][a-zA-Z0-9]{20,}/, // Sanity-style tokens
|
|
40
|
+
/^sk-ant-[a-zA-Z0-9_-]{20,}/, // Anthropic keys
|
|
41
|
+
/^xoxb-/, // Slack bot tokens
|
|
42
|
+
/^ghp_/, // GitHub personal tokens
|
|
43
|
+
/^ghs_/, // GitHub server-to-server tokens
|
|
44
|
+
/^AKIA[A-Z0-9]{12,}/, // AWS access keys
|
|
45
|
+
];
|
|
46
|
+
const REDACTED = "[REDACTED]";
|
|
47
|
+
// ---------------------------------------------------------------------------
|
|
48
|
+
// Public API
|
|
49
|
+
// ---------------------------------------------------------------------------
|
|
50
|
+
/**
|
|
51
|
+
* Deep-clone and redact a parsed JSON artifact.
|
|
52
|
+
*
|
|
53
|
+
* Safe to call on any artifact format — non-object inputs are returned
|
|
54
|
+
* as-is (nothing to redact in a plain string or number).
|
|
55
|
+
*/
|
|
56
|
+
export function redactArtifactData(data) {
|
|
57
|
+
if (data === null || data === undefined)
|
|
58
|
+
return data;
|
|
59
|
+
if (typeof data !== "object") {
|
|
60
|
+
// Scalar — check value patterns
|
|
61
|
+
if (typeof data === "string")
|
|
62
|
+
return redactStringValue(data);
|
|
63
|
+
return data;
|
|
64
|
+
}
|
|
65
|
+
// Deep-clone first so we never mutate the original
|
|
66
|
+
return walkAndRedact(JSON.parse(JSON.stringify(data)));
|
|
67
|
+
}
|
|
68
|
+
// ---------------------------------------------------------------------------
|
|
69
|
+
// Internals
|
|
70
|
+
// ---------------------------------------------------------------------------
|
|
71
|
+
function redactStringValue(value) {
|
|
72
|
+
for (const pattern of SECRET_VALUE_PATTERNS) {
|
|
73
|
+
if (pattern.test(value))
|
|
74
|
+
return REDACTED;
|
|
75
|
+
}
|
|
76
|
+
return value;
|
|
77
|
+
}
|
|
78
|
+
/** Returns true if the key is a known-sensitive HTTP header name. */
|
|
79
|
+
function isSensitiveHeaderKey(key) {
|
|
80
|
+
return SENSITIVE_HEADER_KEYS.has(key.toLowerCase());
|
|
81
|
+
}
|
|
82
|
+
function walkAndRedact(node) {
|
|
83
|
+
if (node === null || node === undefined)
|
|
84
|
+
return node;
|
|
85
|
+
if (typeof node === "string") {
|
|
86
|
+
return redactStringValue(node);
|
|
87
|
+
}
|
|
88
|
+
if (Array.isArray(node)) {
|
|
89
|
+
for (let i = 0; i < node.length; i++) {
|
|
90
|
+
node[i] = walkAndRedact(node[i]);
|
|
91
|
+
}
|
|
92
|
+
return node;
|
|
93
|
+
}
|
|
94
|
+
if (typeof node === "object") {
|
|
95
|
+
const obj = node;
|
|
96
|
+
for (const key of Object.keys(obj)) {
|
|
97
|
+
// Layer 1: strip sensitive HTTP headers by key name
|
|
98
|
+
if (isSensitiveHeaderKey(key)) {
|
|
99
|
+
const val = obj[key];
|
|
100
|
+
if (typeof val === "string") {
|
|
101
|
+
obj[key] = REDACTED;
|
|
102
|
+
}
|
|
103
|
+
else if (Array.isArray(val)) {
|
|
104
|
+
// Some HTTP parsers serialize set-cookie as string[]
|
|
105
|
+
obj[key] = val.map((v) => (typeof v === "string" ? REDACTED : v));
|
|
106
|
+
}
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
// Layer 2: recurse and apply value-pattern redaction
|
|
110
|
+
obj[key] = walkAndRedact(obj[key]);
|
|
111
|
+
}
|
|
112
|
+
return obj;
|
|
113
|
+
}
|
|
114
|
+
return node;
|
|
115
|
+
}
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* The assertion has weight: 0 — it doesn't affect scores. It surfaces
|
|
11
11
|
* as an advisory pass/fail signal in results.
|
|
12
12
|
*
|
|
13
|
-
* @see docs/exec-plans/source-aware-eval-isolation.md (Phase 3b)
|
|
13
|
+
* @see docs/archive/exec-plans/source-aware-eval-isolation.md (Phase 3b)
|
|
14
14
|
*/
|
|
15
15
|
export interface SourceIsolationReport {
|
|
16
16
|
blocked: number;
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* The assertion has weight: 0 — it doesn't affect scores. It surfaces
|
|
11
11
|
* as an advisory pass/fail signal in results.
|
|
12
12
|
*
|
|
13
|
-
* @see docs/exec-plans/source-aware-eval-isolation.md (Phase 3b)
|
|
13
|
+
* @see docs/archive/exec-plans/source-aware-eval-isolation.md (Phase 3b)
|
|
14
14
|
*/
|
|
15
15
|
import { isAllowedOrigin } from "../sources.js";
|
|
16
16
|
/**
|
package/dist/cli.js
CHANGED
|
@@ -137,6 +137,8 @@ program.addCommand(createPublishCommand().helpGroup(CommandGroup.CoreWorkflow));
|
|
|
137
137
|
// ── Analysis & Reports ────────────────────────────────────────────────
|
|
138
138
|
import { createReadinessReportCommand } from "./commands/readiness-report.js";
|
|
139
139
|
program.addCommand(createReadinessReportCommand().helpGroup(CommandGroup.AnalysisReports));
|
|
140
|
+
import { createChronicFailuresCommand } from "./commands/chronic-failures.js";
|
|
141
|
+
program.addCommand(createChronicFailuresCommand().helpGroup(CommandGroup.AnalysisReports));
|
|
140
142
|
import { createCoverageAuditCommand } from "./commands/coverage-audit.js";
|
|
141
143
|
program.addCommand(createCoverageAuditCommand().helpGroup(CommandGroup.AnalysisReports));
|
|
142
144
|
import { createDiscoveryReportCommand } from "./commands/discovery-report.js";
|
|
@@ -173,6 +175,8 @@ program.addCommand(createLookupDocCommand().helpGroup(CommandGroup.PipelineInter
|
|
|
173
175
|
import { createWebhookServerCommand } from "./commands/webhook-server.js";
|
|
174
176
|
program.addCommand(createWebhookServerCommand().helpGroup(CommandGroup.PipelineInternals));
|
|
175
177
|
// ── Developer Tools ───────────────────────────────────────────────────
|
|
178
|
+
import { createCaptureCommand } from "./commands/capture.js";
|
|
179
|
+
program.addCommand(createCaptureCommand().helpGroup(CommandGroup.DeveloperTools));
|
|
176
180
|
import { createInteractiveCommand } from "./commands/interactive.js";
|
|
177
181
|
program.addCommand(createInteractiveCommand().helpGroup(CommandGroup.DeveloperTools));
|
|
178
182
|
// Shell completion — must be registered last (needs full program tree)
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* capture compare — compare two pipeline capture directories.
|
|
3
|
+
*
|
|
4
|
+
* Reads manifest.json from both captures, runs compareCaptures(),
|
|
5
|
+
* and prints a human-readable table or JSON diff report.
|
|
6
|
+
*
|
|
7
|
+
* Supports both raw directories and .tar.gz archives.
|
|
8
|
+
*
|
|
9
|
+
* Exit codes:
|
|
10
|
+
* 0 — captures are equivalent
|
|
11
|
+
* 1 — differences found
|
|
12
|
+
* 2 — error (missing files, invalid manifest, etc.)
|
|
13
|
+
*/
|
|
14
|
+
import { Command } from "commander";
|
|
15
|
+
export declare function createCaptureCompareCommand(): Command;
|