@sanity/ailf 2.0.0 → 2.0.2

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 (444) hide show
  1. package/canonical/grader-references/README.md +2 -2
  2. package/canonical/reference-solutions/content-lake/mutations.ts +160 -0
  3. package/canonical/reference-solutions/content-lake/realtime.ts +187 -0
  4. package/canonical/reference-solutions/image-handling/asset-pipeline.tsx +166 -0
  5. package/canonical/reference-solutions/portable-text/custom-blocks.ts +204 -0
  6. package/canonical/reference-solutions/portable-text/rendering.tsx +163 -0
  7. package/config/features.ts +1 -1
  8. package/config/models.ts +28 -23
  9. package/config/sources.ts +1 -1
  10. package/config/thresholds.ts +1 -1
  11. package/dist/_vendor/ailf-core/__tests__/comparison-formatters.test.d.ts +10 -0
  12. package/dist/_vendor/ailf-core/__tests__/comparison-formatters.test.js +185 -0
  13. package/dist/_vendor/ailf-core/artifact-capture/__tests__/noop-collector.test.d.ts +6 -0
  14. package/dist/_vendor/ailf-core/artifact-capture/__tests__/noop-collector.test.js +42 -0
  15. package/dist/_vendor/ailf-core/artifact-capture/noop-collector.d.ts +14 -0
  16. package/dist/_vendor/ailf-core/artifact-capture/noop-collector.js +25 -0
  17. package/dist/_vendor/ailf-core/config-helpers.d.ts +6 -0
  18. package/dist/_vendor/ailf-core/config-helpers.js +29 -0
  19. package/dist/_vendor/ailf-core/examples/index.d.ts +164 -94
  20. package/dist/_vendor/ailf-core/examples/index.js +208 -114
  21. package/dist/_vendor/ailf-core/index.d.ts +1 -0
  22. package/dist/_vendor/ailf-core/index.js +1 -0
  23. package/dist/_vendor/ailf-core/ports/artifact-collector.d.ts +94 -0
  24. package/dist/_vendor/ailf-core/ports/artifact-collector.js +13 -0
  25. package/dist/_vendor/ailf-core/ports/capture-comparator.d.ts +138 -0
  26. package/dist/_vendor/ailf-core/ports/capture-comparator.js +10 -0
  27. package/dist/_vendor/ailf-core/ports/context.d.ts +20 -1
  28. package/dist/_vendor/ailf-core/ports/eval-runner.d.ts +6 -0
  29. package/dist/_vendor/ailf-core/ports/index.d.ts +2 -0
  30. package/dist/_vendor/ailf-core/ports/pipeline-step.d.ts +11 -0
  31. package/dist/_vendor/ailf-core/ports/task-source.d.ts +3 -3
  32. package/dist/_vendor/ailf-core/ports/task-source.js +3 -3
  33. package/dist/_vendor/ailf-core/schemas/pipeline-request.d.ts +6 -1
  34. package/dist/_vendor/ailf-core/schemas/pipeline-request.js +14 -2
  35. package/dist/_vendor/ailf-core/services/config-helpers.d.ts +16 -1
  36. package/dist/_vendor/ailf-core/services/config-helpers.js +21 -0
  37. package/dist/_vendor/ailf-core/services/index.d.ts +1 -1
  38. package/dist/_vendor/ailf-core/services/index.js +1 -1
  39. package/dist/_vendor/ailf-core/services/scoring.js +9 -0
  40. package/dist/_vendor/ailf-core/types/generalized-task.d.ts +12 -1
  41. package/dist/_vendor/ailf-core/types/generalized-task.js +1 -1
  42. package/dist/_vendor/ailf-core/types/index.d.ts +47 -4
  43. package/dist/_vendor/ailf-core/types/plugin-registry.d.ts +27 -0
  44. package/dist/_vendor/ailf-shared/eval-modes.d.ts +15 -0
  45. package/dist/_vendor/ailf-shared/eval-modes.js +18 -0
  46. package/dist/_vendor/ailf-tasks/cli.d.ts +8 -0
  47. package/dist/_vendor/ailf-tasks/cli.js +61 -0
  48. package/dist/_vendor/ailf-tasks/index.d.ts +13 -0
  49. package/dist/_vendor/ailf-tasks/index.js +16 -0
  50. package/dist/_vendor/ailf-tasks/parser.d.ts +27 -0
  51. package/dist/_vendor/ailf-tasks/parser.js +73 -0
  52. package/dist/_vendor/ailf-tasks/schemas.d.ts +198 -0
  53. package/dist/_vendor/ailf-tasks/schemas.js +180 -0
  54. package/dist/_vendor/ailf-tasks/validation.d.ts +47 -0
  55. package/dist/_vendor/ailf-tasks/validation.js +162 -0
  56. package/dist/adapters/api-client/remediation.js +2 -2
  57. package/dist/adapters/config-sources/file-config-adapter.js +6 -1
  58. package/dist/adapters/eval-runners/promptfoo-eval-adapter.js +8 -2
  59. package/dist/adapters/index.d.ts +0 -1
  60. package/dist/adapters/index.js +0 -1
  61. package/dist/adapters/task-sources/composite-task-source.d.ts +1 -1
  62. package/dist/adapters/task-sources/composite-task-source.js +1 -1
  63. package/dist/adapters/task-sources/content-lake-task-source.d.ts +4 -6
  64. package/dist/adapters/task-sources/content-lake-task-source.js +4 -6
  65. package/dist/adapters/task-sources/index.d.ts +1 -2
  66. package/dist/adapters/task-sources/index.js +1 -2
  67. package/dist/adapters/task-sources/repo-schemas.d.ts +1 -1
  68. package/dist/adapters/task-sources/repo-schemas.js +2 -2
  69. package/dist/adapters/task-sources/repo-task-source.js +1 -1
  70. package/dist/adapters/task-sources/repo-trigger.d.ts +1 -1
  71. package/dist/adapters/task-sources/repo-trigger.js +1 -1
  72. package/dist/adapters/task-sources/task-file-loader.d.ts +9 -6
  73. package/dist/adapters/task-sources/task-file-loader.js +20 -6
  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/explain-handler.d.ts +1 -1
  95. package/dist/commands/explain-handler.js +37 -8
  96. package/dist/commands/fetch-docs.js +1 -0
  97. package/dist/commands/generate-configs.d.ts +3 -3
  98. package/dist/commands/generate-configs.js +20 -8
  99. package/dist/commands/init.d.ts +2 -3
  100. package/dist/commands/init.js +56 -170
  101. package/dist/commands/pipeline-action.d.ts +7 -1
  102. package/dist/commands/pipeline-action.js +43 -19
  103. package/dist/commands/pipeline.d.ts +6 -1
  104. package/dist/commands/pipeline.js +7 -2
  105. package/dist/commands/pr-comment.js +1 -0
  106. package/dist/commands/publish.js +1 -0
  107. package/dist/commands/shared/help.js +2 -2
  108. package/dist/commands/update-quality-scores.d.ts +5 -0
  109. package/dist/commands/update-quality-scores.js +20 -0
  110. package/dist/composition-root.d.ts +2 -3
  111. package/dist/composition-root.js +27 -14
  112. package/dist/config/features.ts +23 -0
  113. package/dist/config/models.ts +100 -0
  114. package/dist/config/prompts.ts +16 -0
  115. package/dist/config/rubrics.ts +225 -0
  116. package/dist/config/schedules.ts +47 -0
  117. package/dist/config/sinks.ts +37 -0
  118. package/dist/config/sources.ts +21 -0
  119. package/dist/config/thresholds.ts +61 -0
  120. package/dist/lib/agent-behavior-report.d.ts +8 -0
  121. package/dist/lib/agent-behavior-report.js +185 -0
  122. package/dist/lib/baseline.d.ts +19 -0
  123. package/dist/lib/baseline.js +153 -0
  124. package/dist/lib/calculate-scores.d.ts +23 -0
  125. package/dist/lib/calculate-scores.js +42 -0
  126. package/dist/lib/compare.d.ts +18 -0
  127. package/dist/lib/compare.js +170 -0
  128. package/dist/lib/coverage-audit.d.ts +4 -0
  129. package/dist/lib/coverage-audit.js +42 -0
  130. package/dist/lib/discovery-report.d.ts +13 -0
  131. package/dist/lib/discovery-report.js +57 -0
  132. package/dist/lib/fetch-docs.d.ts +30 -0
  133. package/dist/lib/fetch-docs.js +171 -0
  134. package/dist/lib/generate-configs.d.ts +25 -0
  135. package/dist/lib/generate-configs.js +42 -0
  136. package/dist/lib/grader-api.d.ts +21 -0
  137. package/dist/lib/grader-api.js +34 -0
  138. package/dist/lib/grader-compare.d.ts +19 -0
  139. package/dist/lib/grader-compare.js +91 -0
  140. package/dist/lib/grader-consistency.d.ts +27 -0
  141. package/dist/lib/grader-consistency.js +79 -0
  142. package/dist/lib/grader-sensitivity.d.ts +19 -0
  143. package/dist/lib/grader-sensitivity.js +75 -0
  144. package/dist/lib/grader-validate.d.ts +19 -0
  145. package/dist/lib/grader-validate.js +78 -0
  146. package/dist/lib/measure-retrieval.d.ts +14 -0
  147. package/dist/lib/measure-retrieval.js +71 -0
  148. package/dist/lib/pr-comment.d.ts +16 -0
  149. package/dist/lib/pr-comment.js +28 -0
  150. package/dist/lib/readiness-report.d.ts +13 -0
  151. package/dist/lib/readiness-report.js +108 -0
  152. package/dist/lib/webhook-server.d.ts +11 -0
  153. package/dist/lib/webhook-server.js +24 -0
  154. package/dist/lib/weekly-digest.d.ts +24 -0
  155. package/dist/lib/weekly-digest.js +148 -0
  156. package/dist/orchestration/build-app-context.js +13 -0
  157. package/dist/orchestration/cache-context.d.ts +23 -0
  158. package/dist/orchestration/cache-context.js +43 -0
  159. package/dist/orchestration/env-bridge.d.ts +21 -0
  160. package/dist/orchestration/env-bridge.js +66 -0
  161. package/dist/orchestration/load-pipeline-tasks.d.ts +34 -0
  162. package/dist/orchestration/load-pipeline-tasks.js +52 -0
  163. package/dist/orchestration/pipeline-orchestrator.js +75 -5
  164. package/dist/orchestration/step-runner.js +5 -1
  165. package/dist/orchestration/steps/calculate-scores-step.d.ts +1 -0
  166. package/dist/orchestration/steps/calculate-scores-step.js +13 -0
  167. package/dist/orchestration/steps/callback-step.js +10 -1
  168. package/dist/orchestration/steps/compare-step.js +6 -3
  169. package/dist/orchestration/steps/discovery-report-step.js +6 -2
  170. package/dist/orchestration/steps/fetch-docs-shell.d.ts +17 -0
  171. package/dist/orchestration/steps/fetch-docs-shell.js +30 -0
  172. package/dist/orchestration/steps/fetch-docs-step.d.ts +1 -0
  173. package/dist/orchestration/steps/fetch-docs-step.js +30 -16
  174. package/dist/orchestration/steps/gap-analysis-step.js +13 -2
  175. package/dist/orchestration/steps/generate-configs-step.d.ts +1 -0
  176. package/dist/orchestration/steps/generate-configs-step.js +50 -15
  177. package/dist/orchestration/steps/mirror-repo-tasks-step.d.ts +1 -1
  178. package/dist/orchestration/steps/mirror-repo-tasks-step.js +1 -1
  179. package/dist/orchestration/steps/publish-report-step.js +19 -0
  180. package/dist/orchestration/steps/readiness-step.js +8 -3
  181. package/dist/orchestration/steps/report-step.js +17 -4
  182. package/dist/orchestration/steps/run-eval-step.d.ts +1 -0
  183. package/dist/orchestration/steps/run-eval-step.js +52 -32
  184. package/dist/pipeline/agent-behavior-report.js +6 -0
  185. package/dist/pipeline/attribution.d.ts +1 -1
  186. package/dist/pipeline/attribution.js +1 -1
  187. package/dist/pipeline/cache.js +29 -15
  188. package/dist/pipeline/calculate-scores.d.ts +2 -0
  189. package/dist/pipeline/calculate-scores.js +70 -33
  190. package/dist/pipeline/checks.d.ts +8 -3
  191. package/dist/pipeline/checks.js +23 -3
  192. package/dist/pipeline/chronic-failures.d.ts +55 -0
  193. package/dist/pipeline/chronic-failures.js +110 -0
  194. package/dist/pipeline/compiler/__tests__/mcp-server-handler.test.js +33 -0
  195. package/dist/pipeline/compiler/__tests__/promptfoo-compiler.test.js +2 -3
  196. package/dist/pipeline/compiler/__tests__/task-bridge.test.d.ts +9 -0
  197. package/dist/pipeline/compiler/__tests__/task-bridge.test.js +339 -0
  198. package/dist/pipeline/compiler/__tests__/tool-loop-openai.test.d.ts +10 -0
  199. package/dist/pipeline/compiler/__tests__/tool-loop-openai.test.js +509 -0
  200. package/dist/pipeline/compiler/assertion-mapper.d.ts +1 -1
  201. package/dist/pipeline/compiler/assertion-mapper.js +1 -1
  202. package/dist/pipeline/compiler/compiler-to-yaml.d.ts +2 -7
  203. package/dist/pipeline/compiler/compiler-to-yaml.js +2 -7
  204. package/dist/pipeline/compiler/config-loader.d.ts +14 -0
  205. package/dist/pipeline/compiler/config-loader.js +42 -2
  206. package/dist/pipeline/compiler/fixture-resolver.d.ts +1 -1
  207. package/dist/pipeline/compiler/fixture-resolver.js +1 -1
  208. package/dist/pipeline/compiler/ignore-fields.d.ts +1 -1
  209. package/dist/pipeline/compiler/ignore-fields.js +1 -1
  210. package/dist/pipeline/compiler/index.d.ts +2 -5
  211. package/dist/pipeline/compiler/index.js +2 -5
  212. package/dist/pipeline/compiler/literacy-bridge.d.ts +1 -1
  213. package/dist/pipeline/compiler/literacy-bridge.js +1 -1
  214. package/dist/pipeline/compiler/mode-bases/agent-harness.d.ts +1 -1
  215. package/dist/pipeline/compiler/mode-bases/agent-harness.js +1 -1
  216. package/dist/pipeline/compiler/mode-bases/knowledge-probe.d.ts +1 -1
  217. package/dist/pipeline/compiler/mode-bases/knowledge-probe.js +1 -1
  218. package/dist/pipeline/compiler/mode-bases/literacy.d.ts +13 -2
  219. package/dist/pipeline/compiler/mode-bases/literacy.js +55 -1
  220. package/dist/pipeline/compiler/mode-bases/mcp-server.d.ts +1 -1
  221. package/dist/pipeline/compiler/mode-bases/mcp-server.js +1 -1
  222. package/dist/pipeline/compiler/mode-handlers/agent-harness/index.d.ts +1 -1
  223. package/dist/pipeline/compiler/mode-handlers/agent-harness/index.js +1 -1
  224. package/dist/pipeline/compiler/mode-handlers/agent-harness-handler.d.ts +70 -0
  225. package/dist/pipeline/compiler/mode-handlers/agent-harness-handler.js +485 -0
  226. package/dist/pipeline/compiler/mode-handlers/index.d.ts +2 -2
  227. package/dist/pipeline/compiler/mode-handlers/index.js +2 -2
  228. package/dist/pipeline/compiler/mode-handlers/knowledge-probe/index.d.ts +1 -1
  229. package/dist/pipeline/compiler/mode-handlers/knowledge-probe/index.js +1 -1
  230. package/dist/pipeline/compiler/mode-handlers/knowledge-probe-handler.d.ts +76 -0
  231. package/dist/pipeline/compiler/mode-handlers/knowledge-probe-handler.js +245 -0
  232. package/dist/pipeline/compiler/mode-handlers/literacy/index.d.ts +1 -1
  233. package/dist/pipeline/compiler/mode-handlers/literacy/index.js +1 -1
  234. package/dist/pipeline/compiler/mode-handlers/literacy-handler.d.ts +89 -0
  235. package/dist/pipeline/compiler/mode-handlers/literacy-handler.js +379 -0
  236. package/dist/pipeline/compiler/mode-handlers/mcp-assertions.d.ts +50 -0
  237. package/dist/pipeline/compiler/mode-handlers/mcp-assertions.js +334 -0
  238. package/dist/pipeline/compiler/mode-handlers/mcp-server/assertions.d.ts +1 -1
  239. package/dist/pipeline/compiler/mode-handlers/mcp-server/assertions.js +1 -1
  240. package/dist/pipeline/compiler/mode-handlers/mcp-server/index.d.ts +1 -1
  241. package/dist/pipeline/compiler/mode-handlers/mcp-server/index.js +1 -1
  242. package/dist/pipeline/compiler/mode-handlers/mcp-server/provider-config.js +4 -0
  243. package/dist/pipeline/compiler/mode-handlers/mcp-server-handler.d.ts +69 -0
  244. package/dist/pipeline/compiler/mode-handlers/mcp-server-handler.js +307 -0
  245. package/dist/pipeline/compiler/mode-handlers/mcp-tool-provider/index.js +22 -5
  246. package/dist/pipeline/compiler/mode-handlers/mcp-tool-provider/mcp-connection.js +6 -0
  247. package/dist/pipeline/compiler/mode-handlers/mcp-tool-provider/tool-loop-openai.d.ts +10 -5
  248. package/dist/pipeline/compiler/mode-handlers/mcp-tool-provider/tool-loop-openai.js +314 -7
  249. package/dist/pipeline/compiler/mode-handlers/mcp-tool-provider/types.d.ts +10 -0
  250. package/dist/pipeline/compiler/mode-handlers/mcp-tool-provider.d.ts +65 -0
  251. package/dist/pipeline/compiler/mode-handlers/mcp-tool-provider.js +368 -0
  252. package/dist/pipeline/compiler/presets/sanity-literacy.d.ts +1 -1
  253. package/dist/pipeline/compiler/presets/sanity-literacy.js +1 -1
  254. package/dist/pipeline/compiler/promptfoo-compiler.d.ts +1 -4
  255. package/dist/pipeline/compiler/promptfoo-compiler.js +3 -12
  256. package/dist/pipeline/compiler/provider-assembler.js +13 -7
  257. package/dist/pipeline/compiler/sandbox/docker-sandbox.d.ts +1 -1
  258. package/dist/pipeline/compiler/sandbox/docker-sandbox.js +1 -1
  259. package/dist/pipeline/compiler/sandbox/fixture-provisioner.d.ts +1 -1
  260. package/dist/pipeline/compiler/sandbox/fixture-provisioner.js +1 -1
  261. package/dist/pipeline/compiler/sandbox/git-worktree-sandbox.d.ts +1 -1
  262. package/dist/pipeline/compiler/sandbox/git-worktree-sandbox.js +1 -1
  263. package/dist/pipeline/compiler/sandbox/index.d.ts +1 -1
  264. package/dist/pipeline/compiler/sandbox/index.js +1 -1
  265. package/dist/pipeline/compiler/sandbox/sandbox-selector.d.ts +1 -1
  266. package/dist/pipeline/compiler/sandbox/sandbox-selector.js +1 -1
  267. package/dist/pipeline/compiler/sandbox/sandbox-strategy.d.ts +1 -1
  268. package/dist/pipeline/compiler/sandbox/sandbox-strategy.js +1 -1
  269. package/dist/pipeline/compiler/sandbox/tempdir-sandbox.d.ts +1 -1
  270. package/dist/pipeline/compiler/sandbox/tempdir-sandbox.js +1 -1
  271. package/dist/pipeline/compiler/scoring-bridge.d.ts +1 -1
  272. package/dist/pipeline/compiler/scoring-bridge.js +1 -1
  273. package/dist/pipeline/compiler/task-bridge.d.ts +41 -0
  274. package/dist/pipeline/compiler/task-bridge.js +92 -0
  275. package/dist/pipeline/compiler/task-graph-builder.d.ts +1 -4
  276. package/dist/pipeline/compiler/task-graph-builder.js +1 -4
  277. package/dist/pipeline/compiler/telemetry/index.d.ts +1 -1
  278. package/dist/pipeline/compiler/telemetry/index.js +1 -1
  279. package/dist/pipeline/compiler/variable-resolver.d.ts +1 -1
  280. package/dist/pipeline/compiler/variable-resolver.js +1 -1
  281. package/dist/pipeline/coverage-audit.d.ts +1 -1
  282. package/dist/pipeline/coverage-audit.js +1 -1
  283. package/dist/pipeline/degradations.d.ts +1 -1
  284. package/dist/pipeline/degradations.js +1 -1
  285. package/dist/pipeline/failure-modes.d.ts +1 -1
  286. package/dist/pipeline/failure-modes.js +13 -1
  287. package/dist/pipeline/gap-analysis.d.ts +1 -1
  288. package/dist/pipeline/gap-analysis.js +3 -1
  289. package/dist/pipeline/generate-configs.d.ts +2 -2
  290. package/dist/pipeline/generate-configs.js +15 -8
  291. package/dist/pipeline/grader-compare-runner.d.ts +1 -1
  292. package/dist/pipeline/grader-compare-runner.js +7 -1
  293. package/dist/pipeline/grader-comparison.d.ts +1 -1
  294. package/dist/pipeline/grader-comparison.js +1 -1
  295. package/dist/pipeline/grader-consistency-runner.d.ts +1 -1
  296. package/dist/pipeline/grader-consistency-runner.js +7 -1
  297. package/dist/pipeline/grader-consistency.d.ts +1 -1
  298. package/dist/pipeline/grader-consistency.js +1 -1
  299. package/dist/pipeline/grader-sensitivity-runner.d.ts +1 -1
  300. package/dist/pipeline/grader-sensitivity-runner.js +1 -1
  301. package/dist/pipeline/grader-sensitivity.d.ts +1 -1
  302. package/dist/pipeline/grader-sensitivity.js +1 -1
  303. package/dist/pipeline/grader-validate-runner.d.ts +1 -1
  304. package/dist/pipeline/grader-validate-runner.js +2 -2
  305. package/dist/pipeline/grader-validation.d.ts +1 -1
  306. package/dist/pipeline/grader-validation.js +1 -1
  307. package/dist/pipeline/map-request-to-config.js +15 -2
  308. package/dist/pipeline/mirror-repo-tasks.d.ts +1 -1
  309. package/dist/pipeline/mirror-repo-tasks.js +1 -1
  310. package/dist/pipeline/plan-format.d.ts +1 -1
  311. package/dist/pipeline/plan-format.js +1 -1
  312. package/dist/pipeline/plan.d.ts +1 -1
  313. package/dist/pipeline/plan.js +67 -29
  314. package/dist/pipeline/probe.d.ts +1 -1
  315. package/dist/pipeline/probe.js +1 -1
  316. package/dist/pipeline/readiness-report.d.ts +2 -2
  317. package/dist/pipeline/readiness-report.js +2 -2
  318. package/dist/pipeline/release-classification.d.ts +1 -1
  319. package/dist/pipeline/release-classification.js +1 -1
  320. package/dist/pipeline/release-report.d.ts +1 -1
  321. package/dist/pipeline/release-report.js +1 -1
  322. package/dist/pipeline/repo-eval-comment.d.ts +1 -1
  323. package/dist/pipeline/repo-eval-comment.js +1 -1
  324. package/dist/pipeline/repo-threshold-evaluator.d.ts +1 -1
  325. package/dist/pipeline/repo-threshold-evaluator.js +1 -1
  326. package/dist/pipeline/resolve-mappings.d.ts +6 -6
  327. package/dist/pipeline/resolve-mappings.js +44 -44
  328. package/dist/pipeline/retrieval-metrics.d.ts +3 -3
  329. package/dist/pipeline/retrieval-metrics.js +28 -20
  330. package/dist/pipeline/steps/calculate-scores-step.d.ts +11 -0
  331. package/dist/pipeline/steps/calculate-scores-step.js +89 -0
  332. package/dist/pipeline/steps/compare-step.d.ts +18 -0
  333. package/dist/pipeline/steps/compare-step.js +90 -0
  334. package/dist/pipeline/steps/eval-step.d.ts +53 -0
  335. package/dist/pipeline/steps/eval-step.js +347 -0
  336. package/dist/pipeline/steps/fetch-docs-step.d.ts +11 -0
  337. package/dist/pipeline/steps/fetch-docs-step.js +84 -0
  338. package/dist/pipeline/steps/generate-configs-step.d.ts +11 -0
  339. package/dist/pipeline/steps/generate-configs-step.js +98 -0
  340. package/dist/pipeline/steps/grader-consistency-step.d.ts +21 -0
  341. package/dist/pipeline/steps/grader-consistency-step.js +74 -0
  342. package/dist/pipeline/steps/publish-report-step.d.ts +57 -0
  343. package/dist/pipeline/steps/publish-report-step.js +243 -0
  344. package/dist/pipeline/steps/report-step.d.ts +13 -0
  345. package/dist/pipeline/steps/report-step.js +56 -0
  346. package/dist/pipeline/steps/update-scores-step.d.ts +11 -0
  347. package/dist/pipeline/steps/update-scores-step.js +42 -0
  348. package/dist/pipeline/targeted-loo.d.ts +1 -1
  349. package/dist/pipeline/targeted-loo.js +1 -1
  350. package/dist/pipeline/thresholds.d.ts +1 -1
  351. package/dist/pipeline/thresholds.js +1 -1
  352. package/dist/pipeline/validate.js +13 -0
  353. package/dist/report-store.d.ts +17 -0
  354. package/dist/report-store.js +24 -0
  355. package/dist/scripts/agent-behavior-report.d.ts +19 -0
  356. package/dist/scripts/agent-behavior-report.js +315 -0
  357. package/dist/scripts/baseline.d.ts +43 -0
  358. package/dist/scripts/baseline.js +267 -0
  359. package/dist/scripts/calculate-scores.d.ts +166 -0
  360. package/dist/scripts/calculate-scores.js +1296 -0
  361. package/dist/scripts/compare.d.ts +22 -0
  362. package/dist/scripts/compare.js +334 -0
  363. package/dist/scripts/coverage-audit.d.ts +44 -0
  364. package/dist/scripts/coverage-audit.js +209 -0
  365. package/dist/scripts/debug-eval.d.ts +19 -0
  366. package/dist/scripts/debug-eval.js +73 -0
  367. package/dist/scripts/discovery-report.d.ts +58 -0
  368. package/dist/scripts/discovery-report.js +250 -0
  369. package/dist/scripts/fetch-docs.d.ts +35 -0
  370. package/dist/scripts/fetch-docs.js +472 -0
  371. package/dist/scripts/generate-configs.d.ts +66 -0
  372. package/dist/scripts/generate-configs.js +459 -0
  373. package/dist/scripts/grader-api.d.ts +27 -0
  374. package/dist/scripts/grader-api.js +206 -0
  375. package/dist/scripts/grader-compare.d.ts +22 -0
  376. package/dist/scripts/grader-compare.js +368 -0
  377. package/dist/scripts/grader-consistency.d.ts +20 -0
  378. package/dist/scripts/grader-consistency.js +313 -0
  379. package/dist/scripts/grader-sensitivity.d.ts +22 -0
  380. package/dist/scripts/grader-sensitivity.js +354 -0
  381. package/dist/scripts/grader-validate.d.ts +19 -0
  382. package/dist/scripts/grader-validate.js +267 -0
  383. package/dist/scripts/measure-retrieval.d.ts +10 -0
  384. package/dist/scripts/measure-retrieval.js +145 -0
  385. package/dist/scripts/migrate-task-mode.d.ts +1 -1
  386. package/dist/scripts/migrate-task-mode.js +1 -1
  387. package/dist/scripts/migrate-tasks-to-content-lake.d.ts +1 -1
  388. package/dist/scripts/migrate-tasks-to-content-lake.js +1 -1
  389. package/dist/scripts/pipeline.d.ts +76 -0
  390. package/dist/scripts/pipeline.js +1031 -0
  391. package/dist/scripts/pr-comment.d.ts +10 -0
  392. package/dist/scripts/pr-comment.js +510 -0
  393. package/dist/scripts/readiness-report.d.ts +88 -0
  394. package/dist/scripts/readiness-report.js +342 -0
  395. package/dist/scripts/update-quality-scores.d.ts +15 -0
  396. package/dist/scripts/update-quality-scores.js +184 -0
  397. package/dist/scripts/validate-task-sources.d.ts +1 -1
  398. package/dist/scripts/validate-task-sources.js +1 -1
  399. package/dist/scripts/validate.d.ts +13 -0
  400. package/dist/scripts/validate.js +79 -0
  401. package/dist/scripts/webhook-server.d.ts +26 -0
  402. package/dist/scripts/webhook-server.js +147 -0
  403. package/dist/scripts/weekly-digest.d.ts +24 -0
  404. package/dist/scripts/weekly-digest.js +144 -0
  405. package/dist/sinks/format-slack.d.ts +64 -0
  406. package/dist/sinks/format-slack.js +306 -0
  407. package/dist/sinks/slack-sink.d.ts +27 -0
  408. package/dist/sinks/slack-sink.js +78 -0
  409. package/dist/sinks/types.d.ts +1 -1
  410. package/dist/sinks/types.js +1 -1
  411. package/dist/sinks/webhook-sink.d.ts +19 -0
  412. package/dist/sinks/webhook-sink.js +50 -0
  413. package/dist/tasks/knowledge-probe/define-type-api.task.ts +66 -0
  414. package/dist/tasks/knowledge-probe/groq-projections.task.ts +62 -0
  415. package/dist/tasks/literacy/content-lake.task.ts +181 -0
  416. package/dist/tasks/literacy/frameworks.task.ts +129 -0
  417. package/dist/tasks/literacy/functions.task.ts +70 -0
  418. package/dist/tasks/literacy/groq.task.ts +259 -0
  419. package/dist/tasks/literacy/image-handling.task.ts +95 -0
  420. package/dist/tasks/literacy/nextjs-live.task.ts +76 -0
  421. package/dist/tasks/literacy/portable-text.task.ts +169 -0
  422. package/dist/tasks/literacy/studio-setup.task.ts +134 -0
  423. package/dist/tasks/literacy/visual-editing.task.ts +147 -0
  424. package/package.json +25 -25
  425. package/tasks/.expanded.agentic.yaml +280 -0
  426. package/tasks/.expanded.yaml +565 -0
  427. package/tasks/knowledge-probe/define-type-api.task.ts +11 -0
  428. package/tasks/knowledge-probe/groq-projections.task.ts +3 -0
  429. package/tasks/literacy/content-lake.task.ts +181 -0
  430. package/tasks/literacy/frameworks.task.ts +1 -0
  431. package/tasks/literacy/functions.task.ts +1 -0
  432. package/tasks/literacy/groq.task.ts +1 -0
  433. package/tasks/literacy/image-handling.task.ts +95 -0
  434. package/tasks/literacy/nextjs-live.task.ts +2 -1
  435. package/tasks/literacy/portable-text.task.ts +169 -0
  436. package/tasks/literacy/studio-setup.task.ts +5 -2
  437. package/tasks/literacy/visual-editing.task.ts +1 -0
  438. package/LICENSE +0 -21
  439. package/tasks/frameworks.yaml +0 -98
  440. package/tasks/functions.yaml +0 -51
  441. package/tasks/groq.yaml +0 -216
  442. package/tasks/nextjs-live.yaml +0 -62
  443. package/tasks/studio-setup.yaml +0 -111
  444. package/tasks/visual-editing.yaml +0 -120
@@ -0,0 +1,237 @@
1
+ /**
2
+ * FilesystemArtifactCollector — writes captured artifacts to a local directory.
3
+ *
4
+ * Accumulates artifact entries in memory during pipeline execution.
5
+ * On flush(), creates a structured directory with one subdirectory per
6
+ * step, writes all artifacts, and generates a manifest.json.
7
+ *
8
+ * Design principles:
9
+ * - capture() and captureFile() are synchronous (no I/O during step execution)
10
+ * - flush() does all I/O at pipeline end
11
+ * - Failures in capture/captureFile are swallowed (P5: non-blocking)
12
+ */
13
+ import { execFileSync } from "node:child_process";
14
+ import { copyFileSync, mkdirSync, readFileSync, rmSync, statSync, writeFileSync, } from "node:fs";
15
+ import path from "node:path";
16
+ import { redactArtifactData } from "./redact-artifact.js";
17
+ // ---------------------------------------------------------------------------
18
+ // Timestamp-prefixed capture ID (same shape as report-store.ts IDs)
19
+ // ---------------------------------------------------------------------------
20
+ function generateCaptureId() {
21
+ const now = Date.now();
22
+ const uuid = crypto.randomUUID();
23
+ const hex = now.toString(16).padStart(12, "0");
24
+ return (hex.slice(0, 8) +
25
+ "-" +
26
+ hex.slice(8, 12) +
27
+ "-7" +
28
+ uuid.slice(15, 18) +
29
+ "-" +
30
+ uuid.slice(19, 23) +
31
+ "-" +
32
+ uuid.slice(24));
33
+ }
34
+ function formatTimestamp(date) {
35
+ const y = date.getFullYear();
36
+ const m = String(date.getMonth() + 1).padStart(2, "0");
37
+ const d = String(date.getDate()).padStart(2, "0");
38
+ const h = String(date.getHours()).padStart(2, "0");
39
+ const min = String(date.getMinutes()).padStart(2, "0");
40
+ const s = String(date.getSeconds()).padStart(2, "0");
41
+ return `${y}${m}${d}-${h}${min}${s}`;
42
+ }
43
+ function detectFormat(entry) {
44
+ if (entry.filePath) {
45
+ const ext = path.extname(entry.filePath).toLowerCase();
46
+ if (ext === ".json")
47
+ return "json";
48
+ if (ext === ".md")
49
+ return "markdown";
50
+ if (ext === ".yaml" || ext === ".yml")
51
+ return "text";
52
+ return "text";
53
+ }
54
+ // In-memory data — if it's an object/array, it's JSON
55
+ if (typeof entry.data === "object" && entry.data !== null)
56
+ return "json";
57
+ return "text";
58
+ }
59
+ function fileExtension(format) {
60
+ switch (format) {
61
+ case "json":
62
+ return ".json";
63
+ case "markdown":
64
+ return ".md";
65
+ default:
66
+ return ".txt";
67
+ }
68
+ }
69
+ // ---------------------------------------------------------------------------
70
+ // Collector
71
+ // ---------------------------------------------------------------------------
72
+ export class FilesystemArtifactCollector {
73
+ enabled = true;
74
+ extrasEnabled;
75
+ entries = [];
76
+ captureId;
77
+ outputDir;
78
+ startedAt;
79
+ options;
80
+ constructor(options) {
81
+ this.options = options;
82
+ this.extrasEnabled = options.extras;
83
+ this.captureId = generateCaptureId();
84
+ this.startedAt = new Date().toISOString();
85
+ // Use the last 4 hex chars (from the random UUID portion) — the first
86
+ // chars are timestamp-derived and change too slowly to disambiguate.
87
+ const shortId = this.captureId.replace(/-/g, "").slice(-4);
88
+ const timestamp = formatTimestamp(new Date());
89
+ this.outputDir = path.join(options.captureDir, `${options.mode}-${timestamp}-${shortId}`);
90
+ }
91
+ capture(step, type, data, meta) {
92
+ try {
93
+ this.entries.push({
94
+ step,
95
+ type,
96
+ data,
97
+ meta,
98
+ capturedAt: new Date().toISOString(),
99
+ });
100
+ }
101
+ catch {
102
+ // P5: non-blocking — swallow capture errors
103
+ }
104
+ }
105
+ captureFile(step, type, filePath, meta) {
106
+ try {
107
+ this.entries.push({
108
+ step,
109
+ type,
110
+ filePath,
111
+ meta,
112
+ capturedAt: new Date().toISOString(),
113
+ });
114
+ }
115
+ catch {
116
+ // P5: non-blocking — swallow capture errors
117
+ }
118
+ }
119
+ async flush() {
120
+ const manifestEntries = [];
121
+ let totalBytes = 0;
122
+ // Create the root output directory
123
+ mkdirSync(this.outputDir, { recursive: true });
124
+ for (const entry of this.entries) {
125
+ try {
126
+ const format = detectFormat(entry);
127
+ const ext = entry.filePath
128
+ ? path.extname(entry.filePath)
129
+ : fileExtension(format);
130
+ const relativePath = path.join(entry.step, `${entry.type}${ext}`);
131
+ const absolutePath = path.join(this.outputDir, relativePath);
132
+ // Ensure step subdirectory exists
133
+ mkdirSync(path.dirname(absolutePath), { recursive: true });
134
+ // Write the artifact — JSON artifacts are redacted before persistence
135
+ let bytes;
136
+ if (entry.filePath && format === "json") {
137
+ // JSON file on disk: read → parse → redact → write
138
+ const raw = readFileSync(entry.filePath, "utf-8");
139
+ try {
140
+ const parsed = JSON.parse(raw);
141
+ const redacted = redactArtifactData(parsed);
142
+ const content = JSON.stringify(redacted, null, 2);
143
+ writeFileSync(absolutePath, content, "utf-8");
144
+ bytes = Buffer.byteLength(content, "utf-8");
145
+ }
146
+ catch {
147
+ // Unparseable JSON — copy as-is (comparator will scan it later)
148
+ copyFileSync(entry.filePath, absolutePath);
149
+ bytes = statSync(absolutePath).size;
150
+ }
151
+ }
152
+ else if (entry.filePath) {
153
+ // Non-JSON file: copy as-is
154
+ copyFileSync(entry.filePath, absolutePath);
155
+ bytes = statSync(absolutePath).size;
156
+ }
157
+ else {
158
+ let content;
159
+ if (format === "json") {
160
+ try {
161
+ content = JSON.stringify(redactArtifactData(entry.data), null, 2);
162
+ }
163
+ catch {
164
+ // Fallback: serialize unredacted (e.g., circular references)
165
+ content = JSON.stringify(entry.data, null, 2);
166
+ }
167
+ }
168
+ else {
169
+ content = String(entry.data ?? "");
170
+ }
171
+ writeFileSync(absolutePath, content, "utf-8");
172
+ bytes = Buffer.byteLength(content, "utf-8");
173
+ }
174
+ totalBytes += bytes;
175
+ manifestEntries.push({
176
+ step: entry.step,
177
+ type: entry.type,
178
+ path: relativePath,
179
+ capturedAt: entry.capturedAt,
180
+ bytes,
181
+ format,
182
+ ...(entry.meta ? { meta: entry.meta } : {}),
183
+ });
184
+ }
185
+ catch {
186
+ // P5: skip individual artifact failures, continue with the rest
187
+ }
188
+ }
189
+ // Write manifest
190
+ const manifest = {
191
+ version: 1,
192
+ captureId: this.captureId,
193
+ startedAt: this.startedAt,
194
+ completedAt: new Date().toISOString(),
195
+ pipeline: {
196
+ mode: this.options.mode,
197
+ ...(this.options.pipeline?.variant
198
+ ? { variant: this.options.pipeline.variant }
199
+ : {}),
200
+ ...(this.options.pipeline?.source
201
+ ? { source: this.options.pipeline.source }
202
+ : {}),
203
+ ...(this.options.pipeline?.areas
204
+ ? { areas: this.options.pipeline.areas }
205
+ : {}),
206
+ },
207
+ artifacts: manifestEntries,
208
+ };
209
+ const manifestContent = JSON.stringify(manifest, null, 2);
210
+ writeFileSync(path.join(this.outputDir, "manifest.json"), manifestContent, "utf-8");
211
+ // Compress to tar.gz if configured
212
+ if (this.options.compress) {
213
+ try {
214
+ const archivePath = `${this.outputDir}.tar.gz`;
215
+ const parentDir = path.dirname(this.outputDir);
216
+ const dirName = path.basename(this.outputDir);
217
+ execFileSync("tar", ["-czf", archivePath, "-C", parentDir, dirName]);
218
+ rmSync(this.outputDir, { recursive: true });
219
+ return {
220
+ artifactCount: manifestEntries.length,
221
+ destination: archivePath,
222
+ totalBytes,
223
+ compressed: true,
224
+ };
225
+ }
226
+ catch {
227
+ // Non-blocking: compression failed, keep the raw directory
228
+ }
229
+ }
230
+ return {
231
+ artifactCount: manifestEntries.length,
232
+ destination: this.outputDir,
233
+ totalBytes,
234
+ compressed: false,
235
+ };
236
+ }
237
+ }
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Artifact redaction — strips sensitive data from captured artifacts before
3
+ * they are written to disk.
4
+ *
5
+ * Applied during FilesystemArtifactCollector.flush() so that secrets
6
+ * (resolved env vars, auth headers, session cookies) never reach storage.
7
+ *
8
+ * Two-layer approach:
9
+ * 1. **Header stripping** — known-sensitive HTTP header keys are replaced
10
+ * with "[REDACTED]" regardless of value.
11
+ * 2. **Value-pattern redaction** — string values anywhere in the JSON tree
12
+ * that match known secret formats are replaced with "[REDACTED]".
13
+ */
14
+ /**
15
+ * Deep-clone and redact a parsed JSON artifact.
16
+ *
17
+ * Safe to call on any artifact format — non-object inputs are returned
18
+ * as-is (nothing to redact in a plain string or number).
19
+ */
20
+ export declare function redactArtifactData(data: unknown): unknown;
@@ -0,0 +1,115 @@
1
+ /**
2
+ * Artifact redaction — strips sensitive data from captured artifacts before
3
+ * they are written to disk.
4
+ *
5
+ * Applied during FilesystemArtifactCollector.flush() so that secrets
6
+ * (resolved env vars, auth headers, session cookies) never reach storage.
7
+ *
8
+ * Two-layer approach:
9
+ * 1. **Header stripping** — known-sensitive HTTP header keys are replaced
10
+ * with "[REDACTED]" regardless of value.
11
+ * 2. **Value-pattern redaction** — string values anywhere in the JSON tree
12
+ * that match known secret formats are replaced with "[REDACTED]".
13
+ */
14
+ // ---------------------------------------------------------------------------
15
+ // Sensitive HTTP header keys (case-insensitive)
16
+ // ---------------------------------------------------------------------------
17
+ /**
18
+ * HTTP headers that should always be redacted in captured artifacts.
19
+ *
20
+ * Stored lower-cased; lookup is done after lower-casing the key. This is
21
+ * intentionally a blocklist rather than an allowlist so that debugging-useful
22
+ * headers (x-request-id, content-type, etc.) are preserved.
23
+ */
24
+ const SENSITIVE_HEADER_KEYS = new Set([
25
+ "authorization",
26
+ "proxy-authorization",
27
+ "cookie",
28
+ "set-cookie",
29
+ "x-api-key",
30
+ "x-auth-token",
31
+ ]);
32
+ // ---------------------------------------------------------------------------
33
+ // Secret value patterns (same family as comparator + telemetry redactor)
34
+ // ---------------------------------------------------------------------------
35
+ const SECRET_VALUE_PATTERNS = [
36
+ /^Bearer\s+\S{20,}/, // Authorization header values
37
+ /^Basic\s+[A-Za-z0-9+/=]{20,}/, // Basic auth
38
+ /^sk-[a-zA-Z0-9_-]{20,}/, // OpenAI-style keys
39
+ /^sk[A-Z][a-zA-Z0-9]{20,}/, // Sanity-style tokens
40
+ /^sk-ant-[a-zA-Z0-9_-]{20,}/, // Anthropic keys
41
+ /^xoxb-/, // Slack bot tokens
42
+ /^ghp_/, // GitHub personal tokens
43
+ /^ghs_/, // GitHub server-to-server tokens
44
+ /^AKIA[A-Z0-9]{12,}/, // AWS access keys
45
+ ];
46
+ const REDACTED = "[REDACTED]";
47
+ // ---------------------------------------------------------------------------
48
+ // Public API
49
+ // ---------------------------------------------------------------------------
50
+ /**
51
+ * Deep-clone and redact a parsed JSON artifact.
52
+ *
53
+ * Safe to call on any artifact format — non-object inputs are returned
54
+ * as-is (nothing to redact in a plain string or number).
55
+ */
56
+ export function redactArtifactData(data) {
57
+ if (data === null || data === undefined)
58
+ return data;
59
+ if (typeof data !== "object") {
60
+ // Scalar — check value patterns
61
+ if (typeof data === "string")
62
+ return redactStringValue(data);
63
+ return data;
64
+ }
65
+ // Deep-clone first so we never mutate the original
66
+ return walkAndRedact(JSON.parse(JSON.stringify(data)));
67
+ }
68
+ // ---------------------------------------------------------------------------
69
+ // Internals
70
+ // ---------------------------------------------------------------------------
71
+ function redactStringValue(value) {
72
+ for (const pattern of SECRET_VALUE_PATTERNS) {
73
+ if (pattern.test(value))
74
+ return REDACTED;
75
+ }
76
+ return value;
77
+ }
78
+ /** Returns true if the key is a known-sensitive HTTP header name. */
79
+ function isSensitiveHeaderKey(key) {
80
+ return SENSITIVE_HEADER_KEYS.has(key.toLowerCase());
81
+ }
82
+ function walkAndRedact(node) {
83
+ if (node === null || node === undefined)
84
+ return node;
85
+ if (typeof node === "string") {
86
+ return redactStringValue(node);
87
+ }
88
+ if (Array.isArray(node)) {
89
+ for (let i = 0; i < node.length; i++) {
90
+ node[i] = walkAndRedact(node[i]);
91
+ }
92
+ return node;
93
+ }
94
+ if (typeof node === "object") {
95
+ const obj = node;
96
+ for (const key of Object.keys(obj)) {
97
+ // Layer 1: strip sensitive HTTP headers by key name
98
+ if (isSensitiveHeaderKey(key)) {
99
+ const val = obj[key];
100
+ if (typeof val === "string") {
101
+ obj[key] = REDACTED;
102
+ }
103
+ else if (Array.isArray(val)) {
104
+ // Some HTTP parsers serialize set-cookie as string[]
105
+ obj[key] = val.map((v) => (typeof v === "string" ? REDACTED : v));
106
+ }
107
+ continue;
108
+ }
109
+ // Layer 2: recurse and apply value-pattern redaction
110
+ obj[key] = walkAndRedact(obj[key]);
111
+ }
112
+ return obj;
113
+ }
114
+ return node;
115
+ }
@@ -10,7 +10,7 @@
10
10
  * The assertion has weight: 0 — it doesn't affect scores. It surfaces
11
11
  * as an advisory pass/fail signal in results.
12
12
  *
13
- * @see docs/exec-plans/source-aware-eval-isolation.md (Phase 3b)
13
+ * @see docs/archive/exec-plans/source-aware-eval-isolation.md (Phase 3b)
14
14
  */
15
15
  export interface SourceIsolationReport {
16
16
  blocked: number;
@@ -10,7 +10,7 @@
10
10
  * The assertion has weight: 0 — it doesn't affect scores. It surfaces
11
11
  * as an advisory pass/fail signal in results.
12
12
  *
13
- * @see docs/exec-plans/source-aware-eval-isolation.md (Phase 3b)
13
+ * @see docs/archive/exec-plans/source-aware-eval-isolation.md (Phase 3b)
14
14
  */
15
15
  import { isAllowedOrigin } from "../sources.js";
16
16
  /**
package/dist/cli.js CHANGED
@@ -137,6 +137,8 @@ program.addCommand(createPublishCommand().helpGroup(CommandGroup.CoreWorkflow));
137
137
  // ── Analysis & Reports ────────────────────────────────────────────────
138
138
  import { createReadinessReportCommand } from "./commands/readiness-report.js";
139
139
  program.addCommand(createReadinessReportCommand().helpGroup(CommandGroup.AnalysisReports));
140
+ import { createChronicFailuresCommand } from "./commands/chronic-failures.js";
141
+ program.addCommand(createChronicFailuresCommand().helpGroup(CommandGroup.AnalysisReports));
140
142
  import { createCoverageAuditCommand } from "./commands/coverage-audit.js";
141
143
  program.addCommand(createCoverageAuditCommand().helpGroup(CommandGroup.AnalysisReports));
142
144
  import { createDiscoveryReportCommand } from "./commands/discovery-report.js";
@@ -173,6 +175,8 @@ program.addCommand(createLookupDocCommand().helpGroup(CommandGroup.PipelineInter
173
175
  import { createWebhookServerCommand } from "./commands/webhook-server.js";
174
176
  program.addCommand(createWebhookServerCommand().helpGroup(CommandGroup.PipelineInternals));
175
177
  // ── Developer Tools ───────────────────────────────────────────────────
178
+ import { createCaptureCommand } from "./commands/capture.js";
179
+ program.addCommand(createCaptureCommand().helpGroup(CommandGroup.DeveloperTools));
176
180
  import { createInteractiveCommand } from "./commands/interactive.js";
177
181
  program.addCommand(createInteractiveCommand().helpGroup(CommandGroup.DeveloperTools));
178
182
  // Shell completion — must be registered last (needs full program tree)
@@ -20,6 +20,7 @@ export function createCalculateScoresCommand() {
20
20
  try {
21
21
  const ctx = createAppContext({
22
22
  rootDir: ROOT,
23
+ outputDir: resolve(ROOT, "results", "latest"),
23
24
  mode: "literacy",
24
25
  noAutoScope: false,
25
26
  skipFetch: true,
@@ -0,0 +1,15 @@
1
+ /**
2
+ * capture compare — compare two pipeline capture directories.
3
+ *
4
+ * Reads manifest.json from both captures, runs compareCaptures(),
5
+ * and prints a human-readable table or JSON diff report.
6
+ *
7
+ * Supports both raw directories and .tar.gz archives.
8
+ *
9
+ * Exit codes:
10
+ * 0 — captures are equivalent
11
+ * 1 — differences found
12
+ * 2 — error (missing files, invalid manifest, etc.)
13
+ */
14
+ import { Command } from "commander";
15
+ export declare function createCaptureCompareCommand(): Command;