@sanity/ailf 0.1.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/README.md +89 -0
- package/bin/ailf.js +64 -0
- package/canonical/grader-references/README.md +88 -0
- package/canonical/grader-references/groq.yaml +234 -0
- package/canonical/grader-references/studio-setup.yaml +275 -0
- package/canonical/reference-solutions/.gitkeep +1 -0
- package/canonical/reference-solutions/frameworks/nuxt.ts +119 -0
- package/canonical/reference-solutions/frameworks/remix.tsx +100 -0
- package/canonical/reference-solutions/functions/publish-webhook.ts +60 -0
- package/canonical/reference-solutions/groq/advanced-filtering.ts +379 -0
- package/canonical/reference-solutions/groq/blog-queries.ts +137 -0
- package/canonical/reference-solutions/groq/joins-references.ts +300 -0
- package/canonical/reference-solutions/nextjs/app-router-integration.tsx +128 -0
- package/canonical/reference-solutions/studio-setup/blog-schema.ts +143 -0
- package/canonical/reference-solutions/studio-setup/custom-tool.tsx +78 -0
- package/canonical/reference-solutions/visual-editing/live-preview.tsx +137 -0
- package/canonical/reference-solutions/visual-editing/presentation-nextjs.tsx +130 -0
- package/config/airbyte/ai_literacy_framework.connector.yaml +639 -0
- package/config/bigquery/README.md +74 -0
- package/config/bigquery/views/area_scores.sql +87 -0
- package/config/bigquery/views/reports.sql +49 -0
- package/config/features.yaml +116 -0
- package/config/models.yaml +115 -0
- package/config/prompts.yaml +75 -0
- package/config/rubrics.yaml +62 -0
- package/config/schedules.yaml +43 -0
- package/config/sinks.yaml +54 -0
- package/config/sources.yaml +51 -0
- package/config/thresholds.yaml +49 -0
- package/dist/_vendor/ailf-core/examples/index.d.ts +190 -0
- package/dist/_vendor/ailf-core/examples/index.js +285 -0
- package/dist/_vendor/ailf-core/index.d.ts +17 -0
- package/dist/_vendor/ailf-core/index.js +17 -0
- package/dist/_vendor/ailf-core/ports/cache-store.d.ts +72 -0
- package/dist/_vendor/ailf-core/ports/cache-store.js +17 -0
- package/dist/_vendor/ailf-core/ports/config-source.d.ts +33 -0
- package/dist/_vendor/ailf-core/ports/config-source.js +15 -0
- package/dist/_vendor/ailf-core/ports/context.d.ts +172 -0
- package/dist/_vendor/ailf-core/ports/context.js +14 -0
- package/dist/_vendor/ailf-core/ports/doc-fetcher.d.ts +131 -0
- package/dist/_vendor/ailf-core/ports/doc-fetcher.js +12 -0
- package/dist/_vendor/ailf-core/ports/eval-runner.d.ts +24 -0
- package/dist/_vendor/ailf-core/ports/eval-runner.js +8 -0
- package/dist/_vendor/ailf-core/ports/index.d.ts +15 -0
- package/dist/_vendor/ailf-core/ports/index.js +7 -0
- package/dist/_vendor/ailf-core/ports/logger.d.ts +36 -0
- package/dist/_vendor/ailf-core/ports/logger.js +11 -0
- package/dist/_vendor/ailf-core/ports/pipeline-step.d.ts +46 -0
- package/dist/_vendor/ailf-core/ports/pipeline-step.js +8 -0
- package/dist/_vendor/ailf-core/ports/task-source.d.ts +159 -0
- package/dist/_vendor/ailf-core/ports/task-source.js +72 -0
- package/dist/_vendor/ailf-core/schemas/callback-payload.d.ts +24 -0
- package/dist/_vendor/ailf-core/schemas/callback-payload.js +29 -0
- package/dist/_vendor/ailf-core/schemas/eval-config.d.ts +55 -0
- package/dist/_vendor/ailf-core/schemas/eval-config.js +78 -0
- package/dist/_vendor/ailf-core/schemas/index.d.ts +16 -0
- package/dist/_vendor/ailf-core/schemas/index.js +16 -0
- package/dist/_vendor/ailf-core/schemas/pipeline-request.d.ts +125 -0
- package/dist/_vendor/ailf-core/schemas/pipeline-request.js +67 -0
- package/dist/_vendor/ailf-core/schemas/pipeline.d.ts +531 -0
- package/dist/_vendor/ailf-core/schemas/pipeline.js +318 -0
- package/dist/_vendor/ailf-core/schemas/schedules.d.ts +68 -0
- package/dist/_vendor/ailf-core/schemas/schedules.js +74 -0
- package/dist/_vendor/ailf-core/schemas/sinks.d.ts +207 -0
- package/dist/_vendor/ailf-core/schemas/sinks.js +108 -0
- package/dist/_vendor/ailf-core/services/comparison-formatters.d.ts +18 -0
- package/dist/_vendor/ailf-core/services/comparison-formatters.js +189 -0
- package/dist/_vendor/ailf-core/services/config-helpers.d.ts +41 -0
- package/dist/_vendor/ailf-core/services/config-helpers.js +86 -0
- package/dist/_vendor/ailf-core/services/index.d.ts +12 -0
- package/dist/_vendor/ailf-core/services/index.js +12 -0
- package/dist/_vendor/ailf-core/services/scoring.d.ts +49 -0
- package/dist/_vendor/ailf-core/services/scoring.js +222 -0
- package/dist/_vendor/ailf-core/types/index.d.ts +1082 -0
- package/dist/_vendor/ailf-core/types/index.js +21 -0
- package/dist/_vendor/ailf-core/types/scoring-input.d.ts +54 -0
- package/dist/_vendor/ailf-core/types/scoring-input.js +9 -0
- package/dist/_vendor/ailf-shared/dimension-names.d.ts +21 -0
- package/dist/_vendor/ailf-shared/dimension-names.js +27 -0
- package/dist/_vendor/ailf-shared/document-ref.d.ts +29 -0
- package/dist/_vendor/ailf-shared/document-ref.js +1 -0
- package/dist/_vendor/ailf-shared/eval-modes.d.ts +12 -0
- package/dist/_vendor/ailf-shared/eval-modes.js +8 -0
- package/dist/_vendor/ailf-shared/index.d.ts +16 -0
- package/dist/_vendor/ailf-shared/index.js +16 -0
- package/dist/_vendor/ailf-shared/noise-threshold.d.ts +9 -0
- package/dist/_vendor/ailf-shared/noise-threshold.js +9 -0
- package/dist/_vendor/ailf-shared/score-grades.d.ts +17 -0
- package/dist/_vendor/ailf-shared/score-grades.js +23 -0
- package/dist/adapters/cache/content-lake-cache.d.ts +24 -0
- package/dist/adapters/cache/content-lake-cache.js +59 -0
- package/dist/adapters/cache/filesystem-cache.d.ts +18 -0
- package/dist/adapters/cache/filesystem-cache.js +54 -0
- package/dist/adapters/cache/index.d.ts +2 -0
- package/dist/adapters/cache/index.js +2 -0
- package/dist/adapters/config-sources/cli-config-adapter.d.ts +17 -0
- package/dist/adapters/config-sources/cli-config-adapter.js +23 -0
- package/dist/adapters/config-sources/file-config-adapter.d.ts +26 -0
- package/dist/adapters/config-sources/file-config-adapter.js +96 -0
- package/dist/adapters/config-sources/index.d.ts +2 -0
- package/dist/adapters/config-sources/index.js +2 -0
- package/dist/adapters/doc-fetchers/index.d.ts +1 -0
- package/dist/adapters/doc-fetchers/index.js +1 -0
- package/dist/adapters/doc-fetchers/sanity-doc-fetcher.d.ts +76 -0
- package/dist/adapters/doc-fetchers/sanity-doc-fetcher.js +620 -0
- package/dist/adapters/eval-runners/index.d.ts +1 -0
- package/dist/adapters/eval-runners/index.js +1 -0
- package/dist/adapters/eval-runners/promptfoo-eval-adapter.d.ts +14 -0
- package/dist/adapters/eval-runners/promptfoo-eval-adapter.js +63 -0
- package/dist/adapters/index.d.ts +12 -0
- package/dist/adapters/index.js +12 -0
- package/dist/adapters/loggers/console-logger.d.ts +22 -0
- package/dist/adapters/loggers/console-logger.js +54 -0
- package/dist/adapters/loggers/index.d.ts +9 -0
- package/dist/adapters/loggers/index.js +9 -0
- package/dist/adapters/loggers/json-logger.d.ts +18 -0
- package/dist/adapters/loggers/json-logger.js +33 -0
- package/dist/adapters/loggers/quiet-logger.d.ts +16 -0
- package/dist/adapters/loggers/quiet-logger.js +30 -0
- package/dist/adapters/task-sources/composite-task-source.d.ts +20 -0
- package/dist/adapters/task-sources/composite-task-source.js +59 -0
- package/dist/adapters/task-sources/content-lake-task-source.d.ts +20 -0
- package/dist/adapters/task-sources/content-lake-task-source.js +219 -0
- package/dist/adapters/task-sources/index.d.ts +7 -0
- package/dist/adapters/task-sources/index.js +7 -0
- package/dist/adapters/task-sources/repo-schemas.d.ts +245 -0
- package/dist/adapters/task-sources/repo-schemas.js +234 -0
- package/dist/adapters/task-sources/repo-task-source.d.ts +22 -0
- package/dist/adapters/task-sources/repo-task-source.js +104 -0
- package/dist/adapters/task-sources/repo-trigger.d.ts +52 -0
- package/dist/adapters/task-sources/repo-trigger.js +153 -0
- package/dist/adapters/task-sources/repo-validation.d.ts +49 -0
- package/dist/adapters/task-sources/repo-validation.js +164 -0
- package/dist/adapters/task-sources/yaml-task-source.d.ts +18 -0
- package/dist/adapters/task-sources/yaml-task-source.js +136 -0
- package/dist/agent-observer/agentic-provider.d.ts +132 -0
- package/dist/agent-observer/agentic-provider.js +983 -0
- package/dist/agent-observer/classifier.d.ts +62 -0
- package/dist/agent-observer/classifier.js +269 -0
- package/dist/agent-observer/index.d.ts +7 -0
- package/dist/agent-observer/index.js +4 -0
- package/dist/agent-observer/pricing.d.ts +35 -0
- package/dist/agent-observer/pricing.js +82 -0
- package/dist/agent-observer/provider.d.ts +77 -0
- package/dist/agent-observer/provider.js +151 -0
- package/dist/agent-observer/proxy.d.ts +91 -0
- package/dist/agent-observer/proxy.js +321 -0
- package/dist/agent-observer/test-imports.d.ts +7 -0
- package/dist/agent-observer/test-imports.js +185 -0
- package/dist/agent-observer/types.d.ts +137 -0
- package/dist/agent-observer/types.js +16 -0
- package/dist/assertions/source-isolation.d.ts +72 -0
- package/dist/assertions/source-isolation.js +117 -0
- package/dist/cli.d.ts +24 -0
- package/dist/cli.js +199 -0
- package/dist/commands/agent-report.d.ts +5 -0
- package/dist/commands/agent-report.js +69 -0
- package/dist/commands/baseline.d.ts +9 -0
- package/dist/commands/baseline.js +141 -0
- package/dist/commands/cache.d.ts +13 -0
- package/dist/commands/cache.js +135 -0
- package/dist/commands/calculate-scores.d.ts +8 -0
- package/dist/commands/calculate-scores.js +48 -0
- package/dist/commands/compare.d.ts +8 -0
- package/dist/commands/compare.js +120 -0
- package/dist/commands/completion.d.ts +18 -0
- package/dist/commands/completion.js +260 -0
- package/dist/commands/coverage-audit.d.ts +7 -0
- package/dist/commands/coverage-audit.js +40 -0
- package/dist/commands/discovery-report.d.ts +10 -0
- package/dist/commands/discovery-report.js +44 -0
- package/dist/commands/eval.d.ts +9 -0
- package/dist/commands/eval.js +35 -0
- package/dist/commands/explain-handler.d.ts +34 -0
- package/dist/commands/explain-handler.js +719 -0
- package/dist/commands/fetch-docs.d.ts +8 -0
- package/dist/commands/fetch-docs.js +128 -0
- package/dist/commands/generate-configs.d.ts +8 -0
- package/dist/commands/generate-configs.js +46 -0
- package/dist/commands/grader/index.d.ts +11 -0
- package/dist/commands/grader/index.js +118 -0
- package/dist/commands/init.d.ts +19 -0
- package/dist/commands/init.js +150 -0
- package/dist/commands/interactive.d.ts +12 -0
- package/dist/commands/interactive.js +238 -0
- package/dist/commands/lookup-doc.d.ts +15 -0
- package/dist/commands/lookup-doc.js +84 -0
- package/dist/commands/measure-retrieval.d.ts +5 -0
- package/dist/commands/measure-retrieval.js +65 -0
- package/dist/commands/pipeline-action.d.ts +71 -0
- package/dist/commands/pipeline-action.js +305 -0
- package/dist/commands/pipeline.d.ts +62 -0
- package/dist/commands/pipeline.js +53 -0
- package/dist/commands/pr-comment.d.ts +8 -0
- package/dist/commands/pr-comment.js +47 -0
- package/dist/commands/publish.d.ts +26 -0
- package/dist/commands/publish.js +253 -0
- package/dist/commands/readiness-report.d.ts +10 -0
- package/dist/commands/readiness-report.js +104 -0
- package/dist/commands/shared/options.d.ts +29 -0
- package/dist/commands/shared/options.js +57 -0
- package/dist/commands/update-quality-scores.d.ts +5 -0
- package/dist/commands/update-quality-scores.js +20 -0
- package/dist/commands/validate-tasks.d.ts +16 -0
- package/dist/commands/validate-tasks.js +93 -0
- package/dist/commands/validate.d.ts +9 -0
- package/dist/commands/validate.js +73 -0
- package/dist/commands/webhook-server.d.ts +5 -0
- package/dist/commands/webhook-server.js +30 -0
- package/dist/commands/weekly-digest.d.ts +10 -0
- package/dist/commands/weekly-digest.js +104 -0
- package/dist/composition-root.d.ts +26 -0
- package/dist/composition-root.js +107 -0
- package/dist/interpolate.d.ts +26 -0
- package/dist/interpolate.js +70 -0
- package/dist/job-store.d.ts +104 -0
- package/dist/job-store.js +188 -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.d.ts +27 -0
- package/dist/orchestration/build-app-context.js +81 -0
- package/dist/orchestration/build-step-sequence.d.ts +15 -0
- package/dist/orchestration/build-step-sequence.js +84 -0
- package/dist/orchestration/config-to-source-overrides.d.ts +9 -0
- package/dist/orchestration/config-to-source-overrides.js +28 -0
- package/dist/orchestration/env-bridge.d.ts +21 -0
- package/dist/orchestration/env-bridge.js +66 -0
- package/dist/orchestration/index.d.ts +11 -0
- package/dist/orchestration/index.js +11 -0
- package/dist/orchestration/pipeline-orchestrator.d.ts +24 -0
- package/dist/orchestration/pipeline-orchestrator.js +153 -0
- package/dist/orchestration/step-runner.d.ts +20 -0
- package/dist/orchestration/step-runner.js +88 -0
- package/dist/orchestration/steps/calculate-scores-step.d.ts +13 -0
- package/dist/orchestration/steps/calculate-scores-step.js +95 -0
- package/dist/orchestration/steps/callback-step.d.ts +24 -0
- package/dist/orchestration/steps/callback-step.js +76 -0
- package/dist/orchestration/steps/compare-step.d.ts +14 -0
- package/dist/orchestration/steps/compare-step.js +92 -0
- package/dist/orchestration/steps/discovery-report-step.d.ts +13 -0
- package/dist/orchestration/steps/discovery-report-step.js +55 -0
- 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 +14 -0
- package/dist/orchestration/steps/fetch-docs-step.js +135 -0
- package/dist/orchestration/steps/gap-analysis-step.d.ts +16 -0
- package/dist/orchestration/steps/gap-analysis-step.js +136 -0
- package/dist/orchestration/steps/generate-configs-step.d.ts +14 -0
- package/dist/orchestration/steps/generate-configs-step.js +85 -0
- package/dist/orchestration/steps/grader-consistency-step.d.ts +13 -0
- package/dist/orchestration/steps/grader-consistency-step.js +64 -0
- package/dist/orchestration/steps/index.d.ts +19 -0
- package/dist/orchestration/steps/index.js +19 -0
- package/dist/orchestration/steps/mirror-repo-tasks-step.d.ts +21 -0
- package/dist/orchestration/steps/mirror-repo-tasks-step.js +94 -0
- package/dist/orchestration/steps/publish-report-step.d.ts +26 -0
- package/dist/orchestration/steps/publish-report-step.js +216 -0
- package/dist/orchestration/steps/readiness-step.d.ts +13 -0
- package/dist/orchestration/steps/readiness-step.js +91 -0
- package/dist/orchestration/steps/report-step.d.ts +12 -0
- package/dist/orchestration/steps/report-step.js +49 -0
- package/dist/orchestration/steps/run-eval-step.d.ts +17 -0
- package/dist/orchestration/steps/run-eval-step.js +195 -0
- package/dist/orchestration/steps/validate-step.d.ts +12 -0
- package/dist/orchestration/steps/validate-step.js +41 -0
- package/dist/pipeline/agent-behavior-report.d.ts +53 -0
- package/dist/pipeline/agent-behavior-report.js +132 -0
- package/dist/pipeline/attribution.d.ts +47 -0
- package/dist/pipeline/attribution.js +226 -0
- package/dist/pipeline/baseline.d.ts +37 -0
- package/dist/pipeline/baseline.js +141 -0
- package/dist/pipeline/cache.d.ts +101 -0
- package/dist/pipeline/cache.js +283 -0
- package/dist/pipeline/calculate-scores.d.ts +102 -0
- package/dist/pipeline/calculate-scores.js +1128 -0
- package/dist/pipeline/callback-delivery.d.ts +50 -0
- package/dist/pipeline/callback-delivery.js +89 -0
- package/dist/pipeline/checks.d.ts +39 -0
- package/dist/pipeline/checks.js +280 -0
- package/dist/pipeline/classify-url.d.ts +61 -0
- package/dist/pipeline/classify-url.js +93 -0
- package/dist/pipeline/compare.d.ts +31 -0
- package/dist/pipeline/compare.js +208 -0
- package/dist/pipeline/coverage-audit.d.ts +39 -0
- package/dist/pipeline/coverage-audit.js +165 -0
- package/dist/pipeline/degradations.d.ts +85 -0
- package/dist/pipeline/degradations.js +242 -0
- package/dist/pipeline/discovery-report.d.ts +55 -0
- package/dist/pipeline/discovery-report.js +178 -0
- package/dist/pipeline/eval-constants.d.ts +68 -0
- package/dist/pipeline/eval-constants.js +111 -0
- package/dist/pipeline/eval-fingerprint.d.ts +66 -0
- package/dist/pipeline/eval-fingerprint.js +175 -0
- package/dist/pipeline/expand-tasks.d.ts +220 -0
- package/dist/pipeline/expand-tasks.js +421 -0
- package/dist/pipeline/failure-modes.d.ts +46 -0
- package/dist/pipeline/failure-modes.js +348 -0
- package/dist/pipeline/fetch-url-content.d.ts +44 -0
- package/dist/pipeline/fetch-url-content.js +93 -0
- package/dist/pipeline/gap-analysis.d.ts +48 -0
- package/dist/pipeline/gap-analysis.js +231 -0
- package/dist/pipeline/generate-configs.d.ts +72 -0
- package/dist/pipeline/generate-configs.js +395 -0
- package/dist/pipeline/grader-api.d.ts +49 -0
- package/dist/pipeline/grader-api.js +200 -0
- package/dist/pipeline/grader-compare-runner.d.ts +44 -0
- package/dist/pipeline/grader-compare-runner.js +301 -0
- package/dist/pipeline/grader-comparison.d.ts +111 -0
- package/dist/pipeline/grader-comparison.js +161 -0
- package/dist/pipeline/grader-consistency-runner.d.ts +60 -0
- package/dist/pipeline/grader-consistency-runner.js +270 -0
- package/dist/pipeline/grader-consistency.d.ts +103 -0
- package/dist/pipeline/grader-consistency.js +146 -0
- package/dist/pipeline/grader-sensitivity-runner.d.ts +40 -0
- package/dist/pipeline/grader-sensitivity-runner.js +282 -0
- package/dist/pipeline/grader-sensitivity.d.ts +94 -0
- package/dist/pipeline/grader-sensitivity.js +144 -0
- package/dist/pipeline/grader-validate-runner.d.ts +38 -0
- package/dist/pipeline/grader-validate-runner.js +229 -0
- package/dist/pipeline/grader-validation.d.ts +107 -0
- package/dist/pipeline/grader-validation.js +169 -0
- package/dist/pipeline/map-request-to-config.d.ts +19 -0
- package/dist/pipeline/map-request-to-config.js +80 -0
- package/dist/pipeline/measure-retrieval.d.ts +59 -0
- package/dist/pipeline/measure-retrieval.js +111 -0
- package/dist/pipeline/mirror-repo-tasks.d.ts +86 -0
- package/dist/pipeline/mirror-repo-tasks.js +350 -0
- package/dist/pipeline/plan-format.d.ts +33 -0
- package/dist/pipeline/plan-format.js +202 -0
- package/dist/pipeline/plan.d.ts +169 -0
- package/dist/pipeline/plan.js +708 -0
- package/dist/pipeline/pr-comment.d.ts +19 -0
- package/dist/pipeline/pr-comment.js +502 -0
- package/dist/pipeline/probe.d.ts +52 -0
- package/dist/pipeline/probe.js +390 -0
- package/dist/pipeline/provenance.d.ts +47 -0
- package/dist/pipeline/provenance.js +146 -0
- package/dist/pipeline/readiness-report.d.ts +87 -0
- package/dist/pipeline/readiness-report.js +205 -0
- package/dist/pipeline/release-classification.d.ts +54 -0
- package/dist/pipeline/release-classification.js +238 -0
- package/dist/pipeline/release-report.d.ts +37 -0
- package/dist/pipeline/release-report.js +222 -0
- package/dist/pipeline/repo-eval-comment.d.ts +37 -0
- package/dist/pipeline/repo-eval-comment.js +165 -0
- package/dist/pipeline/repo-threshold-evaluator.d.ts +89 -0
- package/dist/pipeline/repo-threshold-evaluator.js +162 -0
- package/dist/pipeline/resolve-mappings.d.ts +35 -0
- package/dist/pipeline/resolve-mappings.js +72 -0
- package/dist/pipeline/retrieval-metrics.d.ts +39 -0
- package/dist/pipeline/retrieval-metrics.js +136 -0
- package/dist/pipeline/reverse-mapping.d.ts +67 -0
- package/dist/pipeline/reverse-mapping.js +88 -0
- package/dist/pipeline/schemas.d.ts +9 -0
- package/dist/pipeline/schemas.js +9 -0
- 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 +88 -0
- package/dist/pipeline/targeted-loo.js +203 -0
- package/dist/pipeline/thresholds.d.ts +27 -0
- package/dist/pipeline/thresholds.js +245 -0
- package/dist/pipeline/types.d.ts +10 -0
- package/dist/pipeline/types.js +10 -0
- package/dist/pipeline/validate.d.ts +67 -0
- package/dist/pipeline/validate.js +406 -0
- package/dist/pipeline/webhook-server.d.ts +37 -0
- package/dist/pipeline/webhook-server.js +133 -0
- package/dist/report-store.d.ts +84 -0
- package/dist/report-store.js +208 -0
- package/dist/sanity/client.d.ts +38 -0
- package/dist/sanity/client.js +86 -0
- package/dist/sanity/portable-text.d.ts +11 -0
- package/dist/sanity/portable-text.js +211 -0
- package/dist/sanity/queries.d.ts +133 -0
- package/dist/sanity/queries.js +300 -0
- package/dist/schedules/digest.d.ts +116 -0
- package/dist/schedules/digest.js +156 -0
- package/dist/schedules/index.d.ts +12 -0
- package/dist/schedules/index.js +10 -0
- package/dist/schedules/loader.d.ts +31 -0
- package/dist/schedules/loader.js +73 -0
- package/dist/schedules/schema.d.ts +9 -0
- package/dist/schedules/schema.js +9 -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-tasks-to-content-lake.d.ts +24 -0
- package/dist/scripts/migrate-tasks-to-content-lake.js +327 -0
- 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 +21 -0
- package/dist/scripts/validate-task-sources.js +210 -0
- 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/bigquery/index.d.ts +131 -0
- package/dist/sinks/bigquery/index.js +222 -0
- package/dist/sinks/format-slack.d.ts +64 -0
- package/dist/sinks/format-slack.js +306 -0
- package/dist/sinks/index.d.ts +23 -0
- package/dist/sinks/index.js +18 -0
- package/dist/sinks/loader.d.ts +18 -0
- package/dist/sinks/loader.js +82 -0
- package/dist/sinks/retry.d.ts +24 -0
- package/dist/sinks/retry.js +52 -0
- package/dist/sinks/schema.d.ts +9 -0
- package/dist/sinks/schema.js +9 -0
- package/dist/sinks/slack/format.d.ts +65 -0
- package/dist/sinks/slack/format.js +327 -0
- package/dist/sinks/slack/index.d.ts +27 -0
- package/dist/sinks/slack/index.js +78 -0
- package/dist/sinks/slack-sink.d.ts +27 -0
- package/dist/sinks/slack-sink.js +78 -0
- package/dist/sinks/types.d.ts +59 -0
- package/dist/sinks/types.js +44 -0
- package/dist/sinks/webhook/index.d.ts +19 -0
- package/dist/sinks/webhook/index.js +50 -0
- package/dist/sinks/webhook-sink.d.ts +19 -0
- package/dist/sinks/webhook-sink.js +50 -0
- package/dist/sources.d.ts +104 -0
- package/dist/sources.js +292 -0
- package/dist/webhook/budget.d.ts +42 -0
- package/dist/webhook/budget.js +60 -0
- package/dist/webhook/debounce.d.ts +67 -0
- package/dist/webhook/debounce.js +76 -0
- package/dist/webhook/dispatch.d.ts +45 -0
- package/dist/webhook/dispatch.js +84 -0
- package/dist/webhook/eval-request-handler.d.ts +87 -0
- package/dist/webhook/eval-request-handler.js +181 -0
- package/dist/webhook/handler.d.ts +88 -0
- package/dist/webhook/handler.js +203 -0
- package/dist/webhook/index.d.ts +17 -0
- package/dist/webhook/index.js +12 -0
- package/dist/webhook/types.d.ts +109 -0
- package/dist/webhook/types.js +10 -0
- package/package.json +72 -0
- package/tasks/.expanded.agentic.yaml +51 -0
- package/tasks/.expanded.yaml +66 -0
- package/tasks/frameworks.yaml +98 -0
- package/tasks/functions.yaml +51 -0
- package/tasks/groq.yaml +216 -0
- package/tasks/nextjs-live.yaml +62 -0
- package/tasks/studio-setup.yaml +111 -0
- package/tasks/visual-editing.yaml +120 -0
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GROQ queries scoped to each documentation feature area.
|
|
3
|
+
*
|
|
4
|
+
* Schema notes (dataset: gabe-wyatt-doc-plat-dev-2026-01-05):
|
|
5
|
+
*
|
|
6
|
+
* _type == "article" — 614 documentation articles
|
|
7
|
+
* primarySection — reference to a docsNavSection
|
|
8
|
+
* content[] — Portable Text rich-text field
|
|
9
|
+
* slug.current — URL slug
|
|
10
|
+
*
|
|
11
|
+
* Code blocks in `content`:
|
|
12
|
+
* _type == "codeBlock" → blocks[].code.code, blocks[].code.language, blocks[].filename
|
|
13
|
+
*
|
|
14
|
+
* Sections are _type == "docsNavSection" with slug.current.
|
|
15
|
+
*
|
|
16
|
+
* Each query joins through primarySection._ref to the relevant
|
|
17
|
+
* docsNavSection IDs and returns a consistent projection.
|
|
18
|
+
*/
|
|
19
|
+
export declare const FEATURE_AREA_QUERIES: {
|
|
20
|
+
/**
|
|
21
|
+
* Other Frameworks — Nuxt, React Router/Remix, Astro
|
|
22
|
+
*/
|
|
23
|
+
readonly frameworks: "\n *[_type == \"article\"\n && !(_id in path(\"drafts.**\"))\n && (\n primarySection._ref in [\n \"b2c937d0-34b3-435e-818b-d0c8520ea9b8\",\n \"e223241c-e207-41e0-8e12-f80e78203cf1\",\n \"73bebb61-e508-42b7-b44b-c4703ae42d01\"\n ]\n || (primarySection._ref == \"ea6b80fa-d0d2-4daa-8220-eb8abdcc9deb\"\n && (title match \"Remix*\" || title match \"Nuxt*\"\n || title match \"Astro*\" || title match \"SvelteKit*\"))\n )\n ] {\n title,\n description,\n \"slug\": slug.current,\n \"section\": primarySection->{ \"slug\": slug.current, title },\n \"content\": content[] {\n // Pass through all standard blocks unchanged\n _type != \"docsCardCollection\" => { ... },\n // Resolve references inside card collections so we get titles/slugs\n _type == \"docsCardCollection\" => {\n ...,\n cards[] {\n ...,\n \"resolvedTitle\": reference->title,\n \"resolvedSlug\": reference->slug.current\n }\n }\n }\n}\n ";
|
|
24
|
+
/**
|
|
25
|
+
* Functions / Compute / AI — serverless functions, webhooks
|
|
26
|
+
* Section: "Compute and AI" (12 articles)
|
|
27
|
+
*/
|
|
28
|
+
readonly functions: "\n *[_type == \"article\"\n && primarySection._ref == \"3024ce79-c196-49ee-a237-a327d6a6348f\"\n && !(_id in path(\"drafts.**\"))\n ] {\n title,\n description,\n \"slug\": slug.current,\n \"section\": primarySection->{ \"slug\": slug.current, title },\n \"content\": content[] {\n // Pass through all standard blocks unchanged\n _type != \"docsCardCollection\" => { ... },\n // Resolve references inside card collections so we get titles/slugs\n _type == \"docsCardCollection\" => {\n ...,\n cards[] {\n ...,\n \"resolvedTitle\": reference->title,\n \"resolvedSlug\": reference->slug.current\n }\n }\n }\n}\n ";
|
|
29
|
+
/**
|
|
30
|
+
* GROQ Query Language — introduction, syntax, joins, filtering, projections
|
|
31
|
+
* Combines: Content Lake section GROQ articles + Developer Guides articles
|
|
32
|
+
* about querying + title-matched GROQ articles across all sections.
|
|
33
|
+
*/
|
|
34
|
+
readonly groq: "\n *[_type == \"article\"\n && !(_id in path(\"drafts.**\"))\n && (\n primarySection._ref == \"60a6bcb5-9706-4cab-9153-57725e28f4d0\"\n || primarySection._ref == \"ea6b80fa-d0d2-4daa-8220-eb8abdcc9deb\"\n )\n && (\n title match \"GROQ*\"\n || title match \"*GROQ*\"\n || title match \"Query*\"\n || title match \"How Queries*\"\n || slug.current match \"groq-*\"\n || slug.current match \"query-*\"\n || slug.current match \"how-queries-*\"\n || slug.current match \"paginating-with-groq\"\n || slug.current match \"high-performance-groq\"\n )\n ] {\n title,\n description,\n \"slug\": slug.current,\n \"section\": primarySection->{ \"slug\": slug.current, title },\n \"content\": content[] {\n // Pass through all standard blocks unchanged\n _type != \"docsCardCollection\" => { ... },\n // Resolve references inside card collections so we get titles/slugs\n _type == \"docsCardCollection\" => {\n ...,\n cards[] {\n ...,\n \"resolvedTitle\": reference->title,\n \"resolvedSlug\": reference->slug.current\n }\n }\n }\n}\n ";
|
|
35
|
+
/**
|
|
36
|
+
* Next.js integration + Live Content API
|
|
37
|
+
* Combines: Next.js quickstart section + developer-guide articles
|
|
38
|
+
* mentioning Next.js or Live Content.
|
|
39
|
+
*/
|
|
40
|
+
readonly "nextjs-live": "\n *[_type == \"article\"\n && !(_id in path(\"drafts.**\"))\n && (\n primarySection._ref == \"6208dff1-bba7-487a-a6bb-a0ffccb5846c\"\n || (primarySection._ref == \"ea6b80fa-d0d2-4daa-8220-eb8abdcc9deb\"\n && (title match \"Next*\" || title match \"*Live*\"))\n )\n ] {\n title,\n description,\n \"slug\": slug.current,\n \"section\": primarySection->{ \"slug\": slug.current, title },\n \"content\": content[] {\n // Pass through all standard blocks unchanged\n _type != \"docsCardCollection\" => { ... },\n // Resolve references inside card collections so we get titles/slugs\n _type == \"docsCardCollection\" => {\n ...,\n cards[] {\n ...,\n \"resolvedTitle\": reference->title,\n \"resolvedSlug\": reference->slug.current\n }\n }\n }\n}\n ";
|
|
41
|
+
/**
|
|
42
|
+
* Studio Setup & Customization
|
|
43
|
+
* Section: "Studio" (116 articles)
|
|
44
|
+
*/
|
|
45
|
+
readonly "studio-setup": "\n *[_type == \"article\"\n && primarySection._ref == \"d67e3879-0342-4a80-8a2d-e35908df35cc\"\n && !(_id in path(\"drafts.**\"))\n ] {\n title,\n description,\n \"slug\": slug.current,\n \"section\": primarySection->{ \"slug\": slug.current, title },\n \"content\": content[] {\n // Pass through all standard blocks unchanged\n _type != \"docsCardCollection\" => { ... },\n // Resolve references inside card collections so we get titles/slugs\n _type == \"docsCardCollection\" => {\n ...,\n cards[] {\n ...,\n \"resolvedTitle\": reference->title,\n \"resolvedSlug\": reference->slug.current\n }\n }\n }\n}\n ";
|
|
46
|
+
/**
|
|
47
|
+
* Visual Editing — Presentation tool, overlays, live preview
|
|
48
|
+
* Section: "Visual Editing" (24 articles)
|
|
49
|
+
*/
|
|
50
|
+
readonly "visual-editing": "\n *[_type == \"article\"\n && primarySection._ref == \"4e0ef463-01e2-48db-9a31-38b3912ececd\"\n && !(_id in path(\"drafts.**\"))\n ] {\n title,\n description,\n \"slug\": slug.current,\n \"section\": primarySection->{ \"slug\": slug.current, title },\n \"content\": content[] {\n // Pass through all standard blocks unchanged\n _type != \"docsCardCollection\" => { ... },\n // Resolve references inside card collections so we get titles/slugs\n _type == \"docsCardCollection\" => {\n ...,\n cards[] {\n ...,\n \"resolvedTitle\": reference->title,\n \"resolvedSlug\": reference->slug.current\n }\n }\n }\n}\n ";
|
|
51
|
+
};
|
|
52
|
+
export type FeatureArea = keyof typeof FEATURE_AREA_QUERIES;
|
|
53
|
+
export declare const ALL_FEATURE_AREAS: FeatureArea[];
|
|
54
|
+
/**
|
|
55
|
+
* Fetch a single article by its slug.
|
|
56
|
+
* Returns the same projection shape as the feature-area queries.
|
|
57
|
+
*/
|
|
58
|
+
export declare const ARTICLE_BY_SLUG_QUERY = "\n *[_type == \"article\"\n && slug.current == $slug\n && !(_id in path(\"drafts.**\"))\n ][0] {\n title,\n description,\n \"slug\": slug.current,\n \"section\": primarySection->{ \"slug\": slug.current, title },\n \"content\": content[] {\n // Pass through all standard blocks unchanged\n _type != \"docsCardCollection\" => { ... },\n // Resolve references inside card collections so we get titles/slugs\n _type == \"docsCardCollection\" => {\n ...,\n cards[] {\n ...,\n \"resolvedTitle\": reference->title,\n \"resolvedSlug\": reference->slug.current\n }\n }\n }\n}\n";
|
|
59
|
+
/**
|
|
60
|
+
* Fetch all published articles (for full-corpus generation).
|
|
61
|
+
*/
|
|
62
|
+
export declare const ALL_ARTICLES_QUERY = "\n *[_type == \"article\"\n && !(_id in path(\"drafts.**\"))\n ] | order(primarySection->slug.current, title) {\n title,\n description,\n \"slug\": slug.current,\n \"section\": primarySection->{ \"slug\": slug.current, title },\n \"content\": content[] {\n // Pass through all standard blocks unchanged\n _type != \"docsCardCollection\" => { ... },\n // Resolve references inside card collections so we get titles/slugs\n _type == \"docsCardCollection\" => {\n ...,\n cards[] {\n ...,\n \"resolvedTitle\": reference->title,\n \"resolvedSlug\": reference->slug.current\n }\n }\n }\n}\n";
|
|
63
|
+
/**
|
|
64
|
+
* Fetch article metadata for a list of slugs.
|
|
65
|
+
*
|
|
66
|
+
* Returns lightweight metadata (slug + _rev) for comparison between
|
|
67
|
+
* published and perspective states. The _rev field changes when a document
|
|
68
|
+
* is modified, making it an efficient diff signal.
|
|
69
|
+
*
|
|
70
|
+
* Usage: client.fetch(ARTICLES_METADATA_BY_SLUGS_QUERY, { slugs: ["slug-a", "slug-b"] })
|
|
71
|
+
*/
|
|
72
|
+
export declare const ARTICLES_METADATA_BY_SLUGS_QUERY = "\n *[_type == \"article\"\n && slug.current in $slugs\n && !(_id in path(\"drafts.**\"))\n ] {\n \"slug\": slug.current,\n _id,\n _rev,\n title\n }\n";
|
|
73
|
+
/**
|
|
74
|
+
* Fetch a single article by its slug — identical to ARTICLE_BY_SLUG_QUERY
|
|
75
|
+
* but designed to be called with a perspective-enabled client.
|
|
76
|
+
*
|
|
77
|
+
* Returns the full article projection for content comparison.
|
|
78
|
+
*/
|
|
79
|
+
export declare const ARTICLE_BY_SLUG_WITH_PERSPECTIVE_QUERY = "\n *[_type == \"article\"\n && slug.current == $slug\n ][0] {\n title,\n description,\n \"slug\": slug.current,\n \"section\": primarySection->{ \"slug\": slug.current, title },\n \"content\": content[] {\n // Pass through all standard blocks unchanged\n _type != \"docsCardCollection\" => { ... },\n // Resolve references inside card collections so we get titles/slugs\n _type == \"docsCardCollection\" => {\n ...,\n cards[] {\n ...,\n \"resolvedTitle\": reference->title,\n \"resolvedSlug\": reference->slug.current\n }\n }\n }\n}\n";
|
|
80
|
+
/**
|
|
81
|
+
* Fetch articles by their document IDs.
|
|
82
|
+
*
|
|
83
|
+
* Does NOT include the `!(_id in path("drafts.**"))` filter because this
|
|
84
|
+
* query is designed for use with perspective-enabled clients where draft
|
|
85
|
+
* filtering is handled at the client level.
|
|
86
|
+
*
|
|
87
|
+
* @param $ids — array of document ID strings
|
|
88
|
+
*/
|
|
89
|
+
export declare const ARTICLES_BY_IDS_QUERY = "\n *[_type == \"article\"\n && _id in $ids\n ] {\n title,\n description,\n \"slug\": slug.current,\n \"section\": primarySection->{ \"slug\": slug.current, title },\n \"content\": content[] {\n // Pass through all standard blocks unchanged\n _type != \"docsCardCollection\" => { ... },\n // Resolve references inside card collections so we get titles/slugs\n _type == \"docsCardCollection\" => {\n ...,\n cards[] {\n ...,\n \"resolvedTitle\": reference->title,\n \"resolvedSlug\": reference->slug.current\n }\n }\n }\n}\n";
|
|
90
|
+
/**
|
|
91
|
+
* Fetch a single article by its document ID.
|
|
92
|
+
*
|
|
93
|
+
* Does NOT include the `!(_id in path("drafts.**"))` filter because this
|
|
94
|
+
* query is designed for use with perspective-enabled clients where draft
|
|
95
|
+
* filtering is handled at the client level.
|
|
96
|
+
*
|
|
97
|
+
* @param $id — document ID string
|
|
98
|
+
*/
|
|
99
|
+
export declare const ARTICLE_BY_ID_QUERY = "\n *[_type == \"article\"\n && _id == $id\n ][0] {\n title,\n description,\n \"slug\": slug.current,\n \"section\": primarySection->{ \"slug\": slug.current, title },\n \"content\": content[] {\n // Pass through all standard blocks unchanged\n _type != \"docsCardCollection\" => { ... },\n // Resolve references inside card collections so we get titles/slugs\n _type == \"docsCardCollection\" => {\n ...,\n cards[] {\n ...,\n \"resolvedTitle\": reference->title,\n \"resolvedSlug\": reference->slug.current\n }\n }\n }\n}\n";
|
|
100
|
+
/**
|
|
101
|
+
* Resolve an article slug from a URL path segment.
|
|
102
|
+
*
|
|
103
|
+
* Handles simple paths (just the slug, e.g., "webhooks") by matching
|
|
104
|
+
* against slug.current. Returns the slug for downstream slug-based fetching.
|
|
105
|
+
*
|
|
106
|
+
* @param $slug — the path segment (article slug)
|
|
107
|
+
*/
|
|
108
|
+
export declare const ARTICLE_SLUG_BY_PATH_QUERY = "\n *[_type == \"article\"\n && slug.current == $slug\n && !(_id in path(\"drafts.**\"))\n ][0] { \"slug\": slug.current, \"sectionSlug\": primarySection->slug.current }\n";
|
|
109
|
+
/**
|
|
110
|
+
* Resolve an article slug from a section-qualified path.
|
|
111
|
+
*
|
|
112
|
+
* Handles compound paths like "content-lake/webhooks" where the first
|
|
113
|
+
* segment is the section slug and the last segment is the article slug.
|
|
114
|
+
* This disambiguates articles that share a slug across different sections.
|
|
115
|
+
*
|
|
116
|
+
* @param $articleSlug — the article slug (last path segment)
|
|
117
|
+
* @param $sectionSlug — the section slug (first path segment)
|
|
118
|
+
*/
|
|
119
|
+
export declare const ARTICLE_SLUG_BY_SECTION_PATH_QUERY = "\n *[_type == \"article\"\n && slug.current == $articleSlug\n && primarySection->slug.current == $sectionSlug\n && !(_id in path(\"drafts.**\"))\n ][0] { \"slug\": slug.current }\n";
|
|
120
|
+
/**
|
|
121
|
+
* Find all article documents that are versioned within a content release.
|
|
122
|
+
*
|
|
123
|
+
* Uses `sanity::partOfRelease()` to identify documents that have versions
|
|
124
|
+
* in the specified release. Must be called with a perspective-enabled
|
|
125
|
+
* client so the versioned content is visible.
|
|
126
|
+
*
|
|
127
|
+
* Returns the original document IDs (not the `versions.*` prefixed ones)
|
|
128
|
+
* because the perspective client transparently resolves versioned docs
|
|
129
|
+
* back to their canonical shape.
|
|
130
|
+
*
|
|
131
|
+
* @param $releaseId — the release ID (e.g., "ailf-scenario-01-test")
|
|
132
|
+
*/
|
|
133
|
+
export declare const ARTICLES_IN_RELEASE_QUERY = "\n *[_type == \"article\"\n && sanity::partOfRelease($releaseId)\n ] { \"slug\": slug.current, _id, title }\n";
|
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GROQ queries scoped to each documentation feature area.
|
|
3
|
+
*
|
|
4
|
+
* Schema notes (dataset: gabe-wyatt-doc-plat-dev-2026-01-05):
|
|
5
|
+
*
|
|
6
|
+
* _type == "article" — 614 documentation articles
|
|
7
|
+
* primarySection — reference to a docsNavSection
|
|
8
|
+
* content[] — Portable Text rich-text field
|
|
9
|
+
* slug.current — URL slug
|
|
10
|
+
*
|
|
11
|
+
* Code blocks in `content`:
|
|
12
|
+
* _type == "codeBlock" → blocks[].code.code, blocks[].code.language, blocks[].filename
|
|
13
|
+
*
|
|
14
|
+
* Sections are _type == "docsNavSection" with slug.current.
|
|
15
|
+
*
|
|
16
|
+
* Each query joins through primarySection._ref to the relevant
|
|
17
|
+
* docsNavSection IDs and returns a consistent projection.
|
|
18
|
+
*/
|
|
19
|
+
// ---------------------------------------------------------------------------
|
|
20
|
+
// Section IDs (docsNavSection._id values)
|
|
21
|
+
// ---------------------------------------------------------------------------
|
|
22
|
+
const SECTION_IDS = {
|
|
23
|
+
apisAndSdks: "bc30def4-a95a-44ef-a4d4-cacb4d55e816",
|
|
24
|
+
appSdk: "d01fba8e-da8d-40ba-a09f-1a5f000de4a4",
|
|
25
|
+
astroQuickstart: "73bebb61-e508-42b7-b44b-c4703ae42d01",
|
|
26
|
+
computeAndAi: "3024ce79-c196-49ee-a237-a327d6a6348f",
|
|
27
|
+
contentLake: "60a6bcb5-9706-4cab-9153-57725e28f4d0",
|
|
28
|
+
developerGuides: "ea6b80fa-d0d2-4daa-8220-eb8abdcc9deb",
|
|
29
|
+
gettingStarted: "f78cfeb7-ebc4-4684-b7fa-99c7ae528e68",
|
|
30
|
+
libraries: "4551373a-8764-4da3-ac65-406d7dfb96e2",
|
|
31
|
+
nextJsQuickstart: "6208dff1-bba7-487a-a6bb-a0ffccb5846c",
|
|
32
|
+
nuxtJsQuickstart: "b2c937d0-34b3-435e-818b-d0c8520ea9b8",
|
|
33
|
+
reactRouterQuickstart: "e223241c-e207-41e0-8e12-f80e78203cf1",
|
|
34
|
+
studio: "d67e3879-0342-4a80-8a2d-e35908df35cc",
|
|
35
|
+
visualEditing: "4e0ef463-01e2-48db-9a31-38b3912ececd",
|
|
36
|
+
};
|
|
37
|
+
// ---------------------------------------------------------------------------
|
|
38
|
+
// Shared projection
|
|
39
|
+
// ---------------------------------------------------------------------------
|
|
40
|
+
/**
|
|
41
|
+
* Standard projection applied to every article query.
|
|
42
|
+
*
|
|
43
|
+
* Returns the raw Portable Text `content` array so that the Node-side
|
|
44
|
+
* converter (@portabletext/markdown) can produce well-structured Markdown
|
|
45
|
+
* with headings, code fences, tables, callouts, etc.
|
|
46
|
+
*/
|
|
47
|
+
const ARTICLE_PROJECTION = `{
|
|
48
|
+
title,
|
|
49
|
+
description,
|
|
50
|
+
"slug": slug.current,
|
|
51
|
+
"section": primarySection->{ "slug": slug.current, title },
|
|
52
|
+
"content": content[] {
|
|
53
|
+
// Pass through all standard blocks unchanged
|
|
54
|
+
_type != "docsCardCollection" => { ... },
|
|
55
|
+
// Resolve references inside card collections so we get titles/slugs
|
|
56
|
+
_type == "docsCardCollection" => {
|
|
57
|
+
...,
|
|
58
|
+
cards[] {
|
|
59
|
+
...,
|
|
60
|
+
"resolvedTitle": reference->title,
|
|
61
|
+
"resolvedSlug": reference->slug.current
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}`;
|
|
66
|
+
// ---------------------------------------------------------------------------
|
|
67
|
+
// Feature-area queries
|
|
68
|
+
// ---------------------------------------------------------------------------
|
|
69
|
+
export const FEATURE_AREA_QUERIES = {
|
|
70
|
+
/**
|
|
71
|
+
* Other Frameworks — Nuxt, React Router/Remix, Astro
|
|
72
|
+
*/
|
|
73
|
+
frameworks: `
|
|
74
|
+
*[_type == "article"
|
|
75
|
+
&& !(_id in path("drafts.**"))
|
|
76
|
+
&& (
|
|
77
|
+
primarySection._ref in [
|
|
78
|
+
"${SECTION_IDS.nuxtJsQuickstart}",
|
|
79
|
+
"${SECTION_IDS.reactRouterQuickstart}",
|
|
80
|
+
"${SECTION_IDS.astroQuickstart}"
|
|
81
|
+
]
|
|
82
|
+
|| (primarySection._ref == "${SECTION_IDS.developerGuides}"
|
|
83
|
+
&& (title match "Remix*" || title match "Nuxt*"
|
|
84
|
+
|| title match "Astro*" || title match "SvelteKit*"))
|
|
85
|
+
)
|
|
86
|
+
] ${ARTICLE_PROJECTION}
|
|
87
|
+
`,
|
|
88
|
+
/**
|
|
89
|
+
* Functions / Compute / AI — serverless functions, webhooks
|
|
90
|
+
* Section: "Compute and AI" (12 articles)
|
|
91
|
+
*/
|
|
92
|
+
functions: `
|
|
93
|
+
*[_type == "article"
|
|
94
|
+
&& primarySection._ref == "${SECTION_IDS.computeAndAi}"
|
|
95
|
+
&& !(_id in path("drafts.**"))
|
|
96
|
+
] ${ARTICLE_PROJECTION}
|
|
97
|
+
`,
|
|
98
|
+
/**
|
|
99
|
+
* GROQ Query Language — introduction, syntax, joins, filtering, projections
|
|
100
|
+
* Combines: Content Lake section GROQ articles + Developer Guides articles
|
|
101
|
+
* about querying + title-matched GROQ articles across all sections.
|
|
102
|
+
*/
|
|
103
|
+
groq: `
|
|
104
|
+
*[_type == "article"
|
|
105
|
+
&& !(_id in path("drafts.**"))
|
|
106
|
+
&& (
|
|
107
|
+
primarySection._ref == "${SECTION_IDS.contentLake}"
|
|
108
|
+
|| primarySection._ref == "${SECTION_IDS.developerGuides}"
|
|
109
|
+
)
|
|
110
|
+
&& (
|
|
111
|
+
title match "GROQ*"
|
|
112
|
+
|| title match "*GROQ*"
|
|
113
|
+
|| title match "Query*"
|
|
114
|
+
|| title match "How Queries*"
|
|
115
|
+
|| slug.current match "groq-*"
|
|
116
|
+
|| slug.current match "query-*"
|
|
117
|
+
|| slug.current match "how-queries-*"
|
|
118
|
+
|| slug.current match "paginating-with-groq"
|
|
119
|
+
|| slug.current match "high-performance-groq"
|
|
120
|
+
)
|
|
121
|
+
] ${ARTICLE_PROJECTION}
|
|
122
|
+
`,
|
|
123
|
+
/**
|
|
124
|
+
* Next.js integration + Live Content API
|
|
125
|
+
* Combines: Next.js quickstart section + developer-guide articles
|
|
126
|
+
* mentioning Next.js or Live Content.
|
|
127
|
+
*/
|
|
128
|
+
"nextjs-live": `
|
|
129
|
+
*[_type == "article"
|
|
130
|
+
&& !(_id in path("drafts.**"))
|
|
131
|
+
&& (
|
|
132
|
+
primarySection._ref == "${SECTION_IDS.nextJsQuickstart}"
|
|
133
|
+
|| (primarySection._ref == "${SECTION_IDS.developerGuides}"
|
|
134
|
+
&& (title match "Next*" || title match "*Live*"))
|
|
135
|
+
)
|
|
136
|
+
] ${ARTICLE_PROJECTION}
|
|
137
|
+
`,
|
|
138
|
+
/**
|
|
139
|
+
* Studio Setup & Customization
|
|
140
|
+
* Section: "Studio" (116 articles)
|
|
141
|
+
*/
|
|
142
|
+
"studio-setup": `
|
|
143
|
+
*[_type == "article"
|
|
144
|
+
&& primarySection._ref == "${SECTION_IDS.studio}"
|
|
145
|
+
&& !(_id in path("drafts.**"))
|
|
146
|
+
] ${ARTICLE_PROJECTION}
|
|
147
|
+
`,
|
|
148
|
+
/**
|
|
149
|
+
* Visual Editing — Presentation tool, overlays, live preview
|
|
150
|
+
* Section: "Visual Editing" (24 articles)
|
|
151
|
+
*/
|
|
152
|
+
"visual-editing": `
|
|
153
|
+
*[_type == "article"
|
|
154
|
+
&& primarySection._ref == "${SECTION_IDS.visualEditing}"
|
|
155
|
+
&& !(_id in path("drafts.**"))
|
|
156
|
+
] ${ARTICLE_PROJECTION}
|
|
157
|
+
`,
|
|
158
|
+
};
|
|
159
|
+
export const ALL_FEATURE_AREAS = Object.keys(FEATURE_AREA_QUERIES);
|
|
160
|
+
// ---------------------------------------------------------------------------
|
|
161
|
+
// Single-article query (used by canonical doc fetcher)
|
|
162
|
+
// ---------------------------------------------------------------------------
|
|
163
|
+
/**
|
|
164
|
+
* Fetch a single article by its slug.
|
|
165
|
+
* Returns the same projection shape as the feature-area queries.
|
|
166
|
+
*/
|
|
167
|
+
export const ARTICLE_BY_SLUG_QUERY = `
|
|
168
|
+
*[_type == "article"
|
|
169
|
+
&& slug.current == $slug
|
|
170
|
+
&& !(_id in path("drafts.**"))
|
|
171
|
+
][0] ${ARTICLE_PROJECTION}
|
|
172
|
+
`;
|
|
173
|
+
/**
|
|
174
|
+
* Fetch all published articles (for full-corpus generation).
|
|
175
|
+
*/
|
|
176
|
+
export const ALL_ARTICLES_QUERY = `
|
|
177
|
+
*[_type == "article"
|
|
178
|
+
&& !(_id in path("drafts.**"))
|
|
179
|
+
] | order(primarySection->slug.current, title) ${ARTICLE_PROJECTION}
|
|
180
|
+
`;
|
|
181
|
+
// ---------------------------------------------------------------------------
|
|
182
|
+
// Perspective diffing queries
|
|
183
|
+
// ---------------------------------------------------------------------------
|
|
184
|
+
/**
|
|
185
|
+
* Fetch article metadata for a list of slugs.
|
|
186
|
+
*
|
|
187
|
+
* Returns lightweight metadata (slug + _rev) for comparison between
|
|
188
|
+
* published and perspective states. The _rev field changes when a document
|
|
189
|
+
* is modified, making it an efficient diff signal.
|
|
190
|
+
*
|
|
191
|
+
* Usage: client.fetch(ARTICLES_METADATA_BY_SLUGS_QUERY, { slugs: ["slug-a", "slug-b"] })
|
|
192
|
+
*/
|
|
193
|
+
export const ARTICLES_METADATA_BY_SLUGS_QUERY = `
|
|
194
|
+
*[_type == "article"
|
|
195
|
+
&& slug.current in $slugs
|
|
196
|
+
&& !(_id in path("drafts.**"))
|
|
197
|
+
] {
|
|
198
|
+
"slug": slug.current,
|
|
199
|
+
_id,
|
|
200
|
+
_rev,
|
|
201
|
+
title
|
|
202
|
+
}
|
|
203
|
+
`;
|
|
204
|
+
/**
|
|
205
|
+
* Fetch a single article by its slug — identical to ARTICLE_BY_SLUG_QUERY
|
|
206
|
+
* but designed to be called with a perspective-enabled client.
|
|
207
|
+
*
|
|
208
|
+
* Returns the full article projection for content comparison.
|
|
209
|
+
*/
|
|
210
|
+
export const ARTICLE_BY_SLUG_WITH_PERSPECTIVE_QUERY = `
|
|
211
|
+
*[_type == "article"
|
|
212
|
+
&& slug.current == $slug
|
|
213
|
+
][0] ${ARTICLE_PROJECTION}
|
|
214
|
+
`;
|
|
215
|
+
// ---------------------------------------------------------------------------
|
|
216
|
+
// Document ID queries
|
|
217
|
+
// ---------------------------------------------------------------------------
|
|
218
|
+
/**
|
|
219
|
+
* Fetch articles by their document IDs.
|
|
220
|
+
*
|
|
221
|
+
* Does NOT include the `!(_id in path("drafts.**"))` filter because this
|
|
222
|
+
* query is designed for use with perspective-enabled clients where draft
|
|
223
|
+
* filtering is handled at the client level.
|
|
224
|
+
*
|
|
225
|
+
* @param $ids — array of document ID strings
|
|
226
|
+
*/
|
|
227
|
+
export const ARTICLES_BY_IDS_QUERY = `
|
|
228
|
+
*[_type == "article"
|
|
229
|
+
&& _id in $ids
|
|
230
|
+
] ${ARTICLE_PROJECTION}
|
|
231
|
+
`;
|
|
232
|
+
/**
|
|
233
|
+
* Fetch a single article by its document ID.
|
|
234
|
+
*
|
|
235
|
+
* Does NOT include the `!(_id in path("drafts.**"))` filter because this
|
|
236
|
+
* query is designed for use with perspective-enabled clients where draft
|
|
237
|
+
* filtering is handled at the client level.
|
|
238
|
+
*
|
|
239
|
+
* @param $id — document ID string
|
|
240
|
+
*/
|
|
241
|
+
export const ARTICLE_BY_ID_QUERY = `
|
|
242
|
+
*[_type == "article"
|
|
243
|
+
&& _id == $id
|
|
244
|
+
][0] ${ARTICLE_PROJECTION}
|
|
245
|
+
`;
|
|
246
|
+
// ---------------------------------------------------------------------------
|
|
247
|
+
// Path-based resolution queries
|
|
248
|
+
// ---------------------------------------------------------------------------
|
|
249
|
+
/**
|
|
250
|
+
* Resolve an article slug from a URL path segment.
|
|
251
|
+
*
|
|
252
|
+
* Handles simple paths (just the slug, e.g., "webhooks") by matching
|
|
253
|
+
* against slug.current. Returns the slug for downstream slug-based fetching.
|
|
254
|
+
*
|
|
255
|
+
* @param $slug — the path segment (article slug)
|
|
256
|
+
*/
|
|
257
|
+
export const ARTICLE_SLUG_BY_PATH_QUERY = `
|
|
258
|
+
*[_type == "article"
|
|
259
|
+
&& slug.current == $slug
|
|
260
|
+
&& !(_id in path("drafts.**"))
|
|
261
|
+
][0] { "slug": slug.current, "sectionSlug": primarySection->slug.current }
|
|
262
|
+
`;
|
|
263
|
+
/**
|
|
264
|
+
* Resolve an article slug from a section-qualified path.
|
|
265
|
+
*
|
|
266
|
+
* Handles compound paths like "content-lake/webhooks" where the first
|
|
267
|
+
* segment is the section slug and the last segment is the article slug.
|
|
268
|
+
* This disambiguates articles that share a slug across different sections.
|
|
269
|
+
*
|
|
270
|
+
* @param $articleSlug — the article slug (last path segment)
|
|
271
|
+
* @param $sectionSlug — the section slug (first path segment)
|
|
272
|
+
*/
|
|
273
|
+
export const ARTICLE_SLUG_BY_SECTION_PATH_QUERY = `
|
|
274
|
+
*[_type == "article"
|
|
275
|
+
&& slug.current == $articleSlug
|
|
276
|
+
&& primarySection->slug.current == $sectionSlug
|
|
277
|
+
&& !(_id in path("drafts.**"))
|
|
278
|
+
][0] { "slug": slug.current }
|
|
279
|
+
`;
|
|
280
|
+
// ---------------------------------------------------------------------------
|
|
281
|
+
// Content Release — perspective ref expansion
|
|
282
|
+
// ---------------------------------------------------------------------------
|
|
283
|
+
/**
|
|
284
|
+
* Find all article documents that are versioned within a content release.
|
|
285
|
+
*
|
|
286
|
+
* Uses `sanity::partOfRelease()` to identify documents that have versions
|
|
287
|
+
* in the specified release. Must be called with a perspective-enabled
|
|
288
|
+
* client so the versioned content is visible.
|
|
289
|
+
*
|
|
290
|
+
* Returns the original document IDs (not the `versions.*` prefixed ones)
|
|
291
|
+
* because the perspective client transparently resolves versioned docs
|
|
292
|
+
* back to their canonical shape.
|
|
293
|
+
*
|
|
294
|
+
* @param $releaseId — the release ID (e.g., "ailf-scenario-01-test")
|
|
295
|
+
*/
|
|
296
|
+
export const ARTICLES_IN_RELEASE_QUERY = `
|
|
297
|
+
*[_type == "article"
|
|
298
|
+
&& sanity::partOfRelease($releaseId)
|
|
299
|
+
] { "slug": slug.current, _id, title }
|
|
300
|
+
`;
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* schedules/digest.ts
|
|
3
|
+
*
|
|
4
|
+
* Weekly digest engine — aggregates evaluation reports from a time window
|
|
5
|
+
* and computes trend summaries for notification delivery.
|
|
6
|
+
*
|
|
7
|
+
* The digest answers: "How did our AI literacy scores trend this week?"
|
|
8
|
+
*
|
|
9
|
+
* Data flow:
|
|
10
|
+
* 1. Query Sanity for all reports in the lookback window
|
|
11
|
+
* 2. Group by feature area
|
|
12
|
+
* 3. Compute trend direction and magnitude per area
|
|
13
|
+
* 4. Identify regressions, improvements, and stable areas
|
|
14
|
+
* 5. Return a structured DigestSummary for formatting
|
|
15
|
+
*
|
|
16
|
+
* @see docs/design-docs/report-store/notifications.md
|
|
17
|
+
* @see docs/design-docs/report-store/implementation.md — Phase 5
|
|
18
|
+
*/
|
|
19
|
+
import type { SanityClient } from "@sanity/client";
|
|
20
|
+
/** Trend analysis for a single feature area */
|
|
21
|
+
export interface AreaTrend {
|
|
22
|
+
/** Feature area name */
|
|
23
|
+
area: string;
|
|
24
|
+
/** Score at the start of the window */
|
|
25
|
+
firstScore: number;
|
|
26
|
+
/** Score at the end of the window */
|
|
27
|
+
lastScore: number;
|
|
28
|
+
/** Number of data points in the window */
|
|
29
|
+
reportCount: number;
|
|
30
|
+
/** Net score change (last - first) */
|
|
31
|
+
scoreDelta: number;
|
|
32
|
+
/** Trend direction */
|
|
33
|
+
trend: TrendDirection;
|
|
34
|
+
}
|
|
35
|
+
/** A single report data point from the lookback window */
|
|
36
|
+
export interface DigestReportEntry {
|
|
37
|
+
/** ISO timestamp */
|
|
38
|
+
completedAt: string;
|
|
39
|
+
/** Duration in milliseconds */
|
|
40
|
+
durationMs: number;
|
|
41
|
+
/** Evaluation mode */
|
|
42
|
+
mode: string;
|
|
43
|
+
/** Overall average score */
|
|
44
|
+
overallScore: number;
|
|
45
|
+
/** Report ID */
|
|
46
|
+
reportId: string;
|
|
47
|
+
/** Per-area scores */
|
|
48
|
+
scores: {
|
|
49
|
+
feature: string;
|
|
50
|
+
totalScore: number;
|
|
51
|
+
}[];
|
|
52
|
+
/** Documentation source name */
|
|
53
|
+
sourceName: string;
|
|
54
|
+
/** Report tag (schedule name) */
|
|
55
|
+
tag?: string;
|
|
56
|
+
}
|
|
57
|
+
/** The complete digest summary */
|
|
58
|
+
export interface DigestSummary {
|
|
59
|
+
/** Per-area trend breakdown */
|
|
60
|
+
areaTrends: AreaTrend[];
|
|
61
|
+
/** Areas that improved by more than the noise threshold */
|
|
62
|
+
improved: string[];
|
|
63
|
+
/** End of the lookback window (usually "now") */
|
|
64
|
+
lookbackEnd: string;
|
|
65
|
+
/** Start of the lookback window */
|
|
66
|
+
lookbackStart: string;
|
|
67
|
+
/** Overall score delta across the window */
|
|
68
|
+
overallDelta: number;
|
|
69
|
+
/** Overall score at the end of the window */
|
|
70
|
+
overallLatest: number;
|
|
71
|
+
/** Overall trend direction */
|
|
72
|
+
overallTrend: TrendDirection;
|
|
73
|
+
/** Areas that regressed by more than the noise threshold */
|
|
74
|
+
regressed: string[];
|
|
75
|
+
/** Total number of reports in the window */
|
|
76
|
+
reportCount: number;
|
|
77
|
+
/** Areas with score changes within the noise threshold */
|
|
78
|
+
stable: string[];
|
|
79
|
+
/** Total evaluation cost in the window (if available) */
|
|
80
|
+
totalCost?: number;
|
|
81
|
+
}
|
|
82
|
+
/** Trend direction for a feature area or overall score */
|
|
83
|
+
export type TrendDirection = "improving" | "regressing" | "stable";
|
|
84
|
+
export interface DigestOptions {
|
|
85
|
+
/** Override the Sanity client (for testing) */
|
|
86
|
+
client?: SanityClient;
|
|
87
|
+
/** Sanity dataset for report queries (independent of eval dataset) */
|
|
88
|
+
dataset?: string;
|
|
89
|
+
/** How many days to look back (default: 7) */
|
|
90
|
+
lookbackDays?: number;
|
|
91
|
+
/** Noise threshold for trend classification (default: 2) */
|
|
92
|
+
noiseThreshold?: number;
|
|
93
|
+
/** Sanity project ID for report queries (independent of eval project) */
|
|
94
|
+
projectId?: string;
|
|
95
|
+
/** Sanity API token */
|
|
96
|
+
token?: string;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Build a digest summary from a chronologically-ordered list of reports.
|
|
100
|
+
*
|
|
101
|
+
* Pure function — no I/O, fully testable.
|
|
102
|
+
*/
|
|
103
|
+
export declare function buildDigestSummary(reports: DigestReportEntry[], lookbackStart: Date, lookbackEnd: Date, noiseThreshold?: number): DigestSummary;
|
|
104
|
+
/**
|
|
105
|
+
* Classify a score delta into a trend direction.
|
|
106
|
+
*/
|
|
107
|
+
export declare function classifyTrend(delta: number, threshold?: number): TrendDirection;
|
|
108
|
+
/**
|
|
109
|
+
* Generate a digest summary from recent evaluation reports.
|
|
110
|
+
*
|
|
111
|
+
* Queries the Sanity Content Lake for all reports within the lookback
|
|
112
|
+
* window and computes trend analysis per area.
|
|
113
|
+
*
|
|
114
|
+
* @returns DigestSummary, or null if no reports found or on error
|
|
115
|
+
*/
|
|
116
|
+
export declare function generateDigest(options?: DigestOptions): Promise<DigestSummary | null>;
|