@hassangameryt/freeflow 0.3.0 → 0.5.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 (692) hide show
  1. package/.claude-plugin/marketplace.json +4 -4
  2. package/.claude-plugin/plugin.json +6 -2
  3. package/.codex-plugin/plugin.json +9 -9
  4. package/README.md +190 -127
  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/{skills → capabilities}/output-router/SKILL.md +21 -17
  9. package/{skills → capabilities}/output-router/references/safety-policy.md +1 -1
  10. package/capabilities/output-router/references/setup.md +110 -0
  11. package/command-surface.json +62 -7
  12. package/hooks/freeflow-runtime-context.mjs +572 -154
  13. package/hooks/hooks.json +26 -1
  14. package/hooks/tests/check-runtime-context-hook.sh +375 -0
  15. package/package.json +24 -24
  16. package/pi-extension/dist/index.js +264 -80
  17. package/pi-extension/dist/integrations/mcp-config.js +29 -0
  18. package/pi-extension/dist/output-router/host-producer-identification.js +232 -0
  19. package/pi-extension/dist/output-router/native-safety-net.js +216 -0
  20. package/pi-extension/dist/output-router/observed-tool-routing.js +122 -0
  21. package/pi-extension/dist/output-router/renderers.js +1023 -0
  22. package/pi-extension/dist/output-router/router-tools.js +554 -0
  23. package/pi-extension/dist/output-router/schemas.js +383 -0
  24. package/pi-extension/dist/output-router/status.js +744 -0
  25. package/pi-extension/dist/output-router/utils.js +502 -0
  26. package/pi-extension/dist/runtime/runtime-context.js +798 -0
  27. package/pi-extension/dist/settings/settings-tui.js +314 -0
  28. package/pi-extension/dist/settings/settings-ui.js +1487 -0
  29. package/pi-extension/freeflow/index.js +1 -0
  30. package/pi-extension/src/index.ts +230 -56
  31. package/pi-extension/src/{host-producer-identification.ts → output-router/host-producer-identification.ts} +37 -7
  32. package/pi-extension/src/{native-safety-net.ts → output-router/native-safety-net.ts} +8 -12
  33. package/pi-extension/src/{observed-tool-routing.ts → output-router/observed-tool-routing.ts} +19 -11
  34. package/pi-extension/src/{renderers.ts → output-router/renderers.ts} +246 -55
  35. package/pi-extension/src/{router-tools.ts → output-router/router-tools.ts} +130 -29
  36. package/pi-extension/src/{schemas.ts → output-router/schemas.ts} +171 -43
  37. package/pi-extension/src/output-router/status.ts +791 -0
  38. package/pi-extension/src/{utils.ts → output-router/utils.ts} +80 -18
  39. package/pi-extension/src/runtime/runtime-context.ts +895 -0
  40. package/pi-extension/src/settings/settings-tui.ts +408 -0
  41. package/pi-extension/src/settings/settings-ui.ts +1730 -0
  42. package/pi-extension/tests/integration/pi-extension.test.js +4020 -0
  43. package/pi-extension/tests/output-router/observed-producers.test.js +132 -0
  44. package/pi-extension/tests/output-router/search.test.js +722 -0
  45. package/pi-extension/tests/settings/settings-tui.test.js +243 -0
  46. package/router/dist/benchmarks/benchmark-harness.d.ts +16 -13
  47. package/router/dist/benchmarks/benchmark-harness.js +62 -62
  48. package/router/dist/benchmarks/benchmarks.d.ts +80 -73
  49. package/router/dist/benchmarks/benchmarks.js +860 -761
  50. package/router/dist/benchmarks/codex-qa-benchmarks.d.ts +71 -67
  51. package/router/dist/benchmarks/codex-qa-benchmarks.js +429 -390
  52. package/router/dist/benchmarks/command-benchmarks.d.ts +107 -92
  53. package/router/dist/benchmarks/command-benchmarks.js +616 -571
  54. package/router/dist/benchmarks/context-mode-normalized-benchmarks.d.ts +64 -56
  55. package/router/dist/benchmarks/context-mode-normalized-benchmarks.js +679 -613
  56. package/router/dist/benchmarks/context-mode-real-deep-benchmark.d.ts +103 -95
  57. package/router/dist/benchmarks/context-mode-real-deep-benchmark.js +1188 -1103
  58. package/router/dist/benchmarks/context-saving-baseline.d.ts +47 -41
  59. package/router/dist/benchmarks/context-saving-baseline.js +405 -374
  60. package/router/dist/benchmarks/index-benchmarks.d.ts +74 -69
  61. package/router/dist/benchmarks/index-benchmarks.js +761 -661
  62. package/router/dist/benchmarks/storage-policy-benchmarks.d.ts +80 -69
  63. package/router/dist/benchmarks/storage-policy-benchmarks.js +549 -469
  64. package/router/dist/benchmarks/vault-index-benchmarks.d.ts +43 -34
  65. package/router/dist/benchmarks/vault-index-benchmarks.js +294 -229
  66. package/router/dist/config/config.d.ts +62 -55
  67. package/router/dist/config/config.js +552 -373
  68. package/router/dist/config/router-contract.d.ts +2 -2
  69. package/router/dist/config/router-contract.js +38 -38
  70. package/router/dist/config/schema.d.ts +19 -10
  71. package/router/dist/config/schema.js +586 -538
  72. package/router/dist/config/types.d.ts +413 -361
  73. package/router/dist/config/types.js +19 -8
  74. package/router/dist/evidence/bounded-evidence.d.ts +26 -26
  75. package/router/dist/evidence/bounded-evidence.js +265 -252
  76. package/router/dist/evidence/evidence-range-selector.d.ts +16 -14
  77. package/router/dist/evidence/evidence-range-selector.js +192 -191
  78. package/router/dist/evidence/evidence-search.d.ts +18 -16
  79. package/router/dist/evidence/evidence-search.js +401 -377
  80. package/router/dist/evidence/evidence.d.ts +17 -17
  81. package/router/dist/evidence/evidence.js +163 -159
  82. package/router/dist/evidence/failure-contracts.d.ts +25 -15
  83. package/router/dist/evidence/failure-contracts.js +132 -126
  84. package/router/dist/evidence/line-ranges.d.ts +17 -15
  85. package/router/dist/evidence/line-ranges.js +18 -18
  86. package/router/dist/experiments/local-index.d.ts +47 -41
  87. package/router/dist/experiments/local-index.js +477 -458
  88. package/router/dist/local/local-traversal.d.ts +18 -0
  89. package/router/dist/local/local-traversal.js +334 -0
  90. package/router/dist/processing/engine.d.ts +94 -70
  91. package/router/dist/processing/engine.js +462 -364
  92. package/router/dist/processing/reducers.d.ts +208 -194
  93. package/router/dist/processing/reducers.js +1434 -1256
  94. package/router/dist/processing/renderers.d.ts +24 -18
  95. package/router/dist/processing/renderers.js +161 -152
  96. package/router/dist/processing/scripts.d.ts +80 -67
  97. package/router/dist/processing/scripts.js +343 -290
  98. package/router/dist/repo/repo-traversal.d.ts +9 -9
  99. package/router/dist/repo/repo-traversal.js +205 -202
  100. package/router/dist/routing/observed-reducers.d.ts +25 -19
  101. package/router/dist/routing/observed-reducers.js +559 -545
  102. package/router/dist/routing/observed-routing.d.ts +23 -14
  103. package/router/dist/routing/observed-routing.js +319 -318
  104. package/router/dist/routing/parsers.d.ts +10 -10
  105. package/router/dist/routing/parsers.js +454 -406
  106. package/router/dist/routing/run-filters.d.ts +45 -41
  107. package/router/dist/routing/run-filters.js +215 -207
  108. package/router/dist/routing/run-reducers.d.ts +45 -26
  109. package/router/dist/routing/run-reducers.js +102 -90
  110. package/router/dist/sandbox/adapter-roots.d.ts +34 -26
  111. package/router/dist/sandbox/adapter-roots.js +43 -41
  112. package/router/dist/sandbox/eryx-python-adapter.d.ts +9 -5
  113. package/router/dist/sandbox/eryx-python-adapter.js +659 -588
  114. package/router/dist/sandbox/jq-wasm-adapter.d.ts +3 -3
  115. package/router/dist/sandbox/jq-wasm-adapter.js +319 -311
  116. package/router/dist/sandbox/quickjs-wasi-adapter.d.ts +9 -5
  117. package/router/dist/sandbox/quickjs-wasi-adapter.js +336 -333
  118. package/router/dist/sandbox/script-sandbox.d.ts +105 -84
  119. package/router/dist/sandbox/script-sandbox.js +294 -260
  120. package/router/dist/setup/script-transform-adapters.d.ts +23 -19
  121. package/router/dist/setup/script-transform-adapters.js +223 -204
  122. package/router/dist/tools/batch.d.ts +27 -16
  123. package/router/dist/tools/batch.js +493 -416
  124. package/router/dist/tools/run.d.ts +47 -35
  125. package/router/dist/tools/run.js +1172 -1087
  126. package/router/dist/tools/search.d.ts +53 -31
  127. package/router/dist/tools/search.js +1224 -1065
  128. package/router/dist/transform/engine.d.ts +121 -96
  129. package/router/dist/transform/engine.js +1853 -1736
  130. package/router/dist/vault/vault-index.d.ts +97 -78
  131. package/router/dist/vault/vault-index.js +347 -342
  132. package/router/dist/vault/vault.d.ts +109 -74
  133. package/router/dist/vault/vault.js +528 -533
  134. package/runtime/interaction-contract.md +16 -0
  135. package/skills/bypass/SKILL.md +52 -38
  136. package/skills/commit-work/SKILL.md +54 -46
  137. package/skills/commit-work/references/staging-decisions.md +46 -24
  138. package/skills/decision-gate/SKILL.md +48 -0
  139. package/skills/design-for-depth/SKILL.md +75 -59
  140. package/skills/design-for-depth/references/design-pressure-signals.md +56 -7
  141. package/skills/design-for-depth/references/interface-design-loop.md +156 -0
  142. package/skills/design-for-depth/references/software-design-philosophy.md +32 -3
  143. package/skills/diagnose-failure/SKILL.md +65 -60
  144. package/skills/diagnose-failure/references/diagnostic-loop-catalog.md +36 -0
  145. package/skills/diagnose-failure/references/flaky-and-performance.md +30 -18
  146. package/skills/discuss/SKILL.md +121 -0
  147. package/skills/discuss/references/checkpoints.md +66 -0
  148. package/skills/evaluate-skill/SKILL.md +62 -53
  149. package/skills/evaluate-skill/references/definition-schema.md +345 -0
  150. package/skills/evaluate-skill/references/evaluation-design.md +86 -0
  151. package/skills/evaluate-skill/references/execution-and-evidence.md +85 -0
  152. package/skills/evaluate-skill/references/review-and-revision.md +51 -0
  153. package/skills/evaluate-skill/scripts/lib/definitions.mjs +296 -0
  154. package/skills/evaluate-skill/scripts/lib/evidence.mjs +46 -0
  155. package/skills/evaluate-skill/scripts/lib/grade-comparison.mjs +60 -0
  156. package/skills/evaluate-skill/scripts/lib/grade-interaction.mjs +148 -0
  157. package/skills/evaluate-skill/scripts/lib/grade-support.mjs +126 -0
  158. package/skills/evaluate-skill/scripts/lib/grade-workspace.mjs +192 -0
  159. package/skills/evaluate-skill/scripts/lib/grade.mjs +56 -0
  160. package/skills/evaluate-skill/scripts/lib/pi.mjs +489 -0
  161. package/skills/evaluate-skill/scripts/lib/process.mjs +79 -0
  162. package/skills/evaluate-skill/scripts/lib/rpc.mjs +444 -0
  163. package/skills/evaluate-skill/scripts/lib/runner.mjs +346 -0
  164. package/skills/evaluate-skill/scripts/lib/sandbox.mjs +409 -0
  165. package/skills/evaluate-skill/scripts/lib/view.mjs +337 -0
  166. package/skills/evaluate-skill/scripts/pi-guard.mjs +164 -0
  167. package/skills/evaluate-skill/scripts/skill-eval.mjs +101 -0
  168. package/skills/execute-work/SKILL.md +99 -0
  169. package/skills/execute-work/references/code-practices.md +78 -0
  170. package/skills/execute-work/references/execution-loop.md +77 -0
  171. package/skills/finish-branch/SKILL.md +117 -0
  172. package/skills/finish-branch/references/integration-options.md +80 -0
  173. package/skills/handoff/SKILL.md +65 -39
  174. package/skills/handoff/references/templates.md +104 -27
  175. package/skills/launch-work/SKILL.md +116 -0
  176. package/skills/launch-work/references/launch-readiness.md +85 -0
  177. package/skills/migration-work/SKILL.md +115 -0
  178. package/skills/migration-work/references/migration-lifecycle.md +82 -0
  179. package/skills/mode-contract/SKILL.md +72 -52
  180. package/skills/release-work/SKILL.md +118 -0
  181. package/skills/release-work/references/release-evidence.md +78 -0
  182. package/skills/review-artifact/SKILL.md +77 -69
  183. package/skills/review-artifact/references/reviewer-prompt.md +133 -42
  184. package/skills/review-work/SKILL.md +82 -57
  185. package/skills/review-work/references/reviewer-prompt.md +97 -60
  186. package/skills/review-work/references/security-risk-lens.md +67 -0
  187. package/skills/setup-freeflow/SKILL.md +54 -68
  188. package/skills/setup-freeflow/references/activation-contract.md +84 -69
  189. package/skills/setup-freeflow/references/host-setup.md +50 -17
  190. package/skills/simplify-code/SKILL.md +80 -0
  191. package/skills/simplify-code/references/simplification-patterns.md +70 -0
  192. package/skills/tdd/SKILL.md +96 -0
  193. package/skills/tdd/references/test-design.md +96 -0
  194. package/skills/track-work/SKILL.md +84 -0
  195. package/skills/track-work/references/working-record-schema.md +378 -0
  196. package/skills/verify-work/SKILL.md +59 -38
  197. package/skills/verify-work/references/browser-runtime-evidence.md +55 -0
  198. package/skills/verify-work/references/integration-evidence.md +51 -0
  199. package/skills/verify-work/references/performance-evidence.md +57 -0
  200. package/skills/workflow/SKILL.md +53 -59
  201. package/skills/workflow/references/domain-skill-composition.md +57 -0
  202. package/skills/workflow/references/workflow-loop.md +92 -0
  203. package/skills/write-plan/SKILL.md +85 -58
  204. package/skills/write-plan/references/plan-shapes.md +132 -46
  205. package/skills/write-skill/SKILL.md +82 -51
  206. package/skills/write-skill/references/activation-boundaries.md +62 -0
  207. package/skills/write-skill/references/agent-first-instructions.md +87 -0
  208. package/skills/write-skill/references/progressive-disclosure.md +63 -0
  209. package/skills/write-skill/scripts/lib/skill-author.mjs +653 -0
  210. package/skills/write-skill/scripts/skill-author.mjs +104 -0
  211. package/skills/write-spec/SKILL.md +65 -54
  212. package/skills/write-spec/references/artifact-standards.md +60 -41
  213. package/skills/write-spec/references/decision-records.md +77 -0
  214. package/skills/write-spec/references/spec-shapes.md +119 -60
  215. package/evals/README.md +0 -32
  216. package/evals/fixtures/copy-conventions.md +0 -31
  217. package/evals/fixtures/output-router/README.md +0 -12
  218. package/evals/fixtures/output-router/failed-command-output.txt +0 -9
  219. package/evals/fixtures/output-router/large-router-manual.md +0 -63
  220. package/evals/fixtures/output-router/native-large-output.txt +0 -40
  221. package/evals/fixtures/output-router/noisy-test-output.txt +0 -30
  222. package/evals/fixtures/output-router/verification-output.txt +0 -8
  223. package/evals/fixtures/tiny-artifact-review-app/README.md +0 -5
  224. package/evals/fixtures/tiny-artifact-review-app/docs/billing-policy.md +0 -10
  225. package/evals/fixtures/tiny-artifact-review-app/docs/specs/billing-webhook-api-draft.md +0 -21
  226. package/evals/fixtures/tiny-artifact-review-app/docs/specs/failed-payment-grace-period.md +0 -24
  227. package/evals/fixtures/tiny-artifact-review-app/docs/specs/immediate-downgrade.md +0 -17
  228. package/evals/fixtures/tiny-artifact-review-app/tests/billing.test.md +0 -8
  229. package/evals/fixtures/tiny-commit-ambiguous-app/.freeflow-eval-setup.sh +0 -15
  230. package/evals/fixtures/tiny-commit-ambiguous-app/README.md +0 -3
  231. package/evals/fixtures/tiny-commit-ambiguous-app/src/billing.ts +0 -5
  232. package/evals/fixtures/tiny-commit-ambiguous-app/src/settings-page.ts +0 -1
  233. package/evals/fixtures/tiny-commit-ambiguous-app/tests/settings.test.md +0 -5
  234. package/evals/fixtures/tiny-commit-app/.freeflow-eval-setup.sh +0 -14
  235. package/evals/fixtures/tiny-commit-app/README.md +0 -3
  236. package/evals/fixtures/tiny-commit-app/docs/specs/settings-title.md +0 -5
  237. package/evals/fixtures/tiny-commit-app/src/billing.ts +0 -5
  238. package/evals/fixtures/tiny-commit-app/src/settings-page.ts +0 -1
  239. package/evals/fixtures/tiny-commit-app/tests/settings.test.md +0 -5
  240. package/evals/fixtures/tiny-commit-everything-app/.freeflow-eval-setup.sh +0 -15
  241. package/evals/fixtures/tiny-commit-everything-app/README.md +0 -3
  242. package/evals/fixtures/tiny-commit-everything-app/docs/specs/settings-title.md +0 -5
  243. package/evals/fixtures/tiny-commit-everything-app/src/billing.ts +0 -5
  244. package/evals/fixtures/tiny-commit-everything-app/src/settings-page.ts +0 -1
  245. package/evals/fixtures/tiny-commit-everything-app/tests/settings.test.md +0 -5
  246. package/evals/fixtures/tiny-commit-staged-app/.freeflow-eval-setup.sh +0 -15
  247. package/evals/fixtures/tiny-commit-staged-app/README.md +0 -3
  248. package/evals/fixtures/tiny-commit-staged-app/docs/specs/settings-title.md +0 -5
  249. package/evals/fixtures/tiny-commit-staged-app/src/billing.ts +0 -5
  250. package/evals/fixtures/tiny-commit-staged-app/src/settings-page.ts +0 -1
  251. package/evals/fixtures/tiny-commit-staged-app/tests/settings.test.md +0 -5
  252. package/evals/fixtures/tiny-commit-staged-mixed-app/.freeflow-eval-setup.sh +0 -15
  253. package/evals/fixtures/tiny-commit-staged-mixed-app/README.md +0 -3
  254. package/evals/fixtures/tiny-commit-staged-mixed-app/docs/billing-policy.md +0 -3
  255. package/evals/fixtures/tiny-commit-staged-mixed-app/docs/release-notes.md +0 -3
  256. package/evals/fixtures/tiny-commit-staged-mixed-app/src/billing.ts +0 -5
  257. package/evals/fixtures/tiny-dashboard-stale-app/README.md +0 -11
  258. package/evals/fixtures/tiny-dashboard-stale-app/src/api-client.ts +0 -13
  259. package/evals/fixtures/tiny-dashboard-stale-app/src/dashboard-data.ts +0 -19
  260. package/evals/fixtures/tiny-dashboard-stale-app/tests/dashboard-data.test.md +0 -9
  261. package/evals/fixtures/tiny-decision-destination-app/README.md +0 -6
  262. package/evals/fixtures/tiny-decision-destination-app/src/risk.ts +0 -8
  263. package/evals/fixtures/tiny-decision-destination-app/tests/risk.test.md +0 -4
  264. package/evals/fixtures/tiny-design-depth-app/README.md +0 -15
  265. package/evals/fixtures/tiny-design-depth-app/src/routes.ts +0 -25
  266. package/evals/fixtures/tiny-design-depth-app/src/sendEmail.ts +0 -3
  267. package/evals/fixtures/tiny-design-depth-app/src/sendSms.ts +0 -3
  268. package/evals/fixtures/tiny-design-depth-app/src/telemetry.ts +0 -3
  269. package/evals/fixtures/tiny-design-depth-app/tests/routes.test.md +0 -12
  270. package/evals/fixtures/tiny-eval-method-app/README.md +0 -8
  271. package/evals/fixtures/tiny-eval-method-app/evals/reports/review-pr-eval-result.md +0 -5
  272. package/evals/fixtures/tiny-eval-method-app/evals/reports/triage-question-failure.md +0 -17
  273. package/evals/fixtures/tiny-eval-method-app/evals/runs/review-pr-with-skill-output.diff +0 -11
  274. package/evals/fixtures/tiny-eval-method-app/evals/runs/review-pr-with-skill-output.md +0 -3
  275. package/evals/fixtures/tiny-eval-method-app/skills/review-pr/SKILL.md +0 -10
  276. package/evals/fixtures/tiny-eval-method-app/skills/triage-question/SKILL.md +0 -10
  277. package/evals/fixtures/tiny-execute-plan-app/README.md +0 -5
  278. package/evals/fixtures/tiny-execute-plan-app/checks/settings-and-billing-check.sh +0 -5
  279. package/evals/fixtures/tiny-execute-plan-app/docs/billing-policy.md +0 -10
  280. package/evals/fixtures/tiny-execute-plan-app/docs/plans/immediate-downgrade-plan.md +0 -11
  281. package/evals/fixtures/tiny-execute-plan-app/docs/plans/settings-title-plan.md +0 -12
  282. package/evals/fixtures/tiny-execute-plan-app/docs/plans/settings-title-with-bad-check.md +0 -15
  283. package/evals/fixtures/tiny-execute-plan-app/docs/plans/unverified-billing-plan.md +0 -9
  284. package/evals/fixtures/tiny-execute-plan-app/docs/specs/failed-payment-grace-period.md +0 -9
  285. package/evals/fixtures/tiny-execute-plan-app/docs/specs/settings-title.md +0 -9
  286. package/evals/fixtures/tiny-execute-plan-app/src/billing.ts +0 -7
  287. package/evals/fixtures/tiny-execute-plan-app/src/settings-page.ts +0 -1
  288. package/evals/fixtures/tiny-execute-plan-app/tests/billing.test.md +0 -7
  289. package/evals/fixtures/tiny-execute-plan-app/tests/settings.test.md +0 -5
  290. package/evals/fixtures/tiny-execute-review-loop-app/README.md +0 -5
  291. package/evals/fixtures/tiny-execute-review-loop-app/docs/billing-policy.md +0 -9
  292. package/evals/fixtures/tiny-execute-review-loop-app/docs/plans/settings-title-plan.md +0 -12
  293. package/evals/fixtures/tiny-execute-review-loop-app/docs/review/previous-agent-summary.md +0 -15
  294. package/evals/fixtures/tiny-execute-review-loop-app/docs/review/review-pass-1-non-pass.md +0 -11
  295. package/evals/fixtures/tiny-execute-review-loop-app/docs/specs/settings-title.md +0 -9
  296. package/evals/fixtures/tiny-execute-review-loop-app/src/billing.ts +0 -7
  297. package/evals/fixtures/tiny-execute-review-loop-app/src/settings-page.ts +0 -1
  298. package/evals/fixtures/tiny-execute-review-loop-app/tests/billing.test.md +0 -7
  299. package/evals/fixtures/tiny-execute-review-loop-app/tests/settings.test.md +0 -5
  300. package/evals/fixtures/tiny-flaky-session-app/README.md +0 -10
  301. package/evals/fixtures/tiny-flaky-session-app/src/session-timeout.ts +0 -13
  302. package/evals/fixtures/tiny-flaky-session-app/tests/session-timeout.test.md +0 -8
  303. package/evals/fixtures/tiny-handoff-app/README.md +0 -5
  304. package/evals/fixtures/tiny-handoff-app/docs/billing-policy.md +0 -10
  305. package/evals/fixtures/tiny-handoff-app/docs/handoffs/old-agent-handoff.md +0 -8
  306. package/evals/fixtures/tiny-handoff-app/docs/plans/billing-retry-plan.md +0 -11
  307. package/evals/fixtures/tiny-handoff-app/src/billing.ts +0 -7
  308. package/evals/fixtures/tiny-handoff-report-app/README.md +0 -3
  309. package/evals/fixtures/tiny-handoff-report-app/evals/runs/handoff-3/hof-003/with-skill-output.diff +0 -1
  310. package/evals/fixtures/tiny-handoff-report-app/evals/runs/handoff-3/hof-003/with-skill-output.md +0 -1
  311. package/evals/fixtures/tiny-handoff-report-app/evals/scores/hof-003-score.txt +0 -4
  312. package/evals/fixtures/tiny-plan-app/README.md +0 -5
  313. package/evals/fixtures/tiny-plan-app/docs/billing-policy.md +0 -10
  314. package/evals/fixtures/tiny-plan-app/docs/specs/failed-payment-grace-period.md +0 -25
  315. package/evals/fixtures/tiny-plan-app/src/billing.ts +0 -17
  316. package/evals/fixtures/tiny-plan-app/src/settings-page.ts +0 -1
  317. package/evals/fixtures/tiny-plan-app/tests/billing.test.md +0 -8
  318. package/evals/fixtures/tiny-plan-app/tests/settings.test.md +0 -5
  319. package/evals/fixtures/tiny-plan-strict-api-app/README.md +0 -3
  320. package/evals/fixtures/tiny-plan-strict-api-app/docs/billing-policy.md +0 -5
  321. package/evals/fixtures/tiny-plan-strict-api-app/docs/specs/billing-webhook-api.md +0 -25
  322. package/evals/fixtures/tiny-plan-strict-api-app/src/billing.ts +0 -5
  323. package/evals/fixtures/tiny-plan-strict-api-app/src/webhooks.ts +0 -3
  324. package/evals/fixtures/tiny-plan-strict-api-app/tests/billing-webhook.test.md +0 -8
  325. package/evals/fixtures/tiny-post-setup-invalid-config-app/.freeflow/config.json +0 -3
  326. package/evals/fixtures/tiny-post-setup-invalid-config-app/AGENTS.md +0 -15
  327. package/evals/fixtures/tiny-post-setup-invalid-config-app/README.md +0 -16
  328. package/evals/fixtures/tiny-post-setup-invalid-config-app/docs/auth-review.md +0 -15
  329. package/evals/fixtures/tiny-post-setup-invalid-config-app/docs/billing-policy.md +0 -10
  330. package/evals/fixtures/tiny-post-setup-invalid-config-app/docs/copy-conventions.md +0 -15
  331. package/evals/fixtures/tiny-post-setup-invalid-config-app/src/auth-middleware.ts +0 -12
  332. package/evals/fixtures/tiny-post-setup-invalid-config-app/src/billing.ts +0 -20
  333. package/evals/fixtures/tiny-post-setup-invalid-config-app/src/login-copy.ts +0 -1
  334. package/evals/fixtures/tiny-post-setup-invalid-config-app/src/settings-page.ts +0 -1
  335. package/evals/fixtures/tiny-post-setup-invalid-config-app/tests/auth-middleware.test.md +0 -8
  336. package/evals/fixtures/tiny-post-setup-invalid-config-app/tests/billing.test.md +0 -8
  337. package/evals/fixtures/tiny-post-setup-invalid-config-app/tests/copy.test.md +0 -7
  338. package/evals/fixtures/tiny-post-setup-missing-config-app/AGENTS.md +0 -15
  339. package/evals/fixtures/tiny-post-setup-missing-config-app/README.md +0 -16
  340. package/evals/fixtures/tiny-post-setup-missing-config-app/docs/auth-review.md +0 -15
  341. package/evals/fixtures/tiny-post-setup-missing-config-app/docs/billing-policy.md +0 -10
  342. package/evals/fixtures/tiny-post-setup-missing-config-app/docs/copy-conventions.md +0 -15
  343. package/evals/fixtures/tiny-post-setup-missing-config-app/src/auth-middleware.ts +0 -12
  344. package/evals/fixtures/tiny-post-setup-missing-config-app/src/billing.ts +0 -20
  345. package/evals/fixtures/tiny-post-setup-missing-config-app/src/login-copy.ts +0 -1
  346. package/evals/fixtures/tiny-post-setup-missing-config-app/src/settings-page.ts +0 -1
  347. package/evals/fixtures/tiny-post-setup-missing-config-app/tests/auth-middleware.test.md +0 -8
  348. package/evals/fixtures/tiny-post-setup-missing-config-app/tests/billing.test.md +0 -8
  349. package/evals/fixtures/tiny-post-setup-missing-config-app/tests/copy.test.md +0 -7
  350. package/evals/fixtures/tiny-post-setup-source-conflict-app/.freeflow/config.json +0 -3
  351. package/evals/fixtures/tiny-post-setup-source-conflict-app/AGENTS.md +0 -15
  352. package/evals/fixtures/tiny-post-setup-source-conflict-app/README.md +0 -16
  353. package/evals/fixtures/tiny-post-setup-source-conflict-app/docs/auth-review.md +0 -15
  354. package/evals/fixtures/tiny-post-setup-source-conflict-app/docs/billing-policy.md +0 -10
  355. package/evals/fixtures/tiny-post-setup-source-conflict-app/docs/copy-conventions.md +0 -15
  356. package/evals/fixtures/tiny-post-setup-source-conflict-app/src/auth-middleware.ts +0 -12
  357. package/evals/fixtures/tiny-post-setup-source-conflict-app/src/billing.ts +0 -20
  358. package/evals/fixtures/tiny-post-setup-source-conflict-app/src/login-copy.ts +0 -1
  359. package/evals/fixtures/tiny-post-setup-source-conflict-app/src/settings-page.ts +0 -1
  360. package/evals/fixtures/tiny-post-setup-source-conflict-app/tests/auth-middleware.test.md +0 -8
  361. package/evals/fixtures/tiny-post-setup-source-conflict-app/tests/billing.test.md +0 -8
  362. package/evals/fixtures/tiny-post-setup-source-conflict-app/tests/copy.test.md +0 -7
  363. package/evals/fixtures/tiny-report-performance-app/README.md +0 -11
  364. package/evals/fixtures/tiny-report-performance-app/docs/performance.md +0 -10
  365. package/evals/fixtures/tiny-report-performance-app/src/report-summary.ts +0 -29
  366. package/evals/fixtures/tiny-report-performance-app/tests/report-performance.test.md +0 -8
  367. package/evals/fixtures/tiny-review-request-app/README.md +0 -3
  368. package/evals/fixtures/tiny-review-request-app/docs/billing-policy.md +0 -5
  369. package/evals/fixtures/tiny-review-request-app/docs/plans/billing-webhook-api.md +0 -19
  370. package/evals/fixtures/tiny-review-request-app/docs/review/previous-agent-summary.md +0 -20
  371. package/evals/fixtures/tiny-review-request-app/docs/specs/billing-webhook-api.md +0 -25
  372. package/evals/fixtures/tiny-review-request-app/src/billing.ts +0 -11
  373. package/evals/fixtures/tiny-review-request-app/src/webhooks.ts +0 -19
  374. package/evals/fixtures/tiny-review-request-app/tests/billing-webhook.test.md +0 -8
  375. package/evals/fixtures/tiny-review-work-app/README.md +0 -5
  376. package/evals/fixtures/tiny-review-work-app/docs/billing-policy.md +0 -9
  377. package/evals/fixtures/tiny-review-work-app/docs/plans/settings-title-plan.md +0 -12
  378. package/evals/fixtures/tiny-review-work-app/docs/review/previous-agent-summary.md +0 -15
  379. package/evals/fixtures/tiny-review-work-app/docs/specs/settings-title.md +0 -9
  380. package/evals/fixtures/tiny-review-work-app/src/billing.ts +0 -7
  381. package/evals/fixtures/tiny-review-work-app/src/settings-page.ts +0 -1
  382. package/evals/fixtures/tiny-review-work-app/tests/billing.test.md +0 -7
  383. package/evals/fixtures/tiny-review-work-app/tests/settings.test.md +0 -5
  384. package/evals/fixtures/tiny-saas-app/README.md +0 -16
  385. package/evals/fixtures/tiny-saas-app/docs/auth-review.md +0 -15
  386. package/evals/fixtures/tiny-saas-app/docs/billing-policy.md +0 -10
  387. package/evals/fixtures/tiny-saas-app/docs/copy-conventions.md +0 -15
  388. package/evals/fixtures/tiny-saas-app/docs/specs/settings-title.md +0 -13
  389. package/evals/fixtures/tiny-saas-app/src/auth-middleware.ts +0 -12
  390. package/evals/fixtures/tiny-saas-app/src/billing.ts +0 -20
  391. package/evals/fixtures/tiny-saas-app/src/login-copy.ts +0 -1
  392. package/evals/fixtures/tiny-saas-app/src/settings-page.ts +0 -1
  393. package/evals/fixtures/tiny-saas-app/tests/auth-middleware.test.md +0 -8
  394. package/evals/fixtures/tiny-saas-app/tests/billing.test.md +0 -8
  395. package/evals/fixtures/tiny-saas-app/tests/copy.test.md +0 -7
  396. package/evals/fixtures/tiny-setup-agents-app/AGENTS.md +0 -6
  397. package/evals/fixtures/tiny-setup-both-app/AGENTS.md +0 -5
  398. package/evals/fixtures/tiny-setup-both-app/CLAUDE.md +0 -5
  399. package/evals/fixtures/tiny-setup-claude-app/CLAUDE.md +0 -6
  400. package/evals/fixtures/tiny-setup-codex-rules-app/.codex/rules/shell.rules +0 -5
  401. package/evals/fixtures/tiny-setup-codex-rules-app/AGENTS.md +0 -6
  402. package/evals/fixtures/tiny-setup-conflict-app/AGENTS.md +0 -6
  403. package/evals/fixtures/tiny-setup-existing-block-app/AGENTS.md +0 -14
  404. package/evals/fixtures/tiny-setup-four-rules-app/CLAUDE.md +0 -6
  405. package/evals/fixtures/tiny-skill-dev-app/README.md +0 -10
  406. package/evals/fixtures/tiny-skill-dev-app/evals/prompts/review-pr-001.txt +0 -8
  407. package/evals/fixtures/tiny-skill-dev-app/evals/reports/review-pr-failure.md +0 -17
  408. package/evals/fixtures/tiny-skill-dev-app/skills/review-pr/SKILL.md +0 -13
  409. package/evals/fixtures/tiny-team-app/README.md +0 -5
  410. package/evals/fixtures/tiny-team-app/docs/product.md +0 -6
  411. package/evals/fixtures/tiny-team-app/src/teams.ts +0 -9
  412. package/evals/fixtures/tiny-team-app/src/users.ts +0 -5
  413. package/evals/fixtures/tiny-team-app/tests/teams.test.md +0 -7
  414. package/evals/fixtures/tiny-verify-app/README.md +0 -5
  415. package/evals/fixtures/tiny-verify-app/src/settings-nav.ts +0 -1
  416. package/evals/fixtures/tiny-verify-app/src/settings-page.ts +0 -1
  417. package/evals/fixtures/tiny-verify-app/tests/settings.test.md +0 -7
  418. package/evals/prompts/aon-001.txt +0 -2
  419. package/evals/prompts/byp-001.txt +0 -2
  420. package/evals/prompts/byp-002.txt +0 -2
  421. package/evals/prompts/cap-001.txt +0 -3
  422. package/evals/prompts/cap-002.txt +0 -3
  423. package/evals/prompts/cmd-001.txt +0 -3
  424. package/evals/prompts/cmd-002.txt +0 -3
  425. package/evals/prompts/cmd-003.txt +0 -6
  426. package/evals/prompts/cmd-004.txt +0 -5
  427. package/evals/prompts/cmd-005.txt +0 -5
  428. package/evals/prompts/cmd-006.txt +0 -5
  429. package/evals/prompts/cmd-007.txt +0 -5
  430. package/evals/prompts/cmd-008.txt +0 -5
  431. package/evals/prompts/cmd-009.txt +0 -8
  432. package/evals/prompts/cmd-010.txt +0 -5
  433. package/evals/prompts/cmd-011.txt +0 -5
  434. package/evals/prompts/cmd-012.txt +0 -5
  435. package/evals/prompts/cmd-013.txt +0 -5
  436. package/evals/prompts/cmd-014.txt +0 -7
  437. package/evals/prompts/cmd-015.txt +0 -7
  438. package/evals/prompts/cmd-016.txt +0 -5
  439. package/evals/prompts/cmt-001.txt +0 -1
  440. package/evals/prompts/cmt-002.txt +0 -1
  441. package/evals/prompts/cmt-003.txt +0 -1
  442. package/evals/prompts/cmt-004.txt +0 -1
  443. package/evals/prompts/cmt-005.txt +0 -1
  444. package/evals/prompts/dfd-001.txt +0 -3
  445. package/evals/prompts/dia-001.txt +0 -3
  446. package/evals/prompts/dia-002.txt +0 -3
  447. package/evals/prompts/dia-003.txt +0 -3
  448. package/evals/prompts/dis-001.txt +0 -5
  449. package/evals/prompts/dis-002.txt +0 -5
  450. package/evals/prompts/esk-001.txt +0 -5
  451. package/evals/prompts/esk-002.txt +0 -5
  452. package/evals/prompts/esk-003.txt +0 -5
  453. package/evals/prompts/grc-001.txt +0 -3
  454. package/evals/prompts/hof-001.txt +0 -3
  455. package/evals/prompts/hof-002.txt +0 -1
  456. package/evals/prompts/hof-003.txt +0 -1
  457. package/evals/prompts/hof-004.txt +0 -1
  458. package/evals/prompts/hof-005.txt +0 -1
  459. package/evals/prompts/ivg-001.txt +0 -1
  460. package/evals/prompts/ivg-002.txt +0 -11
  461. package/evals/prompts/ivg-003.txt +0 -1
  462. package/evals/prompts/ivg-004.txt +0 -1
  463. package/evals/prompts/mode-001.txt +0 -3
  464. package/evals/prompts/mode-002.txt +0 -1
  465. package/evals/prompts/mode-003.txt +0 -3
  466. package/evals/prompts/mode-004.txt +0 -3
  467. package/evals/prompts/mode-005.txt +0 -3
  468. package/evals/prompts/mode-006.txt +0 -3
  469. package/evals/prompts/mode-007.txt +0 -3
  470. package/evals/prompts/otr-001.txt +0 -3
  471. package/evals/prompts/otr-002.txt +0 -3
  472. package/evals/prompts/rar-001.txt +0 -5
  473. package/evals/prompts/rar-002.txt +0 -3
  474. package/evals/prompts/rar-003.txt +0 -6
  475. package/evals/prompts/rar-004.txt +0 -15
  476. package/evals/prompts/rar-005.txt +0 -10
  477. package/evals/prompts/rbr-001.txt +0 -3
  478. package/evals/prompts/rbr-002.txt +0 -3
  479. package/evals/prompts/rbr-003.txt +0 -7
  480. package/evals/prompts/rev-001.txt +0 -3
  481. package/evals/prompts/rev-002.txt +0 -5
  482. package/evals/prompts/rev-003.txt +0 -6
  483. package/evals/prompts/rev-004.txt +0 -1
  484. package/evals/prompts/rev-005.txt +0 -15
  485. package/evals/prompts/rev-006.txt +0 -5
  486. package/evals/prompts/stp-001.txt +0 -1
  487. package/evals/prompts/stp-002.txt +0 -1
  488. package/evals/prompts/stp-003.txt +0 -1
  489. package/evals/prompts/stp-004.txt +0 -1
  490. package/evals/prompts/stp-005.txt +0 -1
  491. package/evals/prompts/stp-006.txt +0 -1
  492. package/evals/prompts/stp-007.txt +0 -1
  493. package/evals/prompts/stp-008.txt +0 -1
  494. package/evals/prompts/stp-009.txt +0 -1
  495. package/evals/prompts/stp-010.txt +0 -1
  496. package/evals/prompts/stp-011.txt +0 -1
  497. package/evals/prompts/vfy-003.txt +0 -1
  498. package/evals/prompts/wpl-001.txt +0 -3
  499. package/evals/prompts/wpl-002.txt +0 -5
  500. package/evals/prompts/wpl-003.txt +0 -3
  501. package/evals/prompts/wpl-004.txt +0 -5
  502. package/evals/prompts/wpl-005.txt +0 -1
  503. package/evals/prompts/wrc-001.txt +0 -10
  504. package/evals/prompts/wrc-002.txt +0 -3
  505. package/evals/prompts/wsk-001.txt +0 -6
  506. package/evals/prompts/wsp-001.txt +0 -5
  507. package/evals/prompts/wsp-002.txt +0 -15
  508. package/evals/prompts/wsp-003.txt +0 -3
  509. package/evals/prompts/wsp-004.txt +0 -15
  510. package/evals/prompts/wsp-005.txt +0 -5
  511. package/evals/prompts/wsp-006.txt +0 -12
  512. package/evals/prompts/wsp-007.txt +0 -9
  513. package/evals/prompts/wsp-008.txt +0 -13
  514. package/evals/prompts/xpl-001.txt +0 -1
  515. package/evals/prompts/xpl-002.txt +0 -3
  516. package/evals/prompts/xpl-003.txt +0 -3
  517. package/evals/prompts/xpl-004.txt +0 -3
  518. package/evals/prompts/xpl-005.txt +0 -5
  519. package/evals/prompts/xpl-006.txt +0 -3
  520. package/evals/registries/adversarial-evals.json +0 -39
  521. package/evals/registries/fixture-evals.json +0 -2513
  522. package/evals/registries/handoff-evals.json +0 -74
  523. package/evals/registries/legacy-evals.json +0 -147
  524. package/evals/registries/skill-evidence.json +0 -193
  525. package/evals/registries/verify-work-evals.json +0 -46
  526. package/evals/reports/acceptance/v0.1-acceptance-report.md +0 -130
  527. package/evals/reports/by-command-surface/command-surface-1-report.md +0 -45
  528. package/evals/reports/by-command-surface/command-surface-10-report.md +0 -76
  529. package/evals/reports/by-command-surface/command-surface-11-report.md +0 -77
  530. package/evals/reports/by-command-surface/command-surface-12-report.md +0 -91
  531. package/evals/reports/by-command-surface/command-surface-13-report.md +0 -64
  532. package/evals/reports/by-command-surface/command-surface-14-report.md +0 -66
  533. package/evals/reports/by-command-surface/command-surface-15-report.md +0 -124
  534. package/evals/reports/by-command-surface/command-surface-16-report.md +0 -39
  535. package/evals/reports/by-command-surface/command-surface-2-report.md +0 -80
  536. package/evals/reports/by-command-surface/command-surface-3-report.md +0 -86
  537. package/evals/reports/by-command-surface/command-surface-4-report.md +0 -76
  538. package/evals/reports/by-command-surface/command-surface-5-report.md +0 -80
  539. package/evals/reports/by-command-surface/command-surface-6-report.md +0 -74
  540. package/evals/reports/by-command-surface/command-surface-7-report.md +0 -84
  541. package/evals/reports/by-command-surface/command-surface-8-report.md +0 -79
  542. package/evals/reports/by-command-surface/command-surface-9-report.md +0 -79
  543. package/evals/reports/by-command-surface/command-surface-matrix.md +0 -91
  544. package/evals/reports/by-skill/bypass-1-report.md +0 -124
  545. package/evals/reports/by-skill/capture-decisions-1-report.md +0 -99
  546. package/evals/reports/by-skill/capture-decisions-2-report.md +0 -102
  547. package/evals/reports/by-skill/commit-work-1-report.md +0 -165
  548. package/evals/reports/by-skill/commit-work-2-report.md +0 -109
  549. package/evals/reports/by-skill/design-for-depth-1-report.md +0 -95
  550. package/evals/reports/by-skill/diagnose-failure-1-report.md +0 -91
  551. package/evals/reports/by-skill/diagnose-failure-2-report.md +0 -94
  552. package/evals/reports/by-skill/discover-1-report.md +0 -118
  553. package/evals/reports/by-skill/evaluate-skill-2-report.md +0 -71
  554. package/evals/reports/by-skill/execute-plan-1-report.md +0 -103
  555. package/evals/reports/by-skill/execute-plan-2-report.md +0 -112
  556. package/evals/reports/by-skill/execute-plan-3-report.md +0 -87
  557. package/evals/reports/by-skill/grill-context-1-report.md +0 -103
  558. package/evals/reports/by-skill/handoff-1-report.md +0 -123
  559. package/evals/reports/by-skill/handoff-2-report.md +0 -105
  560. package/evals/reports/by-skill/handoff-3-report.md +0 -100
  561. package/evals/reports/by-skill/handoff-7-report.md +0 -77
  562. package/evals/reports/by-skill/interview-gate-1-report.md +0 -63
  563. package/evals/reports/by-skill/interview-gate-2-report.md +0 -105
  564. package/evals/reports/by-skill/mode-contract-1-report.md +0 -74
  565. package/evals/reports/by-skill/mode-contract-2-report.md +0 -87
  566. package/evals/reports/by-skill/mode-contract-3-report.md +0 -65
  567. package/evals/reports/by-skill/mode-contract-4-report.md +0 -71
  568. package/evals/reports/by-skill/mode-contract-5-report.md +0 -70
  569. package/evals/reports/by-skill/output-router-1-report.md +0 -76
  570. package/evals/reports/by-skill/output-router-2-report.md +0 -65
  571. package/evals/reports/by-skill/research-1-report.md +0 -144
  572. package/evals/reports/by-skill/research-brief-1-report.md +0 -94
  573. package/evals/reports/by-skill/research-brief-2-report.md +0 -75
  574. package/evals/reports/by-skill/review-artifact-1-report.md +0 -91
  575. package/evals/reports/by-skill/review-artifact-2-report.md +0 -79
  576. package/evals/reports/by-skill/review-artifact-3-report.md +0 -120
  577. package/evals/reports/by-skill/review-artifact-4-report.md +0 -89
  578. package/evals/reports/by-skill/review-artifact-5-report.md +0 -66
  579. package/evals/reports/by-skill/review-work-1-report.md +0 -85
  580. package/evals/reports/by-skill/review-work-2-report.md +0 -87
  581. package/evals/reports/by-skill/review-work-3-report.md +0 -104
  582. package/evals/reports/by-skill/review-work-4-report.md +0 -108
  583. package/evals/reports/by-skill/review-work-5-report.md +0 -73
  584. package/evals/reports/by-skill/review-work-6-report.md +0 -66
  585. package/evals/reports/by-skill/setup-freeflow-1-report.md +0 -199
  586. package/evals/reports/by-skill/setup-freeflow-2-report.md +0 -105
  587. package/evals/reports/by-skill/setup-freeflow-3-report.md +0 -105
  588. package/evals/reports/by-skill/setup-freeflow-4-report.md +0 -88
  589. package/evals/reports/by-skill/setup-freeflow-5-report.md +0 -115
  590. package/evals/reports/by-skill/skill-authoring-1-report.md +0 -81
  591. package/evals/reports/by-skill/verify-work-1-report.md +0 -111
  592. package/evals/reports/by-skill/verify-work-2-report.md +0 -120
  593. package/evals/reports/by-skill/workflow-1-report.md +0 -65
  594. package/evals/reports/by-skill/write-plan-1-report.md +0 -123
  595. package/evals/reports/by-skill/write-plan-2-report.md +0 -98
  596. package/evals/reports/by-skill/write-plan-3-report.md +0 -110
  597. package/evals/reports/by-skill/write-spec-1-report.md +0 -88
  598. package/evals/reports/by-skill/write-spec-2-report.md +0 -89
  599. package/evals/reports/by-skill/write-spec-3-report.md +0 -90
  600. package/evals/reports/by-skill/write-spec-4-report.md +0 -167
  601. package/evals/reports/harness/claude-harness-1-report.md +0 -103
  602. package/evals/reports/harness/eval-harness-1-report.md +0 -91
  603. package/evals/reports/iterations/iteration-1-report.md +0 -71
  604. package/evals/reports/iterations/iteration-2-report.md +0 -78
  605. package/evals/reports/iterations/iteration-3-report.md +0 -118
  606. package/evals/reports/iterations/iteration-4-report.md +0 -131
  607. package/evals/reports/iterations/iteration-5-report.md +0 -149
  608. package/evals/reports/iterations/iteration-6-report.md +0 -136
  609. package/evals/reports/runtime/always-on-runtime-1-report.md +0 -107
  610. package/evals/reports/runtime/context-mode-normalized-benchmark-1-report.md +0 -52
  611. package/evals/reports/runtime/context-mode-real-deep-baseline-1-report.md +0 -410
  612. package/evals/reports/runtime/context-mode-real-deep-final-slice-11-report.md +0 -203
  613. package/evals/reports/runtime/context-mode-real-deep-final-slice-11-review.md +0 -51
  614. package/evals/reports/runtime/context-saving-native-tools-baseline-1-report.md +0 -99
  615. package/evals/reports/runtime/eryx-python-compatibility-reprobe-1-report.md +0 -166
  616. package/evals/reports/runtime/eryx-python-proof-spike-1-report.md +0 -96
  617. package/evals/reports/runtime/eryx-python-proof-spike-2-report.md +0 -151
  618. package/evals/reports/runtime/eryx-python-script-derive-execution-1-report.md +0 -233
  619. package/evals/reports/runtime/jq-script-derive-execution-1-report.md +0 -215
  620. package/evals/reports/runtime/jq-wasm-proof-spike-1-report.md +0 -67
  621. package/evals/reports/runtime/output-router-benchmark-1-report.md +0 -81
  622. package/evals/reports/runtime/output-router-capture-derive-provider-eval-1-report.md +0 -35
  623. package/evals/reports/runtime/output-router-codex-large-index-sqlite-adhoc-report.md +0 -150
  624. package/evals/reports/runtime/output-router-codex-qa-benchmark-1-report.md +0 -46
  625. package/evals/reports/runtime/output-router-command-benchmark-1-report.md +0 -62
  626. package/evals/reports/runtime/output-router-index-benchmark-1-report.md +0 -64
  627. package/evals/reports/runtime/output-router-regression-1-report.md +0 -81
  628. package/evals/reports/runtime/output-router-transform-eval-1-report.md +0 -28
  629. package/evals/reports/runtime/pi-observed-routing-eval-1-report.md +0 -44
  630. package/evals/reports/runtime/quickjs-script-derive-execution-1-report.md +0 -159
  631. package/evals/reports/runtime/quickjs-wasi-proof-spike-1-report.md +0 -55
  632. package/evals/reports/runtime/render-format-row-protocol-1-report.md +0 -58
  633. package/evals/reports/runtime/script-sandbox-adapter-selection-review-1-report.md +0 -84
  634. package/evals/reports/runtime/script-sandbox-probe-resource-hardening-1-report.md +0 -51
  635. package/evals/reports/runtime/storage-policy-benchmark-1-report.md +0 -176
  636. package/evals/reports/runtime/vault-index-storage-spike-1-report.md +0 -39
  637. package/evals/reports/runtime/workflow-context-hook-1-report.md +0 -82
  638. package/evals/runbooks/adversarial-eval-runbook.md +0 -28
  639. package/evals/runbooks/fixture-eval-runbook.md +0 -137
  640. package/evals/runbooks/handoff-eval-runbook.md +0 -22
  641. package/evals/runbooks/verify-work-eval-runbook.md +0 -27
  642. package/evals/scripts/audit-command-surface.sh +0 -160
  643. package/evals/scripts/check-activation-contract.sh +0 -121
  644. package/evals/scripts/check-runtime-context-hook.sh +0 -183
  645. package/evals/scripts/grade-fixture-eval.sh +0 -446
  646. package/evals/scripts/run-claude-fixture-eval.sh +0 -26
  647. package/evals/scripts/run-codex-fixture-eval.sh +0 -26
  648. package/evals/scripts/run-eryx-python-proof-spike.js +0 -559
  649. package/evals/scripts/run-fixture-eval-by-id.sh +0 -23
  650. package/evals/scripts/run-fixture-eval.sh +0 -464
  651. package/evals/scripts/run-jq-wasm-proof-spike.js +0 -299
  652. package/evals/scripts/run-output-router-transform-eval.js +0 -115
  653. package/evals/scripts/run-pi-observed-routing-eval.js +0 -478
  654. package/evals/scripts/run-quickjs-wasi-proof-spike.js +0 -339
  655. package/evals/scripts/skill-evidence.sh +0 -316
  656. package/evals/scripts/validate-release-metadata.sh +0 -486
  657. package/evals/suites/v0.1-acceptance-suite.md +0 -131
  658. package/pi-extension/dist/host-producer-identification.js +0 -186
  659. package/pi-extension/dist/mcp-config.js +0 -30
  660. package/pi-extension/dist/native-safety-net.js +0 -209
  661. package/pi-extension/dist/observed-tool-routing.js +0 -114
  662. package/pi-extension/dist/renderers.js +0 -835
  663. package/pi-extension/dist/router-tools.js +0 -438
  664. package/pi-extension/dist/runtime-context.js +0 -288
  665. package/pi-extension/dist/schemas.js +0 -254
  666. package/pi-extension/dist/status.js +0 -449
  667. package/pi-extension/dist/utils.js +0 -467
  668. package/pi-extension/src/runtime-context.ts +0 -347
  669. package/pi-extension/src/status.ts +0 -505
  670. package/plugin-docs/README.md +0 -40
  671. package/plugin-docs/adr/0001-three-modes.md +0 -27
  672. package/plugin-docs/adr/0002-evals-before-hooks.md +0 -17
  673. package/plugin-docs/adr/0003-release-boundary.md +0 -21
  674. package/plugin-docs/adr/0004-discover-replaces-shallow-discovery-skills.md +0 -26
  675. package/plugin-docs/adr/README.md +0 -10
  676. package/plugin-docs/architecture.md +0 -89
  677. package/plugin-docs/output-router.md +0 -396
  678. package/plugin-docs/release-evidence.md +0 -77
  679. package/plugin-docs/skills.md +0 -44
  680. package/plugin-docs/workflow.md +0 -57
  681. package/skills/diagnose-failure/references/feedback-loop-catalog.md +0 -25
  682. package/skills/discover/ARTIFACT-DESTINATIONS.md +0 -58
  683. package/skills/discover/CHECKPOINTS.md +0 -74
  684. package/skills/discover/SKILL.md +0 -173
  685. package/skills/evaluate-skill/references/eval-patterns.md +0 -41
  686. package/skills/evaluate-skill/references/grading-priority.md +0 -33
  687. package/skills/execute-plan/SKILL.md +0 -133
  688. package/skills/execute-plan/references/execution-map.md +0 -122
  689. package/skills/interview-gate/SKILL.md +0 -90
  690. package/skills/setup-freeflow/references/output-router-setup.md +0 -102
  691. package/skills/workflow/references/workflow-map.md +0 -104
  692. /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
  }