pi-agent-flow 2.0.0 → 2.0.2

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 (195) hide show
  1. package/README.md +126 -489
  2. package/agents/audit.md +7 -2
  3. package/agents/build.md +6 -2
  4. package/agents/craft.md +6 -3
  5. package/agents/debug.md +7 -3
  6. package/agents/ideas.md +8 -4
  7. package/agents/scout.md +8 -1
  8. package/dist/batch/apply-patch.d.ts +60 -0
  9. package/dist/batch/apply-patch.d.ts.map +1 -0
  10. package/dist/batch/apply-patch.js +477 -0
  11. package/dist/batch/apply-patch.js.map +1 -0
  12. package/dist/batch/batch-bash.d.ts +0 -6
  13. package/dist/batch/batch-bash.d.ts.map +1 -1
  14. package/dist/batch/batch-bash.js +52 -14
  15. package/dist/batch/batch-bash.js.map +1 -1
  16. package/dist/batch/constants.d.ts +45 -4
  17. package/dist/batch/constants.d.ts.map +1 -1
  18. package/dist/batch/constants.js +72 -4
  19. package/dist/batch/constants.js.map +1 -1
  20. package/dist/batch/execute.d.ts +8 -2
  21. package/dist/batch/execute.d.ts.map +1 -1
  22. package/dist/batch/execute.js +338 -70
  23. package/dist/batch/execute.js.map +1 -1
  24. package/dist/batch/fuzzy-edit.d.ts +4 -1
  25. package/dist/batch/fuzzy-edit.d.ts.map +1 -1
  26. package/dist/batch/fuzzy-edit.js +7 -2
  27. package/dist/batch/fuzzy-edit.js.map +1 -1
  28. package/dist/batch/index.d.ts +3 -15
  29. package/dist/batch/index.d.ts.map +1 -1
  30. package/dist/batch/index.js +48 -78
  31. package/dist/batch/index.js.map +1 -1
  32. package/dist/batch/render.d.ts.map +1 -1
  33. package/dist/batch/render.js +30 -7
  34. package/dist/batch/render.js.map +1 -1
  35. package/dist/batch/shell-compress.d.ts +25 -0
  36. package/dist/batch/shell-compress.d.ts.map +1 -0
  37. package/dist/batch/shell-compress.js +602 -0
  38. package/dist/batch/shell-compress.js.map +1 -0
  39. package/dist/batch/summary.d.ts.map +1 -1
  40. package/dist/batch/summary.js +4 -0
  41. package/dist/batch/summary.js.map +1 -1
  42. package/dist/batch/symbols.d.ts.map +1 -1
  43. package/dist/batch/symbols.js +12 -7
  44. package/dist/batch/symbols.js.map +1 -1
  45. package/dist/config/config.d.ts +5 -0
  46. package/dist/config/config.d.ts.map +1 -1
  47. package/dist/config/config.js +63 -0
  48. package/dist/config/config.js.map +1 -1
  49. package/dist/config/models.d.ts +2 -0
  50. package/dist/config/models.d.ts.map +1 -0
  51. package/dist/config/models.js +49 -0
  52. package/dist/config/models.js.map +1 -0
  53. package/dist/config/settings-resolver.js +2 -2
  54. package/dist/config/settings-resolver.js.map +1 -1
  55. package/dist/core/agents.js +2 -2
  56. package/dist/core/agents.js.map +1 -1
  57. package/dist/core/depth.d.ts +3 -3
  58. package/dist/core/depth.d.ts.map +1 -1
  59. package/dist/core/depth.js +5 -5
  60. package/dist/core/depth.js.map +1 -1
  61. package/dist/core/executor.d.ts +10 -3
  62. package/dist/core/executor.d.ts.map +1 -1
  63. package/dist/core/executor.js +7 -3
  64. package/dist/core/executor.js.map +1 -1
  65. package/dist/core/flow.d.ts +19 -3
  66. package/dist/core/flow.d.ts.map +1 -1
  67. package/dist/core/flow.js +97 -58
  68. package/dist/core/flow.js.map +1 -1
  69. package/dist/core/session-mode.d.ts +1 -1
  70. package/dist/core/session-mode.d.ts.map +1 -1
  71. package/dist/core/session-mode.js +2 -1
  72. package/dist/core/session-mode.js.map +1 -1
  73. package/dist/core/{delegation.d.ts → transition.d.ts} +9 -9
  74. package/dist/core/transition.d.ts.map +1 -0
  75. package/dist/core/{delegation.js → transition.js} +17 -24
  76. package/dist/core/transition.js.map +1 -0
  77. package/dist/flow/auto-warp.d.ts +12 -0
  78. package/dist/flow/auto-warp.d.ts.map +1 -0
  79. package/dist/flow/auto-warp.js +29 -0
  80. package/dist/flow/auto-warp.js.map +1 -0
  81. package/dist/flow/command.d.ts.map +1 -1
  82. package/dist/flow/command.js +7 -2
  83. package/dist/flow/command.js.map +1 -1
  84. package/dist/flow/continuation.d.ts.map +1 -1
  85. package/dist/flow/continuation.js +52 -15
  86. package/dist/flow/continuation.js.map +1 -1
  87. package/dist/flow/index.d.ts +5 -2
  88. package/dist/flow/index.d.ts.map +1 -1
  89. package/dist/flow/index.js +6 -3
  90. package/dist/flow/index.js.map +1 -1
  91. package/dist/flow/loop-command.d.ts +8 -0
  92. package/dist/flow/loop-command.d.ts.map +1 -0
  93. package/dist/flow/loop-command.js +102 -0
  94. package/dist/flow/loop-command.js.map +1 -0
  95. package/dist/flow/loop-templates.d.ts +7 -0
  96. package/dist/flow/loop-templates.d.ts.map +1 -0
  97. package/dist/flow/loop-templates.js +38 -0
  98. package/dist/flow/loop-templates.js.map +1 -0
  99. package/dist/flow/loop.d.ts +19 -0
  100. package/dist/flow/loop.d.ts.map +1 -0
  101. package/dist/flow/loop.js +95 -0
  102. package/dist/flow/loop.js.map +1 -0
  103. package/dist/flow/settings-command.d.ts.map +1 -1
  104. package/dist/flow/settings-command.js +93 -4
  105. package/dist/flow/settings-command.js.map +1 -1
  106. package/dist/flow/store.d.ts +3 -3
  107. package/dist/flow/store.d.ts.map +1 -1
  108. package/dist/flow/store.js +24 -16
  109. package/dist/flow/store.js.map +1 -1
  110. package/dist/flow/template-shared.d.ts +9 -0
  111. package/dist/flow/template-shared.d.ts.map +1 -0
  112. package/dist/flow/template-shared.js +13 -0
  113. package/dist/flow/template-shared.js.map +1 -0
  114. package/dist/flow/template-strings.d.ts.map +1 -1
  115. package/dist/flow/template-strings.js +2 -5
  116. package/dist/flow/template-strings.js.map +1 -1
  117. package/dist/flow/types.d.ts +15 -9
  118. package/dist/flow/types.d.ts.map +1 -1
  119. package/dist/flow/warp.d.ts +15 -0
  120. package/dist/flow/warp.d.ts.map +1 -0
  121. package/dist/flow/warp.js +207 -0
  122. package/dist/flow/warp.js.map +1 -0
  123. package/dist/index.d.ts +3 -2
  124. package/dist/index.d.ts.map +1 -1
  125. package/dist/index.js +185 -28
  126. package/dist/index.js.map +1 -1
  127. package/dist/snapshot/cli-args.d.ts +1 -0
  128. package/dist/snapshot/cli-args.d.ts.map +1 -1
  129. package/dist/snapshot/cli-args.js +12 -0
  130. package/dist/snapshot/cli-args.js.map +1 -1
  131. package/dist/snapshot/runner-events.d.ts +5 -0
  132. package/dist/snapshot/runner-events.d.ts.map +1 -1
  133. package/dist/snapshot/runner-events.js +89 -15
  134. package/dist/snapshot/runner-events.js.map +1 -1
  135. package/dist/snapshot/snapshot.d.ts +22 -19
  136. package/dist/snapshot/snapshot.d.ts.map +1 -1
  137. package/dist/snapshot/snapshot.js +1063 -167
  138. package/dist/snapshot/snapshot.js.map +1 -1
  139. package/dist/steering/flow-prompt.d.ts +2 -2
  140. package/dist/steering/flow-prompt.d.ts.map +1 -1
  141. package/dist/steering/flow-prompt.js +4 -4
  142. package/dist/steering/flow-prompt.js.map +1 -1
  143. package/dist/steering/sliding-prompt.d.ts.map +1 -1
  144. package/dist/steering/sliding-prompt.js +9 -6
  145. package/dist/steering/sliding-prompt.js.map +1 -1
  146. package/dist/steering/tool-utils.d.ts +31 -8
  147. package/dist/steering/tool-utils.d.ts.map +1 -1
  148. package/dist/steering/tool-utils.js +63 -30
  149. package/dist/steering/tool-utils.js.map +1 -1
  150. package/dist/tools/ask-user.d.ts +0 -17
  151. package/dist/tools/ask-user.d.ts.map +1 -1
  152. package/dist/tools/ask-user.js +13 -37
  153. package/dist/tools/ask-user.js.map +1 -1
  154. package/dist/tools/timed-bash.d.ts +1 -1
  155. package/dist/tools/timed-bash.d.ts.map +1 -1
  156. package/dist/tools/timed-bash.js +19 -8
  157. package/dist/tools/timed-bash.js.map +1 -1
  158. package/dist/tools/web-tool.d.ts.map +1 -1
  159. package/dist/tools/web-tool.js +11 -13
  160. package/dist/tools/web-tool.js.map +1 -1
  161. package/dist/tui/render-utils.d.ts +5 -1
  162. package/dist/tui/render-utils.d.ts.map +1 -1
  163. package/dist/tui/render-utils.js +36 -10
  164. package/dist/tui/render-utils.js.map +1 -1
  165. package/dist/tui/render.d.ts +9 -0
  166. package/dist/tui/render.d.ts.map +1 -1
  167. package/dist/tui/render.js +112 -100
  168. package/dist/tui/render.js.map +1 -1
  169. package/dist/tui/scramble/constants.d.ts +8 -8
  170. package/dist/tui/scramble/constants.d.ts.map +1 -1
  171. package/dist/tui/scramble/constants.js +7 -7
  172. package/dist/tui/scramble/constants.js.map +1 -1
  173. package/dist/tui/scramble/index.d.ts +1 -1
  174. package/dist/tui/scramble/index.d.ts.map +1 -1
  175. package/dist/tui/scramble/index.js +1 -1
  176. package/dist/tui/scramble/index.js.map +1 -1
  177. package/dist/tui/scramble/manager.d.ts +1 -5
  178. package/dist/tui/scramble/manager.d.ts.map +1 -1
  179. package/dist/tui/scramble/manager.js +16 -64
  180. package/dist/tui/scramble/manager.js.map +1 -1
  181. package/dist/tui/scramble/utils.js +1 -1
  182. package/dist/tui/scramble/utils.js.map +1 -1
  183. package/dist/types/flow.d.ts +2 -0
  184. package/dist/types/flow.d.ts.map +1 -1
  185. package/dist/types/flow.js +11 -2
  186. package/dist/types/flow.js.map +1 -1
  187. package/dist/types/output.d.ts +6 -0
  188. package/dist/types/output.d.ts.map +1 -1
  189. package/package.json +2 -2
  190. package/dist/core/delegation.d.ts.map +0 -1
  191. package/dist/core/delegation.js.map +0 -1
  192. package/dist/flow/warp-command.d.ts +0 -9
  193. package/dist/flow/warp-command.d.ts.map +0 -1
  194. package/dist/flow/warp-command.js +0 -405
  195. package/dist/flow/warp-command.js.map +0 -1
@@ -0,0 +1,602 @@
1
+ /**
2
+ * Shell output compression pipeline for batch bash tool.
3
+ *
4
+ * Classifies commands by output policy, applies specific compressors for
5
+ * known tools (git, npm, cargo), and falls back through a tiered cleanup
6
+ * chain. Compression runs BEFORE truncation; truncation remains the safety net.
7
+ */
8
+ import { COMPRESS_TOKEN_FLOOR, COMPRESS_VERBATIM_MAX_TOKENS, COMPRESS_SAFETY_SCAN_HEAD, COMPRESS_SAFETY_SCAN_TAIL, COMPRESS_SAFETY_SCAN_MAX_NEEDLES, COMPRESS_TERSE_MIN_SAVINGS_PCT, COMPRESS_PASSTHROUGH_PATTERNS, COMPRESS_VERBATIM_PATTERNS, COMPRESS_SAFETY_NEEDLES, } from "./constants.js";
9
+ // ---------------------------------------------------------------------------
10
+ // Output policy
11
+ // ---------------------------------------------------------------------------
12
+ export var OutputPolicy;
13
+ (function (OutputPolicy) {
14
+ OutputPolicy[OutputPolicy["Passthrough"] = 0] = "Passthrough";
15
+ OutputPolicy[OutputPolicy["Verbatim"] = 1] = "Verbatim";
16
+ OutputPolicy[OutputPolicy["Compressible"] = 2] = "Compressible";
17
+ })(OutputPolicy || (OutputPolicy = {}));
18
+ export function classify(command) {
19
+ if (isPassthroughCommand(command))
20
+ return OutputPolicy.Passthrough;
21
+ if (isVerbatimCommand(command))
22
+ return OutputPolicy.Verbatim;
23
+ return OutputPolicy.Compressible;
24
+ }
25
+ function isPassthroughCommand(cmd) {
26
+ const lower = cmd.toLowerCase();
27
+ if (COMPRESS_PASSTHROUGH_PATTERNS.some((p) => p.test(lower)))
28
+ return true;
29
+ const tokens = lower.trim().split(/\s+/);
30
+ const base = tokens[0] ?? "";
31
+ // Base commands that are always passthrough
32
+ const alwaysPassthrough = new Set(["pi", "lean-ctx", "live-server", "nodemon", "webpack-dev-server", "watch"]);
33
+ if (alwaysPassthrough.has(base))
34
+ return true;
35
+ // CLI auth tools — only login/auth subcommands
36
+ if (base === "az" || base === "gcloud" || base === "firebase") {
37
+ return tokens.slice(1).some((t) => t === "login" || t === "auth");
38
+ }
39
+ // Package managers — specific subcommands only
40
+ if (base === "npm" || base === "yarn" || base === "pnpm") {
41
+ for (let i = 1; i < tokens.length; i++) {
42
+ if (tokens[i] === "start")
43
+ return true;
44
+ if (tokens[i] === "run" && ["dev", "watch", "serve"].includes(tokens[i + 1]))
45
+ return true;
46
+ }
47
+ return false;
48
+ }
49
+ // Cargo
50
+ if (base === "cargo") {
51
+ return tokens.slice(1).some((t) => t === "watch" || t === "run");
52
+ }
53
+ // Python http.server
54
+ if (base === "python" || base === "python3") {
55
+ return tokens.includes("-m") && tokens.includes("http.server");
56
+ }
57
+ // Vite — dev server when invoked as 'vite' or 'vite dev'
58
+ if (base === "vite") {
59
+ return tokens.length === 1 || tokens[1] === "dev";
60
+ }
61
+ return false;
62
+ }
63
+ function isVerbatimCommand(cmd) {
64
+ const lower = cmd.toLowerCase();
65
+ if (COMPRESS_VERBATIM_PATTERNS.some((p) => p.test(lower)))
66
+ return true;
67
+ return false;
68
+ }
69
+ export function compressOutput(command, stdout, stderr) {
70
+ const original = stdout + stderr;
71
+ if (estimateTokens(original) < COMPRESS_TOKEN_FLOOR) {
72
+ return { stdout, stderr, savingsPct: 0 };
73
+ }
74
+ const policy = classify(command);
75
+ if (policy === OutputPolicy.Passthrough) {
76
+ return { stdout, stderr, savingsPct: 0 };
77
+ }
78
+ if (policy === OutputPolicy.Verbatim) {
79
+ const cOut = truncateVerbatim(stdout);
80
+ const cErr = truncateVerbatim(stderr);
81
+ const compressed = cOut + cErr;
82
+ return {
83
+ stdout: cOut,
84
+ stderr: cErr,
85
+ savingsPct: calcSavings(original, compressed),
86
+ };
87
+ }
88
+ // Compressible pipeline
89
+ const patternStdout = trySpecificPattern(command, stdout) ?? stdout;
90
+ const patternStderr = trySpecificPattern(command, stderr) ?? stderr;
91
+ // Tier 1: terse filter on pattern result (or raw if no pattern matched)
92
+ const tOut = terseFilter(patternStdout);
93
+ const tErr = terseFilter(patternStderr);
94
+ if (shorterThan(tOut + tErr, original, COMPRESS_TERSE_MIN_SAVINGS_PCT)) {
95
+ return {
96
+ stdout: tOut,
97
+ stderr: tErr,
98
+ savingsPct: calcSavings(original, tOut + tErr),
99
+ };
100
+ }
101
+ // Tier 2: lightweight cleanup on original
102
+ const lOut = lightweightCleanup(stdout);
103
+ const lErr = lightweightCleanup(stderr);
104
+ if (shorterThan(lOut + lErr, original, 0)) {
105
+ return {
106
+ stdout: lOut,
107
+ stderr: lErr,
108
+ savingsPct: calcSavings(original, lOut + lErr),
109
+ };
110
+ }
111
+ // Tier 3: safety-scan truncation on lightweight-cleanup result
112
+ const sOut = truncateWithSafetyScan(lOut.split("\n")) ?? lOut;
113
+ const sErr = truncateWithSafetyScan(lErr.split("\n")) ?? lErr;
114
+ if (shorterThan(sOut + sErr, original, 0)) {
115
+ return {
116
+ stdout: sOut,
117
+ stderr: sErr,
118
+ savingsPct: calcSavings(original, sOut + sErr),
119
+ };
120
+ }
121
+ // Nothing helped — return original
122
+ return { stdout, stderr, savingsPct: 0 };
123
+ }
124
+ // ---------------------------------------------------------------------------
125
+ // Helpers
126
+ // ---------------------------------------------------------------------------
127
+ export function estimateTokens(text) {
128
+ return Math.ceil(text.length / 4);
129
+ }
130
+ export function stripAnsi(text) {
131
+ return text.replace(/\x1b\[[0-9;]*[a-zA-Z]/g, "");
132
+ }
133
+ function calcSavings(original, compressed) {
134
+ if (!original)
135
+ return 0;
136
+ return Math.max(0, Math.round(((original.length - compressed.length) / original.length) * 100));
137
+ }
138
+ function shorterThan(candidate, baseline, minPct) {
139
+ if (!baseline)
140
+ return false;
141
+ const saved = ((baseline.length - candidate.length) / baseline.length) * 100;
142
+ return saved > minPct;
143
+ }
144
+ function truncateVerbatim(text) {
145
+ if (!text)
146
+ return text;
147
+ if (estimateTokens(text) <= COMPRESS_VERBATIM_MAX_TOKENS)
148
+ return text;
149
+ const lines = text.split("\n");
150
+ const head = 30;
151
+ const tail = 20;
152
+ if (lines.length <= head + tail)
153
+ return text;
154
+ const kept = [...lines.slice(0, head), `[${lines.length - head - tail} lines omitted]`, ...lines.slice(-tail)];
155
+ return kept.join("\n");
156
+ }
157
+ // ---------------------------------------------------------------------------
158
+ // Terse filter
159
+ // ---------------------------------------------------------------------------
160
+ export function terseFilter(output) {
161
+ if (!output)
162
+ return output;
163
+ let result = output;
164
+ // 1. Strip ANSI escape codes
165
+ result = stripAnsi(result);
166
+ // 2. Strip \r progress lines (lines that start with \r)
167
+ let lines = result.split("\n");
168
+ lines = lines.filter((line) => !line.startsWith("\r"));
169
+ // 3. Collapse runs of 3+ blank lines to 1 blank line
170
+ lines = collapseBlankLines(lines, 3);
171
+ // 4. Strip pure decoration lines
172
+ const decorationRe = /^[\s\u2500\u2550\u2502\u258C\u2504\u2508\u256D\u2570\u2503\u2523\u2517\u2533\u253B\u252B\u2554\u2557\u255A\u255D\u2551\u250C\u2510\u2518\u2524\u251C\u2534\u252C]+$/;
173
+ lines = lines.filter((line) => !decorationRe.test(line));
174
+ // 5. Strip trailing whitespace per line
175
+ lines = lines.map((line) => line.trimEnd());
176
+ result = lines.join("\n");
177
+ // Quality gate: if result is <3% shorter, return original
178
+ if (!shorterThan(result, output, COMPRESS_TERSE_MIN_SAVINGS_PCT)) {
179
+ return output;
180
+ }
181
+ return result;
182
+ }
183
+ function collapseBlankLines(lines, threshold) {
184
+ const result = [];
185
+ let blankRun = 0;
186
+ for (const line of lines) {
187
+ if (line.trim() === "") {
188
+ blankRun++;
189
+ }
190
+ else {
191
+ if (blankRun >= threshold) {
192
+ result.push("");
193
+ }
194
+ else {
195
+ for (let i = 0; i < blankRun; i++) {
196
+ result.push("");
197
+ }
198
+ }
199
+ result.push(line);
200
+ blankRun = 0;
201
+ }
202
+ }
203
+ if (blankRun >= threshold) {
204
+ result.push("");
205
+ }
206
+ else {
207
+ for (let i = 0; i < blankRun; i++) {
208
+ result.push("");
209
+ }
210
+ }
211
+ return result;
212
+ }
213
+ // ---------------------------------------------------------------------------
214
+ // Lightweight cleanup
215
+ // ---------------------------------------------------------------------------
216
+ export function lightweightCleanup(output) {
217
+ if (!output)
218
+ return output;
219
+ let result = stripAnsi(output);
220
+ let lines = result.split("\n");
221
+ lines = lines.map((line) => line.trimEnd());
222
+ lines = collapseBlankLines(lines, 3);
223
+ return lines.join("\n");
224
+ }
225
+ // ---------------------------------------------------------------------------
226
+ // Safety-scan truncation
227
+ // ---------------------------------------------------------------------------
228
+ export function truncateWithSafetyScan(lines) {
229
+ if (lines.length <= COMPRESS_SAFETY_SCAN_HEAD + COMPRESS_SAFETY_SCAN_TAIL) {
230
+ return null;
231
+ }
232
+ const head = lines.slice(0, COMPRESS_SAFETY_SCAN_HEAD);
233
+ const tail = lines.slice(-COMPRESS_SAFETY_SCAN_TAIL);
234
+ const middle = lines.slice(COMPRESS_SAFETY_SCAN_HEAD, -COMPRESS_SAFETY_SCAN_TAIL);
235
+ const safetyRe = new RegExp("\\b(" + COMPRESS_SAFETY_NEEDLES.map((n) => escapeRegex(n)).join("|") + ")\\b", "i");
236
+ const safetyLines = middle.filter((line) => safetyRe.test(line));
237
+ const keptSafety = safetyLines.slice(0, COMPRESS_SAFETY_SCAN_MAX_NEEDLES);
238
+ const kept = [...head];
239
+ if (keptSafety.length > 0) {
240
+ kept.push(`[${middle.length} lines omitted, ${keptSafety.length} safety-relevant lines preserved]`);
241
+ kept.push(...keptSafety);
242
+ }
243
+ else {
244
+ kept.push(`[${middle.length} lines omitted]`);
245
+ }
246
+ kept.push(...tail);
247
+ const result = kept.join("\n");
248
+ const original = lines.join("\n");
249
+ if (!shorterThan(result, original, 0))
250
+ return null;
251
+ return result;
252
+ }
253
+ function escapeRegex(str) {
254
+ return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
255
+ }
256
+ // ---------------------------------------------------------------------------
257
+ // Specific pattern dispatch
258
+ // ---------------------------------------------------------------------------
259
+ function trySpecificPattern(command, output) {
260
+ const lower = command.toLowerCase();
261
+ if (lower.startsWith("git ")) {
262
+ if (lower.includes(" log"))
263
+ return gitLogCompress(command, output);
264
+ if (lower.includes(" commit"))
265
+ return gitCommitCompress(command, output);
266
+ if (lower.includes(" push"))
267
+ return gitPushCompress(command, output);
268
+ }
269
+ if (lower.startsWith("npm ") || lower.startsWith("pnpm ") || lower.startsWith("yarn ")) {
270
+ if (lower.includes(" install") || lower.includes(" ci") || lower.includes(" add "))
271
+ return npmInstallCompress(command, output);
272
+ if (lower.includes(" test") || lower.includes(" run test"))
273
+ return npmTestCompress(command, output);
274
+ }
275
+ if (lower.startsWith("cargo ")) {
276
+ return cargoCompress(command, output);
277
+ }
278
+ return null;
279
+ }
280
+ // ---------------------------------------------------------------------------
281
+ // Git log compressor
282
+ // ---------------------------------------------------------------------------
283
+ function gitLogCompress(command, output) {
284
+ if (!output.trim())
285
+ return output;
286
+ const lines = output.split("\n");
287
+ const lower = command.toLowerCase();
288
+ // --oneline variant
289
+ if (lower.includes("--oneline") || lines[0]?.match(/^[a-f0-9]{7,}\s/)) {
290
+ return gitOnelineCompress(lines);
291
+ }
292
+ // --stat variant: keep stat lines, strip Author/Date/Merge headers
293
+ if (lower.includes("--stat")) {
294
+ return gitStatCompress(lines);
295
+ }
296
+ // Full log with diffs
297
+ return gitFullLogCompress(output);
298
+ }
299
+ function gitOnelineCompress(lines) {
300
+ const nonEmpty = lines.filter((l) => l.trim());
301
+ if (nonEmpty.length <= 100)
302
+ return lines.join("\n");
303
+ const kept = nonEmpty.slice(0, 100);
304
+ return kept.join("\n") + `\n...(${nonEmpty.length - 100} more)`;
305
+ }
306
+ function gitStatCompress(lines) {
307
+ const out = [];
308
+ for (const line of lines) {
309
+ const trimmed = line.trim();
310
+ if (!trimmed)
311
+ continue;
312
+ if (/^(Author|Date|Merge):/.test(trimmed))
313
+ continue;
314
+ if (/^commit\s+[a-f0-9]+/.test(trimmed)) {
315
+ out.push(trimmed.split(" ")[1].slice(0, 7));
316
+ continue;
317
+ }
318
+ // Keep stat and summary lines
319
+ if (/\d+ files? changed/.test(trimmed) || /^.+\|\s*\d+\s*[+-]*$/.test(trimmed)) {
320
+ out.push(trimmed);
321
+ }
322
+ }
323
+ return out.join("\n");
324
+ }
325
+ function gitFullLogCompress(output) {
326
+ const blocks = parseCommitBlocks(output);
327
+ if (blocks.length === 0)
328
+ return output;
329
+ let totalAdd = 0;
330
+ let totalDel = 0;
331
+ if (blocks.length <= 3) {
332
+ return blocks
333
+ .map((b) => formatCommitBlock(b, true))
334
+ .join("\n");
335
+ }
336
+ if (blocks.length <= 20) {
337
+ const parts = [];
338
+ blocks.forEach((b, i) => {
339
+ const full = i === 0;
340
+ parts.push(formatCommitBlock(b, full));
341
+ const s = parseDiffStat(b.stat || b.diff);
342
+ totalAdd += s.add;
343
+ totalDel += s.del;
344
+ });
345
+ return parts.join("\n");
346
+ }
347
+ // >20 commits
348
+ const lines = [];
349
+ blocks.forEach((b) => {
350
+ lines.push(`${b.hash} ${b.message}`);
351
+ const s = parseDiffStat(b.stat || b.diff);
352
+ totalAdd += s.add;
353
+ totalDel += s.del;
354
+ });
355
+ lines.push(`[${blocks.length} commits, +${totalAdd}/-${totalDel}]`);
356
+ return lines.join("\n");
357
+ }
358
+ function parseCommitBlocks(output) {
359
+ const rawBlocks = output.split(/^commit ([a-f0-9]{7,})/m).slice(1);
360
+ const blocks = [];
361
+ for (let i = 0; i < rawBlocks.length; i += 2) {
362
+ const hash = rawBlocks[i]?.trim().slice(0, 7) ?? "";
363
+ const body = rawBlocks[i + 1] ?? "";
364
+ const lines = body.split("\n");
365
+ let message = "";
366
+ let inDiff = false;
367
+ let inMessage = false;
368
+ const diffLines = [];
369
+ let statLine = "";
370
+ for (const line of lines) {
371
+ if (line.startsWith("diff --git")) {
372
+ inDiff = true;
373
+ inMessage = false;
374
+ }
375
+ if (inDiff) {
376
+ diffLines.push(line);
377
+ if (/\d+ files? changed/.test(line)) {
378
+ statLine = line.trim();
379
+ }
380
+ continue;
381
+ }
382
+ if (!inDiff && /\d+ files? changed/.test(line)) {
383
+ statLine = line.trim();
384
+ continue;
385
+ }
386
+ if (line.trim() === "") {
387
+ if (inMessage)
388
+ inMessage = false;
389
+ continue;
390
+ }
391
+ if (line.match(/^(Author|Date|Merge):/))
392
+ continue;
393
+ if (!inMessage && line.startsWith(" ")) {
394
+ inMessage = true;
395
+ message = line.trim();
396
+ }
397
+ }
398
+ blocks.push({
399
+ hash,
400
+ message,
401
+ diff: diffLines.join("\n"),
402
+ stat: statLine,
403
+ });
404
+ }
405
+ return blocks;
406
+ }
407
+ function formatCommitBlock(block, fullDiff) {
408
+ if (fullDiff && block.diff) {
409
+ const lines = block.diff.split("\n").filter((l) => l.trim());
410
+ return `${block.hash} ${block.message}\n${lines.slice(0, 30).join("\n")}`;
411
+ }
412
+ const s = parseDiffStat(block.stat || block.diff);
413
+ return `${block.hash} ${block.message} [${s.files} files] +${s.add}/-${s.del}`;
414
+ }
415
+ function parseDiffStat(text) {
416
+ const m = text.match(/(\d+) files? changed(?:,?\s*(\d+) insertions?\(\+\))?(?:,?\s*(\d+) deletions?\(-\))?/);
417
+ if (m) {
418
+ return { files: parseInt(m[1], 10), add: parseInt(m[2] ?? "0", 10), del: parseInt(m[3] ?? "0", 10) };
419
+ }
420
+ return { files: 0, add: 0, del: 0 };
421
+ }
422
+ // ---------------------------------------------------------------------------
423
+ // Git commit compressor
424
+ // ---------------------------------------------------------------------------
425
+ function gitCommitCompress(_command, output) {
426
+ const lines = output.split("\n");
427
+ let commitIdx = -1;
428
+ for (let i = 0; i < lines.length; i++) {
429
+ if (/^\[[^\]]+\s+[a-f0-9]+\]/.test(lines[i])) {
430
+ commitIdx = i;
431
+ break;
432
+ }
433
+ }
434
+ if (commitIdx === -1) {
435
+ // No recognisable commit line — fall back to terse filter behaviour later
436
+ return output;
437
+ }
438
+ const hookLines = lines.slice(0, commitIdx).filter((l) => l.trim());
439
+ const commitAndAfter = lines.slice(commitIdx);
440
+ // Hook summary
441
+ const failedLines = hookLines.filter((l) => /(fail|error)/i.test(l));
442
+ const passed = hookLines.length - failedLines.length;
443
+ const hookSummary = failedLines.length === 0
444
+ ? `${passed} hooks passed`
445
+ : `${passed} passed, ${failedLines.length} failed`;
446
+ const failedDetail = failedLines.length > 0
447
+ ? "\n" + failedLines.slice(0, 5).join("\n")
448
+ : "";
449
+ // Commit line + stats
450
+ const commitLine = commitAndAfter[0] ?? "";
451
+ const match = commitLine.match(/^\[([^\]]+)\s+([a-f0-9]+)\]\s*(.*)$/);
452
+ let commitSummary = commitLine;
453
+ if (match) {
454
+ const branch = match[1];
455
+ const hash = match[2].slice(0, 7);
456
+ const message = match[3];
457
+ const statText = commitAndAfter.slice(1).join("\n");
458
+ const s = parseDiffStat(statText);
459
+ commitSummary = `${hash} (${branch}) ${message} [${s.files} files, +${s.add}/-${s.del}]`;
460
+ }
461
+ return hookSummary + failedDetail + "\n" + commitSummary;
462
+ }
463
+ // ---------------------------------------------------------------------------
464
+ // Git push compressor
465
+ // ---------------------------------------------------------------------------
466
+ function gitPushCompress(_command, output) {
467
+ const lines = output.split("\n").filter((l) => l.trim());
468
+ if (lines.some((l) => l.includes("Everything up-to-date"))) {
469
+ return "ok (up-to-date)";
470
+ }
471
+ const kept = [];
472
+ for (const line of lines) {
473
+ if (line.includes("->")) {
474
+ kept.push(line);
475
+ continue;
476
+ }
477
+ if (/\brejected\b/i.test(line)) {
478
+ kept.push(line);
479
+ continue;
480
+ }
481
+ if (line.startsWith("remote:"))
482
+ continue;
483
+ // Keep other non-empty lines as "key lines"
484
+ if (line.trim())
485
+ kept.push(line);
486
+ }
487
+ if (kept.length === 0)
488
+ return output.trim();
489
+ return kept.join("\n");
490
+ }
491
+ // ---------------------------------------------------------------------------
492
+ // npm install compressor
493
+ // ---------------------------------------------------------------------------
494
+ function npmInstallCompress(_command, output) {
495
+ const lines = output.split("\n");
496
+ const treeLineRe = /^\+\s+.*@\d/;
497
+ const summaryRe = /added\s+\d+\s+packages?\s+in/;
498
+ const nonTree = lines.filter((l) => !treeLineRe.test(l));
499
+ const summary = nonTree.find((l) => summaryRe.test(l));
500
+ if (summary) {
501
+ return summary.trim();
502
+ }
503
+ // No summary — keep last 3 non-tree lines
504
+ const last = nonTree.filter((l) => l.trim()).slice(-3);
505
+ if (last.length)
506
+ return last.join("\n");
507
+ return output.trim();
508
+ }
509
+ // ---------------------------------------------------------------------------
510
+ // npm test compressor
511
+ // ---------------------------------------------------------------------------
512
+ function npmTestCompress(_command, output) {
513
+ const keepRe = /^(PASS|FAIL|Test Suites:|Tests:|Snapshots:|Time:)/;
514
+ const errorBlockRe = /\b(error|failed|fail)\b|ERR!/i;
515
+ const lines = output.split("\n");
516
+ const kept = [];
517
+ let inErrorBlock = false;
518
+ let errorBlockIndent = null;
519
+ for (const line of lines) {
520
+ if (keepRe.test(line)) {
521
+ kept.push(line);
522
+ continue;
523
+ }
524
+ // Start of error/failure detail block
525
+ if (errorBlockRe.test(line) && !inErrorBlock) {
526
+ inErrorBlock = true;
527
+ errorBlockIndent = line.match(/^(\s*)/)?.[1]?.length ?? 0;
528
+ kept.push(line);
529
+ continue;
530
+ }
531
+ if (inErrorBlock) {
532
+ const indent = line.match(/^(\s*)/)?.[1]?.length ?? 0;
533
+ // Continue block while indented or blank
534
+ if (line.trim() === "" || indent > (errorBlockIndent ?? 0)) {
535
+ kept.push(line);
536
+ continue;
537
+ }
538
+ inErrorBlock = false;
539
+ errorBlockIndent = null;
540
+ }
541
+ }
542
+ if (kept.length === 0)
543
+ return output.trim();
544
+ return kept.join("\n");
545
+ }
546
+ // ---------------------------------------------------------------------------
547
+ // Cargo compressor
548
+ // ---------------------------------------------------------------------------
549
+ function cargoCompress(_command, output) {
550
+ const lines = output.split("\n");
551
+ let compilingCount = 0;
552
+ let errorCount = 0;
553
+ let warningCount = 0;
554
+ let firstError = null;
555
+ let firstWarning = null;
556
+ const kept = [];
557
+ for (const line of lines) {
558
+ const trimmed = line.trim();
559
+ if (!trimmed)
560
+ continue;
561
+ if (/^Compiling\s+\S+\s+v\d/.test(trimmed)) {
562
+ compilingCount++;
563
+ continue;
564
+ }
565
+ if (/^Downloading\s+/.test(trimmed)) {
566
+ continue;
567
+ }
568
+ if (/^test result:/.test(trimmed) || /^running\s+\d+\s+tests?/.test(trimmed)) {
569
+ kept.push(trimmed);
570
+ continue;
571
+ }
572
+ if (/^Finished/.test(trimmed) || /^Release/.test(trimmed)) {
573
+ kept.push(trimmed);
574
+ continue;
575
+ }
576
+ if (/\berror\b/i.test(trimmed) && !firstError) {
577
+ firstError = trimmed;
578
+ }
579
+ if (/\berror\b/i.test(trimmed)) {
580
+ errorCount++;
581
+ continue;
582
+ }
583
+ if (/\bwarning\b/i.test(trimmed) && !firstWarning) {
584
+ firstWarning = trimmed;
585
+ }
586
+ if (/\bwarning\b/i.test(trimmed)) {
587
+ warningCount++;
588
+ continue;
589
+ }
590
+ // Keep lines that don't match any stripping rule
591
+ kept.push(trimmed);
592
+ }
593
+ const summary = [];
594
+ if (compilingCount > 0)
595
+ summary.push(`compiled ${compilingCount} crates`);
596
+ if (firstError)
597
+ summary.push(firstError + (errorCount > 1 ? ` (+${errorCount - 1} more)` : ""));
598
+ if (firstWarning)
599
+ summary.push(firstWarning + (warningCount > 1 ? ` (+${warningCount - 1} more)` : ""));
600
+ return [...summary, ...kept].join("\n");
601
+ }
602
+ //# sourceMappingURL=shell-compress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell-compress.js","sourceRoot":"","sources":["../../src/batch/shell-compress.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"summary.d.ts","sourceRoot":"","sources":["../../src/batch/summary.ts"],"names":[],"mappings":"AAAA;;GAEG;AAsEH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CA6B3E"}
1
+ {"version":3,"file":"summary.d.ts","sourceRoot":"","sources":["../../src/batch/summary.ts"],"names":[],"mappings":"AAAA;;GAEG;AA0EH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CA6B3E"}
@@ -65,6 +65,10 @@ function formatOpSummary(op) {
65
65
  return `rg ${op.q ?? "?"} in ${shortPath}${op.t ? ` (${op.t})` : ""}`;
66
66
  case "delete":
67
67
  return `delete ${shortPath}`;
68
+ case "patch": {
69
+ const patchPreview = op.c ? ` (${op.c.split("\n")[0]}…)` : "";
70
+ return `patch${patchPreview}`;
71
+ }
68
72
  default:
69
73
  return `${op.o} ${shortPath}`;
70
74
  }