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,432 @@
1
+ /**
2
+ * AnimationScheduler - Coordinates animations, spinners, progress bars, and elapsed time
3
+ * Provides frame-based animation updates and smooth transitions
4
+ */
5
+ import { EventEmitter } from 'events';
6
+ import { performance } from 'perf_hooks';
7
+ export class AnimationScheduler extends EventEmitter {
8
+ animations = new Map();
9
+ animationLoop = null;
10
+ targetFPS = 30;
11
+ lastFrameTime = 0;
12
+ frameInterval;
13
+ isRunning = false;
14
+ // Predefined easing functions
15
+ static Easing = {
16
+ linear: (t) => t,
17
+ easeInQuad: (t) => t * t,
18
+ easeOutQuad: (t) => t * (2 - t),
19
+ easeInOutQuad: (t) => (t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t),
20
+ easeInCubic: (t) => t * t * t,
21
+ easeOutCubic: (t) => --t * t * t + 1,
22
+ easeInOutCubic: (t) => t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1,
23
+ easeOutElastic: (t) => {
24
+ const p = 0.3;
25
+ return Math.pow(2, -10 * t) * Math.sin((t - p / 4) * (2 * Math.PI) / p) + 1;
26
+ },
27
+ };
28
+ // Predefined spinner frames
29
+ static SpinnerFrames = {
30
+ dots: ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'],
31
+ dots2: ['⣾', '⣽', '⣻', '⢿', '⡿', '⣟', '⣯', '⣷'],
32
+ dots3: ['⠋', '⠙', '⠚', '⠞', '⠖', '⠦', '⠴', '⠲', '⠳', '⠓'],
33
+ line: ['-', '\\', '|', '/'],
34
+ pipe: ['┤', '┘', '┴', '└', '├', '┌', '┬', '┐'],
35
+ simpleDots: ['. ', '.. ', '...', ' '],
36
+ simpleDotsScrolling: ['. ', '.. ', '...', ' ..', ' .', ' '],
37
+ star: ['✶', '✸', '✹', '✺', '✹', '✷'],
38
+ hamburger: ['☱', '☲', '☴'],
39
+ growVertical: ['▁', '▃', '▄', '▅', '▆', '▇', '▆', '▅', '▄', '▃'],
40
+ growHorizontal: ['▏', '▎', '▍', '▌', '▋', '▊', '▉', '▊', '▋', '▌', '▍', '▎'],
41
+ balloon: [' ', '.', 'o', 'O', '@', '*', ' '],
42
+ noise: ['▓', '▒', '░'],
43
+ bounce: ['⠁', '⠂', '⠄', '⠂'],
44
+ boxBounce: ['▖', '▘', '▝', '▗'],
45
+ circle: ['◜', '◠', '◝', '◞', '◡', '◟'],
46
+ arc: ['◜', '◠', '◝', '◞', '◡', '◟'],
47
+ arrow: ['←', '↖', '↑', '↗', '→', '↘', '↓', '↙'],
48
+ bouncingBar: [
49
+ '[ ]',
50
+ '[= ]',
51
+ '[== ]',
52
+ '[=== ]',
53
+ '[ ===]',
54
+ '[ ==]',
55
+ '[ =]',
56
+ '[ ]',
57
+ '[ =]',
58
+ '[ ==]',
59
+ '[ ===]',
60
+ '[====]',
61
+ '[=== ]',
62
+ '[== ]',
63
+ '[= ]',
64
+ ],
65
+ };
66
+ constructor(targetFPS = 30) {
67
+ super();
68
+ this.targetFPS = targetFPS;
69
+ this.frameInterval = 1000 / targetFPS;
70
+ }
71
+ /**
72
+ * Create and register a spinner animation
73
+ */
74
+ createSpinner(id, message, frames = AnimationScheduler.SpinnerFrames.dots) {
75
+ const animation = {
76
+ id,
77
+ type: 'spinner',
78
+ startTime: performance.now(),
79
+ fps: 10, // Spinners typically run at 10 FPS
80
+ frameCount: frames.length,
81
+ currentFrame: 0,
82
+ data: {
83
+ frames,
84
+ message,
85
+ },
86
+ };
87
+ this.register(animation);
88
+ return animation;
89
+ }
90
+ /**
91
+ * Create and register a progress animation
92
+ */
93
+ createProgress(id, current, total, duration = 500) {
94
+ const animation = {
95
+ id,
96
+ type: 'progress',
97
+ startTime: performance.now(),
98
+ duration,
99
+ fps: 60, // Smooth progress animations at 60 FPS
100
+ frameCount: Math.ceil((duration / 1000) * 60),
101
+ currentFrame: 0,
102
+ data: {
103
+ current,
104
+ target: current,
105
+ total,
106
+ },
107
+ easing: AnimationScheduler.Easing.easeOutQuad,
108
+ };
109
+ this.register(animation);
110
+ return animation;
111
+ }
112
+ /**
113
+ * Update progress animation target
114
+ */
115
+ updateProgress(id, newTarget) {
116
+ const animation = this.animations.get(id);
117
+ if (!animation || animation.type !== 'progress')
118
+ return;
119
+ animation.data.current = this.getCurrentProgressValue(animation);
120
+ animation.data.target = newTarget;
121
+ animation.startTime = performance.now();
122
+ animation.currentFrame = 0;
123
+ }
124
+ /**
125
+ * Create and register an elapsed time animation
126
+ */
127
+ createElapsed(id, startTime = Date.now()) {
128
+ const animation = {
129
+ id,
130
+ type: 'elapsed',
131
+ startTime: performance.now(),
132
+ fps: 1, // Update once per second
133
+ frameCount: Infinity,
134
+ currentFrame: 0,
135
+ data: {
136
+ startTime,
137
+ format: this.formatElapsedTime,
138
+ },
139
+ };
140
+ this.register(animation);
141
+ return animation;
142
+ }
143
+ /**
144
+ * Create and register a transition animation
145
+ */
146
+ createTransition(id, from, to, property, duration = 300, easing) {
147
+ const animation = {
148
+ id,
149
+ type: 'transition',
150
+ startTime: performance.now(),
151
+ duration,
152
+ fps: 60,
153
+ frameCount: Math.ceil((duration / 1000) * 60),
154
+ currentFrame: 0,
155
+ data: {
156
+ from,
157
+ to,
158
+ property,
159
+ },
160
+ easing: easing || AnimationScheduler.Easing.easeInOutQuad,
161
+ };
162
+ this.register(animation);
163
+ return animation;
164
+ }
165
+ /**
166
+ * Register an animation
167
+ */
168
+ register(animation) {
169
+ this.animations.set(animation.id, animation);
170
+ // Start the animation loop if not running
171
+ if (!this.isRunning && this.animations.size > 0) {
172
+ this.start();
173
+ }
174
+ this.emit('animation:registered', animation);
175
+ }
176
+ /**
177
+ * Unregister an animation
178
+ */
179
+ unregister(id) {
180
+ const animation = this.animations.get(id);
181
+ if (animation) {
182
+ this.animations.delete(id);
183
+ this.emit('animation:unregistered', animation);
184
+ // Stop the loop if no animations remain
185
+ if (this.animations.size === 0) {
186
+ this.stop();
187
+ }
188
+ }
189
+ }
190
+ /**
191
+ * Start the animation loop
192
+ */
193
+ start() {
194
+ if (this.isRunning)
195
+ return;
196
+ this.isRunning = true;
197
+ this.lastFrameTime = performance.now();
198
+ this.animationLoop = setInterval(() => this.tick(), this.frameInterval);
199
+ this.emit('scheduler:start');
200
+ }
201
+ /**
202
+ * Stop the animation loop
203
+ */
204
+ stop() {
205
+ if (!this.isRunning)
206
+ return;
207
+ if (this.animationLoop) {
208
+ clearInterval(this.animationLoop);
209
+ this.animationLoop = null;
210
+ }
211
+ this.isRunning = false;
212
+ this.emit('scheduler:stop');
213
+ }
214
+ /**
215
+ * Main animation tick
216
+ */
217
+ tick() {
218
+ const now = performance.now();
219
+ const deltaTime = now - this.lastFrameTime;
220
+ // Process each animation
221
+ for (const [, animation] of this.animations) {
222
+ // Check if animation should update based on its FPS
223
+ const animationInterval = 1000 / animation.fps;
224
+ const elapsedTime = now - animation.startTime;
225
+ const expectedFrame = Math.floor(elapsedTime / animationInterval);
226
+ if (expectedFrame > animation.currentFrame) {
227
+ animation.currentFrame = expectedFrame;
228
+ // Check if animation is complete
229
+ if (animation.duration &&
230
+ elapsedTime >= animation.duration &&
231
+ animation.frameCount !== Infinity) {
232
+ this.completeAnimation(animation);
233
+ continue;
234
+ }
235
+ // Update animation
236
+ this.updateAnimation(animation, elapsedTime);
237
+ // Call frame callback
238
+ if (animation.onFrame) {
239
+ animation.onFrame(animation);
240
+ }
241
+ this.emit('animation:frame', animation);
242
+ }
243
+ }
244
+ this.lastFrameTime = now;
245
+ this.emit('scheduler:tick', { deltaTime, animationCount: this.animations.size });
246
+ }
247
+ /**
248
+ * Update animation based on type
249
+ */
250
+ updateAnimation(animation, elapsedTime) {
251
+ switch (animation.type) {
252
+ case 'spinner':
253
+ this.updateSpinner(animation);
254
+ break;
255
+ case 'progress':
256
+ this.updateProgressAnimation(animation, elapsedTime);
257
+ break;
258
+ case 'elapsed':
259
+ this.updateElapsed(animation);
260
+ break;
261
+ case 'transition':
262
+ this.updateTransition(animation, elapsedTime);
263
+ break;
264
+ }
265
+ }
266
+ /**
267
+ * Update spinner animation
268
+ */
269
+ updateSpinner(animation) {
270
+ const frameIndex = animation.currentFrame % animation.data.frames.length;
271
+ this.emit('spinner:frame', {
272
+ id: animation.id,
273
+ frame: animation.data.frames[frameIndex],
274
+ message: animation.data.message,
275
+ });
276
+ }
277
+ /**
278
+ * Update progress animation
279
+ */
280
+ updateProgressAnimation(animation, elapsedTime) {
281
+ if (!animation.duration)
282
+ return;
283
+ const progress = Math.min(elapsedTime / animation.duration, 1);
284
+ const easedProgress = animation.easing ? animation.easing(progress) : progress;
285
+ const { current, target, total } = animation.data;
286
+ const newValue = current + (target - current) * easedProgress;
287
+ const percentage = Math.round((newValue / total) * 100);
288
+ this.emit('progress:update', {
289
+ id: animation.id,
290
+ value: newValue,
291
+ percentage,
292
+ total,
293
+ formatted: animation.data.format
294
+ ? animation.data.format(newValue, total)
295
+ : `${percentage}%`,
296
+ });
297
+ }
298
+ /**
299
+ * Update elapsed time animation
300
+ */
301
+ updateElapsed(animation) {
302
+ const elapsed = Date.now() - animation.data.startTime;
303
+ const formatted = animation.data.format
304
+ ? animation.data.format(elapsed)
305
+ : this.formatElapsedTime(elapsed);
306
+ this.emit('elapsed:update', {
307
+ id: animation.id,
308
+ elapsed,
309
+ formatted,
310
+ });
311
+ }
312
+ /**
313
+ * Update transition animation
314
+ */
315
+ updateTransition(animation, elapsedTime) {
316
+ if (!animation.duration)
317
+ return;
318
+ const progress = Math.min(elapsedTime / animation.duration, 1);
319
+ const easedProgress = animation.easing ? animation.easing(progress) : progress;
320
+ const { from, to } = animation.data;
321
+ let value;
322
+ if (typeof from === 'number' && typeof to === 'number') {
323
+ value = from + (to - from) * easedProgress;
324
+ }
325
+ else {
326
+ // For non-numeric values, switch at 50% progress
327
+ value = easedProgress < 0.5 ? from : to;
328
+ }
329
+ this.emit('transition:update', {
330
+ id: animation.id,
331
+ property: animation.data.property,
332
+ value,
333
+ progress: easedProgress,
334
+ });
335
+ }
336
+ /**
337
+ * Complete an animation
338
+ */
339
+ completeAnimation(animation) {
340
+ if (animation.onComplete) {
341
+ animation.onComplete(animation);
342
+ }
343
+ this.emit('animation:complete', animation);
344
+ this.unregister(animation.id);
345
+ }
346
+ /**
347
+ * Get current progress value with easing
348
+ */
349
+ getCurrentProgressValue(animation) {
350
+ const elapsedTime = performance.now() - animation.startTime;
351
+ if (!animation.duration)
352
+ return animation.data.target;
353
+ const progress = Math.min(elapsedTime / animation.duration, 1);
354
+ const easedProgress = animation.easing ? animation.easing(progress) : progress;
355
+ const { current, target } = animation.data;
356
+ return current + (target - current) * easedProgress;
357
+ }
358
+ /**
359
+ * Format elapsed time
360
+ */
361
+ formatElapsedTime(elapsedMs) {
362
+ const seconds = Math.floor(elapsedMs / 1000);
363
+ const minutes = Math.floor(seconds / 60);
364
+ const hours = Math.floor(minutes / 60);
365
+ if (hours > 0) {
366
+ return `${hours}h ${minutes % 60}m ${seconds % 60}s`;
367
+ }
368
+ else if (minutes > 0) {
369
+ return `${minutes}m ${seconds % 60}s`;
370
+ }
371
+ else {
372
+ return `${seconds}s`;
373
+ }
374
+ }
375
+ /**
376
+ * Get animation by ID
377
+ */
378
+ getAnimation(id) {
379
+ return this.animations.get(id);
380
+ }
381
+ /**
382
+ * Get all active animations
383
+ */
384
+ getActiveAnimations() {
385
+ return Array.from(this.animations.values());
386
+ }
387
+ /**
388
+ * Check if scheduler is running
389
+ */
390
+ isActive() {
391
+ return this.isRunning;
392
+ }
393
+ /**
394
+ * Get target FPS
395
+ */
396
+ getTargetFPS() {
397
+ return this.targetFPS;
398
+ }
399
+ /**
400
+ * Set target FPS
401
+ */
402
+ setTargetFPS(fps) {
403
+ this.targetFPS = fps;
404
+ this.frameInterval = 1000 / fps;
405
+ // Restart the loop with new interval if running
406
+ if (this.isRunning) {
407
+ this.stop();
408
+ this.start();
409
+ }
410
+ }
411
+ /**
412
+ * Clear all animations
413
+ */
414
+ clearAll() {
415
+ for (const animation of this.animations.values()) {
416
+ if (animation.onComplete) {
417
+ animation.onComplete(animation);
418
+ }
419
+ }
420
+ this.animations.clear();
421
+ this.stop();
422
+ this.emit('scheduler:cleared');
423
+ }
424
+ /**
425
+ * Dispose of the scheduler
426
+ */
427
+ dispose() {
428
+ this.clearAll();
429
+ this.removeAllListeners();
430
+ }
431
+ }
432
+ //# sourceMappingURL=AnimationScheduler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnimationScheduler.js","sourceRoot":"","sources":["../../../src/ui/animation/AnimationScheduler.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,11 @@
1
+ /**
2
+ * Display - Simplified UI facade that routes all output through UnifiedUIRenderer
3
+ *
4
+ * This class now serves as a compatibility layer, providing the same API
5
+ * but delegating all actual rendering to UnifiedUIRenderer.
6
+ */
1
7
  import type { ProviderUsage } from '../core/types.js';
2
- import { UnifiedUIRenderer, type RendererEventType } from './UnifiedUIRenderer.js';
8
+ import { UnifiedUIRenderer } from './UnifiedUIRenderer.js';
3
9
  type OutputStream = NodeJS.WritableStream & {
4
10
  columns?: number;
5
11
  rows?: number;
@@ -11,50 +17,198 @@ export interface DisplayMessageMetadata {
11
17
  usage?: ProviderUsage | null;
12
18
  contextWindowTokens?: number | null;
13
19
  wasStreamed?: boolean;
20
+ suppressDisplay?: boolean;
14
21
  }
22
+ interface StatusLineContextInfo {
23
+ percentage?: number;
24
+ tokens?: number;
25
+ sessionElapsedMs?: number;
26
+ }
27
+ type ActionStatus = 'pending' | 'success' | 'error' | 'info' | 'warning';
28
+ interface OutputInterceptor {
29
+ beforeWrite?: () => void;
30
+ afterWrite?: (content?: string) => void;
31
+ }
32
+ type CommandPaletteTone = 'info' | 'warn' | 'success' | 'muted';
33
+ interface CommandPaletteItem {
34
+ command: string;
35
+ description: string;
36
+ category?: string | null;
37
+ tone?: CommandPaletteTone;
38
+ }
39
+ /**
40
+ * Display class - now a thin wrapper around UnifiedUIRenderer
41
+ *
42
+ * Provides backward-compatible API while routing all output through the renderer.
43
+ */
15
44
  export declare class Display {
16
- private renderer;
17
45
  private readonly outputStream;
46
+ private readonly errorStream;
47
+ private renderer;
48
+ private readonly outputInterceptors;
18
49
  private inlinePanelHandler;
19
- private thinkingStart;
20
- private lastToolResult;
21
- private activeSpinner;
22
- constructor(stream?: OutputStream, _errorStream?: OutputStream);
50
+ constructor(stream?: OutputStream, errorStream?: OutputStream);
23
51
  setRenderer(renderer: UnifiedUIRenderer | null): void;
52
+ hasRenderer(): boolean;
24
53
  setInlinePanelHandler(handler: ((content: string) => boolean) | null): void;
25
- emit(type: RendererEventType, content: string, options?: {
26
- compact?: boolean;
27
- }): void;
54
+ private maybeHandleInlinePanel;
55
+ private enqueueEvent;
56
+ registerOutputInterceptor(interceptor: OutputInterceptor): () => void;
57
+ private notifyBeforeOutput;
58
+ private notifyAfterOutput;
59
+ /**
60
+ * Write raw content directly
61
+ */
62
+ writeRaw(content: string): void;
63
+ /**
64
+ * Stream chunk (for streaming responses)
65
+ */
28
66
  stream(chunk: string): void;
29
- parallelAgentStatus(content: string): void;
67
+ /**
68
+ * Backward-compatible alias
69
+ */
70
+ writeStreamChunk(chunk: string): void;
71
+ /**
72
+ * Get the output stream for direct access
73
+ */
74
+ getOutputStream(): OutputStream;
75
+ /**
76
+ * Show thinking indicator
77
+ * NO-OP: Don't emit events during SSE streaming.
78
+ * The animated spinner in the status line shows thinking state.
79
+ */
80
+ showThinking(_message?: string): void;
81
+ /**
82
+ * Update thinking indicator (status line only, not scrollback)
83
+ * This is called frequently during streaming to show progress snippets.
84
+ * The actual content will be rendered as a complete block later.
85
+ */
86
+ updateThinking(_message: string): void;
87
+ /**
88
+ * Stop thinking (no-op - renderer handles state)
89
+ */
90
+ stopThinking(_addNewLine?: boolean): void;
91
+ /**
92
+ * Show assistant message
93
+ */
30
94
  showAssistantMessage(content: string, metadata?: DisplayMessageMetadata): void;
95
+ /**
96
+ * Show narrative (thought)
97
+ */
31
98
  showNarrative(content: string): void;
99
+ /**
100
+ * Show action
101
+ */
102
+ showAction(text: string, status?: ActionStatus): void;
103
+ /**
104
+ * Show sub-action
105
+ */
106
+ showSubAction(text: string, status?: ActionStatus): void;
107
+ /**
108
+ * Show message
109
+ */
110
+ showMessage(content: string, role?: 'assistant' | 'system'): void;
111
+ /**
112
+ * Show system message
113
+ */
32
114
  showSystemMessage(content: string): void;
33
- showError(message: string, error?: unknown): void;
34
- showWarning(message: string): void;
35
- showInfo(message: string): void;
36
- showSuccess(message: string): void;
115
+ /**
116
+ * Show test event (renders in unified UI "test" lane)
117
+ */
37
118
  showTestEvent(content: string): void;
38
- showThinking(message?: string): void;
39
- updateThinking(message: string): void;
40
- stopThinking(addNewline?: boolean): void;
41
- private clearActiveSpinner;
42
- isSpinnerActive(): boolean;
43
- getThinkingElapsedMs(): number | null;
119
+ /**
120
+ * Show an inline panel; in non-overlay mode this simply writes to output.
121
+ */
44
122
  showInlinePanel(content: string | string[]): void;
45
123
  clearInlinePanel(): void;
124
+ /**
125
+ * Capture a single line of user input without logging it to scrollback.
126
+ * Uses the unified renderer when available, with a readline fallback.
127
+ */
46
128
  captureUserInput(options?: {
47
129
  allowEmpty?: boolean;
48
130
  trim?: boolean;
49
131
  resetBuffer?: boolean;
50
132
  }): Promise<string>;
51
- rememberToolResult(content: string, summary?: string): void;
52
- expandLastToolResult(): void;
53
- showStatusLine(status: string, elapsedMs?: number): void;
133
+ /**
134
+ * Show error
135
+ */
136
+ showError(message: string, error?: unknown): void;
137
+ /**
138
+ * Show warning
139
+ */
140
+ showWarning(message: string): void;
141
+ /**
142
+ * Show info
143
+ */
144
+ showInfo(message: string): void;
145
+ /**
146
+ * Show success
147
+ */
148
+ showSuccess(message: string): void;
149
+ /**
150
+ * Show progress badge
151
+ */
152
+ showProgressBadge(label: string, current: number, total: number): void;
153
+ /**
154
+ * Show status line
155
+ */
156
+ showStatusLine(status: string, elapsedMs?: number, _context?: StatusLineContextInfo): void;
157
+ /**
158
+ * Show command palette
159
+ */
160
+ showCommandPalette(commands: CommandPaletteItem[], options?: {
161
+ title?: string;
162
+ intro?: string;
163
+ }): void;
164
+ /**
165
+ * Show planning step
166
+ */
167
+ showPlanningStep(step: string, index: number, total: number): void;
168
+ /**
169
+ * Show thinking block
170
+ */
171
+ showThinkingBlock(content: string, durationMs?: number): void;
172
+ /**
173
+ * Clear screen
174
+ */
54
175
  clear(): void;
55
- registerOutputInterceptor(_interceptor: unknown): () => void;
56
- private maybeHandleInlinePanel;
176
+ /**
177
+ * Update streaming status (routes to renderer)
178
+ */
179
+ updateStreamingStatus(status: string | null): void;
180
+ /**
181
+ * Clear streaming status
182
+ */
183
+ clearStreamingStatus(): void;
184
+ /**
185
+ * Check if streaming status is visible
186
+ */
187
+ isStreamingStatusVisible(): boolean;
188
+ parallelAgentStatus(content: string): void;
189
+ private getColumnWidth;
190
+ private formatErrorDetails;
57
191
  private formatElapsed;
192
+ private buildChatBox;
193
+ private resolveMessageWidth;
194
+ private formatTelemetryLine;
195
+ private buildClaudeStyleThought;
196
+ private formatElapsedTime;
197
+ private buildCommandPalette;
198
+ private groupPaletteCommands;
199
+ private computeCommandColumnWidth;
200
+ private formatPaletteCategory;
201
+ private colorizePaletteText;
202
+ private wrapWithPrefix;
203
+ private buildWrappedSubActionLines;
204
+ private buildSubActionPrefixes;
205
+ private resolveStatusColor;
206
+ private formatActionIcon;
207
+ private wrapForRenderer;
208
+ private wrapLine;
209
+ private chunkWord;
210
+ private visibleLength;
211
+ private stripAnsi;
58
212
  }
59
213
  export declare const display: Display;
60
214
  export {};