pi-agent-flow 1.8.39 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (291) hide show
  1. package/README.md +33 -37
  2. package/agents/audit.md +18 -22
  3. package/agents/build.md +20 -22
  4. package/agents/craft.md +20 -27
  5. package/agents/debug.md +21 -28
  6. package/agents/ideas.md +18 -101
  7. package/agents/scout.md +15 -19
  8. package/dist/batch/batch-bash.d.ts +2 -2
  9. package/dist/batch/batch-bash.d.ts.map +1 -1
  10. package/dist/batch/batch-bash.js +3 -3
  11. package/dist/batch/batch-bash.js.map +1 -1
  12. package/dist/batch/constants.d.ts +19 -5
  13. package/dist/batch/constants.d.ts.map +1 -1
  14. package/dist/batch/constants.js +4 -3
  15. package/dist/batch/constants.js.map +1 -1
  16. package/dist/batch/execute.d.ts +0 -1
  17. package/dist/batch/execute.d.ts.map +1 -1
  18. package/dist/batch/execute.js +101 -10
  19. package/dist/batch/execute.js.map +1 -1
  20. package/dist/batch/fuzzy-edit.d.ts +0 -6
  21. package/dist/batch/fuzzy-edit.d.ts.map +1 -1
  22. package/dist/batch/fuzzy-edit.js +1 -1
  23. package/dist/batch/fuzzy-edit.js.map +1 -1
  24. package/dist/batch/index.d.ts.map +1 -1
  25. package/dist/batch/index.js +87 -16
  26. package/dist/batch/index.js.map +1 -1
  27. package/dist/batch/render.d.ts +0 -1
  28. package/dist/batch/render.d.ts.map +1 -1
  29. package/dist/batch/render.js +7 -101
  30. package/dist/batch/render.js.map +1 -1
  31. package/dist/batch/summary.d.ts +5 -0
  32. package/dist/batch/summary.d.ts.map +1 -0
  33. package/dist/batch/summary.js +101 -0
  34. package/dist/batch/summary.js.map +1 -0
  35. package/dist/{config.d.ts → config/config.d.ts} +34 -2
  36. package/dist/config/config.d.ts.map +1 -0
  37. package/dist/{config.js → config/config.js} +157 -9
  38. package/dist/config/config.js.map +1 -0
  39. package/dist/config/log.d.ts +27 -0
  40. package/dist/config/log.d.ts.map +1 -0
  41. package/dist/config/log.js +104 -0
  42. package/dist/config/log.js.map +1 -0
  43. package/dist/{settings-resolver.d.ts → config/settings-resolver.d.ts} +9 -2
  44. package/dist/config/settings-resolver.d.ts.map +1 -0
  45. package/dist/config/settings-resolver.js +275 -0
  46. package/dist/config/settings-resolver.js.map +1 -0
  47. package/dist/core/agents.d.ts.map +1 -0
  48. package/dist/{agents.js → core/agents.js} +11 -10
  49. package/dist/core/agents.js.map +1 -0
  50. package/dist/core/delegation.d.ts +24 -0
  51. package/dist/core/delegation.d.ts.map +1 -0
  52. package/dist/core/delegation.js +55 -0
  53. package/dist/core/delegation.js.map +1 -0
  54. package/dist/core/depth.d.ts.map +1 -0
  55. package/dist/{depth.js → core/depth.js} +9 -8
  56. package/dist/core/depth.js.map +1 -0
  57. package/dist/{executor.d.ts → core/executor.d.ts} +13 -3
  58. package/dist/core/executor.d.ts.map +1 -0
  59. package/dist/{executor.js → core/executor.js} +79 -15
  60. package/dist/core/executor.js.map +1 -0
  61. package/dist/{flow.d.ts → core/flow.d.ts} +4 -1
  62. package/dist/core/flow.d.ts.map +1 -0
  63. package/dist/{flow.js → core/flow.js} +179 -25
  64. package/dist/core/flow.js.map +1 -0
  65. package/dist/{session-mode.d.ts → core/session-mode.d.ts} +2 -1
  66. package/dist/core/session-mode.d.ts.map +1 -0
  67. package/dist/{session-mode.js → core/session-mode.js} +1 -1
  68. package/dist/core/session-mode.js.map +1 -0
  69. package/dist/core/session-registry.d.ts +16 -0
  70. package/dist/core/session-registry.d.ts.map +1 -0
  71. package/dist/core/session-registry.js +30 -0
  72. package/dist/core/session-registry.js.map +1 -0
  73. package/dist/core/transitions.d.ts.map +1 -0
  74. package/dist/{transitions.js → core/transitions.js} +1 -1
  75. package/dist/core/transitions.js.map +1 -0
  76. package/dist/flow/command.d.ts +8 -0
  77. package/dist/flow/command.d.ts.map +1 -0
  78. package/dist/flow/command.js +189 -0
  79. package/dist/flow/command.js.map +1 -0
  80. package/dist/flow/continuation.d.ts +16 -0
  81. package/dist/flow/continuation.d.ts.map +1 -0
  82. package/dist/flow/continuation.js +151 -0
  83. package/dist/flow/continuation.js.map +1 -0
  84. package/dist/flow/index.d.ts +15 -0
  85. package/dist/flow/index.d.ts.map +1 -0
  86. package/dist/flow/index.js +22 -0
  87. package/dist/flow/index.js.map +1 -0
  88. package/dist/flow/settings-command.d.ts +51 -0
  89. package/dist/flow/settings-command.d.ts.map +1 -0
  90. package/dist/flow/settings-command.js +851 -0
  91. package/dist/flow/settings-command.js.map +1 -0
  92. package/dist/flow/store.d.ts +26 -0
  93. package/dist/flow/store.d.ts.map +1 -0
  94. package/dist/flow/store.js +158 -0
  95. package/dist/flow/store.js.map +1 -0
  96. package/dist/flow/template-strings.d.ts +8 -0
  97. package/dist/flow/template-strings.d.ts.map +1 -0
  98. package/dist/flow/template-strings.js +39 -0
  99. package/dist/flow/template-strings.js.map +1 -0
  100. package/dist/flow/types.d.ts +55 -0
  101. package/dist/flow/types.d.ts.map +1 -0
  102. package/dist/flow/types.js +5 -0
  103. package/dist/flow/types.js.map +1 -0
  104. package/dist/flow/warp-command.d.ts +9 -0
  105. package/dist/flow/warp-command.d.ts.map +1 -0
  106. package/dist/flow/warp-command.js +405 -0
  107. package/dist/flow/warp-command.js.map +1 -0
  108. package/dist/index.d.ts +3 -1
  109. package/dist/index.d.ts.map +1 -1
  110. package/dist/index.js +115 -32
  111. package/dist/index.js.map +1 -1
  112. package/dist/{notify-state.d.ts → notify/notify-state.d.ts} +2 -1
  113. package/dist/notify/notify-state.d.ts.map +1 -0
  114. package/dist/notify/notify-state.js.map +1 -0
  115. package/dist/notify/notify.d.ts.map +1 -0
  116. package/dist/{notify.js → notify/notify.js} +3 -2
  117. package/dist/notify/notify.js.map +1 -0
  118. package/dist/{cli-args.d.ts → snapshot/cli-args.d.ts} +4 -2
  119. package/dist/snapshot/cli-args.d.ts.map +1 -0
  120. package/dist/{cli-args.js → snapshot/cli-args.js} +10 -1
  121. package/dist/snapshot/cli-args.js.map +1 -0
  122. package/dist/snapshot/index.d.ts +2 -0
  123. package/dist/snapshot/index.d.ts.map +1 -0
  124. package/dist/snapshot/index.js +2 -0
  125. package/dist/snapshot/index.js.map +1 -0
  126. package/dist/{reasoning-strip.d.ts → snapshot/reasoning-strip.d.ts} +0 -4
  127. package/dist/snapshot/reasoning-strip.d.ts.map +1 -0
  128. package/dist/{reasoning-strip.js → snapshot/reasoning-strip.js} +2 -2
  129. package/dist/snapshot/reasoning-strip.js.map +1 -0
  130. package/dist/{runner-events.d.ts → snapshot/runner-events.d.ts} +13 -1
  131. package/dist/snapshot/runner-events.d.ts.map +1 -0
  132. package/dist/{runner-events.js → snapshot/runner-events.js} +16 -4
  133. package/dist/snapshot/runner-events.js.map +1 -0
  134. package/dist/{snapshot.d.ts → snapshot/snapshot.d.ts} +29 -3
  135. package/dist/snapshot/snapshot.d.ts.map +1 -0
  136. package/dist/{snapshot.js → snapshot/snapshot.js} +347 -39
  137. package/dist/snapshot/snapshot.js.map +1 -0
  138. package/dist/{structured-output.d.ts → snapshot/structured-output.d.ts} +1 -1
  139. package/dist/snapshot/structured-output.d.ts.map +1 -0
  140. package/dist/{structured-output.js → snapshot/structured-output.js} +13 -0
  141. package/dist/snapshot/structured-output.js.map +1 -0
  142. package/dist/{flow-prompt.d.ts → steering/flow-prompt.d.ts} +2 -2
  143. package/dist/steering/flow-prompt.d.ts.map +1 -0
  144. package/dist/{flow-prompt.js → steering/flow-prompt.js} +3 -3
  145. package/dist/steering/flow-prompt.js.map +1 -0
  146. package/dist/{sliding-prompt.d.ts → steering/sliding-prompt.d.ts} +8 -7
  147. package/dist/steering/sliding-prompt.d.ts.map +1 -0
  148. package/dist/{sliding-prompt.js → steering/sliding-prompt.js} +15 -64
  149. package/dist/steering/sliding-prompt.js.map +1 -0
  150. package/dist/{tool-utils.d.ts → steering/tool-utils.d.ts} +1 -0
  151. package/dist/steering/tool-utils.d.ts.map +1 -0
  152. package/dist/{tool-utils.js → steering/tool-utils.js} +10 -3
  153. package/dist/steering/tool-utils.js.map +1 -0
  154. package/dist/{ask-user.d.ts → tools/ask-user.d.ts} +3 -15
  155. package/dist/tools/ask-user.d.ts.map +1 -0
  156. package/dist/tools/ask-user.js +778 -0
  157. package/dist/tools/ask-user.js.map +1 -0
  158. package/dist/{timed-bash.d.ts → tools/timed-bash.d.ts} +2 -7
  159. package/dist/tools/timed-bash.d.ts.map +1 -0
  160. package/dist/{timed-bash.js → tools/timed-bash.js} +2 -2
  161. package/dist/tools/timed-bash.js.map +1 -0
  162. package/dist/{web-tool.d.ts → tools/web-tool.d.ts} +1 -1
  163. package/dist/tools/web-tool.d.ts.map +1 -0
  164. package/dist/{web-tool.js → tools/web-tool.js} +8 -7
  165. package/dist/tools/web-tool.js.map +1 -0
  166. package/dist/tui/flow-colors.d.ts +55 -0
  167. package/dist/tui/flow-colors.d.ts.map +1 -0
  168. package/dist/tui/flow-colors.js +22 -0
  169. package/dist/tui/flow-colors.js.map +1 -0
  170. package/dist/{render-utils.d.ts → tui/render-utils.d.ts} +1 -1
  171. package/dist/tui/render-utils.d.ts.map +1 -0
  172. package/dist/{render-utils.js → tui/render-utils.js} +3 -3
  173. package/dist/tui/render-utils.js.map +1 -0
  174. package/dist/tui/render.d.ts +21 -0
  175. package/dist/tui/render.d.ts.map +1 -0
  176. package/dist/tui/render.js +813 -0
  177. package/dist/tui/render.js.map +1 -0
  178. package/dist/tui/scramble/algorithm.d.ts +7 -0
  179. package/dist/tui/scramble/algorithm.d.ts.map +1 -0
  180. package/dist/tui/scramble/algorithm.js +227 -0
  181. package/dist/tui/scramble/algorithm.js.map +1 -0
  182. package/dist/tui/scramble/constants.d.ts +99 -0
  183. package/dist/tui/scramble/constants.d.ts.map +1 -0
  184. package/dist/tui/scramble/constants.js +101 -0
  185. package/dist/tui/scramble/constants.js.map +1 -0
  186. package/dist/tui/scramble/index.d.ts +6 -0
  187. package/dist/tui/scramble/index.d.ts.map +1 -0
  188. package/dist/tui/scramble/index.js +6 -0
  189. package/dist/tui/scramble/index.js.map +1 -0
  190. package/dist/tui/scramble/manager.d.ts +48 -0
  191. package/dist/tui/scramble/manager.d.ts.map +1 -0
  192. package/dist/tui/scramble/manager.js +959 -0
  193. package/dist/tui/scramble/manager.js.map +1 -0
  194. package/dist/tui/scramble/utils.d.ts +18 -0
  195. package/dist/tui/scramble/utils.d.ts.map +1 -0
  196. package/dist/tui/scramble/utils.js +145 -0
  197. package/dist/tui/scramble/utils.js.map +1 -0
  198. package/dist/tui/single-select-layout.d.ts +17 -0
  199. package/dist/tui/single-select-layout.d.ts.map +1 -0
  200. package/dist/{single-select-layout.js → tui/single-select-layout.js} +8 -25
  201. package/dist/tui/single-select-layout.js.map +1 -0
  202. package/dist/types/flow.d.ts +110 -0
  203. package/dist/types/flow.d.ts.map +1 -0
  204. package/dist/{types.js → types/flow.js} +3 -54
  205. package/dist/types/flow.js.map +1 -0
  206. package/dist/types/index.d.ts +8 -0
  207. package/dist/types/index.d.ts.map +1 -0
  208. package/dist/types/index.js +7 -0
  209. package/dist/types/index.js.map +1 -0
  210. package/dist/types/output.d.ts +104 -0
  211. package/dist/types/output.d.ts.map +1 -0
  212. package/dist/types/output.js +5 -0
  213. package/dist/types/output.js.map +1 -0
  214. package/dist/types/ui.d.ts +24 -0
  215. package/dist/types/ui.d.ts.map +1 -0
  216. package/dist/types/ui.js +55 -0
  217. package/dist/types/ui.js.map +1 -0
  218. package/package.json +7 -4
  219. package/dist/agents.d.ts.map +0 -1
  220. package/dist/agents.js.map +0 -1
  221. package/dist/ask-user.d.ts.map +0 -1
  222. package/dist/ask-user.js +0 -1405
  223. package/dist/ask-user.js.map +0 -1
  224. package/dist/batch.d.ts +0 -12
  225. package/dist/batch.d.ts.map +0 -1
  226. package/dist/batch.js +0 -11
  227. package/dist/batch.js.map +0 -1
  228. package/dist/cli-args.d.ts.map +0 -1
  229. package/dist/cli-args.js.map +0 -1
  230. package/dist/config.d.ts.map +0 -1
  231. package/dist/config.js.map +0 -1
  232. package/dist/depth.d.ts.map +0 -1
  233. package/dist/depth.js.map +0 -1
  234. package/dist/executor.d.ts.map +0 -1
  235. package/dist/executor.js.map +0 -1
  236. package/dist/flow-prompt.d.ts.map +0 -1
  237. package/dist/flow-prompt.js.map +0 -1
  238. package/dist/flow.d.ts.map +0 -1
  239. package/dist/flow.js.map +0 -1
  240. package/dist/notify-state.d.ts.map +0 -1
  241. package/dist/notify-state.js.map +0 -1
  242. package/dist/notify.d.ts.map +0 -1
  243. package/dist/notify.js.map +0 -1
  244. package/dist/reasoning-strip.d.ts.map +0 -1
  245. package/dist/reasoning-strip.js.map +0 -1
  246. package/dist/render-utils.d.ts.map +0 -1
  247. package/dist/render-utils.js.map +0 -1
  248. package/dist/render.d.ts +0 -24
  249. package/dist/render.d.ts.map +0 -1
  250. package/dist/render.js +0 -592
  251. package/dist/render.js.map +0 -1
  252. package/dist/runner-events.d.ts.map +0 -1
  253. package/dist/runner-events.js.map +0 -1
  254. package/dist/scramble.d.ts +0 -171
  255. package/dist/scramble.d.ts.map +0 -1
  256. package/dist/scramble.js +0 -2261
  257. package/dist/scramble.js.map +0 -1
  258. package/dist/session-mode.d.ts.map +0 -1
  259. package/dist/session-mode.js.map +0 -1
  260. package/dist/settings-resolver.d.ts.map +0 -1
  261. package/dist/settings-resolver.js +0 -148
  262. package/dist/settings-resolver.js.map +0 -1
  263. package/dist/single-select-layout.d.ts +0 -20
  264. package/dist/single-select-layout.d.ts.map +0 -1
  265. package/dist/single-select-layout.js.map +0 -1
  266. package/dist/sliding-prompt.d.ts.map +0 -1
  267. package/dist/sliding-prompt.js.map +0 -1
  268. package/dist/snapshot.d.ts.map +0 -1
  269. package/dist/snapshot.js.map +0 -1
  270. package/dist/spec-mode.d.ts +0 -13
  271. package/dist/spec-mode.d.ts.map +0 -1
  272. package/dist/spec-mode.js +0 -90
  273. package/dist/spec-mode.js.map +0 -1
  274. package/dist/structured-output.d.ts.map +0 -1
  275. package/dist/structured-output.js.map +0 -1
  276. package/dist/timed-bash.d.ts.map +0 -1
  277. package/dist/timed-bash.js.map +0 -1
  278. package/dist/tool-utils.d.ts.map +0 -1
  279. package/dist/tool-utils.js.map +0 -1
  280. package/dist/transitions.d.ts.map +0 -1
  281. package/dist/transitions.js.map +0 -1
  282. package/dist/types.d.ts +0 -208
  283. package/dist/types.d.ts.map +0 -1
  284. package/dist/types.js.map +0 -1
  285. package/dist/web-tool.d.ts.map +0 -1
  286. package/dist/web-tool.js.map +0 -1
  287. /package/dist/{agents.d.ts → core/agents.d.ts} +0 -0
  288. /package/dist/{depth.d.ts → core/depth.d.ts} +0 -0
  289. /package/dist/{transitions.d.ts → core/transitions.d.ts} +0 -0
  290. /package/dist/{notify-state.js → notify/notify-state.js} +0 -0
  291. /package/dist/{notify.d.ts → notify/notify.d.ts} +0 -0
@@ -0,0 +1,405 @@
1
+ /**
2
+ * /flow:warp slash command registration.
3
+ *
4
+ * Distills conversation context and spawns a new session with the warped prompt.
5
+ */
6
+ import { complete } from "@mariozechner/pi-ai";
7
+ import { convertToLlm, serializeConversation } from "@mariozechner/pi-coding-agent";
8
+ import { DynamicScrambleText, scrambleManager } from "../tui/scramble/index.js";
9
+ import { getGoalForSession, getWarpCount, recordWarp } from "./store.js";
10
+ import { stripReasoningFromAssistantMessage } from "../snapshot/reasoning-strip.js";
11
+ import { stripSteeringHintFromContent, isJsonEqual, contentContainsSteeringHintTag, } from "../steering/sliding-prompt.js";
12
+ import { stripStrategicHintsFromContent } from "../steering/tool-utils.js";
13
+ import { logError } from "../config/log.js";
14
+ function sanitizeBranchForWarp(messages) {
15
+ const passesApplied = new Set();
16
+ const sanitized = [];
17
+ for (const message of messages) {
18
+ if (!message)
19
+ continue;
20
+ // Drop messages with role: 'custom' (hidden orchestrator messages that convertToLlm would promote to user)
21
+ if (message.role === "custom") {
22
+ passesApplied.add("dropCustomMessages");
23
+ continue;
24
+ }
25
+ // Drop messages with role: 'system' that contain steering hint tags
26
+ if (message.role === "system" && contentContainsSteeringHintTag(message.content)) {
27
+ passesApplied.add("dropSlidingSystemPrompts");
28
+ continue;
29
+ }
30
+ let changed = false;
31
+ let sanitizedMessage = message;
32
+ // Strip reasoning/thinking from assistant messages
33
+ if (message.role === "assistant" || message.role === "system" || message.role === "tool") {
34
+ const stripped = stripReasoningFromAssistantMessage(message);
35
+ if (stripped.changed) {
36
+ sanitizedMessage = stripped.message;
37
+ changed = true;
38
+ passesApplied.add("stripReasoning");
39
+ }
40
+ }
41
+ // Strip timestamp from message objects
42
+ if ("timestamp" in sanitizedMessage) {
43
+ const { timestamp, ...rest } = sanitizedMessage;
44
+ sanitizedMessage = rest;
45
+ changed = true;
46
+ passesApplied.add("stripTimestamps");
47
+ }
48
+ // Strip API metadata from assistant messages (keep usage but strip cost)
49
+ if (sanitizedMessage.role === "assistant") {
50
+ const { api, provider, model, stopReason, responseId, responseModel, usage, ...rest } = sanitizedMessage;
51
+ let stripped = false;
52
+ if (api !== undefined || provider !== undefined || model !== undefined ||
53
+ stopReason !== undefined || responseId !== undefined || responseModel !== undefined) {
54
+ stripped = true;
55
+ }
56
+ let cleanedUsage = usage;
57
+ if (usage && typeof usage === "object" && "cost" in usage) {
58
+ const { cost, ...usageWithoutCost } = usage;
59
+ cleanedUsage = usageWithoutCost;
60
+ stripped = true;
61
+ }
62
+ if (stripped) {
63
+ sanitizedMessage = { ...rest, ...(cleanedUsage !== undefined ? { usage: cleanedUsage } : {}) };
64
+ changed = true;
65
+ passesApplied.add("stripApiMetadata");
66
+ }
67
+ }
68
+ // Strip 'details' from tool/toolResult messages
69
+ if (sanitizedMessage.role === "tool" || sanitizedMessage.role === "toolResult") {
70
+ if ("details" in sanitizedMessage) {
71
+ const { details, ...rest } = sanitizedMessage;
72
+ sanitizedMessage = rest;
73
+ changed = true;
74
+ passesApplied.add("stripDetails");
75
+ }
76
+ }
77
+ if ("content" in sanitizedMessage) {
78
+ let modifiedContent = sanitizedMessage.content;
79
+ // Strip steering hints from message content
80
+ const afterSliding = stripSteeringHintFromContent(modifiedContent);
81
+ if (!isJsonEqual(afterSliding, modifiedContent)) {
82
+ modifiedContent = afterSliding;
83
+ changed = true;
84
+ passesApplied.add("stripSteeringHints");
85
+ }
86
+ // Strip strategic hints from tool result content
87
+ if (sanitizedMessage.role === "tool" || sanitizedMessage.role === "toolResult") {
88
+ const afterHints = stripStrategicHintsFromContent(modifiedContent);
89
+ if (!isJsonEqual(afterHints, modifiedContent)) {
90
+ modifiedContent = afterHints;
91
+ changed = true;
92
+ passesApplied.add("stripStrategicHints");
93
+ }
94
+ }
95
+ if (changed) {
96
+ sanitizedMessage = { ...sanitizedMessage, content: modifiedContent };
97
+ }
98
+ }
99
+ sanitized.push(sanitizedMessage);
100
+ }
101
+ return { messages: sanitized, passesApplied: Array.from(passesApplied) };
102
+ }
103
+ const SYSTEM_PROMPT = `You are a context transfer and execution planning assistant. Given a conversation history and the user's goal, generate a structured warp prompt that serves as a ready-to-execute project brief for a new session.
104
+
105
+ Your output MUST use this exact format:
106
+
107
+ FRONTMATTER (YAML between --- delimiters):
108
+ context — 1-2 sentence orientation summary
109
+ end_goal — The finish line, not the next step
110
+ decisions — Key choices already made (list)
111
+ files — Files touched with what changed (list)
112
+ open_items — Unresolved work or questions (list)
113
+ watch_out — Edge cases, gotchas, fragile assumptions (list)
114
+ uncertain_areas — Areas of the codebase or design that need re-assessment before proceeding (list)
115
+ context_gathering:
116
+ aim — What the initial scout/discovery should accomplish
117
+ scope — Specific things to explore or map (list)
118
+ execution_plan:
119
+ - phase — Phase name
120
+ parallel — true/false, can this run alongside other phases?
121
+ group — If parallel, which execution group (A, B, C...)
122
+ flow — Which flow type to use (scout, build, audit, craft...)
123
+ flows — OR multiple flows if parallel within the phase
124
+ task — Clear, actionable task for this phase
125
+ depends_on — Phase(s) that must complete first
126
+ produces — What "done" means for this phase
127
+ success_criteria — How to know the overall work is complete (list)
128
+
129
+ BODY (after the closing ---):
130
+ A concise Task section restating the immediate next action.
131
+
132
+ RULES:
133
+ 1. Always start with a context_gathering phase — the new session has no context yet, so discovery comes first.
134
+ 2. Mark phases parallel:true when they have no data dependencies on each other. Use group labels (A, B, C) to cluster parallel work.
135
+ 3. Each phase should produce a concrete artifact, evidence of completion before moving on to the next.
136
+ 4. Respect the given plan scaffold.
137
+ 5. Use flow types from: scout, build, audit, craft, debug, ideas.
138
+ 6. Success criteria should be the final state, i.e. integration test pass, code coverage with verified output, etc.
139
+ 7. If an active goal from the prior session exists, include it in the frontmatter context.
140
+ 8. Preserve unresolved blockers, open questions, or "not done" items from prior flow results in open_items.
141
+ 9. Flag any uncertain areas — parts of the codebase, design decisions, or assumptions that may have shifted since the conversation and need re-assessment via a scout or audit flow before committing to a plan.
142
+ 10. No tool calls, all attemps that you need to discover, note it to the watch_out list or uncertain_areas list.
143
+ 11. Your entire response must be the warp prompt starting with '---' (YAML frontmatter opening). No preamble, no explanations, no tool calls.
144
+
145
+ Format your response as a prompt the user can send to start the new thread. Be concise but include all necessary context. Do not include any preamble like "Here is the prompt" — just output the prompt itself.
146
+
147
+ IMPORTANT: You are a text generation assistant, not an agent. Do NOT attempt tool calls, file operations, code execution, or any actions. Output ONLY the structured prompt text.`;
148
+ const MAX_CONVERSATION_CHARS = 15000;
149
+ export function extractGoalFromPrompt(prompt) {
150
+ const MAX_GOAL_LEN = 200;
151
+ // Helper: find first meaningful line and strip bullet/numbered prefixes
152
+ const pickFirstLine = (text) => {
153
+ const lines = text.split('\n');
154
+ for (const raw of lines) {
155
+ const trimmed = raw.trim();
156
+ if (!trimmed || trimmed.startsWith('#'))
157
+ continue;
158
+ const cleaned = trimmed.replace(/^[-*•]\s+|^\d+\.\s+/, '');
159
+ if (cleaned)
160
+ return cleaned.length > MAX_GOAL_LEN ? cleaned.slice(0, MAX_GOAL_LEN).trimEnd() : cleaned;
161
+ }
162
+ return undefined;
163
+ };
164
+ // Strategy 1: Parse end_goal from YAML frontmatter
165
+ const endGoalMatch = prompt.match(/^end_goal:\s*["']?(.+?)["']?\s*$/m);
166
+ if (endGoalMatch?.[1]) {
167
+ const endGoal = endGoalMatch[1].trim();
168
+ const contextMatch = prompt.match(/^context:\s*["']?(.+?)["']?\s*$/m);
169
+ if (contextMatch?.[1]) {
170
+ const context = contextMatch[1].trim();
171
+ const combined = `${endGoal}. Context: ${context}`;
172
+ if (combined.length <= MAX_GOAL_LEN)
173
+ return combined;
174
+ }
175
+ return endGoal.length > MAX_GOAL_LEN ? endGoal.slice(0, MAX_GOAL_LEN).trimEnd() : endGoal;
176
+ }
177
+ // Try to find ## Task section
178
+ const taskMatch = prompt.match(/##\s*Task\s*\n([\s\S]*?)(?=\n##|$)/i);
179
+ if (taskMatch?.[1]) {
180
+ const picked = pickFirstLine(taskMatch[1]);
181
+ if (picked)
182
+ return picked;
183
+ }
184
+ // Fallback: first non-empty, non-header, non-bullet line after ---
185
+ const bodyStart = prompt.indexOf('---', 3);
186
+ if (bodyStart !== -1) {
187
+ const body = prompt.slice(bodyStart + 3);
188
+ const picked = pickFirstLine(body);
189
+ if (picked)
190
+ return picked;
191
+ }
192
+ return 'Continue the work from the warped context';
193
+ }
194
+ export function setupWarpCommand(pi) {
195
+ pi.registerCommand("flow:warp", {
196
+ description: "Warp to a new session with distilled context. Usage: /flow:warp [goal]",
197
+ handler: async (args, ctx) => {
198
+ const DEFAULT_WARP_GOAL = "Continue where we left off — summarize what we've done, where we are, and what the natural next step is.";
199
+ const goal = args.trim() || DEFAULT_WARP_GOAL;
200
+ const cwd = ctx.cwd;
201
+ // Ensure a model is available
202
+ const model = ctx.model ?? ctx.modelRegistry?.getAvailable()?.[0];
203
+ if (!model) {
204
+ ctx.ui.notify?.("No model selected. Configure a model in Pi settings first.", "error");
205
+ return;
206
+ }
207
+ // Gather conversation
208
+ const branch = ctx.sessionManager.getBranch();
209
+ if (!branch || branch.length === 0) {
210
+ ctx.ui.notify?.("Empty conversation — nothing to warp.", "error");
211
+ return;
212
+ }
213
+ // Convert and serialize
214
+ // getBranch() returns wrapped session entries; convertToLlm expects AgentMessage objects.
215
+ const agentMessages = branch
216
+ .map((entry) => (entry.type === "message" ? entry.message : undefined))
217
+ .filter((m) => m != null);
218
+ const { messages: sanitizedMessages, passesApplied } = sanitizeBranchForWarp(agentMessages);
219
+ if (process.env.PI_FLOW_DUMP_SNAPSHOT) {
220
+ logError(`[warp-sanitize] passes applied: ${passesApplied.join(", ")}`);
221
+ }
222
+ const messages = convertToLlm(sanitizedMessages);
223
+ let conversation = serializeConversation(messages);
224
+ // Truncate if too large (middle truncation: keep first 20% + last 80% of max)
225
+ if (conversation.length > MAX_CONVERSATION_CHARS) {
226
+ const headChars = Math.floor(MAX_CONVERSATION_CHARS * 0.2);
227
+ const tailChars = Math.floor(MAX_CONVERSATION_CHARS * 0.8);
228
+ conversation =
229
+ conversation.slice(0, headChars) +
230
+ "\n\n[... warp context truncated from the middle ...]\n\n" +
231
+ conversation.slice(conversation.length - tailChars);
232
+ }
233
+ // Inject active goal context (session-guarded)
234
+ const activeGoal = getGoalForSession(cwd, ctx.sessionManager.getSessionId());
235
+ let preWarpContext = "";
236
+ if (activeGoal) {
237
+ preWarpContext = `\nPre-warp active goal: ${activeGoal.objective}${activeGoal.acceptance ? ` (Acceptance: ${activeGoal.acceptance})` : ""}\n`;
238
+ }
239
+ // Generate distilled prompt
240
+ const auth = await ctx.modelRegistry.getApiKeyAndHeaders(model);
241
+ if (!auth.ok || !auth.apiKey) {
242
+ ctx.ui.notify?.(auth.ok ? `No API key for ${model.provider}` : (auth.error ?? "Auth error"), "error");
243
+ return;
244
+ }
245
+ let warpError;
246
+ const distilledPrompt = await ctx.ui.custom((tui, _theme, _kb, done) => {
247
+ const abortController = new AbortController();
248
+ const id = `warp-${Date.now()}`;
249
+ let completed = false;
250
+ const RESTART_DELAY_MS = 1500;
251
+ class WarpingComponent {
252
+ scramble;
253
+ timer;
254
+ onAbort;
255
+ constructor() {
256
+ this.scramble = new DynamicScrambleText("warping...", () => {
257
+ const now = Date.now();
258
+ const result = scrambleManager.updateText(id, "warp", "warping...", now, completed);
259
+ return result.content;
260
+ });
261
+ this.onAbort = () => {
262
+ abortController.abort();
263
+ this.cleanup();
264
+ done(null);
265
+ };
266
+ this.scheduleNext();
267
+ }
268
+ scheduleNext() {
269
+ if (this.timer)
270
+ clearTimeout(this.timer);
271
+ if (completed)
272
+ return;
273
+ const now = Date.now();
274
+ const result = scrambleManager.updateText(id, "warp", "warping...", now, completed);
275
+ if (result.isAnimating) {
276
+ this.timer = setTimeout(() => {
277
+ this.timer = undefined;
278
+ tui.requestRender();
279
+ this.scheduleNext();
280
+ }, 100);
281
+ }
282
+ else {
283
+ this.timer = setTimeout(() => {
284
+ this.timer = undefined;
285
+ if (completed)
286
+ return;
287
+ // Reset scramble state and restart animation
288
+ scrambleManager.completeFlow(id);
289
+ const restartNow = Date.now();
290
+ scrambleManager.updateText(id, "warp", "warping...", restartNow, false);
291
+ tui.requestRender();
292
+ this.scheduleNext();
293
+ }, RESTART_DELAY_MS);
294
+ }
295
+ }
296
+ render(width) {
297
+ const now = Date.now();
298
+ const result = scrambleManager.updateText(id, "warp", "warping...", now, completed);
299
+ if (result.isAnimating && !this.timer && !completed) {
300
+ this.scheduleNext();
301
+ }
302
+ return this.scramble.render(width);
303
+ }
304
+ cleanup() {
305
+ if (this.timer) {
306
+ clearTimeout(this.timer);
307
+ this.timer = undefined;
308
+ }
309
+ this.scramble.invalidate();
310
+ scrambleManager.completeFlow(id);
311
+ }
312
+ }
313
+ const component = new WarpingComponent();
314
+ const doGenerate = async () => {
315
+ const response = await complete(model, {
316
+ systemPrompt: SYSTEM_PROMPT,
317
+ messages: [
318
+ {
319
+ role: "user",
320
+ content: args.trim()
321
+ ? `Conversation history:\n${conversation}\n${preWarpContext}\nUser's goal for new thread: ${goal}`
322
+ : `Conversation history:\n${conversation}\n${preWarpContext}`,
323
+ },
324
+ ],
325
+ }, { apiKey: auth.apiKey, headers: auth.headers, signal: abortController.signal });
326
+ if (response.stopReason === "aborted") {
327
+ return null;
328
+ }
329
+ if (response.stopReason === "error" || response.errorMessage) {
330
+ throw new Error(response.errorMessage || "Unknown error");
331
+ }
332
+ return response.content
333
+ .filter((c) => c.type === "text")
334
+ .map((c) => c.text)
335
+ .join("\n")
336
+ .trim();
337
+ };
338
+ doGenerate()
339
+ .then((result) => {
340
+ completed = true;
341
+ component.cleanup();
342
+ done(result);
343
+ })
344
+ .catch((err) => {
345
+ completed = true;
346
+ component.cleanup();
347
+ warpError = err.message || "Unknown error";
348
+ done(null);
349
+ });
350
+ return component;
351
+ });
352
+ if (distilledPrompt === null || distilledPrompt === undefined) {
353
+ if (warpError) {
354
+ ctx.ui.notify?.(`Warp generation failed: ${warpError}`, "error");
355
+ }
356
+ else {
357
+ ctx.ui.notify?.("Warp cancelled.", "info");
358
+ }
359
+ return;
360
+ }
361
+ // Present for review
362
+ const reviewedPrompt = await ctx.ui.editor("Edit warp prompt", distilledPrompt);
363
+ if (reviewedPrompt === undefined) {
364
+ ctx.ui.notify?.("Warp cancelled by user.", "info");
365
+ return;
366
+ }
367
+ const warpedPrompt = (reviewedPrompt ?? distilledPrompt).trim();
368
+ // Warn on deep warp chains
369
+ const warpCount = getWarpCount(cwd);
370
+ if (warpCount >= 3) {
371
+ ctx.ui.notify?.(`Warning: Deep warp chain (depth ${warpCount + 1}). Proceed with caution.`, "warning");
372
+ }
373
+ // Spawn new session
374
+ const currentSessionFile = ctx.sessionManager.getSessionFile();
375
+ const { cancelled } = await ctx.newSession({
376
+ parentSession: currentSessionFile,
377
+ withSession: async (newCtx) => {
378
+ const effectiveGoal = args.trim() ? goal : extractGoalFromPrompt(warpedPrompt);
379
+ // Log warp (cwd captured in closure, no ctx needed)
380
+ recordWarp(cwd, {
381
+ id: `warp-${Date.now()}`,
382
+ parentSession: currentSessionFile,
383
+ goal,
384
+ createdAt: new Date().toISOString(),
385
+ depth: warpCount + 1,
386
+ });
387
+ newCtx.ui.notify?.("Warped to new session.", "info");
388
+ // Execute /flow:goal set as a real user message in the new session.
389
+ // This triggers the command handler which calls setGoal() with
390
+ // ctx.sessionManager.getSessionId() — guaranteed to be the new
391
+ // session's ID. The handler then triggers the LLM to start working.
392
+ // sendUserMessage is called last because it may trigger a turn.
393
+ await newCtx.sendUserMessage(warpedPrompt);
394
+ newCtx.sendUserMessage(`/flow:goal set ${effectiveGoal}`);
395
+ },
396
+ });
397
+ if (cancelled) {
398
+ // Can't use ctx.ui.notify here — ctx is stale after newSession.
399
+ // The cancelled case means withSession never ran, so we return silently.
400
+ return;
401
+ }
402
+ },
403
+ });
404
+ }
405
+ //# sourceMappingURL=warp-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"warp-command.js","sourceRoot":"","sources":["../../src/flow/warp-command.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -5,6 +5,8 @@
5
5
  * Each flow receives a forked snapshot of the current session context.
6
6
  */
7
7
  import type { ExtensionAPI } from "@mariozechner/pi-coding-agent";
8
- export { compressToolResults, compressFlowToolResults, stripBatchReadToolCalls } from "./snapshot.js";
8
+ export { logWarn, logError } from "./config/log.js";
9
+ export { compressToolResults, compressFlowToolResults, stripBatchReadToolCalls } from "./snapshot/snapshot.js";
10
+ export { type FlowColorConfig } from "./tui/flow-colors.js";
9
11
  export default function (pi: ExtensionAPI): void;
10
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAiHlE,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAMtG,MAAM,CAAC,OAAO,WAAW,EAAE,EAAE,YAAY,QA4UxC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,+BAA+B,CAAC;AA6CpF,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAmFpD,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAC/G,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAM5D,MAAM,CAAC,OAAO,WAAW,EAAE,EAAE,YAAY,QAwZxC"}