pi-agent-flow 2.3.2 → 2.3.3

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 (209) hide show
  1. package/agents/craft.md +1 -1
  2. package/agents/debug.md +1 -1
  3. package/agents/ideas.md +1 -1
  4. package/dist/batch/batch-bash.d.ts +1 -6
  5. package/dist/batch/batch-bash.d.ts.map +1 -1
  6. package/dist/batch/batch-bash.js +2 -7
  7. package/dist/batch/batch-bash.js.map +1 -1
  8. package/dist/batch/constants.d.ts +2 -4
  9. package/dist/batch/constants.d.ts.map +1 -1
  10. package/dist/batch/execute.d.ts +2 -2
  11. package/dist/batch/execute.d.ts.map +1 -1
  12. package/dist/batch/execute.js +1 -13
  13. package/dist/batch/execute.js.map +1 -1
  14. package/dist/batch/fuzzy-edit.d.ts +1 -1
  15. package/dist/batch/fuzzy-edit.d.ts.map +1 -1
  16. package/dist/batch/fuzzy-edit.js +17 -43
  17. package/dist/batch/fuzzy-edit.js.map +1 -1
  18. package/dist/batch/index.d.ts +73 -0
  19. package/dist/batch/index.d.ts.map +1 -0
  20. package/dist/batch/index.js +450 -0
  21. package/dist/batch/index.js.map +1 -0
  22. package/dist/batch/normalize.d.ts +4 -0
  23. package/dist/batch/normalize.d.ts.map +1 -0
  24. package/dist/batch/normalize.js +85 -0
  25. package/dist/batch/normalize.js.map +1 -0
  26. package/dist/batch/summary.d.ts.map +1 -1
  27. package/dist/batch/summary.js +0 -146
  28. package/dist/batch/summary.js.map +1 -1
  29. package/dist/core2/snapshot.d.ts.map +1 -1
  30. package/dist/core2/snapshot.js +1 -8
  31. package/dist/core2/snapshot.js.map +1 -1
  32. package/dist/flow/continuation.d.ts.map +1 -1
  33. package/dist/flow/continuation.js +0 -26
  34. package/dist/flow/continuation.js.map +1 -1
  35. package/dist/flow/executor.d.ts.map +1 -1
  36. package/dist/flow/executor.js +0 -1
  37. package/dist/flow/executor.js.map +1 -1
  38. package/dist/flow/flow-args-prep.d.ts +28 -0
  39. package/dist/flow/flow-args-prep.d.ts.map +1 -0
  40. package/dist/flow/flow-args-prep.js +84 -0
  41. package/dist/flow/flow-args-prep.js.map +1 -0
  42. package/dist/flow/flow-args.js +1 -1
  43. package/dist/flow/flow-args.js.map +1 -1
  44. package/dist/flow/flow-dispatch-prep.d.ts +11 -0
  45. package/dist/flow/flow-dispatch-prep.d.ts.map +1 -0
  46. package/dist/flow/flow-dispatch-prep.js +40 -0
  47. package/dist/flow/flow-dispatch-prep.js.map +1 -0
  48. package/dist/flow/op-aliases.d.ts +51 -0
  49. package/dist/flow/op-aliases.d.ts.map +1 -0
  50. package/dist/flow/op-aliases.js +185 -0
  51. package/dist/flow/op-aliases.js.map +1 -0
  52. package/dist/flow/process-lifecycle.d.ts.map +1 -1
  53. package/dist/flow/process-lifecycle.js +3 -11
  54. package/dist/flow/process-lifecycle.js.map +1 -1
  55. package/dist/flow/runner.d.ts.map +1 -1
  56. package/dist/flow/runner.js +5 -36
  57. package/dist/flow/runner.js.map +1 -1
  58. package/dist/flow/warp.d.ts.map +1 -1
  59. package/dist/flow/warp.js +10 -16
  60. package/dist/flow/warp.js.map +1 -1
  61. package/dist/index.d.ts +4 -1
  62. package/dist/index.d.ts.map +1 -1
  63. package/dist/index.js +251 -159
  64. package/dist/index.js.map +1 -1
  65. package/dist/steering/flow-prompt.js +2 -2
  66. package/dist/steering/flow-prompt.js.map +1 -1
  67. package/dist/steering/sliding-prompt.js +2 -2
  68. package/dist/steering/sliding-prompt.js.map +1 -1
  69. package/dist/tools/array-coerce.d.ts +9 -0
  70. package/dist/tools/array-coerce.d.ts.map +1 -0
  71. package/dist/tools/array-coerce.js +47 -0
  72. package/dist/tools/array-coerce.js.map +1 -0
  73. package/dist/tools/ask-user.d.ts +7 -10
  74. package/dist/tools/ask-user.d.ts.map +1 -1
  75. package/dist/tools/ask-user.js +62 -51
  76. package/dist/tools/ask-user.js.map +1 -1
  77. package/dist/tools/trace-dispatch-prep.d.ts +10 -0
  78. package/dist/tools/trace-dispatch-prep.d.ts.map +1 -0
  79. package/dist/tools/trace-dispatch-prep.js +199 -0
  80. package/dist/tools/trace-dispatch-prep.js.map +1 -0
  81. package/dist/tools/trace.d.ts +7 -12
  82. package/dist/tools/trace.d.ts.map +1 -1
  83. package/dist/tools/trace.js +194 -155
  84. package/dist/tools/trace.js.map +1 -1
  85. package/dist/tools/web-ops.d.ts +0 -40
  86. package/dist/tools/web-ops.d.ts.map +1 -1
  87. package/dist/tools/web-ops.js +3 -7
  88. package/dist/tools/web-ops.js.map +1 -1
  89. package/package.json +2 -3
  90. package/dist/cli/ask-user.d.ts +0 -40
  91. package/dist/cli/ask-user.d.ts.map +0 -1
  92. package/dist/cli/ask-user.js +0 -117
  93. package/dist/cli/ask-user.js.map +0 -1
  94. package/dist/cli/batch-read.d.ts +0 -17
  95. package/dist/cli/batch-read.d.ts.map +0 -1
  96. package/dist/cli/batch-read.js +0 -76
  97. package/dist/cli/batch-read.js.map +0 -1
  98. package/dist/cli/batch.d.ts +0 -20
  99. package/dist/cli/batch.d.ts.map +0 -1
  100. package/dist/cli/batch.js +0 -128
  101. package/dist/cli/batch.js.map +0 -1
  102. package/dist/cli/chain.d.ts +0 -24
  103. package/dist/cli/chain.d.ts.map +0 -1
  104. package/dist/cli/chain.js +0 -166
  105. package/dist/cli/chain.js.map +0 -1
  106. package/dist/cli/exec/bash.d.ts +0 -7
  107. package/dist/cli/exec/bash.d.ts.map +0 -1
  108. package/dist/cli/exec/bash.js +0 -63
  109. package/dist/cli/exec/bash.js.map +0 -1
  110. package/dist/cli/exec/delete.d.ts +0 -6
  111. package/dist/cli/exec/delete.d.ts.map +0 -1
  112. package/dist/cli/exec/delete.js +0 -18
  113. package/dist/cli/exec/delete.js.map +0 -1
  114. package/dist/cli/exec/edit.d.ts +0 -6
  115. package/dist/cli/exec/edit.d.ts.map +0 -1
  116. package/dist/cli/exec/edit.js +0 -44
  117. package/dist/cli/exec/edit.js.map +0 -1
  118. package/dist/cli/exec/patch.d.ts +0 -6
  119. package/dist/cli/exec/patch.d.ts.map +0 -1
  120. package/dist/cli/exec/patch.js +0 -20
  121. package/dist/cli/exec/patch.js.map +0 -1
  122. package/dist/cli/exec/poll.d.ts +0 -7
  123. package/dist/cli/exec/poll.d.ts.map +0 -1
  124. package/dist/cli/exec/poll.js +0 -59
  125. package/dist/cli/exec/poll.js.map +0 -1
  126. package/dist/cli/exec/read.d.ts +0 -15
  127. package/dist/cli/exec/read.d.ts.map +0 -1
  128. package/dist/cli/exec/read.js +0 -54
  129. package/dist/cli/exec/read.js.map +0 -1
  130. package/dist/cli/exec/rg.d.ts +0 -10
  131. package/dist/cli/exec/rg.d.ts.map +0 -1
  132. package/dist/cli/exec/rg.js +0 -32
  133. package/dist/cli/exec/rg.js.map +0 -1
  134. package/dist/cli/exec/util.d.ts +0 -9
  135. package/dist/cli/exec/util.d.ts.map +0 -1
  136. package/dist/cli/exec/util.js +0 -8
  137. package/dist/cli/exec/util.js.map +0 -1
  138. package/dist/cli/exec/web.d.ts +0 -8
  139. package/dist/cli/exec/web.d.ts.map +0 -1
  140. package/dist/cli/exec/web.js +0 -48
  141. package/dist/cli/exec/web.js.map +0 -1
  142. package/dist/cli/exec/write.d.ts +0 -6
  143. package/dist/cli/exec/write.d.ts.map +0 -1
  144. package/dist/cli/exec/write.js +0 -23
  145. package/dist/cli/exec/write.js.map +0 -1
  146. package/dist/cli/flags/bash.d.ts +0 -3
  147. package/dist/cli/flags/bash.d.ts.map +0 -1
  148. package/dist/cli/flags/bash.js +0 -7
  149. package/dist/cli/flags/bash.js.map +0 -1
  150. package/dist/cli/flags/delete.d.ts +0 -3
  151. package/dist/cli/flags/delete.d.ts.map +0 -1
  152. package/dist/cli/flags/delete.js +0 -4
  153. package/dist/cli/flags/delete.js.map +0 -1
  154. package/dist/cli/flags/edit.d.ts +0 -3
  155. package/dist/cli/flags/edit.d.ts.map +0 -1
  156. package/dist/cli/flags/edit.js +0 -8
  157. package/dist/cli/flags/edit.js.map +0 -1
  158. package/dist/cli/flags/patch.d.ts +0 -3
  159. package/dist/cli/flags/patch.d.ts.map +0 -1
  160. package/dist/cli/flags/patch.js +0 -5
  161. package/dist/cli/flags/patch.js.map +0 -1
  162. package/dist/cli/flags/poll.d.ts +0 -3
  163. package/dist/cli/flags/poll.d.ts.map +0 -1
  164. package/dist/cli/flags/poll.js +0 -5
  165. package/dist/cli/flags/poll.js.map +0 -1
  166. package/dist/cli/flags/read.d.ts +0 -3
  167. package/dist/cli/flags/read.d.ts.map +0 -1
  168. package/dist/cli/flags/read.js +0 -7
  169. package/dist/cli/flags/read.js.map +0 -1
  170. package/dist/cli/flags/rg.d.ts +0 -3
  171. package/dist/cli/flags/rg.d.ts.map +0 -1
  172. package/dist/cli/flags/rg.js +0 -10
  173. package/dist/cli/flags/rg.js.map +0 -1
  174. package/dist/cli/flags/web.d.ts +0 -3
  175. package/dist/cli/flags/web.d.ts.map +0 -1
  176. package/dist/cli/flags/web.js +0 -7
  177. package/dist/cli/flags/web.js.map +0 -1
  178. package/dist/cli/flags/write.d.ts +0 -3
  179. package/dist/cli/flags/write.d.ts.map +0 -1
  180. package/dist/cli/flags/write.js +0 -5
  181. package/dist/cli/flags/write.js.map +0 -1
  182. package/dist/cli/flow.d.ts +0 -33
  183. package/dist/cli/flow.d.ts.map +0 -1
  184. package/dist/cli/flow.js +0 -185
  185. package/dist/cli/flow.js.map +0 -1
  186. package/dist/cli/format.d.ts +0 -12
  187. package/dist/cli/format.d.ts.map +0 -1
  188. package/dist/cli/format.js +0 -29
  189. package/dist/cli/format.js.map +0 -1
  190. package/dist/cli/help.d.ts +0 -16
  191. package/dist/cli/help.d.ts.map +0 -1
  192. package/dist/cli/help.js +0 -42
  193. package/dist/cli/help.js.map +0 -1
  194. package/dist/cli/parse.d.ts +0 -24
  195. package/dist/cli/parse.d.ts.map +0 -1
  196. package/dist/cli/parse.js +0 -165
  197. package/dist/cli/parse.js.map +0 -1
  198. package/dist/cli/register.d.ts +0 -69
  199. package/dist/cli/register.d.ts.map +0 -1
  200. package/dist/cli/register.js +0 -82
  201. package/dist/cli/register.js.map +0 -1
  202. package/dist/cli/runner.d.ts +0 -30
  203. package/dist/cli/runner.d.ts.map +0 -1
  204. package/dist/cli/runner.js +0 -102
  205. package/dist/cli/runner.js.map +0 -1
  206. package/dist/cli/tokenize.d.ts +0 -9
  207. package/dist/cli/tokenize.d.ts.map +0 -1
  208. package/dist/cli/tokenize.js +0 -80
  209. package/dist/cli/tokenize.js.map +0 -1
@@ -0,0 +1,73 @@
1
+ /**
2
+ * batch — tool definition factory.
3
+ *
4
+ * Creates the `batch` and `batch_read` tool instances with schema, argument
5
+ * preparation, execution, and rendering wired up.
6
+ */
7
+ import type { ExtensionContext } from "@earendil-works/pi-coding-agent";
8
+ import type { BatchTheme, FileOpInput, BatchOnUpdate } from "./constants.js";
9
+ import { type BashProcessTracker } from "./batch-bash.js";
10
+ export { BashProcessTracker, createBatchBashPollTool, pollBatchBashResults, runBashWithLimits } from "./batch-bash.js";
11
+ export declare const WeavePatchParams: any;
12
+ export declare const BatchReadParams: any;
13
+ declare function prepareArguments(input: unknown): {
14
+ o: unknown[];
15
+ w?: unknown[];
16
+ } | unknown;
17
+ declare function prepareBatchReadArguments(input: unknown): {
18
+ o: FileOpInput[];
19
+ } | unknown;
20
+ export declare function createBatchReadTool(): {
21
+ name: string;
22
+ label: string;
23
+ description: string;
24
+ promptSnippet: string;
25
+ promptGuidelines: string[];
26
+ parameters: any;
27
+ prepareArguments: typeof prepareBatchReadArguments;
28
+ execute(_toolCallId: string, input: unknown, signal: AbortSignal | undefined, onUpdate: BatchOnUpdate | undefined, ctx: ExtensionContext): Promise<{
29
+ content: {
30
+ type: string;
31
+ text: string;
32
+ }[];
33
+ details: {
34
+ results: import("./constants.js").OpResult[];
35
+ };
36
+ }>;
37
+ renderCall: (args: Record<string, unknown>, theme: BatchTheme) => import("@earendil-works/pi-tui").Container;
38
+ renderResult: (result: any, { expanded, isPartial }: {
39
+ expanded: boolean;
40
+ isPartial?: boolean;
41
+ }, theme: BatchTheme, args?: Record<string, unknown>) => any;
42
+ };
43
+ /**
44
+ * Create the batch tool.
45
+ *
46
+ * @param bashTracker Optional BashProcessTracker for executing bash operations.
47
+ * When omitted, bash ops return an error. Both the batch tool and the
48
+ * batch_bash_poll tool must share the same tracker instance.
49
+ */
50
+ export declare function createBatchTool(bashTracker?: BashProcessTracker, toolOptimize?: boolean): {
51
+ name: string;
52
+ label: string;
53
+ description: string;
54
+ promptSnippet: string;
55
+ promptGuidelines: string[];
56
+ parameters: any;
57
+ prepareArguments: typeof prepareArguments;
58
+ execute(_toolCallId: string, input: unknown, signal: AbortSignal | undefined, onUpdate: BatchOnUpdate | undefined, ctx: ExtensionContext): Promise<{
59
+ content: {
60
+ type: string;
61
+ text: string;
62
+ }[];
63
+ details: {
64
+ results: import("./constants.js").OpResult[];
65
+ };
66
+ }>;
67
+ renderCall: (args: Record<string, unknown>, theme: BatchTheme) => import("@earendil-works/pi-tui").Container;
68
+ renderResult: (result: any, { expanded, isPartial }: {
69
+ expanded: boolean;
70
+ isPartial?: boolean;
71
+ }, theme: BatchTheme, args?: Record<string, unknown>) => any;
72
+ };
73
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/batch/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAU7E,OAAO,EACN,KAAK,kBAAkB,EAGvB,MAAM,iBAAiB,CAAC;AAQzB,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAuHvH,eAAO,MAAM,gBAAgB,KAW3B,CAAC;AAyDH,eAAO,MAAM,eAAe,KAK1B,CAAC;AAMH,iBAAS,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG;IAAE,CAAC,EAAE,OAAO,EAAE,CAAC;IAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAA;CAAE,GAAG,OAAO,CA4DnF;AAED,iBAAS,yBAAyB,CAAC,KAAK,EAAE,OAAO,GAAG;IAAE,CAAC,EAAE,WAAW,EAAE,CAAA;CAAE,GAAG,OAAO,CAuBjF;AAMD,wBAAgB,mBAAmB;;;;;;;;yBAcnB,MAAM,SACZ,OAAO,UACN,WAAW,GAAG,SAAS,YACrB,aAAa,GAAG,SAAS,OAC9B,gBAAgB;;;;;;;;;uBAqCH,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,UAAU;2BACtC,GAAG,2BAA2B;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,SAAS,UAAU,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;EAGnJ;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,WAAW,CAAC,EAAE,kBAAkB,EAAE,YAAY,CAAC,EAAE,OAAO;;;;;;;;yBAiBxE,MAAM,SACZ,OAAO,UACN,WAAW,GAAG,SAAS,YACrB,aAAa,GAAG,SAAS,OAC9B,gBAAgB;;;;;;;;;uBAuJH,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,UAAU;2BACtC,GAAG,2BAA2B;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,SAAS,UAAU,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;EAGnJ"}
@@ -0,0 +1,450 @@
1
+ /**
2
+ * batch — tool definition factory.
3
+ *
4
+ * Creates the `batch` and `batch_read` tool instances with schema, argument
5
+ * preparation, execution, and rendering wired up.
6
+ */
7
+ import { Type } from "@sinclair/typebox";
8
+ import { BASH_DEFAULT_TIMEOUT_MS } from "./constants.js";
9
+ import { executeOperations } from "./execute.js";
10
+ import { renderBatchCall, renderBatchReadCall, renderBatchResult, renderBatchReadResult, } from "./render.js";
11
+ import { executeBatchBash, } from "./batch-bash.js";
12
+ import { normalizeBatchOp, generateBashId } from "./normalize.js";
13
+ import { coerceArrayOfObjects } from "../tools/array-coerce.js";
14
+ import { checkLoopGuard } from "../tools/loop-guard.js";
15
+ import { runWebOps } from "../tools/web-ops.js";
16
+ // Re-export polling tool factory and tracker from batch-bash
17
+ export { BashProcessTracker, createBatchBashPollTool, pollBatchBashResults, runBashWithLimits } from "./batch-bash.js";
18
+ // ---------------------------------------------------------------------------
19
+ // Schema
20
+ // ---------------------------------------------------------------------------
21
+ const EditOp = Type.Object({
22
+ f: Type.String({
23
+ description: "Exact text to find (oldText). Must be unique in the file. All edits matched against original file, not incrementally.",
24
+ }),
25
+ r: Type.String({ description: "Replacement text (newText)." }),
26
+ });
27
+ const FileOp = Type.Object({
28
+ o: Type.Union([
29
+ Type.Literal("read"),
30
+ Type.Literal("write"),
31
+ Type.Literal("edit"),
32
+ Type.Literal("delete"),
33
+ Type.Literal("bash"),
34
+ Type.Literal("rg"),
35
+ Type.Literal("patch"),
36
+ ]),
37
+ p: Type.String({ description: "Path to the file (relative or absolute). Use 'bash' or any string for o: 'bash'." }),
38
+ c: Type.Optional(Type.String({
39
+ description: "File content for o: 'write'. Shell command for o: 'bash'. Patch text for o: 'patch'.",
40
+ })),
41
+ e: Type.Optional(Type.Array(EditOp, {
42
+ description: "One or more targeted replacements matched against the original file, not incrementally.",
43
+ })),
44
+ s: Type.Optional(Type.Number({
45
+ minimum: 1,
46
+ description: "1-indexed line number to start reading from (offset). Used with o: 'read'.",
47
+ })),
48
+ l: Type.Optional(Type.Union([
49
+ Type.Number({
50
+ minimum: 1,
51
+ description: "Maximum number of lines to read (limit). Used with o: 'read'.",
52
+ }),
53
+ Type.Boolean({
54
+ description: "Files-with-matches flag for o: 'rg'. Default false — returns matching lines with content. Set true to get filenames only.",
55
+ }),
56
+ ])),
57
+ i: Type.Optional(Type.Union([
58
+ Type.String({
59
+ description: "Unique ID for this bash operation. Auto-generated if omitted. Used with o: 'bash'.",
60
+ }),
61
+ Type.Boolean({
62
+ description: "Ignore-case flag for o: 'rg'. Used with o: 'rg'.",
63
+ }),
64
+ ])),
65
+ t: Type.Optional(Type.Union([
66
+ Type.Number({
67
+ minimum: 1,
68
+ description: `Timeout in ms. Default: ${BASH_DEFAULT_TIMEOUT_MS}. Commands keep running after soft timeout; returns partial output with pending status. Used with o: 'bash'.`,
69
+ }),
70
+ Type.String({
71
+ description: "Type filter for o: 'rg' (e.g., 'ts', 'js'). Used with o: 'rg'.",
72
+ }),
73
+ ])),
74
+ h: Type.Optional(Type.String({
75
+ description: "Working directory override for this command. Used with o: 'bash'.",
76
+ })),
77
+ q: Type.Optional(Type.String({
78
+ description: "Search pattern for o: 'rg'.",
79
+ })),
80
+ n: Type.Optional(Type.Number({
81
+ minimum: 1,
82
+ description: "Max-count for o: 'rg' (matches per file). Broad searches on '.' auto-default to 50 when omitted.",
83
+ })),
84
+ u: Type.Optional(Type.Number({
85
+ minimum: 0,
86
+ maximum: 3,
87
+ description: "Ignore level for o: 'rg' (0-3). Maps to -u (0), -uu (1), -uuu (2-3).",
88
+ })),
89
+ });
90
+ const WebOp = Type.Union([
91
+ Type.Object({
92
+ o: Type.Literal("search"),
93
+ q: Type.String({ minLength: 1, description: "Search query" }),
94
+ }),
95
+ Type.Object({
96
+ o: Type.Literal("fetch"),
97
+ u: Type.String({ minLength: 1, description: "URL to fetch" }),
98
+ f: Type.Optional(Type.Union([Type.Literal("markdown"), Type.Literal("text"), Type.Literal("html")], {
99
+ description: "Output format (default: markdown). Content is saved to a temp file — use read ops to access.",
100
+ })),
101
+ }),
102
+ ]);
103
+ export const WeavePatchParams = Type.Object({
104
+ o: Type.Array(FileOp, {
105
+ description: "Ordered list of operations. File ops (read/write/edit/delete) execute sequentially — each operation executes independently; failures are reported per-operation without stopping remaining ops. Bash ops (bash) run in parallel after file ops complete and do not skip each other on failure.",
106
+ }),
107
+ w: Type.Optional(Type.Array(WebOp, {
108
+ description: "Web operations (search or fetch) to perform. Executed after file ops, before bash ops. Use w: [{ o: 'search', q: '...' }] or w: [{ o: 'fetch', u: '...', f: 'markdown' }]",
109
+ })),
110
+ });
111
+ const BatchReadOp = Type.Union([
112
+ Type.Object({
113
+ o: Type.Literal("read"),
114
+ p: Type.String({ description: "Path to the file (relative or absolute)" }),
115
+ s: Type.Optional(Type.Number({
116
+ minimum: 1,
117
+ description: "1-indexed line number to start reading from (offset). Used with o: 'read'.",
118
+ })),
119
+ l: Type.Optional(Type.Number({
120
+ minimum: 1,
121
+ description: "Maximum number of lines to read (limit). Used with o: 'read'.",
122
+ })),
123
+ }),
124
+ Type.Object({
125
+ o: Type.Literal("rg"),
126
+ p: Type.String({ description: "Path to search (relative or absolute). Use '.' for cwd." }),
127
+ q: Type.String({ description: "Search pattern for o: 'rg'." }),
128
+ l: Type.Optional(Type.Boolean({
129
+ description: "Files-with-matches flag for o: 'rg'. Default true.",
130
+ })),
131
+ i: Type.Optional(Type.Boolean({
132
+ description: "Ignore-case flag for o: 'rg'.",
133
+ })),
134
+ t: Type.Optional(Type.String({
135
+ description: "Type filter for o: 'rg' (e.g., 'ts', 'js').",
136
+ })),
137
+ n: Type.Optional(Type.Number({
138
+ minimum: 1,
139
+ description: "Max-count for o: 'rg' (matches per file). Broad searches on '.' auto-default to 50 when omitted.",
140
+ })),
141
+ u: Type.Optional(Type.Number({
142
+ minimum: 0,
143
+ maximum: 3,
144
+ description: "Ignore level for o: 'rg' (0-3). Maps to -u (0), -uu (1), -uuu (2-3).",
145
+ })),
146
+ }),
147
+ ]);
148
+ export const BatchReadParams = Type.Object({
149
+ o: Type.Array(BatchReadOp, {
150
+ description: "Ordered list of read operations. Executed sequentially. Each operation executes independently; failures are reported per-operation without stopping remaining ops.",
151
+ }),
152
+ });
153
+ // ---------------------------------------------------------------------------
154
+ // Argument preparation
155
+ // ---------------------------------------------------------------------------
156
+ function prepareArguments(input) {
157
+ if (!input || typeof input !== "object")
158
+ return { o: [] };
159
+ const args = input;
160
+ // Handle legacy top-level format: { path, oldText, newText }
161
+ if (typeof args.oldText === "string" &&
162
+ typeof args.newText === "string" &&
163
+ typeof args.path === "string") {
164
+ return {
165
+ o: [
166
+ normalizeBatchOp({
167
+ o: "edit",
168
+ p: args.path,
169
+ e: [{ oldText: args.oldText, newText: args.newText }],
170
+ }),
171
+ ],
172
+ };
173
+ }
174
+ // Extract ops array — canonical { o: [...] }, legacy { op: [...] }, legacy { operations: [...] }, or bare array
175
+ let opsArray;
176
+ if (Array.isArray(args.o)) {
177
+ opsArray = args.o;
178
+ }
179
+ else if (Array.isArray(args.op)) {
180
+ opsArray = args.op;
181
+ }
182
+ else if (Array.isArray(args.operations)) {
183
+ opsArray = args.operations;
184
+ }
185
+ else if (Array.isArray(args)) {
186
+ opsArray = args;
187
+ }
188
+ else if (typeof args.p === "string" || typeof args.path === "string") {
189
+ // Single-operation shorthand: { p: "...", o: "read" }
190
+ opsArray = [args];
191
+ }
192
+ else {
193
+ opsArray = [];
194
+ }
195
+ const sanitized = coerceArrayOfObjects(opsArray, { label: "batch.o" });
196
+ // Normalize each operation to single-letter form
197
+ const result = {
198
+ o: sanitized.value.map((op) => normalizeBatchOp(op)),
199
+ };
200
+ // Extract and sanitize web ops if present
201
+ if (Array.isArray(args.w)) {
202
+ const sanitizedW = coerceArrayOfObjects(args.w, { label: "batch.w" });
203
+ if (sanitizedW.value.length > 0) {
204
+ result.w = sanitizedW.value;
205
+ }
206
+ else if (args.w.length > 0) {
207
+ // User provided w but sanitization dropped everything — preserve the empty
208
+ // result so the user sees "no valid web ops" rather than a schema crash.
209
+ result.w = [];
210
+ }
211
+ // If args.w was provided as an empty array, leave result.w undefined.
212
+ }
213
+ return result;
214
+ }
215
+ function prepareBatchReadArguments(input) {
216
+ const prepared = prepareArguments(input);
217
+ const ops = Array.isArray(prepared) ? prepared : prepared.o;
218
+ if (!Array.isArray(ops))
219
+ return { o: [] };
220
+ // batch_read is local-only — reject web ops
221
+ const webOpsInRead = prepared.w;
222
+ if (webOpsInRead && webOpsInRead.length > 0) {
223
+ throw new Error("batch_read does not support web operations. Use the full `batch` tool with w: [...] for web ops.");
224
+ }
225
+ const normalizedOps = [];
226
+ const allowedBatchReadOps = new Set(["read", "rg"]);
227
+ for (const op of ops) {
228
+ if (!op || typeof op !== "object")
229
+ continue;
230
+ const normalized = normalizeBatchOp(op);
231
+ const opType = String(normalized.o ?? "").toLowerCase();
232
+ if (opType && !allowedBatchReadOps.has(opType)) {
233
+ throw new Error(`batch_read only supports read operations. Received: ${opType}`);
234
+ }
235
+ normalizedOps.push(normalized);
236
+ }
237
+ return { o: normalizedOps };
238
+ }
239
+ // ---------------------------------------------------------------------------
240
+ // Tool factories
241
+ // ---------------------------------------------------------------------------
242
+ export function createBatchReadTool() {
243
+ return {
244
+ name: "batch_read",
245
+ label: "batch_read",
246
+ description: "Read-only. Files and ripgrep only. Returns verbatim file contents (by section) or ripgrep matches (by pattern). Does not execute shell commands, write to files, or fetch URLs. Supported ops: [read] [rg].",
247
+ promptSnippet: "Read multiple files/sections in one call (read-only)",
248
+ promptGuidelines: [
249
+ "Combine multiple read/rg ops into one call.",
250
+ "Use `s` (start line) and `l` (line count) to target specific sections of large files.",
251
+ ],
252
+ parameters: BatchReadParams,
253
+ prepareArguments: prepareBatchReadArguments,
254
+ async execute(_toolCallId, input, signal, onUpdate, ctx) {
255
+ const loopWarning = checkLoopGuard("batch_read", input);
256
+ const prepared = prepareBatchReadArguments(input);
257
+ const ops = Array.isArray(prepared)
258
+ ? prepared
259
+ : prepared.o;
260
+ if (!Array.isArray(ops) || ops.length === 0) {
261
+ throw new Error("Error: o array is required and must not be empty.");
262
+ }
263
+ // Defensive validation: reject any non-read/rg operations
264
+ const allowedBatchReadOps = new Set(["read", "rg"]);
265
+ for (const op of ops) {
266
+ if (!allowedBatchReadOps.has(op.o)) {
267
+ throw new Error(`Error: batch_read only supports read operations. Received ${op.o} for ${op.p}.`);
268
+ }
269
+ }
270
+ if (signal?.aborted) {
271
+ throw new Error("Operation aborted.");
272
+ }
273
+ const { contentText, results } = await executeOperations(ops, ctx.cwd, signal, {
274
+ readOptions: { truncate: false, toolName: "batch_read" },
275
+ includeLimitWarnings: false,
276
+ }, onUpdate);
277
+ const readResult = {
278
+ content: [{ type: "text", text: loopWarning ? contentText + loopWarning : contentText }],
279
+ details: { results },
280
+ };
281
+ return readResult;
282
+ },
283
+ renderCall: (args, theme) => renderBatchReadCall(args, theme),
284
+ renderResult: (result, { expanded, isPartial }, theme, args) => renderBatchReadResult(result, { expanded, isPartial: isPartial ?? false }, theme, args),
285
+ };
286
+ }
287
+ /**
288
+ * Create the batch tool.
289
+ *
290
+ * @param bashTracker Optional BashProcessTracker for executing bash operations.
291
+ * When omitted, bash ops return an error. Both the batch tool and the
292
+ * batch_bash_poll tool must share the same tracker instance.
293
+ */
294
+ export function createBatchTool(bashTracker, toolOptimize) {
295
+ return {
296
+ name: "batch",
297
+ label: "batch",
298
+ description: "Multi-op executor. File ops, bash, and web in one call. File/shell ops ([read] [write] [edit] [delete] [patch] [bash] [rg]) execute first; web ([search] [fetch]) runs after via the [w] array.",
299
+ promptSnippet: "Batch: file ops + bash + web in one call",
300
+ promptGuidelines: [
301
+ "Combine all pending operations into a single `batch` call.",
302
+ "File ops execute first; bash runs after. Use write → bash to run scripts.",
303
+ "Web: `w: [{ o: 'search', q: '...' }]` or `w: [{ o: 'fetch', u: '...' }]`",
304
+ "Field aliases: cmd/command=c, content=c, path=p, edits=e, offset=s, limit=l. Canonical wins.",
305
+ ...(toolOptimize ? ["Batch is your ONLY edit tool — no separate edit command."] : []),
306
+ ],
307
+ parameters: WeavePatchParams,
308
+ prepareArguments: prepareArguments,
309
+ async execute(_toolCallId, input, signal, onUpdate, ctx) {
310
+ const loopWarning = checkLoopGuard("batch", input);
311
+ const prepared = prepareArguments(input);
312
+ // prepareArguments always returns { o: [...] }, but handle
313
+ // legacy bare arrays for backward compatibility
314
+ const ops = Array.isArray(prepared)
315
+ ? prepared
316
+ : prepared.o;
317
+ // Extract web ops (pass-through, no normalization needed)
318
+ const webOps = prepared.w;
319
+ const hasFileOps = Array.isArray(ops) && ops.length > 0;
320
+ const hasWebOps = Array.isArray(webOps) && webOps.length > 0;
321
+ if (!hasFileOps && !hasWebOps) {
322
+ throw new Error("Error: o or w array must not be empty.");
323
+ }
324
+ if (signal?.aborted) {
325
+ throw new Error("Operation aborted.");
326
+ }
327
+ // Split ops into file ops and bash ops
328
+ const fileOps = [];
329
+ const bashOps = [];
330
+ if (hasFileOps) {
331
+ for (const op of ops) {
332
+ if (op.o === "bash") {
333
+ bashOps.push(op);
334
+ }
335
+ else {
336
+ fileOps.push(op);
337
+ }
338
+ }
339
+ }
340
+ // Execute file ops first (sequential)
341
+ let fileContentText = "";
342
+ let fileResults = [];
343
+ if (fileOps.length > 0) {
344
+ const fileOutput = await executeOperations(fileOps, ctx.cwd, signal, {}, onUpdate);
345
+ fileContentText = fileOutput.contentText;
346
+ fileResults = fileOutput.results;
347
+ }
348
+ // Emit update after file ops
349
+ if (onUpdate && fileOps.length > 0) {
350
+ onUpdate({
351
+ content: [{ type: "text", text: fileContentText }],
352
+ details: { results: fileResults },
353
+ });
354
+ }
355
+ // Execute web ops after file ops, before bash ops (sequential)
356
+ let webContentText = "";
357
+ let webResults = [];
358
+ if (Array.isArray(webOps) && webOps.length > 0) {
359
+ try {
360
+ const webOutput = await runWebOps({ op: webOps }, ctx, signal);
361
+ webContentText = webOutput.content[0].text;
362
+ webResults = webOutput.details.ops;
363
+ }
364
+ catch (err) {
365
+ // Catastrophic failure in runWebOps itself (should not happen with per-op handling)
366
+ const errorText = err instanceof Error ? err.message : String(err);
367
+ webContentText = `\n--- web error (unexpected) ---\n${errorText}`;
368
+ webResults = [];
369
+ }
370
+ // Emit update after web ops
371
+ if (onUpdate) {
372
+ onUpdate({
373
+ content: [{ type: "text", text: [fileContentText, webContentText].filter(Boolean).join("\n") }],
374
+ details: { results: [...fileResults, ...webResults] },
375
+ });
376
+ }
377
+ }
378
+ // Execute bash ops in parallel after file and web ops complete.
379
+ // Bash ops run regardless of file or web op failures.
380
+ let bashResults = [];
381
+ let bashContentText = "";
382
+ if (bashOps.length > 0 && bashTracker) {
383
+ const normalizedBashOps = bashOps.map((op) => ({
384
+ i: op.i ?? generateBashId(),
385
+ c: op.c ?? "",
386
+ t: op.t,
387
+ h: op.h,
388
+ }));
389
+ const bashOutput = await executeBatchBash(normalizedBashOps, ctx.cwd, bashTracker, signal);
390
+ bashResults = bashOutput;
391
+ // Format bash results into content text
392
+ const bashLines = [];
393
+ for (const r of bashOutput) {
394
+ if (r.status === "ok") {
395
+ bashLines.push(`\n--- bash [${r.id}] exit ${r.exitCode} ---`);
396
+ if (r.timingTier)
397
+ bashLines.push(`[Execution time: ${r.timingTier}]`);
398
+ if (r.stdout?.trim())
399
+ bashLines.push(r.stdout.trimEnd());
400
+ }
401
+ else if (r.status === "pending") {
402
+ bashLines.push(`\n--- bash [${r.id}] pending ---`);
403
+ if (r.stdout?.trim())
404
+ bashLines.push(`[partial output]\n${r.stdout.trimEnd()}`);
405
+ bashLines.push(`[Use batch_bash_poll with i: ["${r.id}"] to check results]`);
406
+ }
407
+ else {
408
+ bashLines.push(`\n--- bash [${r.id}] error ---`);
409
+ if (r.timingTier)
410
+ bashLines.push(`[Execution time: ${r.timingTier}]`);
411
+ if (r.stdout?.trim())
412
+ bashLines.push(r.stdout.trimEnd());
413
+ if (r.stderr?.trim())
414
+ bashLines.push(`[stderr]\n${r.stderr.trimEnd()}`);
415
+ }
416
+ }
417
+ bashContentText = bashLines.join("\n");
418
+ }
419
+ else if (bashOps.length > 0 && !bashTracker) {
420
+ bashResults = bashOps.map((op) => ({
421
+ op: "bash",
422
+ path: op.p,
423
+ status: "error",
424
+ id: op.i,
425
+ command: op.c,
426
+ error: "Bash tracker not available.",
427
+ }));
428
+ bashContentText = "\n--- bash: tracker not available ---";
429
+ }
430
+ // Combine results
431
+ const allResults = [...fileResults, ...webResults, ...bashResults];
432
+ const contentText = [fileContentText, webContentText, bashContentText].filter(Boolean).join("\n");
433
+ // Emit final update after bash ops complete
434
+ if (onUpdate && (bashOps.length > 0 || (Array.isArray(webOps) && webOps.length > 0))) {
435
+ onUpdate({
436
+ content: [{ type: "text", text: contentText }],
437
+ details: { results: allResults },
438
+ });
439
+ }
440
+ const batchResult = {
441
+ content: [{ type: "text", text: loopWarning ? contentText + loopWarning : contentText }],
442
+ details: { results: allResults },
443
+ };
444
+ return batchResult;
445
+ },
446
+ renderCall: (args, theme) => renderBatchCall(args, theme),
447
+ renderResult: (result, { expanded, isPartial }, theme, args) => renderBatchResult(result, { expanded, isPartial: isPartial ?? false }, theme, args),
448
+ };
449
+ }
450
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/batch/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function generateBashId(): string;
2
+ export declare function normalizeBatchOp(raw: Record<string, unknown>): Record<string, unknown>;
3
+ export declare function normalizeBashOp(raw: Record<string, unknown>): Record<string, unknown>;
4
+ //# sourceMappingURL=normalize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../../src/batch/normalize.ts"],"names":[],"mappings":"AAGA,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA8DtF;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAUrF"}
@@ -0,0 +1,85 @@
1
+ import { logWarn } from "../config/log.js";
2
+ import { resolveAlias } from "../flow/op-aliases.js";
3
+ export function generateBashId() {
4
+ return Math.random().toString(36).slice(2, 10);
5
+ }
6
+ export function normalizeBatchOp(raw) {
7
+ const op = {};
8
+ const ctx = { tool: "batch" };
9
+ // Map operation type
10
+ const o = resolveAlias("o", raw, ctx);
11
+ const c = resolveAlias("c", raw, ctx);
12
+ const e = resolveAlias("e", raw, ctx);
13
+ op.o = o ?? (c != null ? "write" : (e != null ? "edit" : "read"));
14
+ // Bash ops use a separate normalizer
15
+ if (op.o === "bash") {
16
+ return normalizeBashOp(raw);
17
+ }
18
+ // Map path
19
+ op.p = resolveAlias("p", raw, ctx);
20
+ // Map content
21
+ const content = resolveAlias("c", raw, ctx);
22
+ if (content !== undefined)
23
+ op.c = content;
24
+ else if (raw.patch !== undefined)
25
+ op.c = raw.patch;
26
+ // Map edits
27
+ let editsRaw = resolveAlias("e", raw, ctx);
28
+ if (typeof editsRaw === "string") {
29
+ try {
30
+ editsRaw = JSON.parse(editsRaw);
31
+ }
32
+ catch (e) {
33
+ logWarn(`[pi-agent-flow] Failed to parse batch edits JSON: ${e}`);
34
+ }
35
+ }
36
+ if (Array.isArray(editsRaw)) {
37
+ op.e = editsRaw.map((edit) => {
38
+ if (!edit || typeof edit !== "object")
39
+ return edit;
40
+ const editObj = edit;
41
+ return {
42
+ f: resolveAlias("f", editObj, ctx) ?? editObj.oldText,
43
+ r: resolveAlias("r", editObj, ctx) ?? editObj.newText,
44
+ };
45
+ });
46
+ }
47
+ // Map offset / limit
48
+ const s = resolveAlias("s", raw, ctx);
49
+ if (s !== undefined)
50
+ op.s = s;
51
+ const l = resolveAlias("l", raw, ctx);
52
+ if (l !== undefined)
53
+ op.l = l;
54
+ // Map timeout / type filter
55
+ const t = resolveAlias("t", raw, ctx);
56
+ if (t !== undefined)
57
+ op.t = t;
58
+ // Map ignore-case
59
+ const i = resolveAlias("i", raw, ctx);
60
+ if (i !== undefined)
61
+ op.i = i;
62
+ // Map rg-specific fields
63
+ const q = resolveAlias("q", raw, ctx);
64
+ if (q !== undefined)
65
+ op.q = q;
66
+ const n = resolveAlias("n", raw, ctx);
67
+ if (n !== undefined)
68
+ op.n = n;
69
+ const u = resolveAlias("u", raw, ctx);
70
+ if (u !== undefined)
71
+ op.u = u;
72
+ return op;
73
+ }
74
+ export function normalizeBashOp(raw) {
75
+ const ctx = { tool: "bash" };
76
+ return {
77
+ o: "bash",
78
+ c: resolveAlias("c", raw, ctx) ?? raw.command,
79
+ i: resolveAlias("i", raw, ctx) ?? generateBashId(),
80
+ t: resolveAlias("t", raw, ctx),
81
+ h: resolveAlias("h", raw, ctx) ?? raw.cwdPath ?? raw.cwd,
82
+ p: resolveAlias("p", raw, ctx) ?? raw.h ?? ".",
83
+ };
84
+ }
85
+ //# sourceMappingURL=normalize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize.js","sourceRoot":"","sources":["../../src/batch/normalize.ts"],"names":[],"mappings":"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"}