@hassangameryt/freeflow 0.1.0 → 0.3.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 (630) hide show
  1. package/.agents/plugins/marketplace.json +1 -1
  2. package/.claude-plugin/marketplace.json +2 -2
  3. package/{plugins/freeflow/.claude-plugin → .claude-plugin}/plugin.json +1 -1
  4. package/{plugins/freeflow/.codex-plugin → .codex-plugin}/plugin.json +1 -1
  5. package/README.md +25 -16
  6. package/assets/freeflow-plugin-icon.png +0 -0
  7. package/{plugins/freeflow/command-surface.json → command-surface.json} +10 -10
  8. package/evals/README.md +32 -0
  9. package/evals/fixtures/copy-conventions.md +31 -0
  10. package/evals/fixtures/output-router/README.md +12 -0
  11. package/evals/fixtures/output-router/failed-command-output.txt +9 -0
  12. package/evals/fixtures/output-router/large-router-manual.md +63 -0
  13. package/evals/fixtures/output-router/native-large-output.txt +40 -0
  14. package/evals/fixtures/output-router/noisy-test-output.txt +30 -0
  15. package/evals/fixtures/output-router/verification-output.txt +8 -0
  16. package/evals/fixtures/tiny-artifact-review-app/README.md +5 -0
  17. package/evals/fixtures/tiny-artifact-review-app/docs/billing-policy.md +10 -0
  18. package/evals/fixtures/tiny-artifact-review-app/docs/specs/billing-webhook-api-draft.md +21 -0
  19. package/evals/fixtures/tiny-artifact-review-app/docs/specs/failed-payment-grace-period.md +24 -0
  20. package/evals/fixtures/tiny-artifact-review-app/docs/specs/immediate-downgrade.md +17 -0
  21. package/evals/fixtures/tiny-artifact-review-app/tests/billing.test.md +8 -0
  22. package/evals/fixtures/tiny-commit-ambiguous-app/.freeflow-eval-setup.sh +15 -0
  23. package/evals/fixtures/tiny-commit-ambiguous-app/README.md +3 -0
  24. package/evals/fixtures/tiny-commit-ambiguous-app/src/billing.ts +5 -0
  25. package/evals/fixtures/tiny-commit-ambiguous-app/src/settings-page.ts +1 -0
  26. package/evals/fixtures/tiny-commit-ambiguous-app/tests/settings.test.md +5 -0
  27. package/evals/fixtures/tiny-commit-app/.freeflow-eval-setup.sh +14 -0
  28. package/evals/fixtures/tiny-commit-app/README.md +3 -0
  29. package/evals/fixtures/tiny-commit-app/docs/specs/settings-title.md +5 -0
  30. package/evals/fixtures/tiny-commit-app/src/billing.ts +5 -0
  31. package/evals/fixtures/tiny-commit-app/src/settings-page.ts +1 -0
  32. package/evals/fixtures/tiny-commit-app/tests/settings.test.md +5 -0
  33. package/evals/fixtures/tiny-commit-everything-app/.freeflow-eval-setup.sh +15 -0
  34. package/evals/fixtures/tiny-commit-everything-app/README.md +3 -0
  35. package/evals/fixtures/tiny-commit-everything-app/docs/specs/settings-title.md +5 -0
  36. package/evals/fixtures/tiny-commit-everything-app/src/billing.ts +5 -0
  37. package/evals/fixtures/tiny-commit-everything-app/src/settings-page.ts +1 -0
  38. package/evals/fixtures/tiny-commit-everything-app/tests/settings.test.md +5 -0
  39. package/evals/fixtures/tiny-commit-staged-app/.freeflow-eval-setup.sh +15 -0
  40. package/evals/fixtures/tiny-commit-staged-app/README.md +3 -0
  41. package/evals/fixtures/tiny-commit-staged-app/docs/specs/settings-title.md +5 -0
  42. package/evals/fixtures/tiny-commit-staged-app/src/billing.ts +5 -0
  43. package/evals/fixtures/tiny-commit-staged-app/src/settings-page.ts +1 -0
  44. package/evals/fixtures/tiny-commit-staged-app/tests/settings.test.md +5 -0
  45. package/evals/fixtures/tiny-commit-staged-mixed-app/.freeflow-eval-setup.sh +15 -0
  46. package/evals/fixtures/tiny-commit-staged-mixed-app/README.md +3 -0
  47. package/evals/fixtures/tiny-commit-staged-mixed-app/docs/billing-policy.md +3 -0
  48. package/evals/fixtures/tiny-commit-staged-mixed-app/docs/release-notes.md +3 -0
  49. package/evals/fixtures/tiny-commit-staged-mixed-app/src/billing.ts +5 -0
  50. package/evals/fixtures/tiny-dashboard-stale-app/README.md +11 -0
  51. package/evals/fixtures/tiny-dashboard-stale-app/src/api-client.ts +13 -0
  52. package/evals/fixtures/tiny-dashboard-stale-app/src/dashboard-data.ts +19 -0
  53. package/evals/fixtures/tiny-dashboard-stale-app/tests/dashboard-data.test.md +9 -0
  54. package/evals/fixtures/tiny-decision-destination-app/README.md +6 -0
  55. package/evals/fixtures/tiny-decision-destination-app/src/risk.ts +8 -0
  56. package/evals/fixtures/tiny-decision-destination-app/tests/risk.test.md +4 -0
  57. package/evals/fixtures/tiny-design-depth-app/README.md +15 -0
  58. package/evals/fixtures/tiny-design-depth-app/src/routes.ts +25 -0
  59. package/evals/fixtures/tiny-design-depth-app/src/sendEmail.ts +3 -0
  60. package/evals/fixtures/tiny-design-depth-app/src/sendSms.ts +3 -0
  61. package/evals/fixtures/tiny-design-depth-app/src/telemetry.ts +3 -0
  62. package/evals/fixtures/tiny-design-depth-app/tests/routes.test.md +12 -0
  63. package/evals/fixtures/tiny-eval-method-app/README.md +8 -0
  64. package/evals/fixtures/tiny-eval-method-app/evals/reports/review-pr-eval-result.md +5 -0
  65. package/evals/fixtures/tiny-eval-method-app/evals/reports/triage-question-failure.md +17 -0
  66. package/evals/fixtures/tiny-eval-method-app/evals/runs/review-pr-with-skill-output.diff +11 -0
  67. package/evals/fixtures/tiny-eval-method-app/evals/runs/review-pr-with-skill-output.md +3 -0
  68. package/evals/fixtures/tiny-eval-method-app/skills/review-pr/SKILL.md +10 -0
  69. package/evals/fixtures/tiny-eval-method-app/skills/triage-question/SKILL.md +10 -0
  70. package/evals/fixtures/tiny-execute-plan-app/README.md +5 -0
  71. package/evals/fixtures/tiny-execute-plan-app/checks/settings-and-billing-check.sh +5 -0
  72. package/evals/fixtures/tiny-execute-plan-app/docs/billing-policy.md +10 -0
  73. package/evals/fixtures/tiny-execute-plan-app/docs/plans/immediate-downgrade-plan.md +11 -0
  74. package/evals/fixtures/tiny-execute-plan-app/docs/plans/settings-title-plan.md +12 -0
  75. package/evals/fixtures/tiny-execute-plan-app/docs/plans/settings-title-with-bad-check.md +15 -0
  76. package/evals/fixtures/tiny-execute-plan-app/docs/plans/unverified-billing-plan.md +9 -0
  77. package/evals/fixtures/tiny-execute-plan-app/docs/specs/failed-payment-grace-period.md +9 -0
  78. package/evals/fixtures/tiny-execute-plan-app/docs/specs/settings-title.md +9 -0
  79. package/evals/fixtures/tiny-execute-plan-app/src/billing.ts +7 -0
  80. package/evals/fixtures/tiny-execute-plan-app/src/settings-page.ts +1 -0
  81. package/evals/fixtures/tiny-execute-plan-app/tests/billing.test.md +7 -0
  82. package/evals/fixtures/tiny-execute-plan-app/tests/settings.test.md +5 -0
  83. package/evals/fixtures/tiny-execute-review-loop-app/README.md +5 -0
  84. package/evals/fixtures/tiny-execute-review-loop-app/docs/billing-policy.md +9 -0
  85. package/evals/fixtures/tiny-execute-review-loop-app/docs/plans/settings-title-plan.md +12 -0
  86. package/evals/fixtures/tiny-execute-review-loop-app/docs/review/previous-agent-summary.md +15 -0
  87. package/evals/fixtures/tiny-execute-review-loop-app/docs/review/review-pass-1-non-pass.md +11 -0
  88. package/evals/fixtures/tiny-execute-review-loop-app/docs/specs/settings-title.md +9 -0
  89. package/evals/fixtures/tiny-execute-review-loop-app/src/billing.ts +7 -0
  90. package/evals/fixtures/tiny-execute-review-loop-app/src/settings-page.ts +1 -0
  91. package/evals/fixtures/tiny-execute-review-loop-app/tests/billing.test.md +7 -0
  92. package/evals/fixtures/tiny-execute-review-loop-app/tests/settings.test.md +5 -0
  93. package/evals/fixtures/tiny-flaky-session-app/README.md +10 -0
  94. package/evals/fixtures/tiny-flaky-session-app/src/session-timeout.ts +13 -0
  95. package/evals/fixtures/tiny-flaky-session-app/tests/session-timeout.test.md +8 -0
  96. package/evals/fixtures/tiny-handoff-app/README.md +5 -0
  97. package/evals/fixtures/tiny-handoff-app/docs/billing-policy.md +10 -0
  98. package/evals/fixtures/tiny-handoff-app/docs/handoffs/old-agent-handoff.md +8 -0
  99. package/evals/fixtures/tiny-handoff-app/docs/plans/billing-retry-plan.md +11 -0
  100. package/evals/fixtures/tiny-handoff-app/src/billing.ts +7 -0
  101. package/evals/fixtures/tiny-handoff-report-app/README.md +3 -0
  102. package/evals/fixtures/tiny-handoff-report-app/evals/runs/handoff-3/hof-003/with-skill-output.diff +1 -0
  103. package/evals/fixtures/tiny-handoff-report-app/evals/runs/handoff-3/hof-003/with-skill-output.md +1 -0
  104. package/evals/fixtures/tiny-handoff-report-app/evals/scores/hof-003-score.txt +4 -0
  105. package/evals/fixtures/tiny-plan-app/README.md +5 -0
  106. package/evals/fixtures/tiny-plan-app/docs/billing-policy.md +10 -0
  107. package/evals/fixtures/tiny-plan-app/docs/specs/failed-payment-grace-period.md +25 -0
  108. package/evals/fixtures/tiny-plan-app/src/billing.ts +17 -0
  109. package/evals/fixtures/tiny-plan-app/src/settings-page.ts +1 -0
  110. package/evals/fixtures/tiny-plan-app/tests/billing.test.md +8 -0
  111. package/evals/fixtures/tiny-plan-app/tests/settings.test.md +5 -0
  112. package/evals/fixtures/tiny-plan-strict-api-app/README.md +3 -0
  113. package/evals/fixtures/tiny-plan-strict-api-app/docs/billing-policy.md +5 -0
  114. package/evals/fixtures/tiny-plan-strict-api-app/docs/specs/billing-webhook-api.md +25 -0
  115. package/evals/fixtures/tiny-plan-strict-api-app/src/billing.ts +5 -0
  116. package/evals/fixtures/tiny-plan-strict-api-app/src/webhooks.ts +3 -0
  117. package/evals/fixtures/tiny-plan-strict-api-app/tests/billing-webhook.test.md +8 -0
  118. package/evals/fixtures/tiny-post-setup-invalid-config-app/.freeflow/config.json +3 -0
  119. package/evals/fixtures/tiny-post-setup-invalid-config-app/AGENTS.md +15 -0
  120. package/evals/fixtures/tiny-post-setup-invalid-config-app/README.md +16 -0
  121. package/evals/fixtures/tiny-post-setup-invalid-config-app/docs/auth-review.md +15 -0
  122. package/evals/fixtures/tiny-post-setup-invalid-config-app/docs/billing-policy.md +10 -0
  123. package/evals/fixtures/tiny-post-setup-invalid-config-app/docs/copy-conventions.md +15 -0
  124. package/evals/fixtures/tiny-post-setup-invalid-config-app/src/auth-middleware.ts +12 -0
  125. package/evals/fixtures/tiny-post-setup-invalid-config-app/src/billing.ts +20 -0
  126. package/evals/fixtures/tiny-post-setup-invalid-config-app/src/login-copy.ts +1 -0
  127. package/evals/fixtures/tiny-post-setup-invalid-config-app/src/settings-page.ts +1 -0
  128. package/evals/fixtures/tiny-post-setup-invalid-config-app/tests/auth-middleware.test.md +8 -0
  129. package/evals/fixtures/tiny-post-setup-invalid-config-app/tests/billing.test.md +8 -0
  130. package/evals/fixtures/tiny-post-setup-invalid-config-app/tests/copy.test.md +7 -0
  131. package/evals/fixtures/tiny-post-setup-missing-config-app/AGENTS.md +15 -0
  132. package/evals/fixtures/tiny-post-setup-missing-config-app/README.md +16 -0
  133. package/evals/fixtures/tiny-post-setup-missing-config-app/docs/auth-review.md +15 -0
  134. package/evals/fixtures/tiny-post-setup-missing-config-app/docs/billing-policy.md +10 -0
  135. package/evals/fixtures/tiny-post-setup-missing-config-app/docs/copy-conventions.md +15 -0
  136. package/evals/fixtures/tiny-post-setup-missing-config-app/src/auth-middleware.ts +12 -0
  137. package/evals/fixtures/tiny-post-setup-missing-config-app/src/billing.ts +20 -0
  138. package/evals/fixtures/tiny-post-setup-missing-config-app/src/login-copy.ts +1 -0
  139. package/evals/fixtures/tiny-post-setup-missing-config-app/src/settings-page.ts +1 -0
  140. package/evals/fixtures/tiny-post-setup-missing-config-app/tests/auth-middleware.test.md +8 -0
  141. package/evals/fixtures/tiny-post-setup-missing-config-app/tests/billing.test.md +8 -0
  142. package/evals/fixtures/tiny-post-setup-missing-config-app/tests/copy.test.md +7 -0
  143. package/evals/fixtures/tiny-post-setup-source-conflict-app/.freeflow/config.json +3 -0
  144. package/evals/fixtures/tiny-post-setup-source-conflict-app/AGENTS.md +15 -0
  145. package/evals/fixtures/tiny-post-setup-source-conflict-app/README.md +16 -0
  146. package/evals/fixtures/tiny-post-setup-source-conflict-app/docs/auth-review.md +15 -0
  147. package/evals/fixtures/tiny-post-setup-source-conflict-app/docs/billing-policy.md +10 -0
  148. package/evals/fixtures/tiny-post-setup-source-conflict-app/docs/copy-conventions.md +15 -0
  149. package/evals/fixtures/tiny-post-setup-source-conflict-app/src/auth-middleware.ts +12 -0
  150. package/evals/fixtures/tiny-post-setup-source-conflict-app/src/billing.ts +20 -0
  151. package/evals/fixtures/tiny-post-setup-source-conflict-app/src/login-copy.ts +1 -0
  152. package/evals/fixtures/tiny-post-setup-source-conflict-app/src/settings-page.ts +1 -0
  153. package/evals/fixtures/tiny-post-setup-source-conflict-app/tests/auth-middleware.test.md +8 -0
  154. package/evals/fixtures/tiny-post-setup-source-conflict-app/tests/billing.test.md +8 -0
  155. package/evals/fixtures/tiny-post-setup-source-conflict-app/tests/copy.test.md +7 -0
  156. package/evals/fixtures/tiny-report-performance-app/README.md +11 -0
  157. package/evals/fixtures/tiny-report-performance-app/docs/performance.md +10 -0
  158. package/evals/fixtures/tiny-report-performance-app/src/report-summary.ts +29 -0
  159. package/evals/fixtures/tiny-report-performance-app/tests/report-performance.test.md +8 -0
  160. package/evals/fixtures/tiny-review-request-app/README.md +3 -0
  161. package/evals/fixtures/tiny-review-request-app/docs/billing-policy.md +5 -0
  162. package/evals/fixtures/tiny-review-request-app/docs/plans/billing-webhook-api.md +19 -0
  163. package/evals/fixtures/tiny-review-request-app/docs/review/previous-agent-summary.md +20 -0
  164. package/evals/fixtures/tiny-review-request-app/docs/specs/billing-webhook-api.md +25 -0
  165. package/evals/fixtures/tiny-review-request-app/src/billing.ts +11 -0
  166. package/evals/fixtures/tiny-review-request-app/src/webhooks.ts +19 -0
  167. package/evals/fixtures/tiny-review-request-app/tests/billing-webhook.test.md +8 -0
  168. package/evals/fixtures/tiny-review-work-app/README.md +5 -0
  169. package/evals/fixtures/tiny-review-work-app/docs/billing-policy.md +9 -0
  170. package/evals/fixtures/tiny-review-work-app/docs/plans/settings-title-plan.md +12 -0
  171. package/evals/fixtures/tiny-review-work-app/docs/review/previous-agent-summary.md +15 -0
  172. package/evals/fixtures/tiny-review-work-app/docs/specs/settings-title.md +9 -0
  173. package/evals/fixtures/tiny-review-work-app/src/billing.ts +7 -0
  174. package/evals/fixtures/tiny-review-work-app/src/settings-page.ts +1 -0
  175. package/evals/fixtures/tiny-review-work-app/tests/billing.test.md +7 -0
  176. package/evals/fixtures/tiny-review-work-app/tests/settings.test.md +5 -0
  177. package/evals/fixtures/tiny-saas-app/README.md +16 -0
  178. package/evals/fixtures/tiny-saas-app/docs/auth-review.md +15 -0
  179. package/evals/fixtures/tiny-saas-app/docs/billing-policy.md +10 -0
  180. package/evals/fixtures/tiny-saas-app/docs/copy-conventions.md +15 -0
  181. package/evals/fixtures/tiny-saas-app/docs/specs/settings-title.md +13 -0
  182. package/evals/fixtures/tiny-saas-app/src/auth-middleware.ts +12 -0
  183. package/evals/fixtures/tiny-saas-app/src/billing.ts +20 -0
  184. package/evals/fixtures/tiny-saas-app/src/login-copy.ts +1 -0
  185. package/evals/fixtures/tiny-saas-app/src/settings-page.ts +1 -0
  186. package/evals/fixtures/tiny-saas-app/tests/auth-middleware.test.md +8 -0
  187. package/evals/fixtures/tiny-saas-app/tests/billing.test.md +8 -0
  188. package/evals/fixtures/tiny-saas-app/tests/copy.test.md +7 -0
  189. package/evals/fixtures/tiny-setup-agents-app/AGENTS.md +6 -0
  190. package/evals/fixtures/tiny-setup-both-app/AGENTS.md +5 -0
  191. package/evals/fixtures/tiny-setup-both-app/CLAUDE.md +5 -0
  192. package/evals/fixtures/tiny-setup-claude-app/CLAUDE.md +6 -0
  193. package/evals/fixtures/tiny-setup-codex-rules-app/.codex/rules/shell.rules +5 -0
  194. package/evals/fixtures/tiny-setup-codex-rules-app/AGENTS.md +6 -0
  195. package/evals/fixtures/tiny-setup-conflict-app/AGENTS.md +6 -0
  196. package/evals/fixtures/tiny-setup-existing-block-app/AGENTS.md +14 -0
  197. package/evals/fixtures/tiny-setup-four-rules-app/CLAUDE.md +6 -0
  198. package/evals/fixtures/tiny-skill-dev-app/README.md +10 -0
  199. package/evals/fixtures/tiny-skill-dev-app/evals/prompts/review-pr-001.txt +8 -0
  200. package/evals/fixtures/tiny-skill-dev-app/evals/reports/review-pr-failure.md +17 -0
  201. package/evals/fixtures/tiny-skill-dev-app/skills/review-pr/SKILL.md +13 -0
  202. package/evals/fixtures/tiny-team-app/README.md +5 -0
  203. package/evals/fixtures/tiny-team-app/docs/product.md +6 -0
  204. package/evals/fixtures/tiny-team-app/src/teams.ts +9 -0
  205. package/evals/fixtures/tiny-team-app/src/users.ts +5 -0
  206. package/evals/fixtures/tiny-team-app/tests/teams.test.md +7 -0
  207. package/evals/fixtures/tiny-verify-app/README.md +5 -0
  208. package/evals/fixtures/tiny-verify-app/src/settings-nav.ts +1 -0
  209. package/evals/fixtures/tiny-verify-app/src/settings-page.ts +1 -0
  210. package/evals/fixtures/tiny-verify-app/tests/settings.test.md +7 -0
  211. package/evals/prompts/aon-001.txt +2 -0
  212. package/evals/prompts/byp-001.txt +2 -0
  213. package/evals/prompts/byp-002.txt +2 -0
  214. package/evals/prompts/cap-001.txt +3 -0
  215. package/evals/prompts/cap-002.txt +3 -0
  216. package/evals/prompts/cmd-001.txt +3 -0
  217. package/evals/prompts/cmd-002.txt +3 -0
  218. package/evals/prompts/cmd-003.txt +6 -0
  219. package/evals/prompts/cmd-004.txt +5 -0
  220. package/evals/prompts/cmd-005.txt +5 -0
  221. package/evals/prompts/cmd-006.txt +5 -0
  222. package/evals/prompts/cmd-007.txt +5 -0
  223. package/evals/prompts/cmd-008.txt +5 -0
  224. package/evals/prompts/cmd-009.txt +8 -0
  225. package/evals/prompts/cmd-010.txt +5 -0
  226. package/evals/prompts/cmd-011.txt +5 -0
  227. package/evals/prompts/cmd-012.txt +5 -0
  228. package/evals/prompts/cmd-013.txt +5 -0
  229. package/evals/prompts/cmd-014.txt +7 -0
  230. package/evals/prompts/cmd-015.txt +7 -0
  231. package/evals/prompts/cmd-016.txt +5 -0
  232. package/evals/prompts/cmt-001.txt +1 -0
  233. package/evals/prompts/cmt-002.txt +1 -0
  234. package/evals/prompts/cmt-003.txt +1 -0
  235. package/evals/prompts/cmt-004.txt +1 -0
  236. package/evals/prompts/cmt-005.txt +1 -0
  237. package/evals/prompts/dfd-001.txt +3 -0
  238. package/evals/prompts/dia-001.txt +3 -0
  239. package/evals/prompts/dia-002.txt +3 -0
  240. package/evals/prompts/dia-003.txt +3 -0
  241. package/evals/prompts/dis-001.txt +5 -0
  242. package/evals/prompts/dis-002.txt +5 -0
  243. package/evals/prompts/esk-001.txt +5 -0
  244. package/evals/prompts/esk-002.txt +5 -0
  245. package/evals/prompts/esk-003.txt +5 -0
  246. package/evals/prompts/grc-001.txt +3 -0
  247. package/evals/prompts/hof-001.txt +3 -0
  248. package/evals/prompts/hof-002.txt +1 -0
  249. package/evals/prompts/hof-003.txt +1 -0
  250. package/evals/prompts/hof-004.txt +1 -0
  251. package/evals/prompts/hof-005.txt +1 -0
  252. package/evals/prompts/ivg-001.txt +1 -0
  253. package/evals/prompts/ivg-002.txt +11 -0
  254. package/evals/prompts/ivg-003.txt +1 -0
  255. package/evals/prompts/ivg-004.txt +1 -0
  256. package/evals/prompts/mode-001.txt +3 -0
  257. package/evals/prompts/mode-002.txt +1 -0
  258. package/evals/prompts/mode-003.txt +3 -0
  259. package/evals/prompts/mode-004.txt +3 -0
  260. package/evals/prompts/mode-005.txt +3 -0
  261. package/evals/prompts/mode-006.txt +3 -0
  262. package/evals/prompts/mode-007.txt +3 -0
  263. package/evals/prompts/otr-001.txt +3 -0
  264. package/evals/prompts/otr-002.txt +3 -0
  265. package/evals/prompts/rar-001.txt +5 -0
  266. package/evals/prompts/rar-002.txt +3 -0
  267. package/evals/prompts/rar-003.txt +6 -0
  268. package/evals/prompts/rar-004.txt +15 -0
  269. package/evals/prompts/rar-005.txt +10 -0
  270. package/evals/prompts/rbr-001.txt +3 -0
  271. package/evals/prompts/rbr-002.txt +3 -0
  272. package/evals/prompts/rbr-003.txt +7 -0
  273. package/evals/prompts/rev-001.txt +3 -0
  274. package/evals/prompts/rev-002.txt +5 -0
  275. package/evals/prompts/rev-003.txt +6 -0
  276. package/evals/prompts/rev-004.txt +1 -0
  277. package/evals/prompts/rev-005.txt +15 -0
  278. package/evals/prompts/rev-006.txt +5 -0
  279. package/evals/prompts/stp-001.txt +1 -0
  280. package/evals/prompts/stp-002.txt +1 -0
  281. package/evals/prompts/stp-003.txt +1 -0
  282. package/evals/prompts/stp-004.txt +1 -0
  283. package/evals/prompts/stp-005.txt +1 -0
  284. package/evals/prompts/stp-006.txt +1 -0
  285. package/evals/prompts/stp-007.txt +1 -0
  286. package/evals/prompts/stp-008.txt +1 -0
  287. package/evals/prompts/stp-009.txt +1 -0
  288. package/evals/prompts/stp-010.txt +1 -0
  289. package/evals/prompts/stp-011.txt +1 -0
  290. package/evals/prompts/vfy-003.txt +1 -0
  291. package/evals/prompts/wpl-001.txt +3 -0
  292. package/evals/prompts/wpl-002.txt +5 -0
  293. package/evals/prompts/wpl-003.txt +3 -0
  294. package/evals/prompts/wpl-004.txt +5 -0
  295. package/evals/prompts/wpl-005.txt +1 -0
  296. package/evals/prompts/wrc-001.txt +10 -0
  297. package/evals/prompts/wrc-002.txt +3 -0
  298. package/evals/prompts/wsk-001.txt +6 -0
  299. package/evals/prompts/wsp-001.txt +5 -0
  300. package/evals/prompts/wsp-002.txt +15 -0
  301. package/evals/prompts/wsp-003.txt +3 -0
  302. package/evals/prompts/wsp-004.txt +15 -0
  303. package/evals/prompts/wsp-005.txt +5 -0
  304. package/evals/prompts/wsp-006.txt +12 -0
  305. package/evals/prompts/wsp-007.txt +9 -0
  306. package/evals/prompts/wsp-008.txt +13 -0
  307. package/evals/prompts/xpl-001.txt +1 -0
  308. package/evals/prompts/xpl-002.txt +3 -0
  309. package/evals/prompts/xpl-003.txt +3 -0
  310. package/evals/prompts/xpl-004.txt +3 -0
  311. package/evals/prompts/xpl-005.txt +5 -0
  312. package/evals/prompts/xpl-006.txt +3 -0
  313. package/evals/registries/adversarial-evals.json +39 -0
  314. package/evals/registries/fixture-evals.json +2513 -0
  315. package/evals/registries/handoff-evals.json +74 -0
  316. package/evals/registries/legacy-evals.json +147 -0
  317. package/evals/registries/skill-evidence.json +193 -0
  318. package/evals/registries/verify-work-evals.json +46 -0
  319. package/evals/reports/acceptance/v0.1-acceptance-report.md +130 -0
  320. package/evals/reports/by-command-surface/command-surface-1-report.md +45 -0
  321. package/evals/reports/by-command-surface/command-surface-10-report.md +76 -0
  322. package/evals/reports/by-command-surface/command-surface-11-report.md +77 -0
  323. package/evals/reports/by-command-surface/command-surface-12-report.md +91 -0
  324. package/evals/reports/by-command-surface/command-surface-13-report.md +64 -0
  325. package/evals/reports/by-command-surface/command-surface-14-report.md +66 -0
  326. package/evals/reports/by-command-surface/command-surface-15-report.md +124 -0
  327. package/evals/reports/by-command-surface/command-surface-16-report.md +39 -0
  328. package/evals/reports/by-command-surface/command-surface-2-report.md +80 -0
  329. package/evals/reports/by-command-surface/command-surface-3-report.md +86 -0
  330. package/evals/reports/by-command-surface/command-surface-4-report.md +76 -0
  331. package/evals/reports/by-command-surface/command-surface-5-report.md +80 -0
  332. package/evals/reports/by-command-surface/command-surface-6-report.md +74 -0
  333. package/evals/reports/by-command-surface/command-surface-7-report.md +84 -0
  334. package/evals/reports/by-command-surface/command-surface-8-report.md +79 -0
  335. package/evals/reports/by-command-surface/command-surface-9-report.md +79 -0
  336. package/evals/reports/by-command-surface/command-surface-matrix.md +91 -0
  337. package/evals/reports/by-skill/bypass-1-report.md +124 -0
  338. package/evals/reports/by-skill/capture-decisions-1-report.md +99 -0
  339. package/evals/reports/by-skill/capture-decisions-2-report.md +102 -0
  340. package/evals/reports/by-skill/commit-work-1-report.md +165 -0
  341. package/evals/reports/by-skill/commit-work-2-report.md +109 -0
  342. package/evals/reports/by-skill/design-for-depth-1-report.md +95 -0
  343. package/evals/reports/by-skill/diagnose-failure-1-report.md +91 -0
  344. package/evals/reports/by-skill/diagnose-failure-2-report.md +94 -0
  345. package/evals/reports/by-skill/discover-1-report.md +118 -0
  346. package/evals/reports/by-skill/evaluate-skill-2-report.md +71 -0
  347. package/evals/reports/by-skill/execute-plan-1-report.md +103 -0
  348. package/evals/reports/by-skill/execute-plan-2-report.md +112 -0
  349. package/evals/reports/by-skill/execute-plan-3-report.md +87 -0
  350. package/evals/reports/by-skill/grill-context-1-report.md +103 -0
  351. package/evals/reports/by-skill/handoff-1-report.md +123 -0
  352. package/evals/reports/by-skill/handoff-2-report.md +105 -0
  353. package/evals/reports/by-skill/handoff-3-report.md +100 -0
  354. package/evals/reports/by-skill/handoff-7-report.md +77 -0
  355. package/evals/reports/by-skill/interview-gate-1-report.md +63 -0
  356. package/evals/reports/by-skill/interview-gate-2-report.md +105 -0
  357. package/evals/reports/by-skill/mode-contract-1-report.md +74 -0
  358. package/evals/reports/by-skill/mode-contract-2-report.md +87 -0
  359. package/evals/reports/by-skill/mode-contract-3-report.md +65 -0
  360. package/evals/reports/by-skill/mode-contract-4-report.md +71 -0
  361. package/evals/reports/by-skill/mode-contract-5-report.md +70 -0
  362. package/evals/reports/by-skill/output-router-1-report.md +76 -0
  363. package/evals/reports/by-skill/output-router-2-report.md +65 -0
  364. package/evals/reports/by-skill/research-1-report.md +144 -0
  365. package/evals/reports/by-skill/research-brief-1-report.md +94 -0
  366. package/evals/reports/by-skill/research-brief-2-report.md +75 -0
  367. package/evals/reports/by-skill/review-artifact-1-report.md +91 -0
  368. package/evals/reports/by-skill/review-artifact-2-report.md +79 -0
  369. package/evals/reports/by-skill/review-artifact-3-report.md +120 -0
  370. package/evals/reports/by-skill/review-artifact-4-report.md +89 -0
  371. package/evals/reports/by-skill/review-artifact-5-report.md +66 -0
  372. package/evals/reports/by-skill/review-work-1-report.md +85 -0
  373. package/evals/reports/by-skill/review-work-2-report.md +87 -0
  374. package/evals/reports/by-skill/review-work-3-report.md +104 -0
  375. package/evals/reports/by-skill/review-work-4-report.md +108 -0
  376. package/evals/reports/by-skill/review-work-5-report.md +73 -0
  377. package/evals/reports/by-skill/review-work-6-report.md +66 -0
  378. package/evals/reports/by-skill/setup-freeflow-1-report.md +199 -0
  379. package/evals/reports/by-skill/setup-freeflow-2-report.md +105 -0
  380. package/evals/reports/by-skill/setup-freeflow-3-report.md +105 -0
  381. package/evals/reports/by-skill/setup-freeflow-4-report.md +88 -0
  382. package/evals/reports/by-skill/setup-freeflow-5-report.md +115 -0
  383. package/evals/reports/by-skill/skill-authoring-1-report.md +81 -0
  384. package/evals/reports/by-skill/verify-work-1-report.md +111 -0
  385. package/evals/reports/by-skill/verify-work-2-report.md +120 -0
  386. package/evals/reports/by-skill/workflow-1-report.md +65 -0
  387. package/evals/reports/by-skill/write-plan-1-report.md +123 -0
  388. package/evals/reports/by-skill/write-plan-2-report.md +98 -0
  389. package/evals/reports/by-skill/write-plan-3-report.md +110 -0
  390. package/evals/reports/by-skill/write-spec-1-report.md +88 -0
  391. package/evals/reports/by-skill/write-spec-2-report.md +89 -0
  392. package/evals/reports/by-skill/write-spec-3-report.md +90 -0
  393. package/evals/reports/by-skill/write-spec-4-report.md +167 -0
  394. package/evals/reports/harness/claude-harness-1-report.md +103 -0
  395. package/evals/reports/harness/eval-harness-1-report.md +91 -0
  396. package/evals/reports/iterations/iteration-1-report.md +71 -0
  397. package/evals/reports/iterations/iteration-2-report.md +78 -0
  398. package/evals/reports/iterations/iteration-3-report.md +118 -0
  399. package/evals/reports/iterations/iteration-4-report.md +131 -0
  400. package/evals/reports/iterations/iteration-5-report.md +149 -0
  401. package/evals/reports/iterations/iteration-6-report.md +136 -0
  402. package/evals/reports/runtime/always-on-runtime-1-report.md +107 -0
  403. package/evals/reports/runtime/context-mode-normalized-benchmark-1-report.md +52 -0
  404. package/evals/reports/runtime/context-mode-real-deep-baseline-1-report.md +410 -0
  405. package/evals/reports/runtime/context-mode-real-deep-final-slice-11-report.md +203 -0
  406. package/evals/reports/runtime/context-mode-real-deep-final-slice-11-review.md +51 -0
  407. package/evals/reports/runtime/context-saving-native-tools-baseline-1-report.md +99 -0
  408. package/evals/reports/runtime/eryx-python-compatibility-reprobe-1-report.md +166 -0
  409. package/evals/reports/runtime/eryx-python-proof-spike-1-report.md +96 -0
  410. package/evals/reports/runtime/eryx-python-proof-spike-2-report.md +151 -0
  411. package/evals/reports/runtime/eryx-python-script-derive-execution-1-report.md +233 -0
  412. package/evals/reports/runtime/jq-script-derive-execution-1-report.md +215 -0
  413. package/evals/reports/runtime/jq-wasm-proof-spike-1-report.md +67 -0
  414. package/evals/reports/runtime/output-router-benchmark-1-report.md +81 -0
  415. package/evals/reports/runtime/output-router-capture-derive-provider-eval-1-report.md +35 -0
  416. package/evals/reports/runtime/output-router-codex-large-index-sqlite-adhoc-report.md +150 -0
  417. package/evals/reports/runtime/output-router-codex-qa-benchmark-1-report.md +46 -0
  418. package/evals/reports/runtime/output-router-command-benchmark-1-report.md +62 -0
  419. package/evals/reports/runtime/output-router-index-benchmark-1-report.md +64 -0
  420. package/evals/reports/runtime/output-router-regression-1-report.md +81 -0
  421. package/evals/reports/runtime/output-router-transform-eval-1-report.md +28 -0
  422. package/evals/reports/runtime/pi-observed-routing-eval-1-report.md +44 -0
  423. package/evals/reports/runtime/quickjs-script-derive-execution-1-report.md +159 -0
  424. package/evals/reports/runtime/quickjs-wasi-proof-spike-1-report.md +55 -0
  425. package/evals/reports/runtime/render-format-row-protocol-1-report.md +58 -0
  426. package/evals/reports/runtime/script-sandbox-adapter-selection-review-1-report.md +84 -0
  427. package/evals/reports/runtime/script-sandbox-probe-resource-hardening-1-report.md +51 -0
  428. package/evals/reports/runtime/storage-policy-benchmark-1-report.md +176 -0
  429. package/evals/reports/runtime/vault-index-storage-spike-1-report.md +39 -0
  430. package/evals/reports/runtime/workflow-context-hook-1-report.md +82 -0
  431. package/evals/runbooks/adversarial-eval-runbook.md +28 -0
  432. package/evals/runbooks/fixture-eval-runbook.md +137 -0
  433. package/evals/runbooks/handoff-eval-runbook.md +22 -0
  434. package/evals/runbooks/verify-work-eval-runbook.md +27 -0
  435. package/evals/scripts/audit-command-surface.sh +160 -0
  436. package/evals/scripts/check-activation-contract.sh +121 -0
  437. package/evals/scripts/check-runtime-context-hook.sh +183 -0
  438. package/evals/scripts/grade-fixture-eval.sh +446 -0
  439. package/evals/scripts/run-claude-fixture-eval.sh +26 -0
  440. package/evals/scripts/run-codex-fixture-eval.sh +26 -0
  441. package/evals/scripts/run-eryx-python-proof-spike.js +559 -0
  442. package/evals/scripts/run-fixture-eval-by-id.sh +23 -0
  443. package/evals/scripts/run-fixture-eval.sh +464 -0
  444. package/evals/scripts/run-jq-wasm-proof-spike.js +299 -0
  445. package/evals/scripts/run-output-router-transform-eval.js +115 -0
  446. package/evals/scripts/run-pi-observed-routing-eval.js +478 -0
  447. package/evals/scripts/run-quickjs-wasi-proof-spike.js +339 -0
  448. package/evals/scripts/skill-evidence.sh +316 -0
  449. package/evals/scripts/validate-release-metadata.sh +486 -0
  450. package/evals/suites/v0.1-acceptance-suite.md +131 -0
  451. package/{plugins/freeflow/hooks → hooks}/freeflow-runtime-context.mjs +65 -14
  452. package/package.json +46 -13
  453. package/pi-extension/dist/host-producer-identification.js +186 -0
  454. package/pi-extension/dist/index.js +85 -0
  455. package/pi-extension/dist/mcp-config.js +30 -0
  456. package/pi-extension/dist/native-safety-net.js +209 -0
  457. package/pi-extension/dist/observed-tool-routing.js +114 -0
  458. package/pi-extension/dist/renderers.js +835 -0
  459. package/pi-extension/dist/router-tools.js +438 -0
  460. package/pi-extension/dist/runtime-context.js +288 -0
  461. package/pi-extension/dist/schemas.js +254 -0
  462. package/pi-extension/dist/status.js +449 -0
  463. package/pi-extension/dist/utils.js +467 -0
  464. package/pi-extension/src/host-producer-identification.ts +226 -0
  465. package/pi-extension/src/index.ts +121 -0
  466. package/pi-extension/src/mcp-config.ts +32 -0
  467. package/pi-extension/src/native-safety-net.ts +252 -0
  468. package/pi-extension/src/observed-tool-routing.ts +126 -0
  469. package/pi-extension/src/renderers.ts +917 -0
  470. package/pi-extension/src/router-tools.ts +478 -0
  471. package/pi-extension/src/runtime-context.ts +347 -0
  472. package/pi-extension/src/schemas.ts +259 -0
  473. package/pi-extension/src/status.ts +505 -0
  474. package/pi-extension/src/utils.ts +492 -0
  475. package/pi-extension/tsconfig.json +16 -0
  476. package/plugin-docs/README.md +40 -0
  477. package/plugin-docs/adr/0002-evals-before-hooks.md +17 -0
  478. package/{plugins/freeflow/docs → plugin-docs}/adr/0003-release-boundary.md +2 -2
  479. package/plugin-docs/adr/0004-discover-replaces-shallow-discovery-skills.md +26 -0
  480. package/plugin-docs/adr/README.md +10 -0
  481. package/plugin-docs/architecture.md +89 -0
  482. package/plugin-docs/output-router.md +396 -0
  483. package/plugin-docs/release-evidence.md +77 -0
  484. package/{plugins/freeflow/docs → plugin-docs}/skills.md +7 -7
  485. package/{plugins/freeflow/docs → plugin-docs}/workflow.md +4 -4
  486. package/router/dist/benchmarks/benchmark-harness.d.ts +32 -0
  487. package/router/dist/benchmarks/benchmark-harness.js +92 -0
  488. package/router/dist/benchmarks/benchmarks.d.ts +102 -0
  489. package/router/dist/benchmarks/benchmarks.js +880 -0
  490. package/router/dist/benchmarks/codex-qa-benchmarks.d.ts +91 -0
  491. package/router/dist/benchmarks/codex-qa-benchmarks.js +461 -0
  492. package/router/dist/benchmarks/command-benchmarks.d.ts +128 -0
  493. package/router/dist/benchmarks/command-benchmarks.js +653 -0
  494. package/router/dist/benchmarks/context-mode-normalized-benchmarks.d.ts +74 -0
  495. package/router/dist/benchmarks/context-mode-normalized-benchmarks.js +707 -0
  496. package/router/dist/benchmarks/context-mode-real-deep-benchmark.d.ts +124 -0
  497. package/router/dist/benchmarks/context-mode-real-deep-benchmark.js +1295 -0
  498. package/router/dist/benchmarks/context-saving-baseline.d.ts +54 -0
  499. package/router/dist/benchmarks/context-saving-baseline.js +439 -0
  500. package/router/dist/benchmarks/index-benchmarks.d.ts +98 -0
  501. package/router/dist/benchmarks/index-benchmarks.js +762 -0
  502. package/router/dist/benchmarks/storage-policy-benchmarks.d.ts +90 -0
  503. package/router/dist/benchmarks/storage-policy-benchmarks.js +538 -0
  504. package/router/dist/benchmarks/vault-index-benchmarks.d.ts +47 -0
  505. package/router/dist/benchmarks/vault-index-benchmarks.js +257 -0
  506. package/router/dist/config/config.d.ts +96 -0
  507. package/router/dist/config/config.js +453 -0
  508. package/router/dist/config/router-contract.d.ts +10 -0
  509. package/router/dist/config/router-contract.js +54 -0
  510. package/router/dist/config/schema.d.ts +18 -0
  511. package/router/dist/config/schema.js +600 -0
  512. package/router/dist/config/types.d.ts +521 -0
  513. package/router/dist/config/types.js +30 -0
  514. package/router/dist/evidence/bounded-evidence.d.ts +40 -0
  515. package/router/dist/evidence/bounded-evidence.js +310 -0
  516. package/router/dist/evidence/evidence-range-selector.d.ts +22 -0
  517. package/router/dist/evidence/evidence-range-selector.js +231 -0
  518. package/router/dist/evidence/evidence-search.d.ts +25 -0
  519. package/router/dist/evidence/evidence-search.js +466 -0
  520. package/router/dist/evidence/evidence.d.ts +38 -0
  521. package/router/dist/evidence/evidence.js +196 -0
  522. package/router/dist/evidence/failure-contracts.d.ts +27 -0
  523. package/router/dist/evidence/failure-contracts.js +160 -0
  524. package/router/dist/evidence/line-ranges.d.ts +22 -0
  525. package/router/dist/evidence/line-ranges.js +22 -0
  526. package/router/dist/experiments/local-index.d.ts +58 -0
  527. package/router/dist/experiments/local-index.js +562 -0
  528. package/router/dist/index.d.ts +30 -0
  529. package/router/dist/index.js +32 -0
  530. package/router/dist/processing/engine.d.ts +108 -0
  531. package/router/dist/processing/engine.js +435 -0
  532. package/router/dist/processing/reducers.d.ts +266 -0
  533. package/router/dist/processing/reducers.js +1495 -0
  534. package/router/dist/processing/renderers.d.ts +25 -0
  535. package/router/dist/processing/renderers.js +186 -0
  536. package/router/dist/processing/scripts.d.ts +78 -0
  537. package/router/dist/processing/scripts.js +333 -0
  538. package/router/dist/repo/repo-traversal.d.ts +18 -0
  539. package/router/dist/repo/repo-traversal.js +242 -0
  540. package/router/dist/routing/observed-reducers.d.ts +35 -0
  541. package/router/dist/routing/observed-reducers.js +647 -0
  542. package/router/dist/routing/observed-routing.d.ts +17 -0
  543. package/router/dist/routing/observed-routing.js +377 -0
  544. package/router/dist/routing/parsers.d.ts +16 -0
  545. package/router/dist/routing/parsers.js +473 -0
  546. package/router/dist/routing/run-filters.d.ts +56 -0
  547. package/router/dist/routing/run-filters.js +230 -0
  548. package/router/dist/routing/run-reducers.d.ts +30 -0
  549. package/router/dist/routing/run-reducers.js +110 -0
  550. package/router/dist/sandbox/adapter-roots.d.ts +38 -0
  551. package/router/dist/sandbox/adapter-roots.js +64 -0
  552. package/router/dist/sandbox/eryx-python-adapter.d.ts +9 -0
  553. package/router/dist/sandbox/eryx-python-adapter.js +797 -0
  554. package/router/dist/sandbox/jq-wasm-adapter.d.ts +9 -0
  555. package/router/dist/sandbox/jq-wasm-adapter.js +421 -0
  556. package/router/dist/sandbox/quickjs-wasi-adapter.d.ts +9 -0
  557. package/router/dist/sandbox/quickjs-wasi-adapter.js +381 -0
  558. package/router/dist/sandbox/script-sandbox.d.ts +113 -0
  559. package/router/dist/sandbox/script-sandbox.js +303 -0
  560. package/router/dist/setup/script-transform-adapters.d.ts +28 -0
  561. package/router/dist/setup/script-transform-adapters.js +259 -0
  562. package/router/dist/tools/batch.d.ts +22 -0
  563. package/router/dist/tools/batch.js +509 -0
  564. package/router/dist/tools/run.d.ts +50 -0
  565. package/router/dist/tools/run.js +1219 -0
  566. package/router/dist/tools/search.d.ts +44 -0
  567. package/router/dist/tools/search.js +1205 -0
  568. package/router/dist/transform/engine.d.ts +143 -0
  569. package/router/dist/transform/engine.js +1955 -0
  570. package/router/dist/vault/vault-index.d.ts +106 -0
  571. package/router/dist/vault/vault-index.js +411 -0
  572. package/router/dist/vault/vault.d.ts +103 -0
  573. package/router/dist/vault/vault.js +635 -0
  574. package/{plugins/freeflow/skills → skills}/commit-work/SKILL.md +17 -16
  575. package/{plugins/freeflow/skills → skills}/commit-work/references/staging-decisions.md +3 -3
  576. package/skills/design-for-depth/SKILL.md +90 -0
  577. package/skills/design-for-depth/references/design-pressure-signals.md +265 -0
  578. package/skills/design-for-depth/references/software-design-philosophy.md +219 -0
  579. package/{plugins/freeflow/skills → skills}/diagnose-failure/SKILL.md +6 -1
  580. package/skills/discover/ARTIFACT-DESTINATIONS.md +58 -0
  581. package/skills/discover/CHECKPOINTS.md +74 -0
  582. package/skills/discover/SKILL.md +173 -0
  583. package/skills/execute-plan/SKILL.md +133 -0
  584. package/skills/execute-plan/references/execution-map.md +122 -0
  585. package/{plugins/freeflow/skills → skills}/mode-contract/SKILL.md +10 -5
  586. package/skills/output-router/SKILL.md +202 -0
  587. package/skills/output-router/references/safety-policy.md +40 -0
  588. package/{plugins/freeflow/skills → skills}/review-artifact/SKILL.md +37 -1
  589. package/{plugins/freeflow/skills → skills}/review-artifact/references/reviewer-prompt.md +14 -2
  590. package/skills/review-work/SKILL.md +101 -0
  591. package/{plugins/freeflow/skills → skills}/review-work/references/reviewer-prompt.md +8 -0
  592. package/skills/setup-freeflow/SKILL.md +106 -0
  593. package/{plugins/freeflow/skills → skills}/setup-freeflow/references/activation-contract.md +14 -8
  594. package/{plugins/freeflow/skills → skills}/setup-freeflow/references/host-setup.md +5 -3
  595. package/skills/setup-freeflow/references/output-router-setup.md +102 -0
  596. package/{plugins/freeflow/skills → skills}/verify-work/SKILL.md +3 -1
  597. package/{plugins/freeflow/skills → skills}/workflow/SKILL.md +23 -13
  598. package/{plugins/freeflow/skills → skills}/workflow/references/workflow-map.md +21 -20
  599. package/{plugins/freeflow/skills → skills}/write-plan/SKILL.md +9 -1
  600. package/{plugins/freeflow/skills → skills}/write-skill/SKILL.md +1 -1
  601. package/{plugins/freeflow/skills → skills}/write-spec/SKILL.md +9 -6
  602. package/plugins/freeflow/docs/README.md +0 -39
  603. package/plugins/freeflow/docs/adr/0002-evals-before-hooks.md +0 -17
  604. package/plugins/freeflow/docs/adr/README.md +0 -7
  605. package/plugins/freeflow/docs/architecture.md +0 -86
  606. package/plugins/freeflow/docs/release-evidence.md +0 -49
  607. package/plugins/freeflow/pi-extension/index.js +0 -250
  608. package/plugins/freeflow/skills/capture-decisions/SKILL.md +0 -95
  609. package/plugins/freeflow/skills/capture-decisions/references/destination-guide.md +0 -65
  610. package/plugins/freeflow/skills/execute-plan/SKILL.md +0 -67
  611. package/plugins/freeflow/skills/grill-context/SKILL.md +0 -79
  612. package/plugins/freeflow/skills/grill-context/references/approach-framing.md +0 -52
  613. package/plugins/freeflow/skills/research-brief/SKILL.md +0 -69
  614. package/plugins/freeflow/skills/review-work/SKILL.md +0 -73
  615. package/plugins/freeflow/skills/setup-freeflow/SKILL.md +0 -84
  616. /package/{plugins/freeflow/assets → assets}/freeflow-plugin-icon-transparent.png +0 -0
  617. /package/{plugins/freeflow/hooks → hooks}/hooks.json +0 -0
  618. /package/{plugins/freeflow/docs → plugin-docs}/adr/0001-three-modes.md +0 -0
  619. /package/{plugins/freeflow/skills → skills}/bypass/SKILL.md +0 -0
  620. /package/{plugins/freeflow/skills → skills}/diagnose-failure/references/feedback-loop-catalog.md +0 -0
  621. /package/{plugins/freeflow/skills → skills}/diagnose-failure/references/flaky-and-performance.md +0 -0
  622. /package/{plugins/freeflow/skills → skills}/evaluate-skill/SKILL.md +0 -0
  623. /package/{plugins/freeflow/skills → skills}/evaluate-skill/references/eval-patterns.md +0 -0
  624. /package/{plugins/freeflow/skills → skills}/evaluate-skill/references/grading-priority.md +0 -0
  625. /package/{plugins/freeflow/skills → skills}/handoff/SKILL.md +0 -0
  626. /package/{plugins/freeflow/skills → skills}/handoff/references/templates.md +0 -0
  627. /package/{plugins/freeflow/skills → skills}/interview-gate/SKILL.md +0 -0
  628. /package/{plugins/freeflow/skills → skills}/write-plan/references/plan-shapes.md +0 -0
  629. /package/{plugins/freeflow/skills → skills}/write-spec/references/artifact-standards.md +0 -0
  630. /package/{plugins/freeflow/skills → skills}/write-spec/references/spec-shapes.md +0 -0
@@ -0,0 +1,492 @@
1
+ import { createHash } from "node:crypto";
2
+
3
+ export function stableHash(value) {
4
+ return createHash("sha256").update(value).digest("hex");
5
+ }
6
+
7
+ export function getRouterSessionId(ctx) {
8
+ return ctx.sessionManager?.getSessionId?.() ?? `pi_${stableHash(ctx.cwd).slice(0, 16)}`;
9
+ }
10
+
11
+ export function routedToolText(result) {
12
+ return JSON.stringify(result, null, 2);
13
+ }
14
+
15
+ export function compactBatchToolText(result) {
16
+ const lines = [row("freeflow_batch", result?.routing?.status ?? result?.toolStatus ?? "unknown", `steps=${result?.stepCount ?? 0}`, `ok=${result?.okCount ?? 0}`, `failed=${result?.failedCount ?? 0}`, `c=${result?.concurrency ?? "?"}`)];
17
+ if (result?.summary) {
18
+ lines.push(row("s", truncateRawLine(result.summary, 220)));
19
+ } else if (result?.routing?.reason) {
20
+ lines.push(row("why", truncateRawLine(result.routing.reason, 220)));
21
+ }
22
+
23
+ const queries = Array.isArray(result?.queries) ? result.queries : [];
24
+ queries.slice(0, 5).forEach((answer) => {
25
+ lines.push(row("q", answer?.status ?? "query", truncateRawLine(answer?.query ?? "query", 120), truncateRawLine(answer?.summary ?? "", 700)));
26
+ });
27
+ appendOmittedRow(lines, "q", queries.length, 5, "details.result.queries");
28
+
29
+ const steps = Array.isArray(result?.steps) ? result.steps : [];
30
+ steps.slice(0, 8).forEach((step) => lines.push(compactBatchStepLine(step)));
31
+ appendOmittedRow(lines, "step", steps.length, 8, "details.result.steps");
32
+ lines.push(row("details", queries.length > 0 ? "details.result steps+queries" : "details.result.steps"));
33
+ return lines.join("\n");
34
+ }
35
+
36
+ export function compactRunToolText(result) {
37
+ const executionStatus = result?.execution?.status ?? result?.toolStatus ?? "unknown";
38
+ const outputId = result?.outputId ?? result?.recovery?.outputId;
39
+ const header = ["freeflow_run", executionStatus];
40
+ if (result?.execution?.exitCode !== undefined && result?.execution?.exitCode !== null) header.push(`exit=${result.execution.exitCode}`);
41
+ if (result?.routing?.status) header.push(`route=${result.routing.status}`);
42
+ if (result?.parser?.name) header.push(`parser=${result.parser.name}`);
43
+ const counts = compactParserCounts(result?.parser?.counts);
44
+ if (counts) header.push(counts);
45
+ if (outputId) header.push(`${result?.persistence?.recoverability === "exact" ? "raw" : "metadata"}=${outputId}`);
46
+ if (result?.persistence?.recoverability !== "exact" && result?.recovery?.outputId) header.push(`exact=${result.recovery.outputId}`);
47
+ if (result?.scriptProducer?.language) header.push(`script=${result.scriptProducer.language}:${result.scriptProducer.status ?? "unknown"}`);
48
+ if (result?.scriptFilter?.outputId) header.push(`transformed=${result.scriptFilter.outputId}`);
49
+
50
+ const lines = [row(...header)];
51
+ if (result?.summary) lines.push(row("s", truncateRawLine(result.summary, 220)));
52
+ const filterText = compactRunFilterText(result?.filters);
53
+ if (filterText) lines.push(row("filter", filterText));
54
+ const scriptProducerText = compactRunScriptProducerText(result?.scriptProducer);
55
+ if (scriptProducerText) lines.push(row("producer", scriptProducerText));
56
+ const scriptFilterText = compactRunScriptFilterText(result?.scriptFilter);
57
+ if (scriptFilterText) lines.push(row("script", scriptFilterText));
58
+
59
+ const importantLines = Array.isArray(result?.importantLines) ? result.importantLines : [];
60
+ importantLines.slice(0, 3).forEach((line) => appendExcerptRows(lines, "p", `${line?.stream ?? "stream"}:${line?.lines ?? "?"}`, line?.excerpt, 4));
61
+ appendOmittedRow(lines, "p", importantLines.length, 3, "details.result");
62
+ appendRunRecoveryRow(lines, result, outputId, importantLines[0]);
63
+ lines.push(row("details", "details.result"));
64
+ return lines.join("\n");
65
+ }
66
+
67
+ export function compactSearchToolText(result) {
68
+ if (result?.implementation === "processing-engine-skeleton-v1") {
69
+ return compactProcessingToolText(result);
70
+ }
71
+ if (result?.routing?.route === "transform") {
72
+ return compactTransformToolText(result, "freeflow_search");
73
+ }
74
+ return compactSearchEvidenceToolText(result, "freeflow_search");
75
+ }
76
+
77
+ export function compactSearchEvidenceToolText(result, toolName = "freeflow_search") {
78
+ const routeStatus = result?.routing?.status ?? result?.toolStatus ?? "unknown";
79
+ const evidence = Array.isArray(result?.evidence) ? result.evidence : [];
80
+ const source = compactSourceLabel(result?.source ?? evidence[0]?.source);
81
+ const lines = [row(toolName, routeStatus, source, `e=${evidence.length}`, result?.recovery?.outputId ? `out=${result.recovery.outputId}` : "")];
82
+ if (result?.failure?.message) {
83
+ lines.push(row("fail", truncateRawLine(result.failure.message, 220)));
84
+ } else if (result?.routing?.reason) {
85
+ lines.push(row("why", truncateRawLine(result.routing.reason, 220)));
86
+ }
87
+ appendEvidenceRows(lines, evidence, 3, 4);
88
+ appendRecoveryRow(lines, result?.recovery, evidence, result?.recovery?.outputId);
89
+ lines.push(row("details", "details.result"));
90
+ return lines.join("\n");
91
+ }
92
+
93
+ export function compactTransformToolText(result, toolName = "freeflow_search") {
94
+ const failed = result?.failure || result?.routing?.status === "failed" || result?.toolStatus === "error";
95
+ const routeStatus = failed ? "failed" : result?.routing?.status ?? result?.toolStatus ?? "unknown";
96
+ const evidence = Array.isArray(result?.evidence) ? result.evidence : [];
97
+ const operation = compactOperationLabel(result?.operation ?? { kind: result?.producer?.name });
98
+ const outputId = result?.outputId ?? result?.recovery?.outputId;
99
+ const source = compactSourceLabel(result?.source);
100
+ const lines = [row(toolName, routeStatus, operation, source, outputId ? `out=${outputId}` : "")];
101
+ if (result?.failure?.message) {
102
+ lines.push(row("fail", truncateRawLine(result.failure.message, 220)));
103
+ } else if (result?.summary) {
104
+ lines.push(row("s", truncateRawLine(result.summary, 220)));
105
+ } else if (result?.routing?.reason) {
106
+ lines.push(row("why", truncateRawLine(result.routing.reason, 220)));
107
+ }
108
+ appendEvidenceRows(lines, evidence, 3, 4);
109
+ appendRecoveryRow(lines, result?.recovery, evidence, outputId);
110
+ lines.push(row("details", "details.result"));
111
+ return lines.join("\n");
112
+ }
113
+
114
+ function compactProcessingToolText(result) {
115
+ const lines = [row("freeflow_search", result?.status ?? "unknown", "transform", compactProcessingSourceLabel(result?.source))];
116
+ splitLines(String(result?.visibleText ?? "")).slice(0, 8).forEach((line) => lines.push(row(">", truncateRawLine(line, 220))));
117
+ appendOmittedRow(lines, ">", splitLines(String(result?.visibleText ?? "")).length, 8, "details.result.visibleText");
118
+ if (Array.isArray(result?.facts) && result.facts.length > 0) lines.push(row("facts", result.facts.length));
119
+ if (result?.recovery?.outputId) lines.push(row("rec", "vault", result.recovery.outputId));
120
+ else if (result?.recovery?.how) lines.push(row("rec", truncateRawLine(result.recovery.how, 160)));
121
+ lines.push(row("details", "details.result"));
122
+ return lines.join("\n");
123
+ }
124
+
125
+ function compactProcessingSourceLabel(source) {
126
+ if (!source || typeof source !== "object") return "source";
127
+ return `${source.kind ?? "source"}:${source.displayPath ?? source.ref?.path ?? source.ref?.outputId ?? ""}`;
128
+ }
129
+
130
+ function row(...fields) {
131
+ return fields.filter((field) => field !== undefined && field !== null && String(field).length > 0).map(escapeRowField).join("|");
132
+ }
133
+
134
+ function escapeRowField(value) {
135
+ return String(value ?? "").replace(/\r?\n/g, " ").replace(/\|/g, "¦");
136
+ }
137
+
138
+ function appendOmittedRow(lines, tag, total, shown, target) {
139
+ const omitted = total - Math.min(total, shown);
140
+ if (omitted > 0) {
141
+ lines.push(row("more", tag, omitted, target));
142
+ }
143
+ }
144
+
145
+ function appendExcerptRows(lines, tag, label, excerpt, maxLines) {
146
+ lines.push(row(tag, label));
147
+ const excerptLines = splitLines(String(excerpt ?? ""));
148
+ excerptLines.slice(0, maxLines).forEach((excerptLine) => lines.push(row(">", truncateRawLine(excerptLine, 220))));
149
+ appendOmittedRow(lines, ">", excerptLines.length, maxLines, "details.result");
150
+ }
151
+
152
+ function appendEvidenceRows(lines, evidence, maxPackets, maxLines) {
153
+ evidence.slice(0, maxPackets).forEach((packet, index) => {
154
+ const match = packet?.match ? `${packet.match.type}:${Number(packet.match.confidence ?? 0).toFixed(2)}` : "";
155
+ lines.push(row("e", index + 1, compactEvidenceLabel(packet), match));
156
+ splitLines(String(packet?.excerpt ?? "")).slice(0, maxLines).forEach((excerptLine) => lines.push(row(">", truncateRawLine(excerptLine, 220))));
157
+ appendOmittedRow(lines, ">", splitLines(String(packet?.excerpt ?? "")).length, maxLines, "details.result");
158
+ });
159
+ appendOmittedRow(lines, "e", evidence.length, maxPackets, "details.result");
160
+ }
161
+
162
+ function appendRunRecoveryRow(lines, result, outputId, firstImportantLine) {
163
+ const exactRecoveryOutputId = result?.scriptFilter?.outputId ?? (result?.persistence?.recoverability === "exact" ? outputId : result?.recovery?.outputId);
164
+ const evidenceStream = result?.scriptFilter?.outputId ? "raw" : firstImportantLine?.stream ?? "combined";
165
+ if (exactRecoveryOutputId && firstImportantLine?.lines) {
166
+ lines.push(row("rec", "vault", exactRecoveryOutputId, evidenceStream, firstImportantLine.lines));
167
+ if (result?.scriptFilter?.outputId && outputId) {
168
+ lines.push(row("raw", outputId));
169
+ }
170
+ return;
171
+ }
172
+ if (result?.persistence?.recoverability === "exact" && outputId) {
173
+ lines.push(row("rec", "vault", outputId));
174
+ return;
175
+ }
176
+ if (result?.recovery?.how) {
177
+ lines.push(row("rec", truncateRawLine(result.recovery.how, 160)));
178
+ }
179
+ }
180
+
181
+ function appendRecoveryRow(lines, recovery, evidence, fallbackOutputId) {
182
+ const first = Array.isArray(evidence) ? evidence.find((packet) => packet?.lines) : undefined;
183
+ if (first?.source?.kind === "vault" && first.source.outputId && first.lines) {
184
+ lines.push(row("rec", "vault", first.source.outputId, first.source.stream ?? "raw", first.lines));
185
+ return;
186
+ }
187
+ if (first?.source?.kind === "repo" && (first.path || first.source.path) && first.lines) {
188
+ lines.push(row("rec", "repo", `${first.path ?? first.source.path}:${first.lines}`));
189
+ return;
190
+ }
191
+ const outputId = recovery?.outputId ?? fallbackOutputId;
192
+ if (outputId) {
193
+ lines.push(row("rec", "vault", outputId));
194
+ return;
195
+ }
196
+ if (recovery?.how) {
197
+ lines.push(row("rec", truncateRawLine(recovery.how, 160)));
198
+ }
199
+ }
200
+
201
+ function compactBatchStepLine(step) {
202
+ const result = step?.result;
203
+ const outputId = result?.outputId ?? result?.recovery?.outputId;
204
+ const parts = ["step", Number(step?.index ?? 0) + 1, step?.id ?? "step", step?.kind ?? "step", step?.status ?? "unknown"];
205
+ if (result?.routing?.status) parts.push(`route=${result.routing.status}`);
206
+ if (step?.durationMs !== undefined) parts.push(`${step.durationMs}ms`);
207
+ if (outputId) parts.push(`out=${outputId}`);
208
+ if (Array.isArray(result?.evidence)) parts.push(`e=${result.evidence.length}`);
209
+ if (Array.isArray(result?.importantLines)) parts.push(`p=${result.importantLines.length}`);
210
+ if (result?.execution?.status) parts.push(`exec=${result.execution.status}`);
211
+ const message = step?.error ?? result?.failure?.message ?? result?.summary;
212
+ if (message) parts.push(truncateRawLine(message, 160));
213
+ return row(...parts);
214
+ }
215
+
216
+ function compactRunFilterText(filters) {
217
+ if (!filters || typeof filters !== "object") {
218
+ return "";
219
+ }
220
+ const parts = [`stream=${filters.stream ?? "selected"}`];
221
+ if (Array.isArray(filters.include) && filters.include.length > 0) {
222
+ parts.push(`include=${filters.include.join("|")}`);
223
+ }
224
+ if (Array.isArray(filters.exclude) && filters.exclude.length > 0) {
225
+ parts.push(`exclude=${filters.exclude.join("|")}`);
226
+ }
227
+ if (filters.head !== undefined) {
228
+ parts.push(`head=${filters.head}`);
229
+ }
230
+ if (filters.tail !== undefined) {
231
+ parts.push(`tail=${filters.tail}`);
232
+ }
233
+ if (filters.maxLines !== undefined) {
234
+ parts.push(`maxLines=${filters.maxLines}`);
235
+ }
236
+ if (filters.maxBytes !== undefined) {
237
+ parts.push(`maxBytes=${filters.maxBytes}`);
238
+ }
239
+ if (filters.selectedLines !== undefined && filters.sourceLines !== undefined) {
240
+ parts.push(`selected=${filters.selectedLines}/${filters.sourceLines}`);
241
+ }
242
+ if (filters.fallbackPreservedFailureEvidence) {
243
+ parts.push("fallback=failure-evidence");
244
+ }
245
+ return parts.join(" ");
246
+ }
247
+
248
+ function compactRunScriptProducerText(scriptProducer) {
249
+ if (!scriptProducer || typeof scriptProducer !== "object") {
250
+ return "";
251
+ }
252
+ const parts = [`${scriptProducer.language ?? "script"}:${scriptProducer.status ?? "unknown"}`];
253
+ if (scriptProducer.label) {
254
+ parts.push(`label=${scriptProducer.label}`);
255
+ }
256
+ if (scriptProducer.adapterId) {
257
+ parts.push(`adapter=${scriptProducer.adapterId}`);
258
+ }
259
+ if (scriptProducer.codeSha256) {
260
+ parts.push(`code=${scriptProducer.codeSha256}`);
261
+ }
262
+ if (scriptProducer.failure?.kind) {
263
+ parts.push(`failure=${scriptProducer.failure.kind}`);
264
+ }
265
+ return parts.join(" ");
266
+ }
267
+
268
+ function compactRunScriptFilterText(scriptFilter) {
269
+ if (!scriptFilter || typeof scriptFilter !== "object") {
270
+ return "";
271
+ }
272
+ const parts = [`${scriptFilter.language ?? "script"}:${scriptFilter.status ?? "unknown"}`];
273
+ if (scriptFilter.label) {
274
+ parts.push(`label=${scriptFilter.label}`);
275
+ }
276
+ if (scriptFilter.outputId) {
277
+ parts.push(`transformed=${scriptFilter.outputId}`);
278
+ }
279
+ if (scriptFilter.failure?.kind) {
280
+ parts.push(`failure=${scriptFilter.failure.kind}`);
281
+ }
282
+ return parts.join(" ");
283
+ }
284
+
285
+ function compactEvidenceLabel(packet) {
286
+ if (!packet || typeof packet !== "object") {
287
+ return "evidence";
288
+ }
289
+ const source = compactSourceLabel(packet.source);
290
+ const path = packet.path ?? source;
291
+ const lines = packet.lines ? `:${packet.lines}` : "";
292
+ return `${shortenMiddle(path || "evidence", 90)}${lines}`;
293
+ }
294
+
295
+ function compactSourceLabel(source) {
296
+ if (!source || typeof source !== "object") {
297
+ return "";
298
+ }
299
+ if (source.kind === "repo") {
300
+ return `repo ${shortenMiddle(source.path ?? ".", 80)}`;
301
+ }
302
+ if (source.kind === "vault") {
303
+ const stream = source.stream ? `:${source.stream}` : "";
304
+ return `vault ${shortenMiddle(source.outputId ?? "...", 48)}${stream}`;
305
+ }
306
+ return String(source.kind ?? "source");
307
+ }
308
+
309
+ function compactOperationLabel(operation) {
310
+ if (!operation || typeof operation !== "object") {
311
+ return "operation";
312
+ }
313
+ return String(operation.kind ?? operation.name ?? "operation");
314
+ }
315
+
316
+ function compactParserCounts(counts) {
317
+ if (!counts || typeof counts !== "object") {
318
+ return "";
319
+ }
320
+ const parts = [];
321
+ if (counts.testsFailed !== undefined || counts.testsPassed !== undefined || counts.testsTotal !== undefined) {
322
+ if (counts.testsFailed !== undefined) {
323
+ parts.push(`${counts.testsFailed} failed`);
324
+ }
325
+ if (counts.testsPassed !== undefined) {
326
+ parts.push(`${counts.testsPassed} passed`);
327
+ }
328
+ if (counts.testsTotal !== undefined) {
329
+ parts.push(`${counts.testsTotal} total`);
330
+ }
331
+ return parts.join("/");
332
+ }
333
+ if (counts.errors !== undefined) {
334
+ parts.push(`${counts.errors} errors`);
335
+ }
336
+ if (counts.warnings !== undefined) {
337
+ parts.push(`${counts.warnings} warnings`);
338
+ }
339
+ if (counts.duplicateOutputs !== undefined) {
340
+ parts.push(`${counts.duplicateOutputs} duplicate`);
341
+ }
342
+ return parts.join("/");
343
+ }
344
+
345
+ function truncateRawLine(value, maxLength = 220) {
346
+ const text = String(value ?? "");
347
+ if (text.length <= maxLength) {
348
+ return text;
349
+ }
350
+ return `${text.slice(0, Math.max(0, maxLength - 1))}…`;
351
+ }
352
+
353
+ export function textComponent(text) {
354
+ return {
355
+ render(width = 120) {
356
+ const maxWidth = Number.isFinite(width) ? Math.max(1, width) : 120;
357
+ return String(text).split("\n").map((line) => truncateAnsiToWidth(line, maxWidth));
358
+ },
359
+ invalidate() {},
360
+ };
361
+ }
362
+
363
+ function truncateAnsiToWidth(input, width) {
364
+ const text = String(input);
365
+ let output = "";
366
+ let visible = 0;
367
+
368
+ for (let index = 0; index < text.length;) {
369
+ const ansi = readAnsiSequence(text, index);
370
+ if (ansi) {
371
+ output += ansi.sequence;
372
+ index = ansi.end;
373
+ continue;
374
+ }
375
+
376
+ if (visible >= width - 1) {
377
+ output += "…";
378
+ return output;
379
+ }
380
+
381
+ const codePoint = text.codePointAt(index);
382
+ const character = String.fromCodePoint(codePoint);
383
+ output += character;
384
+ visible += 1;
385
+ index += character.length;
386
+ }
387
+
388
+ return output;
389
+ }
390
+
391
+ function readAnsiSequence(text, index) {
392
+ if (text.charCodeAt(index) !== 0x1b) {
393
+ return null;
394
+ }
395
+
396
+ const next = text[index + 1];
397
+ if (next === "[") {
398
+ let end = index + 2;
399
+ while (end < text.length && !/[\x40-\x7e]/.test(text[end])) {
400
+ end += 1;
401
+ }
402
+ return { sequence: text.slice(index, Math.min(end + 1, text.length)), end: Math.min(end + 1, text.length) };
403
+ }
404
+
405
+ if (next === "]") {
406
+ const bellEnd = text.indexOf("\x07", index + 2);
407
+ const stEnd = text.indexOf("\x1b\\", index + 2);
408
+ const candidates = [bellEnd, stEnd === -1 ? -1 : stEnd + 1].filter((value) => value !== -1);
409
+ const end = candidates.length > 0 ? Math.min(...candidates) + 1 : text.length;
410
+ return { sequence: text.slice(index, end), end };
411
+ }
412
+
413
+ return { sequence: text.slice(index, Math.min(index + 2, text.length)), end: Math.min(index + 2, text.length) };
414
+ }
415
+
416
+ export function themeFg(theme, color, text) {
417
+ return typeof theme?.fg === "function" ? theme.fg(color, text) : text;
418
+ }
419
+
420
+ export function themeBold(theme, text) {
421
+ return typeof theme?.bold === "function" ? theme.bold(text) : text;
422
+ }
423
+
424
+ export function formatStatus(theme, status) {
425
+ const text = String(status ?? "unknown");
426
+ if (text === "ok" || text === "success" || text === "routed" || text === "passed_through") {
427
+ return themeFg(theme, "success", text);
428
+ }
429
+ if (text === "error" || text === "failed") {
430
+ return themeFg(theme, "error", text);
431
+ }
432
+ return themeFg(theme, "warning", text);
433
+ }
434
+
435
+ export function statusIcon(status) {
436
+ if (status === "success" || status === "ok") {
437
+ return "✓";
438
+ }
439
+ if (status === "failed" || status === "error") {
440
+ return "✗";
441
+ }
442
+ return "!";
443
+ }
444
+
445
+ export function oneLine(value) {
446
+ return String(value ?? "").replace(/\s+/g, " ").trim();
447
+ }
448
+
449
+ export function truncateText(value, maxLength = 120) {
450
+ const text = oneLine(value);
451
+ if (text.length <= maxLength) {
452
+ return text;
453
+ }
454
+ return `${text.slice(0, Math.max(0, maxLength - 1))}…`;
455
+ }
456
+
457
+ export function shortenMiddle(value, maxLength = 80) {
458
+ const text = oneLine(value);
459
+ if (text.length <= maxLength) {
460
+ return text;
461
+ }
462
+ if (maxLength <= 5) {
463
+ return text.slice(0, maxLength);
464
+ }
465
+ const keep = maxLength - 1;
466
+ const head = Math.ceil(keep * 0.45);
467
+ const tail = Math.floor(keep * 0.55);
468
+ return `${text.slice(0, head)}…${text.slice(-tail)}`;
469
+ }
470
+
471
+ export function byteLength(text) {
472
+ return Buffer.byteLength(text, "utf8");
473
+ }
474
+
475
+ export function splitLines(text) {
476
+ if (text.length === 0) {
477
+ return [];
478
+ }
479
+ return text.replace(/\r\n/g, "\n").replace(/\r/g, "\n").split("\n");
480
+ }
481
+
482
+ export function extractTextContent(content) {
483
+ if (!Array.isArray(content) || content.length === 0) {
484
+ return null;
485
+ }
486
+
487
+ if (!content.every((part) => part?.type === "text" && typeof part.text === "string")) {
488
+ return null;
489
+ }
490
+
491
+ return content.map((part) => part.text).join("\n");
492
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2022",
4
+ "module": "NodeNext",
5
+ "moduleResolution": "NodeNext",
6
+ "rootDir": "src",
7
+ "outDir": "dist",
8
+ "declaration": false,
9
+ "sourceMap": false,
10
+ "strict": false,
11
+ "noEmitOnError": true,
12
+ "skipLibCheck": true,
13
+ "types": ["node"]
14
+ },
15
+ "include": ["src/**/*.ts"]
16
+ }
@@ -0,0 +1,40 @@
1
+ # Freeflow Docs
2
+
3
+ These docs describe the public plugin behavior.
4
+
5
+ After installing Freeflow, run setup in each repo where you want it active:
6
+
7
+ ```text
8
+ /setup-freeflow
9
+ ```
10
+
11
+ Setup creates activation/config files only.
12
+
13
+ In Codex, open the hooks screen after install:
14
+
15
+ ```text
16
+ /hooks
17
+ ```
18
+
19
+ Press `t` to trust/enable the Freeflow `SessionStart` hook when Codex marks it as needing review. Once enabled, plugin-bundled hooks load mode-contract, workflow, interview-gate, discover, and output-router context at session start, resume, clear, and compact.
20
+
21
+ In Pi, install Freeflow as a Pi package from npm:
22
+
23
+ ```bash
24
+ pi install npm:@hassangameryt/freeflow
25
+ ```
26
+
27
+ Or install directly from GitHub:
28
+
29
+ ```bash
30
+ pi install git:github.com/hassan-mohiddin/freeflow
31
+ ```
32
+
33
+ The package exposes `skills/` and the built Pi extension at `pi-extension/dist/index.js`. Pi extension source lives in `pi-extension/src/`. The Pi extension registers direct Freeflow commands, keeps `/workflow` mode changes scoped to the Pi session, refreshes mode-contract, workflow, interview-gate, discover, and output-router context on session start and compact, injects full skill context once after that boundary, then keeps later turns to a short mode/priority refresh plus a compact output-router tool reminder. The safety-policy reference remains available to the output-router skill but is not injected wholesale by default. The extension does not enforce policy, block tools, grant permissions, or create repo-local hooks.
34
+
35
+ - [Workflow](workflow.md): modes, entry points, loops, and the compact workflow map.
36
+ - [Skills](skills.md): shipped skills and what each one is for.
37
+ - [Architecture](architecture.md): package layout, runtime boundary, context hooks, and progressive disclosure model.
38
+ - [Output Router](output-router.md): compact guide to routed retrieval, command output routing, vault recovery, and config.
39
+ - [Release evidence](release-evidence.md): current release evidence and deferred checks.
40
+ - [ADRs](adr/README.md): durable release decisions.
@@ -0,0 +1,17 @@
1
+ # ADR 0002: Evals Before Enforcement Hooks
2
+
3
+ ## Status
4
+
5
+ Accepted.
6
+
7
+ ## Decision
8
+
9
+ Freeflow ships plugin-bundled context-loading runtime: Codex/Claude hooks and a Pi extension that load existing mode-contract, workflow, interview-gate, discover, and output-router context. It still ships without enforcement hooks or CLI enforcement. Behavior must first be proven with baseline-vs-with-skill evals before mechanical enforcement is added.
10
+
11
+ ## Rationale
12
+
13
+ Context-loading runtime addresses a measured lifecycle gap: mode-contract, workflow, interview-gate, discover, and output-router context may not be present at session start. The setup skill handles the same-session setup case by reading runtime context after successful verification. Enforcement hooks can prevent expensive mistakes, but early enforcement machinery can hide weak skill wording and turn the package into brittle workflow infrastructure.
14
+
15
+ ## Consequences
16
+
17
+ Native enforcement remains future work. Enforcement hooks should be added only when a repeated failure is concrete, deterministic, and not solved by concise skill wording.
@@ -6,11 +6,11 @@ Accepted.
6
6
 
7
7
  ## Decision
8
8
 
9
- Freeflow v0.1 ships as a marketplace repo with one plugin runtime under `plugins/freeflow/`.
9
+ Freeflow ships as a marketplace repo with one plugin runtime under the repo root.
10
10
 
11
11
  The plugin runtime includes skills, bundled references, context-loading runtime, public docs, eval sources/reports, command-surface metadata, Codex/Claude metadata, and Pi package metadata/extension.
12
12
 
13
- The runtime excludes generated eval run output, historical research notes, handoffs, enforcement hooks, CLI tools, and old Orchestra compatibility.
13
+ The runtime excludes generated eval run output, historical background notes, handoffs, enforcement hooks, CLI tools, and old Orchestra compatibility.
14
14
 
15
15
  ## Rationale
16
16
 
@@ -0,0 +1,26 @@
1
+ # ADR 0004: Discover Replaces Shallow Discovery Skills
2
+
3
+ ## Status
4
+
5
+ Accepted.
6
+
7
+ ## Decision
8
+
9
+ Freeflow uses one active `discover` skill for discovery work before spec, plan, build, or durable memory.
10
+
11
+ The previous active skills `research-brief`, `grill-context`, and `capture-decisions` are deprecated and moved to root `deprecated/skills/`. They are no longer part of the runtime skill surface or direct command surface.
12
+
13
+ The active direct command is `/discover`.
14
+
15
+ ## Rationale
16
+
17
+ The three older skills were useful independently but shallow as a workflow module. In real use, evidence gathering, brainstorming, targeted questions, and decision checkpointing need to interleave. Splitting them made the user or agent coordinate the sequence and made long grilling chains or uncaptured decisions more likely.
18
+
19
+ The `discover` skill uses the `design-for-depth` lens when module/interface/seam/locality questions matter, so discovery can shape deep modules from the beginning, not only rescue shallow code later.
20
+
21
+ ## Consequences
22
+
23
+ - `/research-brief`, `/grill-context`, and `/capture-decisions` are removed from the current command surface.
24
+ - Historical evals and reports for the deprecated skills remain as development evidence.
25
+ - Current discovery eval evidence lives in `evals/reports/by-skill/discover-1-report.md`. Historical `research` eval reports remain development evidence only.
26
+ - Durable decisions now belong to the checkpoint destination chosen by `discover`: spec, plan, handoff, decision note, ADR, domain memory, or chat.
@@ -0,0 +1,10 @@
1
+ # Freeflow Release ADRs
2
+
3
+ Durable decisions for the public Freeflow plugin behavior:
4
+
5
+ - [ADR 0001: Three Workflow Modes](0001-three-modes.md)
6
+ - [ADR 0002: Evals Before Enforcement Hooks](0002-evals-before-hooks.md)
7
+ - [ADR 0003: Release Boundary](0003-release-boundary.md)
8
+ - [ADR 0004: Discover Replaces Shallow Discovery Skills](0004-discover-replaces-shallow-discovery-skills.md)
9
+
10
+ Project-development ADRs live under [docs/adr](../../docs/adr/).