@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,245 @@
1
+ /**
2
+ * repo-schemas.ts — Zod schemas for repo-based task definitions.
3
+ *
4
+ * Validates .ailf/tasks/*.yaml task files and .ailf/config.yaml trigger
5
+ * configuration from external repositories (Phase 4 of Tasks as Content).
6
+ *
7
+ * These schemas are the contract between external repos and the AILF eval
8
+ * pipeline — they define exactly what fields are accepted, with friendly
9
+ * error messages for authors writing task YAML by hand.
10
+ *
11
+ * @see docs/exec-plans/completed/tasks-as-content/phase-4-repo-based-tasks.md
12
+ * @see packages/eval/src/adapters/task-sources/repo-task-source.ts
13
+ */
14
+ import { z } from "zod";
15
+ /**
16
+ * The set of assertion types allowed in repo-based task files.
17
+ *
18
+ * This is a curated subset of Promptfoo assertion types — we expose only the
19
+ * types that are stable, well-documented, and useful for external authors.
20
+ */
21
+ export declare const CURATED_ASSERTION_TYPES: readonly ["llm-rubric", "contains", "contains-any", "contains-all", "not-contains", "icontains", "icontains-any", "regex", "javascript", "similar", "cost", "latency"];
22
+ export type CuratedAssertionType = (typeof CURATED_ASSERTION_TYPES)[number];
23
+ /**
24
+ * Valid rubric template names — must match keys in config/rubrics.yaml.
25
+ */
26
+ export declare const RUBRIC_TEMPLATE_NAMES: readonly ["task-completion", "code-correctness", "doc-coverage"];
27
+ export type RubricTemplateName = (typeof RUBRIC_TEMPLATE_NAMES)[number];
28
+ /**
29
+ * Zod schema for a single repo-based task definition.
30
+ *
31
+ * This is the external-author-facing contract. Field names are camelCase
32
+ * to match the Content Lake document schema (ailf.task).
33
+ */
34
+ export declare const RepoTaskSchema: z.ZodObject<{
35
+ id: z.ZodString;
36
+ description: z.ZodString;
37
+ featureArea: z.ZodString;
38
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
39
+ canonicalDocs: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodObject<{
40
+ id: z.ZodString;
41
+ reason: z.ZodDefault<z.ZodOptional<z.ZodString>>;
42
+ slug: z.ZodOptional<z.ZodString>;
43
+ path: z.ZodOptional<z.ZodString>;
44
+ }, z.core.$strip>, z.ZodObject<{
45
+ slug: z.ZodString;
46
+ reason: z.ZodDefault<z.ZodOptional<z.ZodString>>;
47
+ }, z.core.$strip>, z.ZodObject<{
48
+ path: z.ZodString;
49
+ reason: z.ZodDefault<z.ZodOptional<z.ZodString>>;
50
+ }, z.core.$strip>, z.ZodObject<{
51
+ perspective: z.ZodString;
52
+ reason: z.ZodDefault<z.ZodOptional<z.ZodString>>;
53
+ }, z.core.$strip>]>>>>;
54
+ vars: z.ZodOptional<z.ZodObject<{
55
+ task: z.ZodString;
56
+ }, z.core.$loose>>;
57
+ assert: z.ZodArray<z.ZodUnion<readonly [z.ZodObject<{
58
+ type: z.ZodLiteral<"llm-rubric">;
59
+ template: z.ZodEnum<{
60
+ "task-completion": "task-completion";
61
+ "code-correctness": "code-correctness";
62
+ "doc-coverage": "doc-coverage";
63
+ }>;
64
+ criteria: z.ZodArray<z.ZodString>;
65
+ weight: z.ZodOptional<z.ZodNumber>;
66
+ }, z.core.$strip>, z.ZodObject<{
67
+ type: z.ZodEnum<{
68
+ "llm-rubric": "llm-rubric";
69
+ contains: "contains";
70
+ "contains-any": "contains-any";
71
+ "contains-all": "contains-all";
72
+ "not-contains": "not-contains";
73
+ icontains: "icontains";
74
+ "icontains-any": "icontains-any";
75
+ regex: "regex";
76
+ javascript: "javascript";
77
+ similar: "similar";
78
+ cost: "cost";
79
+ latency: "latency";
80
+ }>;
81
+ value: z.ZodOptional<z.ZodUnknown>;
82
+ threshold: z.ZodOptional<z.ZodNumber>;
83
+ weight: z.ZodOptional<z.ZodNumber>;
84
+ }, z.core.$loose>]>>;
85
+ baseline: z.ZodOptional<z.ZodObject<{
86
+ enabled: z.ZodOptional<z.ZodBoolean>;
87
+ rubric: z.ZodOptional<z.ZodEnum<{
88
+ full: "full";
89
+ abbreviated: "abbreviated";
90
+ none: "none";
91
+ }>>;
92
+ }, z.core.$strip>>;
93
+ docCoverage: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
94
+ referenceSolution: z.ZodOptional<z.ZodString>;
95
+ execution: z.ZodOptional<z.ZodObject<{
96
+ enabled: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
97
+ blocking: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
98
+ threshold: z.ZodOptional<z.ZodObject<{
99
+ score: z.ZodOptional<z.ZodNumber>;
100
+ }, z.core.$strip>>;
101
+ trigger: z.ZodOptional<z.ZodObject<{
102
+ branches: z.ZodOptional<z.ZodArray<z.ZodString>>;
103
+ paths: z.ZodOptional<z.ZodArray<z.ZodString>>;
104
+ }, z.core.$strip>>;
105
+ source: z.ZodOptional<z.ZodString>;
106
+ }, z.core.$strip>>;
107
+ }, z.core.$strip>;
108
+ export type RepoTask = z.infer<typeof RepoTaskSchema>;
109
+ /**
110
+ * Schema for an array of repo tasks — what a single .ailf/tasks/*.yaml file
111
+ * contains. Each file must define at least one task.
112
+ */
113
+ export declare const RepoTaskFileSchema: z.ZodArray<z.ZodObject<{
114
+ id: z.ZodString;
115
+ description: z.ZodString;
116
+ featureArea: z.ZodString;
117
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
118
+ canonicalDocs: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodObject<{
119
+ id: z.ZodString;
120
+ reason: z.ZodDefault<z.ZodOptional<z.ZodString>>;
121
+ slug: z.ZodOptional<z.ZodString>;
122
+ path: z.ZodOptional<z.ZodString>;
123
+ }, z.core.$strip>, z.ZodObject<{
124
+ slug: z.ZodString;
125
+ reason: z.ZodDefault<z.ZodOptional<z.ZodString>>;
126
+ }, z.core.$strip>, z.ZodObject<{
127
+ path: z.ZodString;
128
+ reason: z.ZodDefault<z.ZodOptional<z.ZodString>>;
129
+ }, z.core.$strip>, z.ZodObject<{
130
+ perspective: z.ZodString;
131
+ reason: z.ZodDefault<z.ZodOptional<z.ZodString>>;
132
+ }, z.core.$strip>]>>>>;
133
+ vars: z.ZodOptional<z.ZodObject<{
134
+ task: z.ZodString;
135
+ }, z.core.$loose>>;
136
+ assert: z.ZodArray<z.ZodUnion<readonly [z.ZodObject<{
137
+ type: z.ZodLiteral<"llm-rubric">;
138
+ template: z.ZodEnum<{
139
+ "task-completion": "task-completion";
140
+ "code-correctness": "code-correctness";
141
+ "doc-coverage": "doc-coverage";
142
+ }>;
143
+ criteria: z.ZodArray<z.ZodString>;
144
+ weight: z.ZodOptional<z.ZodNumber>;
145
+ }, z.core.$strip>, z.ZodObject<{
146
+ type: z.ZodEnum<{
147
+ "llm-rubric": "llm-rubric";
148
+ contains: "contains";
149
+ "contains-any": "contains-any";
150
+ "contains-all": "contains-all";
151
+ "not-contains": "not-contains";
152
+ icontains: "icontains";
153
+ "icontains-any": "icontains-any";
154
+ regex: "regex";
155
+ javascript: "javascript";
156
+ similar: "similar";
157
+ cost: "cost";
158
+ latency: "latency";
159
+ }>;
160
+ value: z.ZodOptional<z.ZodUnknown>;
161
+ threshold: z.ZodOptional<z.ZodNumber>;
162
+ weight: z.ZodOptional<z.ZodNumber>;
163
+ }, z.core.$loose>]>>;
164
+ baseline: z.ZodOptional<z.ZodObject<{
165
+ enabled: z.ZodOptional<z.ZodBoolean>;
166
+ rubric: z.ZodOptional<z.ZodEnum<{
167
+ full: "full";
168
+ abbreviated: "abbreviated";
169
+ none: "none";
170
+ }>>;
171
+ }, z.core.$strip>>;
172
+ docCoverage: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
173
+ referenceSolution: z.ZodOptional<z.ZodString>;
174
+ execution: z.ZodOptional<z.ZodObject<{
175
+ enabled: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
176
+ blocking: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
177
+ threshold: z.ZodOptional<z.ZodObject<{
178
+ score: z.ZodOptional<z.ZodNumber>;
179
+ }, z.core.$strip>>;
180
+ trigger: z.ZodOptional<z.ZodObject<{
181
+ branches: z.ZodOptional<z.ZodArray<z.ZodString>>;
182
+ paths: z.ZodOptional<z.ZodArray<z.ZodString>>;
183
+ }, z.core.$strip>>;
184
+ source: z.ZodOptional<z.ZodString>;
185
+ }, z.core.$strip>>;
186
+ }, z.core.$strip>>;
187
+ /**
188
+ * Zod schema for .ailf/config.yaml — controls how and when evaluations
189
+ * are triggered from an external repository.
190
+ */
191
+ export declare const RepoConfigSchema: z.ZodObject<{
192
+ triggers: z.ZodOptional<z.ZodObject<{
193
+ pr: z.ZodOptional<z.ZodObject<{
194
+ mode: z.ZodDefault<z.ZodEnum<{
195
+ eval: "eval";
196
+ "validate-only": "validate-only";
197
+ }>>;
198
+ paths: z.ZodOptional<z.ZodArray<z.ZodString>>;
199
+ blocking: z.ZodOptional<z.ZodBoolean>;
200
+ notify: z.ZodOptional<z.ZodBoolean>;
201
+ compare: z.ZodOptional<z.ZodBoolean>;
202
+ }, z.core.$strip>>;
203
+ "pr-task-change": z.ZodOptional<z.ZodObject<{
204
+ mode: z.ZodDefault<z.ZodEnum<{
205
+ eval: "eval";
206
+ "validate-only": "validate-only";
207
+ }>>;
208
+ paths: z.ZodOptional<z.ZodArray<z.ZodString>>;
209
+ blocking: z.ZodOptional<z.ZodBoolean>;
210
+ notify: z.ZodOptional<z.ZodBoolean>;
211
+ compare: z.ZodOptional<z.ZodBoolean>;
212
+ }, z.core.$strip>>;
213
+ main: z.ZodOptional<z.ZodObject<{
214
+ mode: z.ZodDefault<z.ZodEnum<{
215
+ eval: "eval";
216
+ "validate-only": "validate-only";
217
+ }>>;
218
+ paths: z.ZodOptional<z.ZodArray<z.ZodString>>;
219
+ blocking: z.ZodOptional<z.ZodBoolean>;
220
+ notify: z.ZodOptional<z.ZodBoolean>;
221
+ compare: z.ZodOptional<z.ZodBoolean>;
222
+ }, z.core.$strip>>;
223
+ schedule: z.ZodOptional<z.ZodObject<{
224
+ mode: z.ZodDefault<z.ZodEnum<{
225
+ eval: "eval";
226
+ "validate-only": "validate-only";
227
+ }>>;
228
+ paths: z.ZodOptional<z.ZodArray<z.ZodString>>;
229
+ blocking: z.ZodOptional<z.ZodBoolean>;
230
+ notify: z.ZodOptional<z.ZodBoolean>;
231
+ compare: z.ZodOptional<z.ZodBoolean>;
232
+ cron: z.ZodString;
233
+ }, z.core.$strip>>;
234
+ }, z.core.$strip>>;
235
+ }, z.core.$strip>;
236
+ export type RepoConfig = z.infer<typeof RepoConfigSchema>;
237
+ /**
238
+ * Parse and validate a repo task file's content. Returns typed tasks or throws
239
+ * with a user-friendly Zod error message.
240
+ */
241
+ export declare function parseRepoTaskFile(raw: unknown, filename: string): RepoTask[];
242
+ /**
243
+ * Parse and validate .ailf/config.yaml content. Returns typed config or throws.
244
+ */
245
+ export declare function parseRepoConfig(raw: unknown, filename?: string): RepoConfig;
@@ -0,0 +1,234 @@
1
+ /**
2
+ * repo-schemas.ts — Zod schemas for repo-based task definitions.
3
+ *
4
+ * Validates .ailf/tasks/*.yaml task files and .ailf/config.yaml trigger
5
+ * configuration from external repositories (Phase 4 of Tasks as Content).
6
+ *
7
+ * These schemas are the contract between external repos and the AILF eval
8
+ * pipeline — they define exactly what fields are accepted, with friendly
9
+ * error messages for authors writing task YAML by hand.
10
+ *
11
+ * @see docs/exec-plans/completed/tasks-as-content/phase-4-repo-based-tasks.md
12
+ * @see packages/eval/src/adapters/task-sources/repo-task-source.ts
13
+ */
14
+ import { z } from "zod";
15
+ // ---------------------------------------------------------------------------
16
+ // Constants — curated assertion types and rubric template names
17
+ // ---------------------------------------------------------------------------
18
+ /**
19
+ * The set of assertion types allowed in repo-based task files.
20
+ *
21
+ * This is a curated subset of Promptfoo assertion types — we expose only the
22
+ * types that are stable, well-documented, and useful for external authors.
23
+ */
24
+ export const CURATED_ASSERTION_TYPES = [
25
+ "llm-rubric",
26
+ "contains",
27
+ "contains-any",
28
+ "contains-all",
29
+ "not-contains",
30
+ "icontains",
31
+ "icontains-any",
32
+ "regex",
33
+ "javascript",
34
+ "similar",
35
+ "cost",
36
+ "latency",
37
+ ];
38
+ /**
39
+ * Valid rubric template names — must match keys in config/rubrics.yaml.
40
+ */
41
+ export const RUBRIC_TEMPLATE_NAMES = [
42
+ "task-completion",
43
+ "code-correctness",
44
+ "doc-coverage",
45
+ ];
46
+ // ---------------------------------------------------------------------------
47
+ // Assertion schemas
48
+ // ---------------------------------------------------------------------------
49
+ /**
50
+ * Polymorphic canonical doc reference — discriminated by key presence.
51
+ * Exactly one resolution key (slug, path, id, or perspective) must be present.
52
+ *
53
+ * @see docs/design-docs/canonical-doc-resolution.md
54
+ */
55
+ const SlugDocRefSchema = z.object({
56
+ slug: z.string().min(1),
57
+ reason: z.string().optional().default(""),
58
+ });
59
+ const PathDocRefSchema = z.object({
60
+ path: z.string().min(1),
61
+ reason: z.string().optional().default(""),
62
+ });
63
+ const IdDocRefSchema = z.object({
64
+ id: z.string().min(1),
65
+ reason: z.string().optional().default(""),
66
+ /** Human-readable slug annotation (not used for resolution) */
67
+ slug: z.string().optional(),
68
+ /** Human-readable path annotation (not used for resolution) */
69
+ path: z.string().optional(),
70
+ });
71
+ const PerspectiveDocRefSchema = z.object({
72
+ perspective: z.string().min(1),
73
+ reason: z.string().optional().default(""),
74
+ });
75
+ // Order matters: IdDocRefSchema first because it may also carry `slug`
76
+ // and `path` as optional annotations. Zod tries schemas in order, so
77
+ // entries like `{ id: "...", slug: "..." }` must match IdDocRefSchema
78
+ // (not SlugDocRefSchema).
79
+ const CanonicalDocRefSchema = z.union([
80
+ IdDocRefSchema,
81
+ SlugDocRefSchema,
82
+ PathDocRefSchema,
83
+ PerspectiveDocRefSchema,
84
+ ]);
85
+ /**
86
+ * A templated LLM-rubric assertion — uses one of the predefined rubric
87
+ * templates with author-supplied criteria.
88
+ */
89
+ const TemplatedAssertionSchema = z.object({
90
+ type: z.literal("llm-rubric"),
91
+ template: z.enum(RUBRIC_TEMPLATE_NAMES),
92
+ criteria: z.array(z.string().min(1)).min(1),
93
+ weight: z.number().optional(),
94
+ });
95
+ /**
96
+ * A value-based assertion (contains, regex, cost, etc.). Uses .passthrough()
97
+ * to allow extra fields for future extension without schema breakage.
98
+ */
99
+ const ValueAssertionSchema = z
100
+ .object({
101
+ type: z.enum(CURATED_ASSERTION_TYPES),
102
+ value: z.unknown().optional(),
103
+ threshold: z.number().optional(),
104
+ weight: z.number().optional(),
105
+ })
106
+ .passthrough();
107
+ /** Union of all supported assertion shapes. */
108
+ const AssertionSchema = z.union([
109
+ TemplatedAssertionSchema,
110
+ ValueAssertionSchema,
111
+ ]);
112
+ // ---------------------------------------------------------------------------
113
+ // Nested config schemas
114
+ // ---------------------------------------------------------------------------
115
+ const BaselineConfigSchema = z
116
+ .object({
117
+ enabled: z.boolean().optional(),
118
+ rubric: z.enum(["abbreviated", "full", "none"]).optional(),
119
+ })
120
+ .optional();
121
+ const ExecutionConfigSchema = z
122
+ .object({
123
+ enabled: z.boolean().optional().default(true),
124
+ blocking: z.boolean().optional().default(false),
125
+ threshold: z
126
+ .object({
127
+ score: z.number().min(0).max(100).optional(),
128
+ })
129
+ .optional(),
130
+ trigger: z
131
+ .object({
132
+ branches: z.array(z.string()).optional(),
133
+ paths: z.array(z.string()).optional(),
134
+ })
135
+ .optional(),
136
+ source: z.string().optional(),
137
+ })
138
+ .optional();
139
+ // ---------------------------------------------------------------------------
140
+ // RepoTaskSchema — a single task definition from .ailf/tasks/*.yaml
141
+ // ---------------------------------------------------------------------------
142
+ /**
143
+ * Zod schema for a single repo-based task definition.
144
+ *
145
+ * This is the external-author-facing contract. Field names are camelCase
146
+ * to match the Content Lake document schema (ailf.task).
147
+ */
148
+ export const RepoTaskSchema = z.object({
149
+ id: z
150
+ .string()
151
+ .min(1)
152
+ .regex(/^[a-z0-9][a-z0-9-]*$/, "Task ID must be lowercase alphanumeric with hyphens"),
153
+ description: z.string().min(1),
154
+ featureArea: z
155
+ .string()
156
+ .min(1)
157
+ .regex(/^[a-z0-9][a-z0-9-]*$/, "Feature area must be lowercase alphanumeric with hyphens"),
158
+ tags: z.array(z.string()).optional(),
159
+ canonicalDocs: z.array(CanonicalDocRefSchema).optional().default([]),
160
+ vars: z
161
+ .object({
162
+ task: z.string().min(1),
163
+ })
164
+ .passthrough()
165
+ .optional(),
166
+ assert: z.array(AssertionSchema).min(1),
167
+ baseline: BaselineConfigSchema,
168
+ docCoverage: z.boolean().optional().default(false),
169
+ referenceSolution: z.string().optional(),
170
+ execution: ExecutionConfigSchema,
171
+ });
172
+ /**
173
+ * Schema for an array of repo tasks — what a single .ailf/tasks/*.yaml file
174
+ * contains. Each file must define at least one task.
175
+ */
176
+ export const RepoTaskFileSchema = z.array(RepoTaskSchema).min(1);
177
+ // ---------------------------------------------------------------------------
178
+ // RepoConfigSchema — .ailf/config.yaml
179
+ // ---------------------------------------------------------------------------
180
+ const TriggerModeSchema = z.enum(["validate-only", "eval"]);
181
+ const TriggerConfigSchema = z.object({
182
+ mode: TriggerModeSchema.default("eval"),
183
+ paths: z.array(z.string()).optional(),
184
+ blocking: z.boolean().optional(),
185
+ notify: z.boolean().optional(),
186
+ compare: z.boolean().optional(),
187
+ });
188
+ const ScheduleTriggerSchema = TriggerConfigSchema.extend({
189
+ cron: z.string().min(1),
190
+ });
191
+ /**
192
+ * Zod schema for .ailf/config.yaml — controls how and when evaluations
193
+ * are triggered from an external repository.
194
+ */
195
+ export const RepoConfigSchema = z.object({
196
+ triggers: z
197
+ .object({
198
+ pr: TriggerConfigSchema.optional(),
199
+ "pr-task-change": TriggerConfigSchema.optional(),
200
+ main: TriggerConfigSchema.optional(),
201
+ schedule: ScheduleTriggerSchema.optional(),
202
+ })
203
+ .optional(),
204
+ });
205
+ // ---------------------------------------------------------------------------
206
+ // Validation helpers
207
+ // ---------------------------------------------------------------------------
208
+ /**
209
+ * Parse and validate a repo task file's content. Returns typed tasks or throws
210
+ * with a user-friendly Zod error message.
211
+ */
212
+ export function parseRepoTaskFile(raw, filename) {
213
+ const result = RepoTaskFileSchema.safeParse(raw);
214
+ if (!result.success) {
215
+ const messages = result.error.issues
216
+ .map((i) => ` [${i.path.join(".")}]: ${i.message}`)
217
+ .join("\n");
218
+ throw new Error(`Invalid repo task file "${filename}":\n${messages}`);
219
+ }
220
+ return result.data;
221
+ }
222
+ /**
223
+ * Parse and validate .ailf/config.yaml content. Returns typed config or throws.
224
+ */
225
+ export function parseRepoConfig(raw, filename = ".ailf/config.yaml") {
226
+ const result = RepoConfigSchema.safeParse(raw);
227
+ if (!result.success) {
228
+ const messages = result.error.issues
229
+ .map((i) => ` [${i.path.join(".")}]: ${i.message}`)
230
+ .join("\n");
231
+ throw new Error(`Invalid repo config "${filename}":\n${messages}`);
232
+ }
233
+ return result.data;
234
+ }
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Adapter: Load task definitions from .ailf/tasks/*.yaml in an external repo.
3
+ *
4
+ * Repo-based tasks use a camelCase YAML format (matching the Content Lake
5
+ * document schema) with slug strings instead of Sanity references. The
6
+ * mapping to TaskDefinition is straightforward — field names are already
7
+ * aligned with the domain type.
8
+ *
9
+ * This adapter is structurally similar to YamlTaskSource but:
10
+ * - Reads from an arbitrary directory (not the framework's tasks/ dir)
11
+ * - Uses camelCase field names (not snake_case)
12
+ * - Has an explicit featureArea field per task (not derived from filename)
13
+ *
14
+ * @see packages/core/src/ports/task-source.ts — TaskSource port
15
+ * @see docs/exec-plans/completed/tasks-as-content/phase-4-repo-based-tasks.md
16
+ */
17
+ import type { FilterOptions, TaskDefinition, TaskSource } from "../../_vendor/ailf-core/index.d.ts";
18
+ export declare class RepoTaskSource implements TaskSource {
19
+ private readonly tasksDir;
20
+ constructor(tasksDir: string);
21
+ loadTasks(filter?: FilterOptions): Promise<TaskDefinition[]>;
22
+ }
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Adapter: Load task definitions from .ailf/tasks/*.yaml in an external repo.
3
+ *
4
+ * Repo-based tasks use a camelCase YAML format (matching the Content Lake
5
+ * document schema) with slug strings instead of Sanity references. The
6
+ * mapping to TaskDefinition is straightforward — field names are already
7
+ * aligned with the domain type.
8
+ *
9
+ * This adapter is structurally similar to YamlTaskSource but:
10
+ * - Reads from an arbitrary directory (not the framework's tasks/ dir)
11
+ * - Uses camelCase field names (not snake_case)
12
+ * - Has an explicit featureArea field per task (not derived from filename)
13
+ *
14
+ * @see packages/core/src/ports/task-source.ts — TaskSource port
15
+ * @see docs/exec-plans/completed/tasks-as-content/phase-4-repo-based-tasks.md
16
+ */
17
+ import { existsSync, readdirSync, readFileSync } from "fs";
18
+ import { resolve } from "path";
19
+ import { load } from "js-yaml";
20
+ import { parseRepoTaskFile } from "./repo-schemas.js";
21
+ // ---------------------------------------------------------------------------
22
+ // RepoTaskSource adapter
23
+ // ---------------------------------------------------------------------------
24
+ export class RepoTaskSource {
25
+ tasksDir;
26
+ constructor(tasksDir) {
27
+ this.tasksDir = tasksDir;
28
+ }
29
+ async loadTasks(filter) {
30
+ if (!existsSync(this.tasksDir)) {
31
+ throw new Error(`Repo tasks directory not found: ${this.tasksDir}\n` +
32
+ " Provide a valid path via --repo-tasks-path");
33
+ }
34
+ const yamlFiles = readdirSync(this.tasksDir)
35
+ .filter((f) => (f.endsWith(".yaml") || f.endsWith(".yml")) && !f.startsWith("."))
36
+ .sort();
37
+ if (yamlFiles.length === 0) {
38
+ throw new Error(`No YAML files found in ${this.tasksDir}\n` +
39
+ " Expected .ailf/tasks/*.yaml files with task definitions");
40
+ }
41
+ const definitions = [];
42
+ for (const file of yamlFiles) {
43
+ const filePath = resolve(this.tasksDir, file);
44
+ const raw = readFileSync(filePath, "utf-8");
45
+ const parsed = load(raw);
46
+ if (!Array.isArray(parsed)) {
47
+ throw new Error(`${file} did not parse to an array of tasks. ` +
48
+ "Repo task files must contain a YAML array of task definitions.");
49
+ }
50
+ // Validate entire file through Zod schema
51
+ let validated;
52
+ try {
53
+ validated = parseRepoTaskFile(parsed, file);
54
+ }
55
+ catch (err) {
56
+ const msg = err instanceof Error ? err.message : String(err);
57
+ throw new Error(`Failed to validate ${file}:\n${msg}`, { cause: err });
58
+ }
59
+ for (const entry of validated) {
60
+ // Area filter
61
+ if (filter?.areas &&
62
+ filter.areas.length > 0 &&
63
+ !filter.areas
64
+ .map((a) => a.toLowerCase())
65
+ .includes(entry.featureArea.toLowerCase())) {
66
+ continue;
67
+ }
68
+ // Task ID filter
69
+ if (filter?.taskIds &&
70
+ filter.taskIds.length > 0 &&
71
+ !filter.taskIds.includes(entry.id)) {
72
+ continue;
73
+ }
74
+ definitions.push(mapToTaskDefinition(entry));
75
+ }
76
+ }
77
+ return definitions;
78
+ }
79
+ }
80
+ // ---------------------------------------------------------------------------
81
+ // Mapping helpers
82
+ // ---------------------------------------------------------------------------
83
+ function mapToTaskDefinition(raw) {
84
+ // Extract task prompt from vars.task (same convention as YAML tasks)
85
+ const vars = (raw.vars ?? {});
86
+ const { docs: _docs, task, ...rest } = vars;
87
+ // Canonical docs are already parsed into the polymorphic union by Zod.
88
+ // Each entry has exactly one resolution key (slug, path, id, or perspective).
89
+ const canonicalDocs = (raw.canonicalDocs ??
90
+ []);
91
+ const extraVars = Object.keys(rest).length > 0 ? rest : undefined;
92
+ return {
93
+ assertions: (raw.assert ?? []),
94
+ canonicalDocs,
95
+ description: raw.description,
96
+ docCoverage: raw.docCoverage ?? false,
97
+ featureArea: raw.featureArea,
98
+ id: raw.id,
99
+ referenceSolution: raw.referenceSolution ?? "",
100
+ taskPrompt: typeof task === "string" ? task : "",
101
+ ...(raw.baseline ? { baseline: raw.baseline } : {}),
102
+ ...(extraVars ? { extraVars } : {}),
103
+ };
104
+ }
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Trigger processing for repo-based AILF tasks.
3
+ *
4
+ * Reads .ailf/config.yaml, determines the current execution context
5
+ * (PR, main merge, schedule, manual), and resolves which trigger
6
+ * config applies. This drives whether the pipeline runs in validate-only
7
+ * mode or full eval mode, and whether results are blocking.
8
+ *
9
+ * @see docs/exec-plans/completed/tasks-as-content/phase-4-repo-based-tasks.md
10
+ */
11
+ export type TriggerContext = {
12
+ type: "pr";
13
+ branch: string;
14
+ changedFiles?: string[];
15
+ } | {
16
+ type: "main";
17
+ } | {
18
+ type: "schedule";
19
+ } | {
20
+ type: "manual";
21
+ };
22
+ export interface ResolvedTrigger {
23
+ /** Whether this trigger matched the current context */
24
+ matched: boolean;
25
+ /** Eval mode: validate-only (parse checks only) or eval (full run) */
26
+ mode: "eval" | "validate-only";
27
+ /** Whether failing scores should block the PR/merge */
28
+ blocking: boolean;
29
+ /** Whether to notify (e.g., post PR comment) */
30
+ notify: boolean;
31
+ /** Whether to run comparison against baseline */
32
+ compare: boolean;
33
+ /** Path filters — only trigger when these paths changed */
34
+ paths?: string[];
35
+ /** Cron schedule (only for schedule triggers) */
36
+ cron?: string;
37
+ }
38
+ /**
39
+ * Load and resolve the trigger configuration for the current context.
40
+ *
41
+ * @param repoRoot - Root of the external repo (contains .ailf/)
42
+ * @param context - The current execution context (PR, main, schedule, manual)
43
+ * @returns The resolved trigger config, or a default (eval, non-blocking)
44
+ */
45
+ export declare function resolveTrigger(repoRoot: string, context: TriggerContext): ResolvedTrigger;
46
+ /**
47
+ * Detect the current trigger context from environment variables.
48
+ *
49
+ * Reads GitHub Actions env vars to determine if we're in a PR,
50
+ * on the main branch, running on schedule, or manual dispatch.
51
+ */
52
+ export declare function detectTriggerContext(): TriggerContext;