@astralyn/pi 0.81.1-2 → 0.82.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (191) hide show
  1. package/CHANGELOG.md +53 -0
  2. package/README.md +14 -1
  3. package/dist/cli/args.d.ts.map +1 -1
  4. package/dist/cli/args.js +1 -0
  5. package/dist/cli/args.js.map +1 -1
  6. package/dist/cli/config-selector.d.ts.map +1 -1
  7. package/dist/cli/config-selector.js +1 -1
  8. package/dist/cli/config-selector.js.map +1 -1
  9. package/dist/cli/startup-ui.d.ts.map +1 -1
  10. package/dist/cli/startup-ui.js +1 -1
  11. package/dist/cli/startup-ui.js.map +1 -1
  12. package/dist/core/agent-session.d.ts +11 -0
  13. package/dist/core/agent-session.d.ts.map +1 -1
  14. package/dist/core/agent-session.js +7 -8
  15. package/dist/core/agent-session.js.map +1 -1
  16. package/dist/core/bash-executor.d.ts.map +1 -1
  17. package/dist/core/bash-executor.js +22 -4
  18. package/dist/core/bash-executor.js.map +1 -1
  19. package/dist/core/compaction/compaction.d.ts.map +1 -1
  20. package/dist/core/compaction/compaction.js +11 -3
  21. package/dist/core/compaction/compaction.js.map +1 -1
  22. package/dist/core/extensions/runner.d.ts.map +1 -1
  23. package/dist/core/extensions/runner.js +4 -0
  24. package/dist/core/extensions/runner.js.map +1 -1
  25. package/dist/core/extensions/types.d.ts +9 -1
  26. package/dist/core/extensions/types.d.ts.map +1 -1
  27. package/dist/core/extensions/types.js.map +1 -1
  28. package/dist/core/model-config.d.ts +30 -0
  29. package/dist/core/model-config.d.ts.map +1 -1
  30. package/dist/core/model-config.js +6 -0
  31. package/dist/core/model-config.js.map +1 -1
  32. package/dist/core/model-registry.d.ts.map +1 -1
  33. package/dist/core/model-registry.js +2 -2
  34. package/dist/core/model-registry.js.map +1 -1
  35. package/dist/core/model-resolver.d.ts.map +1 -1
  36. package/dist/core/model-resolver.js +7 -0
  37. package/dist/core/model-resolver.js.map +1 -1
  38. package/dist/core/model-runtime.d.ts +0 -1
  39. package/dist/core/model-runtime.d.ts.map +1 -1
  40. package/dist/core/model-runtime.js +3 -5
  41. package/dist/core/model-runtime.js.map +1 -1
  42. package/dist/core/remote-catalog-provider.d.ts +1 -1
  43. package/dist/core/remote-catalog-provider.d.ts.map +1 -1
  44. package/dist/core/remote-catalog-provider.js +5 -10
  45. package/dist/core/remote-catalog-provider.js.map +1 -1
  46. package/dist/core/settings-manager.d.ts +1 -1
  47. package/dist/core/settings-manager.d.ts.map +1 -1
  48. package/dist/core/settings-manager.js.map +1 -1
  49. package/dist/core/system-prompt.d.ts.map +1 -1
  50. package/dist/core/system-prompt.js +1 -1
  51. package/dist/core/system-prompt.js.map +1 -1
  52. package/dist/core/tools/bash.d.ts +2 -1
  53. package/dist/core/tools/bash.d.ts.map +1 -1
  54. package/dist/core/tools/bash.js +49 -48
  55. package/dist/core/tools/bash.js.map +1 -1
  56. package/dist/core/tools/find.d.ts.map +1 -1
  57. package/dist/core/tools/find.js +1 -0
  58. package/dist/core/tools/find.js.map +1 -1
  59. package/dist/core/tools/output-accumulator.d.ts +13 -3
  60. package/dist/core/tools/output-accumulator.d.ts.map +1 -1
  61. package/dist/core/tools/output-accumulator.js +36 -6
  62. package/dist/core/tools/output-accumulator.js.map +1 -1
  63. package/dist/core/tools/read.d.ts.map +1 -1
  64. package/dist/core/tools/read.js +4 -3
  65. package/dist/core/tools/read.js.map +1 -1
  66. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
  67. package/dist/core/tools/tool-definition-wrapper.js +5 -1
  68. package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
  69. package/dist/extensions/index.d.ts.map +1 -1
  70. package/dist/extensions/index.js +2 -0
  71. package/dist/extensions/index.js.map +1 -1
  72. package/dist/extensions/llama/provider.d.ts.map +1 -1
  73. package/dist/extensions/llama/provider.js +1 -2
  74. package/dist/extensions/llama/provider.js.map +1 -1
  75. package/dist/extensions/subagent/activity.d.ts +16 -0
  76. package/dist/extensions/subagent/activity.d.ts.map +1 -0
  77. package/dist/extensions/subagent/activity.js +150 -0
  78. package/dist/extensions/subagent/activity.js.map +1 -0
  79. package/dist/extensions/subagent/agents.d.ts +7 -0
  80. package/dist/extensions/subagent/agents.d.ts.map +1 -0
  81. package/dist/extensions/subagent/agents.js +218 -0
  82. package/dist/extensions/subagent/agents.js.map +1 -0
  83. package/dist/extensions/subagent/constants.d.ts +22 -0
  84. package/dist/extensions/subagent/constants.d.ts.map +1 -0
  85. package/dist/extensions/subagent/constants.js +32 -0
  86. package/dist/extensions/subagent/constants.js.map +1 -0
  87. package/dist/extensions/subagent/index.d.ts +3 -0
  88. package/dist/extensions/subagent/index.d.ts.map +1 -0
  89. package/dist/extensions/subagent/index.js +249 -0
  90. package/dist/extensions/subagent/index.js.map +1 -0
  91. package/dist/extensions/subagent/picker.d.ts +31 -0
  92. package/dist/extensions/subagent/picker.d.ts.map +1 -0
  93. package/dist/extensions/subagent/picker.js +116 -0
  94. package/dist/extensions/subagent/picker.js.map +1 -0
  95. package/dist/extensions/subagent/render.d.ts +8 -0
  96. package/dist/extensions/subagent/render.d.ts.map +1 -0
  97. package/dist/extensions/subagent/render.js +322 -0
  98. package/dist/extensions/subagent/render.js.map +1 -0
  99. package/dist/extensions/subagent/resolve.d.ts +16 -0
  100. package/dist/extensions/subagent/resolve.d.ts.map +1 -0
  101. package/dist/extensions/subagent/resolve.js +103 -0
  102. package/dist/extensions/subagent/resolve.js.map +1 -0
  103. package/dist/extensions/subagent/runner.d.ts +30 -0
  104. package/dist/extensions/subagent/runner.d.ts.map +1 -0
  105. package/dist/extensions/subagent/runner.js +355 -0
  106. package/dist/extensions/subagent/runner.js.map +1 -0
  107. package/dist/extensions/subagent/schema.d.ts +28 -0
  108. package/dist/extensions/subagent/schema.d.ts.map +1 -0
  109. package/dist/extensions/subagent/schema.js +33 -0
  110. package/dist/extensions/subagent/schema.js.map +1 -0
  111. package/dist/extensions/subagent/sdk-runner.d.ts +14 -0
  112. package/dist/extensions/subagent/sdk-runner.d.ts.map +1 -0
  113. package/dist/extensions/subagent/sdk-runner.js +210 -0
  114. package/dist/extensions/subagent/sdk-runner.js.map +1 -0
  115. package/dist/extensions/subagent/settings.d.ts +9 -0
  116. package/dist/extensions/subagent/settings.d.ts.map +1 -0
  117. package/dist/extensions/subagent/settings.js +131 -0
  118. package/dist/extensions/subagent/settings.js.map +1 -0
  119. package/dist/extensions/subagent/types.d.ts +99 -0
  120. package/dist/extensions/subagent/types.d.ts.map +1 -0
  121. package/dist/extensions/subagent/types.js +2 -0
  122. package/dist/extensions/subagent/types.js.map +1 -0
  123. package/dist/modes/interactive/components/extension-editor.d.ts +1 -2
  124. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
  125. package/dist/modes/interactive/components/extension-editor.js +16 -46
  126. package/dist/modes/interactive/components/extension-editor.js.map +1 -1
  127. package/dist/modes/interactive/components/index.d.ts +1 -0
  128. package/dist/modes/interactive/components/index.d.ts.map +1 -1
  129. package/dist/modes/interactive/components/index.js +1 -0
  130. package/dist/modes/interactive/components/index.js.map +1 -1
  131. package/dist/modes/interactive/components/tool-execution.d.ts +2 -0
  132. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  133. package/dist/modes/interactive/components/tool-execution.js +25 -4
  134. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  135. package/dist/modes/interactive/components/tool-group.d.ts +16 -0
  136. package/dist/modes/interactive/components/tool-group.d.ts.map +1 -0
  137. package/dist/modes/interactive/components/tool-group.js +64 -0
  138. package/dist/modes/interactive/components/tool-group.js.map +1 -0
  139. package/dist/modes/interactive/external-editor.d.ts +12 -0
  140. package/dist/modes/interactive/external-editor.d.ts.map +1 -0
  141. package/dist/modes/interactive/external-editor.js +37 -0
  142. package/dist/modes/interactive/external-editor.js.map +1 -0
  143. package/dist/modes/interactive/interactive-mode.d.ts +3 -1
  144. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  145. package/dist/modes/interactive/interactive-mode.js +61 -62
  146. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  147. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  148. package/dist/modes/rpc/rpc-mode.js +1 -0
  149. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  150. package/dist/utils/clipboard.d.ts.map +1 -1
  151. package/dist/utils/clipboard.js +19 -8
  152. package/dist/utils/clipboard.js.map +1 -1
  153. package/dist/utils/output-decoder.d.ts +52 -0
  154. package/dist/utils/output-decoder.d.ts.map +1 -0
  155. package/dist/utils/output-decoder.js +134 -0
  156. package/dist/utils/output-decoder.js.map +1 -0
  157. package/dist/utils/shell.d.ts +1 -0
  158. package/dist/utils/shell.d.ts.map +1 -1
  159. package/dist/utils/shell.js +21 -0
  160. package/dist/utils/shell.js.map +1 -1
  161. package/dist/utils/version-check.d.ts.map +1 -1
  162. package/dist/utils/version-check.js +3 -1
  163. package/dist/utils/version-check.js.map +1 -1
  164. package/docs/compaction.md +1 -1
  165. package/docs/custom-provider.md +5 -2
  166. package/docs/environment-variables.md +88 -0
  167. package/docs/extensions.md +11 -3
  168. package/docs/index.md +4 -1
  169. package/docs/models.md +6 -2
  170. package/docs/providers.md +8 -1
  171. package/docs/rpc.md +23 -6
  172. package/docs/settings.md +1 -1
  173. package/docs/usage.md +0 -13
  174. package/examples/extensions/custom-compaction.ts +3 -0
  175. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  176. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  177. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  178. package/examples/extensions/gondolin/package-lock.json +2 -2
  179. package/examples/extensions/gondolin/package.json +1 -1
  180. package/examples/extensions/handoff.ts +9 -1
  181. package/examples/extensions/sandbox/package-lock.json +2 -2
  182. package/examples/extensions/sandbox/package.json +1 -1
  183. package/examples/extensions/summarize.ts +3 -0
  184. package/examples/extensions/with-deps/package-lock.json +2 -2
  185. package/examples/extensions/with-deps/package.json +1 -1
  186. package/npm-shrinkwrap.json +16 -15
  187. package/package.json +5 -4
  188. package/dist/core/tools/bash-command-summary.d.ts +0 -7
  189. package/dist/core/tools/bash-command-summary.d.ts.map +0 -1
  190. package/dist/core/tools/bash-command-summary.js +0 -261
  191. package/dist/core/tools/bash-command-summary.js.map +0 -1
@@ -1,261 +0,0 @@
1
- const SUMMARIZABLE_COMMANDS = new Set([
2
- "cd",
3
- "ls",
4
- "find",
5
- "fd",
6
- "rg",
7
- "grep",
8
- "git",
9
- "gh",
10
- "npm",
11
- "pnpm",
12
- "yarn",
13
- "bun",
14
- "cat",
15
- "head",
16
- "tail",
17
- "sed",
18
- "awk",
19
- "jq",
20
- "sort",
21
- "uniq",
22
- "wc",
23
- "mkdir",
24
- "cp",
25
- "mv",
26
- "rm",
27
- "touch",
28
- "curl",
29
- "wget",
30
- "make",
31
- "cmake",
32
- "cargo",
33
- "go",
34
- "docker",
35
- "kubectl",
36
- ]);
37
- const SHELL_KEYWORDS = new Set([
38
- "case",
39
- "do",
40
- "done",
41
- "elif",
42
- "else",
43
- "esac",
44
- "fi",
45
- "for",
46
- "function",
47
- "if",
48
- "in",
49
- "select",
50
- "then",
51
- "until",
52
- "while",
53
- ]);
54
- function splitTopLevelCommands(command) {
55
- const segments = [];
56
- let current = "";
57
- let quote;
58
- let escaped = false;
59
- let sawSeparator = false;
60
- let trailingSeparator;
61
- const pushSegment = (separator) => {
62
- const segment = current.trim();
63
- if (!segment)
64
- return false;
65
- segments.push(segment);
66
- current = "";
67
- sawSeparator = true;
68
- trailingSeparator = separator;
69
- return true;
70
- };
71
- for (let i = 0; i < command.length; i++) {
72
- const char = command[i];
73
- const next = command[i + 1];
74
- if (escaped) {
75
- if (char !== "\n")
76
- current += char;
77
- escaped = false;
78
- continue;
79
- }
80
- if (char === "\\") {
81
- if (next === "\n") {
82
- i++;
83
- continue;
84
- }
85
- escaped = true;
86
- current += char;
87
- continue;
88
- }
89
- if (quote) {
90
- current += char;
91
- if (char === quote)
92
- quote = undefined;
93
- continue;
94
- }
95
- if (char === "'" || char === '"') {
96
- quote = char;
97
- current += char;
98
- continue;
99
- }
100
- if (char === "`" || (char === "$" && (next === "(" || next === "{"))) {
101
- return undefined;
102
- }
103
- // Redirections, grouping, comments, and background execution need more
104
- // shell grammar than a display-only summary should attempt to model.
105
- if (char === "<" || char === ">" || char === "(" || char === ")" || char === "#") {
106
- return undefined;
107
- }
108
- if (char === "&") {
109
- if (next !== "&")
110
- return undefined;
111
- if (!pushSegment("&&"))
112
- return undefined;
113
- current = "";
114
- i++;
115
- continue;
116
- }
117
- if (char === "|") {
118
- if (next === "|") {
119
- if (!pushSegment("||"))
120
- return undefined;
121
- i++;
122
- }
123
- else if (next === "&") {
124
- if (!pushSegment("|&"))
125
- return undefined;
126
- i++;
127
- }
128
- else if (!pushSegment("|")) {
129
- return undefined;
130
- }
131
- current = "";
132
- continue;
133
- }
134
- if (char === ";") {
135
- if (next === ";" || next === "&")
136
- return undefined;
137
- if (!pushSegment(";"))
138
- return undefined;
139
- current = "";
140
- continue;
141
- }
142
- if (char === "\n") {
143
- if (!current.trim() && trailingSeparator && trailingSeparator !== ";" && trailingSeparator !== "\n") {
144
- continue;
145
- }
146
- if (!pushSegment("\n"))
147
- return undefined;
148
- current = "";
149
- continue;
150
- }
151
- current += char;
152
- }
153
- if (escaped || quote)
154
- return undefined;
155
- if (current.trim()) {
156
- segments.push(current.trim());
157
- }
158
- else if (trailingSeparator && trailingSeparator !== ";" && trailingSeparator !== "\n") {
159
- return undefined;
160
- }
161
- return sawSeparator && segments.length > 1 ? segments : undefined;
162
- }
163
- function tokenizeSimpleCommand(segment) {
164
- const tokens = [];
165
- let current = "";
166
- let quote;
167
- let escaped = false;
168
- let tokenStarted = false;
169
- const pushToken = () => {
170
- if (!tokenStarted)
171
- return;
172
- tokens.push(current);
173
- current = "";
174
- tokenStarted = false;
175
- };
176
- for (let i = 0; i < segment.length; i++) {
177
- const char = segment[i];
178
- if (escaped) {
179
- if (char !== "\n")
180
- current += char;
181
- escaped = false;
182
- tokenStarted = true;
183
- continue;
184
- }
185
- if (char === "\\") {
186
- escaped = true;
187
- tokenStarted = true;
188
- continue;
189
- }
190
- if (quote) {
191
- if (char === quote) {
192
- quote = undefined;
193
- }
194
- else {
195
- current += char;
196
- }
197
- tokenStarted = true;
198
- continue;
199
- }
200
- if (char === "'" || char === '"') {
201
- quote = char;
202
- tokenStarted = true;
203
- continue;
204
- }
205
- if (/\s/.test(char)) {
206
- pushToken();
207
- continue;
208
- }
209
- current += char;
210
- tokenStarted = true;
211
- }
212
- if (escaped || quote)
213
- return undefined;
214
- pushToken();
215
- return tokens.length > 0 ? tokens : undefined;
216
- }
217
- function normalizeCommandName(token) {
218
- if (!token || token.startsWith("$"))
219
- return undefined;
220
- const lastSlash = token.lastIndexOf("/");
221
- if (lastSlash !== -1) {
222
- if (token.startsWith("./") || token.startsWith("../"))
223
- return undefined;
224
- token = token.slice(lastSlash + 1);
225
- }
226
- const normalized = token.toLowerCase().replace(/\.exe$/, "");
227
- return SUMMARIZABLE_COMMANDS.has(normalized) ? normalized : undefined;
228
- }
229
- function extractSimpleCommandName(segment) {
230
- const tokens = tokenizeSimpleCommand(segment);
231
- if (!tokens)
232
- return undefined;
233
- let index = 0;
234
- while (index < tokens.length && /^[A-Za-z_][A-Za-z0-9_]*=/.test(tokens[index])) {
235
- index++;
236
- }
237
- const command = tokens[index];
238
- if (!command || SHELL_KEYWORDS.has(command))
239
- return undefined;
240
- return normalizeCommandName(command);
241
- }
242
- /**
243
- * Return unique, ordered command names when a command is a safe multi-command
244
- * chain suitable for a compact display summary. Returns undefined when the
245
- * command contains unsupported shell syntax or an unrecognized command.
246
- */
247
- export function summarizeBashCommand(command) {
248
- const segments = splitTopLevelCommands(command);
249
- if (!segments)
250
- return undefined;
251
- const names = [];
252
- for (const segment of segments) {
253
- const name = extractSimpleCommandName(segment);
254
- if (!name)
255
- return undefined;
256
- if (!names.includes(name))
257
- names.push(name);
258
- }
259
- return names.length > 0 ? names : undefined;
260
- }
261
- //# sourceMappingURL=bash-command-summary.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bash-command-summary.js","sourceRoot":"","sources":["../../../src/core/tools/bash-command-summary.ts"],"names":[],"mappings":"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","sourcesContent":["const SUMMARIZABLE_COMMANDS = new Set([\n\t\"cd\",\n\t\"ls\",\n\t\"find\",\n\t\"fd\",\n\t\"rg\",\n\t\"grep\",\n\t\"git\",\n\t\"gh\",\n\t\"npm\",\n\t\"pnpm\",\n\t\"yarn\",\n\t\"bun\",\n\t\"cat\",\n\t\"head\",\n\t\"tail\",\n\t\"sed\",\n\t\"awk\",\n\t\"jq\",\n\t\"sort\",\n\t\"uniq\",\n\t\"wc\",\n\t\"mkdir\",\n\t\"cp\",\n\t\"mv\",\n\t\"rm\",\n\t\"touch\",\n\t\"curl\",\n\t\"wget\",\n\t\"make\",\n\t\"cmake\",\n\t\"cargo\",\n\t\"go\",\n\t\"docker\",\n\t\"kubectl\",\n]);\n\nconst SHELL_KEYWORDS = new Set([\n\t\"case\",\n\t\"do\",\n\t\"done\",\n\t\"elif\",\n\t\"else\",\n\t\"esac\",\n\t\"fi\",\n\t\"for\",\n\t\"function\",\n\t\"if\",\n\t\"in\",\n\t\"select\",\n\t\"then\",\n\t\"until\",\n\t\"while\",\n]);\n\ntype CommandSeparator = \"&&\" | \"||\" | \"|\" | \"|&\" | \";\" | \"\\n\";\n\nfunction splitTopLevelCommands(command: string): string[] | undefined {\n\tconst segments: string[] = [];\n\tlet current = \"\";\n\tlet quote: \"'\" | '\"' | undefined;\n\tlet escaped = false;\n\tlet sawSeparator = false;\n\tlet trailingSeparator: CommandSeparator | undefined;\n\n\tconst pushSegment = (separator: CommandSeparator): boolean => {\n\t\tconst segment = current.trim();\n\t\tif (!segment) return false;\n\t\tsegments.push(segment);\n\t\tcurrent = \"\";\n\t\tsawSeparator = true;\n\t\ttrailingSeparator = separator;\n\t\treturn true;\n\t};\n\n\tfor (let i = 0; i < command.length; i++) {\n\t\tconst char = command[i];\n\t\tconst next = command[i + 1];\n\n\t\tif (escaped) {\n\t\t\tif (char !== \"\\n\") current += char;\n\t\t\tescaped = false;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (char === \"\\\\\") {\n\t\t\tif (next === \"\\n\") {\n\t\t\t\ti++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tescaped = true;\n\t\t\tcurrent += char;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (quote) {\n\t\t\tcurrent += char;\n\t\t\tif (char === quote) quote = undefined;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (char === \"'\" || char === '\"') {\n\t\t\tquote = char;\n\t\t\tcurrent += char;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (char === \"`\" || (char === \"$\" && (next === \"(\" || next === \"{\"))) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Redirections, grouping, comments, and background execution need more\n\t\t// shell grammar than a display-only summary should attempt to model.\n\t\tif (char === \"<\" || char === \">\" || char === \"(\" || char === \")\" || char === \"#\") {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (char === \"&\") {\n\t\t\tif (next !== \"&\") return undefined;\n\t\t\tif (!pushSegment(\"&&\")) return undefined;\n\t\t\tcurrent = \"\";\n\t\t\ti++;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (char === \"|\") {\n\t\t\tif (next === \"|\") {\n\t\t\t\tif (!pushSegment(\"||\")) return undefined;\n\t\t\t\ti++;\n\t\t\t} else if (next === \"&\") {\n\t\t\t\tif (!pushSegment(\"|&\")) return undefined;\n\t\t\t\ti++;\n\t\t\t} else if (!pushSegment(\"|\")) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tcurrent = \"\";\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (char === \";\") {\n\t\t\tif (next === \";\" || next === \"&\") return undefined;\n\t\t\tif (!pushSegment(\";\")) return undefined;\n\t\t\tcurrent = \"\";\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (char === \"\\n\") {\n\t\t\tif (!current.trim() && trailingSeparator && trailingSeparator !== \";\" && trailingSeparator !== \"\\n\") {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (!pushSegment(\"\\n\")) return undefined;\n\t\t\tcurrent = \"\";\n\t\t\tcontinue;\n\t\t}\n\n\t\tcurrent += char;\n\t}\n\n\tif (escaped || quote) return undefined;\n\tif (current.trim()) {\n\t\tsegments.push(current.trim());\n\t} else if (trailingSeparator && trailingSeparator !== \";\" && trailingSeparator !== \"\\n\") {\n\t\treturn undefined;\n\t}\n\n\treturn sawSeparator && segments.length > 1 ? segments : undefined;\n}\n\nfunction tokenizeSimpleCommand(segment: string): string[] | undefined {\n\tconst tokens: string[] = [];\n\tlet current = \"\";\n\tlet quote: \"'\" | '\"' | undefined;\n\tlet escaped = false;\n\tlet tokenStarted = false;\n\n\tconst pushToken = () => {\n\t\tif (!tokenStarted) return;\n\t\ttokens.push(current);\n\t\tcurrent = \"\";\n\t\ttokenStarted = false;\n\t};\n\n\tfor (let i = 0; i < segment.length; i++) {\n\t\tconst char = segment[i];\n\n\t\tif (escaped) {\n\t\t\tif (char !== \"\\n\") current += char;\n\t\t\tescaped = false;\n\t\t\ttokenStarted = true;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (char === \"\\\\\") {\n\t\t\tescaped = true;\n\t\t\ttokenStarted = true;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (quote) {\n\t\t\tif (char === quote) {\n\t\t\t\tquote = undefined;\n\t\t\t} else {\n\t\t\t\tcurrent += char;\n\t\t\t}\n\t\t\ttokenStarted = true;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (char === \"'\" || char === '\"') {\n\t\t\tquote = char;\n\t\t\ttokenStarted = true;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (/\\s/.test(char)) {\n\t\t\tpushToken();\n\t\t\tcontinue;\n\t\t}\n\n\t\tcurrent += char;\n\t\ttokenStarted = true;\n\t}\n\n\tif (escaped || quote) return undefined;\n\tpushToken();\n\treturn tokens.length > 0 ? tokens : undefined;\n}\n\nfunction normalizeCommandName(token: string): string | undefined {\n\tif (!token || token.startsWith(\"$\")) return undefined;\n\tconst lastSlash = token.lastIndexOf(\"/\");\n\tif (lastSlash !== -1) {\n\t\tif (token.startsWith(\"./\") || token.startsWith(\"../\")) return undefined;\n\t\ttoken = token.slice(lastSlash + 1);\n\t}\n\n\tconst normalized = token.toLowerCase().replace(/\\.exe$/, \"\");\n\treturn SUMMARIZABLE_COMMANDS.has(normalized) ? normalized : undefined;\n}\n\nfunction extractSimpleCommandName(segment: string): string | undefined {\n\tconst tokens = tokenizeSimpleCommand(segment);\n\tif (!tokens) return undefined;\n\n\tlet index = 0;\n\twhile (index < tokens.length && /^[A-Za-z_][A-Za-z0-9_]*=/.test(tokens[index])) {\n\t\tindex++;\n\t}\n\tconst command = tokens[index];\n\tif (!command || SHELL_KEYWORDS.has(command)) return undefined;\n\treturn normalizeCommandName(command);\n}\n\n/**\n * Return unique, ordered command names when a command is a safe multi-command\n * chain suitable for a compact display summary. Returns undefined when the\n * command contains unsupported shell syntax or an unrecognized command.\n */\nexport function summarizeBashCommand(command: string): string[] | undefined {\n\tconst segments = splitTopLevelCommands(command);\n\tif (!segments) return undefined;\n\n\tconst names: string[] = [];\n\tfor (const segment of segments) {\n\t\tconst name = extractSimpleCommandName(segment);\n\t\tif (!name) return undefined;\n\t\tif (!names.includes(name)) names.push(name);\n\t}\n\n\treturn names.length > 0 ? names : undefined;\n}\n"]}