@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,141 @@
1
+ /**
2
+ * baseline command — manage historical baseline snapshots of evaluation scores.
3
+ *
4
+ * Wraps the core baseline functions from pipeline/baseline.ts behind a
5
+ * Commander subcommand interface: `baseline save`, `baseline compare`,
6
+ * `baseline history`.
7
+ */
8
+ import { dirname, resolve } from "path";
9
+ import { fileURLToPath } from "url";
10
+ import { Command } from "commander";
11
+ import { compareBaseline, listBaselines, saveBaseline, } from "../pipeline/baseline.js";
12
+ const __dirname = dirname(fileURLToPath(import.meta.url));
13
+ const ROOT = resolve(__dirname, "../..");
14
+ export function createBaselineCommand() {
15
+ const cmd = new Command("baseline").description("Manage historical baseline snapshots of evaluation scores");
16
+ // -----------------------------------------------------------------------
17
+ // baseline save
18
+ // -----------------------------------------------------------------------
19
+ cmd
20
+ .command("save")
21
+ .description("Save current scores as a baseline snapshot")
22
+ .option("-t, --tag <tag>", "Descriptive tag for the baseline")
23
+ .action(async (opts) => {
24
+ console.log("=== Saving baseline snapshot ===\n");
25
+ const result = saveBaseline(ROOT, opts.tag);
26
+ if (result.success) {
27
+ console.log(` ✅ ${result.message}`);
28
+ }
29
+ else {
30
+ console.error(` ❌ ${result.message}`);
31
+ process.exit(1);
32
+ }
33
+ });
34
+ // -----------------------------------------------------------------------
35
+ // baseline compare
36
+ // -----------------------------------------------------------------------
37
+ cmd
38
+ .command("compare")
39
+ .description("Compare current scores against a saved baseline")
40
+ .option("-f, --file <path>", "Specific baseline file to compare against")
41
+ .action(async (opts) => {
42
+ console.log("=== Baseline Comparison ===\n");
43
+ const result = compareBaseline(ROOT, opts.file);
44
+ if (!result.success) {
45
+ console.error(` ❌ ${result.message}`);
46
+ process.exit(1);
47
+ }
48
+ console.log(` ${result.message}\n`);
49
+ // Score comparison table
50
+ console.log(" " +
51
+ "Feature Area".padEnd(18) +
52
+ "Current".padEnd(10) +
53
+ "Baseline".padEnd(10) +
54
+ "Delta");
55
+ console.log(" " + "-".repeat(50));
56
+ for (const c of result.comparisons) {
57
+ const deltaStr = c.delta > 0 ? `+${c.delta}` : c.delta === 0 ? "=" : String(c.delta);
58
+ const icon = c.delta > 0 ? "📈" : c.delta < 0 ? "📉" : "➡️";
59
+ console.log(" " +
60
+ c.feature.padEnd(18) +
61
+ String(c.current).padEnd(10) +
62
+ String(c.baseline).padEnd(10) +
63
+ `${icon} ${deltaStr}`);
64
+ }
65
+ // Cost comparison (only if cost data exists)
66
+ const hasCostData = result.comparisons.some((c) => c.costCurrent !== undefined || c.costBaseline !== undefined);
67
+ if (hasCostData) {
68
+ console.log();
69
+ console.log(" Cost Comparison:");
70
+ console.log(" " +
71
+ "Feature Area".padEnd(18) +
72
+ "Current".padEnd(10) +
73
+ "Baseline".padEnd(10) +
74
+ "Delta");
75
+ console.log(" " + "-".repeat(50));
76
+ for (const c of result.comparisons) {
77
+ if (c.costCurrent === undefined && c.costBaseline === undefined)
78
+ continue;
79
+ const cur = `$${(c.costCurrent ?? 0).toFixed(4)}`;
80
+ const base = `$${(c.costBaseline ?? 0).toFixed(4)}`;
81
+ const delta = c.costDelta ?? 0;
82
+ const deltaStr = delta > 0
83
+ ? `+$${delta.toFixed(4)}`
84
+ : delta < 0
85
+ ? `-$${Math.abs(delta).toFixed(4)}`
86
+ : "=";
87
+ const icon = delta > 0 ? "📈" : delta < 0 ? "📉" : "➡️";
88
+ console.log(" " +
89
+ c.feature.padEnd(18) +
90
+ cur.padEnd(10) +
91
+ base.padEnd(10) +
92
+ `${icon} ${deltaStr}`);
93
+ }
94
+ }
95
+ console.log();
96
+ const overallIcon = result.overallDelta > 0 ? "📈" : result.overallDelta < 0 ? "📉" : "➡️";
97
+ const overallStr = result.overallDelta > 0
98
+ ? `+${result.overallDelta}`
99
+ : result.overallDelta === 0
100
+ ? "="
101
+ : String(result.overallDelta);
102
+ console.log(` Overall: ${overallIcon} ${overallStr} points`);
103
+ });
104
+ // -----------------------------------------------------------------------
105
+ // baseline history
106
+ // -----------------------------------------------------------------------
107
+ cmd
108
+ .command("history")
109
+ .description("List all saved baselines")
110
+ .action(async () => {
111
+ console.log("=== Baseline History ===\n");
112
+ const baselines = listBaselines(ROOT);
113
+ if (baselines.length === 0) {
114
+ console.log(" No baselines saved yet.");
115
+ return;
116
+ }
117
+ const hasCosts = baselines.some((b) => b.totalCost !== undefined || b.graderCost !== undefined);
118
+ const costHeader = hasCosts ? "Cost".padEnd(10) : "";
119
+ console.log(" " +
120
+ "Date".padEnd(22) +
121
+ "Avg".padEnd(6) +
122
+ "Areas".padEnd(7) +
123
+ costHeader +
124
+ "Tag");
125
+ console.log(" " + "-".repeat(hasCosts ? 60 : 50));
126
+ for (const b of baselines) {
127
+ const date = new Date(b.timestamp).toLocaleString();
128
+ const combinedCost = (b.totalCost ?? 0) + (b.graderCost ?? 0);
129
+ const costStr = hasCosts
130
+ ? (combinedCost > 0 ? `$${combinedCost.toFixed(2)}` : "-").padEnd(10)
131
+ : "";
132
+ console.log(" " +
133
+ date.padEnd(22) +
134
+ String(b.avgScore).padEnd(6) +
135
+ String(b.areaCount).padEnd(7) +
136
+ costStr +
137
+ (b.tag ?? ""));
138
+ }
139
+ });
140
+ return cmd;
141
+ }
@@ -0,0 +1,13 @@
1
+ /**
2
+ * cache command — manage the local pipeline cache.
3
+ *
4
+ * Subcommands:
5
+ * cache clear Delete all local cache manifests (results/cache/).
6
+ * cache status Show current cache entries and their ages.
7
+ *
8
+ * Note: This only affects the local file-system cache used to skip unchanged
9
+ * pipeline steps. It does NOT touch the remote Content Lake eval cache.
10
+ * Use --no-remote-cache on pipeline commands to bypass the remote cache.
11
+ */
12
+ import { Command } from "commander";
13
+ export declare function createCacheCommand(): Command;
@@ -0,0 +1,135 @@
1
+ /**
2
+ * cache command — manage the local pipeline cache.
3
+ *
4
+ * Subcommands:
5
+ * cache clear Delete all local cache manifests (results/cache/).
6
+ * cache status Show current cache entries and their ages.
7
+ *
8
+ * Note: This only affects the local file-system cache used to skip unchanged
9
+ * pipeline steps. It does NOT touch the remote Content Lake eval cache.
10
+ * Use --no-remote-cache on pipeline commands to bypass the remote cache.
11
+ */
12
+ import { Command } from "commander";
13
+ import { existsSync, readdirSync, readFileSync, rmSync, statSync } from "fs";
14
+ import { dirname, join, resolve } from "path";
15
+ import { fileURLToPath } from "url";
16
+ const __dirname = dirname(fileURLToPath(import.meta.url));
17
+ const ROOT = resolve(__dirname, "..", "..");
18
+ const CACHE_DIR = resolve(ROOT, "results", "cache");
19
+ export function createCacheCommand() {
20
+ const cmd = new Command("cache").description("Manage the local pipeline cache (does not affect the remote Content Lake cache)");
21
+ // -----------------------------------------------------------------------
22
+ // cache clear
23
+ // -----------------------------------------------------------------------
24
+ cmd
25
+ .command("clear")
26
+ .description("Delete all local cache manifests so every pipeline step re-executes")
27
+ .action(() => {
28
+ if (!existsSync(CACHE_DIR)) {
29
+ console.log(" ℹ️ No local cache directory found — nothing to clear.");
30
+ return;
31
+ }
32
+ const files = readdirSync(CACHE_DIR).filter((f) => f.endsWith(".json"));
33
+ if (files.length === 0) {
34
+ console.log(" ℹ️ Local cache directory is empty — nothing to clear.");
35
+ return;
36
+ }
37
+ rmSync(CACHE_DIR, { recursive: true, force: true });
38
+ console.log(` 🗑️ Cleared ${files.length} local cache manifest(s).`);
39
+ console.log(" ℹ️ Next pipeline run will re-execute all steps from scratch.");
40
+ console.log("\n Note: The remote Content Lake cache is unaffected.");
41
+ console.log(" Use --no-remote-cache on pipeline commands to bypass it.\n");
42
+ });
43
+ // -----------------------------------------------------------------------
44
+ // cache status
45
+ // -----------------------------------------------------------------------
46
+ cmd
47
+ .command("status")
48
+ .description("Show current local cache entries and their ages")
49
+ .action(() => {
50
+ if (!existsSync(CACHE_DIR)) {
51
+ console.log(" ℹ️ No local cache directory found.");
52
+ return;
53
+ }
54
+ const files = readdirSync(CACHE_DIR).filter((f) => f.endsWith(".json"));
55
+ if (files.length === 0) {
56
+ console.log(" ℹ️ Local cache directory is empty.");
57
+ return;
58
+ }
59
+ console.log("=== Local Pipeline Cache ===\n");
60
+ console.log(" " +
61
+ "Step".padEnd(22) +
62
+ "Age".padEnd(18) +
63
+ "Duration".padEnd(12) +
64
+ "Outputs");
65
+ console.log(" " + "-".repeat(65));
66
+ for (const file of files.sort()) {
67
+ const filePath = join(CACHE_DIR, file);
68
+ try {
69
+ const raw = readFileSync(filePath, "utf-8");
70
+ const manifest = JSON.parse(raw);
71
+ if (!manifest.entry) {
72
+ console.log(` ${manifest.step.padEnd(22)}(empty)`);
73
+ continue;
74
+ }
75
+ const age = formatAge(manifest.entry.timestamp);
76
+ const duration = formatDuration(manifest.entry.durationMs);
77
+ const outputs = manifest.entry.outputPaths.length;
78
+ console.log(" " +
79
+ manifest.step.padEnd(22) +
80
+ age.padEnd(18) +
81
+ duration.padEnd(12) +
82
+ `${outputs} file(s)`);
83
+ }
84
+ catch {
85
+ const step = file.replace(".json", "");
86
+ console.log(` ${step.padEnd(22)}(corrupt manifest)`);
87
+ }
88
+ }
89
+ const totalSize = files.reduce((sum, f) => {
90
+ try {
91
+ return sum + statSync(join(CACHE_DIR, f)).size;
92
+ }
93
+ catch {
94
+ return sum;
95
+ }
96
+ }, 0);
97
+ console.log();
98
+ console.log(` ${files.length} cached step(s), ${formatBytes(totalSize)} on disk`);
99
+ console.log(' Run "ailf cache clear" to remove all local cache entries.\n');
100
+ });
101
+ return cmd;
102
+ }
103
+ // ---------------------------------------------------------------------------
104
+ // Formatting helpers
105
+ // ---------------------------------------------------------------------------
106
+ function formatAge(timestamp) {
107
+ const then = new Date(timestamp).getTime();
108
+ const now = Date.now();
109
+ const diffMs = now - then;
110
+ if (Number.isNaN(then))
111
+ return "unknown";
112
+ const seconds = Math.floor(diffMs / 1_000);
113
+ const minutes = Math.floor(seconds / 60);
114
+ const hours = Math.floor(minutes / 60);
115
+ const days = Math.floor(hours / 24);
116
+ if (days > 0)
117
+ return `${days}d ${hours % 24}h ago`;
118
+ if (hours > 0)
119
+ return `${hours}h ${minutes % 60}m ago`;
120
+ if (minutes > 0)
121
+ return `${minutes}m ago`;
122
+ return "just now";
123
+ }
124
+ function formatDuration(ms) {
125
+ if (ms < 1_000)
126
+ return `${ms}ms`;
127
+ const seconds = (ms / 1_000).toFixed(1);
128
+ return `${seconds}s`;
129
+ }
130
+ function formatBytes(bytes) {
131
+ if (bytes < 1_024)
132
+ return `${bytes} B`;
133
+ const kb = (bytes / 1_024).toFixed(1);
134
+ return `${kb} KB`;
135
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * calculate-scores command — compute AI Literacy Scores from eval results.
3
+ *
4
+ * Uses the composition root to wire adapters, then calls
5
+ * calculateAndWriteScores() directly from pipeline/.
6
+ */
7
+ import { Command } from "commander";
8
+ export declare function createCalculateScoresCommand(): Command;
@@ -0,0 +1,48 @@
1
+ /**
2
+ * calculate-scores command — compute AI Literacy Scores from eval results.
3
+ *
4
+ * Uses the composition root to wire adapters, then calls
5
+ * calculateAndWriteScores() directly from pipeline/.
6
+ */
7
+ import { dirname, resolve } from "path";
8
+ import { fileURLToPath } from "url";
9
+ import { Command } from "commander";
10
+ import { createAppContext } from "../composition-root.js";
11
+ import { calculateAndWriteScores } from "../pipeline/calculate-scores.js";
12
+ const __dirname = dirname(fileURLToPath(import.meta.url));
13
+ const ROOT = resolve(__dirname, "..", "..");
14
+ export function createCalculateScoresCommand() {
15
+ return new Command("calculate-scores")
16
+ .description("Calculate AI Literacy Scores from Promptfoo evaluation results")
17
+ .option("--source <name>", "Documentation source name")
18
+ .argument("[results-path]", "Path to eval-results.json")
19
+ .action(async (resultsPath, opts) => {
20
+ try {
21
+ const ctx = createAppContext({
22
+ rootDir: ROOT,
23
+ mode: "baseline",
24
+ skipFetch: true,
25
+ skipEval: true,
26
+ compareEnabled: false,
27
+ gapAnalysisEnabled: false,
28
+ readinessEnabled: false,
29
+ discoveryReportEnabled: false,
30
+ publishEnabled: false,
31
+ noCache: true,
32
+ noRemoteCache: true,
33
+ searchMode: "open",
34
+ source: opts.source,
35
+ });
36
+ calculateAndWriteScores({
37
+ resultsPath,
38
+ rootDir: ctx.config.rootDir,
39
+ source: opts.source,
40
+ });
41
+ }
42
+ catch (err) {
43
+ process.exitCode = 1;
44
+ if (err instanceof Error)
45
+ console.error(err.message);
46
+ }
47
+ });
48
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * compare command — structured comparison between two evaluation runs.
3
+ *
4
+ * Wraps the existing compare pipeline logic and formatting utilities
5
+ * in a Commander.js command for consistent CLI integration.
6
+ */
7
+ import { Command } from "commander";
8
+ export declare function createCompareCommand(): Command;
@@ -0,0 +1,120 @@
1
+ /**
2
+ * compare command — structured comparison between two evaluation runs.
3
+ *
4
+ * Wraps the existing compare pipeline logic and formatting utilities
5
+ * in a Commander.js command for consistent CLI integration.
6
+ */
7
+ import { existsSync, readFileSync, readdirSync, writeFileSync } from "fs";
8
+ import { dirname, join, resolve } from "path";
9
+ import { fileURLToPath } from "url";
10
+ import { Command } from "commander";
11
+ import { compare } from "../pipeline/compare.js";
12
+ import { DEFAULT_NOISE_THRESHOLD, } from "../pipeline/types.js";
13
+ import { formatComparisonTable } from "../_vendor/ailf-core/index.js";
14
+ const __dirname = dirname(fileURLToPath(import.meta.url));
15
+ const ROOT = resolve(__dirname, "..", "..");
16
+ const BASELINES_DIR = join(ROOT, "results", "baselines");
17
+ const SCORE_SUMMARY_PATH = join(ROOT, "results", "latest", "score-summary.json");
18
+ // ---------------------------------------------------------------------------
19
+ // Helpers
20
+ // ---------------------------------------------------------------------------
21
+ export function createCompareCommand() {
22
+ return new Command("compare")
23
+ .description("Compare two evaluation score summaries")
24
+ .option("-b, --baseline <path>", "Baseline score-summary.json (default: latest baseline)")
25
+ .option("-e, --experiment <path>", "Experiment score-summary.json (default: results/latest/score-summary.json)")
26
+ .option("-t, --threshold <n>", "Noise threshold for unchanged classification", parseFloat)
27
+ .option("-o, --output <path>", "Write JSON report to file")
28
+ .option("-f, --format <fmt>", "Output format: table or json", "table")
29
+ .action(async (opts) => {
30
+ const threshold = opts.threshold ?? DEFAULT_NOISE_THRESHOLD;
31
+ // Resolve experiment path
32
+ const expPath = opts.experiment
33
+ ? resolve(opts.experiment)
34
+ : SCORE_SUMMARY_PATH;
35
+ const experiment = loadSummary(expPath);
36
+ // Resolve baseline path
37
+ let basePath;
38
+ if (opts.baseline) {
39
+ basePath = resolve(opts.baseline);
40
+ }
41
+ else {
42
+ const latest = findLatestBaseline();
43
+ if (!latest) {
44
+ console.error("❌ No baselines found. Run 'pnpm baseline:save' first, or use --baseline <path>.");
45
+ process.exit(1);
46
+ }
47
+ basePath = latest;
48
+ }
49
+ const baseline = loadSummary(basePath);
50
+ // Try to load grader consistency data for empirical thresholds
51
+ const consistencyPath = join(ROOT, "results", "latest", "grader-consistency.json");
52
+ let graderConsistency;
53
+ if (existsSync(consistencyPath) && opts.threshold === undefined) {
54
+ try {
55
+ const consistencyRaw = JSON.parse(readFileSync(consistencyPath, "utf-8"));
56
+ if (consistencyRaw.recommendedThreshold &&
57
+ consistencyRaw.perDimension) {
58
+ graderConsistency =
59
+ consistencyRaw;
60
+ console.log(` 📊 Using empirical noise threshold: ±${graderConsistency.recommendedThreshold.toFixed(1)} (from grader consistency data)`);
61
+ }
62
+ }
63
+ catch {
64
+ // Non-fatal — fall back to default threshold
65
+ }
66
+ }
67
+ console.log(` Baseline: ${basePath}`);
68
+ console.log(` Experiment: ${expPath}`);
69
+ if (!graderConsistency) {
70
+ console.log(` Threshold: ±${threshold} (default — run --grader-replications for empirical threshold)`);
71
+ }
72
+ console.log("");
73
+ const report = compare(baseline, experiment, {
74
+ graderConsistency,
75
+ noiseThreshold: threshold,
76
+ });
77
+ if (opts.format === "json") {
78
+ const json = JSON.stringify(report, null, 2);
79
+ if (opts.output) {
80
+ writeFileSync(opts.output, json);
81
+ console.log(` ✅ Comparison report written to ${opts.output}`);
82
+ }
83
+ else {
84
+ console.log(json);
85
+ }
86
+ }
87
+ else {
88
+ const table = formatComparisonTable(report);
89
+ console.log(table);
90
+ if (opts.output) {
91
+ const json = JSON.stringify(report, null, 2);
92
+ writeFileSync(opts.output, json);
93
+ console.log(` ✅ Comparison report also written to ${opts.output}`);
94
+ }
95
+ }
96
+ // Write comparison report to results/latest for other steps to consume
97
+ const latestComparisonPath = join(ROOT, "results", "latest", "comparison-report.json");
98
+ writeFileSync(latestComparisonPath, JSON.stringify(report, null, 2));
99
+ });
100
+ }
101
+ function findLatestBaseline() {
102
+ if (!existsSync(BASELINES_DIR))
103
+ return null;
104
+ const files = readdirSync(BASELINES_DIR)
105
+ .filter((f) => f.endsWith(".json"))
106
+ .sort()
107
+ .reverse();
108
+ return files.length > 0 ? join(BASELINES_DIR, files[0]) : null;
109
+ }
110
+ // ---------------------------------------------------------------------------
111
+ // Command factory
112
+ // ---------------------------------------------------------------------------
113
+ function loadSummary(path) {
114
+ if (!existsSync(path)) {
115
+ console.error(`❌ File not found: ${path}`);
116
+ process.exit(1);
117
+ }
118
+ const raw = readFileSync(path, "utf-8");
119
+ return JSON.parse(raw);
120
+ }
@@ -0,0 +1,18 @@
1
+ /**
2
+ * completion command — generate shell completion scripts.
3
+ *
4
+ * Walks the Commander program tree to produce completions that are
5
+ * always in sync with the actual CLI surface. Supports bash, zsh, and fish.
6
+ *
7
+ * Usage:
8
+ * ailf completion bash # print bash completion script to stdout
9
+ * ailf completion zsh # print zsh completion script to stdout
10
+ * ailf completion fish # print fish completion script to stdout
11
+ *
12
+ * Install:
13
+ * ailf completion bash >> ~/.bashrc
14
+ * ailf completion zsh >> ~/.zshrc
15
+ * ailf completion fish > ~/.config/fish/completions/ailf.fish
16
+ */
17
+ import { Command } from "commander";
18
+ export declare function createCompletionCommand(program: Command): Command;