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