@hassangameryt/freeflow 0.7.3 → 0.9.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 (426) hide show
  1. package/.agents/plugins/marketplace.json +2 -2
  2. package/.claude-plugin/marketplace.json +1 -1
  3. package/.claude-plugin/plugin.json +2 -2
  4. package/.codex-plugin/plugin.json +3 -3
  5. package/.cursor-plugin/plugin.json +1 -1
  6. package/NOTICE +14 -0
  7. package/README.md +101 -159
  8. package/capabilities/cognitive-routing/SKILL.md +47 -210
  9. package/capabilities/cognitive-routing/references/coordinator.md +163 -0
  10. package/capabilities/cognitive-routing/references/worker.md +38 -0
  11. package/capabilities/compaction/SKILL.md +49 -0
  12. package/capabilities/compaction/references/summary-format.md +250 -0
  13. package/capabilities/messaging/SKILL.md +49 -0
  14. package/capabilities/task-memory/SKILL.md +87 -0
  15. package/command-surface.json +8 -52
  16. package/gemini-extension.json +1 -1
  17. package/hooks/claude/hooks.json +13 -3
  18. package/hooks/codex/hooks.json +2 -1
  19. package/hooks/shared/runtime-context.mjs +73 -83
  20. package/licenses/Apache-2.0.txt +55 -0
  21. package/package.json +42 -12
  22. package/pi-extension/README.md +41 -0
  23. package/pi-extension/dist/ask-user/ask.js +108 -0
  24. package/pi-extension/dist/ask-user/form.js +250 -0
  25. package/pi-extension/dist/ask-user/questions.js +66 -0
  26. package/pi-extension/dist/ask-user/tool.js +124 -0
  27. package/pi-extension/dist/cognitive-routing/assembler.js +417 -0
  28. package/pi-extension/dist/cognitive-routing/bootstrap.js +90 -0
  29. package/pi-extension/dist/{cognitive-routing-v2 → cognitive-routing}/config.js +8 -6
  30. package/pi-extension/dist/cognitive-routing/economics.js +45 -0
  31. package/pi-extension/dist/cognitive-routing/event-schema.js +388 -0
  32. package/pi-extension/dist/{session-sources/events.js → cognitive-routing/event-store.js} +107 -41
  33. package/pi-extension/dist/cognitive-routing/gate.js +256 -0
  34. package/pi-extension/dist/cognitive-routing/handlers.js +901 -0
  35. package/pi-extension/dist/cognitive-routing/handoffs.js +350 -0
  36. package/pi-extension/dist/cognitive-routing/model-control.js +476 -0
  37. package/pi-extension/dist/cognitive-routing/projection.js +520 -0
  38. package/pi-extension/dist/cognitive-routing/provenance.js +83 -0
  39. package/pi-extension/dist/{cognitive-routing-v2 → cognitive-routing}/render.js +15 -15
  40. package/pi-extension/dist/cognitive-routing/runtime.js +398 -0
  41. package/pi-extension/dist/{cognitive-routing-v2 → cognitive-routing}/schemas.js +47 -11
  42. package/pi-extension/dist/cognitive-routing/session.js +223 -0
  43. package/pi-extension/dist/{session-sources → cognitive-routing}/sources.js +126 -87
  44. package/pi-extension/dist/{cognitive-routing-v2 → cognitive-routing}/state.js +55 -386
  45. package/pi-extension/dist/cognitive-routing/status.js +81 -0
  46. package/pi-extension/dist/cognitive-routing/tools.js +74 -0
  47. package/pi-extension/dist/{cognitive-routing-v2 → cognitive-routing}/types.js +14 -11
  48. package/pi-extension/dist/compaction/carry.js +205 -0
  49. package/pi-extension/dist/compaction/config.js +24 -0
  50. package/pi-extension/dist/compaction/controller.js +494 -0
  51. package/pi-extension/dist/compaction/harness.js +93 -0
  52. package/pi-extension/dist/compaction/results.js +159 -0
  53. package/pi-extension/dist/compaction/thresholds.js +35 -0
  54. package/pi-extension/dist/compaction/tool.js +57 -0
  55. package/pi-extension/dist/host/branch.js +13 -0
  56. package/pi-extension/dist/host/canonical.js +12 -0
  57. package/pi-extension/dist/host/catalog.js +62 -0
  58. package/pi-extension/dist/host/config-validation.js +233 -0
  59. package/pi-extension/dist/host/config.js +361 -0
  60. package/pi-extension/dist/host/inbound.js +142 -0
  61. package/pi-extension/dist/host/projection-tags.js +60 -0
  62. package/pi-extension/dist/host/prompts.js +93 -0
  63. package/pi-extension/dist/{session-sources → host}/read-only-session.js +117 -1
  64. package/pi-extension/dist/{runtime → host}/request-history.js +125 -39
  65. package/pi-extension/dist/host/rows.js +25 -0
  66. package/pi-extension/dist/host/runtime-state.js +204 -0
  67. package/pi-extension/dist/host/section-keeper.js +85 -0
  68. package/pi-extension/dist/host/settings/freeflow-command.js +2323 -0
  69. package/pi-extension/dist/{settings/settings-tui.js → host/settings/settings-view.js} +205 -73
  70. package/pi-extension/dist/host/staging.js +28 -0
  71. package/pi-extension/dist/host/status.js +115 -0
  72. package/pi-extension/dist/index.js +1004 -188
  73. package/pi-extension/dist/messaging/config.js +27 -0
  74. package/pi-extension/dist/messaging/messaging.js +398 -0
  75. package/pi-extension/dist/messaging/registry.js +57 -0
  76. package/pi-extension/dist/messaging/render.js +90 -0
  77. package/pi-extension/dist/messaging/tools.js +109 -0
  78. package/pi-extension/dist/messaging/transport.js +101 -0
  79. package/pi-extension/dist/provider-support/cache/anchor.js +21 -0
  80. package/pi-extension/dist/provider-support/cache/anthropic.js +102 -0
  81. package/pi-extension/dist/provider-support/cache/health.js +73 -0
  82. package/pi-extension/dist/provider-support/cache/index.js +58 -0
  83. package/pi-extension/dist/provider-support/cache/keepalive.js +222 -0
  84. package/pi-extension/dist/provider-support/cache/monitor.js +17 -0
  85. package/pi-extension/dist/provider-support/cache/openai-responses.js +48 -0
  86. package/pi-extension/dist/provider-support/effort.js +13 -0
  87. package/pi-extension/dist/provider-support/index.js +44 -3
  88. package/pi-extension/dist/provider-support/{astra → openai}/adapter.js +46 -29
  89. package/pi-extension/dist/provider-support/{astra → openai}/history.js +10 -8
  90. package/pi-extension/dist/provider-support/{astra → openai}/index.js +8 -4
  91. package/pi-extension/dist/provider-support/{astra → openai}/session-state.js +29 -38
  92. package/pi-extension/dist/provider-support/routes.js +17 -0
  93. package/pi-extension/dist/task-memory/config.js +49 -0
  94. package/pi-extension/dist/task-memory/registry.js +119 -0
  95. package/pi-extension/dist/task-memory/render.js +107 -0
  96. package/pi-extension/dist/task-memory/runtime.js +994 -0
  97. package/pi-extension/dist/task-memory/tool.js +233 -0
  98. package/pi-extension/dist/tool-execution/apply-patch/grammar.js +23 -0
  99. package/pi-extension/dist/tool-execution/apply-patch/match.js +38 -0
  100. package/pi-extension/dist/tool-execution/apply-patch/parser.js +177 -0
  101. package/pi-extension/dist/tool-execution/apply-patch/plan.js +201 -0
  102. package/pi-extension/dist/tool-execution/apply-patch/tool.js +84 -0
  103. package/pi-extension/dist/tool-execution/background.js +430 -0
  104. package/pi-extension/dist/tool-execution/bash-guard.js +23 -0
  105. package/pi-extension/dist/tool-execution/config.js +33 -0
  106. package/pi-extension/dist/tool-execution/edit-messages.js +120 -0
  107. package/pi-extension/dist/tool-execution/file-state.js +138 -0
  108. package/pi-extension/dist/tool-execution/file-tracking.js +163 -0
  109. package/pi-extension/dist/tool-execution/guidance-notices.js +124 -0
  110. package/pi-extension/dist/tool-execution/prompt.js +54 -0
  111. package/pi-extension/dist/tool-execution/skill-reads.js +143 -0
  112. package/pi-extension/dist/tool-execution/tools.js +16 -0
  113. package/pi-extension/freeflow/README.md +9 -0
  114. package/runtime/prompts/cognitive-routing.md +4 -4
  115. package/runtime/prompts/core.md +29 -72
  116. package/runtime/prompts/interaction-contract.md +18 -8
  117. package/runtime/prompts/tool-execution.md +25 -0
  118. package/runtime/prompts/working-method.md +25 -0
  119. package/skills/deliver-work/SKILL.md +76 -0
  120. package/skills/deliver-work/references/branch-closeout.md +134 -0
  121. package/skills/deliver-work/references/commit.md +83 -0
  122. package/skills/deliver-work/references/launch.md +94 -0
  123. package/skills/deliver-work/references/release.md +85 -0
  124. package/skills/deliver-work/scripts/commit-state.mjs +139 -0
  125. package/skills/deliver-work/scripts/delivery-state.mjs +107 -0
  126. package/skills/deliver-work/scripts/lib/git-state.mjs +178 -0
  127. package/skills/deliver-work/scripts/push-route.mjs +122 -0
  128. package/skills/deliver-work/scripts/release-preflight.mjs +177 -0
  129. package/skills/discuss-work/SKILL.md +148 -0
  130. package/skills/{discuss → discuss-work}/references/discussion-continuity.md +13 -50
  131. package/skills/discuss-work/references/learning-action.md +36 -0
  132. package/skills/discuss-work/scripts/choices.mjs +101 -0
  133. package/skills/discuss-work/scripts/lib/choices.mjs +159 -0
  134. package/skills/evaluate-behavior/SKILL.md +107 -0
  135. package/skills/evaluate-behavior/references/authoring.md +381 -0
  136. package/skills/evaluate-behavior/references/coding-tasks.md +145 -0
  137. package/skills/evaluate-behavior/references/conversations-pipelines-judges.md +177 -0
  138. package/skills/evaluate-behavior/references/design-and-measurement.md +273 -0
  139. package/skills/evaluate-behavior/references/running-and-evidence.md +245 -0
  140. package/skills/evaluate-behavior/scripts/claude-guard.mjs +76 -0
  141. package/skills/evaluate-behavior/scripts/guard-rules.mjs +309 -0
  142. package/skills/evaluate-behavior/scripts/lib/agreement.mjs +90 -0
  143. package/skills/evaluate-behavior/scripts/lib/arms.mjs +55 -0
  144. package/skills/evaluate-behavior/scripts/lib/budget.mjs +87 -0
  145. package/skills/evaluate-behavior/scripts/lib/build-source.mjs +287 -0
  146. package/skills/evaluate-behavior/scripts/lib/clear.mjs +74 -0
  147. package/skills/evaluate-behavior/scripts/lib/container.mjs +395 -0
  148. package/skills/evaluate-behavior/scripts/lib/decision.mjs +418 -0
  149. package/skills/evaluate-behavior/scripts/lib/definitions.mjs +1072 -0
  150. package/skills/evaluate-behavior/scripts/lib/freeflow.mjs +103 -0
  151. package/skills/evaluate-behavior/scripts/lib/grade-command.mjs +591 -0
  152. package/skills/evaluate-behavior/scripts/lib/grade-comparison.mjs +90 -0
  153. package/skills/{evaluate-skill → evaluate-behavior}/scripts/lib/grade-interaction.mjs +19 -18
  154. package/skills/{evaluate-skill → evaluate-behavior}/scripts/lib/grade-support.mjs +32 -5
  155. package/skills/{evaluate-skill → evaluate-behavior}/scripts/lib/grade-workspace.mjs +28 -12
  156. package/skills/evaluate-behavior/scripts/lib/grade.mjs +101 -0
  157. package/skills/evaluate-behavior/scripts/lib/hooks.mjs +98 -0
  158. package/skills/evaluate-behavior/scripts/lib/hosts/claude-code/confinement.mjs +196 -0
  159. package/skills/evaluate-behavior/scripts/lib/hosts/claude-code/constraints.mjs +111 -0
  160. package/skills/evaluate-behavior/scripts/lib/hosts/claude-code/index.mjs +48 -0
  161. package/skills/evaluate-behavior/scripts/lib/hosts/claude-code/isolation.mjs +74 -0
  162. package/skills/evaluate-behavior/scripts/lib/hosts/claude-code/launch.mjs +123 -0
  163. package/skills/evaluate-behavior/scripts/lib/hosts/claude-code/model-call.mjs +73 -0
  164. package/skills/evaluate-behavior/scripts/lib/hosts/claude-code/recorder.mjs +178 -0
  165. package/skills/evaluate-behavior/scripts/lib/hosts/claude-code/session.mjs +494 -0
  166. package/skills/evaluate-behavior/scripts/lib/hosts/claude-code/skills.mjs +81 -0
  167. package/skills/evaluate-behavior/scripts/lib/hosts/index.mjs +31 -0
  168. package/skills/evaluate-behavior/scripts/lib/hosts/names.mjs +3 -0
  169. package/skills/evaluate-behavior/scripts/lib/hosts/pi/confinement.mjs +173 -0
  170. package/skills/evaluate-behavior/scripts/lib/hosts/pi/host.mjs +148 -0
  171. package/skills/evaluate-behavior/scripts/lib/hosts/pi/index.mjs +70 -0
  172. package/skills/evaluate-behavior/scripts/lib/hosts/pi/isolation.mjs +81 -0
  173. package/skills/evaluate-behavior/scripts/lib/hosts/pi/model-call.mjs +79 -0
  174. package/skills/evaluate-behavior/scripts/lib/hosts/pi/process.mjs +241 -0
  175. package/skills/{evaluate-skill/scripts/lib → evaluate-behavior/scripts/lib/hosts/pi}/rpc.mjs +144 -26
  176. package/skills/evaluate-behavior/scripts/lib/identity.mjs +82 -0
  177. package/skills/evaluate-behavior/scripts/lib/judge.mjs +688 -0
  178. package/skills/evaluate-behavior/scripts/lib/metrics.mjs +332 -0
  179. package/skills/evaluate-behavior/scripts/lib/model-call.mjs +17 -0
  180. package/skills/evaluate-behavior/scripts/lib/participants.mjs +616 -0
  181. package/skills/{evaluate-skill → evaluate-behavior}/scripts/lib/process.mjs +22 -0
  182. package/skills/evaluate-behavior/scripts/lib/queue.mjs +54 -0
  183. package/skills/evaluate-behavior/scripts/lib/reference.mjs +343 -0
  184. package/skills/evaluate-behavior/scripts/lib/reuse.mjs +277 -0
  185. package/skills/evaluate-behavior/scripts/lib/review.mjs +933 -0
  186. package/skills/evaluate-behavior/scripts/lib/runner.mjs +732 -0
  187. package/skills/{evaluate-skill → evaluate-behavior}/scripts/lib/sandbox.mjs +121 -14
  188. package/skills/evaluate-behavior/scripts/lib/scan-shell.mjs +457 -0
  189. package/skills/evaluate-behavior/scripts/lib/scan.mjs +479 -0
  190. package/skills/evaluate-behavior/scripts/lib/seal.mjs +91 -0
  191. package/skills/evaluate-behavior/scripts/lib/shell.mjs +560 -0
  192. package/skills/evaluate-behavior/scripts/lib/source-override.mjs +64 -0
  193. package/skills/evaluate-behavior/scripts/lib/subject-file.mjs +88 -0
  194. package/skills/{evaluate-skill/scripts/lib/pi.mjs → evaluate-behavior/scripts/lib/subject.mjs} +239 -262
  195. package/skills/evaluate-behavior/scripts/lib/task-copy.mjs +124 -0
  196. package/skills/evaluate-behavior/scripts/lib/trials.mjs +524 -0
  197. package/skills/evaluate-behavior/scripts/lib/validity.mjs +68 -0
  198. package/skills/evaluate-behavior/scripts/lib/view-html.mjs +454 -0
  199. package/skills/{evaluate-skill → evaluate-behavior}/scripts/lib/view.mjs +218 -11
  200. package/skills/evaluate-behavior/scripts/pi-command-tool.mjs +159 -0
  201. package/skills/evaluate-behavior/scripts/pi-container-route.mjs +23 -0
  202. package/skills/evaluate-behavior/scripts/pi-guard.mjs +77 -0
  203. package/skills/evaluate-behavior/scripts/pi-login-refresh.mjs +31 -0
  204. package/skills/evaluate-behavior/scripts/skill-eval.mjs +586 -0
  205. package/skills/execute-work/SKILL.md +96 -72
  206. package/skills/execute-work/references/code-practices.md +27 -49
  207. package/skills/execute-work/references/design.md +271 -0
  208. package/skills/execute-work/references/diagnose.md +117 -0
  209. package/skills/execute-work/references/migration.md +108 -0
  210. package/skills/execute-work/references/simplify.md +65 -0
  211. package/skills/execute-work/scripts/self-review.mjs +422 -0
  212. package/skills/execute-work/scripts/touch-map.mjs +290 -0
  213. package/skills/review-work/SKILL.md +94 -64
  214. package/skills/review-work/references/adjudication.md +94 -0
  215. package/skills/review-work/references/artifact.md +198 -0
  216. package/skills/review-work/references/evals-and-judges.md +66 -0
  217. package/skills/review-work/references/work.md +177 -0
  218. package/skills/review-work/scripts/check-brief.mjs +128 -0
  219. package/skills/review-work/scripts/review-packet.mjs +233 -0
  220. package/skills/setup-freeflow/SKILL.md +69 -16
  221. package/skills/track-work/SKILL.md +135 -151
  222. package/skills/track-work/references/handoff.md +190 -0
  223. package/skills/track-work/references/projects.md +51 -0
  224. package/skills/track-work/references/working-record-format.md +201 -344
  225. package/skills/track-work/scripts/lib/document.mjs +79 -19
  226. package/skills/track-work/scripts/lib/format.mjs +18 -1
  227. package/skills/track-work/scripts/lib/recover.mjs +254 -0
  228. package/skills/track-work/scripts/lib/registry.mjs +656 -0
  229. package/skills/track-work/scripts/lib/search.mjs +40 -0
  230. package/skills/track-work/scripts/lib/store.mjs +53 -21
  231. package/skills/track-work/scripts/lib/transitions.mjs +79 -4
  232. package/skills/track-work/scripts/lib/views.mjs +50 -1
  233. package/skills/track-work/scripts/working-record.mjs +263 -22
  234. package/skills/verify-work/SKILL.md +64 -47
  235. package/skills/verify-work/references/feature-map.md +120 -0
  236. package/skills/verify-work/references/runtime-evidence.md +203 -0
  237. package/skills/verify-work/references/test-design.md +27 -6
  238. package/skills/verify-work/scripts/test-changes.mjs +246 -0
  239. package/skills/write-docs/SKILL.md +171 -0
  240. package/skills/write-docs/references/documentation-shapes.md +184 -0
  241. package/skills/write-docs/references/spec-and-plan-shapes.md +308 -0
  242. package/skills/write-docs/scripts/artifact-check.mjs +148 -0
  243. package/skills/write-docs/scripts/docs-check.mjs +229 -0
  244. package/skills/write-docs/scripts/plan-lint.mjs +123 -0
  245. package/skills/write-skill/SKILL.md +165 -165
  246. package/skills/write-skill/references/activation-and-wording.md +143 -0
  247. package/skills/write-skill/references/placement-and-dependencies.md +154 -0
  248. package/skills/write-skill/scripts/lib/compare.mjs +701 -0
  249. package/skills/write-skill/scripts/lib/similarity.mjs +56 -0
  250. package/skills/write-skill/scripts/lib/skill-author.mjs +197 -3
  251. package/skills/write-skill/scripts/skill-author.mjs +67 -8
  252. package/capabilities/context-virtualization/SKILL.md +0 -103
  253. package/capabilities/conversation-history/SKILL.md +0 -53
  254. package/hooks/tests/check-host-adapters.test.mjs +0 -82
  255. package/hooks/tests/check-runtime-context-hook.sh +0 -212
  256. package/pi-extension/dist/cognitive-routing-v2/projection.js +0 -330
  257. package/pi-extension/dist/cognitive-routing-v2/runtime.js +0 -2181
  258. package/pi-extension/dist/cognitive-routing-v2/tools.js +0 -60
  259. package/pi-extension/dist/context-virtualization/commands.js +0 -89
  260. package/pi-extension/dist/context-virtualization/projector.js +0 -42
  261. package/pi-extension/dist/context-virtualization/runtime.js +0 -378
  262. package/pi-extension/dist/context-virtualization/state.js +0 -57
  263. package/pi-extension/dist/context-virtualization/types.js +0 -10
  264. package/pi-extension/dist/conversation-history/passages.js +0 -66
  265. package/pi-extension/dist/conversation-history/ranking.js +0 -105
  266. package/pi-extension/dist/conversation-history/runtime.js +0 -226
  267. package/pi-extension/dist/conversation-history/search.js +0 -56
  268. package/pi-extension/dist/conversation-history/types.js +0 -1
  269. package/pi-extension/dist/freeflow-context/resolver.js +0 -120
  270. package/pi-extension/dist/freeflow-context/runtime.js +0 -80
  271. package/pi-extension/dist/freeflow-context/source-projector.js +0 -95
  272. package/pi-extension/dist/freeflow-context/tool.js +0 -314
  273. package/pi-extension/dist/freeflow-context/types.js +0 -12
  274. package/pi-extension/dist/freeflow-context/visibility.js +0 -28
  275. package/pi-extension/dist/integrations/mcp-config.js +0 -29
  276. package/pi-extension/dist/runtime/runtime-context.js +0 -754
  277. package/pi-extension/dist/runtime/runtime-identity.js +0 -5
  278. package/pi-extension/dist/session-sources/provenance.js +0 -32
  279. package/pi-extension/dist/settings/settings-ui.js +0 -1360
  280. package/pi-extension/dist/ui/text-component.js +0 -57
  281. package/pi-extension/src/cognitive-routing-v2/budget.ts +0 -42
  282. package/pi-extension/src/cognitive-routing-v2/config.ts +0 -173
  283. package/pi-extension/src/cognitive-routing-v2/projection.ts +0 -375
  284. package/pi-extension/src/cognitive-routing-v2/render.ts +0 -277
  285. package/pi-extension/src/cognitive-routing-v2/runtime.ts +0 -2241
  286. package/pi-extension/src/cognitive-routing-v2/schemas.ts +0 -180
  287. package/pi-extension/src/cognitive-routing-v2/state.ts +0 -839
  288. package/pi-extension/src/cognitive-routing-v2/tools.ts +0 -62
  289. package/pi-extension/src/cognitive-routing-v2/types.ts +0 -254
  290. package/pi-extension/src/context-virtualization/commands.ts +0 -111
  291. package/pi-extension/src/context-virtualization/projector.ts +0 -62
  292. package/pi-extension/src/context-virtualization/runtime.ts +0 -428
  293. package/pi-extension/src/context-virtualization/state.ts +0 -79
  294. package/pi-extension/src/context-virtualization/types.ts +0 -92
  295. package/pi-extension/src/conversation-history/passages.ts +0 -81
  296. package/pi-extension/src/conversation-history/ranking.ts +0 -155
  297. package/pi-extension/src/conversation-history/runtime.ts +0 -250
  298. package/pi-extension/src/conversation-history/search.ts +0 -79
  299. package/pi-extension/src/conversation-history/types.ts +0 -31
  300. package/pi-extension/src/freeflow-context/resolver.ts +0 -139
  301. package/pi-extension/src/freeflow-context/runtime.ts +0 -100
  302. package/pi-extension/src/freeflow-context/source-projector.ts +0 -106
  303. package/pi-extension/src/freeflow-context/tool.ts +0 -366
  304. package/pi-extension/src/freeflow-context/types.ts +0 -70
  305. package/pi-extension/src/freeflow-context/visibility.ts +0 -53
  306. package/pi-extension/src/index.ts +0 -390
  307. package/pi-extension/src/integrations/mcp-config.ts +0 -32
  308. package/pi-extension/src/provider-support/astra/adapter.ts +0 -108
  309. package/pi-extension/src/provider-support/astra/history.ts +0 -145
  310. package/pi-extension/src/provider-support/astra/index.ts +0 -12
  311. package/pi-extension/src/provider-support/astra/session-state.ts +0 -113
  312. package/pi-extension/src/provider-support/index.ts +0 -5
  313. package/pi-extension/src/runtime/request-history.ts +0 -243
  314. package/pi-extension/src/runtime/runtime-context.ts +0 -860
  315. package/pi-extension/src/runtime/runtime-identity.ts +0 -8
  316. package/pi-extension/src/session-sources/events.ts +0 -230
  317. package/pi-extension/src/session-sources/provenance.ts +0 -39
  318. package/pi-extension/src/session-sources/read-only-session.ts +0 -170
  319. package/pi-extension/src/session-sources/sources.ts +0 -334
  320. package/pi-extension/src/settings/settings-tui.ts +0 -501
  321. package/pi-extension/src/settings/settings-ui.ts +0 -1652
  322. package/pi-extension/src/ui/text-component.ts +0 -66
  323. package/pi-extension/tests/cache-reuse/history.test.js +0 -117
  324. package/pi-extension/tests/cache-reuse/native.test.js +0 -91
  325. package/pi-extension/tests/cache-reuse/settings.test.js +0 -211
  326. package/pi-extension/tests/cognitive-routing-v2/communication.test.js +0 -577
  327. package/pi-extension/tests/cognitive-routing-v2/compaction-input.test.js +0 -183
  328. package/pi-extension/tests/cognitive-routing-v2/delegation.test.js +0 -557
  329. package/pi-extension/tests/cognitive-routing-v2/native.test.js +0 -474
  330. package/pi-extension/tests/cognitive-routing-v2/performance.test.js +0 -87
  331. package/pi-extension/tests/cognitive-routing-v2/persistence.test.js +0 -300
  332. package/pi-extension/tests/cognitive-routing-v2/projection.test.js +0 -241
  333. package/pi-extension/tests/cognitive-routing-v2/recovery.test.js +0 -1034
  334. package/pi-extension/tests/cognitive-routing-v2/render.test.js +0 -244
  335. package/pi-extension/tests/cognitive-routing-v2/runtime.test.js +0 -423
  336. package/pi-extension/tests/cognitive-routing-v2/stabilization.test.js +0 -521
  337. package/pi-extension/tests/cognitive-routing-v2/state.test.js +0 -586
  338. package/pi-extension/tests/context-virtualization/extension.test.js +0 -775
  339. package/pi-extension/tests/context-virtualization/projector.test.js +0 -110
  340. package/pi-extension/tests/context-virtualization/runtime.test.js +0 -230
  341. package/pi-extension/tests/conversation-history/runtime.test.js +0 -98
  342. package/pi-extension/tests/conversation-history/search.test.js +0 -97
  343. package/pi-extension/tests/fixtures/pi-host.js +0 -4
  344. package/pi-extension/tests/fixtures/routing-native.js +0 -191
  345. package/pi-extension/tests/integration/mode-free-core.test.js +0 -220
  346. package/pi-extension/tests/integration/pi-extension.test.js +0 -1447
  347. package/pi-extension/tests/integration/prompt-architecture.test.js +0 -447
  348. package/pi-extension/tests/integration/unaffected-regressions.test.js +0 -478
  349. package/pi-extension/tests/provider-support/astra-boundaries.test.js +0 -75
  350. package/pi-extension/tests/provider-support/astra.test.js +0 -306
  351. package/pi-extension/tests/provider-support/cli.test.js +0 -92
  352. package/pi-extension/tests/provider-support/native.test.js +0 -183
  353. package/pi-extension/tests/settings/settings-tui.test.js +0 -243
  354. package/pi-extension/tsconfig.json +0 -16
  355. package/plugin.json +0 -33
  356. package/runtime/prompts/context-virtualization.md +0 -3
  357. package/runtime/prompts/conversation-history.md +0 -3
  358. package/skills/action-selection/SKILL.md +0 -100
  359. package/skills/action-selection/references/trajectory-stalls.md +0 -71
  360. package/skills/bypass/SKILL.md +0 -153
  361. package/skills/commit-work/SKILL.md +0 -145
  362. package/skills/commit-work/references/git-state-edges.md +0 -94
  363. package/skills/commit-work/references/simple-push.md +0 -92
  364. package/skills/commit-work/references/staging-decisions.md +0 -106
  365. package/skills/decision-gate/SKILL.md +0 -106
  366. package/skills/design-for-depth/SKILL.md +0 -117
  367. package/skills/design-for-depth/references/design-pressure-signals.md +0 -182
  368. package/skills/design-for-depth/references/implementation-decisions.md +0 -76
  369. package/skills/design-for-depth/references/interface-design-loop.md +0 -136
  370. package/skills/design-for-depth/references/module-and-dependency-design.md +0 -147
  371. package/skills/design-for-depth/references/software-design-philosophy.md +0 -202
  372. package/skills/design-for-depth/references/state-and-failure-boundaries.md +0 -136
  373. package/skills/diagnose-failure/SKILL.md +0 -125
  374. package/skills/diagnose-failure/references/diagnostic-loop-catalog.md +0 -48
  375. package/skills/diagnose-failure/references/flaky-and-performance-diagnosis.md +0 -51
  376. package/skills/discuss/SKILL.md +0 -116
  377. package/skills/evaluate-skill/SKILL.md +0 -219
  378. package/skills/evaluate-skill/references/evaluation-definition-schema.md +0 -385
  379. package/skills/evaluate-skill/references/evaluation-design.md +0 -112
  380. package/skills/evaluate-skill/references/execution-and-evidence.md +0 -90
  381. package/skills/evaluate-skill/references/review-and-revision.md +0 -92
  382. package/skills/evaluate-skill/scripts/lib/definitions.mjs +0 -407
  383. package/skills/evaluate-skill/scripts/lib/grade-comparison.mjs +0 -60
  384. package/skills/evaluate-skill/scripts/lib/grade.mjs +0 -64
  385. package/skills/evaluate-skill/scripts/lib/runner.mjs +0 -368
  386. package/skills/evaluate-skill/scripts/pi-guard.mjs +0 -164
  387. package/skills/evaluate-skill/scripts/skill-eval.mjs +0 -102
  388. package/skills/execute-work/references/execute-work-edges.md +0 -68
  389. package/skills/finish-branch/SKILL.md +0 -117
  390. package/skills/finish-branch/references/integration-options.md +0 -80
  391. package/skills/handoff/SKILL.md +0 -82
  392. package/skills/handoff/references/handoff-templates.md +0 -150
  393. package/skills/launch-work/SKILL.md +0 -116
  394. package/skills/launch-work/references/launch-readiness.md +0 -85
  395. package/skills/migration-work/SKILL.md +0 -115
  396. package/skills/migration-work/references/migration-lifecycle.md +0 -82
  397. package/skills/release-work/SKILL.md +0 -118
  398. package/skills/release-work/references/release-evidence.md +0 -78
  399. package/skills/review-artifact/SKILL.md +0 -142
  400. package/skills/review-artifact/references/adjudicate-artifact-review.md +0 -101
  401. package/skills/review-artifact/references/independent-artifact-reviewer-contract.md +0 -159
  402. package/skills/review-work/references/adjudicate-work-review.md +0 -97
  403. package/skills/review-work/references/independent-work-reviewer-contract.md +0 -139
  404. package/skills/review-work/references/security-risk-lens.md +0 -69
  405. package/skills/setup-freeflow/references/activation-contract.md +0 -109
  406. package/skills/setup-freeflow/references/host-setup.md +0 -67
  407. package/skills/simplify-code/SKILL.md +0 -85
  408. package/skills/simplify-code/references/simplification-patterns.md +0 -70
  409. package/skills/verify-work/references/browser-runtime-evidence.md +0 -55
  410. package/skills/verify-work/references/integration-evidence.md +0 -47
  411. package/skills/verify-work/references/performance-evidence.md +0 -57
  412. package/skills/workflow/SKILL.md +0 -127
  413. package/skills/workflow/references/domain-skill-composition.md +0 -43
  414. package/skills/write-plan/SKILL.md +0 -92
  415. package/skills/write-plan/references/plan-shapes.md +0 -156
  416. package/skills/write-skill/references/activation-boundaries.md +0 -104
  417. package/skills/write-skill/references/agent-first-instructions.md +0 -121
  418. package/skills/write-skill/references/progressive-disclosure.md +0 -127
  419. package/skills/write-skill/references/skill-dependency-graphs.md +0 -190
  420. package/skills/write-spec/SKILL.md +0 -92
  421. package/skills/write-spec/references/artifact-standards.md +0 -86
  422. package/skills/write-spec/references/decision-records.md +0 -78
  423. package/skills/write-spec/references/spec-shapes.md +0 -143
  424. /package/pi-extension/dist/{cognitive-routing-v2 → cognitive-routing}/budget.js +0 -0
  425. /package/skills/{evaluate-skill → evaluate-behavior}/scripts/lib/evidence.mjs +0 -0
  426. /package/skills/{evaluate-skill → evaluate-behavior}/scripts/pi-observer.mjs +0 -0
@@ -0,0 +1,128 @@
1
+ #!/usr/bin/env node
2
+ // Checks a work reviewer's pointer brief (references/work.md, "The Brief") before it is dispatched: every
3
+ // required labelled line is present, every backticked path it points to exists, and every commit it names resolves.
4
+ // It checks pointers only; whether they point to the right inputs is the initiator's judgment.
5
+ // Usage: check-brief.mjs <brief> [--root <repository>] [--json]
6
+ // Paths resolve against --root (default: the current directory); absolute paths are allowed, and a "#anchor" suffix is
7
+ // ignored. Exit code 0 when the brief passes, 1 when it has problems, 2 on a usage error.
8
+ import { execFileSync } from "node:child_process";
9
+ import { existsSync, readFileSync } from "node:fs";
10
+ import { dirname, isAbsolute, resolve } from "node:path";
11
+ import { parseArgs } from "node:util";
12
+
13
+ const USAGE = "Usage: check-brief.mjs <brief> [--root <repository>] [--json]";
14
+
15
+ // Lines every brief carries. "paths" lines must point to at least one existing file unless "none" is allowed and given.
16
+ const REQUIRED = [
17
+ { label: "Review", kind: "number" },
18
+ { label: "Boundary", kind: "text" },
19
+ { label: "Reviewed state", kind: "commit" },
20
+ { label: "Method", kind: "paths" },
21
+ { label: "Agreement", kind: "paths" },
22
+ { label: "Docs", kind: "paths", none: true },
23
+ { label: "Review rules", kind: "paths", none: true },
24
+ { label: "Diff", kind: "range" },
25
+ { label: "Evidence", kind: "paths", none: true },
26
+ { label: "May run", kind: "text" },
27
+ { label: "Report", kind: "report" },
28
+ ];
29
+ const OPTIONAL = [
30
+ { label: "Previous report", kind: "paths" },
31
+ { label: "Lenses", kind: "text" },
32
+ { label: "Notes", kind: "text" },
33
+ ];
34
+
35
+ function fail(message) {
36
+ console.error(message);
37
+ process.exit(2);
38
+ }
39
+
40
+ let parsed;
41
+ try {
42
+ parsed = parseArgs({
43
+ allowPositionals: true,
44
+ options: { root: { type: "string" }, json: { type: "boolean", default: false } },
45
+ });
46
+ } catch (error) {
47
+ fail(`${error.message}\n${USAGE}`);
48
+ }
49
+ const { values, positionals } = parsed;
50
+ if (positionals.length !== 1) fail(USAGE);
51
+ const briefPath = resolve(positionals[0]);
52
+ if (!existsSync(briefPath)) fail(`no such brief: ${positionals[0]}`);
53
+ const root = resolve(values.root ?? ".");
54
+
55
+ // A labelled line is "Label: value" at the start of a line, optionally as a list item or in bold ("**Label:**").
56
+ const known = [...REQUIRED, ...OPTIONAL];
57
+ const lines = new Map();
58
+ for (const raw of readFileSync(briefPath, "utf8").split("\n")) {
59
+ const match = raw.match(/^\s*(?:[-*]\s+)?(?:\*\*)?([A-Za-z ]+?):(?:\*\*)?\s*(.*)$/);
60
+ if (!match) continue;
61
+ const spec = known.find((each) => each.label.toLowerCase() === match[1].trim().toLowerCase());
62
+ if (spec && !lines.has(spec.label)) lines.set(spec.label, match[2].trim());
63
+ }
64
+
65
+ const problems = [];
66
+ const problem = (label, message) => problems.push({ line: label, problem: message });
67
+
68
+ const commitOf = (ref) => {
69
+ try {
70
+ return execFileSync("git", ["rev-parse", "--verify", "--quiet", `${ref}^{commit}`], {
71
+ cwd: root,
72
+ encoding: "utf8",
73
+ stdio: ["ignore", "pipe", "ignore"],
74
+ }).trim();
75
+ } catch {
76
+ return null;
77
+ }
78
+ };
79
+ const unquote = (value) => value.replace(/^`|`$/g, "").trim();
80
+ const pathsIn = (value) => [...value.matchAll(/`([^`]+)`/g)].map((match) => match[1].replace(/#.*$/, "").trim());
81
+ const at = (path) => (isAbsolute(path) ? path : resolve(root, path));
82
+
83
+ function check(spec, value) {
84
+ if (!value) return problem(spec.label, "is empty");
85
+ if (spec.none && /^none\.?$/i.test(value)) return;
86
+ if (spec.kind === "number") {
87
+ const round = Number(value.match(/\d+/)?.[0]);
88
+ if (![1, 2, 3].includes(round)) problem(spec.label, `must be 1, 2 or 3, not "${value}"`);
89
+ } else if (spec.kind === "commit") {
90
+ const ref = unquote(value.split(/\s+/)[0]);
91
+ if (!commitOf(ref)) problem(spec.label, `names no commit in ${root}: ${ref}`);
92
+ } else if (spec.kind === "range") {
93
+ const range = unquote(value.split(/\s+/)[0]);
94
+ const ends = range.split(/\.{2,3}/);
95
+ if (ends.length !== 2 || !ends[0] || !ends[1]) return problem(spec.label, `must be <base>..<head>, not "${value}"`);
96
+ for (const end of ends) if (!commitOf(end)) problem(spec.label, `names no commit in ${root}: ${end}`);
97
+ } else if (spec.kind === "paths") {
98
+ const paths = pathsIn(value);
99
+ if (!paths.length)
100
+ return problem(spec.label, `points to no path; write each path in backticks${spec.none ? ', or "none"' : ""}`);
101
+ for (const path of paths)
102
+ if (!existsSync(at(path))) problem(spec.label, `points to a path that does not exist: ${path}`);
103
+ } else if (spec.kind === "report") {
104
+ const [path] = pathsIn(value);
105
+ if (!path) return problem(spec.label, "names no report path in backticks");
106
+ if (!existsSync(dirname(at(path)))) problem(spec.label, `is in a folder that does not exist: ${dirname(path)}`);
107
+ }
108
+ }
109
+
110
+ for (const spec of REQUIRED) {
111
+ if (!lines.has(spec.label)) problem(spec.label, "is missing");
112
+ else check(spec, lines.get(spec.label));
113
+ }
114
+ for (const spec of OPTIONAL) if (lines.has(spec.label)) check(spec, lines.get(spec.label));
115
+ const round = Number(lines.get("Review")?.match(/\d+/)?.[0]);
116
+ if ((round === 2 || round === 3) && !lines.has("Previous report"))
117
+ problem("Previous report", `is missing; Review ${round} needs the previous report and its adjudication`);
118
+
119
+ const ok = problems.length === 0;
120
+ if (values.json) {
121
+ console.log(JSON.stringify({ command: "check-brief", brief: briefPath, root, ok, problems }, null, 2));
122
+ } else if (ok) {
123
+ console.log(`Brief passes: ${positionals[0]}`);
124
+ } else {
125
+ console.log(`Brief refused: ${positionals[0]}`);
126
+ for (const each of problems) console.log(`- ${each.line}: ${each.problem}`);
127
+ }
128
+ process.exit(ok ? 0 : 1);
@@ -0,0 +1,233 @@
1
+ #!/usr/bin/env node
2
+ // Prefills a work reviewer's pointer brief (references/work.md, "The Brief") from the repository and the task folder,
3
+ // then runs check-brief.mjs on it, so the brief points at the requirements, the right diff and the prior report
4
+ // without being assembled by hand. It also reports the review gate's triggers the diff shows and the review-round
5
+ // budget. Lines it cannot fill (the Boundary, unless given) stay empty, so check-brief refuses the brief until the
6
+ // initiator fills them.
7
+ // Usage: review-packet.mjs --review <1|2|3> --base <ref> [--head <ref>] [--task <task folder>] [--out <brief.md>]
8
+ // [--boundary <text>] [--agreement <path>]... [--evidence <path>]... [--may-run <text>]
9
+ // [--root <repository>] [--json]
10
+ // With --task, the brief is written to <task>/scratch/reviews/R<n>-brief.md, the report path is R<n>-report.md beside
11
+ // it, the agreement defaults to the task's record.md, and Review 2 or 3 takes its diff from the previous brief's
12
+ // reviewed state and points to R<n-1>-report.md. Docs come from Write Docs' docs-check.mjs --covering on the changed
13
+ // files. Exit code: check-brief's (0 passes, 1 has problems); 2 on a usage or Git error.
14
+ import { execFileSync, spawnSync } from "node:child_process";
15
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
16
+ import { dirname, join, relative, resolve } from "node:path";
17
+ import { fileURLToPath } from "node:url";
18
+ import { parseArgs } from "node:util";
19
+
20
+ const USAGE =
21
+ "Usage: review-packet.mjs --review <1|2|3> --base <ref> [--head <ref>] [--task <task folder>] [--out <brief.md>] [--boundary <text>] [--agreement <path>]... [--evidence <path>]... [--may-run <text>] [--root <repository>] [--json]";
22
+ const HERE = dirname(fileURLToPath(import.meta.url));
23
+ const CHECK_BRIEF = join(HERE, "check-brief.mjs");
24
+ const DOCS_CHECK = resolve(HERE, "../../write-docs/scripts/docs-check.mjs");
25
+ const SKILL = resolve(HERE, "../SKILL.md");
26
+
27
+ function fail(message) {
28
+ console.error(message);
29
+ process.exit(2);
30
+ }
31
+
32
+ let values;
33
+ try {
34
+ ({ values } = parseArgs({
35
+ options: {
36
+ review: { type: "string" },
37
+ base: { type: "string" },
38
+ head: { type: "string", default: "HEAD" },
39
+ task: { type: "string" },
40
+ out: { type: "string" },
41
+ boundary: { type: "string" },
42
+ agreement: { type: "string", multiple: true, default: [] },
43
+ evidence: { type: "string", multiple: true, default: [] },
44
+ "may-run": { type: "string" },
45
+ root: { type: "string" },
46
+ json: { type: "boolean", default: false },
47
+ },
48
+ }));
49
+ } catch (error) {
50
+ fail(`${error.message}\n${USAGE}`);
51
+ }
52
+ const round = Number(values.review);
53
+ if (![1, 2, 3].includes(round) || !values.base) fail(USAGE);
54
+ if (!values.task && !values.out) fail(`give --task or --out for where the brief goes\n${USAGE}`);
55
+
56
+ const git = (cwd, args) =>
57
+ execFileSync("git", args, { cwd, encoding: "utf8", maxBuffer: 64 * 1024 * 1024, stdio: ["ignore", "pipe", "pipe"] });
58
+ let root;
59
+ try {
60
+ root = resolve(git(resolve(values.root ?? "."), ["rev-parse", "--show-toplevel"]).trim());
61
+ } catch {
62
+ fail("not inside a Git repository");
63
+ }
64
+ const commitOf = (ref) => {
65
+ try {
66
+ return git(root, ["rev-parse", "--verify", "--quiet", `${ref}^{commit}`]).trim();
67
+ } catch {
68
+ return null;
69
+ }
70
+ };
71
+ const head = commitOf(values.head);
72
+ if (!head) fail(`no such commit: ${values.head}`);
73
+ if (!commitOf(values.base)) fail(`no such commit: ${values.base}`);
74
+
75
+ // Paths in the brief: relative to the repository when inside it, absolute otherwise.
76
+ const show = (path) => {
77
+ const relativePath = relative(root, resolve(path));
78
+ return relativePath.startsWith("..") ? resolve(path) : relativePath;
79
+ };
80
+ const tick = (paths) => paths.map((path) => `\`${show(path)}\``).join(", ");
81
+
82
+ const task = values.task ? resolve(values.task) : null;
83
+ const reviews = task ? join(task, "scratch", "reviews") : dirname(resolve(values.out));
84
+ const briefPath = values.out ? resolve(values.out) : join(reviews, `R${round}-brief.md`);
85
+ const reportPath = join(task ? reviews : dirname(briefPath), `R${round}-report.md`);
86
+ const notes = [];
87
+
88
+ // Review 2 or 3 reviews the range since the previous review's reviewed state.
89
+ let diffBase = values.base;
90
+ let previousReport = null;
91
+ if (round > 1) {
92
+ const previousBrief = join(reviews, `R${round - 1}-brief.md`);
93
+ const reviewed = existsSync(previousBrief)
94
+ ? /^\s*(?:[-*]\s+)?(?:\*\*)?Reviewed state:(?:\*\*)?\s*`?([0-9a-fA-F]{7,40}|\S+?)`?(\s|$)/m.exec(
95
+ readFileSync(previousBrief, "utf8"),
96
+ )?.[1]
97
+ : null;
98
+ if (reviewed && commitOf(reviewed)) diffBase = reviewed;
99
+ else notes.push(`no previous brief with a Reviewed state at ${show(previousBrief)}: the diff starts at --base`);
100
+ const candidate = join(reviews, `R${round - 1}-report.md`);
101
+ if (existsSync(candidate)) previousReport = candidate;
102
+ else notes.push(`no previous report at ${show(candidate)}: add its path and adjudication to "Previous report"`);
103
+ }
104
+
105
+ const agreement = values.agreement.length
106
+ ? values.agreement
107
+ : task && existsSync(join(task, "record.md"))
108
+ ? [join(task, "record.md")]
109
+ : [];
110
+ if (!agreement.length) notes.push("no agreement found: pass --agreement (the record, or the accepted requirements)");
111
+
112
+ const changed = git(root, ["-c", "core.quotePath=false", "diff", "--name-only", diffBase, head])
113
+ .split("\n")
114
+ .filter(Boolean);
115
+
116
+ // Developer docs covering the changed files.
117
+ let docs = [];
118
+ if (changed.length && existsSync(DOCS_CHECK)) {
119
+ const run = spawnSync(
120
+ process.execPath,
121
+ [DOCS_CHECK, ...changed.flatMap((path) => ["--covering", path]), "--root", root, "--json"],
122
+ { encoding: "utf8", maxBuffer: 64 * 1024 * 1024 },
123
+ );
124
+ if (run.status === 0)
125
+ docs = [...new Set(JSON.parse(run.stdout).paths.flatMap((entry) => entry.documents.map((doc) => doc.path)))];
126
+ else notes.push("docs-check could not run: fill Docs by hand");
127
+ }
128
+
129
+ // The project's Review Rules, when it keeps them in a file.
130
+ const rules = git(root, ["ls-files"])
131
+ .split("\n")
132
+ .filter((path) => /(^|\/)(REVIEW\.md|review-rules\.md|REVIEW_RULES\.md)$/i.test(path));
133
+
134
+ // The project's declared checks, for "May run".
135
+ let mayRun = values["may-run"] ?? "";
136
+ if (!mayRun && existsSync(join(root, "package.json"))) {
137
+ try {
138
+ const scripts = Object.keys(JSON.parse(readFileSync(join(root, "package.json"), "utf8")).scripts ?? {});
139
+ const declared = ["test", "check", "lint", "typecheck"].filter((name) => scripts.includes(name));
140
+ if (declared.length)
141
+ mayRun = `the project's declared checks: ${declared.map((name) => `\`npm ${name === "test" ? "test" : `run ${name}`}\``).join(", ")}`;
142
+ } catch {
143
+ // An unreadable package.json leaves May run for the initiator.
144
+ }
145
+ }
146
+ if (!mayRun) notes.push('fill "May run": the declared checks, or "nothing"');
147
+
148
+ // Review gate triggers the diff shows; the agreement's own review triggers and Review Rules paths need a reader.
149
+ const TRIGGERS = [
150
+ [
151
+ "security, authentication, authorization or secrets",
152
+ /(^|[/_.-])(auth[nz]?|oauth|login|passwords?|secrets?|credentials?|tokens?|permissions?|crypto|sessions?)([/_.-]|$)|authenticat|authoriz|(^|\/)\.env/i,
153
+ ],
154
+ ["possible data loss or a migration of stored data", /(migrat|schema|\.sql$|database|(^|\/)db\/|storage|persist)/i],
155
+ [
156
+ "CI or release files",
157
+ /(^\.github\/workflows\/|^\.gitlab-ci|^\.circleci\/|(^|\/)release|CHANGELOG|^scripts\/release)/i,
158
+ ],
159
+ [
160
+ "a public interface",
161
+ /(^package\.json$|(^|\/)bin\/|\.d\.ts$|(^|\/)SKILL\.md$|command-surface|(^|\/)index\.[cm]?[jt]s$|\.proto$|openapi|(^|\/)api\/)/i,
162
+ ],
163
+ ];
164
+ const triggers = TRIGGERS.flatMap(([trigger, pattern]) => {
165
+ const paths = changed.filter((path) => pattern.test(path));
166
+ return paths.length ? [{ trigger, paths: paths.slice(0, 10), more: Math.max(0, paths.length - 10) }] : [];
167
+ });
168
+ const budget =
169
+ round === 1
170
+ ? "Review 1 of at most 3: the first selected independent review, broad by default."
171
+ : round === 2
172
+ ? "Review 2 of at most 3: a focused follow-up on the range since Review 1; if it stays Blocking, adjudicate and diagnose before any Review 3."
173
+ : "Review 3 of 3: exceptional, separately authorized and final; if it stays Blocking, rethink the approach rather than correct again.";
174
+
175
+ const lines = [
176
+ `Review: ${round}`,
177
+ `Boundary: ${values.boundary ?? ""}`,
178
+ `Reviewed state: ${head.slice(0, 12)}`,
179
+ `Method: ${tick([SKILL, join(dirname(SKILL), "references", "work.md")])}`,
180
+ `Agreement: ${tick(agreement)}`,
181
+ `Docs: ${docs.length ? tick(docs) : "none"}`,
182
+ `Review rules: ${rules.length ? tick(rules) : "none"}`,
183
+ `Diff: ${commitOf(diffBase).slice(0, 12)}..${head.slice(0, 12)}`,
184
+ `Evidence: ${values.evidence.length ? tick(values.evidence) : "none"}`,
185
+ `May run: ${mayRun}`,
186
+ ...(round > 1 ? [`Previous report: ${previousReport ? tick([previousReport]) : ""}`] : []),
187
+ `Report: ${tick([reportPath])}`,
188
+ ];
189
+ mkdirSync(dirname(briefPath), { recursive: true });
190
+ writeFileSync(briefPath, `${lines.join("\n")}\n`);
191
+ mkdirSync(dirname(reportPath), { recursive: true });
192
+
193
+ const check = spawnSync(process.execPath, [CHECK_BRIEF, briefPath, "--root", root, "--json"], { encoding: "utf8" });
194
+ let checked;
195
+ try {
196
+ checked = JSON.parse(check.stdout);
197
+ } catch {
198
+ fail(`check-brief failed: ${(check.stderr || check.stdout).trim()}`);
199
+ }
200
+
201
+ const result = {
202
+ command: "review-packet",
203
+ root,
204
+ brief: briefPath,
205
+ review: round,
206
+ diff: `${diffBase}..${values.head}`,
207
+ changedFiles: changed.length,
208
+ gateTriggers: triggers,
209
+ gateNotDetected: ["anything the work agreement names for review", "paths the Review Rules mark sensitive"],
210
+ budget,
211
+ notes,
212
+ checkBrief: { ok: checked.ok, problems: checked.problems },
213
+ };
214
+ if (values.json) console.log(JSON.stringify(result, null, 2));
215
+ else {
216
+ console.log(`Brief: ${briefPath}`);
217
+ console.log(lines.map((line) => ` ${line}`).join("\n"));
218
+ console.log(`Changed files: ${changed.length}.`);
219
+ console.log(
220
+ triggers.length
221
+ ? `Gate triggers in the diff:\n${triggers.map((each) => `- ${each.trigger}: ${each.paths.join(", ")}${each.more ? ` and ${each.more} more` : ""}`).join("\n")}`
222
+ : "Gate triggers in the diff: none detected by path.",
223
+ );
224
+ console.log(`Not detected here: ${result.gateNotDetected.join("; ")}.`);
225
+ console.log(`Round budget: ${budget}`);
226
+ for (const note of notes) console.log(`Note: ${note}`);
227
+ console.log(
228
+ checked.ok
229
+ ? "check-brief: passes. Dispatch this brief."
230
+ : `check-brief: refused. Fill these, then rerun check-brief:\n${checked.problems.map((each) => `- ${each.line}: ${each.problem}`).join("\n")}`,
231
+ );
232
+ }
233
+ process.exit(checked.ok ? 0 : 1);
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: setup-freeflow
3
- description: Use when activating Freeflow in a repository, repairing its repository or personal configuration, or checking whether the current host is delivering Freeflow context.
3
+ description: "Use when installing, activating or turning off Freeflow in a repository, changing or repairing its repository or personal configuration (.freeflow/config.json, .freeflow/local.json), or checking whether the current host is loading Freeflow's guidance and skills."
4
4
  ---
5
5
 
6
6
  # Setup Freeflow
@@ -9,21 +9,28 @@ Create or repair the smallest valid layered setup. Keep repository activation, p
9
9
 
10
10
  - `.freeflow/config.json` is the required shared repository activation config.
11
11
  - `.freeflow/local.json` is an optional per-checkout personal override. It cannot activate Freeflow by itself.
12
- - Runtime delivery depends on the current host's installed and trusted adapter.
12
+ - Runtime delivery depends on the current host's installed and trusted adapter. Configuration does not prove runtime delivery.
13
13
 
14
14
  Answer setup questions and delivery checks read-only. An explicit action request authorizes the smallest selected setup change under the state rules below. When repository config is missing, first activation authorizes minimal shared config; it does not authorize personal overrides, optional capabilities, replacement of invalid config, or edits to repo-owned host instructions.
15
15
 
16
- Read [the activation contract](references/activation-contract.md) before changing setup state. Read [host setup](references/host-setup.md) when runtime delivery, lifecycle, or host trust matters.
16
+ ## Routes
17
+
18
+ | Situation | Go to |
19
+ | --- | --- |
20
+ | Activating, or changing shared or personal setup | Establish Mutation Authority, then Inspect The Layers, then the section for that layer |
21
+ | Repository config invalid, or conflicting with accepted source truth or repository instructions | [Discuss Work](../discuss-work/SKILL.md), before replacing or reinterpreting it |
22
+ | Whether the host delivers Freeflow, or which host action refreshes it | Hosts, below |
23
+ | Cognitive Routing or Tool Execution values | Their explicit settings surface (on Pi, `/freeflow settings`), only when the user requests them |
17
24
 
18
25
  ## Establish Mutation Authority
19
26
 
20
27
  Classify the current state before editing:
21
28
 
22
- - **Unconfigured:** repository config is missing or invalid, so Freeflow is not effective. An explicit setup request may create minimal config when it is missing. Replacing or reinterpreting invalid config still requires the specific authority described below.
23
- - **Configured but ineffective:** valid repository activation exists, but Freeflow is disabled or an invalid local config blocks runtime. No Freeflow guidance is effective. An explicit request governs the selected enablement, configuration, or repair.
24
- - **Effective:** Freeflow core guidance, the Interaction Contract, and base skills are effective. An explicit setup or repair request may be carried out within its authority; optional capability behavior remains independently gated.
29
+ - **Unconfigured:** repository config is missing or invalid, so repository activation is absent and Freeflow is not effective. An explicit setup request may create minimal config when it is missing. Replacing or reinterpreting invalid config requires specific authorization and resolving the source conflict.
30
+ - **Configured but ineffective:** valid repository activation exists, but effective `enabled` is `false` or an invalid local config blocks runtime. No Freeflow guidance is effective. An explicit request governs the selected enablement, configuration, or repair.
31
+ - **Effective:** Freeflow core guidance, the Interaction Contract, and base skills are effective; obey them. An explicit setup or repair request may be carried out within its authority; optional capability behavior remains independently gated.
25
32
 
26
- User-operated host settings are direct user actions, not agent-performed config edits. Prefer them when available and do not claim their state changed until the host reports it.
33
+ User-operated host settings are direct user actions, not agent-performed config edits. Prefer them when available, do not claim their state changed until the host reports it, and verify the resulting source and effective state afterward.
27
34
 
28
35
  ## Inspect The Layers
29
36
 
@@ -36,6 +43,14 @@ Before editing:
36
43
 
37
44
  A valid repository config establishes activation. A missing local config inherits repository settings. An invalid existing local config blocks effective Freeflow instead of falling back silently.
38
45
 
46
+ Resolve each configurable value in this order:
47
+
48
+ ```text
49
+ host session override -> personal override -> repository value -> built-in default
50
+ ```
51
+
52
+ Host session overrides are host state, not config, and cannot bypass missing or invalid repository activation. Pi may temporarily override Freeflow enablement, and Cognitive Routing has its own host-managed session control. Effective Freeflow requires a valid repository config, a missing or valid local config, session-resolved `enabled: true`, and the prompt files the host delivers (Hosts, below).
53
+
39
54
  If setup is already valid and no change was requested, preserve it and report the effective sources. Do not rewrite config merely to normalize formatting or materialize defaults.
40
55
 
41
56
  ## Configure Shared Activation
@@ -46,30 +61,62 @@ For a new setup, write the minimal activation boundary:
46
61
  {}
47
62
  ```
48
63
 
49
- Add `enabled: false` only when the user explicitly requests Freeflow to be disabled. Add optional capability configuration only when the user explicitly requests it.
64
+ Missing core keys use the built-in default `enabled: true`. Add `enabled: false` only when the user explicitly requests Freeflow to be disabled. Add optional capability configuration only when the user explicitly requests it. Do not add task state, phase, file inventories, plans, version metadata, activation paths, empty optional sections, host instruction copies, or generated workflow text.
50
65
 
51
- If repository config is invalid or conflicts with accepted source truth, use [Decision Gate](../decision-gate/SKILL.md) before replacing or reinterpreting it.
66
+ These keys are unsupported in either config file and make it invalid until repaired: `defaultMode`, `interactionContract`, `skills`, `contextVirtualization`, and `conversationHistory`. The user deletes them wherever present; setup never migrates or removes them automatically.
52
67
 
53
- Do not create or append Freeflow instructions in `AGENTS.md`, `CLAUDE.md`, `.claude/rules/`, or another host-owned instruction surface.
68
+ Do not create or append Freeflow instructions in `AGENTS.md`, `CLAUDE.md`, `.claude/rules/`, or another host-owned instruction surface, including to compensate for unavailable or unconfirmed delivery. Existing repo instructions remain live source truth within host precedence. They are not activation markers, but they can conflict with Freeflow behavior: name a conflict and ask through Discuss Work before changing setup or behavior when it would alter the next action, rather than overwriting them to make Freeflow appear active. Do not install repo-local hooks, CLI commands, lint rules, global standards, documentation inventories, or state files during setup.
54
69
 
55
70
  ## Add Personal Overrides Only When Requested
56
71
 
57
- Use `.freeflow/local.json` for an explicitly selected per-checkout override of `enabled`, `contextVirtualization`, or `conversationHistory`. Omitted values inherit from repository config and built-in defaults. Configure optional Cognitive Routing values only through its explicit settings surface.
72
+ Use `.freeflow/local.json` for an explicitly selected per-checkout override of `enabled`:
58
73
 
59
- In Pi, `/freeflow settings` edits personal overrides and `/freeflow settings repo` edits shared settings. Prefer those controls when available.
74
+ ```json
75
+ {
76
+ "enabled": false
77
+ }
78
+ ```
79
+
80
+ Omitted values inherit from repository config and built-in defaults; local precedence is per property, not whole-file replacement. Configure optional Cognitive Routing values only through its explicit settings surface.
60
81
 
61
- Before writing local config in a Git checkout, verify it is untracked and ignored. Do not modify shared ignore policy merely to store a personal preference; use the host's safe settings path or local Git exclusion. Refuse to overwrite a tracked local config.
82
+ Before writing local config in a Git checkout, verify it is untracked and ignored. Do not modify shared ignore policy merely to store a personal preference: prefer the host's safe settings path, `.git/info/exclude`, or an existing ignore rule. Refuse to overwrite a tracked local config.
62
83
 
63
84
  If local config is invalid, report that it blocks effective runtime. Repair or remove it only with authorization; never discard it and fall back silently.
64
85
 
86
+ ## Hosts
87
+
88
+ When Freeflow is effective, host adapters deliver `runtime/prompts/core.md`, `interaction-contract.md` and `working-method.md`, the base Freeflow skill surface, and compact current capability state; on Pi also `tool-execution.md` and `cognitive-routing.md` while those capabilities are effective, with their skills and tools. Adapters load context only; they do not enforce policy, block tools, grant permissions, or replace repo instructions. Context Virtualization and Conversation History are removed.
89
+
90
+ ### Pi
91
+
92
+ The Pi extension reads both config layers before each agent turn. When Freeflow is enabled it always delivers the core prompt, Interaction Contract and Working Method together, keeping the existing system prompt. Runtime State is refreshed at session start, after context reconstruction or loss, and when displayed state changes; unchanged state remains in the provider context. Skill and capability bodies stay discoverable rather than delivered as hidden persistent messages.
93
+
94
+ Settings scopes:
95
+
96
+ ```text
97
+ /freeflow settings personal overrides
98
+ /freeflow settings session temporary Freeflow and Cognitive Routing session controls
99
+ /freeflow settings repo shared repository settings
100
+ ```
101
+
102
+ Session settings can temporarily inherit, enable, or disable Freeflow and override Cognitive Routing profiles and delegation; one reset action clears them. They persist in the active Pi session branch, never write either config file, and cannot bypass missing or invalid repository activation. The personal settings path uses omission to inherit, refuses to overwrite invalid or tracked local config, and establishes local Git exclusion when needed. These user-operated controls update state before the next model turn and reload Pi resources when supported.
103
+
104
+ A config written during setup is visible to the adapter on the next agent turn. After first activation, tell the user to run `/reload` so Pi refreshes skills and resources fully; without it, core runtime context loads on the next turn but resource discovery waits. Confirm automatic delivery through current extension status or runtime evidence.
105
+
106
+ ### Codex And Claude Code
107
+
108
+ The packaged runtime hook reads the same two layers. At supported `SessionStart` boundaries (startup, resume, clear, and compact) it loads `core.md`, `interaction-contract.md` and `working-method.md`, each unless `prompts` (`core`, `interactionContract`, `workingMethod`; each a boolean, on by default, personal overriding shared per prompt) turns it off, and emits a compact active Runtime State. It does not process submitted prompts, persist session controls, inject skill bodies, or inspect Pi-only capabilities.
109
+
110
+ After first-time setup, tell the user to trigger the least disruptive supported host-native lifecycle boundary: resume, clear, compact, or a new session or startup, as available. Name the exact control the current host supports; do not prescribe Pi's `/reload`.
111
+
65
112
  ## Establish Same-Turn Context
66
113
 
67
114
  After successful verification, apply newly effective context directly for the remainder of the setup turn:
68
115
 
69
116
  - read the [Interaction Contract](../../runtime/prompts/interaction-contract.md);
70
- - read [Workflow](../workflow/SKILL.md) when Freeflow is effective.
117
+ - read the [core guidance](../../runtime/prompts/core.md) and the [Working Method](../../runtime/prompts/working-method.md) when Freeflow is effective.
71
118
 
72
- These direct reads establish same-turn guidance; they do not prove that a lifecycle adapter ran. After first activation, use [host setup](references/host-setup.md) to name the exact host-native lifecycle action for automatic delivery and resource refresh, state what applies before that boundary, and keep delivery confirmed, unavailable, or unconfirmed from evidence.
119
+ These direct reads establish same-turn guidance; they do not prove that a lifecycle adapter ran, and no further adapter invocation has occurred yet. After first activation, name the exact host-native lifecycle action for automatic delivery and resource refresh (Hosts, above), and state what applies before that boundary.
73
120
 
74
121
  ## Verify And Report
75
122
 
@@ -78,10 +125,16 @@ Verify:
78
125
  - repository config parses and is the required activation boundary;
79
126
  - local config is missing or valid, personal, untracked, and ignored when applicable;
80
127
  - effective `enabled`, core guidance, and optional capability values have the expected sources;
81
- - no repo-owned host instructions or unrelated files changed.
128
+ - no repo-owned host instructions or unrelated files changed, and running setup again would change nothing.
82
129
 
83
130
  After verification supports a setup result, silently self-review the final observed or changed state before accepting, reusing, or reporting it. Correct clear local issues within the existing setup authority and re-verify the affected boundary; stop on ambiguity, route change, or an out-of-envelope correction.
84
131
 
132
+ Classify automatic runtime delivery from evidence:
133
+
134
+ - **confirmed:** trustworthy evidence shows the current host adapter ran for the current lifecycle;
135
+ - **unavailable:** the adapter, plugin or hook is absent, disabled, denied, untrusted, or unsupported;
136
+ - **unconfirmed:** the adapter may be installed and trusted, but the host exposes no trustworthy evidence that it ran. Installed and trusted registration establishes availability for the next lifecycle action, not delivery.
137
+
85
138
  Report separately:
86
139
 
87
140
  1. shared repository activation;