@defai.digital/ax-cli 3.7.1 → 3.8.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 (213) hide show
  1. package/README.md +143 -56
  2. package/dist/agent/context-manager.d.ts +15 -1
  3. package/dist/agent/context-manager.js +50 -19
  4. package/dist/agent/context-manager.js.map +1 -1
  5. package/dist/agent/dependency-resolver.js +13 -7
  6. package/dist/agent/dependency-resolver.js.map +1 -1
  7. package/dist/agent/llm-agent.d.ts +35 -0
  8. package/dist/agent/llm-agent.js +137 -4
  9. package/dist/agent/llm-agent.js.map +1 -1
  10. package/dist/agent/status-reporter.d.ts +114 -0
  11. package/dist/agent/status-reporter.js +335 -0
  12. package/dist/agent/status-reporter.js.map +1 -0
  13. package/dist/analyzers/best-practices/rules/typescript/no-magic-numbers.js +8 -2
  14. package/dist/analyzers/best-practices/rules/typescript/no-magic-numbers.js.map +1 -1
  15. package/dist/analyzers/best-practices/rules/typescript/no-unused-vars.js +3 -1
  16. package/dist/analyzers/best-practices/rules/typescript/no-unused-vars.js.map +1 -1
  17. package/dist/analyzers/best-practices/rules/typescript/prefer-const.js +3 -1
  18. package/dist/analyzers/best-practices/rules/typescript/prefer-const.js.map +1 -1
  19. package/dist/analyzers/best-practices/rules/typescript/prefer-readonly.js +3 -1
  20. package/dist/analyzers/best-practices/rules/typescript/prefer-readonly.js.map +1 -1
  21. package/dist/analyzers/code-smells/detectors/duplicate-code-detector.js +9 -3
  22. package/dist/analyzers/code-smells/detectors/duplicate-code-detector.js.map +1 -1
  23. package/dist/analyzers/git/churn-calculator.d.ts +1 -0
  24. package/dist/analyzers/git/churn-calculator.js +25 -6
  25. package/dist/analyzers/git/churn-calculator.js.map +1 -1
  26. package/dist/analyzers/git/hotspot-detector.js +2 -2
  27. package/dist/analyzers/git/hotspot-detector.js.map +1 -1
  28. package/dist/analyzers/metrics/metrics-analyzer.js +1 -1
  29. package/dist/analyzers/metrics/metrics-analyzer.js.map +1 -1
  30. package/dist/analyzers/security/security-analyzer.js +1 -1
  31. package/dist/analyzers/security/security-analyzer.js.map +1 -1
  32. package/dist/checkpoint/manager.d.ts +1 -0
  33. package/dist/checkpoint/manager.js +49 -9
  34. package/dist/checkpoint/manager.js.map +1 -1
  35. package/dist/checkpoint/storage.js +2 -2
  36. package/dist/checkpoint/storage.js.map +1 -1
  37. package/dist/commands/mcp-migrate.d.ts +9 -0
  38. package/dist/commands/mcp-migrate.js +172 -0
  39. package/dist/commands/mcp-migrate.js.map +1 -0
  40. package/dist/commands/status.d.ts +7 -0
  41. package/dist/commands/status.js +211 -0
  42. package/dist/commands/status.js.map +1 -0
  43. package/dist/commands/vscode.d.ts +7 -0
  44. package/dist/commands/vscode.js +363 -0
  45. package/dist/commands/vscode.js.map +1 -0
  46. package/dist/index.js +79 -30
  47. package/dist/index.js.map +1 -1
  48. package/dist/llm/client.js +22 -4
  49. package/dist/llm/client.js.map +1 -1
  50. package/dist/mcp/automatosx-loader.d.ts +84 -0
  51. package/dist/mcp/automatosx-loader.js +238 -0
  52. package/dist/mcp/automatosx-loader.js.map +1 -0
  53. package/dist/mcp/client-mutex-patch.d.ts +36 -0
  54. package/dist/mcp/client-mutex-patch.js +75 -0
  55. package/dist/mcp/client-mutex-patch.js.map +1 -0
  56. package/dist/mcp/client-v2.d.ts +229 -0
  57. package/dist/mcp/client-v2.js +740 -0
  58. package/dist/mcp/client-v2.js.map +1 -0
  59. package/dist/mcp/client.d.ts +111 -13
  60. package/dist/mcp/client.js +168 -253
  61. package/dist/mcp/client.js.map +1 -1
  62. package/dist/mcp/config-detector-v2.d.ts +83 -0
  63. package/dist/mcp/config-detector-v2.js +328 -0
  64. package/dist/mcp/config-detector-v2.js.map +1 -0
  65. package/dist/mcp/config-detector.d.ts +90 -0
  66. package/dist/mcp/config-detector.js +242 -0
  67. package/dist/mcp/config-detector.js.map +1 -0
  68. package/dist/mcp/config-migrator-v2.d.ts +89 -0
  69. package/dist/mcp/config-migrator-v2.js +288 -0
  70. package/dist/mcp/config-migrator-v2.js.map +1 -0
  71. package/dist/mcp/config-migrator.d.ts +63 -0
  72. package/dist/mcp/config-migrator.js +269 -0
  73. package/dist/mcp/config-migrator.js.map +1 -0
  74. package/dist/mcp/config-v2.d.ts +106 -0
  75. package/dist/mcp/config-v2.js +417 -0
  76. package/dist/mcp/config-v2.js.map +1 -0
  77. package/dist/mcp/config.d.ts +12 -1
  78. package/dist/mcp/config.js +95 -10
  79. package/dist/mcp/config.js.map +1 -1
  80. package/dist/mcp/error-formatter.d.ts +46 -0
  81. package/dist/mcp/error-formatter.js +244 -0
  82. package/dist/mcp/error-formatter.js.map +1 -0
  83. package/dist/mcp/health.d.ts +5 -0
  84. package/dist/mcp/health.js +22 -2
  85. package/dist/mcp/health.js.map +1 -1
  86. package/dist/mcp/invariants.d.ts +141 -0
  87. package/dist/mcp/invariants.js +243 -0
  88. package/dist/mcp/invariants.js.map +1 -0
  89. package/dist/mcp/mutex-safe.d.ts +153 -0
  90. package/dist/mcp/mutex-safe.js +260 -0
  91. package/dist/mcp/mutex-safe.js.map +1 -0
  92. package/dist/mcp/mutex.d.ts +73 -0
  93. package/dist/mcp/mutex.js +130 -0
  94. package/dist/mcp/mutex.js.map +1 -0
  95. package/dist/mcp/reconnection.d.ts +4 -0
  96. package/dist/mcp/reconnection.js +15 -0
  97. package/dist/mcp/reconnection.js.map +1 -1
  98. package/dist/mcp/transports-v2.d.ts +152 -0
  99. package/dist/mcp/transports-v2.js +481 -0
  100. package/dist/mcp/transports-v2.js.map +1 -0
  101. package/dist/mcp/type-safety.d.ts +231 -0
  102. package/dist/mcp/type-safety.js +273 -0
  103. package/dist/mcp/type-safety.js.map +1 -0
  104. package/dist/planner/task-planner.js +13 -0
  105. package/dist/planner/task-planner.js.map +1 -1
  106. package/dist/planner/types.d.ts +6 -6
  107. package/dist/schemas/confirmation-schemas.d.ts +2 -2
  108. package/dist/schemas/settings-schemas.d.ts +196 -0
  109. package/dist/schemas/settings-schemas.js +146 -5
  110. package/dist/schemas/settings-schemas.js.map +1 -1
  111. package/dist/sdk/index.d.ts +118 -2
  112. package/dist/sdk/index.js +146 -4
  113. package/dist/sdk/index.js.map +1 -1
  114. package/dist/sdk/testing.d.ts +182 -0
  115. package/dist/sdk/testing.js +231 -0
  116. package/dist/sdk/testing.js.map +1 -1
  117. package/dist/sdk/version.d.ts +114 -15
  118. package/dist/sdk/version.js +137 -15
  119. package/dist/sdk/version.js.map +1 -1
  120. package/dist/tools/bash.js +54 -9
  121. package/dist/tools/bash.js.map +1 -1
  122. package/dist/tools/registry.d.ts +146 -0
  123. package/dist/tools/registry.js +170 -0
  124. package/dist/tools/registry.js.map +1 -0
  125. package/dist/tools/search.js +12 -2
  126. package/dist/tools/search.js.map +1 -1
  127. package/dist/tools/text-editor.js +84 -26
  128. package/dist/tools/text-editor.js.map +1 -1
  129. package/dist/ui/components/chat-history.js +6 -1
  130. package/dist/ui/components/chat-history.js.map +1 -1
  131. package/dist/ui/components/chat-input.d.ts +2 -1
  132. package/dist/ui/components/chat-input.js +5 -2
  133. package/dist/ui/components/chat-input.js.map +1 -1
  134. package/dist/ui/components/chat-interface.js +187 -5
  135. package/dist/ui/components/chat-interface.js.map +1 -1
  136. package/dist/ui/components/context-breakdown.d.ts +23 -0
  137. package/dist/ui/components/context-breakdown.js +124 -0
  138. package/dist/ui/components/context-breakdown.js.map +1 -0
  139. package/dist/ui/components/keyboard-help.d.ts +17 -0
  140. package/dist/ui/components/keyboard-help.js +116 -0
  141. package/dist/ui/components/keyboard-help.js.map +1 -0
  142. package/dist/ui/components/keyboard-hints.js +2 -2
  143. package/dist/ui/components/keyboard-hints.js.map +1 -1
  144. package/dist/ui/components/quick-actions.js +43 -7
  145. package/dist/ui/components/quick-actions.js.map +1 -1
  146. package/dist/ui/components/status-bar.d.ts +3 -0
  147. package/dist/ui/components/status-bar.js +25 -16
  148. package/dist/ui/components/status-bar.js.map +1 -1
  149. package/dist/ui/components/toast-notification.d.ts +42 -0
  150. package/dist/ui/components/toast-notification.js +30 -2
  151. package/dist/ui/components/toast-notification.js.map +1 -1
  152. package/dist/ui/components/tool-group-display.js +34 -4
  153. package/dist/ui/components/tool-group-display.js.map +1 -1
  154. package/dist/ui/components/welcome-panel.js +2 -2
  155. package/dist/ui/components/welcome-panel.js.map +1 -1
  156. package/dist/ui/hooks/use-enhanced-input.d.ts +9 -1
  157. package/dist/ui/hooks/use-enhanced-input.js +486 -41
  158. package/dist/ui/hooks/use-enhanced-input.js.map +1 -1
  159. package/dist/ui/hooks/use-input-handler.d.ts +11 -1
  160. package/dist/ui/hooks/use-input-handler.js +67 -3
  161. package/dist/ui/hooks/use-input-handler.js.map +1 -1
  162. package/dist/ui/hooks/use-input-history.d.ts +1 -1
  163. package/dist/ui/hooks/use-input-history.js +50 -14
  164. package/dist/ui/hooks/use-input-history.js.map +1 -1
  165. package/dist/ui/utils/bracketed-paste-handler.d.ts +97 -0
  166. package/dist/ui/utils/bracketed-paste-handler.js +322 -0
  167. package/dist/ui/utils/bracketed-paste-handler.js.map +1 -0
  168. package/dist/ui/utils/change-summarizer.js +16 -6
  169. package/dist/ui/utils/change-summarizer.js.map +1 -1
  170. package/dist/ui/utils/tool-grouper.d.ts +10 -1
  171. package/dist/ui/utils/tool-grouper.js +143 -30
  172. package/dist/ui/utils/tool-grouper.js.map +1 -1
  173. package/dist/utils/auto-accept-logger.d.ts +173 -0
  174. package/dist/utils/auto-accept-logger.js +420 -0
  175. package/dist/utils/auto-accept-logger.js.map +1 -0
  176. package/dist/utils/background-task-manager.d.ts +11 -0
  177. package/dist/utils/background-task-manager.js +124 -38
  178. package/dist/utils/background-task-manager.js.map +1 -1
  179. package/dist/utils/confirmation-service.d.ts +1 -0
  180. package/dist/utils/confirmation-service.js +6 -1
  181. package/dist/utils/confirmation-service.js.map +1 -1
  182. package/dist/utils/encryption.d.ts +8 -0
  183. package/dist/utils/encryption.js +44 -27
  184. package/dist/utils/encryption.js.map +1 -1
  185. package/dist/utils/enhanced-error-messages.d.ts +33 -0
  186. package/dist/utils/enhanced-error-messages.js +420 -0
  187. package/dist/utils/enhanced-error-messages.js.map +1 -0
  188. package/dist/utils/error-handler.d.ts +13 -3
  189. package/dist/utils/error-handler.js +16 -4
  190. package/dist/utils/error-handler.js.map +1 -1
  191. package/dist/utils/external-editor.d.ts +47 -0
  192. package/dist/utils/external-editor.js +179 -0
  193. package/dist/utils/external-editor.js.map +1 -0
  194. package/dist/utils/history-migration.d.ts +9 -0
  195. package/dist/utils/history-migration.js +36 -0
  196. package/dist/utils/history-migration.js.map +1 -0
  197. package/dist/utils/paste-utils.js +12 -11
  198. package/dist/utils/paste-utils.js.map +1 -1
  199. package/dist/utils/rate-limiter.js +7 -0
  200. package/dist/utils/rate-limiter.js.map +1 -1
  201. package/dist/utils/safety-rules.d.ts +64 -0
  202. package/dist/utils/safety-rules.js +225 -0
  203. package/dist/utils/safety-rules.js.map +1 -0
  204. package/dist/utils/settings-manager.d.ts +89 -1
  205. package/dist/utils/settings-manager.js +359 -3
  206. package/dist/utils/settings-manager.js.map +1 -1
  207. package/dist/utils/token-counter.d.ts +2 -0
  208. package/dist/utils/token-counter.js +17 -4
  209. package/dist/utils/token-counter.js.map +1 -1
  210. package/dist/utils/version.d.ts +11 -2
  211. package/dist/utils/version.js +54 -21
  212. package/dist/utils/version.js.map +1 -1
  213. package/package.json +2 -1
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Bracketed Paste Mode Handler
3
+ *
4
+ * Implements industry-standard bracketed paste detection for reliable paste handling
5
+ * across all terminal types (SSH, tmux, iTerm2, etc.)
6
+ *
7
+ * Bracketed paste mode sends special escape sequences:
8
+ * - Start: \x1b[200~ (ESC [200~)
9
+ * - End: \x1b[201~ (ESC [201~)
10
+ *
11
+ * This handler implements a state machine that:
12
+ * 1. Accumulates partial escape sequences across multiple input events
13
+ * 2. Handles timeout/recovery if end marker never arrives
14
+ * 3. Sanitizes escape sequences from pasted content (security)
15
+ * 4. Falls back to simple batched detection if not supported
16
+ */
17
+ export interface PasteDetectionResult {
18
+ isPaste: boolean;
19
+ content: string;
20
+ isAccumulating: boolean;
21
+ }
22
+ export declare class BracketedPasteHandler {
23
+ private state;
24
+ private buffer;
25
+ private escapeBuffer;
26
+ private timeoutHandle;
27
+ private readonly PASTE_TIMEOUT_MS;
28
+ private readonly START_MARKER;
29
+ private readonly END_MARKER;
30
+ private readonly MAX_PASTE_SIZE;
31
+ private pasteCount;
32
+ /**
33
+ * Handle incoming input character(s)
34
+ * Returns detection result indicating if paste is complete, accumulating, or normal input
35
+ */
36
+ handleInput(inputChar: string): PasteDetectionResult;
37
+ /**
38
+ * Handle idle state - detect paste start marker
39
+ */
40
+ private handleIdleState;
41
+ /**
42
+ * Handle accumulating state - collect paste content until end marker
43
+ */
44
+ private handleAccumulatingState;
45
+ /**
46
+ * Check if buffer is a partial match for a target string
47
+ * Used to detect incomplete escape sequences
48
+ */
49
+ private isPartialMatch;
50
+ /**
51
+ * Sanitize pasted content - strip dangerous escape sequences
52
+ * Security: Prevent terminal injection attacks
53
+ *
54
+ * @param content - Content to sanitize
55
+ * @param removeLiteralMarkers - If true, also remove literal [200~ [201~ (for malformed pastes)
56
+ * If false, only remove escape sequences (for proper bracketed pastes)
57
+ */
58
+ private sanitizeContent;
59
+ /**
60
+ * Start timeout for paste accumulation
61
+ * If paste doesn't complete within timeout, reset state
62
+ */
63
+ private startTimeout;
64
+ /**
65
+ * Clear paste accumulation timeout
66
+ */
67
+ private clearTimeout;
68
+ /**
69
+ * Reset handler to initial state
70
+ * Used when component unmounts or on errors
71
+ */
72
+ reset(): void;
73
+ /**
74
+ * Check if currently accumulating paste
75
+ */
76
+ isAccumulating(): boolean;
77
+ /**
78
+ * Get current state (for debugging/testing)
79
+ */
80
+ getState(): string;
81
+ /**
82
+ * Get paste statistics (for debugging/telemetry)
83
+ */
84
+ getStats(): {
85
+ pasteCount: number;
86
+ };
87
+ /**
88
+ * BUG FIX: Retrieve and clear orphaned buffer content
89
+ * Use this when state is idle but buffer is not empty (timeout occurred)
90
+ * @returns orphaned buffer content, or empty string if none
91
+ */
92
+ retrieveOrphanedContent(): string;
93
+ /**
94
+ * Cleanup on destroy
95
+ */
96
+ dispose(): void;
97
+ }
@@ -0,0 +1,322 @@
1
+ /**
2
+ * Bracketed Paste Mode Handler
3
+ *
4
+ * Implements industry-standard bracketed paste detection for reliable paste handling
5
+ * across all terminal types (SSH, tmux, iTerm2, etc.)
6
+ *
7
+ * Bracketed paste mode sends special escape sequences:
8
+ * - Start: \x1b[200~ (ESC [200~)
9
+ * - End: \x1b[201~ (ESC [201~)
10
+ *
11
+ * This handler implements a state machine that:
12
+ * 1. Accumulates partial escape sequences across multiple input events
13
+ * 2. Handles timeout/recovery if end marker never arrives
14
+ * 3. Sanitizes escape sequences from pasted content (security)
15
+ * 4. Falls back to simple batched detection if not supported
16
+ */
17
+ export class BracketedPasteHandler {
18
+ // State machine states
19
+ state = 'idle';
20
+ // Content accumulation buffer
21
+ buffer = '';
22
+ // Escape sequence accumulation buffer (for partial sequences)
23
+ escapeBuffer = '';
24
+ // Timeout for paste accumulation (30 seconds max)
25
+ timeoutHandle = null;
26
+ PASTE_TIMEOUT_MS = 30000;
27
+ // Bracketed paste markers
28
+ START_MARKER = '\x1b[200~';
29
+ END_MARKER = '\x1b[201~';
30
+ // Maximum paste size (100MB hard limit for security)
31
+ MAX_PASTE_SIZE = 100 * 1024 * 1024;
32
+ // Statistics
33
+ pasteCount = 0;
34
+ /**
35
+ * Handle incoming input character(s)
36
+ * Returns detection result indicating if paste is complete, accumulating, or normal input
37
+ */
38
+ handleInput(inputChar) {
39
+ // BUG FIX: Check for paste size limit (security)
40
+ // Return accumulated content instead of discarding it
41
+ if (this.buffer.length + inputChar.length > this.MAX_PASTE_SIZE) {
42
+ // Paste too large - return what we have so far
43
+ const accumulatedContent = this.buffer;
44
+ this.reset();
45
+ // If we accumulated meaningful content, return it as a paste
46
+ if (accumulatedContent.length > 0) {
47
+ this.pasteCount++;
48
+ return {
49
+ isPaste: true,
50
+ content: this.sanitizeContent(accumulatedContent),
51
+ isAccumulating: false,
52
+ };
53
+ }
54
+ // Otherwise just return empty (nothing accumulated yet)
55
+ return {
56
+ isPaste: false,
57
+ content: inputChar, // Return current input at least
58
+ isAccumulating: false,
59
+ };
60
+ }
61
+ // Handle idle state - looking for paste start
62
+ if (this.state === 'idle') {
63
+ return this.handleIdleState(inputChar);
64
+ }
65
+ // Handle accumulating state - collecting paste content
66
+ if (this.state === 'accumulating') {
67
+ return this.handleAccumulatingState(inputChar);
68
+ }
69
+ // Should never reach here
70
+ return {
71
+ isPaste: false,
72
+ content: inputChar,
73
+ isAccumulating: false,
74
+ };
75
+ }
76
+ /**
77
+ * Handle idle state - detect paste start marker
78
+ */
79
+ handleIdleState(inputChar) {
80
+ // Accumulate input for escape sequence detection
81
+ this.escapeBuffer += inputChar;
82
+ // BUG FIX: Prevent escapeBuffer overflow - if it grows beyond reasonable escape sequence size,
83
+ // treat accumulated content as normal input (safety limit: 32 bytes, escape sequences are ~6 bytes)
84
+ const MAX_ESCAPE_BUFFER_SIZE = 32;
85
+ if (this.escapeBuffer.length > MAX_ESCAPE_BUFFER_SIZE) {
86
+ const content = this.escapeBuffer;
87
+ this.escapeBuffer = '';
88
+ return {
89
+ isPaste: false,
90
+ content: this.sanitizeContent(content, true),
91
+ isAccumulating: false,
92
+ };
93
+ }
94
+ // Check for complete start marker
95
+ if (this.escapeBuffer.includes(this.START_MARKER)) {
96
+ // Found complete start marker
97
+ const startIdx = this.escapeBuffer.indexOf(this.START_MARKER);
98
+ // BUG FIX: If there's content before the start marker, return it first
99
+ if (startIdx > 0) {
100
+ const contentBefore = this.escapeBuffer.substring(0, startIdx);
101
+ // Keep the start marker and everything after for next call
102
+ this.escapeBuffer = this.escapeBuffer.substring(startIdx);
103
+ return {
104
+ isPaste: false,
105
+ // BUG FIX: Sanitize with removeLiteralMarkers=true (from escapeBuffer, not real paste)
106
+ content: this.sanitizeContent(contentBefore, true),
107
+ isAccumulating: false,
108
+ };
109
+ }
110
+ // Transition to accumulating state
111
+ this.state = 'accumulating';
112
+ // Extract content after start marker
113
+ this.buffer = this.escapeBuffer.substring(this.START_MARKER.length);
114
+ this.escapeBuffer = '';
115
+ // Set timeout for paste accumulation
116
+ this.startTimeout();
117
+ // BUG FIX: Check if end marker is also in the buffer (single input with full paste)
118
+ // This handles the case where start+content+end arrive in one call
119
+ if (this.buffer.includes(this.END_MARKER)) {
120
+ const endIdx = this.buffer.indexOf(this.END_MARKER);
121
+ const content = this.buffer.substring(0, endIdx);
122
+ // Clear timeout
123
+ this.clearTimeout();
124
+ // Reset state
125
+ this.state = 'idle';
126
+ this.buffer = '';
127
+ this.pasteCount++;
128
+ // Sanitize and return content
129
+ return {
130
+ isPaste: true,
131
+ content: this.sanitizeContent(content),
132
+ isAccumulating: false,
133
+ };
134
+ }
135
+ return {
136
+ isPaste: false,
137
+ content: '',
138
+ isAccumulating: true,
139
+ };
140
+ }
141
+ // Check if we're building toward a start marker (partial match)
142
+ if (this.isPartialMatch(this.escapeBuffer, this.START_MARKER)) {
143
+ // Keep accumulating - might be a partial escape sequence
144
+ return {
145
+ isPaste: false,
146
+ content: '',
147
+ isAccumulating: false,
148
+ };
149
+ }
150
+ // No match - this is normal input
151
+ const content = this.escapeBuffer;
152
+ this.escapeBuffer = '';
153
+ // Return as normal input (not a paste via bracketed paste mode)
154
+ // The caller can decide if it wants to use fallback batched detection
155
+ // BUG FIX: Sanitize with removeLiteralMarkers=true (from escapeBuffer, may have malformed markers)
156
+ return {
157
+ isPaste: false,
158
+ content: this.sanitizeContent(content, true),
159
+ isAccumulating: false,
160
+ };
161
+ }
162
+ /**
163
+ * Handle accumulating state - collect paste content until end marker
164
+ */
165
+ handleAccumulatingState(inputChar) {
166
+ // Accumulate content
167
+ this.buffer += inputChar;
168
+ // Check for end marker
169
+ if (this.buffer.includes(this.END_MARKER)) {
170
+ // Found end marker - paste complete
171
+ const endIdx = this.buffer.indexOf(this.END_MARKER);
172
+ const content = this.buffer.substring(0, endIdx);
173
+ // Clear timeout
174
+ this.clearTimeout();
175
+ // Reset state
176
+ this.state = 'idle';
177
+ this.buffer = '';
178
+ this.pasteCount++;
179
+ // Sanitize and return content
180
+ return {
181
+ isPaste: true,
182
+ content: this.sanitizeContent(content),
183
+ isAccumulating: false,
184
+ };
185
+ }
186
+ // Still accumulating
187
+ return {
188
+ isPaste: false,
189
+ content: '',
190
+ isAccumulating: true,
191
+ };
192
+ }
193
+ /**
194
+ * Check if buffer is a partial match for a target string
195
+ * Used to detect incomplete escape sequences
196
+ */
197
+ isPartialMatch(buffer, target) {
198
+ if (buffer.length === 0 || buffer.length >= target.length) {
199
+ return false;
200
+ }
201
+ // Check if buffer matches the start of target
202
+ return target.startsWith(buffer);
203
+ }
204
+ /**
205
+ * Sanitize pasted content - strip dangerous escape sequences
206
+ * Security: Prevent terminal injection attacks
207
+ *
208
+ * @param content - Content to sanitize
209
+ * @param removeLiteralMarkers - If true, also remove literal [200~ [201~ (for malformed pastes)
210
+ * If false, only remove escape sequences (for proper bracketed pastes)
211
+ */
212
+ sanitizeContent(content, removeLiteralMarkers = false) {
213
+ // Strip all escape sequences except newlines and common printable chars
214
+ // This prevents malicious pastes from executing terminal commands
215
+ let sanitized = content;
216
+ // Remove bracketed paste markers (ONLY escape sequences, not literal text)
217
+ sanitized = sanitized.replace(/\x1b\[200~/g, ''); // Full escape sequence
218
+ sanitized = sanitized.replace(/\x1b\[201~/g, ''); // Full escape sequence
219
+ // BUG FIX: Only remove literal markers for malformed pastes (escapeBuffer content)
220
+ // Do NOT remove from proper bracketed paste content (would corrupt user data like "[200~300]")
221
+ if (removeLiteralMarkers) {
222
+ sanitized = sanitized.replace(/\[200~/g, ''); // Literal text (ESC stripped by terminal)
223
+ sanitized = sanitized.replace(/\[201~/g, ''); // Literal text (ESC stripped by terminal)
224
+ }
225
+ // Remove other control sequences:
226
+ // - OSC (Operating System Command): \x1b] ... \x07
227
+ // - CSI (Control Sequence Introducer): \x1b[ ... (letters)
228
+ // - Other escape codes
229
+ // Remove OSC sequences (e.g., set window title)
230
+ sanitized = sanitized.replace(/\x1b\][\s\S]*?\x07/g, '');
231
+ // Remove CSI sequences (except bracketed paste which we already removed)
232
+ // Match: ESC [ <params> <letter>
233
+ sanitized = sanitized.replace(/\x1b\[[0-9;]*[A-Za-z]/g, '');
234
+ // BUG FIX: Remove other escape codes (ESC followed by single non-alphanumeric char)
235
+ // OLD: /\x1b[^[]]/g - This was matching ESC + any char except '[', eating content!
236
+ // NEW: Only match ESC followed by specific escape chars, not normal text
237
+ sanitized = sanitized.replace(/\x1b[()=>]/g, ''); // G0-G3 charset, keypad modes
238
+ sanitized = sanitized.replace(/\x1b[78]/g, ''); // Save/restore cursor
239
+ sanitized = sanitized.replace(/\x1b[DEHM]/g, ''); // Various control codes
240
+ // Normalize line endings (keep \n, convert \r to \n)
241
+ sanitized = sanitized.replace(/\r\n/g, '\n');
242
+ sanitized = sanitized.replace(/\r/g, '\n');
243
+ return sanitized;
244
+ }
245
+ /**
246
+ * Start timeout for paste accumulation
247
+ * If paste doesn't complete within timeout, reset state
248
+ */
249
+ startTimeout() {
250
+ this.clearTimeout();
251
+ this.timeoutHandle = setTimeout(() => {
252
+ // BUG FIX: Timeout reached - paste took too long or end marker never arrived
253
+ // Don't discard the content! The caller will need to retrieve it.
254
+ // We just reset the state so new input can be processed normally.
255
+ // The accumulated content stays in this.buffer for the caller to retrieve.
256
+ if (this.state === 'accumulating') {
257
+ this.state = 'idle';
258
+ // NOTE: this.buffer is NOT cleared - caller must check and retrieve it
259
+ // This prevents data loss when end marker is missing
260
+ }
261
+ }, this.PASTE_TIMEOUT_MS);
262
+ }
263
+ /**
264
+ * Clear paste accumulation timeout
265
+ */
266
+ clearTimeout() {
267
+ if (this.timeoutHandle) {
268
+ clearTimeout(this.timeoutHandle);
269
+ this.timeoutHandle = null;
270
+ }
271
+ }
272
+ /**
273
+ * Reset handler to initial state
274
+ * Used when component unmounts or on errors
275
+ */
276
+ reset() {
277
+ this.state = 'idle';
278
+ this.buffer = '';
279
+ this.escapeBuffer = '';
280
+ this.clearTimeout();
281
+ }
282
+ /**
283
+ * Check if currently accumulating paste
284
+ */
285
+ isAccumulating() {
286
+ return this.state === 'accumulating';
287
+ }
288
+ /**
289
+ * Get current state (for debugging/testing)
290
+ */
291
+ getState() {
292
+ return this.state;
293
+ }
294
+ /**
295
+ * Get paste statistics (for debugging/telemetry)
296
+ */
297
+ getStats() {
298
+ return {
299
+ pasteCount: this.pasteCount,
300
+ };
301
+ }
302
+ /**
303
+ * BUG FIX: Retrieve and clear orphaned buffer content
304
+ * Use this when state is idle but buffer is not empty (timeout occurred)
305
+ * @returns orphaned buffer content, or empty string if none
306
+ */
307
+ retrieveOrphanedContent() {
308
+ if (this.state === 'idle' && this.buffer.length > 0) {
309
+ const content = this.buffer;
310
+ this.buffer = '';
311
+ return this.sanitizeContent(content);
312
+ }
313
+ return '';
314
+ }
315
+ /**
316
+ * Cleanup on destroy
317
+ */
318
+ dispose() {
319
+ this.reset();
320
+ }
321
+ }
322
+ //# sourceMappingURL=bracketed-paste-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bracketed-paste-handler.js","sourceRoot":"","sources":["../../../src/ui/utils/bracketed-paste-handler.ts"],"names":[],"mappings":"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"}
@@ -45,21 +45,31 @@ function detectChangePatterns(content) {
45
45
  if (!content)
46
46
  return patterns;
47
47
  const lower = content.toLowerCase();
48
- // Function/method changes
49
- if (lower.includes('+function') || lower.includes('+const ') || lower.includes('+export function')) {
48
+ // Function/method changes - check all patterns independently to catch combined changes
49
+ const hasAddedFunctions = lower.includes('+function') || lower.includes('+const ') || lower.includes('+export function');
50
+ const hasRemovedFunctions = lower.includes('-function') || lower.includes('-const ') || lower.includes('-export function');
51
+ if (hasAddedFunctions && hasRemovedFunctions) {
52
+ patterns.push('modified functions');
53
+ }
54
+ else if (hasAddedFunctions) {
50
55
  patterns.push('added functions');
51
56
  }
52
- else if (lower.includes('-function') || lower.includes('-const ') || lower.includes('-export function')) {
57
+ else if (hasRemovedFunctions) {
53
58
  patterns.push('removed functions');
54
59
  }
55
60
  else if (lower.includes('function') || lower.includes('const ')) {
56
61
  patterns.push('updated functions');
57
62
  }
58
- // Import changes
59
- if (lower.includes('+import') || lower.includes('+require')) {
63
+ // Import changes - check independently
64
+ const hasAddedImports = lower.includes('+import') || lower.includes('+require');
65
+ const hasRemovedImports = lower.includes('-import') || lower.includes('-require');
66
+ if (hasAddedImports && hasRemovedImports) {
67
+ patterns.push('reorganized imports');
68
+ }
69
+ else if (hasAddedImports) {
60
70
  patterns.push('added imports');
61
71
  }
62
- else if (lower.includes('-import') || lower.includes('-require')) {
72
+ else if (hasRemovedImports) {
63
73
  patterns.push('removed imports');
64
74
  }
65
75
  // Type/interface changes
@@ -1 +1 @@
1
- {"version":3,"file":"change-summarizer.js","sourceRoot":"","sources":["../../../src/ui/utils/change-summarizer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"change-summarizer.js","sourceRoot":"","sources":["../../../src/ui/utils/change-summarizer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAgB;IAC/C,8CAA8C;IAC9C,IAAI,KAAK,CAAC,SAAS,KAAK,MAAM,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,CACrC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,KAAK,oBAAoB,IAAI,EAAE,CAAC,UAAU,EAAE,OAAO,CACvF,CAAC;IAEF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,8BAA8B;IAC9B,MAAM,QAAQ,GAAgB,IAAI,GAAG,EAAE,CAAC;IAExC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,UAAU,EAAE,MAAM,IAAI,EAAE,CAAC;QAClE,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;QACvD,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,CAAC;IAED,kDAAkD;IAClD,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,UAAU,CAAC;IACzE,CAAC;IAED,wCAAwC;IACxC,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAE1C,uCAAuC;IACvC,MAAM,WAAW,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAE7C,OAAO,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChC,CAAC;AAED;;;;;GAKG;AACH,SAAS,oBAAoB,CAAC,OAAe;IAC3C,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,IAAI,CAAC,OAAO;QAAE,OAAO,QAAQ,CAAC;IAE9B,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAEpC,uFAAuF;IACvF,MAAM,iBAAiB,GAAG,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IACzH,MAAM,mBAAmB,GAAG,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IAE3H,IAAI,iBAAiB,IAAI,mBAAmB,EAAE,CAAC;QAC7C,QAAQ,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IACtC,CAAC;SAAM,IAAI,iBAAiB,EAAE,CAAC;QAC7B,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACnC,CAAC;SAAM,IAAI,mBAAmB,EAAE,CAAC;QAC/B,QAAQ,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACrC,CAAC;SAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClE,QAAQ,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACrC,CAAC;IAED,uCAAuC;IACvC,MAAM,eAAe,GAAG,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAChF,MAAM,iBAAiB,GAAG,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAElF,IAAI,eAAe,IAAI,iBAAiB,EAAE,CAAC;QACzC,QAAQ,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IACvC,CAAC;SAAM,IAAI,eAAe,EAAE,CAAC;QAC3B,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACjC,CAAC;SAAM,IAAI,iBAAiB,EAAE,CAAC;QAC7B,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACnC,CAAC;IAED,yBAAyB;IACzB,IAAI,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1F,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC/B,CAAC;SAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAClE,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACjC,CAAC;IAED,iBAAiB;IACjB,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnF,QAAQ,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IAC3C,CAAC;SAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9D,QAAQ,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IAC1C,CAAC;IAED,gBAAgB;IAChB,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3E,QAAQ,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IACvC,CAAC;IAED,QAAQ;IACR,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QACvF,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC/B,CAAC;SAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAC3F,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACjC,CAAC;IAED,gBAAgB;IAChB,IAAI,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5F,QAAQ,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IACzC,CAAC;IAED,gBAAgB;IAChB,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACjH,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAChC,CAAC;IAED,kBAAkB;IAClB,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QACrH,QAAQ,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IAC3C,CAAC;IAED,gBAAgB;IAChB,IAAI,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9G,QAAQ,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IACzC,CAAC;IAED,WAAW;IACX,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QACpH,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACpC,CAAC;IAED,cAAc;IACd,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QAC3F,QAAQ,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IACxC,CAAC;IAED,cAAc;IACd,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;QACxG,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACnC,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAe,EAAE,QAAgB;IACnE,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IAExB,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;IAE7C,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,WAAW;YACd,IAAI,SAAS,KAAK,CAAC;gBAAE,OAAO,QAAQ,CAAC;YACrC,IAAI,SAAS,GAAG,EAAE;gBAAE,OAAO,GAAG,SAAS,QAAQ,CAAC;YAChD,IAAI,SAAS,GAAG,GAAG;gBAAE,OAAO,GAAG,SAAS,QAAQ,CAAC;YACjD,OAAO,GAAG,SAAS,gBAAgB,CAAC;QAEtC,KAAK,aAAa;YAChB,OAAO,GAAG,SAAS,gBAAgB,CAAC;QAEtC,KAAK,oBAAoB;YACvB,6BAA6B;YAC7B,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACzC,IAAI,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;gBAClC,OAAO,SAAS,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YACrD,CAAC;YACD,qBAAqB;YACrB,MAAM,YAAY,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;YAChE,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;gBACrB,OAAO,GAAG,YAAY,UAAU,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YAChE,CAAC;YACD,OAAO,SAAS,CAAC;QAEnB,KAAK,MAAM;YACT,IAAI,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAC,EAAE,CAAC;gBAChD,OAAO,cAAc,CAAC;YACxB,CAAC;YACD,yBAAyB;YACzB,IAAI,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAClE,OAAO,WAAW,CAAC;YACrB,CAAC;YACD,IAAI,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;gBACnC,OAAO,WAAW,CAAC;YACrB,CAAC;YACD,IAAI,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;gBACjC,OAAO,QAAQ,CAAC;YAClB,CAAC;YACD,IAAI,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC7D,OAAO,QAAQ,CAAC;YAClB,CAAC;YACD,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;gBACnB,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC1E,CAAC;YACD,OAAO,GAAG,SAAS,QAAQ,CAAC;QAE9B,KAAK,QAAQ;YACX,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;YACnD,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACvC,OAAO,GAAG,KAAK,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACpD,CAAC;YACD,OAAO,GAAG,SAAS,UAAU,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAE5D,KAAK,kBAAkB,CAAC;QACxB,KAAK,kBAAkB;YACrB,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;YACvD,OAAO,GAAG,KAAK,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAElD;YACE,IAAI,SAAS,IAAI,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;gBAC1C,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC;YACxB,CAAC;YACD,OAAO,GAAG,SAAS,QAAQ,CAAC;IAChC,CAAC;AACH,CAAC"}
@@ -3,6 +3,11 @@
3
3
  * Groups consecutive tool operations for cleaner UX in quiet mode
4
4
  */
5
5
  import type { ChatEntry } from '../../agent/llm-agent.js';
6
+ /**
7
+ * Clear the parsed arguments cache
8
+ * Useful when chat history is cleared to prevent memory leaks
9
+ */
10
+ export declare function clearToolGroupCache(): void;
6
11
  /**
7
12
  * Represents a group of consecutive tool operations
8
13
  */
@@ -18,7 +23,7 @@ export interface ToolGroup {
18
23
  /** Whether any operation in the group failed */
19
24
  hasError: boolean;
20
25
  /** Type of group (file-based, bash, search, etc) */
21
- groupType: 'file' | 'bash' | 'search' | 'todo' | 'mixed';
26
+ groupType: 'file' | 'bash' | 'search' | 'todo' | 'web' | 'analysis' | 'mixed';
22
27
  }
23
28
  /**
24
29
  * Union type for grouped or individual entries
@@ -50,13 +55,17 @@ export declare function getOperationCounts(group: ToolGroup): {
50
55
  searches: number;
51
56
  bash: number;
52
57
  todos: number;
58
+ web: number;
59
+ analysis: number;
53
60
  other: number;
54
61
  };
55
62
  /**
56
63
  * Get execution duration for a group in milliseconds
64
+ * Returns 0 if timestamps are invalid
57
65
  */
58
66
  export declare function getGroupDuration(group: ToolGroup): number;
59
67
  /**
60
68
  * Format duration in human-readable form
69
+ * Returns "0ms" for invalid durations (NaN, negative, etc.)
61
70
  */
62
71
  export declare function formatDuration(ms: number): string;