@sanity/ailf 1.0.0 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (499) hide show
  1. package/README.md +0 -1
  2. package/canonical/grader-references/README.md +2 -2
  3. package/canonical/reference-solutions/content-lake/mutations.ts +160 -0
  4. package/canonical/reference-solutions/content-lake/realtime.ts +187 -0
  5. package/canonical/reference-solutions/image-handling/asset-pipeline.tsx +166 -0
  6. package/canonical/reference-solutions/portable-text/custom-blocks.ts +204 -0
  7. package/canonical/reference-solutions/portable-text/rendering.tsx +163 -0
  8. package/config/features.ts +1 -1
  9. package/config/models.ts +29 -12
  10. package/config/sources.ts +1 -1
  11. package/config/thresholds.ts +1 -1
  12. package/dist/_vendor/ailf-core/__tests__/comparison-formatters.test.d.ts +10 -0
  13. package/dist/_vendor/ailf-core/__tests__/comparison-formatters.test.js +185 -0
  14. package/dist/_vendor/ailf-core/artifact-capture/__tests__/noop-collector.test.d.ts +6 -0
  15. package/dist/_vendor/ailf-core/artifact-capture/__tests__/noop-collector.test.js +42 -0
  16. package/dist/_vendor/ailf-core/artifact-capture/noop-collector.d.ts +14 -0
  17. package/dist/_vendor/ailf-core/artifact-capture/noop-collector.js +25 -0
  18. package/dist/_vendor/ailf-core/config-helpers.d.ts +20 -17
  19. package/dist/_vendor/ailf-core/config-helpers.js +51 -2
  20. package/dist/_vendor/ailf-core/examples/index.d.ts +166 -80
  21. package/dist/_vendor/ailf-core/examples/index.js +213 -94
  22. package/dist/_vendor/ailf-core/index.d.ts +3 -2
  23. package/dist/_vendor/ailf-core/index.js +2 -1
  24. package/dist/_vendor/ailf-core/ports/artifact-collector.d.ts +94 -0
  25. package/dist/_vendor/ailf-core/ports/artifact-collector.js +13 -0
  26. package/dist/_vendor/ailf-core/ports/capture-comparator.d.ts +138 -0
  27. package/dist/_vendor/ailf-core/ports/capture-comparator.js +10 -0
  28. package/dist/_vendor/ailf-core/ports/context.d.ts +22 -1
  29. package/dist/_vendor/ailf-core/ports/eval-runner.d.ts +6 -0
  30. package/dist/_vendor/ailf-core/ports/index.d.ts +2 -0
  31. package/dist/_vendor/ailf-core/ports/pipeline-step.d.ts +11 -0
  32. package/dist/_vendor/ailf-core/ports/task-source.d.ts +3 -3
  33. package/dist/_vendor/ailf-core/ports/task-source.js +3 -3
  34. package/dist/_vendor/ailf-core/schemas/eval-config.d.ts +1 -0
  35. package/dist/_vendor/ailf-core/schemas/eval-config.js +10 -0
  36. package/dist/_vendor/ailf-core/schemas/pipeline-request.d.ts +7 -1
  37. package/dist/_vendor/ailf-core/schemas/pipeline-request.js +16 -2
  38. package/dist/_vendor/ailf-core/schemas/pipeline.d.ts +0 -2
  39. package/dist/_vendor/ailf-core/schemas/pipeline.js +0 -1
  40. package/dist/_vendor/ailf-core/services/config-helpers.d.ts +16 -1
  41. package/dist/_vendor/ailf-core/services/config-helpers.js +21 -0
  42. package/dist/_vendor/ailf-core/services/index.d.ts +1 -1
  43. package/dist/_vendor/ailf-core/services/index.js +1 -1
  44. package/dist/_vendor/ailf-core/services/scoring.js +9 -0
  45. package/dist/_vendor/ailf-core/types/generalized-task.d.ts +25 -1
  46. package/dist/_vendor/ailf-core/types/generalized-task.js +1 -1
  47. package/dist/_vendor/ailf-core/types/index.d.ts +48 -7
  48. package/dist/_vendor/ailf-core/types/plugin-registry.d.ts +105 -23
  49. package/dist/_vendor/ailf-core/types/plugin-registry.js +73 -20
  50. package/dist/_vendor/ailf-shared/eval-modes.d.ts +15 -0
  51. package/dist/_vendor/ailf-shared/eval-modes.js +18 -0
  52. package/dist/adapters/api-client/remediation.js +2 -2
  53. package/dist/adapters/config-sources/file-config-adapter.js +7 -1
  54. package/dist/adapters/config-sources/ts-config-loader.js +21 -13
  55. package/dist/adapters/eval-runners/promptfoo-eval-adapter.js +8 -2
  56. package/dist/adapters/index.d.ts +0 -1
  57. package/dist/adapters/index.js +0 -1
  58. package/dist/adapters/task-sources/composite-task-source.d.ts +1 -1
  59. package/dist/adapters/task-sources/composite-task-source.js +1 -1
  60. package/dist/adapters/task-sources/content-lake-task-source.d.ts +4 -6
  61. package/dist/adapters/task-sources/content-lake-task-source.js +21 -26
  62. package/dist/adapters/task-sources/index.d.ts +3 -4
  63. package/dist/adapters/task-sources/index.js +3 -4
  64. package/dist/adapters/task-sources/repo-schemas.d.ts +219 -17
  65. package/dist/adapters/task-sources/repo-schemas.js +228 -20
  66. package/dist/adapters/task-sources/repo-task-source.d.ts +14 -10
  67. package/dist/adapters/task-sources/repo-task-source.js +81 -122
  68. package/dist/adapters/task-sources/repo-trigger.d.ts +1 -1
  69. package/dist/adapters/task-sources/repo-trigger.js +1 -1
  70. package/dist/adapters/task-sources/repo-validation.d.ts +36 -5
  71. package/dist/adapters/task-sources/repo-validation.js +126 -5
  72. package/dist/adapters/task-sources/task-file-loader.d.ts +10 -7
  73. package/dist/adapters/task-sources/task-file-loader.js +21 -7
  74. package/dist/agent-observer/test-imports.d.ts +7 -0
  75. package/dist/agent-observer/test-imports.js +185 -0
  76. package/dist/artifact-capture/comparator.d.ts +22 -0
  77. package/dist/artifact-capture/comparator.js +493 -0
  78. package/dist/artifact-capture/filesystem-collector.d.ts +42 -0
  79. package/dist/artifact-capture/filesystem-collector.js +237 -0
  80. package/dist/artifact-capture/redact-artifact.d.ts +20 -0
  81. package/dist/artifact-capture/redact-artifact.js +115 -0
  82. package/dist/assertions/source-isolation.d.ts +1 -1
  83. package/dist/assertions/source-isolation.js +1 -1
  84. package/dist/cli.js +4 -0
  85. package/dist/commands/calculate-scores.js +1 -0
  86. package/dist/commands/capture-compare.d.ts +15 -0
  87. package/dist/commands/capture-compare.js +253 -0
  88. package/dist/commands/capture-list.d.ts +12 -0
  89. package/dist/commands/capture-list.js +147 -0
  90. package/dist/commands/capture.d.ts +9 -0
  91. package/dist/commands/capture.js +16 -0
  92. package/dist/commands/chronic-failures.d.ts +8 -0
  93. package/dist/commands/chronic-failures.js +33 -0
  94. package/dist/commands/coverage-audit.js +3 -1
  95. package/dist/commands/explain-handler.d.ts +1 -1
  96. package/dist/commands/explain-handler.js +37 -8
  97. package/dist/commands/fetch-docs.js +1 -0
  98. package/dist/commands/generate-configs.d.ts +3 -3
  99. package/dist/commands/generate-configs.js +20 -8
  100. package/dist/commands/init.d.ts +5 -4
  101. package/dist/commands/init.js +190 -25
  102. package/dist/commands/pipeline-action.d.ts +7 -1
  103. package/dist/commands/pipeline-action.js +43 -19
  104. package/dist/commands/pipeline.d.ts +6 -1
  105. package/dist/commands/pipeline.js +7 -2
  106. package/dist/commands/pr-comment.js +1 -0
  107. package/dist/commands/publish.js +1 -0
  108. package/dist/commands/shared/help.js +2 -2
  109. package/dist/commands/update-quality-scores.d.ts +5 -0
  110. package/dist/commands/update-quality-scores.js +20 -0
  111. package/dist/commands/validate-tasks.d.ts +2 -2
  112. package/dist/commands/validate-tasks.js +26 -15
  113. package/dist/composition-root.d.ts +15 -4
  114. package/dist/composition-root.js +100 -55
  115. package/dist/config/features.ts +23 -0
  116. package/dist/config/models.ts +100 -0
  117. package/dist/config/prompts.ts +16 -0
  118. package/dist/config/rubrics.ts +225 -0
  119. package/dist/config/schedules.ts +47 -0
  120. package/dist/config/sinks.ts +37 -0
  121. package/dist/config/sources.ts +21 -0
  122. package/dist/config/thresholds.ts +61 -0
  123. package/dist/index.d.ts +41 -0
  124. package/dist/index.js +48 -0
  125. package/dist/lib/agent-behavior-report.d.ts +8 -0
  126. package/dist/lib/agent-behavior-report.js +185 -0
  127. package/dist/lib/baseline.d.ts +19 -0
  128. package/dist/lib/baseline.js +153 -0
  129. package/dist/lib/calculate-scores.d.ts +23 -0
  130. package/dist/lib/calculate-scores.js +42 -0
  131. package/dist/lib/compare.d.ts +18 -0
  132. package/dist/lib/compare.js +170 -0
  133. package/dist/lib/coverage-audit.d.ts +4 -0
  134. package/dist/lib/coverage-audit.js +42 -0
  135. package/dist/lib/discovery-report.d.ts +13 -0
  136. package/dist/lib/discovery-report.js +57 -0
  137. package/dist/lib/fetch-docs.d.ts +30 -0
  138. package/dist/lib/fetch-docs.js +171 -0
  139. package/dist/lib/generate-configs.d.ts +25 -0
  140. package/dist/lib/generate-configs.js +42 -0
  141. package/dist/lib/grader-api.d.ts +21 -0
  142. package/dist/lib/grader-api.js +34 -0
  143. package/dist/lib/grader-compare.d.ts +19 -0
  144. package/dist/lib/grader-compare.js +91 -0
  145. package/dist/lib/grader-consistency.d.ts +27 -0
  146. package/dist/lib/grader-consistency.js +79 -0
  147. package/dist/lib/grader-sensitivity.d.ts +19 -0
  148. package/dist/lib/grader-sensitivity.js +75 -0
  149. package/dist/lib/grader-validate.d.ts +19 -0
  150. package/dist/lib/grader-validate.js +78 -0
  151. package/dist/lib/measure-retrieval.d.ts +14 -0
  152. package/dist/lib/measure-retrieval.js +71 -0
  153. package/dist/lib/pr-comment.d.ts +16 -0
  154. package/dist/lib/pr-comment.js +28 -0
  155. package/dist/lib/readiness-report.d.ts +13 -0
  156. package/dist/lib/readiness-report.js +108 -0
  157. package/dist/lib/webhook-server.d.ts +11 -0
  158. package/dist/lib/webhook-server.js +24 -0
  159. package/dist/lib/weekly-digest.d.ts +24 -0
  160. package/dist/lib/weekly-digest.js +148 -0
  161. package/dist/orchestration/build-app-context.js +13 -0
  162. package/dist/orchestration/build-step-sequence.js +4 -2
  163. package/dist/orchestration/cache-context.d.ts +23 -0
  164. package/dist/orchestration/cache-context.js +43 -0
  165. package/dist/orchestration/env-bridge.d.ts +21 -0
  166. package/dist/orchestration/env-bridge.js +66 -0
  167. package/dist/orchestration/load-pipeline-tasks.d.ts +34 -0
  168. package/dist/orchestration/load-pipeline-tasks.js +52 -0
  169. package/dist/orchestration/pipeline-orchestrator.js +75 -5
  170. package/dist/orchestration/step-runner.js +5 -1
  171. package/dist/orchestration/steps/calculate-scores-step.d.ts +1 -0
  172. package/dist/orchestration/steps/calculate-scores-step.js +13 -0
  173. package/dist/orchestration/steps/callback-step.js +10 -1
  174. package/dist/orchestration/steps/compare-step.js +6 -3
  175. package/dist/orchestration/steps/discovery-report-step.js +6 -2
  176. package/dist/orchestration/steps/fetch-docs-shell.d.ts +17 -0
  177. package/dist/orchestration/steps/fetch-docs-shell.js +30 -0
  178. package/dist/orchestration/steps/fetch-docs-step.d.ts +1 -0
  179. package/dist/orchestration/steps/fetch-docs-step.js +32 -19
  180. package/dist/orchestration/steps/gap-analysis-step.js +13 -2
  181. package/dist/orchestration/steps/generate-configs-step.d.ts +1 -0
  182. package/dist/orchestration/steps/generate-configs-step.js +77 -26
  183. package/dist/orchestration/steps/mirror-repo-tasks-step.d.ts +1 -1
  184. package/dist/orchestration/steps/mirror-repo-tasks-step.js +1 -1
  185. package/dist/orchestration/steps/publish-report-step.js +19 -0
  186. package/dist/orchestration/steps/readiness-step.js +8 -3
  187. package/dist/orchestration/steps/report-step.js +17 -4
  188. package/dist/orchestration/steps/run-eval-step.d.ts +1 -0
  189. package/dist/orchestration/steps/run-eval-step.js +51 -31
  190. package/dist/pipeline/agent-behavior-report.js +6 -0
  191. package/dist/pipeline/attribution.d.ts +1 -1
  192. package/dist/pipeline/attribution.js +1 -1
  193. package/dist/pipeline/cache.js +29 -15
  194. package/dist/pipeline/calculate-scores.d.ts +2 -0
  195. package/dist/pipeline/calculate-scores.js +70 -33
  196. package/dist/pipeline/chronic-failures.d.ts +55 -0
  197. package/dist/pipeline/chronic-failures.js +110 -0
  198. package/dist/pipeline/compiler/__tests__/agent-harness-handler.test.js +1 -1
  199. package/dist/pipeline/compiler/__tests__/knowledge-probe-handler.test.js +1 -1
  200. package/dist/pipeline/compiler/__tests__/literacy-handler.test.js +1 -1
  201. package/dist/pipeline/compiler/__tests__/mcp-server-handler.test.js +132 -62
  202. package/dist/pipeline/compiler/__tests__/promptfoo-compiler.test.js +2 -3
  203. package/dist/pipeline/compiler/__tests__/scoring-and-presets.test.js +33 -100
  204. package/dist/pipeline/compiler/__tests__/task-bridge.test.d.ts +9 -0
  205. package/dist/pipeline/compiler/__tests__/task-bridge.test.js +339 -0
  206. package/dist/pipeline/compiler/__tests__/tool-loop-openai.test.d.ts +10 -0
  207. package/dist/pipeline/compiler/__tests__/tool-loop-openai.test.js +509 -0
  208. package/dist/pipeline/compiler/assertion-mapper.d.ts +1 -1
  209. package/dist/pipeline/compiler/assertion-mapper.js +1 -1
  210. package/dist/pipeline/compiler/compiler-to-yaml.d.ts +2 -7
  211. package/dist/pipeline/compiler/compiler-to-yaml.js +2 -7
  212. package/dist/pipeline/compiler/config-loader.d.ts +14 -0
  213. package/dist/pipeline/compiler/config-loader.js +42 -2
  214. package/dist/pipeline/compiler/fixture-resolver.d.ts +1 -1
  215. package/dist/pipeline/compiler/fixture-resolver.js +1 -1
  216. package/dist/pipeline/compiler/ignore-fields.d.ts +1 -1
  217. package/dist/pipeline/compiler/ignore-fields.js +1 -1
  218. package/dist/pipeline/compiler/index.d.ts +2 -5
  219. package/dist/pipeline/compiler/index.js +2 -5
  220. package/dist/pipeline/compiler/literacy-bridge.d.ts +2 -2
  221. package/dist/pipeline/compiler/literacy-bridge.js +2 -2
  222. package/dist/pipeline/compiler/mode-bases/agent-harness.d.ts +10 -0
  223. package/dist/pipeline/compiler/mode-bases/agent-harness.js +21 -0
  224. package/dist/pipeline/compiler/mode-bases/index.d.ts +4 -0
  225. package/dist/pipeline/compiler/mode-bases/index.js +4 -0
  226. package/dist/pipeline/compiler/mode-bases/knowledge-probe.d.ts +10 -0
  227. package/dist/pipeline/compiler/mode-bases/knowledge-probe.js +22 -0
  228. package/dist/pipeline/compiler/mode-bases/literacy.d.ts +23 -0
  229. package/dist/pipeline/compiler/mode-bases/literacy.js +132 -0
  230. package/dist/pipeline/compiler/mode-bases/mcp-server.d.ts +10 -0
  231. package/dist/pipeline/compiler/mode-bases/mcp-server.js +70 -0
  232. package/dist/pipeline/compiler/mode-handlers/agent-harness/assertions.d.ts +43 -0
  233. package/dist/pipeline/compiler/mode-handlers/agent-harness/assertions.js +187 -0
  234. package/dist/pipeline/compiler/mode-handlers/agent-harness/compiler.d.ts +19 -0
  235. package/dist/pipeline/compiler/mode-handlers/agent-harness/compiler.js +138 -0
  236. package/dist/pipeline/compiler/mode-handlers/agent-harness/index.d.ts +16 -0
  237. package/dist/pipeline/compiler/mode-handlers/agent-harness/index.js +43 -0
  238. package/dist/pipeline/compiler/mode-handlers/agent-harness/prompts.d.ts +9 -0
  239. package/dist/pipeline/compiler/mode-handlers/agent-harness/prompts.js +29 -0
  240. package/dist/pipeline/compiler/mode-handlers/agent-harness/sandbox.d.ts +12 -0
  241. package/dist/pipeline/compiler/mode-handlers/agent-harness/sandbox.js +82 -0
  242. package/dist/pipeline/compiler/mode-handlers/agent-harness/tool-presets.d.ts +4 -0
  243. package/dist/pipeline/compiler/mode-handlers/agent-harness/tool-presets.js +19 -0
  244. package/dist/pipeline/compiler/mode-handlers/agent-harness/types.d.ts +49 -0
  245. package/dist/pipeline/compiler/mode-handlers/agent-harness/types.js +4 -0
  246. package/dist/pipeline/compiler/mode-handlers/agent-harness/validation.d.ts +9 -0
  247. package/dist/pipeline/compiler/mode-handlers/agent-harness/validation.js +16 -0
  248. package/dist/pipeline/compiler/mode-handlers/index.d.ts +6 -7
  249. package/dist/pipeline/compiler/mode-handlers/index.js +6 -8
  250. package/dist/pipeline/compiler/mode-handlers/knowledge-probe/assertions.d.ts +16 -0
  251. package/dist/pipeline/compiler/mode-handlers/knowledge-probe/assertions.js +61 -0
  252. package/dist/pipeline/compiler/mode-handlers/knowledge-probe/compiler.d.ts +18 -0
  253. package/dist/pipeline/compiler/mode-handlers/knowledge-probe/compiler.js +112 -0
  254. package/dist/pipeline/compiler/mode-handlers/knowledge-probe/index.d.ts +26 -0
  255. package/dist/pipeline/compiler/mode-handlers/knowledge-probe/index.js +49 -0
  256. package/dist/pipeline/compiler/mode-handlers/knowledge-probe/prompts.d.ts +9 -0
  257. package/dist/pipeline/compiler/mode-handlers/knowledge-probe/prompts.js +28 -0
  258. package/dist/pipeline/compiler/mode-handlers/knowledge-probe/types.d.ts +44 -0
  259. package/dist/pipeline/compiler/mode-handlers/knowledge-probe/types.js +4 -0
  260. package/dist/pipeline/compiler/mode-handlers/knowledge-probe/validation.d.ts +9 -0
  261. package/dist/pipeline/compiler/mode-handlers/knowledge-probe/validation.js +24 -0
  262. package/dist/pipeline/compiler/mode-handlers/literacy/assertions.d.ts +18 -0
  263. package/dist/pipeline/compiler/mode-handlers/literacy/assertions.js +118 -0
  264. package/dist/pipeline/compiler/mode-handlers/literacy/compiler.d.ts +14 -0
  265. package/dist/pipeline/compiler/mode-handlers/literacy/compiler.js +105 -0
  266. package/dist/pipeline/compiler/mode-handlers/literacy/index.d.ts +11 -0
  267. package/dist/pipeline/compiler/mode-handlers/literacy/index.js +38 -0
  268. package/dist/pipeline/compiler/mode-handlers/literacy/prompts.d.ts +9 -0
  269. package/dist/pipeline/compiler/mode-handlers/literacy/prompts.js +74 -0
  270. package/dist/pipeline/compiler/mode-handlers/literacy/types.d.ts +41 -0
  271. package/dist/pipeline/compiler/mode-handlers/literacy/types.js +4 -0
  272. package/dist/pipeline/compiler/mode-handlers/literacy/validation.d.ts +12 -0
  273. package/dist/pipeline/compiler/mode-handlers/literacy/validation.js +28 -0
  274. package/dist/pipeline/compiler/mode-handlers/mcp-assertions.js +63 -6
  275. package/dist/pipeline/compiler/mode-handlers/mcp-server/assertions.d.ts +42 -0
  276. package/dist/pipeline/compiler/mode-handlers/mcp-server/assertions.js +334 -0
  277. package/dist/pipeline/compiler/mode-handlers/mcp-server/compiler.d.ts +19 -0
  278. package/dist/pipeline/compiler/mode-handlers/mcp-server/compiler.js +100 -0
  279. package/dist/pipeline/compiler/mode-handlers/mcp-server/index.d.ts +27 -0
  280. package/dist/pipeline/compiler/mode-handlers/mcp-server/index.js +54 -0
  281. package/dist/pipeline/compiler/mode-handlers/mcp-server/prompts.d.ts +8 -0
  282. package/dist/pipeline/compiler/mode-handlers/mcp-server/prompts.js +28 -0
  283. package/dist/pipeline/compiler/mode-handlers/mcp-server/provider-config.d.ts +28 -0
  284. package/dist/pipeline/compiler/mode-handlers/mcp-server/provider-config.js +108 -0
  285. package/dist/pipeline/compiler/mode-handlers/mcp-server/types.d.ts +37 -0
  286. package/dist/pipeline/compiler/mode-handlers/mcp-server/types.js +4 -0
  287. package/dist/pipeline/compiler/mode-handlers/mcp-server/validation.d.ts +9 -0
  288. package/dist/pipeline/compiler/mode-handlers/mcp-server/validation.js +43 -0
  289. package/dist/pipeline/compiler/mode-handlers/mcp-server-handler.d.ts +3 -1
  290. package/dist/pipeline/compiler/mode-handlers/mcp-server-handler.js +65 -67
  291. package/dist/pipeline/compiler/mode-handlers/mcp-tool-provider/index.d.ts +33 -0
  292. package/dist/pipeline/compiler/mode-handlers/mcp-tool-provider/index.js +191 -0
  293. package/dist/pipeline/compiler/mode-handlers/mcp-tool-provider/mcp-connection.d.ts +19 -0
  294. package/dist/pipeline/compiler/mode-handlers/mcp-tool-provider/mcp-connection.js +101 -0
  295. package/dist/pipeline/compiler/mode-handlers/mcp-tool-provider/tool-loop-anthropic.d.ts +19 -0
  296. package/dist/pipeline/compiler/mode-handlers/mcp-tool-provider/tool-loop-anthropic.js +172 -0
  297. package/dist/pipeline/compiler/mode-handlers/mcp-tool-provider/tool-loop-openai.d.ts +19 -0
  298. package/dist/pipeline/compiler/mode-handlers/mcp-tool-provider/tool-loop-openai.js +323 -0
  299. package/dist/pipeline/compiler/mode-handlers/mcp-tool-provider/types.d.ts +103 -0
  300. package/dist/pipeline/compiler/mode-handlers/mcp-tool-provider/types.js +4 -0
  301. package/dist/pipeline/compiler/mode-handlers/mcp-tool-provider.d.ts +65 -0
  302. package/dist/pipeline/compiler/mode-handlers/mcp-tool-provider.js +368 -0
  303. package/dist/pipeline/compiler/preset-loader.d.ts +22 -0
  304. package/dist/pipeline/compiler/preset-loader.js +99 -0
  305. package/dist/pipeline/compiler/presets/sanity-literacy.d.ts +7 -10
  306. package/dist/pipeline/compiler/presets/sanity-literacy.js +11 -157
  307. package/dist/pipeline/compiler/promptfoo-compiler.d.ts +1 -4
  308. package/dist/pipeline/compiler/promptfoo-compiler.js +3 -12
  309. package/dist/pipeline/compiler/provider-assembler.js +13 -7
  310. package/dist/pipeline/compiler/sandbox/docker-sandbox.d.ts +1 -1
  311. package/dist/pipeline/compiler/sandbox/docker-sandbox.js +1 -1
  312. package/dist/pipeline/compiler/sandbox/fixture-provisioner.d.ts +1 -1
  313. package/dist/pipeline/compiler/sandbox/fixture-provisioner.js +1 -1
  314. package/dist/pipeline/compiler/sandbox/git-worktree-sandbox.d.ts +1 -1
  315. package/dist/pipeline/compiler/sandbox/git-worktree-sandbox.js +1 -1
  316. package/dist/pipeline/compiler/sandbox/index.d.ts +1 -1
  317. package/dist/pipeline/compiler/sandbox/index.js +1 -1
  318. package/dist/pipeline/compiler/sandbox/sandbox-selector.d.ts +1 -1
  319. package/dist/pipeline/compiler/sandbox/sandbox-selector.js +1 -1
  320. package/dist/pipeline/compiler/sandbox/sandbox-strategy.d.ts +1 -1
  321. package/dist/pipeline/compiler/sandbox/sandbox-strategy.js +1 -1
  322. package/dist/pipeline/compiler/sandbox/tempdir-sandbox.d.ts +1 -1
  323. package/dist/pipeline/compiler/sandbox/tempdir-sandbox.js +1 -1
  324. package/dist/pipeline/compiler/scoring-bridge.d.ts +1 -1
  325. package/dist/pipeline/compiler/scoring-bridge.js +1 -1
  326. package/dist/pipeline/compiler/task-bridge.d.ts +41 -0
  327. package/dist/pipeline/compiler/task-bridge.js +92 -0
  328. package/dist/pipeline/compiler/task-graph-builder.d.ts +1 -4
  329. package/dist/pipeline/compiler/task-graph-builder.js +1 -4
  330. package/dist/pipeline/compiler/telemetry/index.d.ts +1 -1
  331. package/dist/pipeline/compiler/telemetry/index.js +1 -1
  332. package/dist/pipeline/compiler/variable-resolver.d.ts +1 -1
  333. package/dist/pipeline/compiler/variable-resolver.js +1 -1
  334. package/dist/pipeline/coverage-audit.d.ts +1 -1
  335. package/dist/pipeline/coverage-audit.js +1 -1
  336. package/dist/pipeline/degradations.d.ts +1 -1
  337. package/dist/pipeline/degradations.js +1 -1
  338. package/dist/pipeline/expand-tasks.d.ts +2 -2
  339. package/dist/pipeline/expand-tasks.js +2 -2
  340. package/dist/pipeline/failure-modes.d.ts +1 -1
  341. package/dist/pipeline/failure-modes.js +13 -1
  342. package/dist/pipeline/gap-analysis.d.ts +1 -1
  343. package/dist/pipeline/gap-analysis.js +3 -1
  344. package/dist/pipeline/generate-configs.d.ts +2 -2
  345. package/dist/pipeline/generate-configs.js +16 -9
  346. package/dist/pipeline/grader-compare-runner.d.ts +1 -1
  347. package/dist/pipeline/grader-compare-runner.js +7 -1
  348. package/dist/pipeline/grader-comparison.d.ts +1 -1
  349. package/dist/pipeline/grader-comparison.js +1 -1
  350. package/dist/pipeline/grader-consistency-runner.d.ts +1 -1
  351. package/dist/pipeline/grader-consistency-runner.js +7 -1
  352. package/dist/pipeline/grader-consistency.d.ts +1 -1
  353. package/dist/pipeline/grader-consistency.js +1 -1
  354. package/dist/pipeline/grader-sensitivity-runner.d.ts +1 -1
  355. package/dist/pipeline/grader-sensitivity-runner.js +1 -1
  356. package/dist/pipeline/grader-sensitivity.d.ts +1 -1
  357. package/dist/pipeline/grader-sensitivity.js +1 -1
  358. package/dist/pipeline/grader-validate-runner.d.ts +1 -1
  359. package/dist/pipeline/grader-validate-runner.js +2 -2
  360. package/dist/pipeline/grader-validation.d.ts +1 -1
  361. package/dist/pipeline/grader-validation.js +1 -1
  362. package/dist/pipeline/map-request-to-config.js +16 -2
  363. package/dist/pipeline/mirror-repo-tasks.d.ts +8 -8
  364. package/dist/pipeline/mirror-repo-tasks.js +10 -10
  365. package/dist/pipeline/plan-format.d.ts +1 -1
  366. package/dist/pipeline/plan-format.js +1 -1
  367. package/dist/pipeline/plan.d.ts +1 -1
  368. package/dist/pipeline/plan.js +68 -30
  369. package/dist/pipeline/probe.d.ts +1 -1
  370. package/dist/pipeline/probe.js +1 -1
  371. package/dist/pipeline/readiness-report.d.ts +2 -2
  372. package/dist/pipeline/readiness-report.js +2 -2
  373. package/dist/pipeline/release-classification.d.ts +1 -1
  374. package/dist/pipeline/release-classification.js +1 -1
  375. package/dist/pipeline/release-report.d.ts +1 -1
  376. package/dist/pipeline/release-report.js +1 -1
  377. package/dist/pipeline/repo-eval-comment.d.ts +1 -1
  378. package/dist/pipeline/repo-eval-comment.js +1 -1
  379. package/dist/pipeline/repo-threshold-evaluator.d.ts +1 -1
  380. package/dist/pipeline/repo-threshold-evaluator.js +1 -1
  381. package/dist/pipeline/resolve-mappings.d.ts +6 -6
  382. package/dist/pipeline/resolve-mappings.js +44 -44
  383. package/dist/pipeline/retrieval-metrics.d.ts +3 -3
  384. package/dist/pipeline/retrieval-metrics.js +28 -20
  385. package/dist/pipeline/steps/calculate-scores-step.d.ts +11 -0
  386. package/dist/pipeline/steps/calculate-scores-step.js +89 -0
  387. package/dist/pipeline/steps/compare-step.d.ts +18 -0
  388. package/dist/pipeline/steps/compare-step.js +90 -0
  389. package/dist/pipeline/steps/eval-step.d.ts +53 -0
  390. package/dist/pipeline/steps/eval-step.js +347 -0
  391. package/dist/pipeline/steps/fetch-docs-step.d.ts +11 -0
  392. package/dist/pipeline/steps/fetch-docs-step.js +84 -0
  393. package/dist/pipeline/steps/generate-configs-step.d.ts +11 -0
  394. package/dist/pipeline/steps/generate-configs-step.js +98 -0
  395. package/dist/pipeline/steps/grader-consistency-step.d.ts +21 -0
  396. package/dist/pipeline/steps/grader-consistency-step.js +74 -0
  397. package/dist/pipeline/steps/publish-report-step.d.ts +57 -0
  398. package/dist/pipeline/steps/publish-report-step.js +243 -0
  399. package/dist/pipeline/steps/report-step.d.ts +13 -0
  400. package/dist/pipeline/steps/report-step.js +56 -0
  401. package/dist/pipeline/steps/update-scores-step.d.ts +11 -0
  402. package/dist/pipeline/steps/update-scores-step.js +42 -0
  403. package/dist/pipeline/targeted-loo.d.ts +1 -1
  404. package/dist/pipeline/targeted-loo.js +1 -1
  405. package/dist/pipeline/thresholds.d.ts +1 -1
  406. package/dist/pipeline/thresholds.js +1 -1
  407. package/dist/pipeline/validate.js +13 -0
  408. package/dist/report-store.d.ts +17 -0
  409. package/dist/report-store.js +24 -0
  410. package/dist/scripts/agent-behavior-report.d.ts +19 -0
  411. package/dist/scripts/agent-behavior-report.js +315 -0
  412. package/dist/scripts/baseline.d.ts +43 -0
  413. package/dist/scripts/baseline.js +267 -0
  414. package/dist/scripts/calculate-scores.d.ts +166 -0
  415. package/dist/scripts/calculate-scores.js +1296 -0
  416. package/dist/scripts/compare.d.ts +22 -0
  417. package/dist/scripts/compare.js +334 -0
  418. package/dist/scripts/coverage-audit.d.ts +44 -0
  419. package/dist/scripts/coverage-audit.js +209 -0
  420. package/dist/scripts/debug-eval.d.ts +19 -0
  421. package/dist/scripts/debug-eval.js +73 -0
  422. package/dist/scripts/discovery-report.d.ts +58 -0
  423. package/dist/scripts/discovery-report.js +250 -0
  424. package/dist/scripts/fetch-docs.d.ts +35 -0
  425. package/dist/scripts/fetch-docs.js +472 -0
  426. package/dist/scripts/generate-configs.d.ts +66 -0
  427. package/dist/scripts/generate-configs.js +459 -0
  428. package/dist/scripts/grader-api.d.ts +27 -0
  429. package/dist/scripts/grader-api.js +206 -0
  430. package/dist/scripts/grader-compare.d.ts +22 -0
  431. package/dist/scripts/grader-compare.js +368 -0
  432. package/dist/scripts/grader-consistency.d.ts +20 -0
  433. package/dist/scripts/grader-consistency.js +313 -0
  434. package/dist/scripts/grader-sensitivity.d.ts +22 -0
  435. package/dist/scripts/grader-sensitivity.js +354 -0
  436. package/dist/scripts/grader-validate.d.ts +19 -0
  437. package/dist/scripts/grader-validate.js +267 -0
  438. package/dist/scripts/measure-retrieval.d.ts +10 -0
  439. package/dist/scripts/measure-retrieval.js +145 -0
  440. package/dist/scripts/migrate-task-mode.d.ts +1 -1
  441. package/dist/scripts/migrate-task-mode.js +1 -1
  442. package/dist/scripts/migrate-tasks-to-content-lake.d.ts +1 -1
  443. package/dist/scripts/migrate-tasks-to-content-lake.js +1 -1
  444. package/dist/scripts/pipeline.d.ts +76 -0
  445. package/dist/scripts/pipeline.js +1031 -0
  446. package/dist/scripts/pr-comment.d.ts +10 -0
  447. package/dist/scripts/pr-comment.js +510 -0
  448. package/dist/scripts/readiness-report.d.ts +88 -0
  449. package/dist/scripts/readiness-report.js +342 -0
  450. package/dist/scripts/update-quality-scores.d.ts +15 -0
  451. package/dist/scripts/update-quality-scores.js +184 -0
  452. package/dist/scripts/validate-task-sources.d.ts +1 -1
  453. package/dist/scripts/validate-task-sources.js +1 -1
  454. package/dist/scripts/validate.d.ts +13 -0
  455. package/dist/scripts/validate.js +79 -0
  456. package/dist/scripts/webhook-server.d.ts +26 -0
  457. package/dist/scripts/webhook-server.js +147 -0
  458. package/dist/scripts/weekly-digest.d.ts +24 -0
  459. package/dist/scripts/weekly-digest.js +144 -0
  460. package/dist/sinks/format-slack.d.ts +64 -0
  461. package/dist/sinks/format-slack.js +306 -0
  462. package/dist/sinks/slack-sink.d.ts +27 -0
  463. package/dist/sinks/slack-sink.js +78 -0
  464. package/dist/sinks/types.d.ts +1 -1
  465. package/dist/sinks/types.js +1 -1
  466. package/dist/sinks/webhook-sink.d.ts +19 -0
  467. package/dist/sinks/webhook-sink.js +50 -0
  468. package/dist/tasks/knowledge-probe/define-type-api.task.ts +66 -0
  469. package/dist/tasks/knowledge-probe/groq-projections.task.ts +62 -0
  470. package/dist/tasks/literacy/content-lake.task.ts +181 -0
  471. package/dist/tasks/literacy/frameworks.task.ts +129 -0
  472. package/dist/tasks/literacy/functions.task.ts +70 -0
  473. package/dist/tasks/literacy/groq.task.ts +259 -0
  474. package/dist/tasks/literacy/image-handling.task.ts +95 -0
  475. package/dist/tasks/literacy/nextjs-live.task.ts +76 -0
  476. package/dist/tasks/literacy/portable-text.task.ts +169 -0
  477. package/dist/tasks/literacy/studio-setup.task.ts +134 -0
  478. package/dist/tasks/literacy/visual-editing.task.ts +147 -0
  479. package/package.json +32 -24
  480. package/tasks/.expanded.agentic.yaml +280 -0
  481. package/tasks/.expanded.yaml +565 -0
  482. package/tasks/knowledge-probe/define-type-api.task.ts +11 -0
  483. package/tasks/knowledge-probe/groq-projections.task.ts +3 -0
  484. package/tasks/literacy/content-lake.task.ts +181 -0
  485. package/tasks/literacy/frameworks.task.ts +1 -0
  486. package/tasks/literacy/functions.task.ts +1 -0
  487. package/tasks/literacy/groq.task.ts +1 -0
  488. package/tasks/literacy/image-handling.task.ts +95 -0
  489. package/tasks/literacy/nextjs-live.task.ts +2 -1
  490. package/tasks/literacy/portable-text.task.ts +169 -0
  491. package/tasks/literacy/studio-setup.task.ts +5 -2
  492. package/tasks/literacy/visual-editing.task.ts +1 -0
  493. package/LICENSE +0 -21
  494. package/tasks/frameworks.yaml +0 -98
  495. package/tasks/functions.yaml +0 -51
  496. package/tasks/groq.yaml +0 -216
  497. package/tasks/nextjs-live.yaml +0 -62
  498. package/tasks/studio-setup.yaml +0 -111
  499. package/tasks/visual-editing.yaml +0 -120
@@ -17,7 +17,7 @@
17
17
  * ]
18
18
  * ```
19
19
  *
20
- * @see docs/exec-plans/architecture-overhaul/phase-4-agent-harness.md
20
+ * @see docs/archive/exec-plans/architecture-overhaul/phase-4-agent-harness.md
21
21
  */
22
22
  // ---------------------------------------------------------------------------
23
23
  // Public API
@@ -1,13 +1,10 @@
1
1
  /**
2
- * Config compiler — the heart of the new architecture.
2
+ * Config compiler — the heart of the compilation architecture.
3
3
  *
4
4
  * Converts task definitions from any source into a TaskGraph IR,
5
5
  * then compiles the graph into Promptfoo YAML configuration.
6
6
  *
7
- * This module coexists with the existing `generate-configs.ts` path.
8
- * Phase 7 will migrate callers to use the compiler exclusively.
9
- *
10
- * @see docs/exec-plans/architecture-overhaul/phase-2-config-compiler.md
7
+ * @see docs/archive/exec-plans/architecture-overhaul/phase-2-config-compiler.md
11
8
  */
12
9
  export { buildTaskGraph, detectCycle, type TaskGraphBuildOptions, type TaskGraphBuildResult, } from "./task-graph-builder.js";
13
10
  export { compileToPromptfoo, type CompilationResult, type CompiledPromptfooConfig, type PromptfooCompilerOptions, type PromptfooPrompt, type PromptfooProvider, type PromptfooTestCase, } from "./promptfoo-compiler.js";
@@ -1,13 +1,10 @@
1
1
  /**
2
- * Config compiler — the heart of the new architecture.
2
+ * Config compiler — the heart of the compilation architecture.
3
3
  *
4
4
  * Converts task definitions from any source into a TaskGraph IR,
5
5
  * then compiles the graph into Promptfoo YAML configuration.
6
6
  *
7
- * This module coexists with the existing `generate-configs.ts` path.
8
- * Phase 7 will migrate callers to use the compiler exclusively.
9
- *
10
- * @see docs/exec-plans/architecture-overhaul/phase-2-config-compiler.md
7
+ * @see docs/archive/exec-plans/architecture-overhaul/phase-2-config-compiler.md
11
8
  */
12
9
  // TaskGraph builder
13
10
  export { buildTaskGraph, detectCycle, } from "./task-graph-builder.js";
@@ -16,10 +16,10 @@
16
16
  * - Prompts from config/prompts are integrated
17
17
  * - TaskGraphBuilder validates the DAG, deduplicates, and orders tasks
18
18
  *
19
- * @see docs/exec-plans/architecture-overhaul/phase-7-migrate-literacy.md
19
+ * @see docs/archive/exec-plans/architecture-overhaul/phase-7-migrate-literacy.md
20
20
  */
21
21
  import type { LiteracyTaskDefinition } from "../../_vendor/ailf-core/index.d.ts";
22
- import { type LiteracyCompileResult } from "./mode-handlers/literacy-handler.js";
22
+ import { type LiteracyCompileResult } from "./mode-handlers/literacy/index.js";
23
23
  import { type LiteracyEvalSubMode } from "../normalize-mode.js";
24
24
  /** Options for compiling all literacy tasks via the new compiler */
25
25
  export interface LiteracyBridgeOptions {
@@ -16,9 +16,9 @@
16
16
  * - Prompts from config/prompts are integrated
17
17
  * - TaskGraphBuilder validates the DAG, deduplicates, and orders tasks
18
18
  *
19
- * @see docs/exec-plans/architecture-overhaul/phase-7-migrate-literacy.md
19
+ * @see docs/archive/exec-plans/architecture-overhaul/phase-7-migrate-literacy.md
20
20
  */
21
- import { compileLiteracyTask, } from "./mode-handlers/literacy-handler.js";
21
+ import { compileLiteracyTask, } from "./mode-handlers/literacy/index.js";
22
22
  import { tryLoadConfigFile } from "./config-loader.js";
23
23
  import { buildTaskGraph } from "./task-graph-builder.js";
24
24
  // ---------------------------------------------------------------------------
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Agent Harness mode base — evaluation methodology for autonomous agent testing.
3
+ *
4
+ * Tests whether an autonomous agent can complete implementation tasks
5
+ * end-to-end, including tool use, file creation, and code generation.
6
+ *
7
+ * @see docs/modes.md
8
+ */
9
+ import type { ModeBase } from "../../../_vendor/ailf-core/index.d.ts";
10
+ export declare function createAgentHarnessBase(): ModeBase;
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Agent Harness mode base — evaluation methodology for autonomous agent testing.
3
+ *
4
+ * Tests whether an autonomous agent can complete implementation tasks
5
+ * end-to-end, including tool use, file creation, and code generation.
6
+ *
7
+ * @see docs/modes.md
8
+ */
9
+ export function createAgentHarnessBase() {
10
+ return {
11
+ mode: {
12
+ id: "agent-harness",
13
+ label: "Agent Harness",
14
+ validProviderPatterns: ["^openai:", "^anthropic:", "^file://"],
15
+ rubricTemplateIds: [],
16
+ handlerModule: "./mode-handlers/agent-harness/index.js",
17
+ },
18
+ // Agent harness rubric templates and scoring profiles will be defined
19
+ // as the mode matures. The structural registration is in place.
20
+ };
21
+ }
@@ -0,0 +1,4 @@
1
+ export { createAgentHarnessBase } from "./agent-harness.js";
2
+ export { createKnowledgeProbeBase } from "./knowledge-probe.js";
3
+ export { createLiteracyModeBase } from "./literacy.js";
4
+ export { createMcpServerModeBase } from "./mcp-server.js";
@@ -0,0 +1,4 @@
1
+ export { createAgentHarnessBase } from "./agent-harness.js";
2
+ export { createKnowledgeProbeBase } from "./knowledge-probe.js";
3
+ export { createLiteracyModeBase } from "./literacy.js";
4
+ export { createMcpServerModeBase } from "./mcp-server.js";
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Knowledge Probe mode base — evaluation methodology for testing model knowledge.
3
+ *
4
+ * Tests what the model knows about a topic without providing documentation,
5
+ * establishing a baseline of model knowledge.
6
+ *
7
+ * @see docs/modes.md
8
+ */
9
+ import type { ModeBase } from "../../../_vendor/ailf-core/index.d.ts";
10
+ export declare function createKnowledgeProbeBase(): ModeBase;
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Knowledge Probe mode base — evaluation methodology for testing model knowledge.
3
+ *
4
+ * Tests what the model knows about a topic without providing documentation,
5
+ * establishing a baseline of model knowledge.
6
+ *
7
+ * @see docs/modes.md
8
+ */
9
+ export function createKnowledgeProbeBase() {
10
+ return {
11
+ mode: {
12
+ id: "knowledge-probe",
13
+ label: "Knowledge Probe",
14
+ validProviderPatterns: ["^openai:", "^anthropic:", "^file://"],
15
+ rubricTemplateIds: [],
16
+ handlerModule: "./mode-handlers/knowledge-probe/index.js",
17
+ },
18
+ // Knowledge probe uses the same rubric dimensions as literacy
19
+ // but without doc-coverage (since no docs are provided).
20
+ // Rubric templates will be inherited or defined as the mode matures.
21
+ };
22
+ }
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Literacy mode base — shared evaluation methodology for documentation literacy.
3
+ *
4
+ * Defines HOW literacy evaluations are scored (rubrics, weights, prompts),
5
+ * independently of WHAT documentation is being evaluated. Domain presets
6
+ * like `sanity-literacy` target this mode base and add their own sources,
7
+ * features, and doc fetcher.
8
+ *
9
+ * @see docs/modes.md
10
+ */
11
+ import { type ModeBase, type ModelEntry } from "../../../_vendor/ailf-core/index.d.ts";
12
+ export declare function createLiteracyModeBase(): ModeBase;
13
+ /**
14
+ * Check whether a model participates in a specific literacy variant.
15
+ *
16
+ * A model matches if:
17
+ * 1. It's enrolled in the `literacy` eval mode (or has no `modes` field)
18
+ * 2. The variant is in its resolved variant set (defaults to all variants)
19
+ *
20
+ * This is the single source of truth for literacy variant matching —
21
+ * import this instead of reimplementing the pattern.
22
+ */
23
+ export declare function modelMatchesLiteracyVariant(model: ModelEntry, variant: string): boolean;
@@ -0,0 +1,132 @@
1
+ /**
2
+ * Literacy mode base — shared evaluation methodology for documentation literacy.
3
+ *
4
+ * Defines HOW literacy evaluations are scored (rubrics, weights, prompts),
5
+ * independently of WHAT documentation is being evaluated. Domain presets
6
+ * like `sanity-literacy` target this mode base and add their own sources,
7
+ * features, and doc fetcher.
8
+ *
9
+ * @see docs/modes.md
10
+ */
11
+ import { modelMatchesMode, resolveModelVariants, } from "../../../_vendor/ailf-core/index.js";
12
+ import { LITERACY_PROMPT_TEMPLATES } from "../mode-handlers/literacy/index.js";
13
+ // ---------------------------------------------------------------------------
14
+ // Mode base factory
15
+ // ---------------------------------------------------------------------------
16
+ export function createLiteracyModeBase() {
17
+ return {
18
+ mode: {
19
+ id: "literacy",
20
+ label: "Documentation Literacy",
21
+ validProviderPatterns: ["^openai:", "^anthropic:", "^file://"],
22
+ rubricTemplateIds: [
23
+ "task-completion",
24
+ "code-correctness",
25
+ "doc-coverage",
26
+ ],
27
+ handlerModule: "./mode-handlers/literacy/index.js",
28
+ variants: [
29
+ {
30
+ id: "baseline",
31
+ label: "Standard (baseline)",
32
+ description: "Standard with-docs and without-docs evaluation prompts",
33
+ },
34
+ {
35
+ id: "observed",
36
+ label: "Observed (HTTP-instrumented)",
37
+ description: "HTTP-instrumented evaluation that records model behavior",
38
+ },
39
+ {
40
+ id: "agentic-naive",
41
+ label: "Agentic (naive)",
42
+ description: "Model uses tools to find docs with default system prompt",
43
+ },
44
+ {
45
+ id: "agentic-optimized",
46
+ label: "Agentic (optimized)",
47
+ description: "Model uses tools to find docs with optimized system prompt",
48
+ },
49
+ ],
50
+ },
51
+ rubricTemplates: [
52
+ {
53
+ id: "task-completion",
54
+ dimension: "task-completion",
55
+ header: "Score task completion from 0 to 100:",
56
+ scale: [
57
+ "0: Couldn't attempt — missing critical information",
58
+ "20: Attempted but fundamentally wrong approach",
59
+ "50: Partial implementation — major functional gaps",
60
+ "80: Mostly complete — minor issues or missing edge cases",
61
+ "100: Fully functional code — works as expected",
62
+ ],
63
+ criteriaLabel: "Must demonstrate:",
64
+ },
65
+ {
66
+ id: "code-correctness",
67
+ dimension: "code-correctness",
68
+ header: "Score code correctness from 0 to 100:",
69
+ scale: [
70
+ "0: Broken code, syntax errors, or deprecated APIs",
71
+ "30: Works but uses anti-patterns or inefficient approaches",
72
+ "50: Works but not idiomatic",
73
+ "80: Follows most best practices",
74
+ "100: Follows all best practices, idiomatic implementation",
75
+ ],
76
+ criteriaLabel: "Check for:",
77
+ },
78
+ {
79
+ id: "doc-coverage",
80
+ dimension: "doc-coverage",
81
+ header: "Score documentation coverage from 0 to 100:",
82
+ scale: [
83
+ "0: Had to hallucinate/guess most implementation details",
84
+ "30: Significant gaps — filled with assumptions",
85
+ "50: Some gaps — inferred from partial information",
86
+ "80: Minor gaps — almost everything was documented",
87
+ "100: Complete coverage — all necessary info was in docs",
88
+ ],
89
+ },
90
+ ],
91
+ scoringProfiles: {
92
+ default: {
93
+ "task-completion": 0.5,
94
+ "code-correctness": 0.25,
95
+ "doc-coverage": 0.25,
96
+ },
97
+ "output-only": {
98
+ "task-completion": 0.6,
99
+ "code-correctness": 0.4,
100
+ },
101
+ },
102
+ promptTemplates: LITERACY_PROMPT_TEMPLATES,
103
+ };
104
+ }
105
+ // ---------------------------------------------------------------------------
106
+ // Shared variant matching helper
107
+ // ---------------------------------------------------------------------------
108
+ /** Lazily initialized mode base — avoids re-creating on every call */
109
+ let _cachedBase;
110
+ function getLiteracyModeBase() {
111
+ if (!_cachedBase)
112
+ _cachedBase = createLiteracyModeBase();
113
+ return _cachedBase;
114
+ }
115
+ /**
116
+ * Check whether a model participates in a specific literacy variant.
117
+ *
118
+ * A model matches if:
119
+ * 1. It's enrolled in the `literacy` eval mode (or has no `modes` field)
120
+ * 2. The variant is in its resolved variant set (defaults to all variants)
121
+ *
122
+ * This is the single source of truth for literacy variant matching —
123
+ * import this instead of reimplementing the pattern.
124
+ */
125
+ export function modelMatchesLiteracyVariant(model, variant) {
126
+ if (!modelMatchesMode(model, "literacy"))
127
+ return false;
128
+ const variants = resolveModelVariants(model, getLiteracyModeBase());
129
+ if (!variants)
130
+ return true;
131
+ return variants.includes(variant);
132
+ }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * MCP Server mode base — evaluation methodology for MCP server tool-use testing.
3
+ *
4
+ * Defines rubric templates and scoring for evaluating how well an LLM can
5
+ * discover and use MCP server tools correctly.
6
+ *
7
+ * @see docs/modes.md
8
+ */
9
+ import type { ModeBase } from "../../../_vendor/ailf-core/index.d.ts";
10
+ export declare function createMcpServerModeBase(): ModeBase;
@@ -0,0 +1,70 @@
1
+ /**
2
+ * MCP Server mode base — evaluation methodology for MCP server tool-use testing.
3
+ *
4
+ * Defines rubric templates and scoring for evaluating how well an LLM can
5
+ * discover and use MCP server tools correctly.
6
+ *
7
+ * @see docs/modes.md
8
+ */
9
+ export function createMcpServerModeBase() {
10
+ return {
11
+ mode: {
12
+ id: "mcp-server",
13
+ label: "MCP Server Testing",
14
+ validProviderPatterns: ["^mcp:", "^file://"],
15
+ rubricTemplateIds: [
16
+ "mcp-input-validation",
17
+ "mcp-output-correctness",
18
+ "mcp-error-handling",
19
+ ],
20
+ handlerModule: "./mode-handlers/mcp-server/index.js",
21
+ },
22
+ rubricTemplates: [
23
+ {
24
+ id: "mcp-input-validation",
25
+ dimension: "mcp-input-validation",
26
+ header: "Score MCP input validation from 0 to 100:",
27
+ scale: [
28
+ "0: Tool called with completely wrong parameters",
29
+ "30: Some parameters correct but critical ones missing or wrong",
30
+ "50: Parameters mostly correct but types or formats are off",
31
+ "80: All required parameters correct, minor optional parameter issues",
32
+ "100: Perfect tool invocation with all parameters correctly formed",
33
+ ],
34
+ criteriaLabel: "Check for:",
35
+ },
36
+ {
37
+ id: "mcp-output-correctness",
38
+ dimension: "mcp-output-correctness",
39
+ header: "Score MCP output correctness from 0 to 100:",
40
+ scale: [
41
+ "0: Output is completely wrong or tool returned an error",
42
+ "30: Output partially correct but missing key data",
43
+ "50: Output correct but incomplete or improperly formatted",
44
+ "80: Output correct and well-formatted, minor issues",
45
+ "100: Output is correct, complete, and properly formatted",
46
+ ],
47
+ criteriaLabel: "Check for:",
48
+ },
49
+ {
50
+ id: "mcp-error-handling",
51
+ dimension: "mcp-error-handling",
52
+ header: "Score MCP error handling from 0 to 100:",
53
+ scale: [
54
+ "0: No error handling — crashes or returns garbage on bad input",
55
+ "30: Basic error detection but poor recovery or messaging",
56
+ "50: Errors detected and reported but not gracefully handled",
57
+ "80: Good error handling with clear messages and appropriate fallbacks",
58
+ "100: Excellent error handling — validates input, provides actionable errors, degrades gracefully",
59
+ ],
60
+ },
61
+ ],
62
+ scoringProfiles: {
63
+ default: {
64
+ "mcp-input-validation": 0.4,
65
+ "mcp-output-correctness": 0.4,
66
+ "mcp-error-handling": 0.2,
67
+ },
68
+ },
69
+ };
70
+ }
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Assertion mapping and builders for agent harness tasks.
3
+ *
4
+ * Handles agent-specific assertion types (file-exists, file-contains,
5
+ * command-succeeds, diff-matches) as well as standard pass-through
6
+ * assertion types.
7
+ */
8
+ import type { PromptfooAssertion } from "../../assertion-mapper.js";
9
+ import type { AgentHarnessCompileOptions } from "./types.js";
10
+ export declare function mapAgentAssertion(assertion: {
11
+ type: string;
12
+ [k: string]: unknown;
13
+ }, options: AgentHarnessCompileOptions | undefined, warnings: string[]): PromptfooAssertion | null;
14
+ export declare function buildFileExistsAssertion(assertion: {
15
+ type: string;
16
+ [k: string]: unknown;
17
+ }): PromptfooAssertion;
18
+ export declare function buildFileContainsAssertion(assertion: {
19
+ type: string;
20
+ [k: string]: unknown;
21
+ }): PromptfooAssertion;
22
+ /**
23
+ * SECURITY: Trusted-input boundary.
24
+ *
25
+ * The `command-succeeds` assertion executes an arbitrary shell command
26
+ * inside the sandbox's working directory. The command string comes from
27
+ * task definitions (YAML or TypeScript config files), which are authored
28
+ * by developers — not from user input or LLM output.
29
+ *
30
+ * This is intentional: the assertion is designed to verify agent output
31
+ * by running build/test commands (e.g., "npm test", "tsc --noEmit").
32
+ *
33
+ * Task definitions are the trust boundary. If you accept task definitions
34
+ * from untrusted sources, validate commands against an allowlist first.
35
+ */
36
+ export declare function buildCommandSucceedsAssertion(assertion: {
37
+ type: string;
38
+ [k: string]: unknown;
39
+ }): PromptfooAssertion;
40
+ export declare function buildDiffMatchesAssertion(assertion: {
41
+ type: string;
42
+ [k: string]: unknown;
43
+ }): PromptfooAssertion;
@@ -0,0 +1,187 @@
1
+ /**
2
+ * Assertion mapping and builders for agent harness tasks.
3
+ *
4
+ * Handles agent-specific assertion types (file-exists, file-contains,
5
+ * command-succeeds, diff-matches) as well as standard pass-through
6
+ * assertion types.
7
+ */
8
+ // ---------------------------------------------------------------------------
9
+ // Assertion mapping
10
+ // ---------------------------------------------------------------------------
11
+ export function mapAgentAssertion(assertion, options, warnings) {
12
+ switch (assertion.type) {
13
+ case "file-exists":
14
+ return buildFileExistsAssertion(assertion);
15
+ case "file-contains":
16
+ return buildFileContainsAssertion(assertion);
17
+ case "command-succeeds":
18
+ return buildCommandSucceedsAssertion(assertion);
19
+ case "diff-matches":
20
+ return buildDiffMatchesAssertion(assertion);
21
+ // Standard assertions pass through
22
+ case "contains":
23
+ case "equals":
24
+ case "regex":
25
+ case "is-json":
26
+ case "javascript":
27
+ case "python":
28
+ return {
29
+ type: assertion.type,
30
+ ...("value" in assertion ? { value: assertion.value } : {}),
31
+ ...(typeof assertion.weight === "number"
32
+ ? { weight: assertion.weight }
33
+ : {}),
34
+ };
35
+ case "llm-rubric":
36
+ return {
37
+ type: "llm-rubric",
38
+ ...("value" in assertion ? { value: assertion.value } : {}),
39
+ ...(typeof assertion.weight === "number"
40
+ ? { weight: assertion.weight }
41
+ : {}),
42
+ ...(options?.graderProvider
43
+ ? { provider: options.graderProvider }
44
+ : {}),
45
+ };
46
+ default:
47
+ warnings.push(`Agent task: unknown assertion type "${assertion.type}" — passed through`);
48
+ return {
49
+ type: assertion.type,
50
+ ...("value" in assertion ? { value: assertion.value } : {}),
51
+ };
52
+ }
53
+ }
54
+ // ---------------------------------------------------------------------------
55
+ // Agent-specific assertion builders
56
+ // ---------------------------------------------------------------------------
57
+ export function buildFileExistsAssertion(assertion) {
58
+ const filePath = String(assertion.value ?? "");
59
+ // Use JSON.stringify for all interpolated values in generated JS to
60
+ // prevent broken strings from filePaths containing quotes/backslashes
61
+ const safeFilePath = JSON.stringify(filePath);
62
+ return {
63
+ type: "javascript",
64
+ value: `// file-exists: ${filePath}\n` +
65
+ `(function() {\n` +
66
+ ` const fs = require('fs');\n` +
67
+ ` const path = require('path');\n` +
68
+ ` const workDir = path.resolve(context.vars.__workingDir || '.');\n` +
69
+ ` const target = path.resolve(workDir, ${safeFilePath});\n` +
70
+ ` if (!target.startsWith(workDir + path.sep) && target !== workDir) {\n` +
71
+ ` return { pass: false, score: 0, reason: 'Path traversal: ' + ${safeFilePath} + ' escapes sandbox' };\n` +
72
+ ` }\n` +
73
+ ` const exists = fs.existsSync(target);\n` +
74
+ ` return {\n` +
75
+ ` pass: exists,\n` +
76
+ ` score: exists ? 1 : 0,\n` +
77
+ ` reason: exists\n` +
78
+ ` ? 'File exists: ' + ${safeFilePath}\n` +
79
+ ` : 'Expected file not found: ' + ${safeFilePath},\n` +
80
+ ` };\n` +
81
+ `})()`,
82
+ ...(typeof assertion.weight === "number"
83
+ ? { weight: assertion.weight }
84
+ : {}),
85
+ };
86
+ }
87
+ export function buildFileContainsAssertion(assertion) {
88
+ const config = assertion.value;
89
+ const filePath = config?.path ?? "";
90
+ const expectedContent = config?.content ?? "";
91
+ const safeFilePath = JSON.stringify(filePath);
92
+ return {
93
+ type: "javascript",
94
+ value: `// file-contains: ${filePath}\n` +
95
+ `(function() {\n` +
96
+ ` const fs = require('fs');\n` +
97
+ ` const path = require('path');\n` +
98
+ ` const workDir = path.resolve(context.vars.__workingDir || '.');\n` +
99
+ ` const target = path.resolve(workDir, ${safeFilePath});\n` +
100
+ ` if (!target.startsWith(workDir + path.sep) && target !== workDir) {\n` +
101
+ ` return { pass: false, score: 0, reason: 'Path traversal: ' + ${safeFilePath} + ' escapes sandbox' };\n` +
102
+ ` }\n` +
103
+ ` if (!fs.existsSync(target)) {\n` +
104
+ ` return { pass: false, score: 0, reason: 'File not found: ' + ${safeFilePath} };\n` +
105
+ ` }\n` +
106
+ ` const content = fs.readFileSync(target, 'utf-8');\n` +
107
+ ` const contains = content.includes(${JSON.stringify(expectedContent)});\n` +
108
+ ` return {\n` +
109
+ ` pass: contains,\n` +
110
+ ` score: contains ? 1 : 0,\n` +
111
+ ` reason: contains\n` +
112
+ ` ? 'File contains expected content'\n` +
113
+ ` : 'File does not contain expected content',\n` +
114
+ ` };\n` +
115
+ `})()`,
116
+ ...(typeof assertion.weight === "number"
117
+ ? { weight: assertion.weight }
118
+ : {}),
119
+ };
120
+ }
121
+ /**
122
+ * SECURITY: Trusted-input boundary.
123
+ *
124
+ * The `command-succeeds` assertion executes an arbitrary shell command
125
+ * inside the sandbox's working directory. The command string comes from
126
+ * task definitions (YAML or TypeScript config files), which are authored
127
+ * by developers — not from user input or LLM output.
128
+ *
129
+ * This is intentional: the assertion is designed to verify agent output
130
+ * by running build/test commands (e.g., "npm test", "tsc --noEmit").
131
+ *
132
+ * Task definitions are the trust boundary. If you accept task definitions
133
+ * from untrusted sources, validate commands against an allowlist first.
134
+ */
135
+ export function buildCommandSucceedsAssertion(assertion) {
136
+ const command = String(assertion.value ?? "");
137
+ return {
138
+ type: "javascript",
139
+ value: `// command-succeeds: ${command}\n` +
140
+ `(function() {\n` +
141
+ ` const { execSync } = require('child_process');\n` +
142
+ ` const workDir = context.vars.__workingDir || '.';\n` +
143
+ ` try {\n` +
144
+ ` execSync(${JSON.stringify(command)}, { cwd: workDir, timeout: 30000 });\n` +
145
+ ` return { pass: true, score: 1, reason: 'Command succeeded: ' + ${JSON.stringify(command)} };\n` +
146
+ ` } catch (err) {\n` +
147
+ ` return {\n` +
148
+ ` pass: false,\n` +
149
+ ` score: 0,\n` +
150
+ ` reason: 'Command failed: ' + (err.message || err),\n` +
151
+ ` };\n` +
152
+ ` }\n` +
153
+ `})()`,
154
+ ...(typeof assertion.weight === "number"
155
+ ? { weight: assertion.weight }
156
+ : {}),
157
+ };
158
+ }
159
+ export function buildDiffMatchesAssertion(assertion) {
160
+ const expected = assertion.value;
161
+ return {
162
+ type: "javascript",
163
+ value: `// diff-matches\n` +
164
+ `(function() {\n` +
165
+ ` const { execSync } = require('child_process');\n` +
166
+ ` const workDir = context.vars.__workingDir || '.';\n` +
167
+ ` try {\n` +
168
+ ` const diff = execSync('git diff', { cwd: workDir, encoding: 'utf-8' });\n` +
169
+ ` const expected = ${JSON.stringify(expected)};\n` +
170
+ ` if (typeof expected === 'string') {\n` +
171
+ ` const contains = diff.includes(expected);\n` +
172
+ ` return {\n` +
173
+ ` pass: contains,\n` +
174
+ ` score: contains ? 1 : 0,\n` +
175
+ ` reason: contains ? 'Diff matches expected pattern' : 'Diff does not match',\n` +
176
+ ` };\n` +
177
+ ` }\n` +
178
+ ` return { pass: diff.length > 0, score: diff.length > 0 ? 1 : 0, reason: 'Diff exists' };\n` +
179
+ ` } catch (err) {\n` +
180
+ ` return { pass: false, score: 0, reason: 'Failed to get diff: ' + err.message };\n` +
181
+ ` }\n` +
182
+ `})()`,
183
+ ...(typeof assertion.weight === "number"
184
+ ? { weight: assertion.weight }
185
+ : {}),
186
+ };
187
+ }
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Agent harness task compilation — core compilation logic.
3
+ *
4
+ * Maps agent harness task definitions to Promptfoo configuration with:
5
+ * - Claude Agent SDK / OpenAI Codex SDK providers
6
+ * - Tool permission configuration (preset/allowed/disallowed)
7
+ * - Sandbox setup/teardown via Promptfoo extensions
8
+ * - Fixture provisioning into sandbox working directory
9
+ */
10
+ import type { AgentHarnessTaskDefinition } from "../../../../_vendor/ailf-core/index.d.ts";
11
+ import type { PromptfooPrompt, PromptfooProvider, PromptfooTestCase } from "../../promptfoo-compiler.js";
12
+ import type { AgentHarnessCompileOptions, AgentHarnessCompileResult } from "./types.js";
13
+ /**
14
+ * Compile an agent harness task definition into Promptfoo configuration.
15
+ */
16
+ export declare function compileAgentHarnessTask(task: AgentHarnessTaskDefinition, options?: AgentHarnessCompileOptions): AgentHarnessCompileResult;
17
+ export declare function buildAgentProvider(task: AgentHarnessTaskDefinition, _warnings: string[]): PromptfooProvider[];
18
+ export declare function buildAgentPrompts(task: AgentHarnessTaskDefinition): PromptfooPrompt[];
19
+ export declare function buildAgentTestCases(task: AgentHarnessTaskDefinition, options: AgentHarnessCompileOptions | undefined, warnings: string[]): PromptfooTestCase[];