pi-agent-flow 1.8.40 → 2.0.1

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 (331) hide show
  1. package/README.md +33 -37
  2. package/agents/audit.md +21 -22
  3. package/agents/build.md +23 -22
  4. package/agents/craft.md +23 -27
  5. package/agents/debug.md +24 -28
  6. package/agents/ideas.md +21 -101
  7. package/agents/scout.md +20 -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 +30 -7
  11. package/dist/batch/batch-bash.js.map +1 -1
  12. package/dist/batch/constants.d.ts +31 -5
  13. package/dist/batch/constants.d.ts.map +1 -1
  14. package/dist/batch/constants.js +50 -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 +210 -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/shell-compress.d.ts +25 -0
  32. package/dist/batch/shell-compress.d.ts.map +1 -0
  33. package/dist/batch/shell-compress.js +602 -0
  34. package/dist/batch/shell-compress.js.map +1 -0
  35. package/dist/batch/summary.d.ts +5 -0
  36. package/dist/batch/summary.d.ts.map +1 -0
  37. package/dist/batch/summary.js +101 -0
  38. package/dist/batch/summary.js.map +1 -0
  39. package/dist/batch/symbols.d.ts.map +1 -1
  40. package/dist/batch/symbols.js +12 -7
  41. package/dist/batch/symbols.js.map +1 -1
  42. package/dist/{config.d.ts → config/config.d.ts} +39 -2
  43. package/dist/config/config.d.ts.map +1 -0
  44. package/dist/{config.js → config/config.js} +220 -9
  45. package/dist/config/config.js.map +1 -0
  46. package/dist/config/log.d.ts +27 -0
  47. package/dist/config/log.d.ts.map +1 -0
  48. package/dist/config/log.js +104 -0
  49. package/dist/config/log.js.map +1 -0
  50. package/dist/config/models.d.ts +2 -0
  51. package/dist/config/models.d.ts.map +1 -0
  52. package/dist/config/models.js +49 -0
  53. package/dist/config/models.js.map +1 -0
  54. package/dist/{settings-resolver.d.ts → config/settings-resolver.d.ts} +9 -2
  55. package/dist/config/settings-resolver.d.ts.map +1 -0
  56. package/dist/config/settings-resolver.js +275 -0
  57. package/dist/config/settings-resolver.js.map +1 -0
  58. package/dist/core/agents.d.ts.map +1 -0
  59. package/dist/{agents.js → core/agents.js} +13 -12
  60. package/dist/core/agents.js.map +1 -0
  61. package/dist/core/delegation.d.ts +24 -0
  62. package/dist/core/delegation.d.ts.map +1 -0
  63. package/dist/core/delegation.js +48 -0
  64. package/dist/core/delegation.js.map +1 -0
  65. package/dist/core/depth.d.ts.map +1 -0
  66. package/dist/{depth.js → core/depth.js} +9 -8
  67. package/dist/core/depth.js.map +1 -0
  68. package/dist/{executor.d.ts → core/executor.d.ts} +18 -3
  69. package/dist/core/executor.d.ts.map +1 -0
  70. package/dist/{executor.js → core/executor.js} +53 -14
  71. package/dist/core/executor.js.map +1 -0
  72. package/dist/{flow.d.ts → core/flow.d.ts} +13 -1
  73. package/dist/core/flow.d.ts.map +1 -0
  74. package/dist/{flow.js → core/flow.js} +125 -64
  75. package/dist/core/flow.js.map +1 -0
  76. package/dist/{session-mode.d.ts → core/session-mode.d.ts} +2 -1
  77. package/dist/core/session-mode.d.ts.map +1 -0
  78. package/dist/{session-mode.js → core/session-mode.js} +2 -1
  79. package/dist/core/session-mode.js.map +1 -0
  80. package/dist/core/session-registry.d.ts +16 -0
  81. package/dist/core/session-registry.d.ts.map +1 -0
  82. package/dist/core/session-registry.js +30 -0
  83. package/dist/core/session-registry.js.map +1 -0
  84. package/dist/core/transitions.d.ts.map +1 -0
  85. package/dist/{transitions.js → core/transitions.js} +1 -1
  86. package/dist/core/transitions.js.map +1 -0
  87. package/dist/flow/auto-warp.d.ts +12 -0
  88. package/dist/flow/auto-warp.d.ts.map +1 -0
  89. package/dist/flow/auto-warp.js +29 -0
  90. package/dist/flow/auto-warp.js.map +1 -0
  91. package/dist/flow/command.d.ts +8 -0
  92. package/dist/flow/command.d.ts.map +1 -0
  93. package/dist/flow/command.js +194 -0
  94. package/dist/flow/command.js.map +1 -0
  95. package/dist/flow/continuation.d.ts +16 -0
  96. package/dist/flow/continuation.d.ts.map +1 -0
  97. package/dist/flow/continuation.js +188 -0
  98. package/dist/flow/continuation.js.map +1 -0
  99. package/dist/flow/index.d.ts +18 -0
  100. package/dist/flow/index.d.ts.map +1 -0
  101. package/dist/flow/index.js +25 -0
  102. package/dist/flow/index.js.map +1 -0
  103. package/dist/flow/loop-command.d.ts +8 -0
  104. package/dist/flow/loop-command.d.ts.map +1 -0
  105. package/dist/flow/loop-command.js +99 -0
  106. package/dist/flow/loop-command.js.map +1 -0
  107. package/dist/flow/loop-templates.d.ts +7 -0
  108. package/dist/flow/loop-templates.d.ts.map +1 -0
  109. package/dist/flow/loop-templates.js +38 -0
  110. package/dist/flow/loop-templates.js.map +1 -0
  111. package/dist/flow/loop.d.ts +19 -0
  112. package/dist/flow/loop.d.ts.map +1 -0
  113. package/dist/flow/loop.js +95 -0
  114. package/dist/flow/loop.js.map +1 -0
  115. package/dist/flow/perform-warp.d.ts +28 -0
  116. package/dist/flow/perform-warp.d.ts.map +1 -0
  117. package/dist/flow/perform-warp.js +127 -0
  118. package/dist/flow/perform-warp.js.map +1 -0
  119. package/dist/flow/settings-command.d.ts +51 -0
  120. package/dist/flow/settings-command.d.ts.map +1 -0
  121. package/dist/flow/settings-command.js +937 -0
  122. package/dist/flow/settings-command.js.map +1 -0
  123. package/dist/flow/store.d.ts +26 -0
  124. package/dist/flow/store.d.ts.map +1 -0
  125. package/dist/flow/store.js +166 -0
  126. package/dist/flow/store.js.map +1 -0
  127. package/dist/flow/template-shared.d.ts +9 -0
  128. package/dist/flow/template-shared.d.ts.map +1 -0
  129. package/dist/flow/template-shared.js +13 -0
  130. package/dist/flow/template-shared.js.map +1 -0
  131. package/dist/flow/template-strings.d.ts +8 -0
  132. package/dist/flow/template-strings.d.ts.map +1 -0
  133. package/dist/flow/template-strings.js +36 -0
  134. package/dist/flow/template-strings.js.map +1 -0
  135. package/dist/flow/types.d.ts +61 -0
  136. package/dist/flow/types.d.ts.map +1 -0
  137. package/dist/flow/types.js +5 -0
  138. package/dist/flow/types.js.map +1 -0
  139. package/dist/flow/warp-command.d.ts +8 -0
  140. package/dist/flow/warp-command.d.ts.map +1 -0
  141. package/dist/flow/warp-command.js +144 -0
  142. package/dist/flow/warp-command.js.map +1 -0
  143. package/dist/flow/warp-utils.d.ts +11 -0
  144. package/dist/flow/warp-utils.d.ts.map +1 -0
  145. package/dist/flow/warp-utils.js +187 -0
  146. package/dist/flow/warp-utils.js.map +1 -0
  147. package/dist/index.d.ts +4 -1
  148. package/dist/index.d.ts.map +1 -1
  149. package/dist/index.js +115 -31
  150. package/dist/index.js.map +1 -1
  151. package/dist/{notify-state.d.ts → notify/notify-state.d.ts} +2 -1
  152. package/dist/notify/notify-state.d.ts.map +1 -0
  153. package/dist/notify/notify-state.js.map +1 -0
  154. package/dist/notify/notify.d.ts.map +1 -0
  155. package/dist/{notify.js → notify/notify.js} +3 -2
  156. package/dist/notify/notify.js.map +1 -0
  157. package/dist/{cli-args.d.ts → snapshot/cli-args.d.ts} +4 -2
  158. package/dist/snapshot/cli-args.d.ts.map +1 -0
  159. package/dist/{cli-args.js → snapshot/cli-args.js} +13 -1
  160. package/dist/snapshot/cli-args.js.map +1 -0
  161. package/dist/snapshot/index.d.ts +2 -0
  162. package/dist/snapshot/index.d.ts.map +1 -0
  163. package/dist/snapshot/index.js +2 -0
  164. package/dist/snapshot/index.js.map +1 -0
  165. package/dist/{reasoning-strip.d.ts → snapshot/reasoning-strip.d.ts} +0 -4
  166. package/dist/snapshot/reasoning-strip.d.ts.map +1 -0
  167. package/dist/{reasoning-strip.js → snapshot/reasoning-strip.js} +2 -2
  168. package/dist/snapshot/reasoning-strip.js.map +1 -0
  169. package/dist/snapshot/runner-events.d.ts.map +1 -0
  170. package/dist/{runner-events.js → snapshot/runner-events.js} +1 -1
  171. package/dist/snapshot/runner-events.js.map +1 -0
  172. package/dist/{snapshot.d.ts → snapshot/snapshot.d.ts} +24 -18
  173. package/dist/snapshot/snapshot.d.ts.map +1 -0
  174. package/dist/snapshot/snapshot.js +1791 -0
  175. package/dist/snapshot/snapshot.js.map +1 -0
  176. package/dist/{structured-output.d.ts → snapshot/structured-output.d.ts} +1 -1
  177. package/dist/snapshot/structured-output.d.ts.map +1 -0
  178. package/dist/snapshot/structured-output.js.map +1 -0
  179. package/dist/{flow-prompt.d.ts → steering/flow-prompt.d.ts} +2 -2
  180. package/dist/steering/flow-prompt.d.ts.map +1 -0
  181. package/dist/{flow-prompt.js → steering/flow-prompt.js} +1 -1
  182. package/dist/steering/flow-prompt.js.map +1 -0
  183. package/dist/{sliding-prompt.d.ts → steering/sliding-prompt.d.ts} +8 -7
  184. package/dist/steering/sliding-prompt.d.ts.map +1 -0
  185. package/dist/{sliding-prompt.js → steering/sliding-prompt.js} +18 -64
  186. package/dist/steering/sliding-prompt.js.map +1 -0
  187. package/dist/{tool-utils.d.ts → steering/tool-utils.d.ts} +1 -0
  188. package/dist/steering/tool-utils.d.ts.map +1 -0
  189. package/dist/{tool-utils.js → steering/tool-utils.js} +10 -3
  190. package/dist/steering/tool-utils.js.map +1 -0
  191. package/dist/{ask-user.d.ts → tools/ask-user.d.ts} +3 -15
  192. package/dist/tools/ask-user.d.ts.map +1 -0
  193. package/dist/tools/ask-user.js +778 -0
  194. package/dist/tools/ask-user.js.map +1 -0
  195. package/dist/{timed-bash.d.ts → tools/timed-bash.d.ts} +2 -7
  196. package/dist/tools/timed-bash.d.ts.map +1 -0
  197. package/dist/{timed-bash.js → tools/timed-bash.js} +11 -2
  198. package/dist/tools/timed-bash.js.map +1 -0
  199. package/dist/{web-tool.d.ts → tools/web-tool.d.ts} +1 -1
  200. package/dist/tools/web-tool.d.ts.map +1 -0
  201. package/dist/{web-tool.js → tools/web-tool.js} +8 -7
  202. package/dist/tools/web-tool.js.map +1 -0
  203. package/dist/tui/flow-colors.d.ts +55 -0
  204. package/dist/tui/flow-colors.d.ts.map +1 -0
  205. package/dist/tui/flow-colors.js +22 -0
  206. package/dist/tui/flow-colors.js.map +1 -0
  207. package/dist/{render-utils.d.ts → tui/render-utils.d.ts} +6 -2
  208. package/dist/tui/render-utils.d.ts.map +1 -0
  209. package/dist/{render-utils.js → tui/render-utils.js} +40 -12
  210. package/dist/tui/render-utils.js.map +1 -0
  211. package/dist/tui/render.d.ts +21 -0
  212. package/dist/tui/render.d.ts.map +1 -0
  213. package/dist/tui/render.js +786 -0
  214. package/dist/tui/render.js.map +1 -0
  215. package/dist/tui/scramble/algorithm.d.ts +7 -0
  216. package/dist/tui/scramble/algorithm.d.ts.map +1 -0
  217. package/dist/tui/scramble/algorithm.js +227 -0
  218. package/dist/tui/scramble/algorithm.js.map +1 -0
  219. package/dist/tui/scramble/constants.d.ts +99 -0
  220. package/dist/tui/scramble/constants.d.ts.map +1 -0
  221. package/dist/tui/scramble/constants.js +101 -0
  222. package/dist/tui/scramble/constants.js.map +1 -0
  223. package/dist/tui/scramble/index.d.ts +6 -0
  224. package/dist/tui/scramble/index.d.ts.map +1 -0
  225. package/dist/tui/scramble/index.js +6 -0
  226. package/dist/tui/scramble/index.js.map +1 -0
  227. package/dist/tui/scramble/manager.d.ts +44 -0
  228. package/dist/tui/scramble/manager.d.ts.map +1 -0
  229. package/dist/tui/scramble/manager.js +899 -0
  230. package/dist/tui/scramble/manager.js.map +1 -0
  231. package/dist/tui/scramble/utils.d.ts +18 -0
  232. package/dist/tui/scramble/utils.d.ts.map +1 -0
  233. package/dist/tui/scramble/utils.js +145 -0
  234. package/dist/tui/scramble/utils.js.map +1 -0
  235. package/dist/tui/single-select-layout.d.ts +17 -0
  236. package/dist/tui/single-select-layout.d.ts.map +1 -0
  237. package/dist/{single-select-layout.js → tui/single-select-layout.js} +8 -25
  238. package/dist/tui/single-select-layout.js.map +1 -0
  239. package/dist/types/flow.d.ts +112 -0
  240. package/dist/types/flow.d.ts.map +1 -0
  241. package/dist/{types.js → types/flow.js} +3 -54
  242. package/dist/types/flow.js.map +1 -0
  243. package/dist/types/index.d.ts +8 -0
  244. package/dist/types/index.d.ts.map +1 -0
  245. package/dist/types/index.js +7 -0
  246. package/dist/types/index.js.map +1 -0
  247. package/dist/types/output.d.ts +110 -0
  248. package/dist/types/output.d.ts.map +1 -0
  249. package/dist/types/output.js +5 -0
  250. package/dist/types/output.js.map +1 -0
  251. package/dist/types/ui.d.ts +24 -0
  252. package/dist/types/ui.d.ts.map +1 -0
  253. package/dist/types/ui.js +55 -0
  254. package/dist/types/ui.js.map +1 -0
  255. package/package.json +1 -1
  256. package/dist/agents.d.ts.map +0 -1
  257. package/dist/agents.js.map +0 -1
  258. package/dist/ask-user.d.ts.map +0 -1
  259. package/dist/ask-user.js +0 -1405
  260. package/dist/ask-user.js.map +0 -1
  261. package/dist/batch.d.ts +0 -12
  262. package/dist/batch.d.ts.map +0 -1
  263. package/dist/batch.js +0 -11
  264. package/dist/batch.js.map +0 -1
  265. package/dist/cli-args.d.ts.map +0 -1
  266. package/dist/cli-args.js.map +0 -1
  267. package/dist/config.d.ts.map +0 -1
  268. package/dist/config.js.map +0 -1
  269. package/dist/depth.d.ts.map +0 -1
  270. package/dist/depth.js.map +0 -1
  271. package/dist/executor.d.ts.map +0 -1
  272. package/dist/executor.js.map +0 -1
  273. package/dist/flow-prompt.d.ts.map +0 -1
  274. package/dist/flow-prompt.js.map +0 -1
  275. package/dist/flow.d.ts.map +0 -1
  276. package/dist/flow.js.map +0 -1
  277. package/dist/notify-state.d.ts.map +0 -1
  278. package/dist/notify-state.js.map +0 -1
  279. package/dist/notify.d.ts.map +0 -1
  280. package/dist/notify.js.map +0 -1
  281. package/dist/reasoning-strip.d.ts.map +0 -1
  282. package/dist/reasoning-strip.js.map +0 -1
  283. package/dist/render-utils.d.ts.map +0 -1
  284. package/dist/render-utils.js.map +0 -1
  285. package/dist/render.d.ts +0 -24
  286. package/dist/render.d.ts.map +0 -1
  287. package/dist/render.js +0 -592
  288. package/dist/render.js.map +0 -1
  289. package/dist/runner-events.d.ts.map +0 -1
  290. package/dist/runner-events.js.map +0 -1
  291. package/dist/scramble.d.ts +0 -183
  292. package/dist/scramble.d.ts.map +0 -1
  293. package/dist/scramble.js +0 -2478
  294. package/dist/scramble.js.map +0 -1
  295. package/dist/session-mode.d.ts.map +0 -1
  296. package/dist/session-mode.js.map +0 -1
  297. package/dist/settings-resolver.d.ts.map +0 -1
  298. package/dist/settings-resolver.js +0 -148
  299. package/dist/settings-resolver.js.map +0 -1
  300. package/dist/single-select-layout.d.ts +0 -20
  301. package/dist/single-select-layout.d.ts.map +0 -1
  302. package/dist/single-select-layout.js.map +0 -1
  303. package/dist/sliding-prompt.d.ts.map +0 -1
  304. package/dist/sliding-prompt.js.map +0 -1
  305. package/dist/snapshot.d.ts.map +0 -1
  306. package/dist/snapshot.js +0 -797
  307. package/dist/snapshot.js.map +0 -1
  308. package/dist/spec-mode.d.ts +0 -13
  309. package/dist/spec-mode.d.ts.map +0 -1
  310. package/dist/spec-mode.js +0 -90
  311. package/dist/spec-mode.js.map +0 -1
  312. package/dist/structured-output.d.ts.map +0 -1
  313. package/dist/structured-output.js.map +0 -1
  314. package/dist/timed-bash.d.ts.map +0 -1
  315. package/dist/timed-bash.js.map +0 -1
  316. package/dist/tool-utils.d.ts.map +0 -1
  317. package/dist/tool-utils.js.map +0 -1
  318. package/dist/transitions.d.ts.map +0 -1
  319. package/dist/transitions.js.map +0 -1
  320. package/dist/types.d.ts +0 -224
  321. package/dist/types.d.ts.map +0 -1
  322. package/dist/types.js.map +0 -1
  323. package/dist/web-tool.d.ts.map +0 -1
  324. package/dist/web-tool.js.map +0 -1
  325. /package/dist/{agents.d.ts → core/agents.d.ts} +0 -0
  326. /package/dist/{depth.d.ts → core/depth.d.ts} +0 -0
  327. /package/dist/{transitions.d.ts → core/transitions.d.ts} +0 -0
  328. /package/dist/{notify-state.js → notify/notify-state.js} +0 -0
  329. /package/dist/{notify.d.ts → notify/notify.d.ts} +0 -0
  330. /package/dist/{runner-events.d.ts → snapshot/runner-events.d.ts} +0 -0
  331. /package/dist/{structured-output.js → snapshot/structured-output.js} +0 -0
@@ -0,0 +1,194 @@
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
+ import { getLoop, terminateLoop } from "./loop.js";
8
+ function formatGoal(entry) {
9
+ const lines = [
10
+ `**ID:** ${entry.id}`,
11
+ `**Objective:** ${entry.objective}`,
12
+ `**Status:** ${entry.status}`,
13
+ `**Created:** ${entry.createdAt}`,
14
+ `**Updated:** ${entry.updatedAt}`,
15
+ ];
16
+ if (entry.acceptance)
17
+ lines.push(`**Acceptance:** ${entry.acceptance}`);
18
+ if (entry.maxTokens !== undefined)
19
+ lines.push(`**Token budget:** ${entry.totalTokens}/${entry.maxTokens}`);
20
+ if (entry.maxFlows !== undefined)
21
+ lines.push(`**Flow budget:** ${entry.completedFlows.length}/${entry.maxFlows}`);
22
+ if (entry.completedFlows.length > 0) {
23
+ lines.push(`**Completed flows:**`);
24
+ for (const f of entry.completedFlows) {
25
+ lines.push(` - [${f.type}] ${f.aim}`);
26
+ }
27
+ }
28
+ return lines.join("\n");
29
+ }
30
+ export function setupFlowCommand(pi) {
31
+ pi.registerCommand("flow:goal", {
32
+ 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",
33
+ handler: async (args, ctx) => {
34
+ const trimmed = args.trim();
35
+ const firstSpace = trimmed.indexOf(" ");
36
+ const sub = (firstSpace === -1 ? trimmed : trimmed.slice(0, firstSpace)).toLowerCase();
37
+ const rest = firstSpace === -1 ? "" : trimmed.slice(firstSpace + 1).trim();
38
+ const cwd = ctx.cwd;
39
+ switch (sub) {
40
+ case "set": {
41
+ const acceptanceMatch = rest.match(/--acceptance\s+(.+?)(?=\s+--|$)/);
42
+ const maxTokensMatch = rest.match(/--max-tokens\s+(\d+)/);
43
+ const maxFlowsMatch = rest.match(/--max-flows\s+(\d+)/);
44
+ let objective = rest;
45
+ if (acceptanceMatch)
46
+ objective = objective.replace(acceptanceMatch[0], "").trim();
47
+ if (maxTokensMatch)
48
+ objective = objective.replace(maxTokensMatch[0], "").trim();
49
+ if (maxFlowsMatch)
50
+ objective = objective.replace(maxFlowsMatch[0], "").trim();
51
+ if (!objective) {
52
+ ctx.ui.notify?.("Usage: /flow:goal set <objective> [--acceptance <text>] [--max-tokens <n>] [--max-flows <n>]", "error");
53
+ return;
54
+ }
55
+ const sessionId = ctx.sessionManager.getSessionId();
56
+ const entry = setGoal(cwd, objective, {
57
+ acceptance: acceptanceMatch?.[1],
58
+ maxTokens: maxTokensMatch ? parseInt(maxTokensMatch[1], 10) : undefined,
59
+ maxFlows: maxFlowsMatch ? parseInt(maxFlowsMatch[1], 10) : undefined,
60
+ sessionId,
61
+ });
62
+ ctx.ui.notify?.(`Goal set: ${entry.objective}`, "info");
63
+ const acceptanceLine = entry.acceptance ? `\nAcceptance: ${entry.acceptance}` : '';
64
+ pi.sendMessage({ content: `New goal active. Objective: ${entry.objective}. Call the flow tool with an appropriate type (scout, craft, build, audit, debug, ideas) to start executing.${acceptanceLine}`, display: false }, { triggerTurn: true });
65
+ break;
66
+ }
67
+ case "clear": {
68
+ clearGoal(cwd);
69
+ ctx.ui.notify?.("Goal cleared", "info");
70
+ break;
71
+ }
72
+ case "pause": {
73
+ const currentSessionId = ctx.sessionManager.getSessionId();
74
+ const goal = getGoalForSession(cwd, currentSessionId);
75
+ if (goal) {
76
+ const entry = updateGoalStatus(cwd, "paused");
77
+ if (entry) {
78
+ ctx.ui.notify?.("Goal paused", "info");
79
+ }
80
+ }
81
+ else if (getGoal(cwd)) {
82
+ ctx.ui.notify?.("No active goal in this session to pause", "error");
83
+ }
84
+ else {
85
+ ctx.ui.notify?.("No active goal to pause", "error");
86
+ }
87
+ break;
88
+ }
89
+ case "resume": {
90
+ const sessionId = ctx.sessionManager.getSessionId();
91
+ const current = getGoal(cwd);
92
+ if (!current) {
93
+ ctx.ui.notify?.("No goal to resume", "error");
94
+ break;
95
+ }
96
+ if (current.status === "active") {
97
+ if (current.sessionId && current.sessionId !== sessionId) {
98
+ ctx.ui.notify?.("Goal is already active in another session", "info");
99
+ }
100
+ else {
101
+ ctx.ui.notify?.("Goal is already active", "info");
102
+ }
103
+ break;
104
+ }
105
+ if (current.sessionId && current.sessionId !== sessionId) {
106
+ ctx.ui.notify?.("Resuming goal from another session — it will be rebound to this session.", "warning");
107
+ }
108
+ const entry = updateGoalStatus(cwd, "active", sessionId);
109
+ if (entry) {
110
+ ctx.ui.notify?.("Goal resumed", "info");
111
+ const acceptanceLine = entry.acceptance ? `\nAcceptance: ${entry.acceptance}` : '';
112
+ pi.sendMessage({ content: `Goal resumed. Objective: ${entry.objective}. Continue execution by calling the flow tool with an appropriate type (scout, craft, build, audit, debug, ideas).${acceptanceLine}`, display: false }, { triggerTurn: true });
113
+ }
114
+ break;
115
+ }
116
+ case "edit": {
117
+ const acceptanceMatch = rest.match(/--acceptance\s+(.+?)(?=\s+--|$)/);
118
+ let objective = rest;
119
+ if (acceptanceMatch)
120
+ objective = objective.replace(acceptanceMatch[0], "").trim();
121
+ if (!objective) {
122
+ ctx.ui.notify?.("Usage: /flow:goal edit <new-objective> [--acceptance <text>]", "error");
123
+ return;
124
+ }
125
+ const currentSessionId = ctx.sessionManager.getSessionId();
126
+ const previousGoal = getGoalForSession(cwd, currentSessionId);
127
+ if (!previousGoal) {
128
+ if (getGoal(cwd)) {
129
+ ctx.ui.notify?.("No active goal in this session to edit", "error");
130
+ }
131
+ else {
132
+ ctx.ui.notify?.("No active goal to edit", "error");
133
+ }
134
+ return;
135
+ }
136
+ const previousObjective = previousGoal.objective;
137
+ const entry = updateGoalObjective(cwd, objective, acceptanceMatch?.[1]);
138
+ if (entry) {
139
+ ctx.ui.notify?.(`Goal updated: ${entry.objective}`, "info");
140
+ const acceptanceLine = entry.acceptance ? `\nAcceptance: ${entry.acceptance}` : '';
141
+ 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 });
142
+ }
143
+ else {
144
+ ctx.ui.notify?.("No active goal to edit", "error");
145
+ }
146
+ break;
147
+ }
148
+ case "status":
149
+ case "show": {
150
+ const currentSessionId = ctx.sessionManager.getSessionId();
151
+ const entry = getGoalForSession(cwd, currentSessionId);
152
+ if (entry) {
153
+ ctx.ui.notify?.(formatGoal(entry), "info");
154
+ }
155
+ else {
156
+ const anyGoal = getGoal(cwd);
157
+ if (anyGoal) {
158
+ ctx.ui.notify?.(formatGoal(anyGoal) + "\n\n(belongs to another session)", "info");
159
+ }
160
+ else {
161
+ ctx.ui.notify?.("No active goal", "info");
162
+ }
163
+ }
164
+ break;
165
+ }
166
+ case "complete": {
167
+ const currentSessionId = ctx.sessionManager.getSessionId();
168
+ const goal = getGoalForSession(cwd, currentSessionId);
169
+ if (goal) {
170
+ const entry = updateGoalStatus(cwd, "completed");
171
+ if (entry) {
172
+ ctx.ui.notify?.("Goal marked as completed", "info");
173
+ const loop = getLoop(cwd);
174
+ if (loop && loop.status !== "terminated") {
175
+ terminateLoop(cwd, "goal_completed");
176
+ }
177
+ }
178
+ }
179
+ else if (getGoal(cwd)) {
180
+ ctx.ui.notify?.("No active goal in this session to complete", "error");
181
+ }
182
+ else {
183
+ ctx.ui.notify?.("No active goal to complete", "error");
184
+ }
185
+ break;
186
+ }
187
+ default: {
188
+ ctx.ui.notify?.("Unknown subcommand. Usage: /flow:goal {set|clear|pause|resume|complete|edit|status|show}", "error");
189
+ }
190
+ }
191
+ },
192
+ });
193
+ }
194
+ //# 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;AAuClG;;;;;;;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,CA4IxD"}
@@ -0,0 +1,188 @@
1
+ import { getGoal, addTokens, updateGoalStatus } from "./store.js";
2
+ import { budgetLimitTemplate, idleWakeupTemplate, continuationPromptTemplate } from "./template-strings.js";
3
+ import { getLoop } from "./loop.js";
4
+ import { buildAutoWarpPrompt } from "./auto-warp.js";
5
+ import { loopContinuationPromptTemplate, loopWakeupTemplate } from "./loop-templates.js";
6
+ import { logWarn } from '../config/log.js';
7
+ import * as sessionRegistry from '../core/session-registry.js';
8
+ const SPAWN_COOLDOWN_MS = 5000;
9
+ const _lastSpawnAt = new Map();
10
+ /**
11
+ * Post-flow completion hold — gives the user time to read the result before
12
+ * the continuation system triggers the next flow.
13
+ *
14
+ * When a flow finishes, the TUI renders the completed result. If the
15
+ * continuation system immediately spawns the next flow, the completed
16
+ * result scrolls off-screen before the user can read it.
17
+ *
18
+ * This delay is measured from the last flow completion time (tracked via
19
+ * _lastFlowCompleteAt) rather than from _lastSpawnAt, so the hold applies
20
+ * even when the cooldown has already elapsed.
21
+ */
22
+ const FLOW_COMPLETE_HOLD_MS = 3000;
23
+ const _lastFlowCompleteAt = new Map();
24
+ /**
25
+ * Idle wake-up — nudges the orchestrator to keep working when the user
26
+ * has been idle for a long period while a goal is active.
27
+ */
28
+ const IDLE_WAKEUP_MS = typeof process !== "undefined" && process.env.PI_FLOW_IDLE_WAKEUP_MS
29
+ ? parseInt(process.env.PI_FLOW_IDLE_WAKEUP_MS, 10)
30
+ : 600_000;
31
+ const WAKEUP_CHECK_INTERVAL_MS = 60_000;
32
+ const _lastTurnEndAt = new Map();
33
+ let _wakeupInterval;
34
+ /**
35
+ * Mark that a flow just completed. Called by the executor after each flow
36
+ * finishes. The continuation system uses this to enforce the post-completion
37
+ * hold, giving the user time to read the result before the next flow spawns.
38
+ *
39
+ * Per-session tracking prevents one session's flow completion from delaying
40
+ * another session's continuation.
41
+ */
42
+ export function markFlowCompleted(sessionId) {
43
+ if (sessionId) {
44
+ _lastFlowCompleteAt.set(sessionId, Date.now());
45
+ }
46
+ }
47
+ /**
48
+ * Shut down the idle wake-up interval. Call during process exit cleanup.
49
+ */
50
+ export function shutdownWakeup() {
51
+ if (_wakeupInterval) {
52
+ clearInterval(_wakeupInterval);
53
+ _wakeupInterval = undefined;
54
+ }
55
+ }
56
+ export function setupContinuation(pi) {
57
+ pi.on("session_start", (_event, ctx) => {
58
+ sessionRegistry.register(ctx.cwd, ctx.sessionManager.getSessionId());
59
+ _lastTurnEndAt.set(ctx.sessionManager.getSessionId(), Date.now());
60
+ });
61
+ // Idle wake-up: periodically check if the user has been idle while a goal
62
+ // is active, and nudge the orchestrator to keep making progress.
63
+ if (!_wakeupInterval) {
64
+ _wakeupInterval = setInterval(() => {
65
+ const cwd = sessionRegistry.getCwd();
66
+ if (!cwd)
67
+ return;
68
+ const goal = getGoal(cwd);
69
+ if (!goal || goal.status !== "active")
70
+ return;
71
+ const sessionId = goal.sessionId ?? "none";
72
+ // Session guard: only nudge the session that owns the active goal.
73
+ if (sessionId !== "none" && sessionId !== sessionRegistry.getSessionId(cwd)) {
74
+ return;
75
+ }
76
+ const lastActivity = _lastTurnEndAt.get(sessionId);
77
+ if (!lastActivity)
78
+ return;
79
+ const now = Date.now();
80
+ if (now - lastActivity > IDLE_WAKEUP_MS) {
81
+ _lastTurnEndAt.set(sessionId, now);
82
+ const loop = getLoop(cwd);
83
+ const maxFlowsClause = goal.maxFlows !== undefined ? `/${goal.maxFlows}` : '';
84
+ const tokenInfo = `${goal.totalTokens}${goal.maxTokens !== undefined ? `/${goal.maxTokens}` : ''}`;
85
+ const acceptanceClause = goal.acceptance ? `\nAcceptance: ${goal.acceptance}` : '';
86
+ const prompt = (loop?.status === "active")
87
+ ? loopWakeupTemplate
88
+ .replace("{{objective}}", goal.objective)
89
+ .replace("{{acceptanceClause}}", acceptanceClause)
90
+ .replace("{{flowCount}}", String(goal.completedFlows.length))
91
+ .replace("{{maxFlows}}", String(goal.maxFlows ?? "unlimited"))
92
+ .replace("{{totalTokens}}", tokenInfo)
93
+ .replace("{{sessionCount}}", String(loop.sessionCount))
94
+ .replace("{{totalTokensAcrossSessions}}", String(loop.totalTokensAcrossSessions))
95
+ : idleWakeupTemplate
96
+ .replace("{{objective}}", goal.objective)
97
+ .replace("{{acceptanceClause}}", acceptanceClause)
98
+ .replace("{{flowCount}}", String(goal.completedFlows.length))
99
+ .replace("{{maxFlows}}", String(goal.maxFlows ?? "unlimited"))
100
+ .replace("{{totalTokens}}", tokenInfo);
101
+ pi.sendMessage({ content: prompt, display: false }, { triggerTurn: true });
102
+ }
103
+ }, WAKEUP_CHECK_INTERVAL_MS);
104
+ }
105
+ pi.on("turn_end", async (event) => {
106
+ const cwd = sessionRegistry.getCwd();
107
+ if (!cwd)
108
+ return;
109
+ const goal = getGoal(cwd);
110
+ if (!goal || goal.status !== "active")
111
+ return;
112
+ const loop = getLoop(cwd);
113
+ // Guard: if a warp is pending for a different session, skip continuation.
114
+ if (loop?.pendingWarpSessionId && loop.pendingWarpSessionId !== sessionRegistry.getSessionId(cwd)) {
115
+ return;
116
+ }
117
+ // Session guard: only continue goals bound to the current session.
118
+ if (goal.sessionId && goal.sessionId !== sessionRegistry.getSessionId(cwd)) {
119
+ logWarn(`[pi-agent-flow] Continuation skipped: goal session ${goal.sessionId} ≠ active session ${sessionRegistry.getSessionId(cwd) ?? '(none)'}`);
120
+ return;
121
+ }
122
+ const goalSessionId = goal.sessionId ?? "none";
123
+ _lastTurnEndAt.set(goalSessionId, Date.now());
124
+ // Cooldown: don't re-fire within 5 seconds of last spawn for THIS goal's session
125
+ const now = Date.now();
126
+ if (now - (_lastSpawnAt.get(goalSessionId) ?? 0) < SPAWN_COOLDOWN_MS)
127
+ return;
128
+ // Post-completion hold: give the user time to read the flow result
129
+ // before triggering the next flow. This prevents the completed result
130
+ // from scrolling off-screen too fast.
131
+ const lastFlowComplete = _lastFlowCompleteAt.get(goalSessionId);
132
+ if (lastFlowComplete !== undefined && now - lastFlowComplete < FLOW_COMPLETE_HOLD_MS)
133
+ return;
134
+ _lastSpawnAt.set(goalSessionId, now);
135
+ // Track token usage from turn
136
+ const messageText = typeof event.message.content === "string"
137
+ ? event.message.content
138
+ : event.message.content
139
+ .filter((p) => p.type === "text" && typeof p.text === "string")
140
+ .map((p) => p.text)
141
+ .join("");
142
+ addTokens(cwd, Math.ceil(messageText.length / 4));
143
+ // Budget guards — silent
144
+ const flowCount = goal.completedFlows.length;
145
+ const overTokens = goal.maxTokens !== undefined && goal.totalTokens >= goal.maxTokens;
146
+ const overFlows = goal.maxFlows !== undefined && flowCount >= goal.maxFlows;
147
+ // Budget guards — actually pause when exceeded
148
+ if (overTokens || overFlows) {
149
+ if (loop?.status === "active") {
150
+ const warpPrompt = buildAutoWarpPrompt(goal, loop);
151
+ pi.sendMessage({ content: warpPrompt, display: false }, { triggerTurn: true });
152
+ return;
153
+ }
154
+ updateGoalStatus(cwd, "paused");
155
+ const pausedPrompt = budgetLimitTemplate
156
+ .replace("{{objective}}", goal.objective)
157
+ .replace("{{totalTokens}}", String(goal.totalTokens))
158
+ .replace("{{maxTokens}}", String(goal.maxTokens ?? "unlimited"))
159
+ .replace("{{flowCount}}", String(flowCount))
160
+ .replace("{{maxFlows}}", String(goal.maxFlows ?? "unlimited"));
161
+ pi.sendMessage({ content: pausedPrompt, display: false }, { triggerTurn: true });
162
+ return;
163
+ }
164
+ // Build a continuation prompt with goal context
165
+ const maxFlowsClause = goal.maxFlows !== undefined ? `/${goal.maxFlows}` : '';
166
+ const tokenInfo = `${goal.totalTokens}${goal.maxTokens !== undefined ? `/${goal.maxTokens}` : ''}`;
167
+ const acceptanceClause = goal.acceptance ? `\nAcceptance: ${goal.acceptance}` : '';
168
+ const continuationPrompt = (loop?.status === "active")
169
+ ? loopContinuationPromptTemplate
170
+ .replace('{{objective}}', goal.objective)
171
+ .replace('{{acceptanceClause}}', acceptanceClause)
172
+ .replace('{{flowCount}}', String(flowCount))
173
+ .replace('{{maxFlowsClause}}', maxFlowsClause)
174
+ .replace('{{tokenInfo}}', tokenInfo)
175
+ .replace('{{userMessage}}', messageText)
176
+ .replace('{{sessionCount}}', String(loop.sessionCount))
177
+ .replace('{{totalTokensAcrossSessions}}', String(loop.totalTokensAcrossSessions))
178
+ : continuationPromptTemplate
179
+ .replace('{{objective}}', goal.objective)
180
+ .replace('{{acceptanceClause}}', acceptanceClause)
181
+ .replace('{{flowCount}}', String(flowCount))
182
+ .replace('{{maxFlowsClause}}', maxFlowsClause)
183
+ .replace('{{tokenInfo}}', tokenInfo)
184
+ .replace('{{userMessage}}', messageText);
185
+ pi.sendMessage({ content: continuationPrompt, display: false }, { triggerTurn: true });
186
+ });
187
+ }
188
+ //# sourceMappingURL=continuation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"continuation.js","sourceRoot":"","sources":["../../src/flow/continuation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AAC5G,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,8BAA8B,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzF,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,KAAK,eAAe,MAAM,6BAA6B,CAAC;AAE/D,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAC/B,MAAM,YAAY,GAAG,IAAI,GAAG,EAAkB,CAAC;AAE/C;;;;;;;;;;;GAWG;AACH,MAAM,qBAAqB,GAAG,IAAI,CAAC;AACnC,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAkB,CAAC;AAEtD;;;GAGG;AACH,MAAM,cAAc,GAClB,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,sBAAsB;IAClE,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,EAAE,CAAC;IAClD,CAAC,CAAC,OAAO,CAAC;AACd,MAAM,wBAAwB,GAAG,MAAM,CAAC;AACxC,MAAM,cAAc,GAAG,IAAI,GAAG,EAAkB,CAAC;AACjD,IAAI,eAA2D,CAAC;AAEhE;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAAC,SAAkB;IAClD,IAAI,SAAS,EAAE,CAAC;QACd,mBAAmB,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACjD,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc;IAC5B,IAAI,eAAe,EAAE,CAAC;QACpB,aAAa,CAAC,eAAe,CAAC,CAAC;QAC/B,eAAe,GAAG,SAAS,CAAC;IAC9B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,EAAgB;IAChD,EAAE,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;QACrC,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC,CAAC;QACrE,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,YAAY,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,0EAA0E;IAC1E,iEAAiE;IACjE,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,eAAe,GAAG,WAAW,CAAC,GAAG,EAAE;YACjC,MAAM,GAAG,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC;YACrC,IAAI,CAAC,GAAG;gBAAE,OAAO;YACjB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;YAC1B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ;gBAAE,OAAO;YAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC;YAC3C,mEAAmE;YACnE,IAAI,SAAS,KAAK,MAAM,IAAI,SAAS,KAAK,eAAe,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC5E,OAAO;YACT,CAAC;YACD,MAAM,YAAY,GAAG,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACnD,IAAI,CAAC,YAAY;gBAAE,OAAO;YAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,IAAI,GAAG,GAAG,YAAY,GAAG,cAAc,EAAE,CAAC;gBACxC,cAAc,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;gBACnC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;gBAC1B,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC9E,MAAM,SAAS,GAAG,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;gBACnG,MAAM,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,iBAAiB,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnF,MAAM,MAAM,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,QAAQ,CAAC;oBACxC,CAAC,CAAC,kBAAkB;yBACf,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC;yBACxC,OAAO,CAAC,sBAAsB,EAAE,gBAAgB,CAAC;yBACjD,OAAO,CAAC,eAAe,EAAE,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;yBAC5D,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,WAAW,CAAC,CAAC;yBAC7D,OAAO,CAAC,iBAAiB,EAAE,SAAS,CAAC;yBACrC,OAAO,CAAC,kBAAkB,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;yBACtD,OAAO,CAAC,+BAA+B,EAAE,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;oBACrF,CAAC,CAAC,kBAAkB;yBACf,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC;yBACxC,OAAO,CAAC,sBAAsB,EAAE,gBAAgB,CAAC;yBACjD,OAAO,CAAC,eAAe,EAAE,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;yBAC5D,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,WAAW,CAAC,CAAC;yBAC7D,OAAO,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAC;gBAC7C,EAAE,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;YAC7E,CAAC;QACH,CAAC,EAAE,wBAAwB,CAAC,CAAC;IAC/B,CAAC;IAED,EAAE,CAAC,EAAE,CAAC,UAAU,EAAE,KAAK,EAAE,KAAmB,EAAE,EAAE;QAC9C,MAAM,GAAG,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC;QACrC,IAAI,CAAC,GAAG;YAAE,OAAO;QAEjB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ;YAAE,OAAO;QAE9C,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC1B,0EAA0E;QAC1E,IAAI,IAAI,EAAE,oBAAoB,IAAI,IAAI,CAAC,oBAAoB,KAAK,eAAe,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;YAClG,OAAO;QACT,CAAC;QAED,mEAAmE;QACnE,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,KAAK,eAAe,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3E,OAAO,CAAC,sDAAsD,IAAI,CAAC,SAAS,qBAAqB,eAAe,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,QAAQ,EAAE,CAAC,CAAC;YAClJ,OAAO;QACT,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC;QAC/C,cAAc,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QAE9C,iFAAiF;QACjF,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,GAAG,iBAAiB;YAAE,OAAO;QAE7E,mEAAmE;QACnE,sEAAsE;QACtE,sCAAsC;QACtC,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAChE,IAAI,gBAAgB,KAAK,SAAS,IAAI,GAAG,GAAG,gBAAgB,GAAG,qBAAqB;YAAE,OAAO;QAE7F,YAAY,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;QAErC,8BAA8B;QAC9B,MAAM,WAAW,GACf,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,KAAK,QAAQ;YACvC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO;YACvB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO;iBAClB,MAAM,CAAC,CAAC,CAAC,EAAuC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC;iBACnG,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;iBAClB,IAAI,CAAC,EAAE,CAAC,CAAC;QAClB,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QAElD,yBAAyB;QACzB,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;QAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,SAAS,CAAC;QACtF,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC;QAE5E,+CAA+C;QAC/C,IAAI,UAAU,IAAI,SAAS,EAAE,CAAC;YAC5B,IAAI,IAAI,EAAE,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC9B,MAAM,UAAU,GAAG,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBACnD,EAAE,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC/E,OAAO;YACT,CAAC;YACD,gBAAgB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;YAChC,MAAM,YAAY,GAAG,mBAAmB;iBACrC,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC;iBACxC,OAAO,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;iBACpD,OAAO,CAAC,eAAe,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,WAAW,CAAC,CAAC;iBAC/D,OAAO,CAAC,eAAe,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;iBAC3C,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,WAAW,CAAC,CAAC,CAAC;YACjE,EAAE,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;YACjF,OAAO;QACT,CAAC;QAED,gDAAgD;QAChD,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9E,MAAM,SAAS,GAAG,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACnG,MAAM,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,iBAAiB,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAEnF,MAAM,kBAAkB,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,QAAQ,CAAC;YACpD,CAAC,CAAC,8BAA8B;iBAC3B,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC;iBACxC,OAAO,CAAC,sBAAsB,EAAE,gBAAgB,CAAC;iBACjD,OAAO,CAAC,eAAe,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;iBAC3C,OAAO,CAAC,oBAAoB,EAAE,cAAc,CAAC;iBAC7C,OAAO,CAAC,eAAe,EAAE,SAAS,CAAC;iBACnC,OAAO,CAAC,iBAAiB,EAAE,WAAW,CAAC;iBACvC,OAAO,CAAC,kBAAkB,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;iBACtD,OAAO,CAAC,+BAA+B,EAAE,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;YACrF,CAAC,CAAC,0BAA0B;iBACvB,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC;iBACxC,OAAO,CAAC,sBAAsB,EAAE,gBAAgB,CAAC;iBACjD,OAAO,CAAC,eAAe,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;iBAC3C,OAAO,CAAC,oBAAoB,EAAE,cAAc,CAAC;iBAC7C,OAAO,CAAC,eAAe,EAAE,SAAS,CAAC;iBACnC,OAAO,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC;QAE/C,EAAE,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;IACzF,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,18 @@
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 { setupLoopCommand } from "./loop-command.js";
8
+ import { setupContinuation } from "./continuation.js";
9
+ import * as sessionRegistry from "../core/session-registry.js";
10
+ export type { GoalState, GoalEntry, GoalStatus, GoalContext, } from "./types.js";
11
+ export type { LoopState, LoopStatus, LoopTerminationReason } from "./types.js";
12
+ export { getGoal, getGoalForSession, setGoal, clearGoal, updateGoalStatus, updateGoalObjective, recordFlowCompletion, addTokens, } from "./store.js";
13
+ export { getLoop, enableLoop, disableLoop, resetLoop, terminateLoop, recordSessionWarp, setPendingWarpSessionId, clearPendingWarpSessionId, } from "./loop.js";
14
+ export { setupFlowCommand, setupContinuation, setupWarpCommand, setupLoopCommand };
15
+ export { markFlowCompleted, shutdownWakeup } from "./continuation.js";
16
+ export { sessionRegistry };
17
+ export declare function registerFlow(pi: ExtensionAPI): void;
18
+ //# 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,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,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAE/E,OAAO,EACL,OAAO,EACP,iBAAiB,EACjB,OAAO,EACP,SAAS,EACT,gBAAgB,EAChB,mBAAmB,EACnB,oBAAoB,EACpB,SAAS,GACV,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,OAAO,EACP,UAAU,EACV,WAAW,EACX,SAAS,EACT,aAAa,EACb,iBAAiB,EACjB,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,CAAC;AACnF,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,CAAC;AAE3B,wBAAgB,YAAY,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAUnD"}
@@ -0,0 +1,25 @@
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 { setupLoopCommand } from "./loop-command.js";
8
+ import { setupContinuation } from "./continuation.js";
9
+ import * as sessionRegistry from "../core/session-registry.js";
10
+ export { getGoal, getGoalForSession, setGoal, clearGoal, updateGoalStatus, updateGoalObjective, recordFlowCompletion, addTokens, } from "./store.js";
11
+ export { getLoop, enableLoop, disableLoop, resetLoop, terminateLoop, recordSessionWarp, setPendingWarpSessionId, clearPendingWarpSessionId, } from "./loop.js";
12
+ export { setupFlowCommand, setupContinuation, setupWarpCommand, setupLoopCommand };
13
+ export { markFlowCompleted, shutdownWakeup } from "./continuation.js";
14
+ export { sessionRegistry };
15
+ export function registerFlow(pi) {
16
+ pi.on("session_start", (_event, ctx) => {
17
+ sessionRegistry.register(ctx.cwd, ctx.sessionManager.getSessionId());
18
+ });
19
+ setupFlowCommand(pi);
20
+ setupSettingsCommand(pi);
21
+ setupWarpCommand(pi);
22
+ setupLoopCommand(pi);
23
+ setupContinuation(pi);
24
+ }
25
+ //# 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,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,OAAO,KAAK,eAAe,MAAM,6BAA6B,CAAC;AAW/D,OAAO,EACL,OAAO,EACP,iBAAiB,EACjB,OAAO,EACP,SAAS,EACT,gBAAgB,EAChB,mBAAmB,EACnB,oBAAoB,EACpB,SAAS,GACV,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,OAAO,EACP,UAAU,EACV,WAAW,EACX,SAAS,EACT,aAAa,EACb,iBAAiB,EACjB,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,CAAC;AACnF,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,gBAAgB,CAAC,EAAE,CAAC,CAAC;IACrB,iBAAiB,CAAC,EAAE,CAAC,CAAC;AACxB,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * /flow:loop slash command registration.
3
+ *
4
+ * Subcommands: enable, disable, status, stop, reset
5
+ */
6
+ import type { ExtensionAPI } from "@mariozechner/pi-coding-agent";
7
+ export declare function setupLoopCommand(pi: ExtensionAPI): void;
8
+ //# sourceMappingURL=loop-command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loop-command.d.ts","sourceRoot":"","sources":["../../src/flow/loop-command.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,YAAY,EAA2B,MAAM,+BAA+B,CAAC;AAuB3F,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CA6EvD"}
@@ -0,0 +1,99 @@
1
+ /**
2
+ * /flow:loop slash command registration.
3
+ *
4
+ * Subcommands: enable, disable, status, stop, reset
5
+ */
6
+ import { getGoal } from "./store.js";
7
+ import { getLoop, enableLoop, disableLoop, resetLoop, terminateLoop, } from "./loop.js";
8
+ function formatLoop(loop) {
9
+ const lines = [
10
+ `**Status:** ${loop.status}`,
11
+ `**Objective:** ${loop.objective}`,
12
+ `**Sessions:** ${loop.sessionCount}`,
13
+ `**Tokens across sessions:** ${loop.totalTokensAcrossSessions}`,
14
+ `**Flows across sessions:** ${loop.totalFlowsAcrossSessions}`,
15
+ ];
16
+ if (loop.terminatedAt)
17
+ lines.push(`**Terminated at:** ${loop.terminatedAt}`);
18
+ if (loop.terminationReason)
19
+ lines.push(`**Termination reason:** ${loop.terminationReason}`);
20
+ return lines.join("\n");
21
+ }
22
+ export function setupLoopCommand(pi) {
23
+ pi.registerCommand("flow:loop", {
24
+ description: "Manage endless loop. Subcommands: enable, disable, status, stop, reset",
25
+ handler: async (args, ctx) => {
26
+ const trimmed = args.trim();
27
+ const firstSpace = trimmed.indexOf(" ");
28
+ const sub = (firstSpace === -1 ? trimmed : trimmed.slice(0, firstSpace)).toLowerCase();
29
+ const rest = firstSpace === -1 ? "" : trimmed.slice(firstSpace + 1).trim();
30
+ const cwd = ctx.cwd;
31
+ switch (sub) {
32
+ case "enable": {
33
+ const goal = getGoal(cwd);
34
+ if (!goal) {
35
+ ctx.ui.notify?.("Cannot enable loop: no active goal. Set a goal first with /flow:goal set.", "error");
36
+ return;
37
+ }
38
+ const objective = rest || goal.objective;
39
+ try {
40
+ const loop = enableLoop(cwd, objective);
41
+ ctx.ui.notify?.(`Loop enabled: ${loop.objective}`, "info");
42
+ }
43
+ catch (err) {
44
+ ctx.ui.notify?.(err instanceof Error ? err.message : "Failed to enable loop", "error");
45
+ }
46
+ break;
47
+ }
48
+ case "disable": {
49
+ const loop = disableLoop(cwd);
50
+ if (loop) {
51
+ ctx.ui.notify?.("Loop disabled", "info");
52
+ }
53
+ else {
54
+ ctx.ui.notify?.("No active loop to disable", "error");
55
+ }
56
+ break;
57
+ }
58
+ case "status": {
59
+ const loop = getLoop(cwd);
60
+ if (loop) {
61
+ ctx.ui.notify?.(formatLoop(loop), "info");
62
+ }
63
+ else {
64
+ ctx.ui.notify?.("No loop active", "info");
65
+ }
66
+ break;
67
+ }
68
+ case "stop": {
69
+ const loop = getLoop(cwd);
70
+ if (!loop) {
71
+ ctx.ui.notify?.("No loop active", "error");
72
+ return;
73
+ }
74
+ if (loop.status === "terminated") {
75
+ ctx.ui.notify?.("Loop already terminated", "info");
76
+ return;
77
+ }
78
+ terminateLoop(cwd, "user_disabled");
79
+ ctx.ui.notify?.("Loop stopped", "info");
80
+ break;
81
+ }
82
+ case "reset": {
83
+ const loop = resetLoop(cwd);
84
+ if (loop) {
85
+ ctx.ui.notify?.("Loop reset", "info");
86
+ }
87
+ else {
88
+ ctx.ui.notify?.("No loop to reset", "error");
89
+ }
90
+ break;
91
+ }
92
+ default: {
93
+ ctx.ui.notify?.("Unknown subcommand. Usage: /flow:loop {enable|disable|status|stop|reset}", "error");
94
+ }
95
+ }
96
+ },
97
+ });
98
+ }
99
+ //# sourceMappingURL=loop-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loop-command.js","sourceRoot":"","sources":["../../src/flow/loop-command.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EACL,OAAO,EACP,UAAU,EACV,WAAW,EACX,SAAS,EACT,aAAa,GACd,MAAM,WAAW,CAAC;AAEnB,SAAS,UAAU,CAAC,IAA6C;IAC/D,MAAM,KAAK,GAAG;QACZ,eAAe,IAAI,CAAC,MAAM,EAAE;QAC5B,kBAAkB,IAAI,CAAC,SAAS,EAAE;QAClC,iBAAiB,IAAI,CAAC,YAAY,EAAE;QACpC,+BAA+B,IAAI,CAAC,yBAAyB,EAAE;QAC/D,8BAA8B,IAAI,CAAC,wBAAwB,EAAE;KAC9D,CAAC;IACF,IAAI,IAAI,CAAC,YAAY;QAAE,KAAK,CAAC,IAAI,CAAC,sBAAsB,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;IAC7E,IAAI,IAAI,CAAC,iBAAiB;QAAE,KAAK,CAAC,IAAI,CAAC,2BAA2B,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAC5F,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,EAAgB;IAC/C,EAAE,CAAC,eAAe,CAAC,WAAW,EAAE;QAC9B,WAAW,EACT,wEAAwE;QAC1E,OAAO,EAAE,KAAK,EAAE,IAAY,EAAE,GAA4B,EAAE,EAAE;YAC5D,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACxC,MAAM,GAAG,GAAG,CAAC,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YACvF,MAAM,IAAI,GAAG,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC3E,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;YAEpB,QAAQ,GAAG,EAAE,CAAC;gBACZ,KAAK,QAAQ,CAAC,CAAC,CAAC;oBACd,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;oBAC1B,IAAI,CAAC,IAAI,EAAE,CAAC;wBACV,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,2EAA2E,EAAE,OAAO,CAAC,CAAC;wBACtG,OAAO;oBACT,CAAC;oBACD,MAAM,SAAS,GAAG,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC;oBACzC,IAAI,CAAC;wBACH,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;wBACxC,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,iBAAiB,IAAI,CAAC,SAAS,EAAE,EAAE,MAAM,CAAC,CAAC;oBAC7D,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,uBAAuB,EAAE,OAAO,CAAC,CAAC;oBACzF,CAAC;oBACD,MAAM;gBACR,CAAC;gBACD,KAAK,SAAS,CAAC,CAAC,CAAC;oBACf,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;oBAC9B,IAAI,IAAI,EAAE,CAAC;wBACT,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;oBAC3C,CAAC;yBAAM,CAAC;wBACN,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,2BAA2B,EAAE,OAAO,CAAC,CAAC;oBACxD,CAAC;oBACD,MAAM;gBACR,CAAC;gBACD,KAAK,QAAQ,CAAC,CAAC,CAAC;oBACd,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;oBAC1B,IAAI,IAAI,EAAE,CAAC;wBACT,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;oBAC5C,CAAC;yBAAM,CAAC;wBACN,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;oBAC5C,CAAC;oBACD,MAAM;gBACR,CAAC;gBACD,KAAK,MAAM,CAAC,CAAC,CAAC;oBACZ,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;oBAC1B,IAAI,CAAC,IAAI,EAAE,CAAC;wBACV,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;wBAC3C,OAAO;oBACT,CAAC;oBACD,IAAI,IAAI,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;wBACjC,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,yBAAyB,EAAE,MAAM,CAAC,CAAC;wBACnD,OAAO;oBACT,CAAC;oBACD,aAAa,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;oBACpC,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;oBACxC,MAAM;gBACR,CAAC;gBACD,KAAK,OAAO,CAAC,CAAC,CAAC;oBACb,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;oBAC5B,IAAI,IAAI,EAAE,CAAC;wBACT,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;oBACxC,CAAC;yBAAM,CAAC;wBACN,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;oBAC/C,CAAC;oBACD,MAAM;gBACR,CAAC;gBACD,OAAO,CAAC,CAAC,CAAC;oBACR,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CACb,0EAA0E,EAC1E,OAAO,CACR,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Runtime template strings for endless loop prompts.
3
+ */
4
+ export declare const autoWarpTriggerTemplate = "<flow-loop-warp>\nThe active goal has exceeded its budget, but the endless loop is active. Call the warp tool to continue in a new session.\n\nObjective: {{objective}}\n{{acceptanceClause}}\nLoop progress: {{sessionCount}} sessions, {{totalFlowsAcrossSessions}} flows, {{totalTokensAcrossSessions}}/{{maxTokens}} tokens.\n\nThe new session should inherit this context and resume work toward the objective.\n</flow-loop-warp>";
5
+ export declare const loopContinuationPromptTemplate = "<flow-continuation>\nContinue execution toward the active goal. This is an endless loop session.\n\nObjective: {{objective}}\n{{acceptanceClause}}\nProgress: {{flowCount}}{{maxFlowsClause}} flows in this session, {{tokenInfo}} tokens.\nLoop overall: {{sessionCount}} sessions, {{totalTokensAcrossSessions}} tokens total.\n\nLatest user message: {{userMessage}}\n\nCall the flow tool with an appropriate type to advance, or call the warp tool to hand off to a fresh session if budget is exceeded. Only the user can end a goal. Keep finding improvements that advance the objective.\n</flow-continuation>";
6
+ export declare const loopWakeupTemplate = "<flow-wakeup>\nThe user has been idle. Review the active goal and find safe, conservative improvements that advance it. This is an endless loop session.\n\nObjective: {{objective}}\n{{acceptanceClause}}\nProgress: {{flowCount}}/{{maxFlows}} flows in this session, {{totalTokens}} tokens.\nLoop overall: {{sessionCount}} sessions, {{totalTokensAcrossSessions}} tokens total.\n\nGuidance:\n- Focus on safe, incremental improvements \u2014 do not refactor large areas or make risky changes.\n- Prefer verification, testing, and documentation over new features.\n- If you find potential issues, investigate with scout or audit before making changes.\n- You cannot end this goal. Only the user can end a goal.\n\nCall the flow tool with the appropriate flow type to continue, or call the warp tool to hand off to a fresh session if budget is exceeded.\n</flow-wakeup>";
7
+ //# sourceMappingURL=loop-templates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loop-templates.d.ts","sourceRoot":"","sources":["../../src/flow/loop-templates.ts"],"names":[],"mappings":"AAEA;;GAEG;AAEH,eAAO,MAAM,uBAAuB,6aAQlB,CAAC;AAEnB,eAAO,MAAM,8BAA8B,8lBAWtB,CAAC;AAEtB,eAAO,MAAM,kBAAkB,m2BAWhB,CAAC"}