erosolar-cli 2.1.172 → 2.1.173

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 +1 -1
  2. package/agents/erosolar-code.rules.json +2 -2
  3. package/agents/general.rules.json +21 -3
  4. package/dist/capabilities/askUserCapability.js +1 -1
  5. package/dist/capabilities/askUserCapability.js.map +1 -1
  6. package/dist/capabilities/statusCapability.js +2 -2
  7. package/dist/capabilities/statusCapability.js.map +1 -1
  8. package/dist/codex/capabilities/codexCoreCapability.d.ts +6 -0
  9. package/dist/codex/capabilities/codexCoreCapability.d.ts.map +1 -0
  10. package/dist/codex/capabilities/codexCoreCapability.js +516 -0
  11. package/dist/codex/capabilities/codexCoreCapability.js.map +1 -0
  12. package/dist/codex/fs.d.ts +4 -0
  13. package/dist/codex/fs.d.ts.map +1 -0
  14. package/dist/codex/fs.js +25 -0
  15. package/dist/codex/fs.js.map +1 -0
  16. package/dist/codex/persistence/planStore.d.ts +4 -0
  17. package/dist/codex/persistence/planStore.d.ts.map +1 -0
  18. package/dist/codex/persistence/planStore.js +59 -0
  19. package/dist/codex/persistence/planStore.js.map +1 -0
  20. package/dist/codex/pluginAllowlist.d.ts +4 -0
  21. package/dist/codex/pluginAllowlist.d.ts.map +1 -0
  22. package/dist/codex/pluginAllowlist.js +14 -0
  23. package/dist/codex/pluginAllowlist.js.map +1 -0
  24. package/dist/codex/types.d.ts +21 -0
  25. package/dist/codex/types.d.ts.map +1 -0
  26. package/dist/codex/types.js +62 -0
  27. package/dist/codex/types.js.map +1 -0
  28. package/dist/contracts/agent-schemas.json +5 -5
  29. package/dist/core/agent.d.ts +83 -24
  30. package/dist/core/agent.d.ts.map +1 -1
  31. package/dist/core/agent.js +499 -248
  32. package/dist/core/agent.js.map +1 -1
  33. package/dist/core/preferences.d.ts +1 -0
  34. package/dist/core/preferences.d.ts.map +1 -1
  35. package/dist/core/preferences.js +8 -1
  36. package/dist/core/preferences.js.map +1 -1
  37. package/dist/core/reliabilityPrompt.d.ts +9 -0
  38. package/dist/core/reliabilityPrompt.d.ts.map +1 -0
  39. package/dist/core/reliabilityPrompt.js +31 -0
  40. package/dist/core/reliabilityPrompt.js.map +1 -0
  41. package/dist/core/schemaValidator.js +3 -3
  42. package/dist/core/schemaValidator.js.map +1 -1
  43. package/dist/core/toolPreconditions.d.ts +0 -11
  44. package/dist/core/toolPreconditions.d.ts.map +1 -1
  45. package/dist/core/toolPreconditions.js +33 -164
  46. package/dist/core/toolPreconditions.js.map +1 -1
  47. package/dist/core/toolRuntime.d.ts.map +1 -1
  48. package/dist/core/toolRuntime.js +9 -114
  49. package/dist/core/toolRuntime.js.map +1 -1
  50. package/dist/core/updateChecker.d.ts +61 -1
  51. package/dist/core/updateChecker.d.ts.map +1 -1
  52. package/dist/core/updateChecker.js +147 -3
  53. package/dist/core/updateChecker.js.map +1 -1
  54. package/dist/headless/evalMode.d.ts.map +1 -1
  55. package/dist/headless/evalMode.js +6 -0
  56. package/dist/headless/evalMode.js.map +1 -1
  57. package/dist/headless/headlessApp.d.ts.map +1 -1
  58. package/dist/headless/headlessApp.js +6 -39
  59. package/dist/headless/headlessApp.js.map +1 -1
  60. package/dist/mcp/sseClient.d.ts +4 -1
  61. package/dist/mcp/sseClient.d.ts.map +1 -1
  62. package/dist/mcp/sseClient.js +36 -2
  63. package/dist/mcp/sseClient.js.map +1 -1
  64. package/dist/mcp/stdioClient.d.ts +4 -1
  65. package/dist/mcp/stdioClient.d.ts.map +1 -1
  66. package/dist/mcp/stdioClient.js +41 -1
  67. package/dist/mcp/stdioClient.js.map +1 -1
  68. package/dist/mcp/toolBridge.d.ts +3 -0
  69. package/dist/mcp/toolBridge.d.ts.map +1 -1
  70. package/dist/mcp/toolBridge.js +2 -2
  71. package/dist/mcp/toolBridge.js.map +1 -1
  72. package/dist/mcp/types.d.ts +18 -0
  73. package/dist/mcp/types.d.ts.map +1 -1
  74. package/dist/plugins/tools/nodeDefaults.d.ts.map +1 -1
  75. package/dist/plugins/tools/nodeDefaults.js +0 -2
  76. package/dist/plugins/tools/nodeDefaults.js.map +1 -1
  77. package/dist/providers/openaiResponsesProvider.d.ts.map +1 -1
  78. package/dist/providers/openaiResponsesProvider.js +79 -74
  79. package/dist/providers/openaiResponsesProvider.js.map +1 -1
  80. package/dist/runtime/agentController.d.ts.map +1 -1
  81. package/dist/runtime/agentController.js +6 -3
  82. package/dist/runtime/agentController.js.map +1 -1
  83. package/dist/runtime/agentSession.d.ts +0 -2
  84. package/dist/runtime/agentSession.d.ts.map +1 -1
  85. package/dist/runtime/agentSession.js +2 -2
  86. package/dist/runtime/agentSession.js.map +1 -1
  87. package/dist/shell/interactiveShell.d.ts +25 -18
  88. package/dist/shell/interactiveShell.d.ts.map +1 -1
  89. package/dist/shell/interactiveShell.js +345 -291
  90. package/dist/shell/interactiveShell.js.map +1 -1
  91. package/dist/shell/shellApp.d.ts.map +1 -1
  92. package/dist/shell/shellApp.js +15 -8
  93. package/dist/shell/shellApp.js.map +1 -1
  94. package/dist/shell/systemPrompt.d.ts.map +1 -1
  95. package/dist/shell/systemPrompt.js +4 -15
  96. package/dist/shell/systemPrompt.js.map +1 -1
  97. package/dist/subagents/taskRunner.js +2 -1
  98. package/dist/subagents/taskRunner.js.map +1 -1
  99. package/dist/tools/bashTools.d.ts.map +1 -1
  100. package/dist/tools/bashTools.js +101 -8
  101. package/dist/tools/bashTools.js.map +1 -1
  102. package/dist/tools/diffUtils.d.ts +8 -2
  103. package/dist/tools/diffUtils.d.ts.map +1 -1
  104. package/dist/tools/diffUtils.js +72 -13
  105. package/dist/tools/diffUtils.js.map +1 -1
  106. package/dist/tools/grepTools.d.ts.map +1 -1
  107. package/dist/tools/grepTools.js +10 -2
  108. package/dist/tools/grepTools.js.map +1 -1
  109. package/dist/tools/planningTools.d.ts +0 -10
  110. package/dist/tools/planningTools.d.ts.map +1 -1
  111. package/dist/tools/planningTools.js +0 -16
  112. package/dist/tools/planningTools.js.map +1 -1
  113. package/dist/tools/searchTools.d.ts.map +1 -1
  114. package/dist/tools/searchTools.js +4 -2
  115. package/dist/tools/searchTools.js.map +1 -1
  116. package/dist/ui/PromptController.d.ts +7 -4
  117. package/dist/ui/PromptController.d.ts.map +1 -1
  118. package/dist/ui/PromptController.js +4 -7
  119. package/dist/ui/PromptController.js.map +1 -1
  120. package/dist/ui/ShellUIAdapter.d.ts +286 -28
  121. package/dist/ui/ShellUIAdapter.d.ts.map +1 -1
  122. package/dist/ui/ShellUIAdapter.js +1485 -121
  123. package/dist/ui/ShellUIAdapter.js.map +1 -1
  124. package/dist/ui/UnifiedUIController.d.ts +80 -0
  125. package/dist/ui/UnifiedUIController.d.ts.map +1 -0
  126. package/dist/ui/UnifiedUIController.js +211 -0
  127. package/dist/ui/UnifiedUIController.js.map +1 -0
  128. package/dist/ui/UnifiedUIRenderer.d.ts +102 -46
  129. package/dist/ui/UnifiedUIRenderer.d.ts.map +1 -1
  130. package/dist/ui/UnifiedUIRenderer.js +680 -610
  131. package/dist/ui/UnifiedUIRenderer.js.map +1 -1
  132. package/dist/ui/animatedStatus.d.ts +128 -6
  133. package/dist/ui/animatedStatus.d.ts.map +1 -1
  134. package/dist/ui/animatedStatus.js +383 -50
  135. package/dist/ui/animatedStatus.js.map +1 -1
  136. package/dist/ui/animation/AnimationScheduler.d.ts +192 -0
  137. package/dist/ui/animation/AnimationScheduler.d.ts.map +1 -0
  138. package/dist/ui/animation/AnimationScheduler.js +432 -0
  139. package/dist/ui/animation/AnimationScheduler.js.map +1 -0
  140. package/dist/ui/display.d.ts +179 -25
  141. package/dist/ui/display.d.ts.map +1 -1
  142. package/dist/ui/display.js +678 -96
  143. package/dist/ui/display.js.map +1 -1
  144. package/dist/ui/inPlaceUpdater.d.ts +181 -0
  145. package/dist/ui/inPlaceUpdater.d.ts.map +1 -0
  146. package/dist/ui/inPlaceUpdater.js +515 -0
  147. package/dist/ui/inPlaceUpdater.js.map +1 -0
  148. package/dist/ui/interrupts/InterruptManager.d.ts +142 -0
  149. package/dist/ui/interrupts/InterruptManager.d.ts.map +1 -0
  150. package/dist/ui/interrupts/InterruptManager.js +439 -0
  151. package/dist/ui/interrupts/InterruptManager.js.map +1 -0
  152. package/dist/ui/layout.d.ts +0 -1
  153. package/dist/ui/layout.d.ts.map +1 -1
  154. package/dist/ui/layout.js +0 -12
  155. package/dist/ui/layout.js.map +1 -1
  156. package/dist/ui/orchestration/StatusOrchestrator.d.ts +1 -1
  157. package/dist/ui/orchestration/StatusOrchestrator.js +1 -1
  158. package/dist/ui/orchestration/UIUpdateCoordinator.d.ts +61 -7
  159. package/dist/ui/orchestration/UIUpdateCoordinator.d.ts.map +1 -1
  160. package/dist/ui/orchestration/UIUpdateCoordinator.js +232 -20
  161. package/dist/ui/orchestration/UIUpdateCoordinator.js.map +1 -1
  162. package/dist/ui/shortcutsHelp.d.ts.map +1 -1
  163. package/dist/ui/shortcutsHelp.js +0 -1
  164. package/dist/ui/shortcutsHelp.js.map +1 -1
  165. package/dist/ui/telemetry/ResponseTracker.d.ts +22 -0
  166. package/dist/ui/telemetry/ResponseTracker.d.ts.map +1 -0
  167. package/dist/ui/telemetry/ResponseTracker.js +60 -0
  168. package/dist/ui/telemetry/ResponseTracker.js.map +1 -0
  169. package/dist/ui/telemetry/UITelemetry.d.ts +181 -0
  170. package/dist/ui/telemetry/UITelemetry.d.ts.map +1 -0
  171. package/dist/ui/telemetry/UITelemetry.js +446 -0
  172. package/dist/ui/telemetry/UITelemetry.js.map +1 -0
  173. package/dist/ui/unified/index.d.ts +28 -1
  174. package/dist/ui/unified/index.d.ts.map +1 -1
  175. package/dist/ui/unified/index.js +41 -2
  176. package/dist/ui/unified/index.js.map +1 -1
  177. package/dist/ui/unified/layout.d.ts +12 -0
  178. package/dist/ui/unified/layout.d.ts.map +1 -0
  179. package/dist/ui/unified/layout.js +96 -0
  180. package/dist/ui/unified/layout.js.map +1 -0
  181. package/package.json +1 -2
  182. package/dist/StringUtils.d.ts +0 -8
  183. package/dist/StringUtils.d.ts.map +0 -1
  184. package/dist/StringUtils.js +0 -11
  185. package/dist/StringUtils.js.map +0 -1
  186. package/dist/core/aiFlowSupervisor.d.ts +0 -44
  187. package/dist/core/aiFlowSupervisor.d.ts.map +0 -1
  188. package/dist/core/aiFlowSupervisor.js +0 -299
  189. package/dist/core/aiFlowSupervisor.js.map +0 -1
  190. package/dist/core/cliTestHarness.d.ts +0 -200
  191. package/dist/core/cliTestHarness.d.ts.map +0 -1
  192. package/dist/core/cliTestHarness.js +0 -549
  193. package/dist/core/cliTestHarness.js.map +0 -1
  194. package/dist/core/testUtils.d.ts +0 -121
  195. package/dist/core/testUtils.d.ts.map +0 -1
  196. package/dist/core/testUtils.js +0 -235
  197. package/dist/core/testUtils.js.map +0 -1
  198. package/dist/core/toolValidation.d.ts +0 -116
  199. package/dist/core/toolValidation.d.ts.map +0 -1
  200. package/dist/core/toolValidation.js +0 -282
  201. package/dist/core/toolValidation.js.map +0 -1
  202. package/dist/ui/planOverlay.d.ts +0 -28
  203. package/dist/ui/planOverlay.d.ts.map +0 -1
  204. package/dist/ui/planOverlay.js +0 -156
  205. package/dist/ui/planOverlay.js.map +0 -1
  206. package/dist/ui/streamingFormatter.d.ts +0 -30
  207. package/dist/ui/streamingFormatter.d.ts.map +0 -1
  208. package/dist/ui/streamingFormatter.js +0 -91
  209. package/dist/ui/streamingFormatter.js.map +0 -1
  210. package/dist/utils/errorUtils.d.ts +0 -16
  211. package/dist/utils/errorUtils.d.ts.map +0 -1
  212. package/dist/utils/errorUtils.js +0 -66
  213. package/dist/utils/errorUtils.js.map +0 -1
@@ -0,0 +1,515 @@
1
+ /**
2
+ * InPlaceUpdater - Dynamic in-place terminal updates
3
+ *
4
+ * Enables tool results to update in place without creating new lines.
5
+ * Features:
6
+ * - Cursor management for overwriting previous output
7
+ * - Multi-line update support
8
+ * - Progress bar animations
9
+ * - Streaming content updates
10
+ * - TTY detection and fallback
11
+ */
12
+ import { theme, icons, spinnerFrames, progressChars } from './theme.js';
13
+ import { getTerminalColumns, measure, stripAnsi } from './layout.js';
14
+ // ============================================================================
15
+ // IN-PLACE UPDATER
16
+ // ============================================================================
17
+ export class InPlaceUpdater {
18
+ stream;
19
+ regions = new Map();
20
+ currentSpinnerFrame = 0;
21
+ spinnerInterval = null;
22
+ activeSpinnerId = null;
23
+ isTTY;
24
+ constructor(stream = process.stdout) {
25
+ this.stream = stream;
26
+ this.isTTY = stream.isTTY === true;
27
+ }
28
+ // --------------------------------------------------------------------------
29
+ // CURSOR CONTROL
30
+ // --------------------------------------------------------------------------
31
+ /**
32
+ * Move cursor up N lines
33
+ */
34
+ cursorUp(lines) {
35
+ if (this.isTTY && lines > 0) {
36
+ this.stream.write(`\x1b[${lines}A`);
37
+ }
38
+ }
39
+ /**
40
+ * Move cursor down N lines
41
+ */
42
+ cursorDown(lines) {
43
+ if (this.isTTY && lines > 0) {
44
+ this.stream.write(`\x1b[${lines}B`);
45
+ }
46
+ }
47
+ /**
48
+ * Move cursor to beginning of line
49
+ */
50
+ cursorToLineStart() {
51
+ if (this.isTTY) {
52
+ this.stream.write('\r');
53
+ }
54
+ }
55
+ /**
56
+ * Clear from cursor to end of line
57
+ */
58
+ clearToEndOfLine() {
59
+ if (this.isTTY) {
60
+ this.stream.write('\x1b[K');
61
+ }
62
+ }
63
+ /**
64
+ * Clear entire line
65
+ */
66
+ clearLine() {
67
+ if (this.isTTY) {
68
+ this.stream.write('\r\x1b[K');
69
+ }
70
+ }
71
+ /**
72
+ * Save cursor position
73
+ */
74
+ saveCursor() {
75
+ if (this.isTTY) {
76
+ this.stream.write('\x1b[s');
77
+ }
78
+ }
79
+ /**
80
+ * Restore cursor position
81
+ */
82
+ restoreCursor() {
83
+ if (this.isTTY) {
84
+ this.stream.write('\x1b[u');
85
+ }
86
+ }
87
+ /**
88
+ * Hide cursor
89
+ */
90
+ hideCursor() {
91
+ if (this.isTTY) {
92
+ this.stream.write('\x1b[?25l');
93
+ }
94
+ }
95
+ /**
96
+ * Show cursor
97
+ */
98
+ showCursor() {
99
+ if (this.isTTY) {
100
+ this.stream.write('\x1b[?25h');
101
+ }
102
+ }
103
+ // --------------------------------------------------------------------------
104
+ // IN-PLACE UPDATES
105
+ // --------------------------------------------------------------------------
106
+ /**
107
+ * Create an updateable region
108
+ */
109
+ createRegion(id, initialContent) {
110
+ const content = Array.isArray(initialContent) ? initialContent : [initialContent];
111
+ // Write initial content
112
+ for (const line of content) {
113
+ this.stream.write(`${line}\n`);
114
+ }
115
+ this.regions.set(id, {
116
+ id,
117
+ startLine: 0, // We don't track absolute position, only relative
118
+ lineCount: content.length,
119
+ content,
120
+ lastUpdate: Date.now(),
121
+ });
122
+ }
123
+ /**
124
+ * Update a region in place
125
+ */
126
+ updateRegion(id, newContent) {
127
+ const region = this.regions.get(id);
128
+ if (!region)
129
+ return;
130
+ const content = Array.isArray(newContent) ? newContent : [newContent];
131
+ if (this.isTTY) {
132
+ // Move cursor up to the start of the region
133
+ this.cursorUp(region.lineCount);
134
+ // Write new content, clearing each line
135
+ for (let i = 0; i < Math.max(content.length, region.lineCount); i++) {
136
+ this.clearLine();
137
+ if (i < content.length) {
138
+ this.stream.write(`${content[i]}\n`);
139
+ }
140
+ else {
141
+ this.stream.write('\n'); // Clear extra lines
142
+ }
143
+ }
144
+ // If new content is shorter, we need to move cursor down
145
+ if (content.length < region.lineCount) {
146
+ // We're already at the right position
147
+ }
148
+ }
149
+ else {
150
+ // Non-TTY fallback: just print new content
151
+ for (const line of content) {
152
+ this.stream.write(`${line}\n`);
153
+ }
154
+ }
155
+ // Update region metadata
156
+ region.content = content;
157
+ region.lineCount = content.length;
158
+ region.lastUpdate = Date.now();
159
+ }
160
+ /**
161
+ * Delete a region
162
+ */
163
+ deleteRegion(id) {
164
+ const region = this.regions.get(id);
165
+ if (!region)
166
+ return;
167
+ if (this.isTTY) {
168
+ // Move up and clear all lines
169
+ this.cursorUp(region.lineCount);
170
+ for (let i = 0; i < region.lineCount; i++) {
171
+ this.clearLine();
172
+ if (i < region.lineCount - 1) {
173
+ this.cursorDown(1);
174
+ }
175
+ }
176
+ // Move back up to where the region started
177
+ this.cursorUp(region.lineCount - 1);
178
+ }
179
+ this.regions.delete(id);
180
+ }
181
+ /**
182
+ * Update a single line in place (most common use case)
183
+ */
184
+ updateLine(content) {
185
+ if (this.isTTY) {
186
+ this.cursorToLineStart();
187
+ this.clearToEndOfLine();
188
+ this.stream.write(content);
189
+ }
190
+ else {
191
+ this.stream.write(`${content}\n`);
192
+ }
193
+ }
194
+ /**
195
+ * Finalize a line update (add newline)
196
+ */
197
+ finalizeLine(content) {
198
+ if (content) {
199
+ this.updateLine(content);
200
+ }
201
+ this.stream.write('\n');
202
+ }
203
+ // --------------------------------------------------------------------------
204
+ // PROGRESS BAR
205
+ // --------------------------------------------------------------------------
206
+ /**
207
+ * Create a progress bar string
208
+ */
209
+ formatProgressBar(current, total, options = {}) {
210
+ const { width = 20, showPercentage = true, showCount = false, label, style = 'bar', } = options;
211
+ const percentage = Math.min(100, Math.max(0, Math.round((current / total) * 100)));
212
+ const filled = Math.round((current / total) * width);
213
+ const empty = width - filled;
214
+ let bar;
215
+ switch (style) {
216
+ case 'braille':
217
+ bar = this.formatBrailleBar(current, total, width);
218
+ break;
219
+ case 'dots':
220
+ bar = '●'.repeat(filled) + '○'.repeat(empty);
221
+ break;
222
+ case 'bar':
223
+ default:
224
+ bar = theme.progress.bar(progressChars.filled.repeat(filled)) +
225
+ theme.progress.empty(progressChars.empty.repeat(empty));
226
+ }
227
+ const parts = [];
228
+ if (label) {
229
+ parts.push(theme.ui.muted(label));
230
+ }
231
+ parts.push(`[${bar}]`);
232
+ if (showPercentage) {
233
+ parts.push(theme.progress.percentage(`${percentage}%`));
234
+ }
235
+ if (showCount) {
236
+ parts.push(theme.ui.muted(`(${current}/${total})`));
237
+ }
238
+ return parts.join(' ');
239
+ }
240
+ /**
241
+ * Create a smooth braille-based progress bar
242
+ */
243
+ formatBrailleBar(current, total, width) {
244
+ const ratio = current / total;
245
+ const fullBlocks = Math.floor(ratio * width);
246
+ const remainder = (ratio * width) - fullBlocks;
247
+ // Braille patterns for partial fill (0/8 to 8/8)
248
+ const partials = [' ', '⡀', '⡄', '⡆', '⡇', '⣇', '⣧', '⣷', '⣿'];
249
+ const partialIndex = Math.floor(remainder * 8);
250
+ let bar = '⣿'.repeat(fullBlocks);
251
+ if (fullBlocks < width) {
252
+ bar += partials[partialIndex];
253
+ bar += ' '.repeat(width - fullBlocks - 1);
254
+ }
255
+ return theme.progress.bar(bar);
256
+ }
257
+ /**
258
+ * Update a progress bar in place
259
+ */
260
+ updateProgress(regionId, current, total, options = {}) {
261
+ const bar = this.formatProgressBar(current, total, options);
262
+ this.updateLine(bar);
263
+ }
264
+ // --------------------------------------------------------------------------
265
+ // SPINNER
266
+ // --------------------------------------------------------------------------
267
+ /**
268
+ * Start a spinner
269
+ */
270
+ startSpinner(id, label, options = {}) {
271
+ if (this.spinnerInterval) {
272
+ this.stopSpinner();
273
+ }
274
+ this.activeSpinnerId = id;
275
+ const style = options.style || 'circle';
276
+ const frames = spinnerFrames[style];
277
+ // Initial render
278
+ this.renderSpinner(frames, label);
279
+ // Start animation
280
+ this.spinnerInterval = setInterval(() => {
281
+ this.currentSpinnerFrame = (this.currentSpinnerFrame + 1) % frames.length;
282
+ this.renderSpinner(frames, label);
283
+ }, 80);
284
+ }
285
+ /**
286
+ * Update spinner label
287
+ */
288
+ updateSpinner(label) {
289
+ if (!this.spinnerInterval)
290
+ return;
291
+ // The next frame will pick up the new label
292
+ // For immediate update, we'd need to store the current frames
293
+ }
294
+ /**
295
+ * Stop spinner and show final message
296
+ */
297
+ stopSpinner(finalMessage, success = true) {
298
+ if (this.spinnerInterval) {
299
+ clearInterval(this.spinnerInterval);
300
+ this.spinnerInterval = null;
301
+ }
302
+ if (finalMessage) {
303
+ const icon = success ? theme.success(icons.success) : theme.error(icons.error);
304
+ this.finalizeLine(`${icon} ${finalMessage}`);
305
+ }
306
+ else {
307
+ this.finalizeLine();
308
+ }
309
+ this.activeSpinnerId = null;
310
+ this.currentSpinnerFrame = 0;
311
+ }
312
+ /**
313
+ * Render current spinner frame
314
+ */
315
+ renderSpinner(frames, label) {
316
+ const frame = theme.info(frames[this.currentSpinnerFrame]);
317
+ this.updateLine(`${frame} ${label}`);
318
+ }
319
+ // --------------------------------------------------------------------------
320
+ // STREAMING UPDATES
321
+ // --------------------------------------------------------------------------
322
+ /**
323
+ * Create a streaming update region that shows the last N lines
324
+ */
325
+ createStreamingRegion(id, options = {}) {
326
+ const { maxLines = 5, truncate = true, preserveLastLine = true } = options;
327
+ const lines = [];
328
+ let initialized = false;
329
+ // Create initial empty region
330
+ const emptyLines = Array(maxLines).fill('');
331
+ this.createRegion(id, emptyLines);
332
+ initialized = true;
333
+ // Return updater function
334
+ return (content) => {
335
+ // Add new content (may contain newlines)
336
+ const newLines = content.split('\n');
337
+ for (const line of newLines) {
338
+ if (line || !preserveLastLine) {
339
+ lines.push(line);
340
+ }
341
+ }
342
+ // Keep only last maxLines
343
+ while (lines.length > maxLines) {
344
+ lines.shift();
345
+ }
346
+ // Pad to maxLines for consistent region size
347
+ const displayLines = [...lines];
348
+ while (displayLines.length < maxLines) {
349
+ displayLines.unshift('');
350
+ }
351
+ // Truncate lines if needed
352
+ const termWidth = getTerminalColumns() - 2;
353
+ const truncatedLines = truncate
354
+ ? displayLines.map(l => {
355
+ const visible = measure(l);
356
+ if (visible > termWidth) {
357
+ return `${stripAnsi(l).slice(0, termWidth - 3)}...`;
358
+ }
359
+ return l;
360
+ })
361
+ : displayLines;
362
+ this.updateRegion(id, truncatedLines);
363
+ };
364
+ }
365
+ /**
366
+ * Finalize streaming region with summary
367
+ */
368
+ finalizeStreamingRegion(id, summary) {
369
+ this.deleteRegion(id);
370
+ if (summary) {
371
+ this.stream.write(`${summary}\n`);
372
+ }
373
+ }
374
+ // --------------------------------------------------------------------------
375
+ // COMPOUND DISPLAYS
376
+ // --------------------------------------------------------------------------
377
+ /**
378
+ * Show tool execution with in-place progress
379
+ */
380
+ showToolProgress(toolName, message, progress) {
381
+ const parts = [];
382
+ // Spinner or progress icon
383
+ if (progress) {
384
+ const pct = Math.round((progress.current / progress.total) * 100);
385
+ parts.push(theme.info(`${pct}%`));
386
+ }
387
+ else {
388
+ const frame = spinnerFrames.circle[this.currentSpinnerFrame];
389
+ parts.push(theme.info(frame));
390
+ }
391
+ // Tool name
392
+ parts.push(theme.tool(toolName));
393
+ // Message
394
+ parts.push(message);
395
+ // Progress bar if applicable
396
+ if (progress) {
397
+ const bar = this.formatProgressBar(progress.current, progress.total, {
398
+ width: 15,
399
+ showPercentage: false,
400
+ });
401
+ parts.push(bar);
402
+ }
403
+ this.updateLine(parts.join(' '));
404
+ }
405
+ /**
406
+ * Show file operation progress
407
+ */
408
+ showFileProgress(operation, filePath, progress) {
409
+ const opIcons = {
410
+ read: icons.read,
411
+ write: icons.write,
412
+ edit: icons.edit,
413
+ };
414
+ const shortPath = this.truncatePath(filePath, 40);
415
+ const parts = [
416
+ theme.info(opIcons[operation] || icons.file),
417
+ theme.file.path(shortPath),
418
+ ];
419
+ if (progress) {
420
+ parts.push(this.formatProgressBar(progress.current, progress.total, {
421
+ width: 12,
422
+ showPercentage: true,
423
+ }));
424
+ }
425
+ this.updateLine(parts.join(' '));
426
+ }
427
+ /**
428
+ * Complete file operation with summary
429
+ */
430
+ completeFileOperation(operation, filePath, stats) {
431
+ const shortPath = this.truncatePath(filePath, 40);
432
+ const parts = [
433
+ theme.success(icons.success),
434
+ theme.file.path(shortPath),
435
+ ];
436
+ if (stats) {
437
+ const details = [];
438
+ if (stats.lines !== undefined) {
439
+ details.push(`${stats.lines} lines`);
440
+ }
441
+ if (stats.additions !== undefined && stats.additions > 0) {
442
+ details.push(theme.file.additions(`+${stats.additions}`));
443
+ }
444
+ if (stats.removals !== undefined && stats.removals > 0) {
445
+ details.push(theme.file.removals(`-${stats.removals}`));
446
+ }
447
+ if (details.length > 0) {
448
+ parts.push(theme.ui.muted(`(${details.join(', ')})`));
449
+ }
450
+ }
451
+ this.finalizeLine(parts.join(' '));
452
+ }
453
+ // --------------------------------------------------------------------------
454
+ // UTILITIES
455
+ // --------------------------------------------------------------------------
456
+ truncatePath(path, maxLen) {
457
+ if (path.length <= maxLen)
458
+ return path;
459
+ const parts = path.split('/').filter(Boolean);
460
+ if (parts.length <= 2) {
461
+ return `${path.slice(0, maxLen - 3)}...`;
462
+ }
463
+ const filename = parts[parts.length - 1] || '';
464
+ if (filename.length <= maxLen - 4) {
465
+ return `.../${filename}`;
466
+ }
467
+ return `${filename.slice(0, maxLen - 3)}...`;
468
+ }
469
+ /**
470
+ * Check if TTY is available
471
+ */
472
+ get hasTTY() {
473
+ return this.isTTY;
474
+ }
475
+ /**
476
+ * Cleanup resources
477
+ */
478
+ dispose() {
479
+ this.stopSpinner();
480
+ this.showCursor();
481
+ this.regions.clear();
482
+ }
483
+ }
484
+ // ============================================================================
485
+ // SINGLETON INSTANCE
486
+ // ============================================================================
487
+ export const inPlaceUpdater = new InPlaceUpdater();
488
+ // ============================================================================
489
+ // CONVENIENCE FUNCTIONS
490
+ // ============================================================================
491
+ /**
492
+ * Quick in-place line update
493
+ */
494
+ export function updateInPlace(content) {
495
+ inPlaceUpdater.updateLine(content);
496
+ }
497
+ /**
498
+ * Quick progress bar
499
+ */
500
+ export function showProgress(current, total, label) {
501
+ const bar = inPlaceUpdater.formatProgressBar(current, total, {
502
+ label,
503
+ showPercentage: true,
504
+ width: 25,
505
+ });
506
+ inPlaceUpdater.updateLine(bar);
507
+ }
508
+ /**
509
+ * Finalize progress with result
510
+ */
511
+ export function finishProgress(message, success = true) {
512
+ const icon = success ? theme.success(icons.success) : theme.error(icons.error);
513
+ inPlaceUpdater.finalizeLine(`${icon} ${message}`);
514
+ }
515
+ //# sourceMappingURL=inPlaceUpdater.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inPlaceUpdater.js","sourceRoot":"","sources":["../../src/ui/inPlaceUpdater.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,142 @@
1
+ /**
2
+ * InterruptManager - Manages user interruptions with priority queuing
3
+ * Handles interrupt prioritization, deferred execution, and smooth transitions
4
+ */
5
+ import { EventEmitter } from 'events';
6
+ export declare enum InterruptPriority {
7
+ CRITICAL = 100,// System errors, critical failures
8
+ HIGH = 75,// User cancellation requests, important alerts
9
+ NORMAL = 50,// Standard user input, questions
10
+ LOW = 25,// Hints, suggestions
11
+ BACKGROUND = 0
12
+ }
13
+ export type InterruptType = 'user-cancel' | 'user-input' | 'system-error' | 'confirmation' | 'hint' | 'alert' | 'question' | 'menu-selection';
14
+ export interface InterruptConfig {
15
+ id: string;
16
+ type: InterruptType;
17
+ priority: InterruptPriority;
18
+ message: string;
19
+ metadata?: Record<string, unknown>;
20
+ timestamp: number;
21
+ ttl?: number;
22
+ deferrable?: boolean;
23
+ blocking?: boolean;
24
+ handler?: (interrupt: Interrupt) => void | Promise<void>;
25
+ }
26
+ export interface Interrupt extends InterruptConfig {
27
+ status: 'pending' | 'active' | 'deferred' | 'completed' | 'expired' | 'cancelled';
28
+ activatedAt?: number;
29
+ completedAt?: number;
30
+ deferredCount: number;
31
+ }
32
+ export interface InterruptPolicy {
33
+ maxQueueSize: number;
34
+ maxDeferrals: number;
35
+ defaultTTL: number;
36
+ allowConcurrent: boolean;
37
+ transitionDuration: number;
38
+ }
39
+ export declare class InterruptManager extends EventEmitter {
40
+ private pendingQueue;
41
+ private activeInterrupts;
42
+ private deferredInterrupts;
43
+ private policy;
44
+ private isProcessing;
45
+ private transitionTimer;
46
+ constructor(policy?: Partial<InterruptPolicy>);
47
+ /**
48
+ * Queue a new interrupt
49
+ */
50
+ queue(config: Omit<InterruptConfig, 'id' | 'timestamp'>): string;
51
+ /**
52
+ * Process the interrupt queue
53
+ */
54
+ private processQueue;
55
+ /**
56
+ * Check if interrupt can be activated
57
+ */
58
+ private canActivate;
59
+ /**
60
+ * Activate an interrupt
61
+ */
62
+ private activateInterrupt;
63
+ /**
64
+ * Complete an interrupt
65
+ */
66
+ completeInterrupt(id: string): void;
67
+ /**
68
+ * Cancel an interrupt
69
+ */
70
+ cancelInterrupt(id: string): void;
71
+ /**
72
+ * Defer an interrupt
73
+ */
74
+ private deferInterrupt;
75
+ /**
76
+ * Restore deferred interrupts to queue
77
+ */
78
+ private restoreDeferredInterrupts;
79
+ /**
80
+ * Expire an interrupt
81
+ */
82
+ private expireInterrupt;
83
+ /**
84
+ * Check if interrupt has expired
85
+ */
86
+ private isExpired;
87
+ /**
88
+ * Schedule interrupt expiry
89
+ */
90
+ private scheduleExpiry;
91
+ /**
92
+ * Wait for interrupt completion
93
+ */
94
+ private waitForCompletion;
95
+ /**
96
+ * Handle smooth transitions
97
+ */
98
+ private smoothTransition;
99
+ /**
100
+ * Find insertion index based on priority
101
+ */
102
+ private findInsertIndex;
103
+ /**
104
+ * Prune expired and low-priority interrupts from queue
105
+ */
106
+ private pruneQueue;
107
+ /**
108
+ * Generate unique interrupt ID
109
+ */
110
+ private generateId;
111
+ /**
112
+ * Get interrupt by ID
113
+ */
114
+ getInterrupt(id: string): Interrupt | undefined;
115
+ /**
116
+ * Get all interrupts with a specific status
117
+ */
118
+ getInterruptsByStatus(status: Interrupt['status']): Interrupt[];
119
+ /**
120
+ * Get queue statistics
121
+ */
122
+ getStatistics(): {
123
+ queueLength: number;
124
+ activeCount: number;
125
+ deferredCount: number;
126
+ averagePriority: number;
127
+ oldestTimestamp: number | null;
128
+ };
129
+ /**
130
+ * Clear all interrupts
131
+ */
132
+ clearAll(): void;
133
+ /**
134
+ * Update interrupt policy
135
+ */
136
+ updatePolicy(policy: Partial<InterruptPolicy>): void;
137
+ /**
138
+ * Dispose of the manager
139
+ */
140
+ dispose(): void;
141
+ }
142
+ //# sourceMappingURL=InterruptManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InterruptManager.d.ts","sourceRoot":"","sources":["../../../src/ui/interrupts/InterruptManager.ts"],"names":[],"mappings":"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"}