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,38 @@
1
+ import { loopOverallClause, sharedWakeupGuidance } from "./template-shared.js";
2
+ /**
3
+ * Runtime template strings for endless loop prompts.
4
+ */
5
+ export const autoWarpTriggerTemplate = `<flow-loop-warp>
6
+ The active goal has exceeded its budget, but the endless loop is active. Call the warp tool to continue in a new session.
7
+
8
+ Objective: {{objective}}
9
+ {{acceptanceClause}}
10
+ Loop progress: {{sessionCount}} sessions, {{totalFlowsAcrossSessions}} flows, {{totalTokensAcrossSessions}}/{{maxTokens}} tokens.
11
+
12
+ The new session should inherit this context and resume work toward the objective.
13
+ </flow-loop-warp>`;
14
+ export const loopContinuationPromptTemplate = `<flow-continuation>
15
+ Continue execution toward the active goal. This is an endless loop session.
16
+
17
+ Objective: {{objective}}
18
+ {{acceptanceClause}}
19
+ Progress: {{flowCount}}{{maxFlowsClause}} flows in this session, {{tokenInfo}} tokens.
20
+ ${loopOverallClause}
21
+
22
+ Latest user message: {{userMessage}}
23
+
24
+ Call 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.
25
+ </flow-continuation>`;
26
+ export const loopWakeupTemplate = `<flow-wakeup>
27
+ The user has been idle. Review the active goal and find safe, conservative improvements that advance it. This is an endless loop session.
28
+
29
+ Objective: {{objective}}
30
+ {{acceptanceClause}}
31
+ Progress: {{flowCount}}/{{maxFlows}} flows in this session, {{totalTokens}} tokens.
32
+ ${loopOverallClause}
33
+
34
+ ${sharedWakeupGuidance}
35
+
36
+ Call 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.
37
+ </flow-wakeup>`;
38
+ //# sourceMappingURL=loop-templates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loop-templates.js","sourceRoot":"","sources":["../../src/flow/loop-templates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAE/E;;GAEG;AAEH,MAAM,CAAC,MAAM,uBAAuB,GAAG;;;;;;;;kBAQrB,CAAC;AAEnB,MAAM,CAAC,MAAM,8BAA8B,GAAG;;;;;;EAM5C,iBAAiB;;;;;qBAKE,CAAC;AAEtB,MAAM,CAAC,MAAM,kBAAkB,GAAG;;;;;;EAMhC,iBAAiB;;EAEjB,oBAAoB;;;eAGP,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Endless loop state management.
3
+ *
4
+ * A loop spans multiple sessions toward a persistent objective.
5
+ */
6
+ import type { LoopState, LoopTerminationReason } from "./types.js";
7
+ export declare function getLoop(cwd: string): LoopState | undefined;
8
+ export declare function enableLoop(cwd: string, objective: string): LoopState;
9
+ export declare function disableLoop(cwd: string): LoopState | undefined;
10
+ export declare function resetLoop(cwd: string): LoopState | undefined;
11
+ export declare function terminateLoop(cwd: string, reason: LoopTerminationReason): LoopState | undefined;
12
+ export declare function recordSessionWarp(cwd: string): LoopState | undefined;
13
+ export declare function setPendingWarpSessionId(cwd: string, sessionId: string): LoopState | undefined;
14
+ export declare function clearPendingWarpSessionId(cwd: string): LoopState | undefined;
15
+ /** Directly set loop state (test helper). */
16
+ export declare function setLoop(cwd: string, loop: LoopState): void;
17
+ /** Remove loop state (test helper). */
18
+ export declare function clearLoop(cwd: string): void;
19
+ //# sourceMappingURL=loop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../../src/flow/loop.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAEnE,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAG1D;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,CAepE;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAM9D;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAW5D;AAED,wBAAgB,aAAa,CAC3B,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,qBAAqB,GAC5B,SAAS,GAAG,SAAS,CAQvB;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAMpE;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAO7F;AAED,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAM5E;AAED,6CAA6C;AAC7C,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI,CAI1D;AAED,uCAAuC;AACvC,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAI3C"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Endless loop state management.
3
+ *
4
+ * A loop spans multiple sessions toward a persistent objective.
5
+ */
6
+ import { readState, writeState } from "./store.js";
7
+ export function getLoop(cwd) {
8
+ const state = readState(cwd);
9
+ return state.loop;
10
+ }
11
+ export function enableLoop(cwd, objective) {
12
+ const state = readState(cwd);
13
+ if (!state.current) {
14
+ throw new Error("Cannot enable loop: no active goal.");
15
+ }
16
+ const loop = {
17
+ objective,
18
+ status: "active",
19
+ sessionCount: 1,
20
+ totalTokensAcrossSessions: 0,
21
+ totalFlowsAcrossSessions: 0,
22
+ };
23
+ state.loop = loop;
24
+ writeState(cwd, state);
25
+ return loop;
26
+ }
27
+ export function disableLoop(cwd) {
28
+ const state = readState(cwd);
29
+ if (!state.loop)
30
+ return undefined;
31
+ state.loop.status = "paused";
32
+ writeState(cwd, state);
33
+ return state.loop;
34
+ }
35
+ export function resetLoop(cwd) {
36
+ const state = readState(cwd);
37
+ if (!state.loop)
38
+ return undefined;
39
+ state.loop.status = "active";
40
+ state.loop.sessionCount = 0;
41
+ state.loop.totalTokensAcrossSessions = 0;
42
+ state.loop.totalFlowsAcrossSessions = 0;
43
+ delete state.loop.terminatedAt;
44
+ delete state.loop.terminationReason;
45
+ writeState(cwd, state);
46
+ return state.loop;
47
+ }
48
+ export function terminateLoop(cwd, reason) {
49
+ const state = readState(cwd);
50
+ if (!state.loop)
51
+ return undefined;
52
+ state.loop.status = "terminated";
53
+ state.loop.terminationReason = reason;
54
+ state.loop.terminatedAt = new Date().toISOString();
55
+ writeState(cwd, state);
56
+ return state.loop;
57
+ }
58
+ export function recordSessionWarp(cwd) {
59
+ const state = readState(cwd);
60
+ if (!state.loop || state.loop.status !== "active")
61
+ return undefined;
62
+ state.loop.sessionCount += 1;
63
+ writeState(cwd, state);
64
+ return state.loop;
65
+ }
66
+ export function setPendingWarpSessionId(cwd, sessionId) {
67
+ const state = readState(cwd);
68
+ if (!state.loop)
69
+ return undefined;
70
+ state.loop.pendingWarpSessionId = sessionId;
71
+ state.loop.status = "active";
72
+ writeState(cwd, state);
73
+ return state.loop;
74
+ }
75
+ export function clearPendingWarpSessionId(cwd) {
76
+ const state = readState(cwd);
77
+ if (!state.loop)
78
+ return undefined;
79
+ delete state.loop.pendingWarpSessionId;
80
+ writeState(cwd, state);
81
+ return state.loop;
82
+ }
83
+ /** Directly set loop state (test helper). */
84
+ export function setLoop(cwd, loop) {
85
+ const state = readState(cwd);
86
+ state.loop = loop;
87
+ writeState(cwd, state);
88
+ }
89
+ /** Remove loop state (test helper). */
90
+ export function clearLoop(cwd) {
91
+ const state = readState(cwd);
92
+ delete state.loop;
93
+ writeState(cwd, state);
94
+ }
95
+ //# sourceMappingURL=loop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loop.js","sourceRoot":"","sources":["../../src/flow/loop.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Auto-warp pipeline for the endless loop.
3
+ *
4
+ * performWarp — distill context, create a new session, seed it.
5
+ * distillForWarp — shared LLM distillation logic.
6
+ */
7
+ import type { ExtensionCommandContext } from "@mariozechner/pi-coding-agent";
8
+ import type { GoalEntry, LoopState } from "./types.js";
9
+ export interface WarpFlow {
10
+ type: string;
11
+ intent: string;
12
+ aim: string;
13
+ }
14
+ export interface DistillOptions {
15
+ signal?: AbortSignal;
16
+ userGoalOverride?: string;
17
+ }
18
+ export declare function distillForWarp(ctx: ExtensionCommandContext, goalEntry: GoalEntry | undefined, loop: LoopState | undefined, opts?: DistillOptions): Promise<string>;
19
+ export interface PerformWarpOptions {
20
+ reviewedPrompt?: string;
21
+ signal?: AbortSignal;
22
+ goalOverride?: string;
23
+ }
24
+ export declare function performWarp(ctx: ExtensionCommandContext, warpFlow: WarpFlow, opts?: PerformWarpOptions): Promise<{
25
+ success: boolean;
26
+ error?: string;
27
+ }>;
28
+ //# sourceMappingURL=perform-warp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"perform-warp.d.ts","sourceRoot":"","sources":["../../src/flow/perform-warp.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAO7E,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvD,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,wBAAsB,cAAc,CAClC,GAAG,EAAE,uBAAuB,EAC5B,SAAS,EAAE,SAAS,GAAG,SAAS,EAChC,IAAI,EAAE,SAAS,GAAG,SAAS,EAC3B,IAAI,CAAC,EAAE,cAAc,GACpB,OAAO,CAAC,MAAM,CAAC,CAsEjB;AAED,MAAM,WAAW,kBAAkB;IACjC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAsB,WAAW,CAC/B,GAAG,EAAE,uBAAuB,EAC5B,QAAQ,EAAE,QAAQ,EAClB,IAAI,CAAC,EAAE,kBAAkB,GACxB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAgE/C"}
@@ -0,0 +1,127 @@
1
+ /**
2
+ * Auto-warp pipeline for the endless loop.
3
+ *
4
+ * performWarp — distill context, create a new session, seed it.
5
+ * distillForWarp — shared LLM distillation logic.
6
+ */
7
+ import { complete } from "@mariozechner/pi-ai";
8
+ import { convertToLlm, serializeConversation } from "@mariozechner/pi-coding-agent";
9
+ import { getGoalForSession, getGoal } from "./store.js";
10
+ import { getLoop, recordSessionWarp, terminateLoop, setPendingWarpSessionId, clearPendingWarpSessionId } from "./loop.js";
11
+ import { sanitizeBranchForWarp, SYSTEM_PROMPT, extractGoalFromPrompt, MAX_CONVERSATION_CHARS } from "./warp-utils.js";
12
+ import { logWarn } from "../config/log.js";
13
+ export async function distillForWarp(ctx, goalEntry, loop, opts) {
14
+ const model = ctx.model ?? ctx.modelRegistry?.getAvailable()?.[0];
15
+ if (!model) {
16
+ throw new Error("No model selected. Configure a model in Pi settings first.");
17
+ }
18
+ const branch = ctx.sessionManager.getBranch();
19
+ if (!branch || branch.length === 0) {
20
+ throw new Error("Empty conversation — nothing to warp.");
21
+ }
22
+ const agentMessages = branch
23
+ .map((entry) => (entry.type === "message" ? entry.message : undefined))
24
+ .filter((m) => m != null);
25
+ const { messages: sanitizedMessages, passesApplied } = sanitizeBranchForWarp(agentMessages);
26
+ if (process.env.PI_FLOW_DUMP_SNAPSHOT) {
27
+ logWarn(`[warp-sanitize] passes applied: ${passesApplied.join(", ")}`);
28
+ }
29
+ const messages = convertToLlm(sanitizedMessages);
30
+ let conversation = serializeConversation(messages);
31
+ // Truncate if too large (middle truncation: keep first 20% + last 80% of max)
32
+ if (conversation.length > MAX_CONVERSATION_CHARS) {
33
+ const headChars = Math.floor(MAX_CONVERSATION_CHARS * 0.2);
34
+ const tailChars = Math.floor(MAX_CONVERSATION_CHARS * 0.8);
35
+ conversation =
36
+ conversation.slice(0, headChars) +
37
+ "\n\n[... warp context truncated from the middle ...]\n\n" +
38
+ conversation.slice(conversation.length - tailChars);
39
+ }
40
+ // Inject active goal context (session-guarded)
41
+ let preWarpContext = "";
42
+ if (goalEntry) {
43
+ preWarpContext = `\nPre-warp active goal: ${goalEntry.objective}${goalEntry.acceptance ? ` (Acceptance: ${goalEntry.acceptance})` : ""}\n`;
44
+ }
45
+ const auth = await ctx.modelRegistry.getApiKeyAndHeaders(model);
46
+ if (!auth.ok || !auth.apiKey) {
47
+ throw new Error(auth.ok ? `No API key for ${model.provider}` : (auth.error ?? "Auth error"));
48
+ }
49
+ const userContent = opts?.userGoalOverride
50
+ ? `Conversation history:\n${conversation}\n${preWarpContext}\nUser's goal for new thread: ${opts.userGoalOverride}`
51
+ : `Conversation history:\n${conversation}\n${preWarpContext}`;
52
+ const response = await complete(model, {
53
+ systemPrompt: SYSTEM_PROMPT,
54
+ messages: [{ role: "user", content: userContent }],
55
+ }, { apiKey: auth.apiKey, headers: auth.headers, signal: opts?.signal });
56
+ if (response.stopReason === "aborted") {
57
+ throw new Error("Warp aborted.");
58
+ }
59
+ if (response.stopReason === "error" || response.errorMessage) {
60
+ throw new Error(response.errorMessage || "Unknown error");
61
+ }
62
+ return response.content
63
+ .filter((c) => c.type === "text")
64
+ .map((c) => c.text)
65
+ .join("\n")
66
+ .trim();
67
+ }
68
+ export async function performWarp(ctx, warpFlow, opts) {
69
+ const cwd = ctx.cwd;
70
+ const loop = getLoop(cwd);
71
+ const goal = getGoalForSession(cwd, ctx.sessionManager.getSessionId()) ?? getGoal(cwd);
72
+ const isLoopActive = loop?.status === "active";
73
+ if (isLoopActive && !goal) {
74
+ return { success: false, error: "No active goal to warp with." };
75
+ }
76
+ const currentSessionId = ctx.sessionManager.getSessionId();
77
+ if (isLoopActive) {
78
+ setPendingWarpSessionId(cwd, currentSessionId);
79
+ }
80
+ try {
81
+ let bridgeArtifact;
82
+ if (opts?.reviewedPrompt) {
83
+ bridgeArtifact = opts.reviewedPrompt;
84
+ }
85
+ else {
86
+ bridgeArtifact = await distillForWarp(ctx, goal, loop, { signal: opts?.signal });
87
+ }
88
+ let warpedPrompt = bridgeArtifact;
89
+ if (isLoopActive) {
90
+ warpedPrompt += `\n\n[Loop: session ${loop.sessionCount}, total tokens ≈ ${loop.totalTokensAcrossSessions}]`;
91
+ }
92
+ const result = await ctx.newSession({
93
+ parentSession: ctx.sessionManager.getSessionFile(),
94
+ withSession: async (newCtx) => {
95
+ if (isLoopActive) {
96
+ recordSessionWarp(cwd);
97
+ }
98
+ newCtx.ui.notify?.("Warped to new session.", "info");
99
+ await newCtx.sendUserMessage(warpedPrompt);
100
+ const effectiveGoal = opts?.goalOverride ??
101
+ (isLoopActive
102
+ ? loop.objective
103
+ : (extractGoalFromPrompt(warpedPrompt) || goal?.objective || "Continue the work from the warped context"));
104
+ newCtx.sendUserMessage(`/flow:goal set ${effectiveGoal}`);
105
+ },
106
+ });
107
+ if (result.cancelled) {
108
+ return { success: false, error: "Warp cancelled." };
109
+ }
110
+ return { success: true };
111
+ }
112
+ catch (err) {
113
+ const message = err instanceof Error ? err.message : String(err);
114
+ // Only terminate the loop for auto-warp paths (no reviewedPrompt).
115
+ // Manual warps should not destroy loop state on transient errors.
116
+ if (isLoopActive && !opts?.reviewedPrompt) {
117
+ terminateLoop(cwd, "budget_exhausted");
118
+ }
119
+ return { success: false, error: message };
120
+ }
121
+ finally {
122
+ if (isLoopActive) {
123
+ clearPendingWarpSessionId(cwd);
124
+ }
125
+ }
126
+ }
127
+ //# sourceMappingURL=perform-warp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"perform-warp.js","sourceRoot":"","sources":["../../src/flow/perform-warp.ts"],"names":[],"mappings":"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"}
@@ -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;AAMlG,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;AAkXD,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAib3D"}