@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,275 @@
|
|
|
1
|
+
# studio-setup.yaml — Human-graded reference samples for Studio Setup tasks
|
|
2
|
+
#
|
|
3
|
+
# Real LLM responses from eval runs, graded by a human expert.
|
|
4
|
+
# Used by `pnpm grader-validate` to measure grader accuracy.
|
|
5
|
+
|
|
6
|
+
- taskId: studio-blog-schema
|
|
7
|
+
area: studio-setup
|
|
8
|
+
response: |
|
|
9
|
+
To set up a Sanity Studio with a blog schema, here's a complete implementation:
|
|
10
|
+
|
|
11
|
+
```typescript
|
|
12
|
+
// sanity.config.ts
|
|
13
|
+
import { defineConfig } from 'sanity'
|
|
14
|
+
import { structureTool } from 'sanity/structure'
|
|
15
|
+
import { schemaTypes } from './schemas'
|
|
16
|
+
|
|
17
|
+
export default defineConfig({
|
|
18
|
+
name: 'default',
|
|
19
|
+
title: 'My Blog',
|
|
20
|
+
projectId: '<your-project-id>',
|
|
21
|
+
dataset: 'production',
|
|
22
|
+
plugins: [structureTool()],
|
|
23
|
+
schema: {
|
|
24
|
+
types: schemaTypes,
|
|
25
|
+
},
|
|
26
|
+
})
|
|
27
|
+
|
|
28
|
+
// schemas/index.ts
|
|
29
|
+
import { post } from './post'
|
|
30
|
+
import { author } from './author'
|
|
31
|
+
import { category } from './category'
|
|
32
|
+
|
|
33
|
+
export const schemaTypes = [post, author, category]
|
|
34
|
+
|
|
35
|
+
// schemas/post.ts
|
|
36
|
+
import { defineType, defineField } from 'sanity'
|
|
37
|
+
|
|
38
|
+
export const post = defineType({
|
|
39
|
+
name: 'post',
|
|
40
|
+
title: 'Post',
|
|
41
|
+
type: 'document',
|
|
42
|
+
fields: [
|
|
43
|
+
defineField({
|
|
44
|
+
name: 'title',
|
|
45
|
+
title: 'Title',
|
|
46
|
+
type: 'string',
|
|
47
|
+
validation: (rule) => rule.required(),
|
|
48
|
+
}),
|
|
49
|
+
defineField({
|
|
50
|
+
name: 'slug',
|
|
51
|
+
title: 'Slug',
|
|
52
|
+
type: 'slug',
|
|
53
|
+
options: { source: 'title', maxLength: 96 },
|
|
54
|
+
}),
|
|
55
|
+
defineField({
|
|
56
|
+
name: 'author',
|
|
57
|
+
title: 'Author',
|
|
58
|
+
type: 'reference',
|
|
59
|
+
to: [{ type: 'author' }],
|
|
60
|
+
}),
|
|
61
|
+
defineField({
|
|
62
|
+
name: 'categories',
|
|
63
|
+
title: 'Categories',
|
|
64
|
+
type: 'array',
|
|
65
|
+
of: [{ type: 'reference', to: [{ type: 'category' }] }],
|
|
66
|
+
}),
|
|
67
|
+
defineField({
|
|
68
|
+
name: 'publishedAt',
|
|
69
|
+
title: 'Published at',
|
|
70
|
+
type: 'datetime',
|
|
71
|
+
}),
|
|
72
|
+
defineField({
|
|
73
|
+
name: 'body',
|
|
74
|
+
title: 'Body',
|
|
75
|
+
type: 'array',
|
|
76
|
+
of: [{ type: 'block' }],
|
|
77
|
+
}),
|
|
78
|
+
],
|
|
79
|
+
})
|
|
80
|
+
|
|
81
|
+
// schemas/author.ts
|
|
82
|
+
import { defineType, defineField } from 'sanity'
|
|
83
|
+
|
|
84
|
+
export const author = defineType({
|
|
85
|
+
name: 'author',
|
|
86
|
+
title: 'Author',
|
|
87
|
+
type: 'document',
|
|
88
|
+
fields: [
|
|
89
|
+
defineField({
|
|
90
|
+
name: 'name',
|
|
91
|
+
title: 'Name',
|
|
92
|
+
type: 'string',
|
|
93
|
+
validation: (rule) => rule.required(),
|
|
94
|
+
}),
|
|
95
|
+
defineField({
|
|
96
|
+
name: 'bio',
|
|
97
|
+
title: 'Bio',
|
|
98
|
+
type: 'text',
|
|
99
|
+
}),
|
|
100
|
+
defineField({
|
|
101
|
+
name: 'image',
|
|
102
|
+
title: 'Image',
|
|
103
|
+
type: 'image',
|
|
104
|
+
options: { hotspot: true },
|
|
105
|
+
}),
|
|
106
|
+
],
|
|
107
|
+
})
|
|
108
|
+
|
|
109
|
+
// schemas/category.ts
|
|
110
|
+
import { defineType, defineField } from 'sanity'
|
|
111
|
+
|
|
112
|
+
export const category = defineType({
|
|
113
|
+
name: 'category',
|
|
114
|
+
title: 'Category',
|
|
115
|
+
type: 'document',
|
|
116
|
+
fields: [
|
|
117
|
+
defineField({
|
|
118
|
+
name: 'title',
|
|
119
|
+
title: 'Title',
|
|
120
|
+
type: 'string',
|
|
121
|
+
}),
|
|
122
|
+
defineField({
|
|
123
|
+
name: 'description',
|
|
124
|
+
title: 'Description',
|
|
125
|
+
type: 'text',
|
|
126
|
+
}),
|
|
127
|
+
],
|
|
128
|
+
})
|
|
129
|
+
```
|
|
130
|
+
rubrics:
|
|
131
|
+
- dimension: task-completion
|
|
132
|
+
rubricText: |
|
|
133
|
+
Score task completion from 0 to 100:
|
|
134
|
+
- 0: Couldn't attempt — missing critical information
|
|
135
|
+
- 20: Attempted but fundamentally wrong approach
|
|
136
|
+
- 50: Partial implementation — major functional gaps
|
|
137
|
+
- 80: Mostly complete — minor issues or missing edge cases
|
|
138
|
+
- 100: Fully functional code — works as expected
|
|
139
|
+
|
|
140
|
+
Must demonstrate:
|
|
141
|
+
- Three document types: post, author, category
|
|
142
|
+
- Post includes Portable Text body (array of blocks)
|
|
143
|
+
- Post has reference to author
|
|
144
|
+
- Post has array of references to categories
|
|
145
|
+
- sanity.config.ts with defineConfig and schema registration
|
|
146
|
+
|
|
147
|
+
Return ONLY a JSON object: {"score": <number>, "reason": "<explanation>"}
|
|
148
|
+
humanScore: 95
|
|
149
|
+
notes:
|
|
150
|
+
"All criteria met. Clean separation of schema files, proper use of
|
|
151
|
+
defineType/defineField, correct reference patterns, Portable Text body."
|
|
152
|
+
- dimension: code-correctness
|
|
153
|
+
rubricText: |
|
|
154
|
+
Score code correctness from 0 to 100:
|
|
155
|
+
- 0: Broken code, syntax errors, or deprecated APIs
|
|
156
|
+
- 30: Works but uses anti-patterns or inefficient approaches
|
|
157
|
+
- 50: Works but not idiomatic
|
|
158
|
+
- 80: Follows most best practices
|
|
159
|
+
- 100: Follows all best practices, idiomatic implementation
|
|
160
|
+
|
|
161
|
+
Check for:
|
|
162
|
+
- Uses defineConfig, defineType, defineField (not deprecated createSchema)
|
|
163
|
+
- Correct reference syntax: type: 'reference', to: [{type: 'author'}]
|
|
164
|
+
- Portable Text as array of blocks: type: 'array', of: [{type: 'block'}]
|
|
165
|
+
- Proper validation rules
|
|
166
|
+
- Schema registered via schema.types in config
|
|
167
|
+
|
|
168
|
+
Return ONLY a JSON object: {"score": <number>, "reason": "<explanation>"}
|
|
169
|
+
humanScore: 90
|
|
170
|
+
notes:
|
|
171
|
+
"All modern APIs used correctly. defineConfig, defineType, defineField
|
|
172
|
+
all proper. Reference syntax correct. Validation on required fields.
|
|
173
|
+
Only minor: could add preview configuration."
|
|
174
|
+
- dimension: doc-coverage
|
|
175
|
+
rubricText: |
|
|
176
|
+
Score documentation coverage from 0 to 100:
|
|
177
|
+
- 0: Had to hallucinate/guess most implementation details
|
|
178
|
+
- 30: Significant gaps — filled with assumptions
|
|
179
|
+
- 50: Some gaps — inferred from partial information
|
|
180
|
+
- 80: Minor gaps — almost everything was documented
|
|
181
|
+
- 100: Complete coverage — all necessary info was in docs
|
|
182
|
+
|
|
183
|
+
Return ONLY a JSON object: {"score": <number>, "reason": "<explanation>"}
|
|
184
|
+
humanScore: 85
|
|
185
|
+
notes:
|
|
186
|
+
"All patterns match documented APIs. structureTool import, schema
|
|
187
|
+
registration, field types — all from docs. The slug options.source
|
|
188
|
+
pattern is documented."
|
|
189
|
+
gradedBy: "senior-engineer"
|
|
190
|
+
gradedAt: "2026-03-10"
|
|
191
|
+
|
|
192
|
+
- taskId: studio-blog-schema
|
|
193
|
+
area: studio-setup
|
|
194
|
+
response: |
|
|
195
|
+
Here's a basic blog schema for Sanity:
|
|
196
|
+
|
|
197
|
+
```javascript
|
|
198
|
+
// schema.js
|
|
199
|
+
export default createSchema({
|
|
200
|
+
name: 'default',
|
|
201
|
+
types: [
|
|
202
|
+
{
|
|
203
|
+
name: 'post',
|
|
204
|
+
type: 'document',
|
|
205
|
+
fields: [
|
|
206
|
+
{ name: 'title', type: 'string' },
|
|
207
|
+
{ name: 'body', type: 'text' },
|
|
208
|
+
{ name: 'author', type: 'string' },
|
|
209
|
+
]
|
|
210
|
+
}
|
|
211
|
+
]
|
|
212
|
+
})
|
|
213
|
+
```
|
|
214
|
+
rubrics:
|
|
215
|
+
- dimension: task-completion
|
|
216
|
+
rubricText: |
|
|
217
|
+
Score task completion from 0 to 100:
|
|
218
|
+
- 0: Couldn't attempt — missing critical information
|
|
219
|
+
- 20: Attempted but fundamentally wrong approach
|
|
220
|
+
- 50: Partial implementation — major functional gaps
|
|
221
|
+
- 80: Mostly complete — minor issues or missing edge cases
|
|
222
|
+
- 100: Fully functional code — works as expected
|
|
223
|
+
|
|
224
|
+
Must demonstrate:
|
|
225
|
+
- Three document types: post, author, category
|
|
226
|
+
- Post includes Portable Text body (array of blocks)
|
|
227
|
+
- Post has reference to author
|
|
228
|
+
- Post has array of references to categories
|
|
229
|
+
- sanity.config.ts with defineConfig and schema registration
|
|
230
|
+
|
|
231
|
+
Return ONLY a JSON object: {"score": <number>, "reason": "<explanation>"}
|
|
232
|
+
humanScore: 15
|
|
233
|
+
notes:
|
|
234
|
+
"Only post type defined (missing author, category). Body is plain text
|
|
235
|
+
not Portable Text. Author is a string not a reference. No categories.
|
|
236
|
+
Uses deprecated createSchema."
|
|
237
|
+
- dimension: code-correctness
|
|
238
|
+
rubricText: |
|
|
239
|
+
Score code correctness from 0 to 100:
|
|
240
|
+
- 0: Broken code, syntax errors, or deprecated APIs
|
|
241
|
+
- 30: Works but uses anti-patterns or inefficient approaches
|
|
242
|
+
- 50: Works but not idiomatic
|
|
243
|
+
- 80: Follows most best practices
|
|
244
|
+
- 100: Follows all best practices, idiomatic implementation
|
|
245
|
+
|
|
246
|
+
Check for:
|
|
247
|
+
- Uses defineConfig, defineType, defineField (not deprecated createSchema)
|
|
248
|
+
- Correct reference syntax: type: 'reference', to: [{type: 'author'}]
|
|
249
|
+
- Portable Text as array of blocks: type: 'array', of: [{type: 'block'}]
|
|
250
|
+
- Proper validation rules
|
|
251
|
+
- Schema registered via schema.types in config
|
|
252
|
+
|
|
253
|
+
Return ONLY a JSON object: {"score": <number>, "reason": "<explanation>"}
|
|
254
|
+
humanScore: 5
|
|
255
|
+
notes:
|
|
256
|
+
"Uses deprecated createSchema (removed in Sanity v3). No
|
|
257
|
+
defineType/defineField. Plain JavaScript instead of TypeScript. No
|
|
258
|
+
references, no Portable Text, no validation."
|
|
259
|
+
- dimension: doc-coverage
|
|
260
|
+
rubricText: |
|
|
261
|
+
Score documentation coverage from 0 to 100:
|
|
262
|
+
- 0: Had to hallucinate/guess most implementation details
|
|
263
|
+
- 30: Significant gaps — filled with assumptions
|
|
264
|
+
- 50: Some gaps — inferred from partial information
|
|
265
|
+
- 80: Minor gaps — almost everything was documented
|
|
266
|
+
- 100: Complete coverage — all necessary info was in docs
|
|
267
|
+
|
|
268
|
+
Return ONLY a JSON object: {"score": <number>, "reason": "<explanation>"}
|
|
269
|
+
humanScore: 5
|
|
270
|
+
notes:
|
|
271
|
+
"Entirely based on outdated v2 patterns. createSchema is deprecated.
|
|
272
|
+
None of the documented v3 APIs (defineConfig, defineType, structureTool)
|
|
273
|
+
are used."
|
|
274
|
+
gradedBy: "senior-engineer"
|
|
275
|
+
gradedAt: "2026-03-10"
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reference Solution: Sanity Integration with Nuxt
|
|
3
|
+
*
|
|
4
|
+
* Demonstrates:
|
|
5
|
+
* - Installing and configuring @sanity/nuxt module
|
|
6
|
+
* - Setting up the Sanity module in nuxt.config.ts
|
|
7
|
+
* - Using useSanityQuery composable for data fetching
|
|
8
|
+
* - Rendering portable text content in Vue components
|
|
9
|
+
*
|
|
10
|
+
* Note: Vue template syntax is shown in comments since this is a .ts file.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
// === Part 1: Nuxt Configuration (nuxt.config.ts) ===
|
|
14
|
+
|
|
15
|
+
export default defineNuxtConfig({
|
|
16
|
+
modules: ["@sanity/nuxt"],
|
|
17
|
+
sanity: {
|
|
18
|
+
projectId: "your-project-id",
|
|
19
|
+
dataset: "production",
|
|
20
|
+
apiVersion: "2024-01-01",
|
|
21
|
+
// useCdn: true is the default for production
|
|
22
|
+
},
|
|
23
|
+
})
|
|
24
|
+
|
|
25
|
+
// === Part 2: Posts List Page (pages/posts/index.vue) ===
|
|
26
|
+
//
|
|
27
|
+
// <template>
|
|
28
|
+
// <main>
|
|
29
|
+
// <h1>Blog Posts</h1>
|
|
30
|
+
// <ul v-if="data">
|
|
31
|
+
// <li v-for="post in data" :key="post._id">
|
|
32
|
+
// <NuxtLink :to="`/posts/${post.slug}`">
|
|
33
|
+
// <h2>{{ post.title }}</h2>
|
|
34
|
+
// <p>{{ post.excerpt }}</p>
|
|
35
|
+
// </NuxtLink>
|
|
36
|
+
// </li>
|
|
37
|
+
// </ul>
|
|
38
|
+
// </main>
|
|
39
|
+
// </template>
|
|
40
|
+
//
|
|
41
|
+
// <script setup lang="ts">
|
|
42
|
+
// import { groq } from "groq"
|
|
43
|
+
//
|
|
44
|
+
// const query = groq`*[_type == "post"] | order(publishedAt desc) {
|
|
45
|
+
// _id,
|
|
46
|
+
// title,
|
|
47
|
+
// "slug": slug.current,
|
|
48
|
+
// excerpt,
|
|
49
|
+
// }`
|
|
50
|
+
//
|
|
51
|
+
// const { data } = useSanityQuery(query)
|
|
52
|
+
// </script>
|
|
53
|
+
|
|
54
|
+
// === Part 3: Individual Post Page (pages/posts/[slug].vue) ===
|
|
55
|
+
//
|
|
56
|
+
// <template>
|
|
57
|
+
// <article v-if="data">
|
|
58
|
+
// <h1>{{ data.title }}</h1>
|
|
59
|
+
// <time :datetime="data.publishedAt">
|
|
60
|
+
// {{ new Date(data.publishedAt).toLocaleDateString() }}
|
|
61
|
+
// </time>
|
|
62
|
+
// <SanityContent :blocks="data.body" />
|
|
63
|
+
// </article>
|
|
64
|
+
// </template>
|
|
65
|
+
//
|
|
66
|
+
// <script setup lang="ts">
|
|
67
|
+
// import { groq } from "groq"
|
|
68
|
+
//
|
|
69
|
+
// const route = useRoute()
|
|
70
|
+
// const query = groq`*[_type == "post" && slug.current == $slug][0] {
|
|
71
|
+
// _id,
|
|
72
|
+
// title,
|
|
73
|
+
// body,
|
|
74
|
+
// publishedAt,
|
|
75
|
+
// }`
|
|
76
|
+
//
|
|
77
|
+
// const { data } = useSanityQuery(query, { slug: route.params.slug })
|
|
78
|
+
// </script>
|
|
79
|
+
|
|
80
|
+
// === Part 4: Sanity Studio Embedded (nuxt.config.ts addition) ===
|
|
81
|
+
|
|
82
|
+
// To embed Sanity Studio directly in the Nuxt app:
|
|
83
|
+
export const studioConfig = defineNuxtConfig({
|
|
84
|
+
modules: ["@sanity/nuxt"],
|
|
85
|
+
sanity: {
|
|
86
|
+
projectId: "your-project-id",
|
|
87
|
+
dataset: "production",
|
|
88
|
+
apiVersion: "2024-01-01",
|
|
89
|
+
// Enable the embedded studio at /studio route
|
|
90
|
+
studio: {
|
|
91
|
+
studioHost: "your-studio-host",
|
|
92
|
+
},
|
|
93
|
+
},
|
|
94
|
+
})
|
|
95
|
+
|
|
96
|
+
// === Part 5: Server API Route (server/api/posts.ts) ===
|
|
97
|
+
//
|
|
98
|
+
// For server-side data fetching with full control:
|
|
99
|
+
|
|
100
|
+
import { createClient } from "@sanity/client"
|
|
101
|
+
|
|
102
|
+
const client = createClient({
|
|
103
|
+
projectId: "your-project-id",
|
|
104
|
+
dataset: "production",
|
|
105
|
+
apiVersion: "2024-01-01",
|
|
106
|
+
useCdn: true,
|
|
107
|
+
})
|
|
108
|
+
|
|
109
|
+
const POSTS_QUERY = `*[_type == "post"] | order(publishedAt desc) {
|
|
110
|
+
_id,
|
|
111
|
+
title,
|
|
112
|
+
"slug": slug.current,
|
|
113
|
+
}`
|
|
114
|
+
|
|
115
|
+
// In Nuxt server routes, export defineEventHandler
|
|
116
|
+
export default defineEventHandler(async () => {
|
|
117
|
+
const posts = await client.fetch(POSTS_QUERY)
|
|
118
|
+
return posts
|
|
119
|
+
})
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reference Solution: Sanity Integration with Remix
|
|
3
|
+
*
|
|
4
|
+
* Demonstrates:
|
|
5
|
+
* - Creating a Sanity client configured for Remix
|
|
6
|
+
* - Using GROQ queries in Remix loader functions
|
|
7
|
+
* - Fetching content with client.fetch() in loaders
|
|
8
|
+
* - Rendering content with useLoaderData
|
|
9
|
+
* - Portable text rendering with @portabletext/react
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
// === Part 1: Sanity Client (app/sanity/client.ts) ===
|
|
13
|
+
|
|
14
|
+
import { createClient } from "@sanity/client"
|
|
15
|
+
|
|
16
|
+
export const client = createClient({
|
|
17
|
+
projectId: "your-project-id",
|
|
18
|
+
dataset: "production",
|
|
19
|
+
apiVersion: "2024-01-01",
|
|
20
|
+
// Use CDN for published content in production
|
|
21
|
+
useCdn: process.env.NODE_ENV === "production",
|
|
22
|
+
})
|
|
23
|
+
|
|
24
|
+
// === Part 2: Posts List Route (app/routes/posts._index.tsx) ===
|
|
25
|
+
|
|
26
|
+
import type { LoaderFunctionArgs } from "@remix-run/node"
|
|
27
|
+
import { useLoaderData, Link } from "@remix-run/react"
|
|
28
|
+
|
|
29
|
+
const POSTS_QUERY = `*[_type == "post"] | order(publishedAt desc) {
|
|
30
|
+
_id,
|
|
31
|
+
title,
|
|
32
|
+
"slug": slug.current,
|
|
33
|
+
publishedAt,
|
|
34
|
+
excerpt,
|
|
35
|
+
}`
|
|
36
|
+
|
|
37
|
+
export async function loader({ request }: LoaderFunctionArgs) {
|
|
38
|
+
const posts = await client.fetch(POSTS_QUERY)
|
|
39
|
+
return { posts }
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export default function PostsIndex() {
|
|
43
|
+
const { posts } = useLoaderData<typeof loader>()
|
|
44
|
+
|
|
45
|
+
return (
|
|
46
|
+
<main>
|
|
47
|
+
<h1>Blog Posts</h1>
|
|
48
|
+
<ul>
|
|
49
|
+
{posts.map((post) => (
|
|
50
|
+
<li key={post._id}>
|
|
51
|
+
<Link to={`/posts/${post.slug}`}>
|
|
52
|
+
<h2>{post.title}</h2>
|
|
53
|
+
<p>{post.excerpt}</p>
|
|
54
|
+
<time dateTime={post.publishedAt}>
|
|
55
|
+
{new Date(post.publishedAt).toLocaleDateString()}
|
|
56
|
+
</time>
|
|
57
|
+
</Link>
|
|
58
|
+
</li>
|
|
59
|
+
))}
|
|
60
|
+
</ul>
|
|
61
|
+
</main>
|
|
62
|
+
)
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// === Part 3: Individual Post Route (app/routes/posts.$slug.tsx) ===
|
|
66
|
+
|
|
67
|
+
import { PortableText } from "@portabletext/react"
|
|
68
|
+
|
|
69
|
+
const POST_QUERY = `*[_type == "post" && slug.current == $slug][0] {
|
|
70
|
+
_id,
|
|
71
|
+
title,
|
|
72
|
+
body,
|
|
73
|
+
publishedAt,
|
|
74
|
+
"author": author->name,
|
|
75
|
+
}`
|
|
76
|
+
|
|
77
|
+
export async function loader({ params }: LoaderFunctionArgs) {
|
|
78
|
+
const post = await client.fetch(POST_QUERY, { slug: params.slug })
|
|
79
|
+
if (!post) {
|
|
80
|
+
throw new Response("Post not found", { status: 404 })
|
|
81
|
+
}
|
|
82
|
+
return { post }
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export default function PostDetail() {
|
|
86
|
+
const { post } = useLoaderData<typeof loader>()
|
|
87
|
+
|
|
88
|
+
return (
|
|
89
|
+
<article>
|
|
90
|
+
<h1>{post.title}</h1>
|
|
91
|
+
{post.author && <p>By {post.author}</p>}
|
|
92
|
+
<time dateTime={post.publishedAt}>
|
|
93
|
+
{new Date(post.publishedAt).toLocaleDateString()}
|
|
94
|
+
</time>
|
|
95
|
+
<div>
|
|
96
|
+
<PortableText value={post.body} />
|
|
97
|
+
</div>
|
|
98
|
+
</article>
|
|
99
|
+
)
|
|
100
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
// Sanity Function: Publish webhook handler
|
|
2
|
+
// Demonstrates: defineFunction, document publish trigger, event handling, external API calls
|
|
3
|
+
|
|
4
|
+
import { defineFunction } from "sanity/functions"
|
|
5
|
+
|
|
6
|
+
// Define a function that triggers when a document is published
|
|
7
|
+
export const onPublishWebhook = defineFunction({
|
|
8
|
+
name: "on-publish-webhook",
|
|
9
|
+
title: "Publish Webhook",
|
|
10
|
+
description: "Sends a webhook notification when a document is published",
|
|
11
|
+
|
|
12
|
+
// Trigger on document publish events
|
|
13
|
+
trigger: {
|
|
14
|
+
type: "document.publish",
|
|
15
|
+
// Optionally filter by document type
|
|
16
|
+
filter: {
|
|
17
|
+
types: ["post", "article"],
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
|
|
21
|
+
// The handler function receives the event context
|
|
22
|
+
async handler(event, context) {
|
|
23
|
+
const { document, previousDocument } = event
|
|
24
|
+
const { projectId, dataset } = context
|
|
25
|
+
|
|
26
|
+
// Build the webhook payload
|
|
27
|
+
const payload = {
|
|
28
|
+
event: "document.published",
|
|
29
|
+
projectId,
|
|
30
|
+
dataset,
|
|
31
|
+
documentId: document._id,
|
|
32
|
+
documentType: document._type,
|
|
33
|
+
title: document.title ?? document._id,
|
|
34
|
+
publishedAt: new Date().toISOString(),
|
|
35
|
+
isUpdate: !!previousDocument,
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// Send to an external webhook URL (configured via environment/secrets)
|
|
39
|
+
const webhookUrl = process.env.WEBHOOK_URL
|
|
40
|
+
if (!webhookUrl) {
|
|
41
|
+
console.warn("WEBHOOK_URL not configured, skipping notification")
|
|
42
|
+
return { success: false, reason: "no webhook URL configured" }
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const response = await fetch(webhookUrl, {
|
|
46
|
+
method: "POST",
|
|
47
|
+
headers: {
|
|
48
|
+
"Content-Type": "application/json",
|
|
49
|
+
},
|
|
50
|
+
body: JSON.stringify(payload),
|
|
51
|
+
})
|
|
52
|
+
|
|
53
|
+
if (!response.ok) {
|
|
54
|
+
console.error(`Webhook failed: ${response.status} ${response.statusText}`)
|
|
55
|
+
return { success: false, status: response.status }
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
return { success: true, documentId: document._id }
|
|
59
|
+
},
|
|
60
|
+
})
|