@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
@@ -1,53 +0,0 @@
1
- import { entryIdFromContextRef, isFreeflowContextToolName } from "./types.js";
2
- import type { ResolvedContextEntry } from "./types.js";
3
-
4
- export type ContextVisibilityOptions = {
5
- contextVirtualizationEnabled: boolean;
6
- isSourceFullyProjected?: (entryId: string) => boolean;
7
- };
8
-
9
- export type ContextVisibilitySnapshot = {
10
- activeEntryIds: Set<string>;
11
- visibleEntryIds: Set<string>;
12
- visibleSourceIds: Set<string>;
13
- materializedSourceIds: Set<string>;
14
- };
15
-
16
- function isFullyVisible(source: ResolvedContextEntry | undefined, options: ContextVisibilityOptions): boolean {
17
- if (source?.kind !== "toolResult" || !options.contextVirtualizationEnabled) return true;
18
- return options.isSourceFullyProjected?.(source.source.entryId) ?? true;
19
- }
20
-
21
- function materializedRefs(entry: any): string[] {
22
- const result = entry?.message?.details?.result ?? entry?.details?.result;
23
- if (result?.operation !== "retrieve" || !Array.isArray(result.items)) return [];
24
- return result.items
25
- .map((item: any) => entryIdFromContextRef(item?.ref))
26
- .filter((entryId: string | undefined): entryId is string => entryId !== undefined);
27
- }
28
-
29
- export function buildContextVisibility(
30
- activeEntries: readonly any[],
31
- resolvedByEntryId: ReadonlyMap<string, ResolvedContextEntry>,
32
- options: ContextVisibilityOptions,
33
- ): ContextVisibilitySnapshot {
34
- const activeEntryIds = new Set<string>();
35
- const visibleEntryIds = new Set<string>();
36
- const visibleSourceIds = new Set<string>();
37
- const materializedSourceIds = new Set<string>();
38
-
39
- for (const entry of activeEntries) {
40
- if (typeof entry?.id !== "string") continue;
41
- activeEntryIds.add(entry.id);
42
- const source = resolvedByEntryId.get(entry.id);
43
- if (!isFullyVisible(source, options)) continue;
44
- visibleEntryIds.add(entry.id);
45
- if (source && source.kind !== "custom") visibleSourceIds.add(entry.id);
46
-
47
- if (source?.kind === "toolResult" && isFreeflowContextToolName(source.message?.toolName)) {
48
- for (const entryId of materializedRefs(entry)) materializedSourceIds.add(entryId);
49
- }
50
- }
51
-
52
- return { activeEntryIds, visibleEntryIds, visibleSourceIds, materializedSourceIds };
53
- }
@@ -1,390 +0,0 @@
1
- import type { ExtensionAPI, ExtensionCommandContext } from "@earendil-works/pi-coding-agent";
2
- import { dirname, resolve } from "node:path";
3
- import { fileURLToPath } from "node:url";
4
- import { RequestHistory } from "./runtime/request-history.js";
5
- import { registerProviderSupport } from "./provider-support/index.js";
6
- import { RoutingRuntime } from "./cognitive-routing-v2/runtime.js";
7
- import { workersForDelegation, type Profile } from "./cognitive-routing-v2/types.js";
8
- import { applyRoutingToolVisibility, registerRoutingTools } from "./cognitive-routing-v2/tools.js";
9
- import { ConversationHistoryRuntime } from "./conversation-history/runtime.js";
10
- import { FreeflowContextRuntime } from "./freeflow-context/runtime.js";
11
- import { CONTEXT_VIRTUALIZATION_TOOL_NAME, registerFreeflowContextTool } from "./freeflow-context/tool.js";
12
- import { handleContextCommand } from "./context-virtualization/commands.js";
13
- import { ContextVirtualizationRuntime } from "./context-virtualization/runtime.js";
14
- import { handleFreeflowCommand } from "./settings/settings-ui.js";
15
- import { isPiFlowHost } from "./runtime/runtime-identity.js";
16
- import {
17
- CONTRIBUTOR_COMMANDS,
18
- WORKFLOW_COMMANDS,
19
- freeflowModelSkillPaths,
20
- freeflowSkillPath,
21
- getRuntimeContext,
22
- hasUsableMandatoryPrompts,
23
- isPromptAvailable,
24
- readCapabilityState,
25
- refreshRuntimeContext,
26
- restoreSessionOverrides,
27
- stableRuntimeContext,
28
- STABLE_FREEFLOW_SURFACE,
29
- filterBootstrapMessage,
30
- setFreeflowStatus,
31
- skillPrompt,
32
- withFreeflowRuntimeState,
33
- } from "./runtime/runtime-context.js";
34
-
35
- type FreeflowAPI = ExtensionAPI & { host?: unknown };
36
- async function sendSkillCommand(pi: FreeflowAPI, ctx: ExtensionCommandContext, skill: string, args?: string) {
37
- const state = await readCapabilityState(ctx.cwd, ctx, pi.host);
38
- if (skill === "setup-freeflow" && !state.configured) {
39
- await pi.sendUserMessage(skillPrompt(skill, args), { expandPromptTemplates: true });
40
- return;
41
- }
42
- if (!state.configured || !state.enabled) {
43
- ctx.ui.notify("Run /setup-freeflow or enable Freeflow before dispatching this skill.", "warning");
44
- return;
45
- }
46
- const prompts = await getRuntimeContext(state);
47
- if (!hasUsableMandatoryPrompts(prompts)) {
48
- ctx.ui.notify("Freeflow core prompts are unavailable; the requested skill cannot be dispatched.", "warning");
49
- return;
50
- }
51
- await pi.sendUserMessage(skillPrompt(skill, args), { expandPromptTemplates: true });
52
- }
53
-
54
- function freeflowCompletions(prefix: string | undefined, routingAvailable: boolean) {
55
- const query = prefix ?? "";
56
- const choices = query.startsWith("settings ")
57
- ? [
58
- ["settings session", "session", "Override Freeflow for this Pi session"],
59
- ["settings local", "local", "Edit personal overrides for this repository"],
60
- ["settings repo", "repo", "Edit shared repository settings"],
61
- ]
62
- : query.startsWith("profile ") && routingAvailable
63
- ? [
64
- ["profile coordinator", "coordinator", "Hold Coordinator manually"],
65
- ["profile helper", "helper", "Hold Helper manually when enabled"],
66
- ["profile executor", "executor", "Hold Executor manually when enabled"],
67
- ["profile auto", "auto", "Return to automatic Coordinator reconciliation"],
68
- ["profile history", "history", "Read routing observations"],
69
- ]
70
- : query.startsWith("context ")
71
- ? [
72
- ["context status", "status", "Show Freeflow Context state"],
73
- ["context list", "list", "List archived context projections"],
74
- ["context restore", "restore", "Restore one or more context references"],
75
- ["context reset all", "reset all", "Reset projection decisions on the active branch"],
76
- ]
77
- : [
78
- ["settings", "settings", "Open personal override settings"],
79
- ["status", "status", "Show effective Freeflow state"],
80
- ["context", "context", "Inspect Freeflow Context"],
81
- ...(routingAvailable
82
- ? [
83
- ["profile", "profile", "Hold or release Cognitive Routing profile control"],
84
- ["resume", "resume", "Resume the current saved routing responsibility"],
85
- ]
86
- : []),
87
- ["enable", "enable", "Enable Freeflow for this repository"],
88
- ["disable", "disable", "Disable Freeflow for this repository"],
89
- ];
90
- return choices
91
- .filter(([value]) => value.startsWith(query))
92
- .map(([value, label, description]) => ({ value, label, description }));
93
- }
94
-
95
- export default function freeflow(pi: FreeflowAPI) {
96
- registerProviderSupport(pi);
97
- const api = pi as any;
98
- const packageRoot = resolve(dirname(fileURLToPath(import.meta.url)), "../..");
99
- const routing = new RoutingRuntime(api, [packageRoot]);
100
- const requestHistory = new RequestHistory(api);
101
- let capability: any;
102
- let prompts: any;
103
- let context: FreeflowContextRuntime | undefined;
104
- let virtualization: ContextVirtualizationRuntime | undefined;
105
- let history: ConversationHistoryRuntime | undefined;
106
- let refreshState = true;
107
- let sessionContext: any;
108
- let surfaceGeneration = 0;
109
-
110
- const unavailable = (state: any, message: string) => ({
111
- ...state,
112
- effective: false,
113
- blockingReason: { code: "unavailable", message },
114
- });
115
- async function loadSurface(ctx: any) {
116
- const generation = surfaceGeneration;
117
- const next = await readCapabilityState(ctx.cwd, ctx, pi.host);
118
- const loaded = await getRuntimeContext(STABLE_FREEFLOW_SURFACE);
119
- if (generation !== surfaceGeneration) throw new Error("Discarded surface preparation for a replaced session.");
120
- if (!hasUsableMandatoryPrompts(loaded)) {
121
- for (const key of ["cognitiveRouting", "contextVirtualization", "conversationHistory"])
122
- next[key] = unavailable(next[key], "Mandatory Freeflow prompts are unavailable.");
123
- }
124
- if (next.cognitiveRouting.effective && !isPromptAvailable(loaded.cognitiveRoutingPrompt))
125
- next.cognitiveRouting = unavailable(next.cognitiveRouting, "Routing bootstrap cue is unavailable.");
126
- if (next.contextVirtualization.effective && !isPromptAvailable(loaded.contextVirtualizationPrompt))
127
- next.contextVirtualization = unavailable(
128
- next.contextVirtualization,
129
- "Context Virtualization guidance is unavailable.",
130
- );
131
- if (next.conversationHistory.effective && !isPromptAvailable(loaded.conversationHistoryPrompt))
132
- next.conversationHistory = unavailable(next.conversationHistory, "Conversation History guidance is unavailable.");
133
- // The existing reduction engine is not the future Context Control port. Do not pretend
134
- // its independent transform ordering has been qualified with the new projection.
135
- if (
136
- next.cognitiveRouting.effective &&
137
- next.cognitiveRouting.projection &&
138
- (next.contextVirtualization.effective || next.conversationHistory.effective)
139
- )
140
- next.cognitiveRouting = unavailable(
141
- next.cognitiveRouting,
142
- "New routing projection with legacy context transforms is not qualified. Disable that combination explicitly.",
143
- );
144
- if (next.cognitiveRouting.enabled && isPiFlowHost(pi.host))
145
- next.cognitiveRouting = unavailable(
146
- next.cognitiveRouting,
147
- "The redesigned PiFlow adapter requires separate qualification.",
148
- );
149
- capability = next;
150
- prompts = loaded;
151
- sessionContext = ctx;
152
- return next;
153
- }
154
- function contextTools() {
155
- registerFreeflowContextTool(
156
- api,
157
- () => virtualization,
158
- () => history,
159
- {
160
- contextVirtualization: capability?.contextVirtualization?.effective === true,
161
- conversationHistory: capability?.conversationHistory?.effective === true,
162
- },
163
- );
164
- if (api.getActiveTools && api.setActiveTools) {
165
- const current = new Set<string>(api.getActiveTools());
166
- current.add(CONTEXT_VIRTUALIZATION_TOOL_NAME);
167
- const next = [...current];
168
- if (JSON.stringify(next) !== JSON.stringify(api.getActiveTools())) api.setActiveTools(next);
169
- }
170
- }
171
- function status(ctx: any) {
172
- applyRoutingToolVisibility(api, routing, capability?.cognitiveRouting?.effective === true);
173
- setFreeflowStatus(ctx, capability, routing.state(), prompts);
174
- }
175
- async function update(ctx: any) {
176
- const next = await loadSurface(ctx);
177
- await routing.refresh(ctx, next.cognitiveRouting);
178
- contextTools();
179
- status(ctx);
180
- refreshState = true;
181
- }
182
-
183
- registerRoutingTools(api, routing);
184
- registerFreeflowContextTool(
185
- api,
186
- () => virtualization,
187
- () => history,
188
- { contextVirtualization: false, conversationHistory: false },
189
- );
190
-
191
- pi.on("resources_discover", async (event, ctx) => {
192
- const state = capability ?? (await loadSurface(ctx ?? { cwd: (event as any)?.cwd ?? process.cwd() }));
193
- return { skillPaths: freeflowModelSkillPaths(STABLE_FREEFLOW_SURFACE) };
194
- });
195
- pi.on("session_start", async (event, ctx) => {
196
- const generation = ++surfaceGeneration;
197
- requestHistory.reset();
198
- routing.unbind();
199
- capability = undefined;
200
- prompts = undefined;
201
- refreshState = true;
202
- restoreSessionOverrides(ctx);
203
- const initial = await readCapabilityState(ctx.cwd, ctx, pi.host);
204
- await refreshRuntimeContext(STABLE_FREEFLOW_SURFACE);
205
- if (generation !== surfaceGeneration) return;
206
- await loadSurface(ctx);
207
- context = new FreeflowContextRuntime(ctx);
208
- virtualization = new ContextVirtualizationRuntime(pi, ctx, context);
209
- history = new ConversationHistoryRuntime(
210
- ctx,
211
- (entryId) => virtualization?.isSourceFullyProjected(entryId) ?? true,
212
- context,
213
- );
214
- await virtualization.recover(ctx);
215
- await routing.bind(ctx, capability.cognitiveRouting, (event as any)?.reason !== "reload");
216
- contextTools();
217
- status(ctx);
218
- });
219
- pi.on("session_shutdown", async () => {
220
- surfaceGeneration++;
221
- requestHistory.reset();
222
- routing.unbind();
223
- context = undefined;
224
- virtualization = undefined;
225
- history = undefined;
226
- capability = undefined;
227
- prompts = undefined;
228
- sessionContext = undefined;
229
- });
230
- pi.on("before_agent_start", async (event, ctx) => {
231
- await update(ctx);
232
- await routing.beforeRun(ctx);
233
- status(ctx);
234
- const text = stableRuntimeContext(prompts);
235
- return { systemPrompt: text ? `${event.systemPrompt}\n\n${text}` : event.systemPrompt };
236
- });
237
- pi.on("message_end", (event) => routing.messageEnd((event as any).message));
238
- pi.on("tool_call", (event, ctx) => {
239
- if (
240
- (event as any).toolName === CONTEXT_VIRTUALIZATION_TOOL_NAME &&
241
- !capability?.contextVirtualization?.effective &&
242
- !capability?.conversationHistory?.effective
243
- )
244
- return { block: true, reason: "Freeflow Context is disabled." };
245
- return routing.preflight(event, ctx);
246
- });
247
- pi.on("turn_end", async (event, ctx) => {
248
- await routing.turnEnd(event, ctx);
249
- status(ctx);
250
- });
251
- pi.on("agent_settled", async (_event, ctx) => {
252
- await routing.settled(ctx);
253
- await update(ctx);
254
- });
255
- pi.on("model_select", async (_event, ctx) => {
256
- await routing.nativeChange(ctx);
257
- status(ctx);
258
- });
259
- pi.on("thinking_level_select", async (_event, ctx) => {
260
- await routing.nativeChange(ctx);
261
- status(ctx);
262
- });
263
- pi.on("context", async (event, ctx) => {
264
- if (!capability) await loadSurface(ctx);
265
- let messages = event.messages.map(filterBootstrapMessage).filter(Boolean);
266
- if (virtualization) {
267
- virtualization.setContext(ctx);
268
- const projected = await virtualization.project(messages, capability.contextVirtualization.effective);
269
- messages = projected.messages;
270
- }
271
- if (history && capability.conversationHistory.effective) {
272
- history.setContext(ctx);
273
- history.capture(capability.contextVirtualization.effective);
274
- }
275
- messages = withFreeflowRuntimeState(messages, capability, routing.state(), prompts, {
276
- force: refreshState,
277
- projectionFailure: routing.state().projectionFailure,
278
- });
279
- refreshState = false;
280
- const routed = await routing.context(ctx, messages);
281
- const projected = virtualization?.decorate(routed) ?? routed;
282
- const state = routing.state();
283
- if (projected.some((message) => message.details?.routingRequestBlocked === true)) return { messages: projected };
284
- const view = routing.projectionEnabled && state.activeProfile === "coordinator" ? "coordinator" : "ordinary";
285
- return {
286
- messages: await requestHistory.assemble(projected, view, ctx, (assembled) =>
287
- routing.budgetNotice(assembled, ctx),
288
- ),
289
- };
290
- });
291
- const restore = async (ctx: any, navigation = true) => {
292
- requestHistory.reset();
293
- restoreSessionOverrides(ctx);
294
- refreshState = true;
295
- if (virtualization) {
296
- virtualization.setContext(ctx);
297
- await virtualization.recover(ctx);
298
- }
299
- history?.setContext(ctx);
300
- await routing.ancestryChanged(ctx, navigation);
301
- await update(ctx);
302
- };
303
- pi.on("session_tree", async (_event, ctx) => restore(ctx));
304
- pi.on("session_compact", async (_event, ctx) => restore(ctx, false));
305
- pi.on("session_compact_failed", async (_event, ctx) => {
306
- refreshState = true;
307
- status(ctx);
308
- });
309
-
310
- if (
311
- typeof pi.registerShortcut === "function" &&
312
- typeof api.appendEntry === "function" &&
313
- typeof api.setModel === "function" &&
314
- typeof api.setThinkingLevel === "function"
315
- ) {
316
- pi.registerShortcut("ctrl+shift+r", {
317
- description: "Cycle enabled Cognitive Routing manual holds",
318
- handler: async (ctx) => {
319
- if (!ctx.isIdle()) {
320
- ctx.ui.notify("Wait for Pi to become idle before changing control.", "warning");
321
- return;
322
- }
323
- const state = routing.state();
324
- const profiles: Profile[] = ["coordinator", ...workersForDelegation(state.delegation)];
325
- const current = profiles.indexOf(state.activeProfile ?? "coordinator");
326
- const target = profiles[(current + 1) % profiles.length]!;
327
- ctx.ui.notify(JSON.stringify(await routing.setManualProfile(target)), "info");
328
- await update(ctx);
329
- },
330
- });
331
- pi.registerShortcut("ctrl+shift+a", {
332
- description: "Release manual hold to Automatic Coordinator",
333
- handler: async (ctx) => {
334
- if (!ctx.isIdle()) {
335
- ctx.ui.notify("Wait for Pi to become idle before changing control.", "warning");
336
- return;
337
- }
338
- ctx.ui.notify(JSON.stringify(await routing.setAutomaticControl()), "info");
339
- await update(ctx);
340
- },
341
- });
342
- }
343
- for (const { command, skill } of WORKFLOW_COMMANDS)
344
- pi.registerCommand(command, {
345
- description: command === skill ? `Run Freeflow ${skill}` : `Run Freeflow ${skill} via ${command}`,
346
- ...(command === "bypass"
347
- ? {
348
- getArgumentCompletions: (prefix: string) =>
349
- [
350
- { value: "next", label: "next", description: "Skip one optional step" },
351
- { value: "task", label: "task", description: "Reduce optional pressure for the current task" },
352
- ].filter((item) => item.value.startsWith(prefix ?? "")),
353
- }
354
- : {}),
355
- handler: (args, ctx) => sendSkillCommand(pi, ctx, skill, args),
356
- });
357
- for (const skill of CONTRIBUTOR_COMMANDS)
358
- pi.registerCommand(skill, {
359
- description: `Run Freeflow ${skill}`,
360
- handler: (args, ctx) => sendSkillCommand(pi, ctx, skill, args),
361
- });
362
- pi.registerCommand("freeflow", {
363
- description: "Freeflow settings, status, profile control, saved-operation resume, and context tools",
364
- getArgumentCompletions: (prefix) =>
365
- freeflowCompletions(
366
- prefix,
367
- typeof api.appendEntry === "function" &&
368
- typeof api.setModel === "function" &&
369
- typeof api.setThinkingLevel === "function",
370
- ),
371
- handler: async (args, ctx) => {
372
- if (await routing.command(args ?? "", ctx)) {
373
- await update(ctx);
374
- return;
375
- }
376
- const input = (args ?? "").trim();
377
- if (input === "context" || input.startsWith("context ")) {
378
- await handleContextCommand(
379
- input.slice(7).trim(),
380
- ctx,
381
- virtualization,
382
- capability?.contextVirtualization.effective,
383
- capability?.conversationHistory.effective,
384
- );
385
- return;
386
- }
387
- await handleFreeflowCommand(args, ctx, async () => update(ctx), pi, routing);
388
- },
389
- });
390
- }
@@ -1,32 +0,0 @@
1
- import { readFile } from "node:fs/promises";
2
- import { homedir } from "node:os";
3
- import { join, resolve } from "node:path";
4
-
5
- function getMcpConfigPaths(cwd) {
6
- return [
7
- join(homedir(), ".config", "mcp", "mcp.json"),
8
- join(homedir(), ".pi", "agent", "mcp.json"),
9
- resolve(cwd, ".mcp.json"),
10
- resolve(cwd, ".pi", "mcp.json"),
11
- ];
12
- }
13
-
14
- export async function isMcpServerConfigured(serverName, cwd) {
15
- return Boolean(await loadMcpServerConfig(serverName, cwd));
16
- }
17
-
18
- export async function loadMcpServerConfig(serverName, cwd) {
19
- let found = null;
20
- for (const configPath of getMcpConfigPaths(cwd)) {
21
- try {
22
- const raw = JSON.parse(await readFile(configPath, "utf8"));
23
- const servers = raw?.mcpServers ?? raw?.["mcp-servers"] ?? {};
24
- if (servers && typeof servers === "object" && !Array.isArray(servers) && servers[serverName]) {
25
- found = servers[serverName];
26
- }
27
- } catch {
28
- // Missing or invalid MCP configs are ignored here; pi-mcp-adapter owns user-facing setup diagnostics.
29
- }
30
- }
31
- return found;
32
- }
@@ -1,108 +0,0 @@
1
- import { assemble, EFFORTS } from "./history.js";
2
- import { SessionState } from "./session-state.js";
3
-
4
- export function requestKey(payload: any, model: any): string | undefined {
5
- if (
6
- !payload ||
7
- payload.model !== "gpt-6-astra" ||
8
- model?.id !== payload.model ||
9
- payload.store !== false ||
10
- !Array.isArray(payload.input) ||
11
- !EFFORTS.includes(payload.reasoning?.effort) ||
12
- payload.previous_response_id ||
13
- payload.conversation ||
14
- payload.context_management ||
15
- (payload.truncation && payload.truncation !== "disabled") ||
16
- (payload.reasoning.mode && payload.reasoning.mode !== "standard") ||
17
- payload.agents ||
18
- payload.input.some((x: any) => x?.type === "configuration_update" || x?.type === "compaction_trigger")
19
- )
20
- return;
21
- const codex = model.provider === "openai-codex" && model.api === "openai-codex-responses";
22
- const api = model.provider === "openai" && model.api === "openai-responses";
23
- if (!codex && !api) return;
24
- if (model.baseUrl !== undefined && typeof model.baseUrl !== "string") return;
25
- const base = (model.baseUrl ?? (codex ? "https://chatgpt.com/backend-api" : "https://api.openai.com/v1")).replace(
26
- /\/+$/,
27
- "",
28
- );
29
- const allowed = codex
30
- ? [
31
- "https://chatgpt.com/backend-api",
32
- "https://chatgpt.com/backend-api/codex",
33
- "https://chatgpt.com/backend-api/codex/responses",
34
- ]
35
- : ["https://api.openai.com/v1"];
36
- if (!allowed.includes(base)) return;
37
- return `${model.provider}/${model.api}/${model.id}`;
38
- }
39
- export class AstraAdapter {
40
- private session?: { id: string; file?: string; store: SessionState };
41
- private generation = 0;
42
- private compacting = false;
43
- private queue: Promise<unknown> = Promise.resolve();
44
- private statusSignature?: string;
45
- constructor(private readonly pi: any) {}
46
- reset(ctx?: any): void {
47
- this.generation++;
48
- this.session = undefined;
49
- this.compacting = false;
50
- this.status(ctx, undefined);
51
- }
52
- setCompacting(value: boolean): void {
53
- this.compacting = value;
54
- }
55
- private status(ctx: any, label: string | undefined): void {
56
- if (this.statusSignature === label) return;
57
- this.statusSignature = label;
58
- // Diagnostics must never turn a completed payload transformation into an exception.
59
- try {
60
- ctx.ui?.setStatus?.("freeflow-astra-effort", label);
61
- } catch {}
62
- }
63
- async adapt(payload: any, ctx: any): Promise<any> {
64
- const generation = this.generation;
65
- const operation = this.queue.then(async () => {
66
- const key = requestKey(payload, ctx.model);
67
- if (generation !== this.generation || this.compacting || !key) {
68
- this.status(ctx, undefined);
69
- return payload;
70
- }
71
- try {
72
- const reader = ctx.sessionManager;
73
- if (
74
- typeof this.pi.appendEntry !== "function" ||
75
- !reader?.getLeafId ||
76
- !reader.getSessionId ||
77
- !reader.getSessionFile
78
- )
79
- throw new Error("Native session persistence unavailable");
80
- const id = reader.getSessionId(),
81
- file = reader.getSessionFile();
82
- if (!this.session || this.session.id !== id || this.session.file !== file)
83
- this.session = { id, file, store: new SessionState(this.pi, reader) };
84
- const store = this.session.store,
85
- basis = reader.getLeafId();
86
- const records = await store.records();
87
- if (
88
- generation !== this.generation ||
89
- reader.getLeafId() !== basis ||
90
- this.session?.store !== store ||
91
- key !== requestKey(payload, ctx.model)
92
- )
93
- throw new Error("Astra request changed during preparation");
94
- const result = assemble(payload, key, store.generation(), basis, records);
95
- if (result.record) store.append(result.record);
96
- this.status(ctx, `Astra ${result.effective} · cache baseline ${result.baseline}`);
97
- return result.payload;
98
- } catch {
99
- // Pi swallows hook exceptions. Return the untouched full-history request,
100
- // including its requested effort, instead of a partially pinned request.
101
- this.status(ctx, "Astra cache adaptation unavailable · native effort");
102
- return payload;
103
- }
104
- });
105
- this.queue = operation.catch(() => {});
106
- return operation;
107
- }
108
- }