@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
@@ -2,465 +2,489 @@ import { selectEvidenceRangeForChunk } from "./evidence-range-selector.js";
2
2
  const DEFAULT_CONTEXT_LINES = 2;
3
3
  const QUERY_COVERAGE_MAX_LINES = 80;
4
4
  const STOPWORDS = new Set([
5
- "a",
6
- "an",
7
- "and",
8
- "are",
9
- "as",
10
- "at",
11
- "be",
12
- "by",
13
- "for",
14
- "from",
15
- "has",
16
- "in",
17
- "is",
18
- "it",
19
- "of",
20
- "on",
21
- "or",
22
- "that",
23
- "the",
24
- "this",
25
- "to",
26
- "with",
27
- "use",
5
+ "a",
6
+ "an",
7
+ "and",
8
+ "are",
9
+ "as",
10
+ "at",
11
+ "be",
12
+ "by",
13
+ "for",
14
+ "from",
15
+ "has",
16
+ "in",
17
+ "is",
18
+ "it",
19
+ "of",
20
+ "on",
21
+ "or",
22
+ "that",
23
+ "the",
24
+ "this",
25
+ "to",
26
+ "with",
27
+ "use",
28
28
  ]);
29
29
  export function searchRepoEvidenceCandidates(options) {
30
- const tokens = uniqueTokens(tokenize(options.query));
31
- const normalizedQueryPhrase = normalizePhraseSequence(options.query);
32
- const chunks = options.files.flatMap((file) => candidateChunksForFile(file));
33
- const matchingChunks = chunks.filter((chunk) => chunkMightMatch(chunk, tokens));
34
- const stats = chunkStats(matchingChunks);
35
- const scored = [];
36
- for (const chunk of matchingChunks) {
37
- const candidate = scoreCandidateChunk(chunk, tokens, normalizedQueryPhrase, stats, {
38
- defaultContextLines: options.defaultContextLines ?? DEFAULT_CONTEXT_LINES,
39
- queryCoverageMaxLines: options.queryCoverageMaxLines ?? QUERY_COVERAGE_MAX_LINES,
40
- });
41
- if (candidate) {
42
- scored.push(candidate);
43
- }
44
- }
45
- scored.sort((a, b) => b.score - a.score);
46
- const selected = [];
47
- const seen = new Set();
48
- for (const candidate of scored) {
49
- const key = candidate.file.path;
50
- if (seen.has(key)) {
51
- continue;
52
- }
53
- seen.add(key);
54
- selected.push(candidate);
55
- if (selected.length >= options.topK) {
56
- break;
57
- }
58
- }
59
- return selected;
30
+ const tokens = uniqueTokens(tokenize(options.query));
31
+ const normalizedQueryPhrase = normalizePhraseSequence(options.query);
32
+ const chunks = options.files.flatMap((file) => candidateChunksForFile(file));
33
+ const matchingChunks = chunks.filter((chunk) => chunkMightMatch(chunk, tokens));
34
+ const stats = chunkStats(matchingChunks);
35
+ const scored = [];
36
+ for (const chunk of matchingChunks) {
37
+ const candidate = scoreCandidateChunk(chunk, tokens, normalizedQueryPhrase, stats, {
38
+ defaultContextLines: options.defaultContextLines ?? DEFAULT_CONTEXT_LINES,
39
+ queryCoverageMaxLines: options.queryCoverageMaxLines ?? QUERY_COVERAGE_MAX_LINES,
40
+ });
41
+ if (candidate) {
42
+ scored.push(candidate);
43
+ }
44
+ }
45
+ scored.sort((a, b) => b.score - a.score);
46
+ const selected = [];
47
+ const seen = new Set();
48
+ for (const candidate of scored) {
49
+ const key = candidate.file.path;
50
+ if (seen.has(key)) {
51
+ continue;
52
+ }
53
+ seen.add(key);
54
+ selected.push(candidate);
55
+ if (selected.length >= options.topK) {
56
+ break;
57
+ }
58
+ }
59
+ return selected;
60
60
  }
61
61
  export function findBestLineForQuery(lines, query) {
62
- const tokens = tokenize(query);
63
- let bestLineIndex = null;
64
- let bestScore = 0;
65
- lines.forEach((line, lineIndex) => {
66
- const score = scoreText(line, tokens);
67
- if (score > bestScore) {
68
- bestLineIndex = lineIndex;
69
- bestScore = score;
70
- }
71
- });
72
- return bestLineIndex;
62
+ const tokens = tokenize(query);
63
+ let bestLineIndex = null;
64
+ let bestScore = 0;
65
+ lines.forEach((line, lineIndex) => {
66
+ const score = scoreText(line, tokens);
67
+ if (score > bestScore) {
68
+ bestLineIndex = lineIndex;
69
+ bestScore = score;
70
+ }
71
+ });
72
+ return bestLineIndex;
73
73
  }
74
74
  function candidateChunksForFile(file) {
75
- const structuralChunks = [];
76
- structuralChunks.push(...markdownPreambleChunk(file));
77
- structuralChunks.push(...markdownSectionChunks(file));
78
- structuralChunks.push(...codeSymbolChunks(file));
79
- return structuralChunks.length ? structuralChunks : lineWindowChunks(file);
75
+ const structuralChunks = [];
76
+ structuralChunks.push(...markdownPreambleChunk(file));
77
+ structuralChunks.push(...markdownSectionChunks(file));
78
+ structuralChunks.push(...codeSymbolChunks(file));
79
+ return structuralChunks.length ? structuralChunks : lineWindowChunks(file);
80
80
  }
81
81
  function markdownPreambleChunk(file) {
82
- const firstHeadingIndex = file.lines.findIndex((line) => line.trimStart().startsWith("#"));
83
- if (firstHeadingIndex <= 0) {
84
- return [];
85
- }
86
- const range = { start: 1, end: firstHeadingIndex };
87
- return [{
88
- file,
89
- range,
90
- text: file.lines.slice(range.start - 1, range.end).join("\n"),
91
- heading: "",
92
- kind: "section",
93
- }];
82
+ const firstHeadingIndex = file.lines.findIndex((line) => line.trimStart().startsWith("#"));
83
+ if (firstHeadingIndex <= 0) {
84
+ return [];
85
+ }
86
+ const range = { start: 1, end: firstHeadingIndex };
87
+ return [
88
+ {
89
+ file,
90
+ range,
91
+ text: file.lines.slice(range.start - 1, range.end).join("\n"),
92
+ heading: "",
93
+ kind: "section",
94
+ },
95
+ ];
94
96
  }
95
97
  function markdownSectionChunks(file) {
96
- const headingIndexes = file.lines
97
- .map((line, index) => ({ line, index }))
98
- .filter(({ line }) => line.trimStart().startsWith("#"));
99
- if (!headingIndexes.length) {
100
- return [];
101
- }
102
- return headingIndexes.map(({ line, index }, headingOrdinal) => {
103
- const nextHeading = headingIndexes[headingOrdinal + 1]?.index ?? file.lines.length;
104
- const range = { start: index + 1, end: Math.max(index + 1, nextHeading) };
105
- return {
106
- file,
107
- range,
108
- text: file.lines.slice(range.start - 1, range.end).join("\n"),
109
- heading: line,
110
- kind: "section",
111
- };
112
- });
98
+ const headingIndexes = file.lines
99
+ .map((line, index) => ({ line, index }))
100
+ .filter(({ line }) => line.trimStart().startsWith("#"));
101
+ if (!headingIndexes.length) {
102
+ return [];
103
+ }
104
+ return headingIndexes.map(({ line, index }, headingOrdinal) => {
105
+ const nextHeading = headingIndexes[headingOrdinal + 1]?.index ?? file.lines.length;
106
+ const range = { start: index + 1, end: Math.max(index + 1, nextHeading) };
107
+ return {
108
+ file,
109
+ range,
110
+ text: file.lines.slice(range.start - 1, range.end).join("\n"),
111
+ heading: line,
112
+ kind: "section",
113
+ };
114
+ });
113
115
  }
114
116
  function codeSymbolChunks(file) {
115
- const symbolIndexes = file.lines
116
- .map((line, index) => ({ line, index, match: codeSymbolMatch(line) }))
117
- .filter((entry) => Boolean(entry.match));
118
- if (!symbolIndexes.length) {
119
- return [];
120
- }
121
- return symbolIndexes.map(({ line, index }, symbolOrdinal) => {
122
- const nextSymbol = nextSymbolBoundary(file.lines, symbolIndexes, symbolOrdinal);
123
- const end = Math.min(file.lines.length, Math.max(index + 1, Math.min(nextSymbol, index + 80)));
124
- const range = { start: index + 1, end };
125
- return {
126
- file,
127
- range,
128
- text: file.lines.slice(range.start - 1, range.end).join("\n"),
129
- heading: line,
130
- kind: "symbol",
131
- };
132
- });
117
+ const symbolIndexes = file.lines
118
+ .map((line, index) => ({ line, index, match: codeSymbolMatch(line) }))
119
+ .filter((entry) => Boolean(entry.match));
120
+ if (!symbolIndexes.length) {
121
+ return [];
122
+ }
123
+ return symbolIndexes.map(({ line, index }, symbolOrdinal) => {
124
+ const nextSymbol = nextSymbolBoundary(file.lines, symbolIndexes, symbolOrdinal);
125
+ const end = Math.min(file.lines.length, Math.max(index + 1, Math.min(nextSymbol, index + 80)));
126
+ const range = { start: index + 1, end };
127
+ return {
128
+ file,
129
+ range,
130
+ text: file.lines.slice(range.start - 1, range.end).join("\n"),
131
+ heading: line,
132
+ kind: "symbol",
133
+ };
134
+ });
133
135
  }
134
136
  function nextSymbolBoundary(lines, symbolIndexes, symbolOrdinal) {
135
- const current = symbolIndexes[symbolOrdinal];
136
- if (!current) {
137
- return lines.length;
138
- }
139
- if (/^\s*impl\b/.test(current.line)) {
140
- const nextTopLevel = symbolIndexes.slice(symbolOrdinal + 1).find((entry) => isTopLevelCodeSymbol(entry.line));
141
- return nextTopLevel?.index ?? lines.length;
142
- }
143
- return symbolIndexes[symbolOrdinal + 1]?.index ?? lines.length;
137
+ const current = symbolIndexes[symbolOrdinal];
138
+ if (!current) {
139
+ return lines.length;
140
+ }
141
+ if (/^\s*impl\b/.test(current.line)) {
142
+ const nextTopLevel = symbolIndexes.slice(symbolOrdinal + 1).find((entry) => isTopLevelCodeSymbol(entry.line));
143
+ return nextTopLevel?.index ?? lines.length;
144
+ }
145
+ return symbolIndexes[symbolOrdinal + 1]?.index ?? lines.length;
144
146
  }
145
147
  function isTopLevelCodeSymbol(line) {
146
- return /^(?:pub\s+)?(?:async\s+)?(?:fn|struct|enum|trait|impl|mod|class|interface|type|const|def)\s+([A-Za-z_][A-Za-z0-9_]*)\b/.test(line);
148
+ return /^(?:pub\s+)?(?:async\s+)?(?:fn|struct|enum|trait|impl|mod|class|interface|type|const|def)\s+([A-Za-z_][A-Za-z0-9_]*)\b/.test(
149
+ line,
150
+ );
147
151
  }
148
152
  function codeSymbolMatch(line) {
149
- return /^\s*(?:pub\s+)?(?:async\s+)?(?:fn|struct|enum|trait|impl|mod|class|interface|type|const|def)\s+([A-Za-z_][A-Za-z0-9_]*)\b/.exec(line);
153
+ return /^\s*(?:pub\s+)?(?:async\s+)?(?:fn|struct|enum|trait|impl|mod|class|interface|type|const|def)\s+([A-Za-z_][A-Za-z0-9_]*)\b/.exec(
154
+ line,
155
+ );
150
156
  }
151
157
  function lineWindowChunks(file) {
152
- return file.lines.map((_, lineIndex) => {
153
- const start = Math.max(0, lineIndex - DEFAULT_CONTEXT_LINES);
154
- const end = Math.min(file.lines.length - 1, lineIndex + DEFAULT_CONTEXT_LINES);
155
- return {
156
- file,
157
- range: { start: start + 1, end: end + 1 },
158
- text: file.lines.slice(start, end + 1).join("\n"),
159
- kind: "window",
160
- };
161
- });
162
- }
163
- function chunkStats(chunks) {
164
- const documentFrequency = new Map();
165
- let totalLength = 0;
166
- for (const chunk of chunks) {
167
- const tokens = tokensForChunk(chunk);
168
- totalLength += Math.max(1, tokens.length);
169
- for (const token of uniqueTokens(tokens)) {
170
- documentFrequency.set(token, (documentFrequency.get(token) ?? 0) + 1);
171
- }
172
- }
158
+ return file.lines.map((_, lineIndex) => {
159
+ const start = Math.max(0, lineIndex - DEFAULT_CONTEXT_LINES);
160
+ const end = Math.min(file.lines.length - 1, lineIndex + DEFAULT_CONTEXT_LINES);
173
161
  return {
174
- averageLength: chunks.length ? totalLength / chunks.length : 1,
175
- documentFrequency,
176
- chunkCount: chunks.length,
162
+ file,
163
+ range: { start: start + 1, end: end + 1 },
164
+ text: file.lines.slice(start, end + 1).join("\n"),
165
+ kind: "window",
177
166
  };
167
+ });
168
+ }
169
+ function chunkStats(chunks) {
170
+ const documentFrequency = new Map();
171
+ let totalLength = 0;
172
+ for (const chunk of chunks) {
173
+ const tokens = tokensForChunk(chunk);
174
+ totalLength += Math.max(1, tokens.length);
175
+ for (const token of uniqueTokens(tokens)) {
176
+ documentFrequency.set(token, (documentFrequency.get(token) ?? 0) + 1);
177
+ }
178
+ }
179
+ return {
180
+ averageLength: chunks.length ? totalLength / chunks.length : 1,
181
+ documentFrequency,
182
+ chunkCount: chunks.length,
183
+ };
178
184
  }
179
185
  function scoreCandidateChunk(chunk, queryTokens, normalizedQueryPhrase, stats, options) {
180
- if (!queryTokens.length) {
181
- return null;
182
- }
183
- const chunkTokens = tokensForChunk(chunk);
184
- const tokenCounts = tokenCountMap(chunkTokens);
185
- const matchingTokens = queryTokens.filter((token) => (tokenCounts.get(token) ?? 0) > 0);
186
- const pathScore = scoreText(chunk.file.path, queryTokens);
187
- if (!matchingTokens.length && pathScore <= 0) {
188
- return null;
189
- }
190
- const exactPhrase = hasExactNormalizedPhraseInChunk(chunk, normalizedQueryPhrase);
191
- const chunkLength = Math.max(1, chunkTokens.length);
192
- const score = exactPhraseBoost(exactPhrase, chunk.file.path, queryTokens) +
193
- bm25Score(queryTokens, tokenCounts, chunkLength, stats) * 10 +
194
- coverageRatio(matchingTokens, queryTokens) * 120 +
195
- contentCoverageBoost(matchingTokens, queryTokens, chunk.kind) +
196
- completeCoverageBoost(matchingTokens, queryTokens, chunk.kind) -
197
- missingCoveragePenalty(matchingTokens, queryTokens, chunk.kind) -
198
- lowContentCoveragePenalty(matchingTokens, queryTokens, pathScore) +
199
- headingCoverageBoost(chunk.heading ?? "", queryTokens) +
200
- identifierBoost(chunk.text, queryTokens) +
201
- (matchingTokens.length >= 4 ? orderedPhraseBoost(chunkTokens, queryTokens) : 0) +
202
- (chunk.kind === "symbol" ? codeDefinitionBoost(chunk.text, queryTokens) : 0) +
203
- chunkKindBoost(chunk.kind) +
204
- pathIntentBoost(chunk.file.path, queryTokens) +
205
- sourceTestPrior(chunk.file.path, queryTokens) +
206
- pathScore -
207
- Math.log1p(chunkLength) * 10;
208
- const selection = selectEvidenceRangeForChunk({
209
- lines: chunk.file.lines,
210
- chunkRange: chunk.range,
211
- chunkKind: chunk.kind,
212
- queryTokens,
213
- normalizedQueryPhrase,
214
- chunkHasExactPhrase: exactPhrase,
215
- defaultContextLines: options.defaultContextLines,
216
- queryCoverageMaxLines: options.queryCoverageMaxLines,
217
- });
218
- const reason = selection.matchKind === "exact-phrase"
219
- ? `matched exact normalized query phrase in ${chunk.kind} chunk`
220
- : `BM25-style scored ${chunk.kind} chunk with ${matchingTokens.length}/${queryTokens.length} query-token coverage`;
221
- return {
222
- file: chunk.file,
223
- lineIndex: selection.anchorLine - 1,
224
- range: selection.range,
225
- score,
226
- reason,
227
- ...(selection.matchKind === "exact-phrase" ? { exactNormalizedPhrase: normalizedQueryPhrase } : {}),
228
- };
186
+ if (!queryTokens.length) {
187
+ return null;
188
+ }
189
+ const chunkTokens = tokensForChunk(chunk);
190
+ const tokenCounts = tokenCountMap(chunkTokens);
191
+ const matchingTokens = queryTokens.filter((token) => (tokenCounts.get(token) ?? 0) > 0);
192
+ const pathScore = scoreText(chunk.file.path, queryTokens);
193
+ if (!matchingTokens.length && pathScore <= 0) {
194
+ return null;
195
+ }
196
+ const exactPhrase = hasExactNormalizedPhraseInChunk(chunk, normalizedQueryPhrase);
197
+ const chunkLength = Math.max(1, chunkTokens.length);
198
+ const score =
199
+ exactPhraseBoost(exactPhrase, chunk.file.path, queryTokens) +
200
+ bm25Score(queryTokens, tokenCounts, chunkLength, stats) * 10 +
201
+ coverageRatio(matchingTokens, queryTokens) * 120 +
202
+ contentCoverageBoost(matchingTokens, queryTokens, chunk.kind) +
203
+ completeCoverageBoost(matchingTokens, queryTokens, chunk.kind) -
204
+ missingCoveragePenalty(matchingTokens, queryTokens, chunk.kind) -
205
+ lowContentCoveragePenalty(matchingTokens, queryTokens, pathScore) +
206
+ headingCoverageBoost(chunk.heading ?? "", queryTokens) +
207
+ identifierBoost(chunk.text, queryTokens) +
208
+ (matchingTokens.length >= 4 ? orderedPhraseBoost(chunkTokens, queryTokens) : 0) +
209
+ (chunk.kind === "symbol" ? codeDefinitionBoost(chunk.text, queryTokens) : 0) +
210
+ chunkKindBoost(chunk.kind) +
211
+ pathIntentBoost(chunk.file.path, queryTokens) +
212
+ sourceTestPrior(chunk.file.path, queryTokens) +
213
+ pathScore -
214
+ Math.log1p(chunkLength) * 10;
215
+ const selection = selectEvidenceRangeForChunk({
216
+ lines: chunk.file.lines,
217
+ chunkRange: chunk.range,
218
+ chunkKind: chunk.kind,
219
+ queryTokens,
220
+ normalizedQueryPhrase,
221
+ chunkHasExactPhrase: exactPhrase,
222
+ defaultContextLines: options.defaultContextLines,
223
+ queryCoverageMaxLines: options.queryCoverageMaxLines,
224
+ });
225
+ const reason =
226
+ selection.matchKind === "exact-phrase"
227
+ ? `matched exact normalized query phrase in ${chunk.kind} chunk`
228
+ : `BM25-style scored ${chunk.kind} chunk with ${matchingTokens.length}/${queryTokens.length} query-token coverage`;
229
+ return {
230
+ file: chunk.file,
231
+ lineIndex: selection.anchorLine - 1,
232
+ range: selection.range,
233
+ score,
234
+ reason,
235
+ ...(selection.matchKind === "exact-phrase" ? { exactNormalizedPhrase: normalizedQueryPhrase } : {}),
236
+ };
229
237
  }
230
238
  function chunkMightMatch(chunk, queryTokens) {
231
- const path = chunk.file.path.toLowerCase();
232
- const heading = chunk.heading?.toLowerCase() ?? "";
233
- const text = chunk.text.toLowerCase();
234
- return queryTokens.some((token) => path.includes(token) || heading.includes(token) || text.includes(token));
239
+ const path = chunk.file.path.toLowerCase();
240
+ const heading = chunk.heading?.toLowerCase() ?? "";
241
+ const text = chunk.text.toLowerCase();
242
+ return queryTokens.some((token) => path.includes(token) || heading.includes(token) || text.includes(token));
235
243
  }
236
244
  function bm25Score(queryTokens, tokenCounts, chunkLength, stats) {
237
- const k1 = 1.2;
238
- const b = 0.75;
239
- return queryTokens.reduce((score, token) => {
240
- const termFrequency = tokenCounts.get(token) ?? 0;
241
- if (termFrequency <= 0) {
242
- return score;
243
- }
244
- const documentFrequency = stats.documentFrequency.get(token) ?? 0;
245
- const idf = Math.log(1 + (stats.chunkCount - documentFrequency + 0.5) / (documentFrequency + 0.5));
246
- const normalizedLength = k1 * (1 - b + b * (chunkLength / Math.max(1, stats.averageLength)));
247
- const saturatedFrequency = (termFrequency * (k1 + 1)) / (termFrequency + normalizedLength);
248
- return score + idf * saturatedFrequency;
249
- }, 0);
245
+ const k1 = 1.2;
246
+ const b = 0.75;
247
+ return queryTokens.reduce((score, token) => {
248
+ const termFrequency = tokenCounts.get(token) ?? 0;
249
+ if (termFrequency <= 0) {
250
+ return score;
251
+ }
252
+ const documentFrequency = stats.documentFrequency.get(token) ?? 0;
253
+ const idf = Math.log(1 + (stats.chunkCount - documentFrequency + 0.5) / (documentFrequency + 0.5));
254
+ const normalizedLength = k1 * (1 - b + b * (chunkLength / Math.max(1, stats.averageLength)));
255
+ const saturatedFrequency = (termFrequency * (k1 + 1)) / (termFrequency + normalizedLength);
256
+ return score + idf * saturatedFrequency;
257
+ }, 0);
250
258
  }
251
259
  function coverageRatio(matchingTokens, queryTokens) {
252
- return queryTokens.length ? matchingTokens.length / queryTokens.length : 0;
260
+ return queryTokens.length ? matchingTokens.length / queryTokens.length : 0;
253
261
  }
254
262
  function contentCoverageBoost(matchingTokens, queryTokens, chunkKind) {
255
- if (queryTokens.length === 0) {
256
- return 0;
257
- }
258
- const perTokenBoost = chunkKind === "window" ? 180 : 350;
259
- return matchingTokens.length * perTokenBoost + coverageRatio(matchingTokens, queryTokens) * 100;
263
+ if (queryTokens.length === 0) {
264
+ return 0;
265
+ }
266
+ const perTokenBoost = chunkKind === "window" ? 180 : 350;
267
+ return matchingTokens.length * perTokenBoost + coverageRatio(matchingTokens, queryTokens) * 100;
260
268
  }
261
269
  function completeCoverageBoost(matchingTokens, queryTokens, chunkKind) {
262
- if (queryTokens.length === 0 || matchingTokens.length !== queryTokens.length) {
263
- return 0;
264
- }
265
- if (chunkKind === "symbol") {
266
- return 240;
267
- }
268
- return queryTokens.length >= 4 ? 1_200 : 240;
270
+ if (queryTokens.length === 0 || matchingTokens.length !== queryTokens.length) {
271
+ return 0;
272
+ }
273
+ if (chunkKind === "symbol") {
274
+ return 240;
275
+ }
276
+ return queryTokens.length >= 4 ? 1_200 : 240;
269
277
  }
270
278
  function missingCoveragePenalty(matchingTokens, queryTokens, chunkKind) {
271
- if (chunkKind === "symbol" || queryTokens.length < 4 || matchingTokens.length >= queryTokens.length) {
272
- return 0;
273
- }
274
- return (queryTokens.length - matchingTokens.length) * 90;
279
+ if (chunkKind === "symbol" || queryTokens.length < 4 || matchingTokens.length >= queryTokens.length) {
280
+ return 0;
281
+ }
282
+ return (queryTokens.length - matchingTokens.length) * 90;
275
283
  }
276
284
  function lowContentCoveragePenalty(matchingTokens, queryTokens, pathScore) {
277
- if (queryTokens.length < 4 || matchingTokens.length >= 2) {
278
- return 0;
279
- }
280
- const pathOnlyPenalty = matchingTokens.length === 0 && pathScore > 0 ? 1_000 : 0;
281
- return (2 - matchingTokens.length) * 600 + pathOnlyPenalty;
285
+ if (queryTokens.length < 4 || matchingTokens.length >= 2) {
286
+ return 0;
287
+ }
288
+ const pathOnlyPenalty = matchingTokens.length === 0 && pathScore > 0 ? 1_000 : 0;
289
+ return (2 - matchingTokens.length) * 600 + pathOnlyPenalty;
282
290
  }
283
291
  function exactPhraseBoost(exactPhrase, path, queryTokens) {
284
- if (!exactPhrase) {
285
- return 0;
286
- }
287
- const testPath = isTestPath(path);
288
- const testIntent = queryTokens.some((token) => ["test", "tests", "expect", "expected", "should", "emitted"].includes(token));
289
- return testPath && !testIntent ? 1_000 : 100_000;
292
+ if (!exactPhrase) {
293
+ return 0;
294
+ }
295
+ const testPath = isTestPath(path);
296
+ const testIntent = queryTokens.some((token) =>
297
+ ["test", "tests", "expect", "expected", "should", "emitted"].includes(token),
298
+ );
299
+ return testPath && !testIntent ? 1_000 : 100_000;
290
300
  }
291
301
  function headingCoverageBoost(heading, queryTokens) {
292
- const headingTokens = new Set(tokenize(heading));
293
- const coveredTokens = queryTokens.filter((token) => headingTokens.has(token)).length;
294
- return coveredTokens * 8;
302
+ const headingTokens = new Set(tokenize(heading));
303
+ const coveredTokens = queryTokens.filter((token) => headingTokens.has(token)).length;
304
+ return coveredTokens * 8;
295
305
  }
296
306
  function identifierBoost(text, queryTokens) {
297
- if (!text.includes("`")) {
298
- return 0;
299
- }
300
- const identifiers = Array.from(text.matchAll(/`([^`]+)`/g), (match) => tokenize(match[1] ?? "")).flat();
301
- if (!identifiers.length) {
302
- return 0;
303
- }
304
- const identifierSet = new Set(identifiers);
305
- return queryTokens.filter((token) => identifierSet.has(token)).length * 10;
307
+ if (!text.includes("`")) {
308
+ return 0;
309
+ }
310
+ const identifiers = Array.from(text.matchAll(/`([^`]+)`/g), (match) => tokenize(match[1] ?? "")).flat();
311
+ if (!identifiers.length) {
312
+ return 0;
313
+ }
314
+ const identifierSet = new Set(identifiers);
315
+ return queryTokens.filter((token) => identifierSet.has(token)).length * 10;
306
316
  }
307
317
  function orderedPhraseBoost(chunkTokens, queryTokens) {
308
- const normalizedText = ` ${chunkTokens.join(" ")} `;
309
- let best = 0;
310
- for (let start = 0; start < queryTokens.length; start += 1) {
311
- const phrase = [];
312
- for (let end = start; end < queryTokens.length; end += 1) {
313
- phrase.push(queryTokens[end] ?? "");
314
- if (phrase.length <= best) {
315
- continue;
316
- }
317
- if (normalizedText.includes(` ${phrase.join(" ")} `)) {
318
- best = phrase.length;
319
- }
320
- }
321
- }
322
- return best >= 3 ? best * best * 20 : 0;
318
+ const normalizedText = ` ${chunkTokens.join(" ")} `;
319
+ let best = 0;
320
+ for (let start = 0; start < queryTokens.length; start += 1) {
321
+ const phrase = [];
322
+ for (let end = start; end < queryTokens.length; end += 1) {
323
+ phrase.push(queryTokens[end] ?? "");
324
+ if (phrase.length <= best) {
325
+ continue;
326
+ }
327
+ if (normalizedText.includes(` ${phrase.join(" ")} `)) {
328
+ best = phrase.length;
329
+ }
330
+ }
331
+ }
332
+ return best >= 3 ? best * best * 20 : 0;
323
333
  }
324
334
  function codeDefinitionBoost(text, queryTokens) {
325
- const definitionMatches = Array.from(text.matchAll(/^\s*(?:pub\s+)?(?:async\s+)?(?:fn|struct|enum|trait|impl|mod|class|interface|type|const|def)\s+([A-Za-z_][A-Za-z0-9_]*)\b/gm), (match) => match[1] ?? "");
326
- if (!definitionMatches.length) {
327
- return 0;
328
- }
329
- let bestBoost = 0;
330
- for (const name of definitionMatches) {
331
- const symbolTokens = new Set(tokenize(name));
332
- const coverage = queryTokens.filter((token) => symbolTokens.has(token)).length;
333
- const exactCompoundCoverage = queryTokens.filter((token) => token.length >= 8 && symbolTokens.has(token) && !/[._/-]/.test(token)).length;
334
- if (coverage > 0) {
335
- bestBoost = Math.max(bestBoost, 120 + coverage * 80 + exactCompoundCoverage * 520);
336
- }
337
- }
338
- return bestBoost;
335
+ const definitionMatches = Array.from(
336
+ text.matchAll(
337
+ /^\s*(?:pub\s+)?(?:async\s+)?(?:fn|struct|enum|trait|impl|mod|class|interface|type|const|def)\s+([A-Za-z_][A-Za-z0-9_]*)\b/gm,
338
+ ),
339
+ (match) => match[1] ?? "",
340
+ );
341
+ if (!definitionMatches.length) {
342
+ return 0;
343
+ }
344
+ let bestBoost = 0;
345
+ for (const name of definitionMatches) {
346
+ const symbolTokens = new Set(tokenize(name));
347
+ const coverage = queryTokens.filter((token) => symbolTokens.has(token)).length;
348
+ const exactCompoundCoverage = queryTokens.filter(
349
+ (token) => token.length >= 8 && symbolTokens.has(token) && !/[._/-]/.test(token),
350
+ ).length;
351
+ if (coverage > 0) {
352
+ bestBoost = Math.max(bestBoost, 120 + coverage * 80 + exactCompoundCoverage * 520);
353
+ }
354
+ }
355
+ return bestBoost;
339
356
  }
340
357
  function chunkKindBoost(kind) {
341
- if (kind === "symbol") {
342
- return 500;
343
- }
344
- if (kind === "section") {
345
- return 12;
346
- }
347
- return 0;
358
+ if (kind === "symbol") {
359
+ return 500;
360
+ }
361
+ if (kind === "section") {
362
+ return 12;
363
+ }
364
+ return 0;
348
365
  }
349
366
  function pathIntentBoost(path, queryTokens) {
350
- const pathTokens = new Set(tokenize(path));
351
- const coveredTokens = queryTokens.filter((token) => pathTokens.has(token)).length;
352
- return coveredTokens * 140 + (coveredTokens >= 2 ? 600 : 0);
367
+ const pathTokens = new Set(tokenize(path));
368
+ const coveredTokens = queryTokens.filter((token) => pathTokens.has(token)).length;
369
+ return coveredTokens * 140 + (coveredTokens >= 2 ? 600 : 0);
353
370
  }
354
371
  function sourceTestPrior(path, queryTokens) {
355
- const testPath = isTestPath(path);
356
- const testIntent = queryTokens.some((token) => ["test", "tests", "expect", "expected", "should", "emitted"].includes(token));
357
- if (testPath && !testIntent) {
358
- return -2_000;
359
- }
360
- if (testPath && testIntent) {
361
- return 35;
362
- }
363
- if (!testPath && testIntent) {
364
- return -8;
365
- }
366
- return 0;
372
+ const testPath = isTestPath(path);
373
+ const testIntent = queryTokens.some((token) =>
374
+ ["test", "tests", "expect", "expected", "should", "emitted"].includes(token),
375
+ );
376
+ if (testPath && !testIntent) {
377
+ return -2_000;
378
+ }
379
+ if (testPath && testIntent) {
380
+ return 35;
381
+ }
382
+ if (!testPath && testIntent) {
383
+ return -8;
384
+ }
385
+ return 0;
367
386
  }
368
387
  function isTestPath(path) {
369
- const lower = path.toLowerCase();
370
- return /(^|\/)(tests?|fixtures?)(\/|$)/.test(lower) || lower.endsWith("_tests.rs") || lower.endsWith(".test.ts") || lower.endsWith(".test.js");
388
+ const lower = path.toLowerCase();
389
+ return (
390
+ /(^|\/)(tests?|fixtures?)(\/|$)/.test(lower) ||
391
+ lower.endsWith("_tests.rs") ||
392
+ lower.endsWith(".test.ts") ||
393
+ lower.endsWith(".test.js")
394
+ );
371
395
  }
372
396
  function hasExactNormalizedPhraseInChunk(chunk, normalizedQueryPhrase) {
373
- return normalizedQueryPhrase !== "" && phraseSequenceForChunk(chunk).includes(normalizedQueryPhrase);
397
+ return normalizedQueryPhrase !== "" && phraseSequenceForChunk(chunk).includes(normalizedQueryPhrase);
374
398
  }
375
399
  function tokensForChunk(chunk) {
376
- chunk.tokens ??= tokenize(chunk.text);
377
- return chunk.tokens;
400
+ chunk.tokens ??= tokenize(chunk.text);
401
+ return chunk.tokens;
378
402
  }
379
403
  function phraseSequenceForChunk(chunk) {
380
- chunk.phraseSequence ??= normalizePhraseSequence(chunk.text);
381
- return chunk.phraseSequence;
404
+ chunk.phraseSequence ??= normalizePhraseSequence(chunk.text);
405
+ return chunk.phraseSequence;
382
406
  }
383
407
  function normalizePhraseSequence(text) {
384
- const tokens = tokenizeForPhrase(text);
385
- return tokens.length >= 2 ? tokens.join(" ") : "";
408
+ const tokens = tokenizeForPhrase(text);
409
+ return tokens.length >= 2 ? tokens.join(" ") : "";
386
410
  }
387
411
  function tokenCountMap(tokens) {
388
- const counts = new Map();
389
- for (const token of tokens) {
390
- counts.set(token, (counts.get(token) ?? 0) + 1);
391
- }
392
- return counts;
412
+ const counts = new Map();
413
+ for (const token of tokens) {
414
+ counts.set(token, (counts.get(token) ?? 0) + 1);
415
+ }
416
+ return counts;
393
417
  }
394
418
  function uniqueTokens(tokens) {
395
- return Array.from(new Set(tokens));
419
+ return Array.from(new Set(tokens));
396
420
  }
397
421
  function scoreText(text, tokens) {
398
- const lower = text.toLowerCase();
399
- return tokens.reduce((score, token) => score + countOccurrences(lower, token), 0);
422
+ const lower = text.toLowerCase();
423
+ return tokens.reduce((score, token) => score + countOccurrences(lower, token), 0);
400
424
  }
401
425
  function countOccurrences(text, token) {
402
- let count = 0;
403
- let index = text.indexOf(token);
404
- while (index !== -1) {
405
- count += 1;
406
- index = text.indexOf(token, index + token.length);
407
- }
408
- return count;
426
+ let count = 0;
427
+ let index = text.indexOf(token);
428
+ while (index !== -1) {
429
+ count += 1;
430
+ index = text.indexOf(token, index + token.length);
431
+ }
432
+ return count;
409
433
  }
410
434
  function tokenize(query) {
411
- return query
412
- .split(/[^A-Za-z0-9_./-]+/)
413
- .flatMap((token) => expandedIdentifierTokens(token.trim()))
414
- .filter((token) => token.length >= 2 && !STOPWORDS.has(token));
435
+ return query
436
+ .split(/[^A-Za-z0-9_./-]+/)
437
+ .flatMap((token) => expandedIdentifierTokens(token.trim()))
438
+ .filter((token) => token.length >= 2 && !STOPWORDS.has(token));
415
439
  }
416
440
  function tokenizeForPhrase(query) {
417
- return query
418
- .split(/[^A-Za-z0-9_./-]+/)
419
- .flatMap((token) => expandedIdentifierTokens(token.trim()))
420
- .filter((token) => token.length >= 2);
441
+ return query
442
+ .split(/[^A-Za-z0-9_./-]+/)
443
+ .flatMap((token) => expandedIdentifierTokens(token.trim()))
444
+ .filter((token) => token.length >= 2);
421
445
  }
422
446
  function expandedIdentifierTokens(token) {
423
- if (!token) {
424
- return [];
425
- }
426
- const lower = token.toLowerCase();
427
- if (!needsIdentifierSplit(token)) {
428
- return [lower];
429
- }
430
- const variants = new Set();
431
- addTokenVariant(variants, lower);
432
- for (const part of splitIdentifierToken(token)) {
433
- addTokenVariant(variants, part.toLowerCase());
434
- }
435
- return Array.from(variants);
447
+ if (!token) {
448
+ return [];
449
+ }
450
+ const lower = token.toLowerCase();
451
+ if (!needsIdentifierSplit(token)) {
452
+ return [lower];
453
+ }
454
+ const variants = new Set();
455
+ addTokenVariant(variants, lower);
456
+ for (const part of splitIdentifierToken(token)) {
457
+ addTokenVariant(variants, part.toLowerCase());
458
+ }
459
+ return Array.from(variants);
436
460
  }
437
461
  function addTokenVariant(variants, token) {
438
- if (token) {
439
- variants.add(token);
440
- }
462
+ if (token) {
463
+ variants.add(token);
464
+ }
441
465
  }
442
466
  function needsIdentifierSplit(token) {
443
- if (/[._/-]/.test(token)) {
444
- return true;
445
- }
446
- for (let index = 1; index < token.length; index += 1) {
447
- const previous = token.charCodeAt(index - 1);
448
- const current = token.charCodeAt(index);
449
- const next = index + 1 < token.length ? token.charCodeAt(index + 1) : 0;
450
- const previousIsLowerOrDigit = (previous >= 97 && previous <= 122) || (previous >= 48 && previous <= 57);
451
- const previousIsUpper = previous >= 65 && previous <= 90;
452
- const currentIsUpper = current >= 65 && current <= 90;
453
- const nextIsLower = next >= 97 && next <= 122;
454
- if ((previousIsLowerOrDigit && currentIsUpper) || (previousIsUpper && currentIsUpper && nextIsLower)) {
455
- return true;
456
- }
457
- }
458
- return false;
467
+ if (/[._/-]/.test(token)) {
468
+ return true;
469
+ }
470
+ for (let index = 1; index < token.length; index += 1) {
471
+ const previous = token.charCodeAt(index - 1);
472
+ const current = token.charCodeAt(index);
473
+ const next = index + 1 < token.length ? token.charCodeAt(index + 1) : 0;
474
+ const previousIsLowerOrDigit = (previous >= 97 && previous <= 122) || (previous >= 48 && previous <= 57);
475
+ const previousIsUpper = previous >= 65 && previous <= 90;
476
+ const currentIsUpper = current >= 65 && current <= 90;
477
+ const nextIsLower = next >= 97 && next <= 122;
478
+ if ((previousIsLowerOrDigit && currentIsUpper) || (previousIsUpper && currentIsUpper && nextIsLower)) {
479
+ return true;
480
+ }
481
+ }
482
+ return false;
459
483
  }
460
484
  function splitIdentifierToken(token) {
461
- const separated = token
462
- .replace(/[._/-]+/g, " ")
463
- .replace(/([a-z0-9])([A-Z])/g, "$1 $2")
464
- .replace(/([A-Z]+)([A-Z][a-z])/g, "$1 $2");
465
- return separated.split(/\s+/).filter(Boolean);
485
+ const separated = token
486
+ .replace(/[._/-]+/g, " ")
487
+ .replace(/([a-z0-9])([A-Z])/g, "$1 $2")
488
+ .replace(/([A-Z]+)([A-Z][a-z])/g, "$1 $2");
489
+ return separated.split(/\s+/).filter(Boolean);
466
490
  }