pi-agent-flow 1.8.40 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (291) hide show
  1. package/README.md +33 -37
  2. package/agents/audit.md +18 -22
  3. package/agents/build.md +20 -22
  4. package/agents/craft.md +20 -27
  5. package/agents/debug.md +21 -28
  6. package/agents/ideas.md +18 -101
  7. package/agents/scout.md +15 -19
  8. package/dist/batch/batch-bash.d.ts +2 -2
  9. package/dist/batch/batch-bash.d.ts.map +1 -1
  10. package/dist/batch/batch-bash.js +3 -3
  11. package/dist/batch/batch-bash.js.map +1 -1
  12. package/dist/batch/constants.d.ts +19 -5
  13. package/dist/batch/constants.d.ts.map +1 -1
  14. package/dist/batch/constants.js +4 -3
  15. package/dist/batch/constants.js.map +1 -1
  16. package/dist/batch/execute.d.ts +0 -1
  17. package/dist/batch/execute.d.ts.map +1 -1
  18. package/dist/batch/execute.js +97 -6
  19. package/dist/batch/execute.js.map +1 -1
  20. package/dist/batch/fuzzy-edit.d.ts +0 -6
  21. package/dist/batch/fuzzy-edit.d.ts.map +1 -1
  22. package/dist/batch/fuzzy-edit.js +1 -1
  23. package/dist/batch/fuzzy-edit.js.map +1 -1
  24. package/dist/batch/index.d.ts.map +1 -1
  25. package/dist/batch/index.js +87 -16
  26. package/dist/batch/index.js.map +1 -1
  27. package/dist/batch/render.d.ts +0 -1
  28. package/dist/batch/render.d.ts.map +1 -1
  29. package/dist/batch/render.js +7 -101
  30. package/dist/batch/render.js.map +1 -1
  31. package/dist/batch/summary.d.ts +5 -0
  32. package/dist/batch/summary.d.ts.map +1 -0
  33. package/dist/batch/summary.js +101 -0
  34. package/dist/batch/summary.js.map +1 -0
  35. package/dist/{config.d.ts → config/config.d.ts} +34 -2
  36. package/dist/config/config.d.ts.map +1 -0
  37. package/dist/{config.js → config/config.js} +157 -9
  38. package/dist/config/config.js.map +1 -0
  39. package/dist/config/log.d.ts +27 -0
  40. package/dist/config/log.d.ts.map +1 -0
  41. package/dist/config/log.js +104 -0
  42. package/dist/config/log.js.map +1 -0
  43. package/dist/{settings-resolver.d.ts → config/settings-resolver.d.ts} +9 -2
  44. package/dist/config/settings-resolver.d.ts.map +1 -0
  45. package/dist/config/settings-resolver.js +275 -0
  46. package/dist/config/settings-resolver.js.map +1 -0
  47. package/dist/core/agents.d.ts.map +1 -0
  48. package/dist/{agents.js → core/agents.js} +11 -10
  49. package/dist/core/agents.js.map +1 -0
  50. package/dist/core/delegation.d.ts +24 -0
  51. package/dist/core/delegation.d.ts.map +1 -0
  52. package/dist/core/delegation.js +55 -0
  53. package/dist/core/delegation.js.map +1 -0
  54. package/dist/core/depth.d.ts.map +1 -0
  55. package/dist/{depth.js → core/depth.js} +9 -8
  56. package/dist/core/depth.js.map +1 -0
  57. package/dist/{executor.d.ts → core/executor.d.ts} +11 -3
  58. package/dist/core/executor.d.ts.map +1 -0
  59. package/dist/{executor.js → core/executor.js} +49 -14
  60. package/dist/core/executor.js.map +1 -0
  61. package/dist/{flow.d.ts → core/flow.d.ts} +4 -1
  62. package/dist/core/flow.d.ts.map +1 -0
  63. package/dist/{flow.js → core/flow.js} +110 -45
  64. package/dist/core/flow.js.map +1 -0
  65. package/dist/{session-mode.d.ts → core/session-mode.d.ts} +2 -1
  66. package/dist/core/session-mode.d.ts.map +1 -0
  67. package/dist/{session-mode.js → core/session-mode.js} +1 -1
  68. package/dist/core/session-mode.js.map +1 -0
  69. package/dist/core/session-registry.d.ts +16 -0
  70. package/dist/core/session-registry.d.ts.map +1 -0
  71. package/dist/core/session-registry.js +30 -0
  72. package/dist/core/session-registry.js.map +1 -0
  73. package/dist/core/transitions.d.ts.map +1 -0
  74. package/dist/{transitions.js → core/transitions.js} +1 -1
  75. package/dist/core/transitions.js.map +1 -0
  76. package/dist/flow/command.d.ts +8 -0
  77. package/dist/flow/command.d.ts.map +1 -0
  78. package/dist/flow/command.js +189 -0
  79. package/dist/flow/command.js.map +1 -0
  80. package/dist/flow/continuation.d.ts +16 -0
  81. package/dist/flow/continuation.d.ts.map +1 -0
  82. package/dist/flow/continuation.js +151 -0
  83. package/dist/flow/continuation.js.map +1 -0
  84. package/dist/flow/index.d.ts +15 -0
  85. package/dist/flow/index.d.ts.map +1 -0
  86. package/dist/flow/index.js +22 -0
  87. package/dist/flow/index.js.map +1 -0
  88. package/dist/flow/settings-command.d.ts +51 -0
  89. package/dist/flow/settings-command.d.ts.map +1 -0
  90. package/dist/flow/settings-command.js +851 -0
  91. package/dist/flow/settings-command.js.map +1 -0
  92. package/dist/flow/store.d.ts +26 -0
  93. package/dist/flow/store.d.ts.map +1 -0
  94. package/dist/flow/store.js +158 -0
  95. package/dist/flow/store.js.map +1 -0
  96. package/dist/flow/template-strings.d.ts +8 -0
  97. package/dist/flow/template-strings.d.ts.map +1 -0
  98. package/dist/flow/template-strings.js +39 -0
  99. package/dist/flow/template-strings.js.map +1 -0
  100. package/dist/flow/types.d.ts +55 -0
  101. package/dist/flow/types.d.ts.map +1 -0
  102. package/dist/flow/types.js +5 -0
  103. package/dist/flow/types.js.map +1 -0
  104. package/dist/flow/warp-command.d.ts +9 -0
  105. package/dist/flow/warp-command.d.ts.map +1 -0
  106. package/dist/flow/warp-command.js +405 -0
  107. package/dist/flow/warp-command.js.map +1 -0
  108. package/dist/index.d.ts +3 -1
  109. package/dist/index.d.ts.map +1 -1
  110. package/dist/index.js +103 -29
  111. package/dist/index.js.map +1 -1
  112. package/dist/{notify-state.d.ts → notify/notify-state.d.ts} +2 -1
  113. package/dist/notify/notify-state.d.ts.map +1 -0
  114. package/dist/notify/notify-state.js.map +1 -0
  115. package/dist/notify/notify.d.ts.map +1 -0
  116. package/dist/{notify.js → notify/notify.js} +3 -2
  117. package/dist/notify/notify.js.map +1 -0
  118. package/dist/{cli-args.d.ts → snapshot/cli-args.d.ts} +3 -2
  119. package/dist/snapshot/cli-args.d.ts.map +1 -0
  120. package/dist/{cli-args.js → snapshot/cli-args.js} +1 -1
  121. package/dist/snapshot/cli-args.js.map +1 -0
  122. package/dist/snapshot/index.d.ts +2 -0
  123. package/dist/snapshot/index.d.ts.map +1 -0
  124. package/dist/snapshot/index.js +2 -0
  125. package/dist/snapshot/index.js.map +1 -0
  126. package/dist/{reasoning-strip.d.ts → snapshot/reasoning-strip.d.ts} +0 -4
  127. package/dist/snapshot/reasoning-strip.d.ts.map +1 -0
  128. package/dist/{reasoning-strip.js → snapshot/reasoning-strip.js} +2 -2
  129. package/dist/snapshot/reasoning-strip.js.map +1 -0
  130. package/dist/snapshot/runner-events.d.ts.map +1 -0
  131. package/dist/{runner-events.js → snapshot/runner-events.js} +1 -1
  132. package/dist/snapshot/runner-events.js.map +1 -0
  133. package/dist/{snapshot.d.ts → snapshot/snapshot.d.ts} +5 -2
  134. package/dist/snapshot/snapshot.d.ts.map +1 -0
  135. package/dist/{snapshot.js → snapshot/snapshot.js} +166 -35
  136. package/dist/snapshot/snapshot.js.map +1 -0
  137. package/dist/{structured-output.d.ts → snapshot/structured-output.d.ts} +1 -1
  138. package/dist/snapshot/structured-output.d.ts.map +1 -0
  139. package/dist/snapshot/structured-output.js.map +1 -0
  140. package/dist/{flow-prompt.d.ts → steering/flow-prompt.d.ts} +2 -2
  141. package/dist/steering/flow-prompt.d.ts.map +1 -0
  142. package/dist/{flow-prompt.js → steering/flow-prompt.js} +1 -1
  143. package/dist/steering/flow-prompt.js.map +1 -0
  144. package/dist/{sliding-prompt.d.ts → steering/sliding-prompt.d.ts} +8 -7
  145. package/dist/steering/sliding-prompt.d.ts.map +1 -0
  146. package/dist/{sliding-prompt.js → steering/sliding-prompt.js} +15 -64
  147. package/dist/steering/sliding-prompt.js.map +1 -0
  148. package/dist/{tool-utils.d.ts → steering/tool-utils.d.ts} +1 -0
  149. package/dist/steering/tool-utils.d.ts.map +1 -0
  150. package/dist/{tool-utils.js → steering/tool-utils.js} +10 -3
  151. package/dist/steering/tool-utils.js.map +1 -0
  152. package/dist/{ask-user.d.ts → tools/ask-user.d.ts} +3 -15
  153. package/dist/tools/ask-user.d.ts.map +1 -0
  154. package/dist/tools/ask-user.js +778 -0
  155. package/dist/tools/ask-user.js.map +1 -0
  156. package/dist/{timed-bash.d.ts → tools/timed-bash.d.ts} +2 -7
  157. package/dist/tools/timed-bash.d.ts.map +1 -0
  158. package/dist/{timed-bash.js → tools/timed-bash.js} +2 -2
  159. package/dist/tools/timed-bash.js.map +1 -0
  160. package/dist/{web-tool.d.ts → tools/web-tool.d.ts} +1 -1
  161. package/dist/tools/web-tool.d.ts.map +1 -0
  162. package/dist/{web-tool.js → tools/web-tool.js} +8 -7
  163. package/dist/tools/web-tool.js.map +1 -0
  164. package/dist/tui/flow-colors.d.ts +55 -0
  165. package/dist/tui/flow-colors.d.ts.map +1 -0
  166. package/dist/tui/flow-colors.js +22 -0
  167. package/dist/tui/flow-colors.js.map +1 -0
  168. package/dist/{render-utils.d.ts → tui/render-utils.d.ts} +1 -1
  169. package/dist/tui/render-utils.d.ts.map +1 -0
  170. package/dist/{render-utils.js → tui/render-utils.js} +3 -3
  171. package/dist/tui/render-utils.js.map +1 -0
  172. package/dist/tui/render.d.ts +21 -0
  173. package/dist/tui/render.d.ts.map +1 -0
  174. package/dist/tui/render.js +813 -0
  175. package/dist/tui/render.js.map +1 -0
  176. package/dist/tui/scramble/algorithm.d.ts +7 -0
  177. package/dist/tui/scramble/algorithm.d.ts.map +1 -0
  178. package/dist/tui/scramble/algorithm.js +227 -0
  179. package/dist/tui/scramble/algorithm.js.map +1 -0
  180. package/dist/tui/scramble/constants.d.ts +99 -0
  181. package/dist/tui/scramble/constants.d.ts.map +1 -0
  182. package/dist/tui/scramble/constants.js +101 -0
  183. package/dist/tui/scramble/constants.js.map +1 -0
  184. package/dist/tui/scramble/index.d.ts +6 -0
  185. package/dist/tui/scramble/index.d.ts.map +1 -0
  186. package/dist/tui/scramble/index.js +6 -0
  187. package/dist/tui/scramble/index.js.map +1 -0
  188. package/dist/tui/scramble/manager.d.ts +48 -0
  189. package/dist/tui/scramble/manager.d.ts.map +1 -0
  190. package/dist/tui/scramble/manager.js +959 -0
  191. package/dist/tui/scramble/manager.js.map +1 -0
  192. package/dist/tui/scramble/utils.d.ts +18 -0
  193. package/dist/tui/scramble/utils.d.ts.map +1 -0
  194. package/dist/tui/scramble/utils.js +145 -0
  195. package/dist/tui/scramble/utils.js.map +1 -0
  196. package/dist/tui/single-select-layout.d.ts +17 -0
  197. package/dist/tui/single-select-layout.d.ts.map +1 -0
  198. package/dist/{single-select-layout.js → tui/single-select-layout.js} +8 -25
  199. package/dist/tui/single-select-layout.js.map +1 -0
  200. package/dist/types/flow.d.ts +110 -0
  201. package/dist/types/flow.d.ts.map +1 -0
  202. package/dist/{types.js → types/flow.js} +3 -54
  203. package/dist/types/flow.js.map +1 -0
  204. package/dist/types/index.d.ts +8 -0
  205. package/dist/types/index.d.ts.map +1 -0
  206. package/dist/types/index.js +7 -0
  207. package/dist/types/index.js.map +1 -0
  208. package/dist/types/output.d.ts +104 -0
  209. package/dist/types/output.d.ts.map +1 -0
  210. package/dist/types/output.js +5 -0
  211. package/dist/types/output.js.map +1 -0
  212. package/dist/types/ui.d.ts +24 -0
  213. package/dist/types/ui.d.ts.map +1 -0
  214. package/dist/types/ui.js +55 -0
  215. package/dist/types/ui.js.map +1 -0
  216. package/package.json +1 -1
  217. package/dist/agents.d.ts.map +0 -1
  218. package/dist/agents.js.map +0 -1
  219. package/dist/ask-user.d.ts.map +0 -1
  220. package/dist/ask-user.js +0 -1405
  221. package/dist/ask-user.js.map +0 -1
  222. package/dist/batch.d.ts +0 -12
  223. package/dist/batch.d.ts.map +0 -1
  224. package/dist/batch.js +0 -11
  225. package/dist/batch.js.map +0 -1
  226. package/dist/cli-args.d.ts.map +0 -1
  227. package/dist/cli-args.js.map +0 -1
  228. package/dist/config.d.ts.map +0 -1
  229. package/dist/config.js.map +0 -1
  230. package/dist/depth.d.ts.map +0 -1
  231. package/dist/depth.js.map +0 -1
  232. package/dist/executor.d.ts.map +0 -1
  233. package/dist/executor.js.map +0 -1
  234. package/dist/flow-prompt.d.ts.map +0 -1
  235. package/dist/flow-prompt.js.map +0 -1
  236. package/dist/flow.d.ts.map +0 -1
  237. package/dist/flow.js.map +0 -1
  238. package/dist/notify-state.d.ts.map +0 -1
  239. package/dist/notify-state.js.map +0 -1
  240. package/dist/notify.d.ts.map +0 -1
  241. package/dist/notify.js.map +0 -1
  242. package/dist/reasoning-strip.d.ts.map +0 -1
  243. package/dist/reasoning-strip.js.map +0 -1
  244. package/dist/render-utils.d.ts.map +0 -1
  245. package/dist/render-utils.js.map +0 -1
  246. package/dist/render.d.ts +0 -24
  247. package/dist/render.d.ts.map +0 -1
  248. package/dist/render.js +0 -592
  249. package/dist/render.js.map +0 -1
  250. package/dist/runner-events.d.ts.map +0 -1
  251. package/dist/runner-events.js.map +0 -1
  252. package/dist/scramble.d.ts +0 -183
  253. package/dist/scramble.d.ts.map +0 -1
  254. package/dist/scramble.js +0 -2478
  255. package/dist/scramble.js.map +0 -1
  256. package/dist/session-mode.d.ts.map +0 -1
  257. package/dist/session-mode.js.map +0 -1
  258. package/dist/settings-resolver.d.ts.map +0 -1
  259. package/dist/settings-resolver.js +0 -148
  260. package/dist/settings-resolver.js.map +0 -1
  261. package/dist/single-select-layout.d.ts +0 -20
  262. package/dist/single-select-layout.d.ts.map +0 -1
  263. package/dist/single-select-layout.js.map +0 -1
  264. package/dist/sliding-prompt.d.ts.map +0 -1
  265. package/dist/sliding-prompt.js.map +0 -1
  266. package/dist/snapshot.d.ts.map +0 -1
  267. package/dist/snapshot.js.map +0 -1
  268. package/dist/spec-mode.d.ts +0 -13
  269. package/dist/spec-mode.d.ts.map +0 -1
  270. package/dist/spec-mode.js +0 -90
  271. package/dist/spec-mode.js.map +0 -1
  272. package/dist/structured-output.d.ts.map +0 -1
  273. package/dist/structured-output.js.map +0 -1
  274. package/dist/timed-bash.d.ts.map +0 -1
  275. package/dist/timed-bash.js.map +0 -1
  276. package/dist/tool-utils.d.ts.map +0 -1
  277. package/dist/tool-utils.js.map +0 -1
  278. package/dist/transitions.d.ts.map +0 -1
  279. package/dist/transitions.js.map +0 -1
  280. package/dist/types.d.ts +0 -224
  281. package/dist/types.d.ts.map +0 -1
  282. package/dist/types.js.map +0 -1
  283. package/dist/web-tool.d.ts.map +0 -1
  284. package/dist/web-tool.js.map +0 -1
  285. /package/dist/{agents.d.ts → core/agents.d.ts} +0 -0
  286. /package/dist/{depth.d.ts → core/depth.d.ts} +0 -0
  287. /package/dist/{transitions.d.ts → core/transitions.d.ts} +0 -0
  288. /package/dist/{notify-state.js → notify/notify-state.js} +0 -0
  289. /package/dist/{notify.d.ts → notify/notify.d.ts} +0 -0
  290. /package/dist/{runner-events.d.ts → snapshot/runner-events.d.ts} +0 -0
  291. /package/dist/{structured-output.js → snapshot/structured-output.js} +0 -0
@@ -7,7 +7,8 @@
7
7
  import * as fs from "node:fs";
8
8
  import * as os from "node:os";
9
9
  import * as path from "node:path";
10
- import { parseAgentSessionMode } from "./session-mode.js";
10
+ import { parseAgentSessionMode } from "../core/session-mode.js";
11
+ import { logWarn } from "./log.js";
11
12
  const BUILTIN_FLOW_MODEL_CONFIGS = {
12
13
  default: {},
13
14
  };
@@ -81,13 +82,13 @@ function normalizeFailoverList(value, sourceLabel, strategyName, tier) {
81
82
  if (value === undefined)
82
83
  return undefined;
83
84
  if (!Array.isArray(value)) {
84
- console.warn(`[pi-agent-flow] Ignoring invalid ${sourceLabel}.flowModelConfigs.${strategyName}.${tier}.failover. Expected an array of strings.`);
85
+ logWarn(`[pi-agent-flow] Ignoring invalid ${sourceLabel}.flowModelConfigs.${strategyName}.${tier}.failover. Expected an array of strings.`);
85
86
  return undefined;
86
87
  }
87
88
  const result = [];
88
89
  for (const item of value) {
89
90
  if (typeof item !== "string") {
90
- console.warn(`[pi-agent-flow] Ignoring invalid failover entry in ${sourceLabel}.flowModelConfigs.${strategyName}.${tier}. Expected a string.`);
91
+ logWarn(`[pi-agent-flow] Ignoring invalid failover entry in ${sourceLabel}.flowModelConfigs.${strategyName}.${tier}. Expected a string.`);
91
92
  continue;
92
93
  }
93
94
  const normalized = item.trim();
@@ -104,18 +105,18 @@ function extractFlowModelConfigs(settings, sourceLabel) {
104
105
  if (rawConfigs === undefined)
105
106
  return {};
106
107
  if (!isPlainObject(rawConfigs)) {
107
- console.warn(`[pi-agent-flow] Ignoring invalid ${sourceLabel}.flowModelConfigs. Expected an object map of strategy names.`);
108
+ logWarn(`[pi-agent-flow] Ignoring invalid ${sourceLabel}.flowModelConfigs. Expected an object map of strategy names.`);
108
109
  return {};
109
110
  }
110
111
  const result = {};
111
112
  for (const [rawName, rawStrategy] of Object.entries(rawConfigs)) {
112
113
  const name = rawName.trim();
113
114
  if (!name) {
114
- console.warn(`[pi-agent-flow] Ignoring empty strategy name in ${sourceLabel}.flowModelConfigs.`);
115
+ logWarn(`[pi-agent-flow] Ignoring empty strategy name in ${sourceLabel}.flowModelConfigs.`);
115
116
  continue;
116
117
  }
117
118
  if (!isPlainObject(rawStrategy)) {
118
- console.warn(`[pi-agent-flow] Ignoring invalid ${sourceLabel}.flowModelConfigs.${name}. Expected an object with lite/flash/full tiers.`);
119
+ logWarn(`[pi-agent-flow] Ignoring invalid ${sourceLabel}.flowModelConfigs.${name}. Expected an object with lite/flash/full tiers.`);
119
120
  continue;
120
121
  }
121
122
  const strategy = {};
@@ -124,7 +125,7 @@ function extractFlowModelConfigs(settings, sourceLabel) {
124
125
  if (rawTier === undefined)
125
126
  continue;
126
127
  if (!isPlainObject(rawTier)) {
127
- console.warn(`[pi-agent-flow] Ignoring invalid ${sourceLabel}.flowModelConfigs.${name}.${tier}. Expected { primary?: string, failover?: string[] }.`);
128
+ logWarn(`[pi-agent-flow] Ignoring invalid ${sourceLabel}.flowModelConfigs.${name}.${tier}. Expected { primary?: string, failover?: string[] }.`);
128
129
  continue;
129
130
  }
130
131
  const tierConfig = {};
@@ -134,7 +135,7 @@ function extractFlowModelConfigs(settings, sourceLabel) {
134
135
  tierConfig.primary = primary;
135
136
  }
136
137
  else if (rawTier.primary !== undefined) {
137
- console.warn(`[pi-agent-flow] Ignoring invalid ${sourceLabel}.flowModelConfigs.${name}.${tier}.primary. Expected a string.`);
138
+ logWarn(`[pi-agent-flow] Ignoring invalid ${sourceLabel}.flowModelConfigs.${name}.${tier}.primary. Expected a string.`);
138
139
  }
139
140
  const failover = normalizeFailoverList(rawTier.failover, sourceLabel, name, tier);
140
141
  if (failover !== undefined) {
@@ -171,6 +172,42 @@ function extractFlowSettings(settings) {
171
172
  if (sessionMode !== undefined) {
172
173
  result.sessionMode = sessionMode;
173
174
  }
175
+ // Parse nested steering settings
176
+ if (isPlainObject(obj.steering)) {
177
+ const steering = {};
178
+ if (typeof obj.steering.enabled === "boolean") {
179
+ steering.enabled = obj.steering.enabled;
180
+ }
181
+ if (typeof obj.steering.customPrompt === "string") {
182
+ steering.customPrompt = obj.steering.customPrompt;
183
+ }
184
+ if (typeof obj.steering.strategicHint === "boolean") {
185
+ steering.strategicHint = obj.steering.strategicHint;
186
+ }
187
+ result.steering = steering;
188
+ }
189
+ // Parse nested animation settings
190
+ if (isPlainObject(obj.animation)) {
191
+ const animation = {};
192
+ if (typeof obj.animation.enabled === "boolean") {
193
+ animation.enabled = obj.animation.enabled;
194
+ }
195
+ if (typeof obj.animation.glitch === "boolean") {
196
+ animation.glitch = obj.animation.glitch;
197
+ }
198
+ result.animation = animation;
199
+ }
200
+ // Parse nested askUser settings
201
+ if (isPlainObject(obj.askUser)) {
202
+ const askUser = {};
203
+ if (typeof obj.askUser.enabled === "boolean") {
204
+ askUser.enabled = obj.askUser.enabled;
205
+ }
206
+ if (typeof obj.askUser.timeout === "number" && Number.isSafeInteger(obj.askUser.timeout) && obj.askUser.timeout >= 1) {
207
+ askUser.timeout = obj.askUser.timeout;
208
+ }
209
+ result.askUser = askUser;
210
+ }
174
211
  return result;
175
212
  }
176
213
  function mergeFlowModelTierConfigs(base, override) {
@@ -215,6 +252,60 @@ export function loadFlowSettings(cwd) {
215
252
  ...projectFlowSettings,
216
253
  };
217
254
  }
255
+ /**
256
+ * Atomically write a single flow setting to the project .pi/settings.json.
257
+ * Supports dot-notation keyPath like "steering.enabled" or "animation.glitch".
258
+ */
259
+ export function writeFlowSetting(cwd, keyPath, value) {
260
+ const filePath = getProjectSettingsPath(cwd);
261
+ let settings = {};
262
+ if (fs.existsSync(filePath)) {
263
+ let parsed;
264
+ try {
265
+ parsed = JSON.parse(fs.readFileSync(filePath, "utf-8"));
266
+ }
267
+ catch (error) {
268
+ throw new Error(`Cannot update flow setting because ${filePath} contains invalid JSON.`);
269
+ }
270
+ if (!isPlainObject(parsed)) {
271
+ throw new Error(`Cannot update flow setting because ${filePath} must contain a JSON object.`);
272
+ }
273
+ settings = { ...parsed };
274
+ }
275
+ if (!settings.flowSettings || !isPlainObject(settings.flowSettings)) {
276
+ settings.flowSettings = {};
277
+ }
278
+ const flowSettings = settings.flowSettings;
279
+ if (!keyPath) {
280
+ // Reset the entire flowSettings object when keyPath is empty
281
+ const previous = { ...flowSettings };
282
+ settings.flowSettings = value;
283
+ const dir = path.dirname(filePath);
284
+ fs.mkdirSync(dir, { recursive: true });
285
+ const tmpPath = path.join(dir, `.settings.json.${process.pid}.${Date.now()}.tmp`);
286
+ fs.writeFileSync(tmpPath, `${JSON.stringify(settings, null, 2)}\n`, "utf-8");
287
+ fs.renameSync(tmpPath, filePath);
288
+ return { path: filePath, previous };
289
+ }
290
+ const keys = keyPath.split(".");
291
+ let target = flowSettings;
292
+ for (let i = 0; i < keys.length - 1; i++) {
293
+ const k = keys[i];
294
+ if (!target[k] || !isPlainObject(target[k])) {
295
+ target[k] = {};
296
+ }
297
+ target = target[k];
298
+ }
299
+ const leafKey = keys[keys.length - 1];
300
+ const previous = target[leafKey];
301
+ target[leafKey] = value;
302
+ const dir = path.dirname(filePath);
303
+ fs.mkdirSync(dir, { recursive: true });
304
+ const tmpPath = path.join(dir, `.settings.json.${process.pid}.${Date.now()}.tmp`);
305
+ fs.writeFileSync(tmpPath, `${JSON.stringify(settings, null, 2)}\n`, "utf-8");
306
+ fs.renameSync(tmpPath, filePath);
307
+ return { path: filePath, previous };
308
+ }
218
309
  export function selectFlowModelStrategy(configs, requestedName) {
219
310
  const normalizedRequested = normalizeFlowModeName(requestedName) ?? "default";
220
311
  const strategy = configs[normalizedRequested];
@@ -222,7 +313,7 @@ export function selectFlowModelStrategy(configs, requestedName) {
222
313
  return { selectedName: normalizedRequested, configs, strategy };
223
314
  }
224
315
  if (normalizedRequested !== "default") {
225
- console.warn(`[pi-agent-flow] Flow model config "${normalizedRequested}" not found. Falling back to "default".`);
316
+ logWarn(`[pi-agent-flow] Flow model config "${normalizedRequested}" not found. Falling back to "default".`);
226
317
  }
227
318
  return {
228
319
  selectedName: "default",
@@ -293,4 +384,61 @@ export function formatFlowModelStrategy(modeName, strategy) {
293
384
  }
294
385
  return `mode: ${modeName} | ${parts.join(" - ")}`;
295
386
  }
387
+ export function writeFlowModelConfig(cwd, strategyName, tier, updates) {
388
+ const filePath = getProjectSettingsPath(cwd);
389
+ let settings = {};
390
+ if (fs.existsSync(filePath)) {
391
+ let parsed;
392
+ try {
393
+ parsed = JSON.parse(fs.readFileSync(filePath, "utf-8"));
394
+ }
395
+ catch (error) {
396
+ throw new Error(`Cannot update flow model config because ${filePath} contains invalid JSON.`);
397
+ }
398
+ if (!isPlainObject(parsed)) {
399
+ throw new Error(`Cannot update flow model config because ${filePath} must contain a JSON object.`);
400
+ }
401
+ settings = { ...parsed };
402
+ }
403
+ if (!settings.flowModelConfigs || !isPlainObject(settings.flowModelConfigs)) {
404
+ settings.flowModelConfigs = {};
405
+ }
406
+ const configs = settings.flowModelConfigs;
407
+ if (!configs[strategyName] || !isPlainObject(configs[strategyName])) {
408
+ configs[strategyName] = {};
409
+ }
410
+ const strategy = configs[strategyName];
411
+ if (!strategy[tier] || !isPlainObject(strategy[tier])) {
412
+ strategy[tier] = {};
413
+ }
414
+ const tierConfig = strategy[tier];
415
+ if (updates.primary !== undefined) {
416
+ if (updates.primary === null) {
417
+ delete tierConfig.primary;
418
+ }
419
+ else {
420
+ tierConfig.primary = updates.primary;
421
+ }
422
+ }
423
+ if (updates.failover !== undefined) {
424
+ if (updates.failover === null) {
425
+ delete tierConfig.failover;
426
+ }
427
+ else {
428
+ tierConfig.failover = updates.failover;
429
+ }
430
+ }
431
+ if (Object.keys(tierConfig).length === 0) {
432
+ delete strategy[tier];
433
+ }
434
+ if (Object.keys(strategy).length === 0) {
435
+ delete configs[strategyName];
436
+ }
437
+ const dir = path.dirname(filePath);
438
+ fs.mkdirSync(dir, { recursive: true });
439
+ const tmpPath = path.join(dir, `.settings.json.${process.pid}.${Date.now()}.tmp`);
440
+ fs.writeFileSync(tmpPath, `${JSON.stringify(settings, null, 2)}
441
+ `, "utf-8");
442
+ fs.renameSync(tmpPath, filePath);
443
+ }
296
444
  //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * TUI-safe logging for pi-agent-flow.
3
+ *
4
+ * During flow execution, the TUI redraws the entire screen on every frame.
5
+ * Any console.warn/console.error output to stderr briefly flashes on-screen
6
+ * before being overwritten, causing the "text appears then disappears" glitch.
7
+ *
8
+ * This module provides a `logWarn` / `logError` pair that:
9
+ * - Writes to a file when the TUI is active (env PI_TUI_MODE=1 or when
10
+ * the process is a child flow at depth > 0).
11
+ * - Falls back to console.warn/console.error when not in a TUI context
12
+ * (e.g. test runners, direct CLI invocations).
13
+ *
14
+ * The log file path is `PI_FLOW_LOG_FILE` or `${TMPDIR}/pi-agent-flow.log`
15
+ * by default. Set `PI_FLOW_LOG_FILE=/dev/null` to suppress entirely.
16
+ */
17
+ /**
18
+ * Log a warning message. When TUI is active, writes to the log file
19
+ * instead of stderr to avoid on-screen flashing.
20
+ */
21
+ export declare function logWarn(message: string): void;
22
+ /**
23
+ * Log an error message. When TUI is active, writes to the log file
24
+ * instead of stderr to avoid on-screen flashing.
25
+ */
26
+ export declare function logError(message: string): void;
27
+ //# sourceMappingURL=log.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../../src/config/log.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAuDH;;;GAGG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAO7C;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAO9C"}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * TUI-safe logging for pi-agent-flow.
3
+ *
4
+ * During flow execution, the TUI redraws the entire screen on every frame.
5
+ * Any console.warn/console.error output to stderr briefly flashes on-screen
6
+ * before being overwritten, causing the "text appears then disappears" glitch.
7
+ *
8
+ * This module provides a `logWarn` / `logError` pair that:
9
+ * - Writes to a file when the TUI is active (env PI_TUI_MODE=1 or when
10
+ * the process is a child flow at depth > 0).
11
+ * - Falls back to console.warn/console.error when not in a TUI context
12
+ * (e.g. test runners, direct CLI invocations).
13
+ *
14
+ * The log file path is `PI_FLOW_LOG_FILE` or `${TMPDIR}/pi-agent-flow.log`
15
+ * by default. Set `PI_FLOW_LOG_FILE=/dev/null` to suppress entirely.
16
+ */
17
+ import * as fs from "node:fs";
18
+ import * as os from "node:os";
19
+ import * as path from "node:path";
20
+ // ---------------------------------------------------------------------------
21
+ // Config
22
+ // ---------------------------------------------------------------------------
23
+ const TUI_MODE_ENV = "PI_TUI_MODE";
24
+ const LOG_FILE_ENV = "PI_FLOW_LOG_FILE";
25
+ function getLogFilePath() {
26
+ const env = process.env[LOG_FILE_ENV];
27
+ if (env)
28
+ return env;
29
+ return path.join(os.tmpdir(), "pi-agent-flow.log");
30
+ }
31
+ /**
32
+ * Determine whether the process is running inside a TUI that would be
33
+ * disrupted by stderr output. We consider it TUI-active when:
34
+ * 1. The PI_TUI_MODE env var is set to "1"
35
+ * 2. OR the process is a child flow (depth > 0) — child flows always run
36
+ * under the parent's TUI, so stderr would flash.
37
+ * 3. OR stdout is a TTY (heuristic — terminal apps usually are TUIs).
38
+ */
39
+ function isTuiActive() {
40
+ const envMode = process.env[TUI_MODE_ENV];
41
+ if (envMode === "1" || envMode === "true")
42
+ return true;
43
+ const flowDepth = process.env.PI_FLOW_DEPTH;
44
+ if (flowDepth && parseInt(flowDepth, 10) > 0)
45
+ return true;
46
+ if (process.stdout.isTTY)
47
+ return true;
48
+ return false;
49
+ }
50
+ // Cache the TUI check and log path for the process lifetime
51
+ let _isTui;
52
+ let _logPath;
53
+ function initLogging() {
54
+ _isTui = isTuiActive();
55
+ if (_logPath === undefined) {
56
+ _logPath = getLogFilePath();
57
+ }
58
+ }
59
+ // ---------------------------------------------------------------------------
60
+ // Public API
61
+ // ---------------------------------------------------------------------------
62
+ /**
63
+ * Log a warning message. When TUI is active, writes to the log file
64
+ * instead of stderr to avoid on-screen flashing.
65
+ */
66
+ export function logWarn(message) {
67
+ initLogging();
68
+ if (_isTui) {
69
+ writeToLogFile("WARN", message);
70
+ }
71
+ else {
72
+ console.warn(message);
73
+ }
74
+ }
75
+ /**
76
+ * Log an error message. When TUI is active, writes to the log file
77
+ * instead of stderr to avoid on-screen flashing.
78
+ */
79
+ export function logError(message) {
80
+ initLogging();
81
+ if (_isTui) {
82
+ writeToLogFile("ERROR", message);
83
+ }
84
+ else {
85
+ console.error(message);
86
+ }
87
+ }
88
+ // ---------------------------------------------------------------------------
89
+ // File writer
90
+ // ---------------------------------------------------------------------------
91
+ function writeToLogFile(level, message) {
92
+ if (!_logPath || _logPath === "/dev/null")
93
+ return;
94
+ try {
95
+ const ts = new Date().toISOString();
96
+ const line = `[${ts}] [${level}] ${message}\n`;
97
+ fs.appendFileSync(_logPath, line, { encoding: "utf-8" });
98
+ }
99
+ catch {
100
+ // Best-effort: if we can't write to the log, silently drop it.
101
+ // Do NOT fall back to console.error — that would re-introduce the flash.
102
+ }
103
+ }
104
+ //# sourceMappingURL=log.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/config/log.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,8EAA8E;AAC9E,SAAS;AACT,8EAA8E;AAE9E,MAAM,YAAY,GAAG,aAAa,CAAC;AACnC,MAAM,YAAY,GAAG,kBAAkB,CAAC;AAGxC,SAAS,cAAc;IACtB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACtC,IAAI,GAAG;QAAE,OAAO,GAAG,CAAC;IACpB,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,mBAAmB,CAAC,CAAC;AACpD,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,WAAW;IACnB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAC1C,IAAI,OAAO,KAAK,GAAG,IAAI,OAAO,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IAEvD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;IAC5C,IAAI,SAAS,IAAI,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAE1D,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAEtC,OAAO,KAAK,CAAC;AACd,CAAC;AAED,4DAA4D;AAC5D,IAAI,MAA2B,CAAC;AAChC,IAAI,QAA4B,CAAC;AAEjC,SAAS,WAAW;IACnB,MAAM,GAAG,WAAW,EAAE,CAAC;IACvB,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC5B,QAAQ,GAAG,cAAc,EAAE,CAAC;IAC7B,CAAC;AACF,CAAC;AAED,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,UAAU,OAAO,CAAC,OAAe;IACtC,WAAW,EAAE,CAAC;IACd,IAAI,MAAM,EAAE,CAAC;QACZ,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,CAAC;SAAM,CAAC;QACP,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC;AACF,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAC,OAAe;IACvC,WAAW,EAAE,CAAC;IACd,IAAI,MAAM,EAAE,CAAC;QACZ,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAClC,CAAC;SAAM,CAAC;QACP,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;AACF,CAAC;AAED,8EAA8E;AAC9E,cAAc;AACd,8EAA8E;AAE9E,SAAS,cAAc,CAAC,KAAa,EAAE,OAAe;IACrD,IAAI,CAAC,QAAQ,IAAI,QAAQ,KAAK,WAAW;QAAE,OAAO;IAClD,IAAI,CAAC;QACJ,MAAM,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,IAAI,EAAE,MAAM,KAAK,KAAK,OAAO,IAAI,CAAC;QAC/C,EAAE,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;IAC1D,CAAC;IAAC,MAAM,CAAC;QACR,+DAA+D;QAC/D,yEAAyE;IAC1E,CAAC;AACF,CAAC"}
@@ -4,14 +4,21 @@
4
4
  * Extracted from index.ts for single-responsibility and testability.
5
5
  */
6
6
  import type { ExtensionAPI } from "@mariozechner/pi-coding-agent";
7
- import { type FlowConfig } from "./agents.js";
7
+ import { type FlowConfig } from "../core/agents.js";
8
8
  import { type LoadedFlowModelConfigs } from "./config.js";
9
- import { type AgentSessionMode } from "./session-mode.js";
9
+ import { type AgentSessionMode } from "../core/session-mode.js";
10
10
  export interface ResolvedSettings {
11
11
  toolOptimize: boolean;
12
12
  structuredOutput: boolean;
13
13
  maxConcurrency: number;
14
14
  defaultSessionMode: AgentSessionMode;
15
+ steeringEnabled: boolean;
16
+ steeringCustomPrompt: string | undefined;
17
+ steeringStrategicHint: boolean;
18
+ animationEnabled: boolean;
19
+ animationGlitch: boolean;
20
+ askUserEnabled: boolean;
21
+ askUserTimeout: number;
15
22
  discoveredFlows: FlowConfig[];
16
23
  loadedFlowModelConfigs: LoadedFlowModelConfigs;
17
24
  activeRuntimeFlowMode: string | undefined;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings-resolver.d.ts","sourceRoot":"","sources":["../../src/config/settings-resolver.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,KAAK,UAAU,EAAiB,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAQN,KAAK,sBAAsB,EAC3B,MAAM,aAAa,CAAC;AAIrB,OAAO,EAIN,KAAK,gBAAgB,EACrB,MAAM,yBAAyB,CAAC;AAYjC,MAAM,WAAW,gBAAgB;IAChC,YAAY,EAAE,OAAO,CAAC;IACtB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,gBAAgB,CAAC;IACrC,eAAe,EAAE,OAAO,CAAC;IACzB,oBAAoB,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,qBAAqB,EAAE,OAAO,CAAC;IAC/B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,eAAe,EAAE,OAAO,CAAC;IACzB,cAAc,EAAE,OAAO,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,UAAU,EAAE,CAAC;IAC9B,sBAAsB,EAAE,sBAAsB,CAAC;IAC/C,qBAAqB,EAAE,MAAM,GAAG,SAAS,CAAC;CAC1C;AAMD;;;;;GAKG;AACH,wBAAgB,eAAe,CAC9B,EAAE,EAAE,YAAY,EAChB,GAAG,EAAE,MAAM,GACT,gBAAgB,GAAG;IAAE,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAiPvD"}