@sanity/ailf 2.0.0 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/canonical/grader-references/README.md +2 -2
- package/canonical/reference-solutions/content-lake/mutations.ts +160 -0
- package/canonical/reference-solutions/content-lake/realtime.ts +187 -0
- package/canonical/reference-solutions/image-handling/asset-pipeline.tsx +166 -0
- package/canonical/reference-solutions/portable-text/custom-blocks.ts +204 -0
- package/canonical/reference-solutions/portable-text/rendering.tsx +163 -0
- package/config/features.ts +1 -1
- package/config/models.ts +28 -23
- package/config/sources.ts +1 -1
- package/config/thresholds.ts +1 -1
- package/dist/_vendor/ailf-core/__tests__/comparison-formatters.test.d.ts +10 -0
- package/dist/_vendor/ailf-core/__tests__/comparison-formatters.test.js +185 -0
- package/dist/_vendor/ailf-core/artifact-capture/__tests__/noop-collector.test.d.ts +6 -0
- package/dist/_vendor/ailf-core/artifact-capture/__tests__/noop-collector.test.js +42 -0
- package/dist/_vendor/ailf-core/artifact-capture/noop-collector.d.ts +14 -0
- package/dist/_vendor/ailf-core/artifact-capture/noop-collector.js +25 -0
- package/dist/_vendor/ailf-core/config-helpers.d.ts +6 -0
- package/dist/_vendor/ailf-core/config-helpers.js +29 -0
- package/dist/_vendor/ailf-core/examples/index.d.ts +164 -94
- package/dist/_vendor/ailf-core/examples/index.js +208 -114
- package/dist/_vendor/ailf-core/index.d.ts +1 -0
- package/dist/_vendor/ailf-core/index.js +1 -0
- package/dist/_vendor/ailf-core/ports/artifact-collector.d.ts +94 -0
- package/dist/_vendor/ailf-core/ports/artifact-collector.js +13 -0
- package/dist/_vendor/ailf-core/ports/capture-comparator.d.ts +138 -0
- package/dist/_vendor/ailf-core/ports/capture-comparator.js +10 -0
- package/dist/_vendor/ailf-core/ports/context.d.ts +20 -1
- package/dist/_vendor/ailf-core/ports/eval-runner.d.ts +6 -0
- package/dist/_vendor/ailf-core/ports/index.d.ts +2 -0
- package/dist/_vendor/ailf-core/ports/pipeline-step.d.ts +11 -0
- package/dist/_vendor/ailf-core/ports/task-source.d.ts +3 -3
- package/dist/_vendor/ailf-core/ports/task-source.js +3 -3
- package/dist/_vendor/ailf-core/schemas/pipeline-request.d.ts +6 -1
- package/dist/_vendor/ailf-core/schemas/pipeline-request.js +14 -2
- package/dist/_vendor/ailf-core/services/config-helpers.d.ts +16 -1
- package/dist/_vendor/ailf-core/services/config-helpers.js +21 -0
- package/dist/_vendor/ailf-core/services/index.d.ts +1 -1
- package/dist/_vendor/ailf-core/services/index.js +1 -1
- package/dist/_vendor/ailf-core/services/scoring.js +9 -0
- package/dist/_vendor/ailf-core/types/generalized-task.d.ts +12 -1
- package/dist/_vendor/ailf-core/types/generalized-task.js +1 -1
- package/dist/_vendor/ailf-core/types/index.d.ts +47 -4
- package/dist/_vendor/ailf-core/types/plugin-registry.d.ts +27 -0
- package/dist/_vendor/ailf-shared/eval-modes.d.ts +15 -0
- package/dist/_vendor/ailf-shared/eval-modes.js +18 -0
- package/dist/_vendor/ailf-tasks/cli.d.ts +8 -0
- package/dist/_vendor/ailf-tasks/cli.js +61 -0
- package/dist/_vendor/ailf-tasks/index.d.ts +13 -0
- package/dist/_vendor/ailf-tasks/index.js +16 -0
- package/dist/_vendor/ailf-tasks/parser.d.ts +27 -0
- package/dist/_vendor/ailf-tasks/parser.js +73 -0
- package/dist/_vendor/ailf-tasks/schemas.d.ts +198 -0
- package/dist/_vendor/ailf-tasks/schemas.js +180 -0
- package/dist/_vendor/ailf-tasks/validation.d.ts +47 -0
- package/dist/_vendor/ailf-tasks/validation.js +162 -0
- package/dist/adapters/api-client/remediation.js +2 -2
- package/dist/adapters/config-sources/file-config-adapter.js +6 -1
- package/dist/adapters/eval-runners/promptfoo-eval-adapter.js +8 -2
- package/dist/adapters/index.d.ts +0 -1
- package/dist/adapters/index.js +0 -1
- package/dist/adapters/task-sources/composite-task-source.d.ts +1 -1
- package/dist/adapters/task-sources/composite-task-source.js +1 -1
- package/dist/adapters/task-sources/content-lake-task-source.d.ts +4 -6
- package/dist/adapters/task-sources/content-lake-task-source.js +4 -6
- package/dist/adapters/task-sources/index.d.ts +1 -2
- package/dist/adapters/task-sources/index.js +1 -2
- package/dist/adapters/task-sources/repo-schemas.d.ts +1 -1
- package/dist/adapters/task-sources/repo-schemas.js +2 -2
- package/dist/adapters/task-sources/repo-task-source.js +1 -1
- package/dist/adapters/task-sources/repo-trigger.d.ts +1 -1
- package/dist/adapters/task-sources/repo-trigger.js +1 -1
- package/dist/adapters/task-sources/task-file-loader.d.ts +9 -6
- package/dist/adapters/task-sources/task-file-loader.js +20 -6
- package/dist/agent-observer/test-imports.d.ts +7 -0
- package/dist/agent-observer/test-imports.js +185 -0
- package/dist/artifact-capture/comparator.d.ts +22 -0
- package/dist/artifact-capture/comparator.js +493 -0
- package/dist/artifact-capture/filesystem-collector.d.ts +42 -0
- package/dist/artifact-capture/filesystem-collector.js +237 -0
- package/dist/artifact-capture/redact-artifact.d.ts +20 -0
- package/dist/artifact-capture/redact-artifact.js +115 -0
- package/dist/assertions/source-isolation.d.ts +1 -1
- package/dist/assertions/source-isolation.js +1 -1
- package/dist/cli.js +4 -0
- package/dist/commands/calculate-scores.js +1 -0
- package/dist/commands/capture-compare.d.ts +15 -0
- package/dist/commands/capture-compare.js +253 -0
- package/dist/commands/capture-list.d.ts +12 -0
- package/dist/commands/capture-list.js +147 -0
- package/dist/commands/capture.d.ts +9 -0
- package/dist/commands/capture.js +16 -0
- package/dist/commands/chronic-failures.d.ts +8 -0
- package/dist/commands/chronic-failures.js +33 -0
- package/dist/commands/explain-handler.d.ts +1 -1
- package/dist/commands/explain-handler.js +37 -8
- package/dist/commands/fetch-docs.js +1 -0
- package/dist/commands/generate-configs.d.ts +3 -3
- package/dist/commands/generate-configs.js +20 -8
- package/dist/commands/init.d.ts +2 -3
- package/dist/commands/init.js +56 -170
- package/dist/commands/pipeline-action.d.ts +7 -1
- package/dist/commands/pipeline-action.js +43 -19
- package/dist/commands/pipeline.d.ts +6 -1
- package/dist/commands/pipeline.js +7 -2
- package/dist/commands/pr-comment.js +1 -0
- package/dist/commands/publish.js +1 -0
- package/dist/commands/shared/help.js +2 -2
- package/dist/commands/update-quality-scores.d.ts +5 -0
- package/dist/commands/update-quality-scores.js +20 -0
- package/dist/composition-root.d.ts +2 -3
- package/dist/composition-root.js +27 -14
- package/dist/config/features.ts +23 -0
- package/dist/config/models.ts +100 -0
- package/dist/config/prompts.ts +16 -0
- package/dist/config/rubrics.ts +225 -0
- package/dist/config/schedules.ts +47 -0
- package/dist/config/sinks.ts +37 -0
- package/dist/config/sources.ts +21 -0
- package/dist/config/thresholds.ts +61 -0
- package/dist/lib/agent-behavior-report.d.ts +8 -0
- package/dist/lib/agent-behavior-report.js +185 -0
- package/dist/lib/baseline.d.ts +19 -0
- package/dist/lib/baseline.js +153 -0
- package/dist/lib/calculate-scores.d.ts +23 -0
- package/dist/lib/calculate-scores.js +42 -0
- package/dist/lib/compare.d.ts +18 -0
- package/dist/lib/compare.js +170 -0
- package/dist/lib/coverage-audit.d.ts +4 -0
- package/dist/lib/coverage-audit.js +42 -0
- package/dist/lib/discovery-report.d.ts +13 -0
- package/dist/lib/discovery-report.js +57 -0
- package/dist/lib/fetch-docs.d.ts +30 -0
- package/dist/lib/fetch-docs.js +171 -0
- package/dist/lib/generate-configs.d.ts +25 -0
- package/dist/lib/generate-configs.js +42 -0
- package/dist/lib/grader-api.d.ts +21 -0
- package/dist/lib/grader-api.js +34 -0
- package/dist/lib/grader-compare.d.ts +19 -0
- package/dist/lib/grader-compare.js +91 -0
- package/dist/lib/grader-consistency.d.ts +27 -0
- package/dist/lib/grader-consistency.js +79 -0
- package/dist/lib/grader-sensitivity.d.ts +19 -0
- package/dist/lib/grader-sensitivity.js +75 -0
- package/dist/lib/grader-validate.d.ts +19 -0
- package/dist/lib/grader-validate.js +78 -0
- package/dist/lib/measure-retrieval.d.ts +14 -0
- package/dist/lib/measure-retrieval.js +71 -0
- package/dist/lib/pr-comment.d.ts +16 -0
- package/dist/lib/pr-comment.js +28 -0
- package/dist/lib/readiness-report.d.ts +13 -0
- package/dist/lib/readiness-report.js +108 -0
- package/dist/lib/webhook-server.d.ts +11 -0
- package/dist/lib/webhook-server.js +24 -0
- package/dist/lib/weekly-digest.d.ts +24 -0
- package/dist/lib/weekly-digest.js +148 -0
- package/dist/orchestration/build-app-context.js +13 -0
- package/dist/orchestration/cache-context.d.ts +23 -0
- package/dist/orchestration/cache-context.js +43 -0
- package/dist/orchestration/env-bridge.d.ts +21 -0
- package/dist/orchestration/env-bridge.js +66 -0
- package/dist/orchestration/load-pipeline-tasks.d.ts +34 -0
- package/dist/orchestration/load-pipeline-tasks.js +52 -0
- package/dist/orchestration/pipeline-orchestrator.js +75 -5
- package/dist/orchestration/step-runner.js +5 -1
- package/dist/orchestration/steps/calculate-scores-step.d.ts +1 -0
- package/dist/orchestration/steps/calculate-scores-step.js +13 -0
- package/dist/orchestration/steps/callback-step.js +10 -1
- package/dist/orchestration/steps/compare-step.js +6 -3
- package/dist/orchestration/steps/discovery-report-step.js +6 -2
- package/dist/orchestration/steps/fetch-docs-shell.d.ts +17 -0
- package/dist/orchestration/steps/fetch-docs-shell.js +30 -0
- package/dist/orchestration/steps/fetch-docs-step.d.ts +1 -0
- package/dist/orchestration/steps/fetch-docs-step.js +30 -16
- package/dist/orchestration/steps/gap-analysis-step.js +13 -2
- package/dist/orchestration/steps/generate-configs-step.d.ts +1 -0
- package/dist/orchestration/steps/generate-configs-step.js +50 -15
- package/dist/orchestration/steps/mirror-repo-tasks-step.d.ts +1 -1
- package/dist/orchestration/steps/mirror-repo-tasks-step.js +1 -1
- package/dist/orchestration/steps/publish-report-step.js +19 -0
- package/dist/orchestration/steps/readiness-step.js +8 -3
- package/dist/orchestration/steps/report-step.js +17 -4
- package/dist/orchestration/steps/run-eval-step.d.ts +1 -0
- package/dist/orchestration/steps/run-eval-step.js +51 -31
- package/dist/pipeline/agent-behavior-report.js +6 -0
- package/dist/pipeline/attribution.d.ts +1 -1
- package/dist/pipeline/attribution.js +1 -1
- package/dist/pipeline/cache.js +29 -15
- package/dist/pipeline/calculate-scores.d.ts +2 -0
- package/dist/pipeline/calculate-scores.js +70 -33
- package/dist/pipeline/chronic-failures.d.ts +55 -0
- package/dist/pipeline/chronic-failures.js +110 -0
- package/dist/pipeline/compiler/__tests__/mcp-server-handler.test.js +33 -0
- package/dist/pipeline/compiler/__tests__/promptfoo-compiler.test.js +2 -3
- package/dist/pipeline/compiler/__tests__/task-bridge.test.d.ts +9 -0
- package/dist/pipeline/compiler/__tests__/task-bridge.test.js +339 -0
- package/dist/pipeline/compiler/__tests__/tool-loop-openai.test.d.ts +10 -0
- package/dist/pipeline/compiler/__tests__/tool-loop-openai.test.js +509 -0
- package/dist/pipeline/compiler/assertion-mapper.d.ts +1 -1
- package/dist/pipeline/compiler/assertion-mapper.js +1 -1
- package/dist/pipeline/compiler/compiler-to-yaml.d.ts +2 -7
- package/dist/pipeline/compiler/compiler-to-yaml.js +2 -7
- package/dist/pipeline/compiler/config-loader.d.ts +14 -0
- package/dist/pipeline/compiler/config-loader.js +42 -2
- package/dist/pipeline/compiler/fixture-resolver.d.ts +1 -1
- package/dist/pipeline/compiler/fixture-resolver.js +1 -1
- package/dist/pipeline/compiler/ignore-fields.d.ts +1 -1
- package/dist/pipeline/compiler/ignore-fields.js +1 -1
- package/dist/pipeline/compiler/index.d.ts +2 -5
- package/dist/pipeline/compiler/index.js +2 -5
- package/dist/pipeline/compiler/literacy-bridge.d.ts +1 -1
- package/dist/pipeline/compiler/literacy-bridge.js +1 -1
- package/dist/pipeline/compiler/mode-bases/agent-harness.d.ts +1 -1
- package/dist/pipeline/compiler/mode-bases/agent-harness.js +1 -1
- package/dist/pipeline/compiler/mode-bases/knowledge-probe.d.ts +1 -1
- package/dist/pipeline/compiler/mode-bases/knowledge-probe.js +1 -1
- package/dist/pipeline/compiler/mode-bases/literacy.d.ts +13 -2
- package/dist/pipeline/compiler/mode-bases/literacy.js +55 -1
- package/dist/pipeline/compiler/mode-bases/mcp-server.d.ts +1 -1
- package/dist/pipeline/compiler/mode-bases/mcp-server.js +1 -1
- package/dist/pipeline/compiler/mode-handlers/agent-harness/index.d.ts +1 -1
- package/dist/pipeline/compiler/mode-handlers/agent-harness/index.js +1 -1
- package/dist/pipeline/compiler/mode-handlers/agent-harness-handler.d.ts +70 -0
- package/dist/pipeline/compiler/mode-handlers/agent-harness-handler.js +485 -0
- package/dist/pipeline/compiler/mode-handlers/index.d.ts +2 -2
- package/dist/pipeline/compiler/mode-handlers/index.js +2 -2
- package/dist/pipeline/compiler/mode-handlers/knowledge-probe/index.d.ts +1 -1
- package/dist/pipeline/compiler/mode-handlers/knowledge-probe/index.js +1 -1
- package/dist/pipeline/compiler/mode-handlers/knowledge-probe-handler.d.ts +76 -0
- package/dist/pipeline/compiler/mode-handlers/knowledge-probe-handler.js +245 -0
- package/dist/pipeline/compiler/mode-handlers/literacy/index.d.ts +1 -1
- package/dist/pipeline/compiler/mode-handlers/literacy/index.js +1 -1
- package/dist/pipeline/compiler/mode-handlers/literacy-handler.d.ts +89 -0
- package/dist/pipeline/compiler/mode-handlers/literacy-handler.js +379 -0
- package/dist/pipeline/compiler/mode-handlers/mcp-assertions.d.ts +50 -0
- package/dist/pipeline/compiler/mode-handlers/mcp-assertions.js +334 -0
- package/dist/pipeline/compiler/mode-handlers/mcp-server/assertions.d.ts +1 -1
- package/dist/pipeline/compiler/mode-handlers/mcp-server/assertions.js +1 -1
- package/dist/pipeline/compiler/mode-handlers/mcp-server/index.d.ts +1 -1
- package/dist/pipeline/compiler/mode-handlers/mcp-server/index.js +1 -1
- package/dist/pipeline/compiler/mode-handlers/mcp-server/provider-config.js +4 -0
- package/dist/pipeline/compiler/mode-handlers/mcp-server-handler.d.ts +69 -0
- package/dist/pipeline/compiler/mode-handlers/mcp-server-handler.js +307 -0
- package/dist/pipeline/compiler/mode-handlers/mcp-tool-provider/index.js +22 -5
- package/dist/pipeline/compiler/mode-handlers/mcp-tool-provider/mcp-connection.js +6 -0
- package/dist/pipeline/compiler/mode-handlers/mcp-tool-provider/tool-loop-openai.d.ts +10 -5
- package/dist/pipeline/compiler/mode-handlers/mcp-tool-provider/tool-loop-openai.js +314 -7
- package/dist/pipeline/compiler/mode-handlers/mcp-tool-provider/types.d.ts +10 -0
- package/dist/pipeline/compiler/mode-handlers/mcp-tool-provider.d.ts +65 -0
- package/dist/pipeline/compiler/mode-handlers/mcp-tool-provider.js +368 -0
- package/dist/pipeline/compiler/presets/sanity-literacy.d.ts +1 -1
- package/dist/pipeline/compiler/presets/sanity-literacy.js +1 -1
- package/dist/pipeline/compiler/promptfoo-compiler.d.ts +1 -4
- package/dist/pipeline/compiler/promptfoo-compiler.js +3 -12
- package/dist/pipeline/compiler/provider-assembler.js +13 -7
- package/dist/pipeline/compiler/sandbox/docker-sandbox.d.ts +1 -1
- package/dist/pipeline/compiler/sandbox/docker-sandbox.js +1 -1
- package/dist/pipeline/compiler/sandbox/fixture-provisioner.d.ts +1 -1
- package/dist/pipeline/compiler/sandbox/fixture-provisioner.js +1 -1
- package/dist/pipeline/compiler/sandbox/git-worktree-sandbox.d.ts +1 -1
- package/dist/pipeline/compiler/sandbox/git-worktree-sandbox.js +1 -1
- package/dist/pipeline/compiler/sandbox/index.d.ts +1 -1
- package/dist/pipeline/compiler/sandbox/index.js +1 -1
- package/dist/pipeline/compiler/sandbox/sandbox-selector.d.ts +1 -1
- package/dist/pipeline/compiler/sandbox/sandbox-selector.js +1 -1
- package/dist/pipeline/compiler/sandbox/sandbox-strategy.d.ts +1 -1
- package/dist/pipeline/compiler/sandbox/sandbox-strategy.js +1 -1
- package/dist/pipeline/compiler/sandbox/tempdir-sandbox.d.ts +1 -1
- package/dist/pipeline/compiler/sandbox/tempdir-sandbox.js +1 -1
- package/dist/pipeline/compiler/scoring-bridge.d.ts +1 -1
- package/dist/pipeline/compiler/scoring-bridge.js +1 -1
- package/dist/pipeline/compiler/task-bridge.d.ts +41 -0
- package/dist/pipeline/compiler/task-bridge.js +92 -0
- package/dist/pipeline/compiler/task-graph-builder.d.ts +1 -4
- package/dist/pipeline/compiler/task-graph-builder.js +1 -4
- package/dist/pipeline/compiler/telemetry/index.d.ts +1 -1
- package/dist/pipeline/compiler/telemetry/index.js +1 -1
- package/dist/pipeline/compiler/variable-resolver.d.ts +1 -1
- package/dist/pipeline/compiler/variable-resolver.js +1 -1
- package/dist/pipeline/coverage-audit.d.ts +1 -1
- package/dist/pipeline/coverage-audit.js +1 -1
- package/dist/pipeline/degradations.d.ts +1 -1
- package/dist/pipeline/degradations.js +1 -1
- package/dist/pipeline/failure-modes.d.ts +1 -1
- package/dist/pipeline/failure-modes.js +13 -1
- package/dist/pipeline/gap-analysis.d.ts +1 -1
- package/dist/pipeline/gap-analysis.js +3 -1
- package/dist/pipeline/generate-configs.d.ts +2 -2
- package/dist/pipeline/generate-configs.js +15 -8
- package/dist/pipeline/grader-compare-runner.d.ts +1 -1
- package/dist/pipeline/grader-compare-runner.js +7 -1
- package/dist/pipeline/grader-comparison.d.ts +1 -1
- package/dist/pipeline/grader-comparison.js +1 -1
- package/dist/pipeline/grader-consistency-runner.d.ts +1 -1
- package/dist/pipeline/grader-consistency-runner.js +7 -1
- package/dist/pipeline/grader-consistency.d.ts +1 -1
- package/dist/pipeline/grader-consistency.js +1 -1
- package/dist/pipeline/grader-sensitivity-runner.d.ts +1 -1
- package/dist/pipeline/grader-sensitivity-runner.js +1 -1
- package/dist/pipeline/grader-sensitivity.d.ts +1 -1
- package/dist/pipeline/grader-sensitivity.js +1 -1
- package/dist/pipeline/grader-validate-runner.d.ts +1 -1
- package/dist/pipeline/grader-validate-runner.js +2 -2
- package/dist/pipeline/grader-validation.d.ts +1 -1
- package/dist/pipeline/grader-validation.js +1 -1
- package/dist/pipeline/map-request-to-config.js +15 -2
- package/dist/pipeline/mirror-repo-tasks.d.ts +1 -1
- package/dist/pipeline/mirror-repo-tasks.js +1 -1
- package/dist/pipeline/plan-format.d.ts +1 -1
- package/dist/pipeline/plan-format.js +1 -1
- package/dist/pipeline/plan.d.ts +1 -1
- package/dist/pipeline/plan.js +67 -29
- package/dist/pipeline/probe.d.ts +1 -1
- package/dist/pipeline/probe.js +1 -1
- package/dist/pipeline/readiness-report.d.ts +2 -2
- package/dist/pipeline/readiness-report.js +2 -2
- package/dist/pipeline/release-classification.d.ts +1 -1
- package/dist/pipeline/release-classification.js +1 -1
- package/dist/pipeline/release-report.d.ts +1 -1
- package/dist/pipeline/release-report.js +1 -1
- package/dist/pipeline/repo-eval-comment.d.ts +1 -1
- package/dist/pipeline/repo-eval-comment.js +1 -1
- package/dist/pipeline/repo-threshold-evaluator.d.ts +1 -1
- package/dist/pipeline/repo-threshold-evaluator.js +1 -1
- package/dist/pipeline/resolve-mappings.d.ts +6 -6
- package/dist/pipeline/resolve-mappings.js +44 -44
- package/dist/pipeline/retrieval-metrics.d.ts +3 -3
- package/dist/pipeline/retrieval-metrics.js +28 -20
- package/dist/pipeline/steps/calculate-scores-step.d.ts +11 -0
- package/dist/pipeline/steps/calculate-scores-step.js +89 -0
- package/dist/pipeline/steps/compare-step.d.ts +18 -0
- package/dist/pipeline/steps/compare-step.js +90 -0
- package/dist/pipeline/steps/eval-step.d.ts +53 -0
- package/dist/pipeline/steps/eval-step.js +347 -0
- package/dist/pipeline/steps/fetch-docs-step.d.ts +11 -0
- package/dist/pipeline/steps/fetch-docs-step.js +84 -0
- package/dist/pipeline/steps/generate-configs-step.d.ts +11 -0
- package/dist/pipeline/steps/generate-configs-step.js +98 -0
- package/dist/pipeline/steps/grader-consistency-step.d.ts +21 -0
- package/dist/pipeline/steps/grader-consistency-step.js +74 -0
- package/dist/pipeline/steps/publish-report-step.d.ts +57 -0
- package/dist/pipeline/steps/publish-report-step.js +243 -0
- package/dist/pipeline/steps/report-step.d.ts +13 -0
- package/dist/pipeline/steps/report-step.js +56 -0
- package/dist/pipeline/steps/update-scores-step.d.ts +11 -0
- package/dist/pipeline/steps/update-scores-step.js +42 -0
- package/dist/pipeline/targeted-loo.d.ts +1 -1
- package/dist/pipeline/targeted-loo.js +1 -1
- package/dist/pipeline/thresholds.d.ts +1 -1
- package/dist/pipeline/thresholds.js +1 -1
- package/dist/pipeline/validate.js +13 -0
- package/dist/report-store.d.ts +17 -0
- package/dist/report-store.js +24 -0
- package/dist/scripts/agent-behavior-report.d.ts +19 -0
- package/dist/scripts/agent-behavior-report.js +315 -0
- package/dist/scripts/baseline.d.ts +43 -0
- package/dist/scripts/baseline.js +267 -0
- package/dist/scripts/calculate-scores.d.ts +166 -0
- package/dist/scripts/calculate-scores.js +1296 -0
- package/dist/scripts/compare.d.ts +22 -0
- package/dist/scripts/compare.js +334 -0
- package/dist/scripts/coverage-audit.d.ts +44 -0
- package/dist/scripts/coverage-audit.js +209 -0
- package/dist/scripts/debug-eval.d.ts +19 -0
- package/dist/scripts/debug-eval.js +73 -0
- package/dist/scripts/discovery-report.d.ts +58 -0
- package/dist/scripts/discovery-report.js +250 -0
- package/dist/scripts/fetch-docs.d.ts +35 -0
- package/dist/scripts/fetch-docs.js +472 -0
- package/dist/scripts/generate-configs.d.ts +66 -0
- package/dist/scripts/generate-configs.js +459 -0
- package/dist/scripts/grader-api.d.ts +27 -0
- package/dist/scripts/grader-api.js +206 -0
- package/dist/scripts/grader-compare.d.ts +22 -0
- package/dist/scripts/grader-compare.js +368 -0
- package/dist/scripts/grader-consistency.d.ts +20 -0
- package/dist/scripts/grader-consistency.js +313 -0
- package/dist/scripts/grader-sensitivity.d.ts +22 -0
- package/dist/scripts/grader-sensitivity.js +354 -0
- package/dist/scripts/grader-validate.d.ts +19 -0
- package/dist/scripts/grader-validate.js +267 -0
- package/dist/scripts/measure-retrieval.d.ts +10 -0
- package/dist/scripts/measure-retrieval.js +145 -0
- package/dist/scripts/migrate-task-mode.d.ts +1 -1
- package/dist/scripts/migrate-task-mode.js +1 -1
- package/dist/scripts/migrate-tasks-to-content-lake.d.ts +1 -1
- package/dist/scripts/migrate-tasks-to-content-lake.js +1 -1
- package/dist/scripts/pipeline.d.ts +76 -0
- package/dist/scripts/pipeline.js +1031 -0
- package/dist/scripts/pr-comment.d.ts +10 -0
- package/dist/scripts/pr-comment.js +510 -0
- package/dist/scripts/readiness-report.d.ts +88 -0
- package/dist/scripts/readiness-report.js +342 -0
- package/dist/scripts/update-quality-scores.d.ts +15 -0
- package/dist/scripts/update-quality-scores.js +184 -0
- package/dist/scripts/validate-task-sources.d.ts +1 -1
- package/dist/scripts/validate-task-sources.js +1 -1
- package/dist/scripts/validate.d.ts +13 -0
- package/dist/scripts/validate.js +79 -0
- package/dist/scripts/webhook-server.d.ts +26 -0
- package/dist/scripts/webhook-server.js +147 -0
- package/dist/scripts/weekly-digest.d.ts +24 -0
- package/dist/scripts/weekly-digest.js +144 -0
- package/dist/sinks/format-slack.d.ts +64 -0
- package/dist/sinks/format-slack.js +306 -0
- package/dist/sinks/slack-sink.d.ts +27 -0
- package/dist/sinks/slack-sink.js +78 -0
- package/dist/sinks/types.d.ts +1 -1
- package/dist/sinks/types.js +1 -1
- package/dist/sinks/webhook-sink.d.ts +19 -0
- package/dist/sinks/webhook-sink.js +50 -0
- package/dist/tasks/knowledge-probe/define-type-api.task.ts +66 -0
- package/dist/tasks/knowledge-probe/groq-projections.task.ts +62 -0
- package/dist/tasks/literacy/content-lake.task.ts +181 -0
- package/dist/tasks/literacy/frameworks.task.ts +129 -0
- package/dist/tasks/literacy/functions.task.ts +70 -0
- package/dist/tasks/literacy/groq.task.ts +259 -0
- package/dist/tasks/literacy/image-handling.task.ts +95 -0
- package/dist/tasks/literacy/nextjs-live.task.ts +76 -0
- package/dist/tasks/literacy/portable-text.task.ts +169 -0
- package/dist/tasks/literacy/studio-setup.task.ts +134 -0
- package/dist/tasks/literacy/visual-editing.task.ts +147 -0
- package/package.json +24 -24
- package/tasks/.expanded.agentic.yaml +280 -0
- package/tasks/.expanded.yaml +565 -0
- package/tasks/knowledge-probe/define-type-api.task.ts +11 -0
- package/tasks/knowledge-probe/groq-projections.task.ts +3 -0
- package/tasks/literacy/content-lake.task.ts +181 -0
- package/tasks/literacy/frameworks.task.ts +1 -0
- package/tasks/literacy/functions.task.ts +1 -0
- package/tasks/literacy/groq.task.ts +1 -0
- package/tasks/literacy/image-handling.task.ts +95 -0
- package/tasks/literacy/nextjs-live.task.ts +2 -1
- package/tasks/literacy/portable-text.task.ts +169 -0
- package/tasks/literacy/studio-setup.task.ts +5 -2
- package/tasks/literacy/visual-editing.task.ts +1 -0
- package/LICENSE +0 -21
- package/tasks/frameworks.yaml +0 -98
- package/tasks/functions.yaml +0 -51
- package/tasks/groq.yaml +0 -216
- package/tasks/nextjs-live.yaml +0 -62
- package/tasks/studio-setup.yaml +0 -111
- package/tasks/visual-editing.yaml +0 -120
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { defineTask } from "../../_vendor/ailf-core/index.js"
|
|
2
|
+
|
|
3
|
+
// See content-lake.task.ts for detailed explanations of common task properties
|
|
4
|
+
export default [
|
|
5
|
+
defineTask({
|
|
6
|
+
id: "functions-webhook",
|
|
7
|
+
mode: "literacy",
|
|
8
|
+
title: "Functions - Webhook on document publish",
|
|
9
|
+
description: "Functions - Webhook on document publish",
|
|
10
|
+
area: "functions",
|
|
11
|
+
docCoverage: true,
|
|
12
|
+
context: {
|
|
13
|
+
docs: [
|
|
14
|
+
{
|
|
15
|
+
slug: "functions-introduction",
|
|
16
|
+
reason: "Functions overview — deployment, triggers, lifecycle",
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
slug: "webhooks",
|
|
20
|
+
reason: "GROQ-powered webhooks — configuration and filtering",
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
slug: "function-wrapper",
|
|
24
|
+
reason: "Function handler reference — event shape, exports",
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
slug: "functions-cheatsheet",
|
|
28
|
+
reason: "Quick reference for common function patterns",
|
|
29
|
+
},
|
|
30
|
+
],
|
|
31
|
+
},
|
|
32
|
+
referenceSolution: "reference-solutions/functions/publish-webhook.ts",
|
|
33
|
+
prompt: {
|
|
34
|
+
vars: {
|
|
35
|
+
task: `Deploy a Sanity function that triggers when a document is published
|
|
36
|
+
and sends a webhook notification to an external endpoint.
|
|
37
|
+
|
|
38
|
+
Requirements:
|
|
39
|
+
1. The function should trigger on document publish events
|
|
40
|
+
2. Filter to only fire for "post" document types
|
|
41
|
+
3. Send a POST request to an external URL with the document data
|
|
42
|
+
4. Handle errors gracefully
|
|
43
|
+
|
|
44
|
+
Provide a complete implementation including any configuration.`,
|
|
45
|
+
docs: "file://contexts/canonical/functions-webhook.md",
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
assertions: [
|
|
49
|
+
{
|
|
50
|
+
type: "llm-rubric",
|
|
51
|
+
template: "task-completion",
|
|
52
|
+
criteria: [
|
|
53
|
+
"Event-driven function definition",
|
|
54
|
+
"Document type filtering (post type only)",
|
|
55
|
+
"HTTP webhook call with document payload",
|
|
56
|
+
"Basic error handling",
|
|
57
|
+
],
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
type: "llm-rubric",
|
|
61
|
+
template: "code-correctness",
|
|
62
|
+
criteria: [
|
|
63
|
+
"No deprecated API patterns",
|
|
64
|
+
"Proper error handling",
|
|
65
|
+
"Idiomatic function handler structure",
|
|
66
|
+
],
|
|
67
|
+
},
|
|
68
|
+
],
|
|
69
|
+
}),
|
|
70
|
+
]
|
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
import { defineTask } from "../../_vendor/ailf-core/index.js"
|
|
2
|
+
|
|
3
|
+
// See content-lake.task.ts for detailed explanations of common task properties
|
|
4
|
+
export default [
|
|
5
|
+
defineTask({
|
|
6
|
+
id: "groq-blog-queries",
|
|
7
|
+
mode: "literacy",
|
|
8
|
+
title: "GROQ - Blog queries with filtering and pagination",
|
|
9
|
+
description: "GROQ - Blog queries with filtering and pagination",
|
|
10
|
+
area: "groq",
|
|
11
|
+
docCoverage: true,
|
|
12
|
+
context: {
|
|
13
|
+
docs: [
|
|
14
|
+
{
|
|
15
|
+
slug: "groq-introduction",
|
|
16
|
+
reason: "GROQ overview — syntax, filters, projections, core concepts",
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
slug: "how-queries-work",
|
|
20
|
+
reason: "Detailed walkthrough of GROQ query mechanics",
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
slug: "query-cheat-sheet",
|
|
24
|
+
reason: "Ready-made query patterns for common use cases",
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
slug: "paginating-with-groq",
|
|
28
|
+
reason: "Pagination patterns with slice syntax",
|
|
29
|
+
},
|
|
30
|
+
],
|
|
31
|
+
},
|
|
32
|
+
referenceSolution: "reference-solutions/groq/blog-queries.ts",
|
|
33
|
+
prompt: {
|
|
34
|
+
vars: {
|
|
35
|
+
task: `Write GROQ queries for a Sanity blog application:
|
|
36
|
+
|
|
37
|
+
1. Fetch all published blog posts ordered by publishedAt descending,
|
|
38
|
+
with a projection that includes: _id, title, slug (from slug.current),
|
|
39
|
+
publishedAt, excerpt, and the author's name (resolved from a reference)
|
|
40
|
+
2. Add pagination to return only the first 10 results
|
|
41
|
+
3. Fetch a single post by its slug parameter, including the full body
|
|
42
|
+
content and resolved author and category references
|
|
43
|
+
4. Fetch posts published after a specific date
|
|
44
|
+
5. Fetch posts that belong to a specific category (where categories
|
|
45
|
+
is an array of references)
|
|
46
|
+
|
|
47
|
+
Use @sanity/client with client.fetch() for all queries. Include
|
|
48
|
+
TypeScript types for the query results.`,
|
|
49
|
+
docs: "file://contexts/canonical/groq-blog-queries.md",
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
assertions: [
|
|
53
|
+
{
|
|
54
|
+
type: "llm-rubric",
|
|
55
|
+
template: "task-completion",
|
|
56
|
+
criteria: [
|
|
57
|
+
'GROQ filter with _type == "post"',
|
|
58
|
+
'Projection with aliased slug field ("slug": slug.current)',
|
|
59
|
+
"Reference resolution with -> for author",
|
|
60
|
+
"Ordering with | order(publishedAt desc)",
|
|
61
|
+
"Slice/pagination syntax [0...10] or [0..9]",
|
|
62
|
+
"Parameterized query with $slug for single post fetch",
|
|
63
|
+
"Date filtering with dateTime() or string comparison",
|
|
64
|
+
"Category filtering using references or array contains",
|
|
65
|
+
],
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
type: "llm-rubric",
|
|
69
|
+
template: "code-correctness",
|
|
70
|
+
criteria: [
|
|
71
|
+
"Valid GROQ syntax (proper filter brackets, projection braces)",
|
|
72
|
+
"Uses @sanity/client createClient + client.fetch()",
|
|
73
|
+
"Correct parameter passing syntax ($param)",
|
|
74
|
+
"Proper reference dereference with ->",
|
|
75
|
+
"No deprecated patterns",
|
|
76
|
+
],
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
type: "contains-any",
|
|
80
|
+
value: ["client.fetch", "createClient"],
|
|
81
|
+
weight: 1,
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
type: "contains-any",
|
|
85
|
+
value: ["order(publishedAt", "order(_createdAt", "| order("],
|
|
86
|
+
weight: 1,
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
type: "contains-any",
|
|
90
|
+
value: ["[0...10]", "[0..9]", "[0..."],
|
|
91
|
+
weight: 1,
|
|
92
|
+
},
|
|
93
|
+
],
|
|
94
|
+
}),
|
|
95
|
+
|
|
96
|
+
defineTask({
|
|
97
|
+
id: "groq-joins-references",
|
|
98
|
+
mode: "literacy",
|
|
99
|
+
title: "GROQ - Joins and reference resolution",
|
|
100
|
+
description: "GROQ - Joins and reference resolution",
|
|
101
|
+
area: "groq",
|
|
102
|
+
docCoverage: true,
|
|
103
|
+
context: {
|
|
104
|
+
docs: [
|
|
105
|
+
{
|
|
106
|
+
slug: "groq-joins",
|
|
107
|
+
reason: "Join patterns — ->, []-> , subqueries, parent scope (^)",
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
slug: "how-queries-work",
|
|
111
|
+
reason: "Core query mechanics including reference traversal",
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
slug: "groq-introduction",
|
|
115
|
+
reason: "Overview including reference resolution basics",
|
|
116
|
+
},
|
|
117
|
+
],
|
|
118
|
+
},
|
|
119
|
+
referenceSolution: "reference-solutions/groq/joins-references.ts",
|
|
120
|
+
prompt: {
|
|
121
|
+
vars: {
|
|
122
|
+
task: `Write GROQ queries that demonstrate join patterns in Sanity:
|
|
123
|
+
|
|
124
|
+
1. Follow a single reference to resolve an author's full profile
|
|
125
|
+
from a post (post.author -> author document with name, bio, image)
|
|
126
|
+
2. Resolve an array of category references from a post
|
|
127
|
+
(post.categories[]-> with title and slug)
|
|
128
|
+
3. Write a reverse reference query: given an author's ID, find all
|
|
129
|
+
posts by that author using a subquery and the parent scope operator (^)
|
|
130
|
+
4. Create a nested join: for each author, include their 5 most recent
|
|
131
|
+
posts as a nested array
|
|
132
|
+
5. Use the references() function to find all documents that reference
|
|
133
|
+
a specific document ID
|
|
134
|
+
|
|
135
|
+
Use @sanity/client with client.fetch(). Include TypeScript types.`,
|
|
136
|
+
docs: "file://contexts/canonical/groq-joins-references.md",
|
|
137
|
+
},
|
|
138
|
+
},
|
|
139
|
+
assertions: [
|
|
140
|
+
{
|
|
141
|
+
type: "llm-rubric",
|
|
142
|
+
template: "task-completion",
|
|
143
|
+
criteria: [
|
|
144
|
+
"Single reference follow with -> operator",
|
|
145
|
+
"Array reference resolution with []->",
|
|
146
|
+
"Reverse reference / subquery using *[references(^._id)]",
|
|
147
|
+
"Nested join pattern with parent scope (^)",
|
|
148
|
+
"The references() function",
|
|
149
|
+
],
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
type: "llm-rubric",
|
|
153
|
+
template: "code-correctness",
|
|
154
|
+
criteria: [
|
|
155
|
+
"Correct -> dereference syntax",
|
|
156
|
+
"Valid []-> array dereference",
|
|
157
|
+
"Proper use of ^ parent scope operator",
|
|
158
|
+
"Valid references() function usage",
|
|
159
|
+
"No made-up syntax",
|
|
160
|
+
],
|
|
161
|
+
},
|
|
162
|
+
{ type: "contains", value: "->", weight: 1 },
|
|
163
|
+
{
|
|
164
|
+
type: "contains-any",
|
|
165
|
+
value: ["references(", "references(^"],
|
|
166
|
+
weight: 1,
|
|
167
|
+
},
|
|
168
|
+
],
|
|
169
|
+
}),
|
|
170
|
+
|
|
171
|
+
defineTask({
|
|
172
|
+
id: "groq-advanced-filtering",
|
|
173
|
+
mode: "literacy",
|
|
174
|
+
title: "GROQ - Advanced filtering and projections",
|
|
175
|
+
description: "GROQ - Advanced filtering and projections",
|
|
176
|
+
area: "groq",
|
|
177
|
+
docCoverage: true,
|
|
178
|
+
context: {
|
|
179
|
+
docs: [
|
|
180
|
+
{
|
|
181
|
+
slug: "groq-functions",
|
|
182
|
+
reason:
|
|
183
|
+
"GROQ function reference — select(), coalesce(), count(), defined()",
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
slug: "query-cheat-sheet",
|
|
187
|
+
reason: "Common filtering patterns and match operator examples",
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
slug: "groq-operators",
|
|
191
|
+
reason: "Operator reference — match, comparison, logical operators",
|
|
192
|
+
},
|
|
193
|
+
{
|
|
194
|
+
slug: "how-queries-work",
|
|
195
|
+
reason: "Query mechanics including projections and ordering",
|
|
196
|
+
},
|
|
197
|
+
],
|
|
198
|
+
},
|
|
199
|
+
referenceSolution: "reference-solutions/groq/advanced-filtering.ts",
|
|
200
|
+
prompt: {
|
|
201
|
+
vars: {
|
|
202
|
+
task: `Write GROQ queries demonstrating advanced filtering and projection patterns:
|
|
203
|
+
|
|
204
|
+
1. Use select() for conditional projections — return different fields
|
|
205
|
+
based on the document's _type (e.g., posts get excerpt, events get
|
|
206
|
+
date and venue)
|
|
207
|
+
2. Use coalesce() for fallback values — e.g., use seoTitle if it
|
|
208
|
+
exists, otherwise fall back to title
|
|
209
|
+
3. Use the match operator for full-text search in titles
|
|
210
|
+
4. Use count() to count documents matching a filter and to count
|
|
211
|
+
items within an array field
|
|
212
|
+
5. Use defined() to filter for documents that have a specific field set
|
|
213
|
+
6. Filter items within an array using [condition] syntax
|
|
214
|
+
7. Order results by multiple fields (e.g., featured status first,
|
|
215
|
+
then by publishedAt)
|
|
216
|
+
|
|
217
|
+
Use @sanity/client with client.fetch(). Include TypeScript types.`,
|
|
218
|
+
docs: "file://contexts/canonical/groq-advanced-filtering.md",
|
|
219
|
+
},
|
|
220
|
+
},
|
|
221
|
+
assertions: [
|
|
222
|
+
{
|
|
223
|
+
type: "llm-rubric",
|
|
224
|
+
template: "task-completion",
|
|
225
|
+
criteria: [
|
|
226
|
+
"select() for conditional projections",
|
|
227
|
+
"coalesce() for fallback values",
|
|
228
|
+
"match operator for text search",
|
|
229
|
+
"count() function usage",
|
|
230
|
+
"defined() function for existence checks",
|
|
231
|
+
"Array filtering with [condition]",
|
|
232
|
+
"Multi-field ordering",
|
|
233
|
+
],
|
|
234
|
+
},
|
|
235
|
+
{
|
|
236
|
+
type: "llm-rubric",
|
|
237
|
+
template: "code-correctness",
|
|
238
|
+
criteria: [
|
|
239
|
+
"Valid select() syntax with => arrow notation",
|
|
240
|
+
"Correct coalesce() usage",
|
|
241
|
+
"Proper match operator usage (on text fields)",
|
|
242
|
+
"Valid count() and defined() function calls",
|
|
243
|
+
"Correct array filter syntax",
|
|
244
|
+
],
|
|
245
|
+
},
|
|
246
|
+
{
|
|
247
|
+
type: "contains-any",
|
|
248
|
+
value: ["select(", "coalesce("],
|
|
249
|
+
weight: 1,
|
|
250
|
+
},
|
|
251
|
+
{
|
|
252
|
+
type: "contains-any",
|
|
253
|
+
value: ["count(", "defined("],
|
|
254
|
+
weight: 1,
|
|
255
|
+
},
|
|
256
|
+
{ type: "contains-any", value: ["match"], weight: 1 },
|
|
257
|
+
],
|
|
258
|
+
}),
|
|
259
|
+
]
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { defineTask } from "../../_vendor/ailf-core/index.js"
|
|
2
|
+
|
|
3
|
+
// See content-lake.task.ts for detailed explanations of common task properties
|
|
4
|
+
export default [
|
|
5
|
+
defineTask({
|
|
6
|
+
id: "image-asset-pipeline",
|
|
7
|
+
mode: "literacy",
|
|
8
|
+
title:
|
|
9
|
+
"Image Handling - URL builder with transforms, hotspot/crop, responsive images",
|
|
10
|
+
description:
|
|
11
|
+
"Image Handling - URL builder with transforms, hotspot/crop, responsive images",
|
|
12
|
+
area: "image-handling",
|
|
13
|
+
docCoverage: true,
|
|
14
|
+
context: {
|
|
15
|
+
docs: [
|
|
16
|
+
{
|
|
17
|
+
slug: "image-urls",
|
|
18
|
+
reason: "Image transformations — URL parameters, fit modes, format",
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
slug: "presenting-images",
|
|
22
|
+
reason: "Presenting images — best practices, responsive patterns",
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
slug: "image-type",
|
|
26
|
+
reason: "Image schema type — hotspot, crop, metadata fields",
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
slug: "js-client-assets",
|
|
30
|
+
reason: "Working with assets — upload, reference, URL generation",
|
|
31
|
+
},
|
|
32
|
+
],
|
|
33
|
+
},
|
|
34
|
+
referenceSolution: "reference-solutions/image-handling/asset-pipeline.tsx",
|
|
35
|
+
prompt: {
|
|
36
|
+
vars: {
|
|
37
|
+
task: `Build an image component for a Next.js app that renders Sanity images
|
|
38
|
+
with proper transforms, hotspot/crop support, and responsive sizing.
|
|
39
|
+
|
|
40
|
+
Requirements:
|
|
41
|
+
1. Use @sanity/image-url to generate CDN URLs from image references
|
|
42
|
+
2. Support hotspot and crop data from the image field
|
|
43
|
+
3. Generate responsive srcSet with multiple widths
|
|
44
|
+
4. Support format conversion (WebP with fallback)
|
|
45
|
+
5. Create a reusable React component with TypeScript props
|
|
46
|
+
|
|
47
|
+
Provide a complete implementation.`,
|
|
48
|
+
docs: "file://contexts/canonical/image-asset-pipeline.md",
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
assertions: [
|
|
52
|
+
{
|
|
53
|
+
type: "llm-rubric",
|
|
54
|
+
template: "task-completion",
|
|
55
|
+
criteria: [
|
|
56
|
+
"@sanity/image-url builder setup with project config",
|
|
57
|
+
"Hotspot and crop handling via .fit('crop') or equivalent",
|
|
58
|
+
"Responsive srcSet generation with multiple widths",
|
|
59
|
+
"WebP or auto format support",
|
|
60
|
+
"Reusable React component",
|
|
61
|
+
],
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
type: "llm-rubric",
|
|
65
|
+
template: "code-correctness",
|
|
66
|
+
criteria: [
|
|
67
|
+
"Correct @sanity/image-url API usage (imageUrlBuilder, .image(), .width(), etc.)",
|
|
68
|
+
"Proper hotspot/crop application (not ignoring crop metadata)",
|
|
69
|
+
"Valid srcSet syntax",
|
|
70
|
+
"No hardcoded CDN URLs (uses builder)",
|
|
71
|
+
],
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
type: "contains-any",
|
|
75
|
+
value: ["@sanity/image-url", "imageUrlBuilder", "image-url"],
|
|
76
|
+
weight: 1,
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
type: "contains-any",
|
|
80
|
+
value: ["srcSet", "srcset", "sizes"],
|
|
81
|
+
weight: 1,
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
type: "contains-any",
|
|
85
|
+
value: ["hotspot", "crop", ".fit("],
|
|
86
|
+
weight: 1,
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
type: "contains-any",
|
|
90
|
+
value: [".width(", ".height(", ".size("],
|
|
91
|
+
weight: 1,
|
|
92
|
+
},
|
|
93
|
+
],
|
|
94
|
+
}),
|
|
95
|
+
]
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { defineTask } from "../../_vendor/ailf-core/index.js"
|
|
2
|
+
|
|
3
|
+
// See content-lake.task.ts for detailed explanations of common task properties
|
|
4
|
+
export default [
|
|
5
|
+
defineTask({
|
|
6
|
+
id: "nextjs-app-router-integration",
|
|
7
|
+
mode: "literacy",
|
|
8
|
+
title: "Next.js - App Router integration with TypeScript",
|
|
9
|
+
description: "Next.js - App Router integration with TypeScript",
|
|
10
|
+
area: "nextjs-live",
|
|
11
|
+
docCoverage: true,
|
|
12
|
+
context: {
|
|
13
|
+
docs: [
|
|
14
|
+
{
|
|
15
|
+
slug: "next-js-app-router-quickstart",
|
|
16
|
+
reason: "Primary Next.js App Router quickstart guide",
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
slug: "diplaying-content-in-next-js",
|
|
20
|
+
reason: "Fetching and displaying Sanity content in Next.js",
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
slug: "sanity-typegen",
|
|
24
|
+
reason: "TypeGen — generating TypeScript types from GROQ queries",
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
slug: "groq-introduction",
|
|
28
|
+
reason: "GROQ query language introduction",
|
|
29
|
+
},
|
|
30
|
+
],
|
|
31
|
+
},
|
|
32
|
+
referenceSolution: "reference-solutions/nextjs/app-router-integration.tsx",
|
|
33
|
+
prompt: {
|
|
34
|
+
vars: {
|
|
35
|
+
task: `Integrate Sanity into a Next.js 16 App Router application
|
|
36
|
+
with full TypeScript support:
|
|
37
|
+
|
|
38
|
+
1. Set up the Sanity client with proper configuration
|
|
39
|
+
2. Create a typed GROQ query for fetching blog posts
|
|
40
|
+
3. Build a server component that fetches and renders posts
|
|
41
|
+
4. Generate TypeScript types using sanity typegen
|
|
42
|
+
|
|
43
|
+
Provide all files needed for a working integration.`,
|
|
44
|
+
docs: "file://contexts/canonical/nextjs-app-router-integration.md",
|
|
45
|
+
},
|
|
46
|
+
},
|
|
47
|
+
assertions: [
|
|
48
|
+
{
|
|
49
|
+
type: "llm-rubric",
|
|
50
|
+
template: "task-completion",
|
|
51
|
+
criteria: [
|
|
52
|
+
"Sanity client configuration (createClient)",
|
|
53
|
+
"GROQ query with proper syntax",
|
|
54
|
+
"Next.js App Router server component using async/await",
|
|
55
|
+
"TypeScript type definitions or typegen setup",
|
|
56
|
+
],
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
type: "llm-rubric",
|
|
60
|
+
template: "code-correctness",
|
|
61
|
+
criteria: [
|
|
62
|
+
"Uses @sanity/client (not deprecated packages)",
|
|
63
|
+
"App Router patterns (not Pages Router)",
|
|
64
|
+
"Proper server component data fetching (no useEffect)",
|
|
65
|
+
"Valid GROQ query syntax",
|
|
66
|
+
],
|
|
67
|
+
},
|
|
68
|
+
{ type: "contains", value: "createClient", weight: 1 },
|
|
69
|
+
{
|
|
70
|
+
type: "contains-any",
|
|
71
|
+
value: ["groq", "GROQ", "*["],
|
|
72
|
+
weight: 1,
|
|
73
|
+
},
|
|
74
|
+
],
|
|
75
|
+
}),
|
|
76
|
+
]
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import { defineTask } from "../../_vendor/ailf-core/index.js"
|
|
2
|
+
|
|
3
|
+
// See content-lake.task.ts for detailed explanations of common task properties
|
|
4
|
+
export default [
|
|
5
|
+
defineTask({
|
|
6
|
+
id: "portable-text-rendering",
|
|
7
|
+
mode: "literacy",
|
|
8
|
+
title: "Portable Text - Render rich text in React with custom components",
|
|
9
|
+
description:
|
|
10
|
+
"Portable Text - Render rich text in React with custom components",
|
|
11
|
+
area: "portable-text",
|
|
12
|
+
docCoverage: true,
|
|
13
|
+
context: {
|
|
14
|
+
docs: [
|
|
15
|
+
{
|
|
16
|
+
slug: "previewing-block-content",
|
|
17
|
+
reason: "Previewing Portable Text — rendering in frontends",
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
slug: "customizing-block-content",
|
|
21
|
+
reason:
|
|
22
|
+
"Common PT editor patterns — custom blocks, marks, annotations",
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
slug: "presenting-images",
|
|
26
|
+
reason: "Presenting images — needed for inline image blocks in PT",
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
slug: "image-urls",
|
|
30
|
+
reason: "Image URL builder for transforming image references in PT",
|
|
31
|
+
},
|
|
32
|
+
],
|
|
33
|
+
},
|
|
34
|
+
referenceSolution: "reference-solutions/portable-text/rendering.tsx",
|
|
35
|
+
prompt: {
|
|
36
|
+
vars: {
|
|
37
|
+
task: `Render Portable Text content from Sanity in a React application using
|
|
38
|
+
@portabletext/react.
|
|
39
|
+
|
|
40
|
+
Requirements:
|
|
41
|
+
1. Set up the PortableText component with custom components
|
|
42
|
+
2. Handle image blocks with proper URL generation using @sanity/image-url
|
|
43
|
+
3. Handle link marks (both internal and external links)
|
|
44
|
+
4. Handle code blocks with syntax highlighting markup
|
|
45
|
+
5. Provide TypeScript types for the component props
|
|
46
|
+
|
|
47
|
+
Provide a complete, reusable implementation.`,
|
|
48
|
+
docs: "file://contexts/canonical/portable-text-rendering.md",
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
assertions: [
|
|
52
|
+
{
|
|
53
|
+
type: "llm-rubric",
|
|
54
|
+
template: "task-completion",
|
|
55
|
+
criteria: [
|
|
56
|
+
"PortableText component from @portabletext/react",
|
|
57
|
+
"Custom component map with image, link, and code block handlers",
|
|
58
|
+
"Image URL generation from Sanity image references",
|
|
59
|
+
"TypeScript types for props and component definitions",
|
|
60
|
+
],
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
type: "llm-rubric",
|
|
64
|
+
template: "code-correctness",
|
|
65
|
+
criteria: [
|
|
66
|
+
"Uses @portabletext/react (not deprecated @sanity/block-content-to-react)",
|
|
67
|
+
"Correct component map shape (types, marks, block, list, listItem)",
|
|
68
|
+
"Proper image URL builder usage with hotspot/crop support",
|
|
69
|
+
"No deprecated APIs or patterns",
|
|
70
|
+
],
|
|
71
|
+
},
|
|
72
|
+
{ type: "contains", value: "PortableText", weight: 1 },
|
|
73
|
+
{
|
|
74
|
+
type: "contains-any",
|
|
75
|
+
value: ["@portabletext/react", "portabletext/react"],
|
|
76
|
+
weight: 1,
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
type: "contains-any",
|
|
80
|
+
value: ["components", "serializers"],
|
|
81
|
+
weight: 1,
|
|
82
|
+
},
|
|
83
|
+
// not-contains: FAILS the assertion if the string appears — penalizes deprecated APIs
|
|
84
|
+
{
|
|
85
|
+
type: "not-contains",
|
|
86
|
+
value: "@sanity/block-content-to-react",
|
|
87
|
+
weight: 1,
|
|
88
|
+
},
|
|
89
|
+
{ type: "not-contains", value: "BlockContent", weight: 1 },
|
|
90
|
+
],
|
|
91
|
+
}),
|
|
92
|
+
|
|
93
|
+
defineTask({
|
|
94
|
+
id: "portable-text-custom-blocks",
|
|
95
|
+
mode: "literacy",
|
|
96
|
+
title: "Portable Text - Define and render custom block types",
|
|
97
|
+
description: "Portable Text - Define and render custom block types",
|
|
98
|
+
area: "portable-text",
|
|
99
|
+
docCoverage: true,
|
|
100
|
+
context: {
|
|
101
|
+
docs: [
|
|
102
|
+
{
|
|
103
|
+
slug: "customizing-the-portable-text-editor",
|
|
104
|
+
reason: "Customizing the PT editor — adding custom block types",
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
slug: "customizing-block-content",
|
|
108
|
+
reason: "Common PT patterns — custom blocks, decorators, annotations",
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
slug: "portable-text-editor-configuration",
|
|
112
|
+
reason: "PT editor configuration — styles, lists, marks, of array",
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
slug: "previewing-block-content",
|
|
116
|
+
reason: "Previewing PT — rendering custom blocks in frontends",
|
|
117
|
+
},
|
|
118
|
+
],
|
|
119
|
+
},
|
|
120
|
+
referenceSolution: "reference-solutions/portable-text/custom-blocks.ts",
|
|
121
|
+
prompt: {
|
|
122
|
+
vars: {
|
|
123
|
+
task: `Define custom block types for a Portable Text field and render them
|
|
124
|
+
in a React frontend.
|
|
125
|
+
|
|
126
|
+
Requirements:
|
|
127
|
+
1. Add a "code" block type with language and code fields
|
|
128
|
+
2. Add a "callout" block type with tone (info/warning/error) and text
|
|
129
|
+
3. Define the schema using defineArrayMember in a Sanity schema file
|
|
130
|
+
4. Show how to render these custom blocks with @portabletext/react
|
|
131
|
+
|
|
132
|
+
Provide both the schema definition and the frontend rendering code.`,
|
|
133
|
+
docs: "file://contexts/canonical/portable-text-custom-blocks.md",
|
|
134
|
+
},
|
|
135
|
+
},
|
|
136
|
+
assertions: [
|
|
137
|
+
{
|
|
138
|
+
type: "llm-rubric",
|
|
139
|
+
template: "task-completion",
|
|
140
|
+
criteria: [
|
|
141
|
+
"Code block type with language and code fields",
|
|
142
|
+
"Callout block type with tone and text",
|
|
143
|
+
"Schema defined with defineArrayMember or equivalent",
|
|
144
|
+
"Frontend rendering for both custom block types",
|
|
145
|
+
],
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
type: "llm-rubric",
|
|
149
|
+
template: "code-correctness",
|
|
150
|
+
criteria: [
|
|
151
|
+
"Correct defineArrayMember usage for custom blocks",
|
|
152
|
+
'Proper "of" array structure in the PT field',
|
|
153
|
+
"Custom component map handles both block types",
|
|
154
|
+
"No deprecated schema patterns",
|
|
155
|
+
],
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
type: "contains-any",
|
|
159
|
+
value: ["defineArrayMember", "defineField"],
|
|
160
|
+
weight: 1,
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
type: "contains-any",
|
|
164
|
+
value: ["components", "serializers"],
|
|
165
|
+
weight: 1,
|
|
166
|
+
},
|
|
167
|
+
],
|
|
168
|
+
}),
|
|
169
|
+
]
|