pi-agent-flow 1.8.40 → 2.0.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 (291) hide show
  1. package/README.md +33 -37
  2. package/agents/audit.md +18 -22
  3. package/agents/build.md +20 -22
  4. package/agents/craft.md +20 -27
  5. package/agents/debug.md +21 -28
  6. package/agents/ideas.md +18 -101
  7. package/agents/scout.md +15 -19
  8. package/dist/batch/batch-bash.d.ts +2 -2
  9. package/dist/batch/batch-bash.d.ts.map +1 -1
  10. package/dist/batch/batch-bash.js +3 -3
  11. package/dist/batch/batch-bash.js.map +1 -1
  12. package/dist/batch/constants.d.ts +19 -5
  13. package/dist/batch/constants.d.ts.map +1 -1
  14. package/dist/batch/constants.js +4 -3
  15. package/dist/batch/constants.js.map +1 -1
  16. package/dist/batch/execute.d.ts +0 -1
  17. package/dist/batch/execute.d.ts.map +1 -1
  18. package/dist/batch/execute.js +97 -6
  19. package/dist/batch/execute.js.map +1 -1
  20. package/dist/batch/fuzzy-edit.d.ts +0 -6
  21. package/dist/batch/fuzzy-edit.d.ts.map +1 -1
  22. package/dist/batch/fuzzy-edit.js +1 -1
  23. package/dist/batch/fuzzy-edit.js.map +1 -1
  24. package/dist/batch/index.d.ts.map +1 -1
  25. package/dist/batch/index.js +87 -16
  26. package/dist/batch/index.js.map +1 -1
  27. package/dist/batch/render.d.ts +0 -1
  28. package/dist/batch/render.d.ts.map +1 -1
  29. package/dist/batch/render.js +7 -101
  30. package/dist/batch/render.js.map +1 -1
  31. package/dist/batch/summary.d.ts +5 -0
  32. package/dist/batch/summary.d.ts.map +1 -0
  33. package/dist/batch/summary.js +101 -0
  34. package/dist/batch/summary.js.map +1 -0
  35. package/dist/{config.d.ts → config/config.d.ts} +34 -2
  36. package/dist/config/config.d.ts.map +1 -0
  37. package/dist/{config.js → config/config.js} +157 -9
  38. package/dist/config/config.js.map +1 -0
  39. package/dist/config/log.d.ts +27 -0
  40. package/dist/config/log.d.ts.map +1 -0
  41. package/dist/config/log.js +104 -0
  42. package/dist/config/log.js.map +1 -0
  43. package/dist/{settings-resolver.d.ts → config/settings-resolver.d.ts} +9 -2
  44. package/dist/config/settings-resolver.d.ts.map +1 -0
  45. package/dist/config/settings-resolver.js +275 -0
  46. package/dist/config/settings-resolver.js.map +1 -0
  47. package/dist/core/agents.d.ts.map +1 -0
  48. package/dist/{agents.js → core/agents.js} +11 -10
  49. package/dist/core/agents.js.map +1 -0
  50. package/dist/core/delegation.d.ts +24 -0
  51. package/dist/core/delegation.d.ts.map +1 -0
  52. package/dist/core/delegation.js +55 -0
  53. package/dist/core/delegation.js.map +1 -0
  54. package/dist/core/depth.d.ts.map +1 -0
  55. package/dist/{depth.js → core/depth.js} +9 -8
  56. package/dist/core/depth.js.map +1 -0
  57. package/dist/{executor.d.ts → core/executor.d.ts} +11 -3
  58. package/dist/core/executor.d.ts.map +1 -0
  59. package/dist/{executor.js → core/executor.js} +49 -14
  60. package/dist/core/executor.js.map +1 -0
  61. package/dist/{flow.d.ts → core/flow.d.ts} +4 -1
  62. package/dist/core/flow.d.ts.map +1 -0
  63. package/dist/{flow.js → core/flow.js} +110 -45
  64. package/dist/core/flow.js.map +1 -0
  65. package/dist/{session-mode.d.ts → core/session-mode.d.ts} +2 -1
  66. package/dist/core/session-mode.d.ts.map +1 -0
  67. package/dist/{session-mode.js → core/session-mode.js} +1 -1
  68. package/dist/core/session-mode.js.map +1 -0
  69. package/dist/core/session-registry.d.ts +16 -0
  70. package/dist/core/session-registry.d.ts.map +1 -0
  71. package/dist/core/session-registry.js +30 -0
  72. package/dist/core/session-registry.js.map +1 -0
  73. package/dist/core/transitions.d.ts.map +1 -0
  74. package/dist/{transitions.js → core/transitions.js} +1 -1
  75. package/dist/core/transitions.js.map +1 -0
  76. package/dist/flow/command.d.ts +8 -0
  77. package/dist/flow/command.d.ts.map +1 -0
  78. package/dist/flow/command.js +189 -0
  79. package/dist/flow/command.js.map +1 -0
  80. package/dist/flow/continuation.d.ts +16 -0
  81. package/dist/flow/continuation.d.ts.map +1 -0
  82. package/dist/flow/continuation.js +151 -0
  83. package/dist/flow/continuation.js.map +1 -0
  84. package/dist/flow/index.d.ts +15 -0
  85. package/dist/flow/index.d.ts.map +1 -0
  86. package/dist/flow/index.js +22 -0
  87. package/dist/flow/index.js.map +1 -0
  88. package/dist/flow/settings-command.d.ts +51 -0
  89. package/dist/flow/settings-command.d.ts.map +1 -0
  90. package/dist/flow/settings-command.js +851 -0
  91. package/dist/flow/settings-command.js.map +1 -0
  92. package/dist/flow/store.d.ts +26 -0
  93. package/dist/flow/store.d.ts.map +1 -0
  94. package/dist/flow/store.js +158 -0
  95. package/dist/flow/store.js.map +1 -0
  96. package/dist/flow/template-strings.d.ts +8 -0
  97. package/dist/flow/template-strings.d.ts.map +1 -0
  98. package/dist/flow/template-strings.js +39 -0
  99. package/dist/flow/template-strings.js.map +1 -0
  100. package/dist/flow/types.d.ts +55 -0
  101. package/dist/flow/types.d.ts.map +1 -0
  102. package/dist/flow/types.js +5 -0
  103. package/dist/flow/types.js.map +1 -0
  104. package/dist/flow/warp-command.d.ts +9 -0
  105. package/dist/flow/warp-command.d.ts.map +1 -0
  106. package/dist/flow/warp-command.js +405 -0
  107. package/dist/flow/warp-command.js.map +1 -0
  108. package/dist/index.d.ts +3 -1
  109. package/dist/index.d.ts.map +1 -1
  110. package/dist/index.js +103 -29
  111. package/dist/index.js.map +1 -1
  112. package/dist/{notify-state.d.ts → notify/notify-state.d.ts} +2 -1
  113. package/dist/notify/notify-state.d.ts.map +1 -0
  114. package/dist/notify/notify-state.js.map +1 -0
  115. package/dist/notify/notify.d.ts.map +1 -0
  116. package/dist/{notify.js → notify/notify.js} +3 -2
  117. package/dist/notify/notify.js.map +1 -0
  118. package/dist/{cli-args.d.ts → snapshot/cli-args.d.ts} +3 -2
  119. package/dist/snapshot/cli-args.d.ts.map +1 -0
  120. package/dist/{cli-args.js → snapshot/cli-args.js} +1 -1
  121. package/dist/snapshot/cli-args.js.map +1 -0
  122. package/dist/snapshot/index.d.ts +2 -0
  123. package/dist/snapshot/index.d.ts.map +1 -0
  124. package/dist/snapshot/index.js +2 -0
  125. package/dist/snapshot/index.js.map +1 -0
  126. package/dist/{reasoning-strip.d.ts → snapshot/reasoning-strip.d.ts} +0 -4
  127. package/dist/snapshot/reasoning-strip.d.ts.map +1 -0
  128. package/dist/{reasoning-strip.js → snapshot/reasoning-strip.js} +2 -2
  129. package/dist/snapshot/reasoning-strip.js.map +1 -0
  130. package/dist/snapshot/runner-events.d.ts.map +1 -0
  131. package/dist/{runner-events.js → snapshot/runner-events.js} +1 -1
  132. package/dist/snapshot/runner-events.js.map +1 -0
  133. package/dist/{snapshot.d.ts → snapshot/snapshot.d.ts} +5 -2
  134. package/dist/snapshot/snapshot.d.ts.map +1 -0
  135. package/dist/{snapshot.js → snapshot/snapshot.js} +166 -35
  136. package/dist/snapshot/snapshot.js.map +1 -0
  137. package/dist/{structured-output.d.ts → snapshot/structured-output.d.ts} +1 -1
  138. package/dist/snapshot/structured-output.d.ts.map +1 -0
  139. package/dist/snapshot/structured-output.js.map +1 -0
  140. package/dist/{flow-prompt.d.ts → steering/flow-prompt.d.ts} +2 -2
  141. package/dist/steering/flow-prompt.d.ts.map +1 -0
  142. package/dist/{flow-prompt.js → steering/flow-prompt.js} +1 -1
  143. package/dist/steering/flow-prompt.js.map +1 -0
  144. package/dist/{sliding-prompt.d.ts → steering/sliding-prompt.d.ts} +8 -7
  145. package/dist/steering/sliding-prompt.d.ts.map +1 -0
  146. package/dist/{sliding-prompt.js → steering/sliding-prompt.js} +15 -64
  147. package/dist/steering/sliding-prompt.js.map +1 -0
  148. package/dist/{tool-utils.d.ts → steering/tool-utils.d.ts} +1 -0
  149. package/dist/steering/tool-utils.d.ts.map +1 -0
  150. package/dist/{tool-utils.js → steering/tool-utils.js} +10 -3
  151. package/dist/steering/tool-utils.js.map +1 -0
  152. package/dist/{ask-user.d.ts → tools/ask-user.d.ts} +3 -15
  153. package/dist/tools/ask-user.d.ts.map +1 -0
  154. package/dist/tools/ask-user.js +778 -0
  155. package/dist/tools/ask-user.js.map +1 -0
  156. package/dist/{timed-bash.d.ts → tools/timed-bash.d.ts} +2 -7
  157. package/dist/tools/timed-bash.d.ts.map +1 -0
  158. package/dist/{timed-bash.js → tools/timed-bash.js} +2 -2
  159. package/dist/tools/timed-bash.js.map +1 -0
  160. package/dist/{web-tool.d.ts → tools/web-tool.d.ts} +1 -1
  161. package/dist/tools/web-tool.d.ts.map +1 -0
  162. package/dist/{web-tool.js → tools/web-tool.js} +8 -7
  163. package/dist/tools/web-tool.js.map +1 -0
  164. package/dist/tui/flow-colors.d.ts +55 -0
  165. package/dist/tui/flow-colors.d.ts.map +1 -0
  166. package/dist/tui/flow-colors.js +22 -0
  167. package/dist/tui/flow-colors.js.map +1 -0
  168. package/dist/{render-utils.d.ts → tui/render-utils.d.ts} +1 -1
  169. package/dist/tui/render-utils.d.ts.map +1 -0
  170. package/dist/{render-utils.js → tui/render-utils.js} +3 -3
  171. package/dist/tui/render-utils.js.map +1 -0
  172. package/dist/tui/render.d.ts +21 -0
  173. package/dist/tui/render.d.ts.map +1 -0
  174. package/dist/tui/render.js +813 -0
  175. package/dist/tui/render.js.map +1 -0
  176. package/dist/tui/scramble/algorithm.d.ts +7 -0
  177. package/dist/tui/scramble/algorithm.d.ts.map +1 -0
  178. package/dist/tui/scramble/algorithm.js +227 -0
  179. package/dist/tui/scramble/algorithm.js.map +1 -0
  180. package/dist/tui/scramble/constants.d.ts +99 -0
  181. package/dist/tui/scramble/constants.d.ts.map +1 -0
  182. package/dist/tui/scramble/constants.js +101 -0
  183. package/dist/tui/scramble/constants.js.map +1 -0
  184. package/dist/tui/scramble/index.d.ts +6 -0
  185. package/dist/tui/scramble/index.d.ts.map +1 -0
  186. package/dist/tui/scramble/index.js +6 -0
  187. package/dist/tui/scramble/index.js.map +1 -0
  188. package/dist/tui/scramble/manager.d.ts +48 -0
  189. package/dist/tui/scramble/manager.d.ts.map +1 -0
  190. package/dist/tui/scramble/manager.js +959 -0
  191. package/dist/tui/scramble/manager.js.map +1 -0
  192. package/dist/tui/scramble/utils.d.ts +18 -0
  193. package/dist/tui/scramble/utils.d.ts.map +1 -0
  194. package/dist/tui/scramble/utils.js +145 -0
  195. package/dist/tui/scramble/utils.js.map +1 -0
  196. package/dist/tui/single-select-layout.d.ts +17 -0
  197. package/dist/tui/single-select-layout.d.ts.map +1 -0
  198. package/dist/{single-select-layout.js → tui/single-select-layout.js} +8 -25
  199. package/dist/tui/single-select-layout.js.map +1 -0
  200. package/dist/types/flow.d.ts +110 -0
  201. package/dist/types/flow.d.ts.map +1 -0
  202. package/dist/{types.js → types/flow.js} +3 -54
  203. package/dist/types/flow.js.map +1 -0
  204. package/dist/types/index.d.ts +8 -0
  205. package/dist/types/index.d.ts.map +1 -0
  206. package/dist/types/index.js +7 -0
  207. package/dist/types/index.js.map +1 -0
  208. package/dist/types/output.d.ts +104 -0
  209. package/dist/types/output.d.ts.map +1 -0
  210. package/dist/types/output.js +5 -0
  211. package/dist/types/output.js.map +1 -0
  212. package/dist/types/ui.d.ts +24 -0
  213. package/dist/types/ui.d.ts.map +1 -0
  214. package/dist/types/ui.js +55 -0
  215. package/dist/types/ui.js.map +1 -0
  216. package/package.json +1 -1
  217. package/dist/agents.d.ts.map +0 -1
  218. package/dist/agents.js.map +0 -1
  219. package/dist/ask-user.d.ts.map +0 -1
  220. package/dist/ask-user.js +0 -1405
  221. package/dist/ask-user.js.map +0 -1
  222. package/dist/batch.d.ts +0 -12
  223. package/dist/batch.d.ts.map +0 -1
  224. package/dist/batch.js +0 -11
  225. package/dist/batch.js.map +0 -1
  226. package/dist/cli-args.d.ts.map +0 -1
  227. package/dist/cli-args.js.map +0 -1
  228. package/dist/config.d.ts.map +0 -1
  229. package/dist/config.js.map +0 -1
  230. package/dist/depth.d.ts.map +0 -1
  231. package/dist/depth.js.map +0 -1
  232. package/dist/executor.d.ts.map +0 -1
  233. package/dist/executor.js.map +0 -1
  234. package/dist/flow-prompt.d.ts.map +0 -1
  235. package/dist/flow-prompt.js.map +0 -1
  236. package/dist/flow.d.ts.map +0 -1
  237. package/dist/flow.js.map +0 -1
  238. package/dist/notify-state.d.ts.map +0 -1
  239. package/dist/notify-state.js.map +0 -1
  240. package/dist/notify.d.ts.map +0 -1
  241. package/dist/notify.js.map +0 -1
  242. package/dist/reasoning-strip.d.ts.map +0 -1
  243. package/dist/reasoning-strip.js.map +0 -1
  244. package/dist/render-utils.d.ts.map +0 -1
  245. package/dist/render-utils.js.map +0 -1
  246. package/dist/render.d.ts +0 -24
  247. package/dist/render.d.ts.map +0 -1
  248. package/dist/render.js +0 -592
  249. package/dist/render.js.map +0 -1
  250. package/dist/runner-events.d.ts.map +0 -1
  251. package/dist/runner-events.js.map +0 -1
  252. package/dist/scramble.d.ts +0 -183
  253. package/dist/scramble.d.ts.map +0 -1
  254. package/dist/scramble.js +0 -2478
  255. package/dist/scramble.js.map +0 -1
  256. package/dist/session-mode.d.ts.map +0 -1
  257. package/dist/session-mode.js.map +0 -1
  258. package/dist/settings-resolver.d.ts.map +0 -1
  259. package/dist/settings-resolver.js +0 -148
  260. package/dist/settings-resolver.js.map +0 -1
  261. package/dist/single-select-layout.d.ts +0 -20
  262. package/dist/single-select-layout.d.ts.map +0 -1
  263. package/dist/single-select-layout.js.map +0 -1
  264. package/dist/sliding-prompt.d.ts.map +0 -1
  265. package/dist/sliding-prompt.js.map +0 -1
  266. package/dist/snapshot.d.ts.map +0 -1
  267. package/dist/snapshot.js.map +0 -1
  268. package/dist/spec-mode.d.ts +0 -13
  269. package/dist/spec-mode.d.ts.map +0 -1
  270. package/dist/spec-mode.js +0 -90
  271. package/dist/spec-mode.js.map +0 -1
  272. package/dist/structured-output.d.ts.map +0 -1
  273. package/dist/structured-output.js.map +0 -1
  274. package/dist/timed-bash.d.ts.map +0 -1
  275. package/dist/timed-bash.js.map +0 -1
  276. package/dist/tool-utils.d.ts.map +0 -1
  277. package/dist/tool-utils.js.map +0 -1
  278. package/dist/transitions.d.ts.map +0 -1
  279. package/dist/transitions.js.map +0 -1
  280. package/dist/types.d.ts +0 -224
  281. package/dist/types.d.ts.map +0 -1
  282. package/dist/types.js.map +0 -1
  283. package/dist/web-tool.d.ts.map +0 -1
  284. package/dist/web-tool.js.map +0 -1
  285. /package/dist/{agents.d.ts → core/agents.d.ts} +0 -0
  286. /package/dist/{depth.d.ts → core/depth.d.ts} +0 -0
  287. /package/dist/{transitions.d.ts → core/transitions.d.ts} +0 -0
  288. /package/dist/{notify-state.js → notify/notify-state.js} +0 -0
  289. /package/dist/{notify.d.ts → notify/notify.d.ts} +0 -0
  290. /package/dist/{runner-events.d.ts → snapshot/runner-events.d.ts} +0 -0
  291. /package/dist/{structured-output.js → snapshot/structured-output.js} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-registry.js","sourceRoot":"","sources":["../../src/core/session-registry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC,CAAC,mBAAmB;AAC/D,IAAI,QAA4B,CAAC;AAEjC,MAAM,UAAU,QAAQ,CAAC,GAAW,EAAE,SAAiB;IACrD,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAC7B,QAAQ,GAAG,GAAG,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACrB,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;QACrB,QAAQ,GAAG,SAAS,CAAC;IACvB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,OAAO,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC3B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,MAAM;IACpB,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transitions.d.ts","sourceRoot":"","sources":["../../src/core/transitions.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH,MAAM,WAAW,cAAc;IAC9B,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,2CAA2C;IAC3C,EAAE,EAAE,MAAM,CAAC;IACX,qCAAqC;IACrC,EAAE,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;IACrC,0CAA0C;IAC1C,MAAM,EAAE,MAAM,CAAC;CACf;AAMD,eAAO,MAAM,mBAAmB,EAAE,cAAc,EAW/C,CAAC;AAMF;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAClC,MAAM,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,EAC/C,OAAO,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,OAAO,EAAE,CAAA;CAAE,CAAC,EACnH,WAAW,GAAE,cAAc,EAAwB,GACjD,MAAM,EAAE,CAuBV"}
@@ -5,7 +5,7 @@
5
5
  * follow-up flow given a source flow's outcome. The matrix is used by
6
6
  * getTransitionAdvice() to generate advisory strings.
7
7
  */
8
- import { isFlowSuccess } from "./types.js";
8
+ import { isFlowSuccess } from "../types/flow.js";
9
9
  // ---------------------------------------------------------------------------
10
10
  // Default transition matrix
11
11
  // ---------------------------------------------------------------------------
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transitions.js","sourceRoot":"","sources":["../../src/core/transitions.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAiBjD,8EAA8E;AAC9E,4BAA4B;AAC5B,8EAA8E;AAE9E,MAAM,CAAC,MAAM,mBAAmB,GAAqB;IACpD,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,6GAA6G,EAAE;IACpK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,4EAA4E,EAAE;IACnI,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,2FAA2F,EAAE;IAClJ,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,oGAAoG,EAAE;IAC3J,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,oGAAoG,EAAE;IAC3J,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,8EAA8E,EAAE;IACrI,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,kGAAkG,EAAE;IACzJ,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,kEAAkE,EAAE;IACzH,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,sEAAsE,EAAE;IAC7H,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,2GAA2G,EAAE;CAClK,CAAC;AAEF,8EAA8E;AAC9E,oBAAoB;AACpB,8EAA8E;AAE9E;;;;;;;;;GASG;AACH,MAAM,UAAU,mBAAmB,CAClC,MAA+C,EAC/C,OAAmH,EACnH,cAAgC,mBAAmB;IAEnD,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IACxE,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC9B,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAC7C,MAAM,SAAS,GAAG,aAAa,CAAC,MAAiD,CAAC,CAAC;QAEnF,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;YAC7B,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,UAAU;gBAAE,SAAS;YAElD,0BAA0B;YAC1B,IAAI,CAAC,CAAC,EAAE,KAAK,SAAS,IAAI,CAAC,SAAS;gBAAE,SAAS;YAC/C,IAAI,CAAC,CAAC,EAAE,KAAK,SAAS,IAAI,SAAS;gBAAE,SAAS;YAE9C,0CAA0C;YAC1C,IAAI,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;gBAAE,SAAS;YAErD,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACzB,CAAC;IACF,CAAC;IAED,OAAO,QAAQ,CAAC;AACjB,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * /flow:goal slash command registration.
3
+ *
4
+ * Subcommands: set, clear, pause, resume, edit, status, show
5
+ */
6
+ import type { ExtensionAPI } from "@mariozechner/pi-coding-agent";
7
+ export declare function setupFlowCommand(pi: ExtensionAPI): void;
8
+ //# sourceMappingURL=command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/flow/command.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,YAAY,EAA2B,MAAM,+BAA+B,CAAC;AA8B3F,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAkKvD"}
@@ -0,0 +1,189 @@
1
+ /**
2
+ * /flow:goal slash command registration.
3
+ *
4
+ * Subcommands: set, clear, pause, resume, edit, status, show
5
+ */
6
+ import { getGoal, getGoalForSession, setGoal, clearGoal, updateGoalStatus, updateGoalObjective, } from "./store.js";
7
+ function formatGoal(entry) {
8
+ const lines = [
9
+ `**ID:** ${entry.id}`,
10
+ `**Objective:** ${entry.objective}`,
11
+ `**Status:** ${entry.status}`,
12
+ `**Created:** ${entry.createdAt}`,
13
+ `**Updated:** ${entry.updatedAt}`,
14
+ ];
15
+ if (entry.acceptance)
16
+ lines.push(`**Acceptance:** ${entry.acceptance}`);
17
+ if (entry.maxTokens !== undefined)
18
+ lines.push(`**Token budget:** ${entry.totalTokens}/${entry.maxTokens}`);
19
+ if (entry.maxFlows !== undefined)
20
+ lines.push(`**Flow budget:** ${entry.completedFlows.length}/${entry.maxFlows}`);
21
+ if (entry.completedFlows.length > 0) {
22
+ lines.push(`**Completed flows:**`);
23
+ for (const f of entry.completedFlows) {
24
+ lines.push(` - [${f.type}] ${f.aim}`);
25
+ }
26
+ }
27
+ return lines.join("\n");
28
+ }
29
+ export function setupFlowCommand(pi) {
30
+ pi.registerCommand("flow:goal", {
31
+ description: "Manage an active flow goal. Subcommands: set <objective> [--acceptance <text>] [--max-tokens <n>] [--max-flows <n>], clear, pause, resume, complete, edit <new-objective> [--acceptance <text>], status, show",
32
+ handler: async (args, ctx) => {
33
+ const trimmed = args.trim();
34
+ const firstSpace = trimmed.indexOf(" ");
35
+ const sub = (firstSpace === -1 ? trimmed : trimmed.slice(0, firstSpace)).toLowerCase();
36
+ const rest = firstSpace === -1 ? "" : trimmed.slice(firstSpace + 1).trim();
37
+ const cwd = ctx.cwd;
38
+ switch (sub) {
39
+ case "set": {
40
+ const acceptanceMatch = rest.match(/--acceptance\s+(.+?)(?=\s+--|$)/);
41
+ const maxTokensMatch = rest.match(/--max-tokens\s+(\d+)/);
42
+ const maxFlowsMatch = rest.match(/--max-flows\s+(\d+)/);
43
+ let objective = rest;
44
+ if (acceptanceMatch)
45
+ objective = objective.replace(acceptanceMatch[0], "").trim();
46
+ if (maxTokensMatch)
47
+ objective = objective.replace(maxTokensMatch[0], "").trim();
48
+ if (maxFlowsMatch)
49
+ objective = objective.replace(maxFlowsMatch[0], "").trim();
50
+ if (!objective) {
51
+ ctx.ui.notify?.("Usage: /flow:goal set <objective> [--acceptance <text>] [--max-tokens <n>] [--max-flows <n>]", "error");
52
+ return;
53
+ }
54
+ const sessionId = ctx.sessionManager.getSessionId();
55
+ const entry = setGoal(cwd, objective, {
56
+ acceptance: acceptanceMatch?.[1],
57
+ maxTokens: maxTokensMatch ? parseInt(maxTokensMatch[1], 10) : undefined,
58
+ maxFlows: maxFlowsMatch ? parseInt(maxFlowsMatch[1], 10) : undefined,
59
+ sessionId,
60
+ });
61
+ ctx.ui.notify?.(`Goal set: ${entry.objective}`, "info");
62
+ const acceptanceLine = entry.acceptance ? `\nAcceptance: ${entry.acceptance}` : '';
63
+ pi.sendMessage({ content: `New goal active. Call the flow tool with an appropriate type (scout, craft, build, audit, debug, ideas) to start executing.${acceptanceLine}`, display: false }, { triggerTurn: true });
64
+ break;
65
+ }
66
+ case "clear": {
67
+ clearGoal(cwd);
68
+ ctx.ui.notify?.("Goal cleared", "info");
69
+ break;
70
+ }
71
+ case "pause": {
72
+ const currentSessionId = ctx.sessionManager.getSessionId();
73
+ const goal = getGoalForSession(cwd, currentSessionId);
74
+ if (goal) {
75
+ const entry = updateGoalStatus(cwd, "paused");
76
+ if (entry) {
77
+ ctx.ui.notify?.("Goal paused", "info");
78
+ }
79
+ }
80
+ else if (getGoal(cwd)) {
81
+ ctx.ui.notify?.("No active goal in this session to pause", "error");
82
+ }
83
+ else {
84
+ ctx.ui.notify?.("No active goal to pause", "error");
85
+ }
86
+ break;
87
+ }
88
+ case "resume": {
89
+ const sessionId = ctx.sessionManager.getSessionId();
90
+ const current = getGoal(cwd);
91
+ if (!current) {
92
+ ctx.ui.notify?.("No goal to resume", "error");
93
+ break;
94
+ }
95
+ if (current.status === "active") {
96
+ if (current.sessionId && current.sessionId !== sessionId) {
97
+ ctx.ui.notify?.("Goal is already active in another session", "info");
98
+ }
99
+ else {
100
+ ctx.ui.notify?.("Goal is already active", "info");
101
+ }
102
+ break;
103
+ }
104
+ if (current.sessionId && current.sessionId !== sessionId) {
105
+ ctx.ui.notify?.("Resuming goal from another session — it will be rebound to this session.", "warning");
106
+ }
107
+ const entry = updateGoalStatus(cwd, "active", sessionId);
108
+ if (entry) {
109
+ ctx.ui.notify?.("Goal resumed", "info");
110
+ const acceptanceLine = entry.acceptance ? `\nAcceptance: ${entry.acceptance}` : '';
111
+ pi.sendMessage({ content: `Goal resumed. Continue execution by calling the flow tool with an appropriate type (scout, craft, build, audit, debug, ideas).${acceptanceLine}`, display: false }, { triggerTurn: true });
112
+ }
113
+ break;
114
+ }
115
+ case "edit": {
116
+ const acceptanceMatch = rest.match(/--acceptance\s+(.+?)(?=\s+--|$)/);
117
+ let objective = rest;
118
+ if (acceptanceMatch)
119
+ objective = objective.replace(acceptanceMatch[0], "").trim();
120
+ if (!objective) {
121
+ ctx.ui.notify?.("Usage: /flow:goal edit <new-objective> [--acceptance <text>]", "error");
122
+ return;
123
+ }
124
+ const currentSessionId = ctx.sessionManager.getSessionId();
125
+ const previousGoal = getGoalForSession(cwd, currentSessionId);
126
+ if (!previousGoal) {
127
+ if (getGoal(cwd)) {
128
+ ctx.ui.notify?.("No active goal in this session to edit", "error");
129
+ }
130
+ else {
131
+ ctx.ui.notify?.("No active goal to edit", "error");
132
+ }
133
+ return;
134
+ }
135
+ const previousObjective = previousGoal.objective;
136
+ const entry = updateGoalObjective(cwd, objective, acceptanceMatch?.[1]);
137
+ if (entry) {
138
+ ctx.ui.notify?.(`Goal updated: ${entry.objective}`, "info");
139
+ const acceptanceLine = entry.acceptance ? `\nAcceptance: ${entry.acceptance}` : '';
140
+ pi.sendMessage({ content: `<flow-update>\nThe flow goal objective has been updated.\n\nPrevious: ${previousObjective}\nCurrent: ${entry.objective}${acceptanceLine}\n\nAdjust your plan accordingly. Continue with the revised objective. Choose the appropriate flow type.\n</flow-update>`, display: false }, { triggerTurn: true });
141
+ }
142
+ else {
143
+ ctx.ui.notify?.("No active goal to edit", "error");
144
+ }
145
+ break;
146
+ }
147
+ case "status":
148
+ case "show": {
149
+ const currentSessionId = ctx.sessionManager.getSessionId();
150
+ const entry = getGoalForSession(cwd, currentSessionId);
151
+ if (entry) {
152
+ ctx.ui.notify?.(formatGoal(entry), "info");
153
+ }
154
+ else {
155
+ const anyGoal = getGoal(cwd);
156
+ if (anyGoal) {
157
+ ctx.ui.notify?.(formatGoal(anyGoal) + "\n\n(belongs to another session)", "info");
158
+ }
159
+ else {
160
+ ctx.ui.notify?.("No active goal", "info");
161
+ }
162
+ }
163
+ break;
164
+ }
165
+ case "complete": {
166
+ const currentSessionId = ctx.sessionManager.getSessionId();
167
+ const goal = getGoalForSession(cwd, currentSessionId);
168
+ if (goal) {
169
+ const entry = updateGoalStatus(cwd, "completed");
170
+ if (entry) {
171
+ ctx.ui.notify?.("Goal marked as completed", "info");
172
+ }
173
+ }
174
+ else if (getGoal(cwd)) {
175
+ ctx.ui.notify?.("No active goal in this session to complete", "error");
176
+ }
177
+ else {
178
+ ctx.ui.notify?.("No active goal to complete", "error");
179
+ }
180
+ break;
181
+ }
182
+ default: {
183
+ ctx.ui.notify?.("Unknown subcommand. Usage: /flow:goal {set|clear|pause|resume|complete|edit|status|show}", "error");
184
+ }
185
+ }
186
+ },
187
+ });
188
+ }
189
+ //# sourceMappingURL=command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/flow/command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { ExtensionAPI } from "@mariozechner/pi-coding-agent";
2
+ /**
3
+ * Mark that a flow just completed. Called by the executor after each flow
4
+ * finishes. The continuation system uses this to enforce the post-completion
5
+ * hold, giving the user time to read the result before the next flow spawns.
6
+ *
7
+ * Per-session tracking prevents one session's flow completion from delaying
8
+ * another session's continuation.
9
+ */
10
+ export declare function markFlowCompleted(sessionId?: string): void;
11
+ /**
12
+ * Shut down the idle wake-up interval. Call during process exit cleanup.
13
+ */
14
+ export declare function shutdownWakeup(): void;
15
+ export declare function setupContinuation(pi: ExtensionAPI): void;
16
+ //# sourceMappingURL=continuation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"continuation.d.ts","sourceRoot":"","sources":["../../src/flow/continuation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAkC,MAAM,+BAA+B,CAAC;AAoClG;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAI1D;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAKrC;AAED,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAwGxD"}
@@ -0,0 +1,151 @@
1
+ import { getGoal, addTokens, updateGoalStatus } from "./store.js";
2
+ import { budgetLimitTemplate, idleWakeupTemplate, continuationPromptTemplate } from "./template-strings.js";
3
+ import { logWarn } from '../config/log.js';
4
+ import * as sessionRegistry from '../core/session-registry.js';
5
+ const SPAWN_COOLDOWN_MS = 5000;
6
+ const _lastSpawnAt = new Map();
7
+ /**
8
+ * Post-flow completion hold — gives the user time to read the result before
9
+ * the continuation system triggers the next flow.
10
+ *
11
+ * When a flow finishes, the TUI renders the completed result. If the
12
+ * continuation system immediately spawns the next flow, the completed
13
+ * result scrolls off-screen before the user can read it.
14
+ *
15
+ * This delay is measured from the last flow completion time (tracked via
16
+ * _lastFlowCompleteAt) rather than from _lastSpawnAt, so the hold applies
17
+ * even when the cooldown has already elapsed.
18
+ */
19
+ const FLOW_COMPLETE_HOLD_MS = 3000;
20
+ const _lastFlowCompleteAt = new Map();
21
+ /**
22
+ * Idle wake-up — nudges the orchestrator to keep working when the user
23
+ * has been idle for a long period while a goal is active.
24
+ */
25
+ const IDLE_WAKEUP_MS = typeof process !== "undefined" && process.env.PI_FLOW_IDLE_WAKEUP_MS
26
+ ? parseInt(process.env.PI_FLOW_IDLE_WAKEUP_MS, 10)
27
+ : 600_000;
28
+ const WAKEUP_CHECK_INTERVAL_MS = 60_000;
29
+ const _lastTurnEndAt = new Map();
30
+ let _wakeupInterval;
31
+ /**
32
+ * Mark that a flow just completed. Called by the executor after each flow
33
+ * finishes. The continuation system uses this to enforce the post-completion
34
+ * hold, giving the user time to read the result before the next flow spawns.
35
+ *
36
+ * Per-session tracking prevents one session's flow completion from delaying
37
+ * another session's continuation.
38
+ */
39
+ export function markFlowCompleted(sessionId) {
40
+ if (sessionId) {
41
+ _lastFlowCompleteAt.set(sessionId, Date.now());
42
+ }
43
+ }
44
+ /**
45
+ * Shut down the idle wake-up interval. Call during process exit cleanup.
46
+ */
47
+ export function shutdownWakeup() {
48
+ if (_wakeupInterval) {
49
+ clearInterval(_wakeupInterval);
50
+ _wakeupInterval = undefined;
51
+ }
52
+ }
53
+ export function setupContinuation(pi) {
54
+ pi.on("session_start", (_event, ctx) => {
55
+ sessionRegistry.register(ctx.cwd, ctx.sessionManager.getSessionId());
56
+ _lastTurnEndAt.set(ctx.sessionManager.getSessionId(), Date.now());
57
+ });
58
+ // Idle wake-up: periodically check if the user has been idle while a goal
59
+ // is active, and nudge the orchestrator to keep making progress.
60
+ if (!_wakeupInterval) {
61
+ _wakeupInterval = setInterval(() => {
62
+ const cwd = sessionRegistry.getCwd();
63
+ if (!cwd)
64
+ return;
65
+ const goal = getGoal(cwd);
66
+ if (!goal || goal.status !== "active")
67
+ return;
68
+ const sessionId = goal.sessionId ?? "none";
69
+ const lastActivity = _lastTurnEndAt.get(sessionId);
70
+ if (!lastActivity)
71
+ return;
72
+ const now = Date.now();
73
+ if (now - lastActivity > IDLE_WAKEUP_MS) {
74
+ _lastTurnEndAt.set(sessionId, now);
75
+ const maxFlowsClause = goal.maxFlows !== undefined ? `/${goal.maxFlows}` : '';
76
+ const tokenInfo = `${goal.totalTokens}${goal.maxTokens !== undefined ? `/${goal.maxTokens}` : ''}`;
77
+ const acceptanceClause = goal.acceptance ? `\nAcceptance: ${goal.acceptance}` : '';
78
+ const prompt = idleWakeupTemplate
79
+ .replace("{{objective}}", goal.objective)
80
+ .replace("{{acceptanceClause}}", acceptanceClause)
81
+ .replace("{{flowCount}}", String(goal.completedFlows.length))
82
+ .replace("{{maxFlows}}", String(goal.maxFlows ?? "unlimited"))
83
+ .replace("{{totalTokens}}", tokenInfo);
84
+ pi.sendMessage({ content: prompt, display: false }, { triggerTurn: true });
85
+ }
86
+ }, WAKEUP_CHECK_INTERVAL_MS);
87
+ }
88
+ pi.on("turn_end", async (event) => {
89
+ const cwd = sessionRegistry.getCwd();
90
+ if (!cwd)
91
+ return;
92
+ const goal = getGoal(cwd);
93
+ if (!goal || goal.status !== "active")
94
+ return;
95
+ // Session guard: only continue goals bound to the current session.
96
+ if (goal.sessionId && goal.sessionId !== sessionRegistry.getSessionId(cwd)) {
97
+ logWarn(`[pi-agent-flow] Continuation skipped: goal session ${goal.sessionId} ≠ active session ${sessionRegistry.getSessionId(cwd) ?? '(none)'}`);
98
+ return;
99
+ }
100
+ const goalSessionId = goal.sessionId ?? "none";
101
+ _lastTurnEndAt.set(goalSessionId, Date.now());
102
+ // Cooldown: don't re-fire within 5 seconds of last spawn for THIS goal's session
103
+ const now = Date.now();
104
+ if (now - (_lastSpawnAt.get(goalSessionId) ?? 0) < SPAWN_COOLDOWN_MS)
105
+ return;
106
+ // Post-completion hold: give the user time to read the flow result
107
+ // before triggering the next flow. This prevents the completed result
108
+ // from scrolling off-screen too fast.
109
+ const lastFlowComplete = _lastFlowCompleteAt.get(goalSessionId);
110
+ if (lastFlowComplete !== undefined && now - lastFlowComplete < FLOW_COMPLETE_HOLD_MS)
111
+ return;
112
+ _lastSpawnAt.set(goalSessionId, now);
113
+ // Track token usage from turn
114
+ const messageText = typeof event.message.content === "string"
115
+ ? event.message.content
116
+ : event.message.content
117
+ .filter((p) => p.type === "text" && typeof p.text === "string")
118
+ .map((p) => p.text)
119
+ .join("");
120
+ addTokens(cwd, Math.ceil(messageText.length / 4));
121
+ // Budget guards — silent
122
+ const flowCount = goal.completedFlows.length;
123
+ const overTokens = goal.maxTokens !== undefined && goal.totalTokens >= goal.maxTokens;
124
+ const overFlows = goal.maxFlows !== undefined && flowCount >= goal.maxFlows;
125
+ // Budget guards — actually pause when exceeded
126
+ if (overTokens || overFlows) {
127
+ updateGoalStatus(cwd, "paused");
128
+ const pausedPrompt = budgetLimitTemplate
129
+ .replace("{{objective}}", goal.objective)
130
+ .replace("{{totalTokens}}", String(goal.totalTokens))
131
+ .replace("{{maxTokens}}", String(goal.maxTokens ?? "unlimited"))
132
+ .replace("{{flowCount}}", String(flowCount))
133
+ .replace("{{maxFlows}}", String(goal.maxFlows ?? "unlimited"));
134
+ pi.sendMessage({ content: pausedPrompt, display: false }, { triggerTurn: true });
135
+ return;
136
+ }
137
+ // Build a continuation prompt with goal context
138
+ const maxFlowsClause = goal.maxFlows !== undefined ? `/${goal.maxFlows}` : '';
139
+ const tokenInfo = `${goal.totalTokens}${goal.maxTokens !== undefined ? `/${goal.maxTokens}` : ''}`;
140
+ const acceptanceClause = goal.acceptance ? `\nAcceptance: ${goal.acceptance}` : '';
141
+ const continuationPrompt = continuationPromptTemplate
142
+ .replace('{{objective}}', goal.objective)
143
+ .replace('{{acceptanceClause}}', acceptanceClause)
144
+ .replace('{{flowCount}}', String(flowCount))
145
+ .replace('{{maxFlowsClause}}', maxFlowsClause)
146
+ .replace('{{tokenInfo}}', tokenInfo)
147
+ .replace('{{userMessage}}', messageText);
148
+ pi.sendMessage({ content: continuationPrompt, display: false }, { triggerTurn: true });
149
+ });
150
+ }
151
+ //# sourceMappingURL=continuation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"continuation.js","sourceRoot":"","sources":["../../src/flow/continuation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Flow goal module — barrel export and registration entry point.
3
+ */
4
+ import type { ExtensionAPI } from "@mariozechner/pi-coding-agent";
5
+ import { setupFlowCommand } from "./command.js";
6
+ import { setupWarpCommand } from "./warp-command.js";
7
+ import { setupContinuation } from "./continuation.js";
8
+ import * as sessionRegistry from "../core/session-registry.js";
9
+ export type { GoalState, GoalEntry, GoalStatus, GoalContext, } from "./types.js";
10
+ export { getGoal, getGoalForSession, setGoal, clearGoal, updateGoalStatus, updateGoalObjective, recordFlowCompletion, addTokens, } from "./store.js";
11
+ export { setupFlowCommand, setupContinuation, setupWarpCommand };
12
+ export { markFlowCompleted, shutdownWakeup } from "./continuation.js";
13
+ export { sessionRegistry };
14
+ export declare function registerFlow(pi: ExtensionAPI): void;
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/flow/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,+BAA+B,CAAC;AAEpF,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,OAAO,KAAK,eAAe,MAAM,6BAA6B,CAAC;AAE/D,YAAY,EACV,SAAS,EACT,SAAS,EACT,UAAU,EACV,WAAW,GACZ,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,OAAO,EACP,iBAAiB,EACjB,OAAO,EACP,SAAS,EACT,gBAAgB,EAChB,mBAAmB,EACnB,oBAAoB,EACpB,SAAS,GACV,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,CAAC;AAE3B,wBAAgB,YAAY,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CASnD"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Flow goal module — barrel export and registration entry point.
3
+ */
4
+ import { setupFlowCommand } from "./command.js";
5
+ import { setupSettingsCommand } from "./settings-command.js";
6
+ import { setupWarpCommand } from "./warp-command.js";
7
+ import { setupContinuation } from "./continuation.js";
8
+ import * as sessionRegistry from "../core/session-registry.js";
9
+ export { getGoal, getGoalForSession, setGoal, clearGoal, updateGoalStatus, updateGoalObjective, recordFlowCompletion, addTokens, } from "./store.js";
10
+ export { setupFlowCommand, setupContinuation, setupWarpCommand };
11
+ export { markFlowCompleted, shutdownWakeup } from "./continuation.js";
12
+ export { sessionRegistry };
13
+ export function registerFlow(pi) {
14
+ pi.on("session_start", (_event, ctx) => {
15
+ sessionRegistry.register(ctx.cwd, ctx.sessionManager.getSessionId());
16
+ });
17
+ setupFlowCommand(pi);
18
+ setupSettingsCommand(pi);
19
+ setupWarpCommand(pi);
20
+ setupContinuation(pi);
21
+ }
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/flow/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,OAAO,KAAK,eAAe,MAAM,6BAA6B,CAAC;AAS/D,OAAO,EACL,OAAO,EACP,iBAAiB,EACjB,OAAO,EACP,SAAS,EACT,gBAAgB,EAChB,mBAAmB,EACnB,oBAAoB,EACpB,SAAS,GACV,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,CAAC;AAE3B,MAAM,UAAU,YAAY,CAAC,EAAgB;IAC3C,EAAE,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,MAAM,EAAE,GAAqB,EAAE,EAAE;QACvD,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,gBAAgB,CAAC,EAAE,CAAC,CAAC;IACrB,oBAAoB,CAAC,EAAE,CAAC,CAAC;IACzB,gBAAgB,CAAC,EAAE,CAAC,CAAC;IACrB,iBAAiB,CAAC,EAAE,CAAC,CAAC;AACxB,CAAC"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * /flow:settings slash command registration.
3
+ *
4
+ * Subcommands: steering, strategic-hint, animation, glitch,
5
+ * tool-optimize, structured-output, session-mode, max-concurrency, reset
6
+ *
7
+ * When called with no arguments, opens an interactive TUI overlay.
8
+ */
9
+ import type { ExtensionAPI } from "@mariozechner/pi-coding-agent";
10
+ import { type Component, type KeybindingsManager } from "@mariozechner/pi-tui";
11
+ export interface SettingItem {
12
+ id: string;
13
+ label: string;
14
+ description?: string;
15
+ currentValue: string;
16
+ values?: string[];
17
+ submenu?: (currentValue: string, done: (selectedValue?: string) => void) => Component;
18
+ editable?: boolean;
19
+ }
20
+ export interface SettingsListTheme {
21
+ label: (text: string, selected: boolean) => string;
22
+ value: (text: string, selected: boolean) => string;
23
+ description: (text: string) => string;
24
+ cursor: string;
25
+ hint: (text: string) => string;
26
+ }
27
+ export declare class SettingsList implements Component {
28
+ private items;
29
+ private theme;
30
+ private selectedIndex;
31
+ private maxVisible;
32
+ private onChange;
33
+ private onCancel;
34
+ private keybindings;
35
+ private submenuComponent;
36
+ private submenuItemIndex;
37
+ constructor(items: SettingItem[], maxVisible: number, theme: SettingsListTheme, keybindings: KeybindingsManager, onChange: (id: string, newValue: string) => void, onCancel: () => void);
38
+ updateValue(id: string, newValue: string): void;
39
+ invalidate(): void;
40
+ render(width: number): string[];
41
+ private renderMainList;
42
+ handleInput(data: string): void;
43
+ private stepValue;
44
+ private activateItem;
45
+ private closeSubmenu;
46
+ private formatOptionsInline;
47
+ private openSubmenu;
48
+ private addHintLine;
49
+ }
50
+ export declare function setupSettingsCommand(pi: ExtensionAPI): void;
51
+ //# sourceMappingURL=settings-command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings-command.d.ts","sourceRoot":"","sources":["../../src/flow/settings-command.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAkC,MAAM,+BAA+B,CAAC;AAKlG,OAAO,EAEN,KAAK,SAAS,EAEd,KAAK,kBAAkB,EAUvB,MAAM,sBAAsB,CAAC;AAW9B,MAAM,WAAW,WAAW;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,aAAa,CAAC,EAAE,MAAM,KAAK,IAAI,KAAK,SAAS,CAAC;IACtF,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IACjC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,KAAK,MAAM,CAAC;IACnD,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,KAAK,MAAM,CAAC;IACnD,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CAC/B;AAED,qBAAa,YAAa,YAAW,SAAS;IAC7C,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,KAAK,CAAoB;IACjC,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAyC;IACzD,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,gBAAgB,CAA0B;IAClD,OAAO,CAAC,gBAAgB,CAAuB;gBAG9C,KAAK,EAAE,WAAW,EAAE,EACpB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,iBAAiB,EACxB,WAAW,EAAE,kBAAkB,EAC/B,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,EAChD,QAAQ,EAAE,MAAM,IAAI;IAUrB,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAO/C,UAAU,IAAI,IAAI;IAIlB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IAO/B,OAAO,CAAC,cAAc;IAkEtB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IA4B/B,OAAO,CAAC,SAAS;IAcjB,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,mBAAmB;IAU3B,OAAO,CAAC,WAAW;IAYnB,OAAO,CAAC,WAAW;CAInB;AA2TD,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAmZ3D"}