@hassangameryt/freeflow 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (690) hide show
  1. package/.claude-plugin/marketplace.json +4 -4
  2. package/.claude-plugin/plugin.json +5 -2
  3. package/.codex-plugin/plugin.json +8 -9
  4. package/README.md +190 -128
  5. package/assets/feedback-loop.png +0 -0
  6. package/assets/freeflow_workflow_map.png +0 -0
  7. package/assets/workflow.png +0 -0
  8. package/command-surface.json +51 -7
  9. package/hooks/freeflow-runtime-context.mjs +264 -136
  10. package/hooks/tests/check-runtime-context-hook.sh +223 -0
  11. package/package.json +23 -24
  12. package/pi-extension/dist/index.js +264 -80
  13. package/pi-extension/dist/integrations/mcp-config.js +29 -0
  14. package/pi-extension/dist/output-router/host-producer-identification.js +232 -0
  15. package/pi-extension/dist/output-router/native-safety-net.js +216 -0
  16. package/pi-extension/dist/output-router/observed-tool-routing.js +122 -0
  17. package/pi-extension/dist/output-router/renderers.js +1023 -0
  18. package/pi-extension/dist/output-router/router-tools.js +554 -0
  19. package/pi-extension/dist/output-router/schemas.js +383 -0
  20. package/pi-extension/dist/output-router/status.js +744 -0
  21. package/pi-extension/dist/output-router/utils.js +502 -0
  22. package/pi-extension/dist/runtime/runtime-context.js +798 -0
  23. package/pi-extension/dist/settings/settings-tui.js +314 -0
  24. package/pi-extension/dist/settings/settings-ui.js +1487 -0
  25. package/pi-extension/freeflow/index.js +1 -0
  26. package/pi-extension/src/index.ts +230 -56
  27. package/pi-extension/src/{host-producer-identification.ts → output-router/host-producer-identification.ts} +37 -7
  28. package/pi-extension/src/{native-safety-net.ts → output-router/native-safety-net.ts} +7 -11
  29. package/pi-extension/src/{observed-tool-routing.ts → output-router/observed-tool-routing.ts} +19 -11
  30. package/pi-extension/src/{renderers.ts → output-router/renderers.ts} +246 -55
  31. package/pi-extension/src/{router-tools.ts → output-router/router-tools.ts} +130 -29
  32. package/pi-extension/src/{schemas.ts → output-router/schemas.ts} +171 -43
  33. package/pi-extension/src/output-router/status.ts +791 -0
  34. package/pi-extension/src/{utils.ts → output-router/utils.ts} +80 -18
  35. package/pi-extension/src/runtime/runtime-context.ts +895 -0
  36. package/pi-extension/src/settings/settings-tui.ts +408 -0
  37. package/pi-extension/src/settings/settings-ui.ts +1730 -0
  38. package/pi-extension/tests/integration/pi-extension.test.js +4018 -0
  39. package/pi-extension/tests/output-router/observed-producers.test.js +132 -0
  40. package/pi-extension/tests/output-router/search.test.js +722 -0
  41. package/pi-extension/tests/settings/settings-tui.test.js +243 -0
  42. package/router/dist/benchmarks/benchmark-harness.d.ts +16 -13
  43. package/router/dist/benchmarks/benchmark-harness.js +62 -62
  44. package/router/dist/benchmarks/benchmarks.d.ts +80 -73
  45. package/router/dist/benchmarks/benchmarks.js +860 -761
  46. package/router/dist/benchmarks/codex-qa-benchmarks.d.ts +71 -67
  47. package/router/dist/benchmarks/codex-qa-benchmarks.js +429 -390
  48. package/router/dist/benchmarks/command-benchmarks.d.ts +107 -92
  49. package/router/dist/benchmarks/command-benchmarks.js +616 -571
  50. package/router/dist/benchmarks/context-mode-normalized-benchmarks.d.ts +64 -56
  51. package/router/dist/benchmarks/context-mode-normalized-benchmarks.js +679 -613
  52. package/router/dist/benchmarks/context-mode-real-deep-benchmark.d.ts +103 -95
  53. package/router/dist/benchmarks/context-mode-real-deep-benchmark.js +1188 -1103
  54. package/router/dist/benchmarks/context-saving-baseline.d.ts +47 -41
  55. package/router/dist/benchmarks/context-saving-baseline.js +405 -374
  56. package/router/dist/benchmarks/index-benchmarks.d.ts +74 -69
  57. package/router/dist/benchmarks/index-benchmarks.js +761 -661
  58. package/router/dist/benchmarks/storage-policy-benchmarks.d.ts +80 -69
  59. package/router/dist/benchmarks/storage-policy-benchmarks.js +549 -469
  60. package/router/dist/benchmarks/vault-index-benchmarks.d.ts +43 -34
  61. package/router/dist/benchmarks/vault-index-benchmarks.js +294 -229
  62. package/router/dist/config/config.d.ts +61 -54
  63. package/router/dist/config/config.js +551 -372
  64. package/router/dist/config/router-contract.d.ts +2 -2
  65. package/router/dist/config/router-contract.js +38 -38
  66. package/router/dist/config/schema.d.ts +19 -10
  67. package/router/dist/config/schema.js +586 -538
  68. package/router/dist/config/types.d.ts +413 -361
  69. package/router/dist/config/types.js +19 -8
  70. package/router/dist/evidence/bounded-evidence.d.ts +26 -26
  71. package/router/dist/evidence/bounded-evidence.js +265 -252
  72. package/router/dist/evidence/evidence-range-selector.d.ts +16 -14
  73. package/router/dist/evidence/evidence-range-selector.js +192 -191
  74. package/router/dist/evidence/evidence-search.d.ts +18 -16
  75. package/router/dist/evidence/evidence-search.js +401 -377
  76. package/router/dist/evidence/evidence.d.ts +17 -17
  77. package/router/dist/evidence/evidence.js +163 -159
  78. package/router/dist/evidence/failure-contracts.d.ts +25 -15
  79. package/router/dist/evidence/failure-contracts.js +132 -126
  80. package/router/dist/evidence/line-ranges.d.ts +17 -15
  81. package/router/dist/evidence/line-ranges.js +18 -18
  82. package/router/dist/experiments/local-index.d.ts +47 -41
  83. package/router/dist/experiments/local-index.js +477 -458
  84. package/router/dist/local/local-traversal.d.ts +18 -0
  85. package/router/dist/local/local-traversal.js +334 -0
  86. package/router/dist/processing/engine.d.ts +94 -70
  87. package/router/dist/processing/engine.js +462 -364
  88. package/router/dist/processing/reducers.d.ts +208 -194
  89. package/router/dist/processing/reducers.js +1434 -1256
  90. package/router/dist/processing/renderers.d.ts +24 -18
  91. package/router/dist/processing/renderers.js +161 -152
  92. package/router/dist/processing/scripts.d.ts +80 -67
  93. package/router/dist/processing/scripts.js +343 -290
  94. package/router/dist/repo/repo-traversal.d.ts +9 -9
  95. package/router/dist/repo/repo-traversal.js +205 -202
  96. package/router/dist/routing/observed-reducers.d.ts +25 -19
  97. package/router/dist/routing/observed-reducers.js +559 -545
  98. package/router/dist/routing/observed-routing.d.ts +23 -14
  99. package/router/dist/routing/observed-routing.js +319 -318
  100. package/router/dist/routing/parsers.d.ts +10 -10
  101. package/router/dist/routing/parsers.js +454 -406
  102. package/router/dist/routing/run-filters.d.ts +45 -41
  103. package/router/dist/routing/run-filters.js +215 -207
  104. package/router/dist/routing/run-reducers.d.ts +45 -26
  105. package/router/dist/routing/run-reducers.js +102 -90
  106. package/router/dist/sandbox/adapter-roots.d.ts +34 -26
  107. package/router/dist/sandbox/adapter-roots.js +43 -41
  108. package/router/dist/sandbox/eryx-python-adapter.d.ts +9 -5
  109. package/router/dist/sandbox/eryx-python-adapter.js +659 -588
  110. package/router/dist/sandbox/jq-wasm-adapter.d.ts +3 -3
  111. package/router/dist/sandbox/jq-wasm-adapter.js +319 -311
  112. package/router/dist/sandbox/quickjs-wasi-adapter.d.ts +9 -5
  113. package/router/dist/sandbox/quickjs-wasi-adapter.js +336 -333
  114. package/router/dist/sandbox/script-sandbox.d.ts +105 -84
  115. package/router/dist/sandbox/script-sandbox.js +294 -260
  116. package/router/dist/setup/script-transform-adapters.d.ts +23 -19
  117. package/router/dist/setup/script-transform-adapters.js +223 -204
  118. package/router/dist/tools/batch.d.ts +27 -16
  119. package/router/dist/tools/batch.js +493 -416
  120. package/router/dist/tools/run.d.ts +47 -35
  121. package/router/dist/tools/run.js +1171 -1086
  122. package/router/dist/tools/search.d.ts +53 -31
  123. package/router/dist/tools/search.js +1224 -1065
  124. package/router/dist/transform/engine.d.ts +121 -96
  125. package/router/dist/transform/engine.js +1853 -1736
  126. package/router/dist/vault/vault-index.d.ts +97 -78
  127. package/router/dist/vault/vault-index.js +347 -342
  128. package/router/dist/vault/vault.d.ts +109 -74
  129. package/router/dist/vault/vault.js +528 -533
  130. package/runtime/interaction-contract.md +16 -0
  131. package/skills/bypass/SKILL.md +52 -38
  132. package/skills/commit-work/SKILL.md +54 -46
  133. package/skills/commit-work/references/staging-decisions.md +46 -24
  134. package/skills/decision-gate/SKILL.md +48 -0
  135. package/skills/design-for-depth/SKILL.md +75 -59
  136. package/skills/design-for-depth/references/design-pressure-signals.md +56 -7
  137. package/skills/design-for-depth/references/interface-design-loop.md +156 -0
  138. package/skills/design-for-depth/references/software-design-philosophy.md +32 -3
  139. package/skills/diagnose-failure/SKILL.md +65 -60
  140. package/skills/diagnose-failure/references/diagnostic-loop-catalog.md +36 -0
  141. package/skills/diagnose-failure/references/flaky-and-performance.md +30 -18
  142. package/skills/discuss/SKILL.md +121 -0
  143. package/skills/discuss/references/checkpoints.md +66 -0
  144. package/skills/evaluate-skill/SKILL.md +62 -53
  145. package/skills/evaluate-skill/references/definition-schema.md +345 -0
  146. package/skills/evaluate-skill/references/evaluation-design.md +86 -0
  147. package/skills/evaluate-skill/references/execution-and-evidence.md +85 -0
  148. package/skills/evaluate-skill/references/review-and-revision.md +51 -0
  149. package/skills/evaluate-skill/scripts/lib/definitions.mjs +296 -0
  150. package/skills/evaluate-skill/scripts/lib/evidence.mjs +46 -0
  151. package/skills/evaluate-skill/scripts/lib/grade-comparison.mjs +60 -0
  152. package/skills/evaluate-skill/scripts/lib/grade-interaction.mjs +148 -0
  153. package/skills/evaluate-skill/scripts/lib/grade-support.mjs +126 -0
  154. package/skills/evaluate-skill/scripts/lib/grade-workspace.mjs +192 -0
  155. package/skills/evaluate-skill/scripts/lib/grade.mjs +56 -0
  156. package/skills/evaluate-skill/scripts/lib/pi.mjs +489 -0
  157. package/skills/evaluate-skill/scripts/lib/process.mjs +79 -0
  158. package/skills/evaluate-skill/scripts/lib/rpc.mjs +444 -0
  159. package/skills/evaluate-skill/scripts/lib/runner.mjs +346 -0
  160. package/skills/evaluate-skill/scripts/lib/sandbox.mjs +409 -0
  161. package/skills/evaluate-skill/scripts/lib/view.mjs +337 -0
  162. package/skills/evaluate-skill/scripts/pi-guard.mjs +164 -0
  163. package/skills/evaluate-skill/scripts/skill-eval.mjs +101 -0
  164. package/skills/execute-work/SKILL.md +99 -0
  165. package/skills/execute-work/references/code-practices.md +78 -0
  166. package/skills/execute-work/references/execution-loop.md +77 -0
  167. package/skills/finish-branch/SKILL.md +117 -0
  168. package/skills/finish-branch/references/integration-options.md +80 -0
  169. package/skills/handoff/SKILL.md +65 -39
  170. package/skills/handoff/references/templates.md +104 -27
  171. package/skills/launch-work/SKILL.md +116 -0
  172. package/skills/launch-work/references/launch-readiness.md +85 -0
  173. package/skills/migration-work/SKILL.md +115 -0
  174. package/skills/migration-work/references/migration-lifecycle.md +82 -0
  175. package/skills/mode-contract/SKILL.md +50 -52
  176. package/skills/output-router/SKILL.md +21 -17
  177. package/skills/output-router/references/safety-policy.md +1 -1
  178. package/skills/release-work/SKILL.md +118 -0
  179. package/skills/release-work/references/release-evidence.md +78 -0
  180. package/skills/review-artifact/SKILL.md +77 -69
  181. package/skills/review-artifact/references/reviewer-prompt.md +133 -42
  182. package/skills/review-work/SKILL.md +82 -57
  183. package/skills/review-work/references/reviewer-prompt.md +97 -60
  184. package/skills/review-work/references/security-risk-lens.md +67 -0
  185. package/skills/setup-freeflow/SKILL.md +58 -66
  186. package/skills/setup-freeflow/references/activation-contract.md +89 -69
  187. package/skills/setup-freeflow/references/host-setup.md +54 -17
  188. package/skills/setup-freeflow/references/output-router-setup.md +62 -54
  189. package/skills/simplify-code/SKILL.md +80 -0
  190. package/skills/simplify-code/references/simplification-patterns.md +70 -0
  191. package/skills/tdd/SKILL.md +96 -0
  192. package/skills/tdd/references/test-design.md +96 -0
  193. package/skills/track-work/SKILL.md +84 -0
  194. package/skills/track-work/references/working-record-schema.md +378 -0
  195. package/skills/verify-work/SKILL.md +59 -38
  196. package/skills/verify-work/references/browser-runtime-evidence.md +55 -0
  197. package/skills/verify-work/references/integration-evidence.md +51 -0
  198. package/skills/verify-work/references/performance-evidence.md +57 -0
  199. package/skills/workflow/SKILL.md +53 -59
  200. package/skills/workflow/references/domain-skill-composition.md +57 -0
  201. package/skills/workflow/references/workflow-loop.md +92 -0
  202. package/skills/write-plan/SKILL.md +85 -58
  203. package/skills/write-plan/references/plan-shapes.md +132 -46
  204. package/skills/write-skill/SKILL.md +82 -51
  205. package/skills/write-skill/references/activation-boundaries.md +62 -0
  206. package/skills/write-skill/references/agent-first-instructions.md +87 -0
  207. package/skills/write-skill/references/progressive-disclosure.md +63 -0
  208. package/skills/write-skill/scripts/lib/skill-author.mjs +653 -0
  209. package/skills/write-skill/scripts/skill-author.mjs +104 -0
  210. package/skills/write-spec/SKILL.md +65 -54
  211. package/skills/write-spec/references/artifact-standards.md +60 -41
  212. package/skills/write-spec/references/decision-records.md +77 -0
  213. package/skills/write-spec/references/spec-shapes.md +119 -60
  214. package/evals/README.md +0 -32
  215. package/evals/fixtures/copy-conventions.md +0 -31
  216. package/evals/fixtures/output-router/README.md +0 -12
  217. package/evals/fixtures/output-router/failed-command-output.txt +0 -9
  218. package/evals/fixtures/output-router/large-router-manual.md +0 -63
  219. package/evals/fixtures/output-router/native-large-output.txt +0 -40
  220. package/evals/fixtures/output-router/noisy-test-output.txt +0 -30
  221. package/evals/fixtures/output-router/verification-output.txt +0 -8
  222. package/evals/fixtures/tiny-artifact-review-app/README.md +0 -5
  223. package/evals/fixtures/tiny-artifact-review-app/docs/billing-policy.md +0 -10
  224. package/evals/fixtures/tiny-artifact-review-app/docs/specs/billing-webhook-api-draft.md +0 -21
  225. package/evals/fixtures/tiny-artifact-review-app/docs/specs/failed-payment-grace-period.md +0 -24
  226. package/evals/fixtures/tiny-artifact-review-app/docs/specs/immediate-downgrade.md +0 -17
  227. package/evals/fixtures/tiny-artifact-review-app/tests/billing.test.md +0 -8
  228. package/evals/fixtures/tiny-commit-ambiguous-app/.freeflow-eval-setup.sh +0 -15
  229. package/evals/fixtures/tiny-commit-ambiguous-app/README.md +0 -3
  230. package/evals/fixtures/tiny-commit-ambiguous-app/src/billing.ts +0 -5
  231. package/evals/fixtures/tiny-commit-ambiguous-app/src/settings-page.ts +0 -1
  232. package/evals/fixtures/tiny-commit-ambiguous-app/tests/settings.test.md +0 -5
  233. package/evals/fixtures/tiny-commit-app/.freeflow-eval-setup.sh +0 -14
  234. package/evals/fixtures/tiny-commit-app/README.md +0 -3
  235. package/evals/fixtures/tiny-commit-app/docs/specs/settings-title.md +0 -5
  236. package/evals/fixtures/tiny-commit-app/src/billing.ts +0 -5
  237. package/evals/fixtures/tiny-commit-app/src/settings-page.ts +0 -1
  238. package/evals/fixtures/tiny-commit-app/tests/settings.test.md +0 -5
  239. package/evals/fixtures/tiny-commit-everything-app/.freeflow-eval-setup.sh +0 -15
  240. package/evals/fixtures/tiny-commit-everything-app/README.md +0 -3
  241. package/evals/fixtures/tiny-commit-everything-app/docs/specs/settings-title.md +0 -5
  242. package/evals/fixtures/tiny-commit-everything-app/src/billing.ts +0 -5
  243. package/evals/fixtures/tiny-commit-everything-app/src/settings-page.ts +0 -1
  244. package/evals/fixtures/tiny-commit-everything-app/tests/settings.test.md +0 -5
  245. package/evals/fixtures/tiny-commit-staged-app/.freeflow-eval-setup.sh +0 -15
  246. package/evals/fixtures/tiny-commit-staged-app/README.md +0 -3
  247. package/evals/fixtures/tiny-commit-staged-app/docs/specs/settings-title.md +0 -5
  248. package/evals/fixtures/tiny-commit-staged-app/src/billing.ts +0 -5
  249. package/evals/fixtures/tiny-commit-staged-app/src/settings-page.ts +0 -1
  250. package/evals/fixtures/tiny-commit-staged-app/tests/settings.test.md +0 -5
  251. package/evals/fixtures/tiny-commit-staged-mixed-app/.freeflow-eval-setup.sh +0 -15
  252. package/evals/fixtures/tiny-commit-staged-mixed-app/README.md +0 -3
  253. package/evals/fixtures/tiny-commit-staged-mixed-app/docs/billing-policy.md +0 -3
  254. package/evals/fixtures/tiny-commit-staged-mixed-app/docs/release-notes.md +0 -3
  255. package/evals/fixtures/tiny-commit-staged-mixed-app/src/billing.ts +0 -5
  256. package/evals/fixtures/tiny-dashboard-stale-app/README.md +0 -11
  257. package/evals/fixtures/tiny-dashboard-stale-app/src/api-client.ts +0 -13
  258. package/evals/fixtures/tiny-dashboard-stale-app/src/dashboard-data.ts +0 -19
  259. package/evals/fixtures/tiny-dashboard-stale-app/tests/dashboard-data.test.md +0 -9
  260. package/evals/fixtures/tiny-decision-destination-app/README.md +0 -6
  261. package/evals/fixtures/tiny-decision-destination-app/src/risk.ts +0 -8
  262. package/evals/fixtures/tiny-decision-destination-app/tests/risk.test.md +0 -4
  263. package/evals/fixtures/tiny-design-depth-app/README.md +0 -15
  264. package/evals/fixtures/tiny-design-depth-app/src/routes.ts +0 -25
  265. package/evals/fixtures/tiny-design-depth-app/src/sendEmail.ts +0 -3
  266. package/evals/fixtures/tiny-design-depth-app/src/sendSms.ts +0 -3
  267. package/evals/fixtures/tiny-design-depth-app/src/telemetry.ts +0 -3
  268. package/evals/fixtures/tiny-design-depth-app/tests/routes.test.md +0 -12
  269. package/evals/fixtures/tiny-eval-method-app/README.md +0 -8
  270. package/evals/fixtures/tiny-eval-method-app/evals/reports/review-pr-eval-result.md +0 -5
  271. package/evals/fixtures/tiny-eval-method-app/evals/reports/triage-question-failure.md +0 -17
  272. package/evals/fixtures/tiny-eval-method-app/evals/runs/review-pr-with-skill-output.diff +0 -11
  273. package/evals/fixtures/tiny-eval-method-app/evals/runs/review-pr-with-skill-output.md +0 -3
  274. package/evals/fixtures/tiny-eval-method-app/skills/review-pr/SKILL.md +0 -10
  275. package/evals/fixtures/tiny-eval-method-app/skills/triage-question/SKILL.md +0 -10
  276. package/evals/fixtures/tiny-execute-plan-app/README.md +0 -5
  277. package/evals/fixtures/tiny-execute-plan-app/checks/settings-and-billing-check.sh +0 -5
  278. package/evals/fixtures/tiny-execute-plan-app/docs/billing-policy.md +0 -10
  279. package/evals/fixtures/tiny-execute-plan-app/docs/plans/immediate-downgrade-plan.md +0 -11
  280. package/evals/fixtures/tiny-execute-plan-app/docs/plans/settings-title-plan.md +0 -12
  281. package/evals/fixtures/tiny-execute-plan-app/docs/plans/settings-title-with-bad-check.md +0 -15
  282. package/evals/fixtures/tiny-execute-plan-app/docs/plans/unverified-billing-plan.md +0 -9
  283. package/evals/fixtures/tiny-execute-plan-app/docs/specs/failed-payment-grace-period.md +0 -9
  284. package/evals/fixtures/tiny-execute-plan-app/docs/specs/settings-title.md +0 -9
  285. package/evals/fixtures/tiny-execute-plan-app/src/billing.ts +0 -7
  286. package/evals/fixtures/tiny-execute-plan-app/src/settings-page.ts +0 -1
  287. package/evals/fixtures/tiny-execute-plan-app/tests/billing.test.md +0 -7
  288. package/evals/fixtures/tiny-execute-plan-app/tests/settings.test.md +0 -5
  289. package/evals/fixtures/tiny-execute-review-loop-app/README.md +0 -5
  290. package/evals/fixtures/tiny-execute-review-loop-app/docs/billing-policy.md +0 -9
  291. package/evals/fixtures/tiny-execute-review-loop-app/docs/plans/settings-title-plan.md +0 -12
  292. package/evals/fixtures/tiny-execute-review-loop-app/docs/review/previous-agent-summary.md +0 -15
  293. package/evals/fixtures/tiny-execute-review-loop-app/docs/review/review-pass-1-non-pass.md +0 -11
  294. package/evals/fixtures/tiny-execute-review-loop-app/docs/specs/settings-title.md +0 -9
  295. package/evals/fixtures/tiny-execute-review-loop-app/src/billing.ts +0 -7
  296. package/evals/fixtures/tiny-execute-review-loop-app/src/settings-page.ts +0 -1
  297. package/evals/fixtures/tiny-execute-review-loop-app/tests/billing.test.md +0 -7
  298. package/evals/fixtures/tiny-execute-review-loop-app/tests/settings.test.md +0 -5
  299. package/evals/fixtures/tiny-flaky-session-app/README.md +0 -10
  300. package/evals/fixtures/tiny-flaky-session-app/src/session-timeout.ts +0 -13
  301. package/evals/fixtures/tiny-flaky-session-app/tests/session-timeout.test.md +0 -8
  302. package/evals/fixtures/tiny-handoff-app/README.md +0 -5
  303. package/evals/fixtures/tiny-handoff-app/docs/billing-policy.md +0 -10
  304. package/evals/fixtures/tiny-handoff-app/docs/handoffs/old-agent-handoff.md +0 -8
  305. package/evals/fixtures/tiny-handoff-app/docs/plans/billing-retry-plan.md +0 -11
  306. package/evals/fixtures/tiny-handoff-app/src/billing.ts +0 -7
  307. package/evals/fixtures/tiny-handoff-report-app/README.md +0 -3
  308. package/evals/fixtures/tiny-handoff-report-app/evals/runs/handoff-3/hof-003/with-skill-output.diff +0 -1
  309. package/evals/fixtures/tiny-handoff-report-app/evals/runs/handoff-3/hof-003/with-skill-output.md +0 -1
  310. package/evals/fixtures/tiny-handoff-report-app/evals/scores/hof-003-score.txt +0 -4
  311. package/evals/fixtures/tiny-plan-app/README.md +0 -5
  312. package/evals/fixtures/tiny-plan-app/docs/billing-policy.md +0 -10
  313. package/evals/fixtures/tiny-plan-app/docs/specs/failed-payment-grace-period.md +0 -25
  314. package/evals/fixtures/tiny-plan-app/src/billing.ts +0 -17
  315. package/evals/fixtures/tiny-plan-app/src/settings-page.ts +0 -1
  316. package/evals/fixtures/tiny-plan-app/tests/billing.test.md +0 -8
  317. package/evals/fixtures/tiny-plan-app/tests/settings.test.md +0 -5
  318. package/evals/fixtures/tiny-plan-strict-api-app/README.md +0 -3
  319. package/evals/fixtures/tiny-plan-strict-api-app/docs/billing-policy.md +0 -5
  320. package/evals/fixtures/tiny-plan-strict-api-app/docs/specs/billing-webhook-api.md +0 -25
  321. package/evals/fixtures/tiny-plan-strict-api-app/src/billing.ts +0 -5
  322. package/evals/fixtures/tiny-plan-strict-api-app/src/webhooks.ts +0 -3
  323. package/evals/fixtures/tiny-plan-strict-api-app/tests/billing-webhook.test.md +0 -8
  324. package/evals/fixtures/tiny-post-setup-invalid-config-app/.freeflow/config.json +0 -3
  325. package/evals/fixtures/tiny-post-setup-invalid-config-app/AGENTS.md +0 -15
  326. package/evals/fixtures/tiny-post-setup-invalid-config-app/README.md +0 -16
  327. package/evals/fixtures/tiny-post-setup-invalid-config-app/docs/auth-review.md +0 -15
  328. package/evals/fixtures/tiny-post-setup-invalid-config-app/docs/billing-policy.md +0 -10
  329. package/evals/fixtures/tiny-post-setup-invalid-config-app/docs/copy-conventions.md +0 -15
  330. package/evals/fixtures/tiny-post-setup-invalid-config-app/src/auth-middleware.ts +0 -12
  331. package/evals/fixtures/tiny-post-setup-invalid-config-app/src/billing.ts +0 -20
  332. package/evals/fixtures/tiny-post-setup-invalid-config-app/src/login-copy.ts +0 -1
  333. package/evals/fixtures/tiny-post-setup-invalid-config-app/src/settings-page.ts +0 -1
  334. package/evals/fixtures/tiny-post-setup-invalid-config-app/tests/auth-middleware.test.md +0 -8
  335. package/evals/fixtures/tiny-post-setup-invalid-config-app/tests/billing.test.md +0 -8
  336. package/evals/fixtures/tiny-post-setup-invalid-config-app/tests/copy.test.md +0 -7
  337. package/evals/fixtures/tiny-post-setup-missing-config-app/AGENTS.md +0 -15
  338. package/evals/fixtures/tiny-post-setup-missing-config-app/README.md +0 -16
  339. package/evals/fixtures/tiny-post-setup-missing-config-app/docs/auth-review.md +0 -15
  340. package/evals/fixtures/tiny-post-setup-missing-config-app/docs/billing-policy.md +0 -10
  341. package/evals/fixtures/tiny-post-setup-missing-config-app/docs/copy-conventions.md +0 -15
  342. package/evals/fixtures/tiny-post-setup-missing-config-app/src/auth-middleware.ts +0 -12
  343. package/evals/fixtures/tiny-post-setup-missing-config-app/src/billing.ts +0 -20
  344. package/evals/fixtures/tiny-post-setup-missing-config-app/src/login-copy.ts +0 -1
  345. package/evals/fixtures/tiny-post-setup-missing-config-app/src/settings-page.ts +0 -1
  346. package/evals/fixtures/tiny-post-setup-missing-config-app/tests/auth-middleware.test.md +0 -8
  347. package/evals/fixtures/tiny-post-setup-missing-config-app/tests/billing.test.md +0 -8
  348. package/evals/fixtures/tiny-post-setup-missing-config-app/tests/copy.test.md +0 -7
  349. package/evals/fixtures/tiny-post-setup-source-conflict-app/.freeflow/config.json +0 -3
  350. package/evals/fixtures/tiny-post-setup-source-conflict-app/AGENTS.md +0 -15
  351. package/evals/fixtures/tiny-post-setup-source-conflict-app/README.md +0 -16
  352. package/evals/fixtures/tiny-post-setup-source-conflict-app/docs/auth-review.md +0 -15
  353. package/evals/fixtures/tiny-post-setup-source-conflict-app/docs/billing-policy.md +0 -10
  354. package/evals/fixtures/tiny-post-setup-source-conflict-app/docs/copy-conventions.md +0 -15
  355. package/evals/fixtures/tiny-post-setup-source-conflict-app/src/auth-middleware.ts +0 -12
  356. package/evals/fixtures/tiny-post-setup-source-conflict-app/src/billing.ts +0 -20
  357. package/evals/fixtures/tiny-post-setup-source-conflict-app/src/login-copy.ts +0 -1
  358. package/evals/fixtures/tiny-post-setup-source-conflict-app/src/settings-page.ts +0 -1
  359. package/evals/fixtures/tiny-post-setup-source-conflict-app/tests/auth-middleware.test.md +0 -8
  360. package/evals/fixtures/tiny-post-setup-source-conflict-app/tests/billing.test.md +0 -8
  361. package/evals/fixtures/tiny-post-setup-source-conflict-app/tests/copy.test.md +0 -7
  362. package/evals/fixtures/tiny-report-performance-app/README.md +0 -11
  363. package/evals/fixtures/tiny-report-performance-app/docs/performance.md +0 -10
  364. package/evals/fixtures/tiny-report-performance-app/src/report-summary.ts +0 -29
  365. package/evals/fixtures/tiny-report-performance-app/tests/report-performance.test.md +0 -8
  366. package/evals/fixtures/tiny-review-request-app/README.md +0 -3
  367. package/evals/fixtures/tiny-review-request-app/docs/billing-policy.md +0 -5
  368. package/evals/fixtures/tiny-review-request-app/docs/plans/billing-webhook-api.md +0 -19
  369. package/evals/fixtures/tiny-review-request-app/docs/review/previous-agent-summary.md +0 -20
  370. package/evals/fixtures/tiny-review-request-app/docs/specs/billing-webhook-api.md +0 -25
  371. package/evals/fixtures/tiny-review-request-app/src/billing.ts +0 -11
  372. package/evals/fixtures/tiny-review-request-app/src/webhooks.ts +0 -19
  373. package/evals/fixtures/tiny-review-request-app/tests/billing-webhook.test.md +0 -8
  374. package/evals/fixtures/tiny-review-work-app/README.md +0 -5
  375. package/evals/fixtures/tiny-review-work-app/docs/billing-policy.md +0 -9
  376. package/evals/fixtures/tiny-review-work-app/docs/plans/settings-title-plan.md +0 -12
  377. package/evals/fixtures/tiny-review-work-app/docs/review/previous-agent-summary.md +0 -15
  378. package/evals/fixtures/tiny-review-work-app/docs/specs/settings-title.md +0 -9
  379. package/evals/fixtures/tiny-review-work-app/src/billing.ts +0 -7
  380. package/evals/fixtures/tiny-review-work-app/src/settings-page.ts +0 -1
  381. package/evals/fixtures/tiny-review-work-app/tests/billing.test.md +0 -7
  382. package/evals/fixtures/tiny-review-work-app/tests/settings.test.md +0 -5
  383. package/evals/fixtures/tiny-saas-app/README.md +0 -16
  384. package/evals/fixtures/tiny-saas-app/docs/auth-review.md +0 -15
  385. package/evals/fixtures/tiny-saas-app/docs/billing-policy.md +0 -10
  386. package/evals/fixtures/tiny-saas-app/docs/copy-conventions.md +0 -15
  387. package/evals/fixtures/tiny-saas-app/docs/specs/settings-title.md +0 -13
  388. package/evals/fixtures/tiny-saas-app/src/auth-middleware.ts +0 -12
  389. package/evals/fixtures/tiny-saas-app/src/billing.ts +0 -20
  390. package/evals/fixtures/tiny-saas-app/src/login-copy.ts +0 -1
  391. package/evals/fixtures/tiny-saas-app/src/settings-page.ts +0 -1
  392. package/evals/fixtures/tiny-saas-app/tests/auth-middleware.test.md +0 -8
  393. package/evals/fixtures/tiny-saas-app/tests/billing.test.md +0 -8
  394. package/evals/fixtures/tiny-saas-app/tests/copy.test.md +0 -7
  395. package/evals/fixtures/tiny-setup-agents-app/AGENTS.md +0 -6
  396. package/evals/fixtures/tiny-setup-both-app/AGENTS.md +0 -5
  397. package/evals/fixtures/tiny-setup-both-app/CLAUDE.md +0 -5
  398. package/evals/fixtures/tiny-setup-claude-app/CLAUDE.md +0 -6
  399. package/evals/fixtures/tiny-setup-codex-rules-app/.codex/rules/shell.rules +0 -5
  400. package/evals/fixtures/tiny-setup-codex-rules-app/AGENTS.md +0 -6
  401. package/evals/fixtures/tiny-setup-conflict-app/AGENTS.md +0 -6
  402. package/evals/fixtures/tiny-setup-existing-block-app/AGENTS.md +0 -14
  403. package/evals/fixtures/tiny-setup-four-rules-app/CLAUDE.md +0 -6
  404. package/evals/fixtures/tiny-skill-dev-app/README.md +0 -10
  405. package/evals/fixtures/tiny-skill-dev-app/evals/prompts/review-pr-001.txt +0 -8
  406. package/evals/fixtures/tiny-skill-dev-app/evals/reports/review-pr-failure.md +0 -17
  407. package/evals/fixtures/tiny-skill-dev-app/skills/review-pr/SKILL.md +0 -13
  408. package/evals/fixtures/tiny-team-app/README.md +0 -5
  409. package/evals/fixtures/tiny-team-app/docs/product.md +0 -6
  410. package/evals/fixtures/tiny-team-app/src/teams.ts +0 -9
  411. package/evals/fixtures/tiny-team-app/src/users.ts +0 -5
  412. package/evals/fixtures/tiny-team-app/tests/teams.test.md +0 -7
  413. package/evals/fixtures/tiny-verify-app/README.md +0 -5
  414. package/evals/fixtures/tiny-verify-app/src/settings-nav.ts +0 -1
  415. package/evals/fixtures/tiny-verify-app/src/settings-page.ts +0 -1
  416. package/evals/fixtures/tiny-verify-app/tests/settings.test.md +0 -7
  417. package/evals/prompts/aon-001.txt +0 -2
  418. package/evals/prompts/byp-001.txt +0 -2
  419. package/evals/prompts/byp-002.txt +0 -2
  420. package/evals/prompts/cap-001.txt +0 -3
  421. package/evals/prompts/cap-002.txt +0 -3
  422. package/evals/prompts/cmd-001.txt +0 -3
  423. package/evals/prompts/cmd-002.txt +0 -3
  424. package/evals/prompts/cmd-003.txt +0 -6
  425. package/evals/prompts/cmd-004.txt +0 -5
  426. package/evals/prompts/cmd-005.txt +0 -5
  427. package/evals/prompts/cmd-006.txt +0 -5
  428. package/evals/prompts/cmd-007.txt +0 -5
  429. package/evals/prompts/cmd-008.txt +0 -5
  430. package/evals/prompts/cmd-009.txt +0 -8
  431. package/evals/prompts/cmd-010.txt +0 -5
  432. package/evals/prompts/cmd-011.txt +0 -5
  433. package/evals/prompts/cmd-012.txt +0 -5
  434. package/evals/prompts/cmd-013.txt +0 -5
  435. package/evals/prompts/cmd-014.txt +0 -7
  436. package/evals/prompts/cmd-015.txt +0 -7
  437. package/evals/prompts/cmd-016.txt +0 -5
  438. package/evals/prompts/cmt-001.txt +0 -1
  439. package/evals/prompts/cmt-002.txt +0 -1
  440. package/evals/prompts/cmt-003.txt +0 -1
  441. package/evals/prompts/cmt-004.txt +0 -1
  442. package/evals/prompts/cmt-005.txt +0 -1
  443. package/evals/prompts/dfd-001.txt +0 -3
  444. package/evals/prompts/dia-001.txt +0 -3
  445. package/evals/prompts/dia-002.txt +0 -3
  446. package/evals/prompts/dia-003.txt +0 -3
  447. package/evals/prompts/dis-001.txt +0 -5
  448. package/evals/prompts/dis-002.txt +0 -5
  449. package/evals/prompts/esk-001.txt +0 -5
  450. package/evals/prompts/esk-002.txt +0 -5
  451. package/evals/prompts/esk-003.txt +0 -5
  452. package/evals/prompts/grc-001.txt +0 -3
  453. package/evals/prompts/hof-001.txt +0 -3
  454. package/evals/prompts/hof-002.txt +0 -1
  455. package/evals/prompts/hof-003.txt +0 -1
  456. package/evals/prompts/hof-004.txt +0 -1
  457. package/evals/prompts/hof-005.txt +0 -1
  458. package/evals/prompts/ivg-001.txt +0 -1
  459. package/evals/prompts/ivg-002.txt +0 -11
  460. package/evals/prompts/ivg-003.txt +0 -1
  461. package/evals/prompts/ivg-004.txt +0 -1
  462. package/evals/prompts/mode-001.txt +0 -3
  463. package/evals/prompts/mode-002.txt +0 -1
  464. package/evals/prompts/mode-003.txt +0 -3
  465. package/evals/prompts/mode-004.txt +0 -3
  466. package/evals/prompts/mode-005.txt +0 -3
  467. package/evals/prompts/mode-006.txt +0 -3
  468. package/evals/prompts/mode-007.txt +0 -3
  469. package/evals/prompts/otr-001.txt +0 -3
  470. package/evals/prompts/otr-002.txt +0 -3
  471. package/evals/prompts/rar-001.txt +0 -5
  472. package/evals/prompts/rar-002.txt +0 -3
  473. package/evals/prompts/rar-003.txt +0 -6
  474. package/evals/prompts/rar-004.txt +0 -15
  475. package/evals/prompts/rar-005.txt +0 -10
  476. package/evals/prompts/rbr-001.txt +0 -3
  477. package/evals/prompts/rbr-002.txt +0 -3
  478. package/evals/prompts/rbr-003.txt +0 -7
  479. package/evals/prompts/rev-001.txt +0 -3
  480. package/evals/prompts/rev-002.txt +0 -5
  481. package/evals/prompts/rev-003.txt +0 -6
  482. package/evals/prompts/rev-004.txt +0 -1
  483. package/evals/prompts/rev-005.txt +0 -15
  484. package/evals/prompts/rev-006.txt +0 -5
  485. package/evals/prompts/stp-001.txt +0 -1
  486. package/evals/prompts/stp-002.txt +0 -1
  487. package/evals/prompts/stp-003.txt +0 -1
  488. package/evals/prompts/stp-004.txt +0 -1
  489. package/evals/prompts/stp-005.txt +0 -1
  490. package/evals/prompts/stp-006.txt +0 -1
  491. package/evals/prompts/stp-007.txt +0 -1
  492. package/evals/prompts/stp-008.txt +0 -1
  493. package/evals/prompts/stp-009.txt +0 -1
  494. package/evals/prompts/stp-010.txt +0 -1
  495. package/evals/prompts/stp-011.txt +0 -1
  496. package/evals/prompts/vfy-003.txt +0 -1
  497. package/evals/prompts/wpl-001.txt +0 -3
  498. package/evals/prompts/wpl-002.txt +0 -5
  499. package/evals/prompts/wpl-003.txt +0 -3
  500. package/evals/prompts/wpl-004.txt +0 -5
  501. package/evals/prompts/wpl-005.txt +0 -1
  502. package/evals/prompts/wrc-001.txt +0 -10
  503. package/evals/prompts/wrc-002.txt +0 -3
  504. package/evals/prompts/wsk-001.txt +0 -6
  505. package/evals/prompts/wsp-001.txt +0 -5
  506. package/evals/prompts/wsp-002.txt +0 -15
  507. package/evals/prompts/wsp-003.txt +0 -3
  508. package/evals/prompts/wsp-004.txt +0 -15
  509. package/evals/prompts/wsp-005.txt +0 -5
  510. package/evals/prompts/wsp-006.txt +0 -12
  511. package/evals/prompts/wsp-007.txt +0 -9
  512. package/evals/prompts/wsp-008.txt +0 -13
  513. package/evals/prompts/xpl-001.txt +0 -1
  514. package/evals/prompts/xpl-002.txt +0 -3
  515. package/evals/prompts/xpl-003.txt +0 -3
  516. package/evals/prompts/xpl-004.txt +0 -3
  517. package/evals/prompts/xpl-005.txt +0 -5
  518. package/evals/prompts/xpl-006.txt +0 -3
  519. package/evals/registries/adversarial-evals.json +0 -39
  520. package/evals/registries/fixture-evals.json +0 -2513
  521. package/evals/registries/handoff-evals.json +0 -74
  522. package/evals/registries/legacy-evals.json +0 -147
  523. package/evals/registries/skill-evidence.json +0 -193
  524. package/evals/registries/verify-work-evals.json +0 -46
  525. package/evals/reports/acceptance/v0.1-acceptance-report.md +0 -130
  526. package/evals/reports/by-command-surface/command-surface-1-report.md +0 -45
  527. package/evals/reports/by-command-surface/command-surface-10-report.md +0 -76
  528. package/evals/reports/by-command-surface/command-surface-11-report.md +0 -77
  529. package/evals/reports/by-command-surface/command-surface-12-report.md +0 -91
  530. package/evals/reports/by-command-surface/command-surface-13-report.md +0 -64
  531. package/evals/reports/by-command-surface/command-surface-14-report.md +0 -66
  532. package/evals/reports/by-command-surface/command-surface-15-report.md +0 -124
  533. package/evals/reports/by-command-surface/command-surface-16-report.md +0 -39
  534. package/evals/reports/by-command-surface/command-surface-2-report.md +0 -80
  535. package/evals/reports/by-command-surface/command-surface-3-report.md +0 -86
  536. package/evals/reports/by-command-surface/command-surface-4-report.md +0 -76
  537. package/evals/reports/by-command-surface/command-surface-5-report.md +0 -80
  538. package/evals/reports/by-command-surface/command-surface-6-report.md +0 -74
  539. package/evals/reports/by-command-surface/command-surface-7-report.md +0 -84
  540. package/evals/reports/by-command-surface/command-surface-8-report.md +0 -79
  541. package/evals/reports/by-command-surface/command-surface-9-report.md +0 -79
  542. package/evals/reports/by-command-surface/command-surface-matrix.md +0 -91
  543. package/evals/reports/by-skill/bypass-1-report.md +0 -124
  544. package/evals/reports/by-skill/capture-decisions-1-report.md +0 -99
  545. package/evals/reports/by-skill/capture-decisions-2-report.md +0 -102
  546. package/evals/reports/by-skill/commit-work-1-report.md +0 -165
  547. package/evals/reports/by-skill/commit-work-2-report.md +0 -109
  548. package/evals/reports/by-skill/design-for-depth-1-report.md +0 -95
  549. package/evals/reports/by-skill/diagnose-failure-1-report.md +0 -91
  550. package/evals/reports/by-skill/diagnose-failure-2-report.md +0 -94
  551. package/evals/reports/by-skill/discover-1-report.md +0 -118
  552. package/evals/reports/by-skill/evaluate-skill-2-report.md +0 -71
  553. package/evals/reports/by-skill/execute-plan-1-report.md +0 -103
  554. package/evals/reports/by-skill/execute-plan-2-report.md +0 -112
  555. package/evals/reports/by-skill/execute-plan-3-report.md +0 -87
  556. package/evals/reports/by-skill/grill-context-1-report.md +0 -103
  557. package/evals/reports/by-skill/handoff-1-report.md +0 -123
  558. package/evals/reports/by-skill/handoff-2-report.md +0 -105
  559. package/evals/reports/by-skill/handoff-3-report.md +0 -100
  560. package/evals/reports/by-skill/handoff-7-report.md +0 -77
  561. package/evals/reports/by-skill/interview-gate-1-report.md +0 -63
  562. package/evals/reports/by-skill/interview-gate-2-report.md +0 -105
  563. package/evals/reports/by-skill/mode-contract-1-report.md +0 -74
  564. package/evals/reports/by-skill/mode-contract-2-report.md +0 -87
  565. package/evals/reports/by-skill/mode-contract-3-report.md +0 -65
  566. package/evals/reports/by-skill/mode-contract-4-report.md +0 -71
  567. package/evals/reports/by-skill/mode-contract-5-report.md +0 -70
  568. package/evals/reports/by-skill/output-router-1-report.md +0 -76
  569. package/evals/reports/by-skill/output-router-2-report.md +0 -65
  570. package/evals/reports/by-skill/research-1-report.md +0 -144
  571. package/evals/reports/by-skill/research-brief-1-report.md +0 -94
  572. package/evals/reports/by-skill/research-brief-2-report.md +0 -75
  573. package/evals/reports/by-skill/review-artifact-1-report.md +0 -91
  574. package/evals/reports/by-skill/review-artifact-2-report.md +0 -79
  575. package/evals/reports/by-skill/review-artifact-3-report.md +0 -120
  576. package/evals/reports/by-skill/review-artifact-4-report.md +0 -89
  577. package/evals/reports/by-skill/review-artifact-5-report.md +0 -66
  578. package/evals/reports/by-skill/review-work-1-report.md +0 -85
  579. package/evals/reports/by-skill/review-work-2-report.md +0 -87
  580. package/evals/reports/by-skill/review-work-3-report.md +0 -104
  581. package/evals/reports/by-skill/review-work-4-report.md +0 -108
  582. package/evals/reports/by-skill/review-work-5-report.md +0 -73
  583. package/evals/reports/by-skill/review-work-6-report.md +0 -66
  584. package/evals/reports/by-skill/setup-freeflow-1-report.md +0 -199
  585. package/evals/reports/by-skill/setup-freeflow-2-report.md +0 -105
  586. package/evals/reports/by-skill/setup-freeflow-3-report.md +0 -105
  587. package/evals/reports/by-skill/setup-freeflow-4-report.md +0 -88
  588. package/evals/reports/by-skill/setup-freeflow-5-report.md +0 -115
  589. package/evals/reports/by-skill/skill-authoring-1-report.md +0 -81
  590. package/evals/reports/by-skill/verify-work-1-report.md +0 -111
  591. package/evals/reports/by-skill/verify-work-2-report.md +0 -120
  592. package/evals/reports/by-skill/workflow-1-report.md +0 -65
  593. package/evals/reports/by-skill/write-plan-1-report.md +0 -123
  594. package/evals/reports/by-skill/write-plan-2-report.md +0 -98
  595. package/evals/reports/by-skill/write-plan-3-report.md +0 -110
  596. package/evals/reports/by-skill/write-spec-1-report.md +0 -88
  597. package/evals/reports/by-skill/write-spec-2-report.md +0 -89
  598. package/evals/reports/by-skill/write-spec-3-report.md +0 -90
  599. package/evals/reports/by-skill/write-spec-4-report.md +0 -167
  600. package/evals/reports/harness/claude-harness-1-report.md +0 -103
  601. package/evals/reports/harness/eval-harness-1-report.md +0 -91
  602. package/evals/reports/iterations/iteration-1-report.md +0 -71
  603. package/evals/reports/iterations/iteration-2-report.md +0 -78
  604. package/evals/reports/iterations/iteration-3-report.md +0 -118
  605. package/evals/reports/iterations/iteration-4-report.md +0 -131
  606. package/evals/reports/iterations/iteration-5-report.md +0 -149
  607. package/evals/reports/iterations/iteration-6-report.md +0 -136
  608. package/evals/reports/runtime/always-on-runtime-1-report.md +0 -107
  609. package/evals/reports/runtime/context-mode-normalized-benchmark-1-report.md +0 -52
  610. package/evals/reports/runtime/context-mode-real-deep-baseline-1-report.md +0 -410
  611. package/evals/reports/runtime/context-mode-real-deep-final-slice-11-report.md +0 -203
  612. package/evals/reports/runtime/context-mode-real-deep-final-slice-11-review.md +0 -51
  613. package/evals/reports/runtime/context-saving-native-tools-baseline-1-report.md +0 -99
  614. package/evals/reports/runtime/eryx-python-compatibility-reprobe-1-report.md +0 -166
  615. package/evals/reports/runtime/eryx-python-proof-spike-1-report.md +0 -96
  616. package/evals/reports/runtime/eryx-python-proof-spike-2-report.md +0 -151
  617. package/evals/reports/runtime/eryx-python-script-derive-execution-1-report.md +0 -233
  618. package/evals/reports/runtime/jq-script-derive-execution-1-report.md +0 -215
  619. package/evals/reports/runtime/jq-wasm-proof-spike-1-report.md +0 -67
  620. package/evals/reports/runtime/output-router-benchmark-1-report.md +0 -81
  621. package/evals/reports/runtime/output-router-capture-derive-provider-eval-1-report.md +0 -35
  622. package/evals/reports/runtime/output-router-codex-large-index-sqlite-adhoc-report.md +0 -150
  623. package/evals/reports/runtime/output-router-codex-qa-benchmark-1-report.md +0 -46
  624. package/evals/reports/runtime/output-router-command-benchmark-1-report.md +0 -62
  625. package/evals/reports/runtime/output-router-index-benchmark-1-report.md +0 -64
  626. package/evals/reports/runtime/output-router-regression-1-report.md +0 -81
  627. package/evals/reports/runtime/output-router-transform-eval-1-report.md +0 -28
  628. package/evals/reports/runtime/pi-observed-routing-eval-1-report.md +0 -44
  629. package/evals/reports/runtime/quickjs-script-derive-execution-1-report.md +0 -159
  630. package/evals/reports/runtime/quickjs-wasi-proof-spike-1-report.md +0 -55
  631. package/evals/reports/runtime/render-format-row-protocol-1-report.md +0 -58
  632. package/evals/reports/runtime/script-sandbox-adapter-selection-review-1-report.md +0 -84
  633. package/evals/reports/runtime/script-sandbox-probe-resource-hardening-1-report.md +0 -51
  634. package/evals/reports/runtime/storage-policy-benchmark-1-report.md +0 -176
  635. package/evals/reports/runtime/vault-index-storage-spike-1-report.md +0 -39
  636. package/evals/reports/runtime/workflow-context-hook-1-report.md +0 -82
  637. package/evals/runbooks/adversarial-eval-runbook.md +0 -28
  638. package/evals/runbooks/fixture-eval-runbook.md +0 -137
  639. package/evals/runbooks/handoff-eval-runbook.md +0 -22
  640. package/evals/runbooks/verify-work-eval-runbook.md +0 -27
  641. package/evals/scripts/audit-command-surface.sh +0 -160
  642. package/evals/scripts/check-activation-contract.sh +0 -121
  643. package/evals/scripts/check-runtime-context-hook.sh +0 -183
  644. package/evals/scripts/grade-fixture-eval.sh +0 -446
  645. package/evals/scripts/run-claude-fixture-eval.sh +0 -26
  646. package/evals/scripts/run-codex-fixture-eval.sh +0 -26
  647. package/evals/scripts/run-eryx-python-proof-spike.js +0 -559
  648. package/evals/scripts/run-fixture-eval-by-id.sh +0 -23
  649. package/evals/scripts/run-fixture-eval.sh +0 -464
  650. package/evals/scripts/run-jq-wasm-proof-spike.js +0 -299
  651. package/evals/scripts/run-output-router-transform-eval.js +0 -115
  652. package/evals/scripts/run-pi-observed-routing-eval.js +0 -478
  653. package/evals/scripts/run-quickjs-wasi-proof-spike.js +0 -339
  654. package/evals/scripts/skill-evidence.sh +0 -316
  655. package/evals/scripts/validate-release-metadata.sh +0 -486
  656. package/evals/suites/v0.1-acceptance-suite.md +0 -131
  657. package/pi-extension/dist/host-producer-identification.js +0 -186
  658. package/pi-extension/dist/mcp-config.js +0 -30
  659. package/pi-extension/dist/native-safety-net.js +0 -209
  660. package/pi-extension/dist/observed-tool-routing.js +0 -114
  661. package/pi-extension/dist/renderers.js +0 -835
  662. package/pi-extension/dist/router-tools.js +0 -438
  663. package/pi-extension/dist/runtime-context.js +0 -288
  664. package/pi-extension/dist/schemas.js +0 -254
  665. package/pi-extension/dist/status.js +0 -449
  666. package/pi-extension/dist/utils.js +0 -467
  667. package/pi-extension/src/runtime-context.ts +0 -347
  668. package/pi-extension/src/status.ts +0 -505
  669. package/plugin-docs/README.md +0 -40
  670. package/plugin-docs/adr/0001-three-modes.md +0 -27
  671. package/plugin-docs/adr/0002-evals-before-hooks.md +0 -17
  672. package/plugin-docs/adr/0003-release-boundary.md +0 -21
  673. package/plugin-docs/adr/0004-discover-replaces-shallow-discovery-skills.md +0 -26
  674. package/plugin-docs/adr/README.md +0 -10
  675. package/plugin-docs/architecture.md +0 -89
  676. package/plugin-docs/output-router.md +0 -396
  677. package/plugin-docs/release-evidence.md +0 -77
  678. package/plugin-docs/skills.md +0 -44
  679. package/plugin-docs/workflow.md +0 -57
  680. package/skills/diagnose-failure/references/feedback-loop-catalog.md +0 -25
  681. package/skills/discover/ARTIFACT-DESTINATIONS.md +0 -58
  682. package/skills/discover/CHECKPOINTS.md +0 -74
  683. package/skills/discover/SKILL.md +0 -173
  684. package/skills/evaluate-skill/references/eval-patterns.md +0 -41
  685. package/skills/evaluate-skill/references/grading-priority.md +0 -33
  686. package/skills/execute-plan/SKILL.md +0 -133
  687. package/skills/execute-plan/references/execution-map.md +0 -122
  688. package/skills/interview-gate/SKILL.md +0 -90
  689. package/skills/workflow/references/workflow-map.md +0 -104
  690. /package/pi-extension/src/{mcp-config.ts → integrations/mcp-config.ts} +0 -0
@@ -3,459 +3,498 @@ import { tmpdir } from "node:os";
3
3
  import { dirname, join, relative, resolve } from "node:path";
4
4
  import { fileURLToPath } from "node:url";
5
5
  import { performance } from "node:perf_hooks";
6
- import { approximateTokens, defaultJsonRunReportPath, escapeMarkdownTableCell as escapeTable, formatPercent, latencySummary, normalizeIterations, parseBenchmarkCliArgs, reductionPercent, writeBenchmarkReportPair, } from "./benchmark-harness.js";
6
+ import {
7
+ approximateTokens,
8
+ defaultJsonRunReportPath,
9
+ escapeMarkdownTableCell as escapeTable,
10
+ formatPercent,
11
+ latencySummary,
12
+ normalizeIterations,
13
+ parseBenchmarkCliArgs,
14
+ reductionPercent,
15
+ writeBenchmarkReportPair,
16
+ } from "./benchmark-harness.js";
7
17
  import { freeflowSearch } from "../tools/search.js";
8
- const SANDBOX_DOC_PATH = "docs/codex-cli-agent-harness/2026-06-12-pass-3-sandboxing-and-permissions.md";
18
+ const SANDBOX_DOC_PATH = "router/evals/fixtures/output-router-corpus/sandbox-permissions.md";
9
19
  const GENERATED_GRAPH_PATH = "graphify-out/graph.html";
10
- const SANDBOX_QUESTION = "Find the Sandbox Permissions section, report file/lines, and explain UseDefault, RequireEscalated, and WithAdditionalPermissions.";
11
- const SANDBOX_QUERY = "Sandbox Permissions SandboxPermissions UseDefault RequireEscalated WithAdditionalPermissions Plain-language meaning";
20
+ const SANDBOX_QUESTION =
21
+ "Find the Sandbox Permissions section, report file/lines, and explain UseDefault, RequireEscalated, and WithAdditionalPermissions.";
22
+ const SANDBOX_QUERY =
23
+ "Sandbox Permissions SandboxPermissions UseDefault RequireEscalated WithAdditionalPermissions Plain-language meaning";
12
24
  const SANDBOX_REQUIRED_EVIDENCE = [
13
- "SandboxPermissions is a per-command request shape",
14
- "UseDefault",
15
- "Run with the turn's normal sandbox",
16
- "RequireEscalated",
17
- "Request unsandboxed execution",
18
- "WithAdditionalPermissions",
19
- "Stay sandboxed but widen permissions for this one command",
25
+ "SandboxPermissions is a per-command request shape",
26
+ "UseDefault",
27
+ "Run with the turn's normal sandbox",
28
+ "RequireEscalated",
29
+ "Request unsandboxed execution",
30
+ "WithAdditionalPermissions",
31
+ "Stay sandboxed but widen permissions for this one command",
20
32
  ];
21
33
  const SANDBOX_REQUIRED_ANSWER = [
22
- "UseDefault: run with the turn's normal sandbox",
23
- "RequireEscalated: request unsandboxed execution",
24
- "WithAdditionalPermissions: stay sandboxed but widen permissions for this one command",
34
+ "UseDefault: run with the turn's normal sandbox",
35
+ "RequireEscalated: request unsandboxed execution",
36
+ "WithAdditionalPermissions: stay sandboxed but widen permissions for this one command",
25
37
  ];
26
38
  export async function runCodexQaBenchmarks(options = {}) {
27
- const iterations = normalizeIterations(options.iterations, 1);
28
- const fixture = await createSandboxPermissionsFixture();
29
- try {
30
- const results = [];
31
- const modeResults = [];
32
- for (const mode of ["native-broad-search-proxy", "improved-freeflow-router"]) {
33
- modeResults.push(await runModeIterations(fixture, mode, iterations));
34
- }
35
- results.push({
36
- id: fixture.id,
37
- title: fixture.title,
38
- question: fixture.question,
39
- expected: fixture.expected,
40
- results: modeResults,
41
- });
42
- return {
43
- generatedAt: options.generatedAt ?? new Date().toISOString(),
44
- iterations,
45
- summary: summarizeCodexQaReport(results),
46
- fixtures: results,
47
- skippedExternalTools: skippedExternalTools(),
48
- };
49
- }
50
- finally {
51
- await fixture.cleanup();
39
+ const iterations = normalizeIterations(options.iterations, 1);
40
+ const fixture = await createSandboxPermissionsFixture();
41
+ try {
42
+ const results = [];
43
+ const modeResults = [];
44
+ for (const mode of ["native-broad-search-proxy", "improved-freeflow-router"]) {
45
+ modeResults.push(await runModeIterations(fixture, mode, iterations));
52
46
  }
47
+ results.push({
48
+ id: fixture.id,
49
+ title: fixture.title,
50
+ question: fixture.question,
51
+ expected: fixture.expected,
52
+ results: modeResults,
53
+ });
54
+ return {
55
+ generatedAt: options.generatedAt ?? new Date().toISOString(),
56
+ iterations,
57
+ summary: summarizeCodexQaReport(results),
58
+ fixtures: results,
59
+ skippedExternalTools: skippedExternalTools(),
60
+ };
61
+ } finally {
62
+ await fixture.cleanup();
63
+ }
53
64
  }
54
65
  export async function writeCodexQaBenchmarkReports(report, markdownReportPath, options = {}) {
55
- return writeBenchmarkReportPair({
56
- report,
57
- markdownReportPath,
58
- jsonReportPath: options.jsonReportPath ?? defaultJsonRunReportPath(markdownReportPath),
59
- renderMarkdown: renderCodexQaBenchmarkReport,
60
- });
66
+ return writeBenchmarkReportPair({
67
+ report,
68
+ markdownReportPath,
69
+ jsonReportPath: options.jsonReportPath ?? defaultJsonRunReportPath(markdownReportPath),
70
+ renderMarkdown: renderCodexQaBenchmarkReport,
71
+ });
61
72
  }
62
73
  export function renderCodexQaBenchmarkReport(report) {
63
- const lines = [
64
- "# Codex Structured Q&A Macro Benchmark Report - Iteration 1",
65
- "",
66
- `Date: ${report.generatedAt.slice(0, 10)}`,
67
- "",
68
- "## Scope",
69
- "",
70
- "Fast, deterministic Stage 1 macro benchmark for the Codex CLI agent-harness research corpus. The benchmark asks one structured Q&A question derived from the Sandbox Permissions pass and grades retrieval-backed answer quality, citation quality, evidence quality, context size, and latency.",
71
- "",
72
- "The fixture uses existing Freeflow research docs as oracle scaffolding and includes a generated `graphify-out` decoy to preserve the original broad-retrieval failure shape. Upstream Codex source citation comparison is marked skipped until a source snapshot is explicitly supplied.",
73
- "",
74
- "## Command",
75
- "",
76
- "```sh",
77
- "npm run bench:router:codex-qa",
78
- "```",
79
- "",
80
- "The CLI writes machine-readable JSON under `evals/runs/output-router/` by default. That JSON is generated run data; this Markdown file is the durable runtime report.",
81
- "",
82
- "## Summary",
83
- "",
84
- `- Iterations per mode: ${report.iterations}`,
85
- `- Fixtures: ${report.summary.fixtures}`,
86
- `- Improved Freeflow Router gated pass: ${report.summary.improved.passed}/${report.summary.fixtures}`,
87
- `- Native broad-search proxy pass: ${report.summary.nativeBaseline.passed}/${report.summary.fixtures}`,
88
- `- Sandbox failure fixed: ${report.summary.sandboxFailureFixed ? "yes" : "no"}`,
89
- `- Generated false positives observed: ${report.summary.generatedFalsePositiveCount}/${report.summary.modeResults} mode results`,
90
- `- Improved answer/citation/evidence: ${report.summary.improved.answerCorrect}/${report.summary.fixtures} answer, ${report.summary.improved.citationCorrect}/${report.summary.fixtures} citation, ${report.summary.improved.evidenceCorrect}/${report.summary.fixtures} evidence`,
91
- `- Improved weighted byte/token reduction: ${formatPercent(report.summary.improved.weightedByteReductionPercent)} / ${formatPercent(report.summary.improved.weightedTokenReductionPercent)} (${report.summary.improved.totalRawBytes}/${report.summary.improved.totalRawTokensApprox} raw to ${report.summary.improved.totalContextBytes}/${report.summary.improved.totalContextTokensApprox} context)`,
92
- "",
93
- "## Results",
94
- "",
95
- "| fixture | mode | correctness | checks | path | lines | raw bytes/tokens | context bytes/tokens | byte/token reduction | latency p50/p95 ms | proxy calls | answer | notes |",
96
- "| --- | --- | --- | --- | --- | --- | ---: | ---: | ---: | ---: | ---: | --- | --- |",
97
- ];
98
- for (const fixture of report.fixtures) {
99
- for (const result of fixture.results) {
100
- lines.push([
101
- fixture.id,
102
- result.mode,
103
- result.correctness.passed ? "pass" : "fail",
104
- `answer ${mark(result.correctness.answerCorrect)} citation ${mark(result.correctness.citationCorrect)} evidence ${mark(result.correctness.evidenceCorrect)} gen-fp ${mark(!result.correctness.generatedFalsePositive)}`,
105
- result.actualPath ?? "-",
106
- result.actualLines ?? "-",
107
- `${result.rawBytes}/${result.rawTokensApprox}`,
108
- `${result.contextBytes}/${result.contextTokensApprox}`,
109
- `${formatPercent(result.byteReductionPercent)}/${formatPercent(result.tokenReductionPercent)}`,
110
- `${result.latencyMs.p50.toFixed(2)}/${result.latencyMs.p95.toFixed(2)}`,
111
- String(result.proxyCalls),
112
- result.answer,
113
- result.notes.join("; "),
114
- ].map((cell) => escapeTable(String(cell))).join(" | ").replace(/^/, "|").replace(/$/, " |"));
115
- }
116
- }
117
- lines.push("", "## Fixture Questions", "");
118
- for (const fixture of report.fixtures) {
119
- lines.push(`- ${fixture.id}: ${fixture.question}`);
120
- lines.push(` - expected doc: \`${fixture.expected.path}\``);
121
- lines.push(` - upstream source citation comparison: ${fixture.expected.sourceCitationStatus}`);
122
- }
123
- lines.push("", "## Skipped External Comparators", "");
124
- for (const skipped of report.skippedExternalTools) {
125
- lines.push(`- ${skipped.name}: ${skipped.reason}`);
74
+ const lines = [
75
+ "# Codex Structured Q&A Macro Benchmark Report - Iteration 1",
76
+ "",
77
+ `Date: ${report.generatedAt.slice(0, 10)}`,
78
+ "",
79
+ "## Scope",
80
+ "",
81
+ "Fast, deterministic Stage 1 macro benchmark for the neutral Output Router research corpus. The benchmark asks one structured Q&A question from the Sandbox Permissions fixture and grades retrieval-backed answer quality, citation quality, evidence quality, context size, and latency.",
82
+ "",
83
+ "The fixture uses existing Freeflow research docs as oracle scaffolding and includes a generated `graphify-out` decoy to preserve the original broad-retrieval failure shape. Upstream Codex source citation comparison is marked skipped until a source snapshot is explicitly supplied.",
84
+ "",
85
+ "## Command",
86
+ "",
87
+ "```sh",
88
+ "npm run bench:router:codex-qa",
89
+ "```",
90
+ "",
91
+ "The CLI writes machine-readable JSON under `router/evals/runs/` by default. That JSON is generated run data; this Markdown file is the durable runtime report.",
92
+ "",
93
+ "## Summary",
94
+ "",
95
+ `- Iterations per mode: ${report.iterations}`,
96
+ `- Fixtures: ${report.summary.fixtures}`,
97
+ `- Improved Freeflow Router gated pass: ${report.summary.improved.passed}/${report.summary.fixtures}`,
98
+ `- Native broad-search proxy pass: ${report.summary.nativeBaseline.passed}/${report.summary.fixtures}`,
99
+ `- Sandbox failure fixed: ${report.summary.sandboxFailureFixed ? "yes" : "no"}`,
100
+ `- Generated false positives observed: ${report.summary.generatedFalsePositiveCount}/${report.summary.modeResults} mode results`,
101
+ `- Improved answer/citation/evidence: ${report.summary.improved.answerCorrect}/${report.summary.fixtures} answer, ${report.summary.improved.citationCorrect}/${report.summary.fixtures} citation, ${report.summary.improved.evidenceCorrect}/${report.summary.fixtures} evidence`,
102
+ `- Improved weighted byte/token reduction: ${formatPercent(report.summary.improved.weightedByteReductionPercent)} / ${formatPercent(report.summary.improved.weightedTokenReductionPercent)} (${report.summary.improved.totalRawBytes}/${report.summary.improved.totalRawTokensApprox} raw to ${report.summary.improved.totalContextBytes}/${report.summary.improved.totalContextTokensApprox} context)`,
103
+ "",
104
+ "## Results",
105
+ "",
106
+ "| fixture | mode | correctness | checks | path | lines | raw bytes/tokens | context bytes/tokens | byte/token reduction | latency p50/p95 ms | proxy calls | answer | notes |",
107
+ "| --- | --- | --- | --- | --- | --- | ---: | ---: | ---: | ---: | ---: | --- | --- |",
108
+ ];
109
+ for (const fixture of report.fixtures) {
110
+ for (const result of fixture.results) {
111
+ lines.push(
112
+ [
113
+ fixture.id,
114
+ result.mode,
115
+ result.correctness.passed ? "pass" : "fail",
116
+ `answer ${mark(result.correctness.answerCorrect)} citation ${mark(result.correctness.citationCorrect)} evidence ${mark(result.correctness.evidenceCorrect)} gen-fp ${mark(!result.correctness.generatedFalsePositive)}`,
117
+ result.actualPath ?? "-",
118
+ result.actualLines ?? "-",
119
+ `${result.rawBytes}/${result.rawTokensApprox}`,
120
+ `${result.contextBytes}/${result.contextTokensApprox}`,
121
+ `${formatPercent(result.byteReductionPercent)}/${formatPercent(result.tokenReductionPercent)}`,
122
+ `${result.latencyMs.p50.toFixed(2)}/${result.latencyMs.p95.toFixed(2)}`,
123
+ String(result.proxyCalls),
124
+ result.answer,
125
+ result.notes.join("; "),
126
+ ]
127
+ .map((cell) => escapeTable(String(cell)))
128
+ .join(" | ")
129
+ .replace(/^/, "|")
130
+ .replace(/$/, " |"),
131
+ );
126
132
  }
127
- return `${lines.join("\n")}\n`;
133
+ }
134
+ lines.push("", "## Fixture Questions", "");
135
+ for (const fixture of report.fixtures) {
136
+ lines.push(`- ${fixture.id}: ${fixture.question}`);
137
+ lines.push(` - expected doc: \`${fixture.expected.path}\``);
138
+ lines.push(` - upstream source citation comparison: ${fixture.expected.sourceCitationStatus}`);
139
+ }
140
+ lines.push("", "## Skipped External Comparators", "");
141
+ for (const skipped of report.skippedExternalTools) {
142
+ lines.push(`- ${skipped.name}: ${skipped.reason}`);
143
+ }
144
+ return `${lines.join("\n")}\n`;
128
145
  }
129
146
  async function runModeIterations(fixture, mode, iterations) {
130
- const latencies = [];
131
- let firstObservation;
132
- for (let index = 0; index < iterations; index += 1) {
133
- const startedAt = performance.now();
134
- const observation = mode === "native-broad-search-proxy"
135
- ? await nativeBroadSearchObservation(fixture)
136
- : await improvedFreeflowObservation(fixture);
137
- latencies.push(performance.now() - startedAt);
138
- firstObservation ??= observation;
139
- }
140
- if (!firstObservation) {
141
- throw new Error("Codex Q&A benchmark produced no observation");
142
- }
143
- const correctness = gradeObservation(fixture, firstObservation);
144
- return {
145
- mode,
146
- toolPathUsed: firstObservation.toolPathUsed,
147
- skipped: false,
148
- proxyCalls: firstObservation.proxyCalls,
149
- rawBytes: firstObservation.rawBytes,
150
- rawTokensApprox: approximateTokens(firstObservation.rawBytes),
151
- contextBytes: firstObservation.contextBytes,
152
- contextTokensApprox: approximateTokens(firstObservation.contextBytes),
153
- byteReductionPercent: reductionPercent(firstObservation.rawBytes, firstObservation.contextBytes),
154
- tokenReductionPercent: reductionPercent(approximateTokens(firstObservation.rawBytes), approximateTokens(firstObservation.contextBytes)),
155
- latencyMs: latencySummary(latencies),
156
- ...(firstObservation.actualPath !== undefined ? { actualPath: firstObservation.actualPath } : {}),
157
- ...(firstObservation.actualLines !== undefined ? { actualLines: firstObservation.actualLines } : {}),
158
- answer: firstObservation.answer,
159
- evidenceExcerpt: firstObservation.evidenceExcerpt,
160
- correctness,
161
- notes: firstObservation.notes,
162
- };
147
+ const latencies = [];
148
+ let firstObservation;
149
+ for (let index = 0; index < iterations; index += 1) {
150
+ const startedAt = performance.now();
151
+ const observation =
152
+ mode === "native-broad-search-proxy"
153
+ ? await nativeBroadSearchObservation(fixture)
154
+ : await improvedFreeflowObservation(fixture);
155
+ latencies.push(performance.now() - startedAt);
156
+ firstObservation ??= observation;
157
+ }
158
+ if (!firstObservation) {
159
+ throw new Error("Codex Q&A benchmark produced no observation");
160
+ }
161
+ const correctness = gradeObservation(fixture, firstObservation);
162
+ return {
163
+ mode,
164
+ toolPathUsed: firstObservation.toolPathUsed,
165
+ skipped: false,
166
+ proxyCalls: firstObservation.proxyCalls,
167
+ rawBytes: firstObservation.rawBytes,
168
+ rawTokensApprox: approximateTokens(firstObservation.rawBytes),
169
+ contextBytes: firstObservation.contextBytes,
170
+ contextTokensApprox: approximateTokens(firstObservation.contextBytes),
171
+ byteReductionPercent: reductionPercent(firstObservation.rawBytes, firstObservation.contextBytes),
172
+ tokenReductionPercent: reductionPercent(
173
+ approximateTokens(firstObservation.rawBytes),
174
+ approximateTokens(firstObservation.contextBytes),
175
+ ),
176
+ latencyMs: latencySummary(latencies),
177
+ ...(firstObservation.actualPath !== undefined ? { actualPath: firstObservation.actualPath } : {}),
178
+ ...(firstObservation.actualLines !== undefined ? { actualLines: firstObservation.actualLines } : {}),
179
+ answer: firstObservation.answer,
180
+ evidenceExcerpt: firstObservation.evidenceExcerpt,
181
+ correctness,
182
+ notes: firstObservation.notes,
183
+ };
163
184
  }
164
185
  async function improvedFreeflowObservation(fixture) {
165
- const queryResult = await freeflowSearch({
166
- action: "query",
186
+ const queryResult = await freeflowSearch({
187
+ action: "query",
188
+ source: { kind: "repo", root: fixture.root },
189
+ query: fixture.query,
190
+ preserve: "important",
191
+ topK: 1,
192
+ });
193
+ const seedEvidence = queryResult.evidence?.[0];
194
+ const expandedResult = seedEvidence
195
+ ? await freeflowSearch({
196
+ action: "expand",
167
197
  source: { kind: "repo", root: fixture.root },
168
- query: fixture.query,
198
+ evidence: seedEvidence,
199
+ expansion: "lines_30",
169
200
  preserve: "important",
170
- topK: 1,
171
- });
172
- const seedEvidence = queryResult.evidence?.[0];
173
- const expandedResult = seedEvidence
174
- ? await freeflowSearch({
175
- action: "expand",
176
- source: { kind: "repo", root: fixture.root },
177
- evidence: seedEvidence,
178
- expansion: "lines_30",
179
- preserve: "important",
180
- })
181
- : undefined;
182
- const evidence = expandedResult?.evidence?.[0] ?? seedEvidence;
183
- const evidenceExcerpt = evidence?.excerpt ?? "";
184
- return {
185
- toolPathUsed: "freeflowSearch repo query + expand",
186
- proxyCalls: expandedResult ? 2 : 1,
187
- rawBytes: await repoRawBytes(fixture.root),
188
- contextBytes: byteLength(JSON.stringify(queryResult)) + byteLength(JSON.stringify(expandedResult ?? {})),
189
- ...(evidence?.path !== undefined ? { actualPath: evidence.path } : {}),
190
- ...(evidence?.lines !== undefined ? { actualLines: evidence.lines } : {}),
191
- evidenceExcerpt,
192
- answer: answerFromEvidence(evidence, evidenceExcerpt),
193
- notes: [queryResult.routing.reason, ...(expandedResult ? [expandedResult.routing.reason] : ["expand skipped: no seed evidence"])],
194
- };
201
+ })
202
+ : undefined;
203
+ const evidence = expandedResult?.evidence?.[0] ?? seedEvidence;
204
+ const evidenceExcerpt = evidence?.excerpt ?? "";
205
+ return {
206
+ toolPathUsed: "freeflowSearch repo query + expand",
207
+ proxyCalls: expandedResult ? 2 : 1,
208
+ rawBytes: await repoRawBytes(fixture.root),
209
+ contextBytes: byteLength(JSON.stringify(queryResult)) + byteLength(JSON.stringify(expandedResult ?? {})),
210
+ ...(evidence?.path !== undefined ? { actualPath: evidence.path } : {}),
211
+ ...(evidence?.lines !== undefined ? { actualLines: evidence.lines } : {}),
212
+ evidenceExcerpt,
213
+ answer: answerFromEvidence(evidence, evidenceExcerpt),
214
+ notes: [
215
+ queryResult.routing.reason,
216
+ ...(expandedResult ? [expandedResult.routing.reason] : ["expand skipped: no seed evidence"]),
217
+ ],
218
+ };
195
219
  }
196
220
  async function nativeBroadSearchObservation(fixture) {
197
- const files = await readRepoTextFiles(fixture.root);
198
- const tokens = tokenize(fixture.query);
199
- const scored = files
200
- .map((file) => ({ ...file, score: scoreText(file.text, tokens) }))
201
- .filter((file) => file.score > 0)
202
- .sort((a, b) => b.score - a.score || b.bytes - a.bytes || a.path.localeCompare(b.path));
203
- const selected = scored[0];
204
- const evidenceExcerpt = selected?.text ?? "";
205
- return {
206
- toolPathUsed: "native broad text-search proxy including generated artifacts",
207
- proxyCalls: 1,
208
- rawBytes: await repoRawBytes(fixture.root),
209
- contextBytes: byteLength(evidenceExcerpt),
210
- ...(selected?.path !== undefined ? { actualPath: selected.path } : {}),
211
- ...(selected ? { actualLines: `1-${selected.lineCount}` } : {}),
212
- evidenceExcerpt,
213
- answer: answerFromEvidence(selected ? { path: selected.path, lines: `1-${selected.lineCount}` } : undefined, evidenceExcerpt),
214
- notes: selected ? [`lexical score=${selected.score}`] : ["no native match"],
215
- };
221
+ const files = await readRepoTextFiles(fixture.root);
222
+ const tokens = tokenize(fixture.query);
223
+ const scored = files
224
+ .map((file) => ({ ...file, score: scoreText(file.text, tokens) }))
225
+ .filter((file) => file.score > 0)
226
+ .sort((a, b) => b.score - a.score || b.bytes - a.bytes || a.path.localeCompare(b.path));
227
+ const selected = scored[0];
228
+ const evidenceExcerpt = selected?.text ?? "";
229
+ return {
230
+ toolPathUsed: "native broad text-search proxy including generated artifacts",
231
+ proxyCalls: 1,
232
+ rawBytes: await repoRawBytes(fixture.root),
233
+ contextBytes: byteLength(evidenceExcerpt),
234
+ ...(selected?.path !== undefined ? { actualPath: selected.path } : {}),
235
+ ...(selected ? { actualLines: `1-${selected.lineCount}` } : {}),
236
+ evidenceExcerpt,
237
+ answer: answerFromEvidence(
238
+ selected ? { path: selected.path, lines: `1-${selected.lineCount}` } : undefined,
239
+ evidenceExcerpt,
240
+ ),
241
+ notes: selected ? [`lexical score=${selected.score}`] : ["no native match"],
242
+ };
216
243
  }
217
244
  function gradeObservation(fixture, observation) {
218
- const answerCorrect = fixture.expected.requiredAnswer.every((phrase) => includesNormalized(observation.answer, phrase));
219
- const citationCorrect = observation.actualPath === fixture.expected.path && typeof observation.actualLines === "string";
220
- const evidenceCorrect = fixture.expected.requiredEvidence.every((phrase) => includesNormalized(observation.evidenceExcerpt, phrase));
221
- const generatedFalsePositive = observation.actualPath?.startsWith("graphify-out/") ?? false;
222
- return {
223
- passed: answerCorrect && citationCorrect && evidenceCorrect && !generatedFalsePositive,
224
- answerCorrect,
225
- citationCorrect,
226
- evidenceCorrect,
227
- generatedFalsePositive,
228
- };
245
+ const answerCorrect = fixture.expected.requiredAnswer.every((phrase) =>
246
+ includesNormalized(observation.answer, phrase),
247
+ );
248
+ const citationCorrect =
249
+ observation.actualPath === fixture.expected.path && typeof observation.actualLines === "string";
250
+ const evidenceCorrect = fixture.expected.requiredEvidence.every((phrase) =>
251
+ includesNormalized(observation.evidenceExcerpt, phrase),
252
+ );
253
+ const generatedFalsePositive = observation.actualPath?.startsWith("graphify-out/") ?? false;
254
+ return {
255
+ passed: answerCorrect && citationCorrect && evidenceCorrect && !generatedFalsePositive,
256
+ answerCorrect,
257
+ citationCorrect,
258
+ evidenceCorrect,
259
+ generatedFalsePositive,
260
+ };
229
261
  }
230
262
  function summarizeCodexQaReport(fixtures) {
231
- const improved = summarizeMode(fixtures, "improved-freeflow-router");
232
- const nativeBaseline = summarizeMode(fixtures, "native-broad-search-proxy");
233
- const modeResults = fixtures.reduce((count, fixture) => count + fixture.results.length, 0);
234
- const generatedFalsePositiveCount = fixtures
235
- .flatMap((fixture) => fixture.results)
236
- .filter((result) => result.correctness.generatedFalsePositive).length;
237
- return {
238
- fixtures: fixtures.length,
239
- modeResults,
240
- improved,
241
- nativeBaseline,
242
- sandboxFailureFixed: improved.failed === 0 && nativeBaseline.generatedFalsePositiveCount > 0,
243
- generatedFalsePositiveCount,
244
- };
263
+ const improved = summarizeMode(fixtures, "improved-freeflow-router");
264
+ const nativeBaseline = summarizeMode(fixtures, "native-broad-search-proxy");
265
+ const modeResults = fixtures.reduce((count, fixture) => count + fixture.results.length, 0);
266
+ const generatedFalsePositiveCount = fixtures
267
+ .flatMap((fixture) => fixture.results)
268
+ .filter((result) => result.correctness.generatedFalsePositive).length;
269
+ return {
270
+ fixtures: fixtures.length,
271
+ modeResults,
272
+ improved,
273
+ nativeBaseline,
274
+ sandboxFailureFixed: improved.failed === 0 && nativeBaseline.generatedFalsePositiveCount > 0,
275
+ generatedFalsePositiveCount,
276
+ };
245
277
  }
246
278
  function summarizeMode(fixtures, mode) {
247
- const results = fixtures
248
- .map((fixture) => fixture.results.find((result) => result.mode === mode))
249
- .filter((result) => Boolean(result));
250
- const totalRawBytes = results.reduce((sum, result) => sum + result.rawBytes, 0);
251
- const totalContextBytes = results.reduce((sum, result) => sum + result.contextBytes, 0);
252
- const totalRawTokensApprox = results.reduce((sum, result) => sum + result.rawTokensApprox, 0);
253
- const totalContextTokensApprox = results.reduce((sum, result) => sum + result.contextTokensApprox, 0);
254
- return results.reduce((summary, result) => {
255
- if (result.skipped) {
256
- summary.skipped += 1;
257
- }
258
- else if (result.correctness.passed) {
259
- summary.passed += 1;
260
- }
261
- else {
262
- summary.failed += 1;
263
- }
264
- if (result.correctness.answerCorrect) {
265
- summary.answerCorrect += 1;
266
- }
267
- if (result.correctness.citationCorrect) {
268
- summary.citationCorrect += 1;
269
- }
270
- if (result.correctness.evidenceCorrect) {
271
- summary.evidenceCorrect += 1;
272
- }
273
- if (result.correctness.generatedFalsePositive) {
274
- summary.generatedFalsePositiveCount += 1;
275
- }
276
- return summary;
277
- }, {
278
- passed: 0,
279
- failed: 0,
280
- skipped: 0,
281
- answerCorrect: 0,
282
- citationCorrect: 0,
283
- evidenceCorrect: 0,
284
- generatedFalsePositiveCount: 0,
285
- totalRawBytes,
286
- totalContextBytes,
287
- totalRawTokensApprox,
288
- totalContextTokensApprox,
289
- weightedByteReductionPercent: reductionPercent(totalRawBytes, totalContextBytes),
290
- weightedTokenReductionPercent: reductionPercent(totalRawTokensApprox, totalContextTokensApprox),
291
- });
279
+ const results = fixtures
280
+ .map((fixture) => fixture.results.find((result) => result.mode === mode))
281
+ .filter((result) => Boolean(result));
282
+ const totalRawBytes = results.reduce((sum, result) => sum + result.rawBytes, 0);
283
+ const totalContextBytes = results.reduce((sum, result) => sum + result.contextBytes, 0);
284
+ const totalRawTokensApprox = results.reduce((sum, result) => sum + result.rawTokensApprox, 0);
285
+ const totalContextTokensApprox = results.reduce((sum, result) => sum + result.contextTokensApprox, 0);
286
+ return results.reduce(
287
+ (summary, result) => {
288
+ if (result.skipped) {
289
+ summary.skipped += 1;
290
+ } else if (result.correctness.passed) {
291
+ summary.passed += 1;
292
+ } else {
293
+ summary.failed += 1;
294
+ }
295
+ if (result.correctness.answerCorrect) {
296
+ summary.answerCorrect += 1;
297
+ }
298
+ if (result.correctness.citationCorrect) {
299
+ summary.citationCorrect += 1;
300
+ }
301
+ if (result.correctness.evidenceCorrect) {
302
+ summary.evidenceCorrect += 1;
303
+ }
304
+ if (result.correctness.generatedFalsePositive) {
305
+ summary.generatedFalsePositiveCount += 1;
306
+ }
307
+ return summary;
308
+ },
309
+ {
310
+ passed: 0,
311
+ failed: 0,
312
+ skipped: 0,
313
+ answerCorrect: 0,
314
+ citationCorrect: 0,
315
+ evidenceCorrect: 0,
316
+ generatedFalsePositiveCount: 0,
317
+ totalRawBytes,
318
+ totalContextBytes,
319
+ totalRawTokensApprox,
320
+ totalContextTokensApprox,
321
+ weightedByteReductionPercent: reductionPercent(totalRawBytes, totalContextBytes),
322
+ weightedTokenReductionPercent: reductionPercent(totalRawTokensApprox, totalContextTokensApprox),
323
+ },
324
+ );
292
325
  }
293
326
  async function createSandboxPermissionsFixture() {
294
- const root = await mkdtemp(join(tmpdir(), "freeflow-codex-qa-fixture-"));
295
- await writeTextFile(join(root, SANDBOX_DOC_PATH), sandboxDocumentText());
296
- await writeTextFile(join(root, GENERATED_GRAPH_PATH), [
297
- "<html><body>",
298
- `${"Sandbox Permissions SandboxPermissions UseDefault RequireEscalated WithAdditionalPermissions Plain-language meaning ".repeat(5_000)}GENERATED_GRAPH_DECOY_SENTINEL`,
299
- "</body></html>",
300
- ].join("\n"));
301
- return {
302
- id: "sandbox-permissions-structured-qa",
303
- title: "Sandbox Permissions structured Q&A",
304
- question: SANDBOX_QUESTION,
305
- query: SANDBOX_QUERY,
306
- expected: {
307
- path: SANDBOX_DOC_PATH,
308
- requiredEvidence: SANDBOX_REQUIRED_EVIDENCE,
309
- requiredAnswer: SANDBOX_REQUIRED_ANSWER,
310
- sourceCitationStatus: "skipped-unavailable",
311
- },
312
- root,
313
- cleanup: () => rm(root, { recursive: true, force: true }),
314
- };
327
+ const root = await mkdtemp(join(tmpdir(), "freeflow-codex-qa-fixture-"));
328
+ await writeTextFile(join(root, SANDBOX_DOC_PATH), sandboxDocumentText());
329
+ await writeTextFile(
330
+ join(root, GENERATED_GRAPH_PATH),
331
+ [
332
+ "<html><body>",
333
+ `${"Sandbox Permissions SandboxPermissions UseDefault RequireEscalated WithAdditionalPermissions Plain-language meaning ".repeat(5_000)}GENERATED_GRAPH_DECOY_SENTINEL`,
334
+ "</body></html>",
335
+ ].join("\n"),
336
+ );
337
+ return {
338
+ id: "sandbox-permissions-structured-qa",
339
+ title: "Sandbox Permissions structured Q&A",
340
+ question: SANDBOX_QUESTION,
341
+ query: SANDBOX_QUERY,
342
+ expected: {
343
+ path: SANDBOX_DOC_PATH,
344
+ requiredEvidence: SANDBOX_REQUIRED_EVIDENCE,
345
+ requiredAnswer: SANDBOX_REQUIRED_ANSWER,
346
+ sourceCitationStatus: "skipped-unavailable",
347
+ },
348
+ root,
349
+ cleanup: () => rm(root, { recursive: true, force: true }),
350
+ };
315
351
  }
316
352
  function sandboxDocumentText() {
317
- return [
318
- "# Pass 3",
319
- "",
320
- "### Sandbox Permissions",
321
- "",
322
- "SandboxPermissions is a per-command request shape.",
323
- "",
324
- "Codex defines:",
325
- "",
326
- "```text",
327
- "UseDefault",
328
- "RequireEscalated",
329
- "WithAdditionalPermissions",
330
- "```",
331
- "",
332
- "Plain-language meaning:",
333
- "",
334
- "```text",
335
- "UseDefault:",
336
- " Run with the turn's normal sandbox.",
337
- "",
338
- "RequireEscalated:",
339
- " Request unsandboxed execution.",
340
- "",
341
- "WithAdditionalPermissions:",
342
- " Stay sandboxed but widen permissions for this one command.",
343
- "```",
344
- "",
345
- "This is a strong pattern for local agents.",
346
- ].join("\n");
353
+ return [
354
+ "# Pass 3",
355
+ "",
356
+ "### Sandbox Permissions",
357
+ "",
358
+ "SandboxPermissions is a per-command request shape.",
359
+ "",
360
+ "Codex defines:",
361
+ "",
362
+ "```text",
363
+ "UseDefault",
364
+ "RequireEscalated",
365
+ "WithAdditionalPermissions",
366
+ "```",
367
+ "",
368
+ "Plain-language meaning:",
369
+ "",
370
+ "```text",
371
+ "UseDefault:",
372
+ " Run with the turn's normal sandbox.",
373
+ "",
374
+ "RequireEscalated:",
375
+ " Request unsandboxed execution.",
376
+ "",
377
+ "WithAdditionalPermissions:",
378
+ " Stay sandboxed but widen permissions for this one command.",
379
+ "```",
380
+ "",
381
+ "This is a strong pattern for local agents.",
382
+ ].join("\n");
347
383
  }
348
384
  function answerFromEvidence(evidence, text) {
349
- const citation = evidence?.path ? `${evidence.path}${evidence.lines ? `:${evidence.lines}` : ""}` : "unknown source";
350
- const facts = [];
351
- if (includesNormalized(text, "Run with the turn's normal sandbox")) {
352
- facts.push("UseDefault: run with the turn's normal sandbox");
353
- }
354
- if (includesNormalized(text, "Request unsandboxed execution")) {
355
- facts.push("RequireEscalated: request unsandboxed execution");
356
- }
357
- if (includesNormalized(text, "Stay sandboxed but widen permissions for this one command")) {
358
- facts.push("WithAdditionalPermissions: stay sandboxed but widen permissions for this one command");
359
- }
360
- if (facts.length === 0) {
361
- return `Sandbox Permissions evidence from ${citation} did not include enough plain-language definitions to answer.`;
362
- }
363
- return `Sandbox Permissions are documented at ${citation}. ${facts.join(". ")}.`;
385
+ const citation = evidence?.path ? `${evidence.path}${evidence.lines ? `:${evidence.lines}` : ""}` : "unknown source";
386
+ const facts = [];
387
+ if (includesNormalized(text, "Run with the turn's normal sandbox")) {
388
+ facts.push("UseDefault: run with the turn's normal sandbox");
389
+ }
390
+ if (includesNormalized(text, "Request unsandboxed execution")) {
391
+ facts.push("RequireEscalated: request unsandboxed execution");
392
+ }
393
+ if (includesNormalized(text, "Stay sandboxed but widen permissions for this one command")) {
394
+ facts.push("WithAdditionalPermissions: stay sandboxed but widen permissions for this one command");
395
+ }
396
+ if (facts.length === 0) {
397
+ return `Sandbox Permissions evidence from ${citation} did not include enough plain-language definitions to answer.`;
398
+ }
399
+ return `Sandbox Permissions are documented at ${citation}. ${facts.join(". ")}.`;
364
400
  }
365
401
  async function readRepoTextFiles(root) {
366
- const files = [];
367
- await walk(root, async (absolutePath) => {
368
- const text = await readFile(absolutePath, "utf8");
369
- files.push({
370
- path: relative(root, absolutePath),
371
- text,
372
- bytes: byteLength(text),
373
- lineCount: text.length === 0 ? 1 : text.split("\n").length,
374
- });
402
+ const files = [];
403
+ await walk(root, async (absolutePath) => {
404
+ const text = await readFile(absolutePath, "utf8");
405
+ files.push({
406
+ path: relative(root, absolutePath),
407
+ text,
408
+ bytes: byteLength(text),
409
+ lineCount: text.length === 0 ? 1 : text.split("\n").length,
375
410
  });
376
- return files;
411
+ });
412
+ return files;
377
413
  }
378
414
  async function repoRawBytes(root) {
379
- let total = 0;
380
- await walk(root, async (absolutePath) => {
381
- total += (await stat(absolutePath)).size;
382
- });
383
- return total;
415
+ let total = 0;
416
+ await walk(root, async (absolutePath) => {
417
+ total += (await stat(absolutePath)).size;
418
+ });
419
+ return total;
384
420
  }
385
421
  async function walk(root, visit) {
386
- const entries = await readdir(root, { withFileTypes: true });
387
- for (const entry of entries.sort((a, b) => a.name.localeCompare(b.name))) {
388
- const absolutePath = join(root, entry.name);
389
- if (entry.isDirectory()) {
390
- await walk(absolutePath, visit);
391
- }
392
- else if (entry.isFile()) {
393
- await visit(absolutePath);
394
- }
422
+ const entries = await readdir(root, { withFileTypes: true });
423
+ for (const entry of entries.sort((a, b) => a.name.localeCompare(b.name))) {
424
+ const absolutePath = join(root, entry.name);
425
+ if (entry.isDirectory()) {
426
+ await walk(absolutePath, visit);
427
+ } else if (entry.isFile()) {
428
+ await visit(absolutePath);
395
429
  }
430
+ }
396
431
  }
397
432
  async function writeTextFile(path, text) {
398
- await mkdir(dirname(path), { recursive: true });
399
- await writeFile(path, text, "utf8");
433
+ await mkdir(dirname(path), { recursive: true });
434
+ await writeFile(path, text, "utf8");
400
435
  }
401
436
  function scoreText(text, queryTokens) {
402
- const counts = tokenCounts(text);
403
- return queryTokens.reduce((score, token) => score + (counts.get(token) ?? 0), 0);
437
+ const counts = tokenCounts(text);
438
+ return queryTokens.reduce((score, token) => score + (counts.get(token) ?? 0), 0);
404
439
  }
405
440
  function tokenCounts(text) {
406
- const counts = new Map();
407
- for (const token of tokenize(text)) {
408
- counts.set(token, (counts.get(token) ?? 0) + 1);
409
- }
410
- return counts;
441
+ const counts = new Map();
442
+ for (const token of tokenize(text)) {
443
+ counts.set(token, (counts.get(token) ?? 0) + 1);
444
+ }
445
+ return counts;
411
446
  }
412
447
  function tokenize(text) {
413
- return text.toLowerCase().match(/[a-z0-9_./-]+/g) ?? [];
448
+ return text.toLowerCase().match(/[a-z0-9_./-]+/g) ?? [];
414
449
  }
415
450
  function includesNormalized(text, phrase) {
416
- return normalizeText(text).includes(normalizeText(phrase));
451
+ return normalizeText(text).includes(normalizeText(phrase));
417
452
  }
418
453
  function normalizeText(text) {
419
- return text.toLowerCase().replace(/[`*_]/g, "").replace(/\s+/g, " ").trim();
454
+ return text.toLowerCase().replace(/[`*_]/g, "").replace(/\s+/g, " ").trim();
420
455
  }
421
456
  function mark(value) {
422
- return value ? "✓" : "✗";
457
+ return value ? "✓" : "✗";
423
458
  }
424
459
  function byteLength(text) {
425
- return Buffer.byteLength(text, "utf8");
460
+ return Buffer.byteLength(text, "utf8");
426
461
  }
427
462
  function skippedExternalTools() {
428
- return [
429
- {
430
- name: "Graphify",
431
- reason: "Skipped unless a fresh graph for the benchmark fixture is explicitly supplied.",
432
- },
433
- {
434
- name: "Claude Context",
435
- reason: "Skipped unless an index is configured and fresh for the benchmark fixture.",
436
- },
437
- ];
463
+ return [
464
+ {
465
+ name: "Graphify",
466
+ reason: "Skipped unless a fresh graph for the benchmark fixture is explicitly supplied.",
467
+ },
468
+ {
469
+ name: "Claude Context",
470
+ reason: "Skipped unless an index is configured and fresh for the benchmark fixture.",
471
+ },
472
+ ];
438
473
  }
439
474
  function defaultReportPath() {
440
- return resolve(process.cwd(), "evals/reports/runtime/output-router-codex-qa-benchmark-1-report.md");
475
+ return resolve(process.cwd(), "router/evals/reports/output-router-codex-qa-benchmark-1-report.md");
441
476
  }
442
477
  async function main() {
443
- const { iterations, reportPath, jsonReportPath } = parseBenchmarkCliArgs(process.argv.slice(2), { reportPath: defaultReportPath() });
444
- const options = {};
445
- if (iterations !== undefined) {
446
- options.iterations = iterations;
447
- }
448
- const report = await runCodexQaBenchmarks(options);
449
- const reports = await writeCodexQaBenchmarkReports(report, reportPath, { jsonReportPath });
450
- console.log(`Freeflow Codex Q&A benchmark: improved ${report.summary.improved.passed}/${report.summary.fixtures} pass; native ${report.summary.nativeBaseline.passed}/${report.summary.fixtures} pass`);
451
- console.log(`Markdown report: ${reports.markdown}`);
452
- if (reports.json) {
453
- console.log(`JSON run data: ${reports.json}`);
454
- }
478
+ const { iterations, reportPath, jsonReportPath } = parseBenchmarkCliArgs(process.argv.slice(2), {
479
+ reportPath: defaultReportPath(),
480
+ });
481
+ const options = {};
482
+ if (iterations !== undefined) {
483
+ options.iterations = iterations;
484
+ }
485
+ const report = await runCodexQaBenchmarks(options);
486
+ const reports = await writeCodexQaBenchmarkReports(report, reportPath, { jsonReportPath });
487
+ console.log(
488
+ `Freeflow Codex Q&A benchmark: improved ${report.summary.improved.passed}/${report.summary.fixtures} pass; native ${report.summary.nativeBaseline.passed}/${report.summary.fixtures} pass`,
489
+ );
490
+ console.log(`Markdown report: ${reports.markdown}`);
491
+ if (reports.json) {
492
+ console.log(`JSON run data: ${reports.json}`);
493
+ }
455
494
  }
456
495
  if (process.argv[1] && fileURLToPath(import.meta.url) === resolve(process.argv[1])) {
457
- main().catch((error) => {
458
- console.error(error);
459
- process.exitCode = 1;
460
- });
496
+ main().catch((error) => {
497
+ console.error(error);
498
+ process.exitCode = 1;
499
+ });
461
500
  }