@kya-os/cli 1.1.0 → 1.2.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 (139) hide show
  1. package/dist/commands/build.d.ts +5 -0
  2. package/dist/commands/build.d.ts.map +1 -0
  3. package/dist/commands/build.js +173 -0
  4. package/dist/commands/build.js.map +1 -0
  5. package/dist/commands/check.d.ts.map +1 -1
  6. package/dist/commands/check.js +9 -31
  7. package/dist/commands/check.js.map +1 -1
  8. package/dist/commands/claim.d.ts +7 -1
  9. package/dist/commands/claim.d.ts.map +1 -1
  10. package/dist/commands/claim.js +196 -44
  11. package/dist/commands/claim.js.map +1 -1
  12. package/dist/commands/demo.d.ts +10 -0
  13. package/dist/commands/demo.d.ts.map +1 -0
  14. package/dist/commands/demo.js +584 -0
  15. package/dist/commands/demo.js.map +1 -0
  16. package/dist/commands/dev.d.ts +5 -0
  17. package/dist/commands/dev.d.ts.map +1 -0
  18. package/dist/commands/dev.js +111 -0
  19. package/dist/commands/dev.js.map +1 -0
  20. package/dist/commands/doctor.d.ts +11 -0
  21. package/dist/commands/doctor.d.ts.map +1 -0
  22. package/dist/commands/doctor.js +530 -0
  23. package/dist/commands/doctor.js.map +1 -0
  24. package/dist/commands/env.d.ts +1 -1
  25. package/dist/commands/env.d.ts.map +1 -1
  26. package/dist/commands/env.js +113 -15
  27. package/dist/commands/env.js.map +1 -1
  28. package/dist/commands/identity.d.ts +14 -0
  29. package/dist/commands/identity.d.ts.map +1 -0
  30. package/dist/commands/identity.js +204 -0
  31. package/dist/commands/identity.js.map +1 -0
  32. package/dist/commands/init.d.ts +6 -2
  33. package/dist/commands/init.d.ts.map +1 -1
  34. package/dist/commands/init.js +86 -670
  35. package/dist/commands/init.js.map +1 -1
  36. package/dist/commands/receipts.d.ts +11 -0
  37. package/dist/commands/receipts.d.ts.map +1 -0
  38. package/dist/commands/receipts.js +179 -0
  39. package/dist/commands/receipts.js.map +1 -0
  40. package/dist/commands/register.d.ts +15 -0
  41. package/dist/commands/register.d.ts.map +1 -0
  42. package/dist/commands/register.js +220 -0
  43. package/dist/commands/register.js.map +1 -0
  44. package/dist/commands/rotate.d.ts +7 -1
  45. package/dist/commands/rotate.d.ts.map +1 -1
  46. package/dist/commands/rotate.js +149 -109
  47. package/dist/commands/rotate.js.map +1 -1
  48. package/dist/commands/start.d.ts +5 -0
  49. package/dist/commands/start.d.ts.map +1 -0
  50. package/dist/commands/start.js +129 -0
  51. package/dist/commands/start.js.map +1 -0
  52. package/dist/commands/status.d.ts +9 -0
  53. package/dist/commands/status.d.ts.map +1 -0
  54. package/dist/commands/status.js +177 -0
  55. package/dist/commands/status.js.map +1 -0
  56. package/dist/commands/verify.d.ts +22 -0
  57. package/dist/commands/verify.d.ts.map +1 -0
  58. package/dist/commands/verify.js +491 -0
  59. package/dist/commands/verify.js.map +1 -0
  60. package/dist/components/claim-experience.d.ts +21 -0
  61. package/dist/components/claim-experience.d.ts.map +1 -0
  62. package/dist/components/claim-experience.js +138 -0
  63. package/dist/components/claim-experience.js.map +1 -0
  64. package/dist/effects/animation-engine.d.ts +173 -0
  65. package/dist/effects/animation-engine.d.ts.map +1 -0
  66. package/dist/effects/animation-engine.js +254 -0
  67. package/dist/effects/animation-engine.js.map +1 -0
  68. package/dist/effects/cli-integration.js +8 -8
  69. package/dist/effects/cli-integration.js.map +1 -1
  70. package/dist/effects/config.d.ts +86 -10
  71. package/dist/effects/config.d.ts.map +1 -1
  72. package/dist/effects/config.js +201 -18
  73. package/dist/effects/config.js.map +1 -1
  74. package/dist/effects/effect-runner.d.ts +69 -0
  75. package/dist/effects/effect-runner.d.ts.map +1 -0
  76. package/dist/effects/effect-runner.js +255 -0
  77. package/dist/effects/effect-runner.js.map +1 -0
  78. package/dist/effects/gradient.d.ts +131 -0
  79. package/dist/effects/gradient.d.ts.map +1 -0
  80. package/dist/effects/gradient.js +236 -0
  81. package/dist/effects/gradient.js.map +1 -0
  82. package/dist/effects/implementations/beams.d.ts +80 -0
  83. package/dist/effects/implementations/beams.d.ts.map +1 -0
  84. package/dist/effects/implementations/beams.js +221 -0
  85. package/dist/effects/implementations/beams.js.map +1 -0
  86. package/dist/effects/implementations/blackhole.d.ts +98 -0
  87. package/dist/effects/implementations/blackhole.d.ts.map +1 -0
  88. package/dist/effects/implementations/blackhole.js +421 -0
  89. package/dist/effects/implementations/blackhole.js.map +1 -0
  90. package/dist/effects/implementations/burn.d.ts +74 -0
  91. package/dist/effects/implementations/burn.d.ts.map +1 -0
  92. package/dist/effects/implementations/burn.js +234 -0
  93. package/dist/effects/implementations/burn.js.map +1 -0
  94. package/dist/effects/implementations/decrypt.d.ts +115 -0
  95. package/dist/effects/implementations/decrypt.d.ts.map +1 -0
  96. package/dist/effects/implementations/decrypt.js +394 -0
  97. package/dist/effects/implementations/decrypt.js.map +1 -0
  98. package/dist/effects/implementations/waves.d.ts +78 -0
  99. package/dist/effects/implementations/waves.d.ts.map +1 -0
  100. package/dist/effects/implementations/waves.js +278 -0
  101. package/dist/effects/implementations/waves.js.map +1 -0
  102. package/dist/effects/index.d.ts +34 -0
  103. package/dist/effects/index.d.ts.map +1 -0
  104. package/dist/effects/index.js +114 -0
  105. package/dist/effects/index.js.map +1 -0
  106. package/dist/effects/motion-engine.d.ts +168 -0
  107. package/dist/effects/motion-engine.d.ts.map +1 -0
  108. package/dist/effects/motion-engine.js +353 -0
  109. package/dist/effects/motion-engine.js.map +1 -0
  110. package/dist/effects/safe-executor.d.ts +55 -0
  111. package/dist/effects/safe-executor.d.ts.map +1 -0
  112. package/dist/effects/safe-executor.js +210 -0
  113. package/dist/effects/safe-executor.js.map +1 -0
  114. package/dist/effects/types.d.ts +199 -0
  115. package/dist/effects/types.d.ts.map +1 -0
  116. package/dist/effects/types.js +80 -0
  117. package/dist/effects/types.js.map +1 -0
  118. package/dist/effects/utils.d.ts +104 -0
  119. package/dist/effects/utils.d.ts.map +1 -0
  120. package/dist/effects/utils.js +280 -0
  121. package/dist/effects/utils.js.map +1 -0
  122. package/dist/index.js +154 -19
  123. package/dist/utils/env-manager.d.ts +6 -7
  124. package/dist/utils/env-manager.d.ts.map +1 -1
  125. package/dist/utils/env-manager.js +52 -40
  126. package/dist/utils/env-manager.js.map +1 -1
  127. package/dist/utils/identity-manager.d.ts +41 -0
  128. package/dist/utils/identity-manager.d.ts.map +1 -0
  129. package/dist/utils/identity-manager.js +159 -0
  130. package/dist/utils/identity-manager.js.map +1 -0
  131. package/dist/utils/kta-api.d.ts +67 -0
  132. package/dist/utils/kta-api.d.ts.map +1 -0
  133. package/dist/utils/kta-api.js +137 -0
  134. package/dist/utils/kta-api.js.map +1 -0
  135. package/package.json +8 -7
  136. package/dist/utils/validation.d.ts +0 -101
  137. package/dist/utils/validation.d.ts.map +0 -1
  138. package/dist/utils/validation.js +0 -109
  139. package/dist/utils/validation.js.map +0 -1
@@ -0,0 +1,353 @@
1
+ /**
2
+ * Motion Path Engine for Terminal Effects
3
+ * Provides sophisticated character movement with paths, waypoints, and bezier curves
4
+ */
5
+ /**
6
+ * Motion path for character movement
7
+ */
8
+ export class Path {
9
+ constructor(id, speed = 1, easingFn) {
10
+ this.waypoints = [];
11
+ this.segments = [];
12
+ this._isLooping = false;
13
+ this._speed = 1;
14
+ /** Current position along the path (0-1) */
15
+ this.progress = 0;
16
+ /** Current segment index */
17
+ this.currentSegmentIndex = 0;
18
+ /** Time spent at current waypoint (for holds) */
19
+ this.holdTimeElapsed = 0;
20
+ /** Total path distance */
21
+ this.totalDistance = 0;
22
+ this.id = id;
23
+ this._speed = speed;
24
+ this._easingFn = easingFn;
25
+ }
26
+ /**
27
+ * Add a waypoint to the path
28
+ */
29
+ newWaypoint(coord, waypointId, bezierControl, holdTime) {
30
+ const waypoint = {
31
+ id: waypointId || `wp_${this.waypoints.length}`,
32
+ coordinate: coord,
33
+ bezierControl,
34
+ holdTime,
35
+ };
36
+ this.waypoints.push(waypoint);
37
+ this.recalculateSegments();
38
+ return waypoint;
39
+ }
40
+ /**
41
+ * Recalculate segments when waypoints change
42
+ */
43
+ recalculateSegments() {
44
+ this.segments = [];
45
+ this.totalDistance = 0;
46
+ for (let i = 0; i < this.waypoints.length - 1; i++) {
47
+ const start = this.waypoints[i];
48
+ const end = this.waypoints[i + 1];
49
+ let distance;
50
+ let curvePoints;
51
+ if (end.bezierControl) {
52
+ // Calculate bezier curve
53
+ curvePoints = this.calculateBezierPoints(start.coordinate, end.bezierControl, end.coordinate, 20 // Resolution
54
+ );
55
+ distance = this.calculatePathDistance(curvePoints);
56
+ }
57
+ else {
58
+ // Simple linear distance
59
+ distance = this.calculateDistance(start.coordinate, end.coordinate);
60
+ }
61
+ const segment = {
62
+ start,
63
+ end,
64
+ distance,
65
+ curvePoints,
66
+ };
67
+ this.segments.push(segment);
68
+ this.totalDistance += distance;
69
+ }
70
+ }
71
+ /**
72
+ * Calculate bezier curve points
73
+ */
74
+ calculateBezierPoints(start, control, end, resolution) {
75
+ const points = [];
76
+ for (let i = 0; i <= resolution; i++) {
77
+ const t = i / resolution;
78
+ const x = Math.round((1 - t) * (1 - t) * start.x +
79
+ 2 * (1 - t) * t * control.x +
80
+ t * t * end.x);
81
+ const y = Math.round((1 - t) * (1 - t) * start.y +
82
+ 2 * (1 - t) * t * control.y +
83
+ t * t * end.y);
84
+ points.push({ x, y });
85
+ }
86
+ return points;
87
+ }
88
+ /**
89
+ * Calculate distance between two coordinates
90
+ */
91
+ calculateDistance(a, b) {
92
+ return Math.sqrt(Math.pow(b.x - a.x, 2) + Math.pow(b.y - a.y, 2));
93
+ }
94
+ /**
95
+ * Calculate total distance along a path of points
96
+ */
97
+ calculatePathDistance(points) {
98
+ let distance = 0;
99
+ for (let i = 0; i < points.length - 1; i++) {
100
+ distance += this.calculateDistance(points[i], points[i + 1]);
101
+ }
102
+ return distance;
103
+ }
104
+ /**
105
+ * Set looping behavior
106
+ */
107
+ setLooping(isLooping) {
108
+ this._isLooping = isLooping;
109
+ }
110
+ /**
111
+ * Set speed
112
+ */
113
+ setSpeed(speed) {
114
+ this._speed = speed;
115
+ }
116
+ /**
117
+ * Get position at current progress
118
+ */
119
+ getCurrentPosition() {
120
+ if (this.waypoints.length === 0) {
121
+ return { x: 0, y: 0 };
122
+ }
123
+ if (this.waypoints.length === 1) {
124
+ return { ...this.waypoints[0].coordinate };
125
+ }
126
+ if (this.currentSegmentIndex >= this.segments.length) {
127
+ return { ...this.waypoints[this.waypoints.length - 1].coordinate };
128
+ }
129
+ const segment = this.segments[this.currentSegmentIndex];
130
+ const segmentProgress = this.getSegmentProgress();
131
+ if (segment.curvePoints) {
132
+ // Bezier curve interpolation
133
+ const pointIndex = Math.floor(segmentProgress * (segment.curvePoints.length - 1));
134
+ const localProgress = (segmentProgress * (segment.curvePoints.length - 1)) % 1;
135
+ if (pointIndex >= segment.curvePoints.length - 1) {
136
+ return { ...segment.curvePoints[segment.curvePoints.length - 1] };
137
+ }
138
+ const p1 = segment.curvePoints[pointIndex];
139
+ const p2 = segment.curvePoints[pointIndex + 1];
140
+ return {
141
+ x: Math.round(p1.x + (p2.x - p1.x) * localProgress),
142
+ y: Math.round(p1.y + (p2.y - p1.y) * localProgress),
143
+ };
144
+ }
145
+ else {
146
+ // Linear interpolation
147
+ const p1 = segment.start.coordinate;
148
+ const p2 = segment.end.coordinate;
149
+ return {
150
+ x: Math.round(p1.x + (p2.x - p1.x) * segmentProgress),
151
+ y: Math.round(p1.y + (p2.y - p1.y) * segmentProgress),
152
+ };
153
+ }
154
+ }
155
+ /**
156
+ * Get progress within current segment (0-1)
157
+ */
158
+ getSegmentProgress() {
159
+ if (this.segments.length === 0)
160
+ return 0;
161
+ let distanceCovered = this.progress * this.totalDistance;
162
+ // Find which segment we're in
163
+ for (let i = 0; i < this.segments.length; i++) {
164
+ if (distanceCovered <= this.segments[i].distance) {
165
+ return distanceCovered / this.segments[i].distance;
166
+ }
167
+ distanceCovered -= this.segments[i].distance;
168
+ }
169
+ return 1;
170
+ }
171
+ /**
172
+ * Update motion progress
173
+ */
174
+ update(deltaTime) {
175
+ if (this.waypoints.length < 2)
176
+ return;
177
+ // Handle waypoint holds
178
+ const currentWaypoint = this.waypoints[Math.min(Math.floor(this.progress * this.waypoints.length), this.waypoints.length - 1)];
179
+ if (currentWaypoint.holdTime && this.holdTimeElapsed < currentWaypoint.holdTime) {
180
+ this.holdTimeElapsed += deltaTime;
181
+ return;
182
+ }
183
+ // Reset hold time when moving to next waypoint
184
+ if (this.holdTimeElapsed > 0) {
185
+ this.holdTimeElapsed = 0;
186
+ }
187
+ // Calculate progress increment
188
+ const distancePerMs = (this._speed * 50) / 1000; // 50 units per second at speed 1
189
+ const progressIncrement = distancePerMs * deltaTime / this.totalDistance;
190
+ this.progress += progressIncrement;
191
+ // Apply easing if configured
192
+ if (this._easingFn) {
193
+ this.progress = this._easingFn(Math.min(this.progress, 1));
194
+ }
195
+ // Handle completion and looping
196
+ if (this.progress >= 1) {
197
+ if (this._isLooping) {
198
+ this.progress = this.progress % 1;
199
+ this.currentSegmentIndex = 0;
200
+ }
201
+ else {
202
+ this.progress = 1;
203
+ this.currentSegmentIndex = this.segments.length - 1;
204
+ }
205
+ }
206
+ else {
207
+ // Update current segment index
208
+ let distanceCovered = this.progress * this.totalDistance;
209
+ for (let i = 0; i < this.segments.length; i++) {
210
+ if (distanceCovered <= this.segments[i].distance) {
211
+ this.currentSegmentIndex = i;
212
+ break;
213
+ }
214
+ distanceCovered -= this.segments[i].distance;
215
+ }
216
+ }
217
+ }
218
+ /**
219
+ * Reset the path
220
+ */
221
+ reset() {
222
+ this.progress = 0;
223
+ this.currentSegmentIndex = 0;
224
+ this.holdTimeElapsed = 0;
225
+ }
226
+ /**
227
+ * Check if path is complete
228
+ */
229
+ isComplete() {
230
+ return !this._isLooping && this.progress >= 1;
231
+ }
232
+ /**
233
+ * Get waypoint count
234
+ */
235
+ getWaypointCount() {
236
+ return this.waypoints.length;
237
+ }
238
+ /**
239
+ * Get total path distance
240
+ */
241
+ getTotalDistance() {
242
+ return this.totalDistance;
243
+ }
244
+ }
245
+ /**
246
+ * Motion event types
247
+ */
248
+ export var MotionEvent;
249
+ (function (MotionEvent) {
250
+ MotionEvent["PATH_COMPLETE"] = "path_complete";
251
+ MotionEvent["PATH_ACTIVATED"] = "path_activated";
252
+ MotionEvent["WAYPOINT_REACHED"] = "waypoint_reached";
253
+ MotionEvent["SEGMENT_ENTERED"] = "segment_entered";
254
+ })(MotionEvent || (MotionEvent = {}));
255
+ /**
256
+ * Character motion manager
257
+ */
258
+ export class CharacterMotion {
259
+ // private _lastWaypointId: string = ""; // Reserved for future use
260
+ constructor(initialPosition) {
261
+ this.paths = new Map();
262
+ this.activePath = null;
263
+ this.lastUpdateTime = 0;
264
+ this.eventHandlers = [];
265
+ this.currentPosition = { ...initialPosition };
266
+ }
267
+ /**
268
+ * Create a new path
269
+ */
270
+ newPath(pathId, speed = 1, easingFn) {
271
+ const path = new Path(pathId, speed, easingFn);
272
+ this.paths.set(pathId, path);
273
+ return path;
274
+ }
275
+ /**
276
+ * Get a path by ID
277
+ */
278
+ queryPath(pathId) {
279
+ return this.paths.get(pathId);
280
+ }
281
+ /**
282
+ * Activate a path
283
+ */
284
+ activatePath(path) {
285
+ if (this.activePath && this.activePath !== path) {
286
+ this.triggerEvent(MotionEvent.PATH_COMPLETE, this.activePath.id);
287
+ }
288
+ this.activePath = path;
289
+ this.lastUpdateTime = Date.now();
290
+ path.reset();
291
+ this.triggerEvent(MotionEvent.PATH_ACTIVATED, path.id);
292
+ }
293
+ /**
294
+ * Set position directly
295
+ */
296
+ setCoordinate(coord) {
297
+ this.currentPosition = { ...coord };
298
+ }
299
+ /**
300
+ * Update motion and get current position
301
+ */
302
+ update() {
303
+ if (!this.activePath) {
304
+ return this.currentPosition;
305
+ }
306
+ const currentTime = Date.now();
307
+ const deltaTime = currentTime - this.lastUpdateTime;
308
+ this.lastUpdateTime = currentTime;
309
+ // Update path progress
310
+ this.activePath.update(deltaTime);
311
+ // Get new position
312
+ const newPosition = this.activePath.getCurrentPosition();
313
+ this.currentPosition = newPosition;
314
+ // Check for path completion
315
+ if (this.activePath.isComplete()) {
316
+ this.triggerEvent(MotionEvent.PATH_COMPLETE, this.activePath.id);
317
+ }
318
+ return this.currentPosition;
319
+ }
320
+ /**
321
+ * Register an event handler
322
+ */
323
+ registerEvent(event, pathId, callback, waypointId) {
324
+ this.eventHandlers.push({ event, pathId, waypointId, callback });
325
+ }
326
+ /**
327
+ * Trigger an event
328
+ */
329
+ triggerEvent(event, pathId, waypointId) {
330
+ for (const handler of this.eventHandlers) {
331
+ if (handler.event === event &&
332
+ handler.pathId === pathId &&
333
+ (!waypointId || handler.waypointId === waypointId)) {
334
+ handler.callback();
335
+ }
336
+ }
337
+ }
338
+ /**
339
+ * Reset all paths
340
+ */
341
+ reset() {
342
+ this.paths.forEach(path => path.reset());
343
+ this.activePath = null;
344
+ this.lastUpdateTime = 0;
345
+ }
346
+ /**
347
+ * Get current position
348
+ */
349
+ getCurrentPosition() {
350
+ return { ...this.currentPosition };
351
+ }
352
+ }
353
+ //# sourceMappingURL=motion-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"motion-engine.js","sourceRoot":"","sources":["../../src/effects/motion-engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Safety wrapper for effect execution with fallback mechanisms
3
+ * Ensures effects never break core CLI functionality
4
+ */
5
+ import { Effect, EffectResult, SafetyConfig, PerformanceMetrics } from "./types.js";
6
+ /**
7
+ * Safe executor for effects with comprehensive error handling
8
+ */
9
+ export declare class SafeEffectExecutor {
10
+ private config;
11
+ private terminalCapabilities?;
12
+ private metrics;
13
+ constructor(config?: Partial<SafetyConfig>);
14
+ /**
15
+ * Execute an effect with safety mechanisms
16
+ */
17
+ execute(effect: Effect, text: string, effectConfig?: any): Promise<EffectResult>;
18
+ /**
19
+ * Execute the effect and collect frames
20
+ */
21
+ private executeEffect;
22
+ /**
23
+ * Execute fallback rendering
24
+ */
25
+ private executeFallback;
26
+ /**
27
+ * Determine if we should use fallback based on environment
28
+ */
29
+ private shouldUseFallback;
30
+ /**
31
+ * Update performance metrics
32
+ */
33
+ private updateMetrics;
34
+ /**
35
+ * Get current performance metrics
36
+ */
37
+ getMetrics(): PerformanceMetrics;
38
+ /**
39
+ * Reset performance metrics
40
+ */
41
+ resetMetrics(): void;
42
+ /**
43
+ * Create a wrapped effect executor for easy usage
44
+ */
45
+ static wrap(effect: Effect, config?: Partial<SafetyConfig>): (text: string, effectConfig?: any) => Promise<EffectResult>;
46
+ }
47
+ /**
48
+ * Global effect executor instance
49
+ */
50
+ export declare const defaultExecutor: SafeEffectExecutor;
51
+ /**
52
+ * Execute an effect safely with default configuration
53
+ */
54
+ export declare function executeSafely(effect: Effect, text: string, effectConfig?: any): Promise<EffectResult>;
55
+ //# sourceMappingURL=safe-executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safe-executor.d.ts","sourceRoot":"","sources":["../../src/effects/safe-executor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,MAAM,EACN,YAAY,EACZ,YAAY,EACZ,kBAAkB,EAEnB,MAAM,YAAY,CAAC;AAgDpB;;GAEG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,oBAAoB,CAAC,CAAuB;IACpD,OAAO,CAAC,OAAO,CAMb;gBAEU,MAAM,GAAE,OAAO,CAAC,YAAY,CAAM;IAI9C;;OAEG;IACG,OAAO,CACX,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,YAAY,GAAE,GAAQ,GACrB,OAAO,CAAC,YAAY,CAAC;IAkDxB;;OAEG;YACW,aAAa;IA8B3B;;OAEG;IACH,OAAO,CAAC,eAAe;IAwBvB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAmBzB;;OAEG;IACH,OAAO,CAAC,aAAa;IAOrB;;OAEG;IACH,UAAU,IAAI,kBAAkB;IAIhC;;OAEG;IACH,YAAY,IAAI,IAAI;IAUpB;;OAEG;IACH,MAAM,CAAC,IAAI,CACT,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GAC7B,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC,YAAY,CAAC;CAO/D;AAED;;GAEG;AACH,eAAO,MAAM,eAAe,oBAA2B,CAAC;AAExD;;GAEG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,YAAY,CAAC,EAAE,GAAG,GACjB,OAAO,CAAC,YAAY,CAAC,CAEvB"}
@@ -0,0 +1,210 @@
1
+ /**
2
+ * Safety wrapper for effect execution with fallback mechanisms
3
+ * Ensures effects never break core CLI functionality
4
+ */
5
+ import { detectTerminalCapabilities } from "./utils.js";
6
+ const DEFAULT_SAFETY_CONFIG = {
7
+ maxExecutionTime: 3000, // 3 seconds
8
+ maxMemoryUsage: 50, // 50MB
9
+ enableMonitoring: true,
10
+ forceFallback: false,
11
+ };
12
+ /**
13
+ * Creates a timeout promise that rejects after specified milliseconds
14
+ */
15
+ function timeout(ms) {
16
+ return new Promise((_, reject) => {
17
+ setTimeout(() => reject(new Error(`Timeout after ${ms}ms`)), ms);
18
+ });
19
+ }
20
+ /**
21
+ * Monitors memory usage during effect execution
22
+ */
23
+ class MemoryMonitor {
24
+ constructor(maxMemoryMB) {
25
+ this.initialMemory = process.memoryUsage().heapUsed;
26
+ this.maxMemory = maxMemoryMB * 1024 * 1024; // Convert MB to bytes
27
+ }
28
+ check() {
29
+ const currentMemory = process.memoryUsage().heapUsed;
30
+ const usedMemory = currentMemory - this.initialMemory;
31
+ if (usedMemory > this.maxMemory) {
32
+ throw new Error(`Memory limit exceeded: ${Math.round(usedMemory / 1024 / 1024)}MB used`);
33
+ }
34
+ }
35
+ getUsage() {
36
+ const currentMemory = process.memoryUsage().heapUsed;
37
+ return (currentMemory - this.initialMemory) / 1024 / 1024; // Return in MB
38
+ }
39
+ }
40
+ /**
41
+ * Safe executor for effects with comprehensive error handling
42
+ */
43
+ export class SafeEffectExecutor {
44
+ constructor(config = {}) {
45
+ this.metrics = {
46
+ frameCount: 0,
47
+ totalDuration: 0,
48
+ averageFrameTime: 0,
49
+ maxFrameTime: 0,
50
+ memoryUsage: 0,
51
+ };
52
+ this.config = { ...DEFAULT_SAFETY_CONFIG, ...config };
53
+ }
54
+ /**
55
+ * Execute an effect with safety mechanisms
56
+ */
57
+ async execute(effect, text, effectConfig = {}) {
58
+ // Check if we should force fallback
59
+ if (this.config.forceFallback || this.shouldUseFallback()) {
60
+ return this.executeFallback(effect, text);
61
+ }
62
+ const memoryMonitor = new MemoryMonitor(this.config.maxMemoryUsage);
63
+ const startTime = Date.now();
64
+ try {
65
+ // Initialize effect
66
+ effect.initialize(text, effectConfig);
67
+ // Execute with timeout protection
68
+ const frames = await Promise.race([
69
+ this.executeEffect(effect, memoryMonitor),
70
+ timeout(this.config.maxExecutionTime).then(() => {
71
+ throw new Error("Effect execution timeout");
72
+ }),
73
+ ]);
74
+ const duration = Date.now() - startTime;
75
+ if (this.config.enableMonitoring) {
76
+ this.updateMetrics(duration, memoryMonitor.getUsage());
77
+ }
78
+ return {
79
+ success: true,
80
+ frames,
81
+ duration,
82
+ };
83
+ }
84
+ catch (error) {
85
+ // Log error for debugging but don't expose to user
86
+ if (process.env.DEBUG) {
87
+ console.error("Effect execution failed:", error);
88
+ }
89
+ // Fall back to plain text
90
+ return this.executeFallback(effect, text, error);
91
+ }
92
+ finally {
93
+ // Always cleanup
94
+ try {
95
+ effect.cleanup();
96
+ }
97
+ catch (cleanupError) {
98
+ // Ignore cleanup errors
99
+ }
100
+ }
101
+ }
102
+ /**
103
+ * Execute the effect and collect frames
104
+ */
105
+ async executeEffect(effect, memoryMonitor) {
106
+ const frames = [];
107
+ const frameStartTimes = [];
108
+ while (!effect.isComplete()) {
109
+ const frameStart = Date.now();
110
+ // Check memory usage
111
+ memoryMonitor.check();
112
+ // Render frame
113
+ const frame = await effect.render();
114
+ frames.push(...frame);
115
+ const frameTime = Date.now() - frameStart;
116
+ frameStartTimes.push(frameTime);
117
+ if (frameTime > this.metrics.maxFrameTime) {
118
+ this.metrics.maxFrameTime = frameTime;
119
+ }
120
+ this.metrics.frameCount++;
121
+ }
122
+ return frames;
123
+ }
124
+ /**
125
+ * Execute fallback rendering
126
+ */
127
+ executeFallback(effect, text, error) {
128
+ try {
129
+ effect.initialize(text, { noColor: true });
130
+ const frames = effect.renderFallback();
131
+ return {
132
+ success: true,
133
+ frames,
134
+ error,
135
+ };
136
+ }
137
+ catch (fallbackError) {
138
+ // Ultimate fallback - just return the original text
139
+ return {
140
+ success: false,
141
+ frames: [text],
142
+ error: error || fallbackError,
143
+ };
144
+ }
145
+ }
146
+ /**
147
+ * Determine if we should use fallback based on environment
148
+ */
149
+ shouldUseFallback() {
150
+ // Force fallback in CI environments
151
+ if (process.env.CI || process.env.NO_EFFECTS) {
152
+ return true;
153
+ }
154
+ // Lazy load terminal capabilities
155
+ if (!this.terminalCapabilities) {
156
+ this.terminalCapabilities = detectTerminalCapabilities();
157
+ }
158
+ // Use fallback if terminal doesn't support colors or is non-interactive
159
+ // At this point, terminalCapabilities is guaranteed to be defined
160
+ return (!this.terminalCapabilities.supportsColor ||
161
+ !this.terminalCapabilities.isInteractive);
162
+ }
163
+ /**
164
+ * Update performance metrics
165
+ */
166
+ updateMetrics(duration, memoryUsage) {
167
+ this.metrics.totalDuration += duration;
168
+ this.metrics.memoryUsage = Math.max(this.metrics.memoryUsage, memoryUsage);
169
+ this.metrics.averageFrameTime =
170
+ this.metrics.totalDuration / Math.max(this.metrics.frameCount, 1);
171
+ }
172
+ /**
173
+ * Get current performance metrics
174
+ */
175
+ getMetrics() {
176
+ return { ...this.metrics };
177
+ }
178
+ /**
179
+ * Reset performance metrics
180
+ */
181
+ resetMetrics() {
182
+ this.metrics = {
183
+ frameCount: 0,
184
+ totalDuration: 0,
185
+ averageFrameTime: 0,
186
+ maxFrameTime: 0,
187
+ memoryUsage: 0,
188
+ };
189
+ }
190
+ /**
191
+ * Create a wrapped effect executor for easy usage
192
+ */
193
+ static wrap(effect, config) {
194
+ const executor = new SafeEffectExecutor(config);
195
+ return async (text, effectConfig) => {
196
+ return executor.execute(effect, text, effectConfig);
197
+ };
198
+ }
199
+ }
200
+ /**
201
+ * Global effect executor instance
202
+ */
203
+ export const defaultExecutor = new SafeEffectExecutor();
204
+ /**
205
+ * Execute an effect safely with default configuration
206
+ */
207
+ export async function executeSafely(effect, text, effectConfig) {
208
+ return defaultExecutor.execute(effect, text, effectConfig);
209
+ }
210
+ //# sourceMappingURL=safe-executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safe-executor.js","sourceRoot":"","sources":["../../src/effects/safe-executor.ts"],"names":[],"mappings":"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"}