erosolar-cli 2.1.171 → 2.1.172

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 (209) hide show
  1. package/README.md +1 -1
  2. package/agents/erosolar-code.rules.json +2 -2
  3. package/agents/general.rules.json +3 -21
  4. package/dist/StringUtils.d.ts +8 -0
  5. package/dist/StringUtils.d.ts.map +1 -0
  6. package/dist/StringUtils.js +11 -0
  7. package/dist/StringUtils.js.map +1 -0
  8. package/dist/capabilities/statusCapability.js +2 -2
  9. package/dist/capabilities/statusCapability.js.map +1 -1
  10. package/dist/contracts/agent-schemas.json +5 -5
  11. package/dist/core/agent.d.ts +24 -83
  12. package/dist/core/agent.d.ts.map +1 -1
  13. package/dist/core/agent.js +248 -499
  14. package/dist/core/agent.js.map +1 -1
  15. package/dist/core/aiFlowSupervisor.d.ts +44 -0
  16. package/dist/core/aiFlowSupervisor.d.ts.map +1 -0
  17. package/dist/core/aiFlowSupervisor.js +299 -0
  18. package/dist/core/aiFlowSupervisor.js.map +1 -0
  19. package/dist/core/cliTestHarness.d.ts +200 -0
  20. package/dist/core/cliTestHarness.d.ts.map +1 -0
  21. package/dist/core/cliTestHarness.js +549 -0
  22. package/dist/core/cliTestHarness.js.map +1 -0
  23. package/dist/core/preferences.d.ts +0 -1
  24. package/dist/core/preferences.d.ts.map +1 -1
  25. package/dist/core/preferences.js +1 -8
  26. package/dist/core/preferences.js.map +1 -1
  27. package/dist/core/schemaValidator.js +3 -3
  28. package/dist/core/schemaValidator.js.map +1 -1
  29. package/dist/core/testUtils.d.ts +121 -0
  30. package/dist/core/testUtils.d.ts.map +1 -0
  31. package/dist/core/testUtils.js +235 -0
  32. package/dist/core/testUtils.js.map +1 -0
  33. package/dist/core/toolPreconditions.d.ts +11 -0
  34. package/dist/core/toolPreconditions.d.ts.map +1 -1
  35. package/dist/core/toolPreconditions.js +164 -33
  36. package/dist/core/toolPreconditions.js.map +1 -1
  37. package/dist/core/toolRuntime.d.ts.map +1 -1
  38. package/dist/core/toolRuntime.js +114 -9
  39. package/dist/core/toolRuntime.js.map +1 -1
  40. package/dist/core/toolValidation.d.ts +116 -0
  41. package/dist/core/toolValidation.d.ts.map +1 -0
  42. package/dist/core/toolValidation.js +282 -0
  43. package/dist/core/toolValidation.js.map +1 -0
  44. package/dist/core/updateChecker.d.ts +1 -61
  45. package/dist/core/updateChecker.d.ts.map +1 -1
  46. package/dist/core/updateChecker.js +3 -147
  47. package/dist/core/updateChecker.js.map +1 -1
  48. package/dist/headless/evalMode.d.ts.map +1 -1
  49. package/dist/headless/evalMode.js +0 -6
  50. package/dist/headless/evalMode.js.map +1 -1
  51. package/dist/headless/headlessApp.d.ts.map +1 -1
  52. package/dist/headless/headlessApp.js +39 -6
  53. package/dist/headless/headlessApp.js.map +1 -1
  54. package/dist/mcp/sseClient.d.ts +1 -4
  55. package/dist/mcp/sseClient.d.ts.map +1 -1
  56. package/dist/mcp/sseClient.js +2 -36
  57. package/dist/mcp/sseClient.js.map +1 -1
  58. package/dist/mcp/stdioClient.d.ts +1 -4
  59. package/dist/mcp/stdioClient.d.ts.map +1 -1
  60. package/dist/mcp/stdioClient.js +1 -41
  61. package/dist/mcp/stdioClient.js.map +1 -1
  62. package/dist/mcp/toolBridge.d.ts +0 -3
  63. package/dist/mcp/toolBridge.d.ts.map +1 -1
  64. package/dist/mcp/toolBridge.js +2 -2
  65. package/dist/mcp/toolBridge.js.map +1 -1
  66. package/dist/mcp/types.d.ts +0 -18
  67. package/dist/mcp/types.d.ts.map +1 -1
  68. package/dist/plugins/tools/nodeDefaults.d.ts.map +1 -1
  69. package/dist/plugins/tools/nodeDefaults.js +2 -0
  70. package/dist/plugins/tools/nodeDefaults.js.map +1 -1
  71. package/dist/providers/openaiResponsesProvider.d.ts.map +1 -1
  72. package/dist/providers/openaiResponsesProvider.js +74 -79
  73. package/dist/providers/openaiResponsesProvider.js.map +1 -1
  74. package/dist/runtime/agentController.d.ts.map +1 -1
  75. package/dist/runtime/agentController.js +3 -6
  76. package/dist/runtime/agentController.js.map +1 -1
  77. package/dist/runtime/agentSession.d.ts +2 -0
  78. package/dist/runtime/agentSession.d.ts.map +1 -1
  79. package/dist/runtime/agentSession.js +2 -2
  80. package/dist/runtime/agentSession.js.map +1 -1
  81. package/dist/shell/interactiveShell.d.ts +18 -20
  82. package/dist/shell/interactiveShell.d.ts.map +1 -1
  83. package/dist/shell/interactiveShell.js +291 -329
  84. package/dist/shell/interactiveShell.js.map +1 -1
  85. package/dist/shell/shellApp.d.ts.map +1 -1
  86. package/dist/shell/shellApp.js +8 -16
  87. package/dist/shell/shellApp.js.map +1 -1
  88. package/dist/shell/systemPrompt.d.ts.map +1 -1
  89. package/dist/shell/systemPrompt.js +15 -4
  90. package/dist/shell/systemPrompt.js.map +1 -1
  91. package/dist/subagents/taskRunner.js +1 -2
  92. package/dist/subagents/taskRunner.js.map +1 -1
  93. package/dist/tools/bashTools.d.ts.map +1 -1
  94. package/dist/tools/bashTools.js +8 -101
  95. package/dist/tools/bashTools.js.map +1 -1
  96. package/dist/tools/diffUtils.d.ts +2 -8
  97. package/dist/tools/diffUtils.d.ts.map +1 -1
  98. package/dist/tools/diffUtils.js +13 -72
  99. package/dist/tools/diffUtils.js.map +1 -1
  100. package/dist/tools/grepTools.d.ts.map +1 -1
  101. package/dist/tools/grepTools.js +2 -10
  102. package/dist/tools/grepTools.js.map +1 -1
  103. package/dist/tools/planningTools.d.ts +10 -0
  104. package/dist/tools/planningTools.d.ts.map +1 -1
  105. package/dist/tools/planningTools.js +16 -0
  106. package/dist/tools/planningTools.js.map +1 -1
  107. package/dist/tools/searchTools.d.ts.map +1 -1
  108. package/dist/tools/searchTools.js +2 -4
  109. package/dist/tools/searchTools.js.map +1 -1
  110. package/dist/ui/PromptController.d.ts +4 -4
  111. package/dist/ui/PromptController.d.ts.map +1 -1
  112. package/dist/ui/PromptController.js +7 -1
  113. package/dist/ui/PromptController.js.map +1 -1
  114. package/dist/ui/ShellUIAdapter.d.ts +28 -292
  115. package/dist/ui/ShellUIAdapter.d.ts.map +1 -1
  116. package/dist/ui/ShellUIAdapter.js +121 -1513
  117. package/dist/ui/ShellUIAdapter.js.map +1 -1
  118. package/dist/ui/UnifiedUIRenderer.d.ts +30 -136
  119. package/dist/ui/UnifiedUIRenderer.d.ts.map +1 -1
  120. package/dist/ui/UnifiedUIRenderer.js +370 -955
  121. package/dist/ui/UnifiedUIRenderer.js.map +1 -1
  122. package/dist/ui/animatedStatus.d.ts +6 -128
  123. package/dist/ui/animatedStatus.d.ts.map +1 -1
  124. package/dist/ui/animatedStatus.js +50 -383
  125. package/dist/ui/animatedStatus.js.map +1 -1
  126. package/dist/ui/display.d.ts +26 -182
  127. package/dist/ui/display.d.ts.map +1 -1
  128. package/dist/ui/display.js +97 -678
  129. package/dist/ui/display.js.map +1 -1
  130. package/dist/ui/layout.d.ts +1 -0
  131. package/dist/ui/layout.d.ts.map +1 -1
  132. package/dist/ui/layout.js +12 -0
  133. package/dist/ui/layout.js.map +1 -1
  134. package/dist/ui/orchestration/UIUpdateCoordinator.d.ts +7 -61
  135. package/dist/ui/orchestration/UIUpdateCoordinator.d.ts.map +1 -1
  136. package/dist/ui/orchestration/UIUpdateCoordinator.js +20 -232
  137. package/dist/ui/orchestration/UIUpdateCoordinator.js.map +1 -1
  138. package/dist/ui/planOverlay.d.ts +28 -0
  139. package/dist/ui/planOverlay.d.ts.map +1 -0
  140. package/dist/ui/planOverlay.js +156 -0
  141. package/dist/ui/planOverlay.js.map +1 -0
  142. package/dist/ui/shortcutsHelp.d.ts.map +1 -1
  143. package/dist/ui/shortcutsHelp.js +1 -0
  144. package/dist/ui/shortcutsHelp.js.map +1 -1
  145. package/dist/ui/streamingFormatter.d.ts +30 -0
  146. package/dist/ui/streamingFormatter.d.ts.map +1 -0
  147. package/dist/ui/streamingFormatter.js +91 -0
  148. package/dist/ui/streamingFormatter.js.map +1 -0
  149. package/dist/ui/unified/index.d.ts +1 -30
  150. package/dist/ui/unified/index.d.ts.map +1 -1
  151. package/dist/ui/unified/index.js +2 -45
  152. package/dist/ui/unified/index.js.map +1 -1
  153. package/dist/utils/errorUtils.d.ts +16 -0
  154. package/dist/utils/errorUtils.d.ts.map +1 -0
  155. package/dist/utils/errorUtils.js +66 -0
  156. package/dist/utils/errorUtils.js.map +1 -0
  157. package/package.json +2 -1
  158. package/dist/codex/capabilities/codexCoreCapability.d.ts +0 -6
  159. package/dist/codex/capabilities/codexCoreCapability.d.ts.map +0 -1
  160. package/dist/codex/capabilities/codexCoreCapability.js +0 -516
  161. package/dist/codex/capabilities/codexCoreCapability.js.map +0 -1
  162. package/dist/codex/fs.d.ts +0 -4
  163. package/dist/codex/fs.d.ts.map +0 -1
  164. package/dist/codex/fs.js +0 -25
  165. package/dist/codex/fs.js.map +0 -1
  166. package/dist/codex/persistence/planStore.d.ts +0 -4
  167. package/dist/codex/persistence/planStore.d.ts.map +0 -1
  168. package/dist/codex/persistence/planStore.js +0 -59
  169. package/dist/codex/persistence/planStore.js.map +0 -1
  170. package/dist/codex/pluginAllowlist.d.ts +0 -4
  171. package/dist/codex/pluginAllowlist.d.ts.map +0 -1
  172. package/dist/codex/pluginAllowlist.js +0 -14
  173. package/dist/codex/pluginAllowlist.js.map +0 -1
  174. package/dist/codex/types.d.ts +0 -21
  175. package/dist/codex/types.d.ts.map +0 -1
  176. package/dist/codex/types.js +0 -62
  177. package/dist/codex/types.js.map +0 -1
  178. package/dist/core/reliabilityPrompt.d.ts +0 -9
  179. package/dist/core/reliabilityPrompt.d.ts.map +0 -1
  180. package/dist/core/reliabilityPrompt.js +0 -31
  181. package/dist/core/reliabilityPrompt.js.map +0 -1
  182. package/dist/ui/UnifiedUIController.d.ts +0 -81
  183. package/dist/ui/UnifiedUIController.d.ts.map +0 -1
  184. package/dist/ui/UnifiedUIController.js +0 -212
  185. package/dist/ui/UnifiedUIController.js.map +0 -1
  186. package/dist/ui/animation/AnimationScheduler.d.ts +0 -192
  187. package/dist/ui/animation/AnimationScheduler.d.ts.map +0 -1
  188. package/dist/ui/animation/AnimationScheduler.js +0 -432
  189. package/dist/ui/animation/AnimationScheduler.js.map +0 -1
  190. package/dist/ui/inPlaceUpdater.d.ts +0 -181
  191. package/dist/ui/inPlaceUpdater.d.ts.map +0 -1
  192. package/dist/ui/inPlaceUpdater.js +0 -515
  193. package/dist/ui/inPlaceUpdater.js.map +0 -1
  194. package/dist/ui/interrupts/InterruptManager.d.ts +0 -142
  195. package/dist/ui/interrupts/InterruptManager.d.ts.map +0 -1
  196. package/dist/ui/interrupts/InterruptManager.js +0 -439
  197. package/dist/ui/interrupts/InterruptManager.js.map +0 -1
  198. package/dist/ui/telemetry/ResponseTracker.d.ts +0 -22
  199. package/dist/ui/telemetry/ResponseTracker.d.ts.map +0 -1
  200. package/dist/ui/telemetry/ResponseTracker.js +0 -60
  201. package/dist/ui/telemetry/ResponseTracker.js.map +0 -1
  202. package/dist/ui/telemetry/UITelemetry.d.ts +0 -181
  203. package/dist/ui/telemetry/UITelemetry.d.ts.map +0 -1
  204. package/dist/ui/telemetry/UITelemetry.js +0 -446
  205. package/dist/ui/telemetry/UITelemetry.js.map +0 -1
  206. package/dist/ui/unified/layout.d.ts +0 -12
  207. package/dist/ui/unified/layout.d.ts.map +0 -1
  208. package/dist/ui/unified/layout.js +0 -96
  209. package/dist/ui/unified/layout.js.map +0 -1
@@ -1,60 +0,0 @@
1
- /**
2
- * Tracks assistant thought/response pairs as single events.
3
- * Ensures multi-line messages are counted once per response.
4
- */
5
- export class ResponseTracker {
6
- telemetry;
7
- nextId = 0;
8
- activeId = null;
9
- pendingThought = null;
10
- constructor(telemetry) {
11
- this.telemetry = telemetry;
12
- }
13
- recordThought(thought) {
14
- const normalized = thought.trim();
15
- if (!normalized)
16
- return null;
17
- if (!this.activeId) {
18
- this.activeId = this.nextId + 1;
19
- this.nextId = this.activeId;
20
- }
21
- this.pendingThought = this.pendingThought
22
- ? `${this.pendingThought}\n${normalized}`
23
- : normalized;
24
- this.telemetry.recordEvent('assistant.thought', {
25
- id: this.activeId,
26
- phase: 'thought',
27
- summary: this.truncate(normalized),
28
- length: normalized.length,
29
- });
30
- return this.activeId;
31
- }
32
- recordResponse(response, metadata = {}) {
33
- const normalized = response.trim();
34
- if (!normalized)
35
- return null;
36
- const id = metadata.responseId ?? this.activeId ?? this.nextId + 1;
37
- if (id > this.nextId) {
38
- this.nextId = id;
39
- }
40
- const thought = metadata.thought?.trim() || this.pendingThought || null;
41
- this.telemetry.recordEvent('assistant.response', {
42
- id,
43
- phase: 'response',
44
- summary: this.truncate(normalized),
45
- length: normalized.length,
46
- thoughtSummary: thought ? this.truncate(thought) : undefined,
47
- source: metadata.source ?? 'final',
48
- usage: metadata.usage ?? null,
49
- });
50
- this.pendingThought = null;
51
- this.activeId = null;
52
- return id;
53
- }
54
- truncate(value, max = 240) {
55
- if (value.length <= max)
56
- return value;
57
- return `${value.slice(0, max - 3).trimEnd()}...`;
58
- }
59
- }
60
- //# sourceMappingURL=ResponseTracker.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ResponseTracker.js","sourceRoot":"","sources":["../../../src/ui/telemetry/ResponseTracker.ts"],"names":[],"mappings":"AASA;;;GAGG;AACH,MAAM,OAAO,eAAe;IAKG;IAJrB,MAAM,GAAG,CAAC,CAAC;IACX,QAAQ,GAAkB,IAAI,CAAC;IAC/B,cAAc,GAAkB,IAAI,CAAC;IAE7C,YAA6B,SAAsB;QAAtB,cAAS,GAAT,SAAS,CAAa;IAAG,CAAC;IAEvD,aAAa,CAAC,OAAe;QAC3B,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAClC,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAC;QAE7B,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;YAChC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,CAAC;QAED,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc;YACvC,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,KAAK,UAAU,EAAE;YACzC,CAAC,CAAC,UAAU,CAAC;QAEf,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,mBAAmB,EAAE;YAC9C,EAAE,EAAE,IAAI,CAAC,QAAQ;YACjB,KAAK,EAAE,SAAS;YAChB,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;YAClC,MAAM,EAAE,UAAU,CAAC,MAAM;SAC1B,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,cAAc,CAAC,QAAgB,EAAE,WAAsC,EAAE;QACvE,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAC;QAE7B,MAAM,EAAE,GAAG,QAAQ,CAAC,UAAU,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QACnE,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YACrB,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACnB,CAAC;QAED,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC;QAExE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,oBAAoB,EAAE;YAC/C,EAAE;YACF,KAAK,EAAE,UAAU;YACjB,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;YAClC,MAAM,EAAE,UAAU,CAAC,MAAM;YACzB,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS;YAC5D,MAAM,EAAE,QAAQ,CAAC,MAAM,IAAI,OAAO;YAClC,KAAK,EAAE,QAAQ,CAAC,KAAK,IAAI,IAAI;SAC9B,CAAC,CAAC;QAEH,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,OAAO,EAAE,CAAC;IACZ,CAAC;IAEO,QAAQ,CAAC,KAAa,EAAE,MAAc,GAAG;QAC/C,IAAI,KAAK,CAAC,MAAM,IAAI,GAAG;YAAE,OAAO,KAAK,CAAC;QACtC,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC;IACnD,CAAC;CACF"}
@@ -1,181 +0,0 @@
1
- /**
2
- * UITelemetry - Collects and tracks UI performance metrics and user interactions
3
- * Provides insights into UI responsiveness, user behavior, and system performance
4
- */
5
- import { EventEmitter } from 'events';
6
- export interface UIEvent {
7
- type: string;
8
- timestamp: number;
9
- duration?: number;
10
- metadata?: any;
11
- }
12
- export interface PerformanceMetric {
13
- name: string;
14
- value: number;
15
- unit: string;
16
- timestamp: number;
17
- }
18
- export interface UserInteraction {
19
- type: 'command' | 'keypress' | 'menu-selection' | 'cancel' | 'confirm';
20
- target?: string;
21
- timestamp: number;
22
- responseTime?: number;
23
- completed: boolean;
24
- }
25
- export interface RenderMetric {
26
- component: string;
27
- renderTime: number;
28
- frameCount: number;
29
- dropped: number;
30
- timestamp: number;
31
- }
32
- export interface TelemetrySnapshot {
33
- timestamp: number;
34
- period: {
35
- start: number;
36
- end: number;
37
- };
38
- events: {
39
- total: number;
40
- byType: Record<string, number>;
41
- };
42
- performance: {
43
- avgRenderTime: number;
44
- avgResponseTime: number;
45
- framerate: number;
46
- memoryUsage: NodeJS.MemoryUsage;
47
- cpuUsage: NodeJS.CpuUsage;
48
- };
49
- interactions: {
50
- total: number;
51
- completed: number;
52
- cancelled: number;
53
- avgResponseTime: number;
54
- };
55
- errors: {
56
- total: number;
57
- byType: Record<string, number>;
58
- };
59
- }
60
- export interface TelemetryConfig {
61
- enabled: boolean;
62
- bufferSize: number;
63
- flushInterval: number;
64
- captureStackTraces: boolean;
65
- anonymize: boolean;
66
- performanceThresholds: {
67
- renderTime: number;
68
- responseTime: number;
69
- framerate: number;
70
- memory: number;
71
- };
72
- }
73
- export declare class UITelemetry extends EventEmitter {
74
- private config;
75
- private events;
76
- private metrics;
77
- private interactions;
78
- private renderMetrics;
79
- private errors;
80
- private sessionStart;
81
- private marks;
82
- private measures;
83
- private flushTimer;
84
- private frameCounter;
85
- constructor(config?: Partial<TelemetryConfig>);
86
- /**
87
- * Start telemetry collection
88
- */
89
- private startCollection;
90
- /**
91
- * Record a UI event
92
- */
93
- recordEvent(type: string, eventMetadata?: any): void;
94
- /**
95
- * Start a performance mark
96
- */
97
- markStart(name: string): void;
98
- /**
99
- * End a performance mark and record the duration
100
- */
101
- markEnd(name: string, _metadata?: any): number;
102
- /**
103
- * Record a user interaction
104
- */
105
- recordInteraction(type: UserInteraction['type'], target?: string): {
106
- complete: () => void;
107
- cancel: () => void;
108
- };
109
- /**
110
- * Record render metrics
111
- */
112
- recordRender(component: string, renderTime: number): void;
113
- /**
114
- * Record an error
115
- */
116
- recordError(error: any, context?: any): void;
117
- /**
118
- * Record memory usage
119
- */
120
- private recordMemoryUsage;
121
- /**
122
- * Check performance threshold
123
- */
124
- private checkPerformanceThreshold;
125
- /**
126
- * Check response time threshold
127
- */
128
- private checkResponseTimeThreshold;
129
- /**
130
- * Trim buffer to prevent memory issues
131
- */
132
- private trimBuffer;
133
- /**
134
- * Anonymize sensitive data
135
- */
136
- private anonymizeData;
137
- /**
138
- * Get current telemetry snapshot
139
- */
140
- getSnapshot(): TelemetrySnapshot;
141
- /**
142
- * Get performance summary
143
- */
144
- getPerformanceSummary(): {
145
- measures: Record<string, {
146
- avg: number;
147
- min: number;
148
- max: number;
149
- count: number;
150
- }>;
151
- slowestOperations: Array<{
152
- name: string;
153
- duration: number;
154
- }>;
155
- };
156
- /**
157
- * Flush telemetry data
158
- */
159
- flush(): void;
160
- /**
161
- * Enable or disable telemetry
162
- */
163
- setEnabled(enabled: boolean): void;
164
- /**
165
- * Update configuration
166
- */
167
- updateConfig(config: Partial<TelemetryConfig>): void;
168
- /**
169
- * Reset all telemetry data
170
- */
171
- reset(): void;
172
- /**
173
- * Stop telemetry collection
174
- */
175
- stop(): void;
176
- /**
177
- * Dispose of telemetry
178
- */
179
- dispose(): void;
180
- }
181
- //# sourceMappingURL=UITelemetry.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"UITelemetry.d.ts","sourceRoot":"","sources":["../../../src/ui/telemetry/UITelemetry.ts"],"names":[],"mappings":"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"}
@@ -1,446 +0,0 @@
1
- /**
2
- * UITelemetry - Collects and tracks UI performance metrics and user interactions
3
- * Provides insights into UI responsiveness, user behavior, and system performance
4
- */
5
- import { EventEmitter } from 'events';
6
- import { performance } from 'perf_hooks';
7
- export class UITelemetry extends EventEmitter {
8
- config;
9
- events = [];
10
- metrics = [];
11
- interactions = [];
12
- renderMetrics = [];
13
- errors = [];
14
- sessionStart;
15
- marks = new Map();
16
- measures = new Map();
17
- flushTimer = null;
18
- frameCounter = {
19
- frames: 0,
20
- dropped: 0,
21
- lastFrame: performance.now(),
22
- };
23
- constructor(config = {}) {
24
- super();
25
- this.config = {
26
- enabled: true,
27
- bufferSize: 10000,
28
- flushInterval: 60000, // 1 minute
29
- captureStackTraces: false,
30
- anonymize: true,
31
- performanceThresholds: {
32
- renderTime: 16, // 60 FPS target
33
- responseTime: 100, // 100ms max response time
34
- framerate: 30, // Minimum acceptable framerate
35
- memory: 500 * 1024 * 1024, // 500MB memory threshold
36
- },
37
- ...config,
38
- };
39
- this.sessionStart = Date.now();
40
- if (this.config.enabled) {
41
- this.startCollection();
42
- }
43
- }
44
- /**
45
- * Start telemetry collection
46
- */
47
- startCollection() {
48
- // Set up flush timer
49
- if (this.config.flushInterval > 0) {
50
- this.flushTimer = setInterval(() => this.flush(), this.config.flushInterval);
51
- }
52
- // Monitor memory usage
53
- setInterval(() => {
54
- this.recordMemoryUsage();
55
- }, 10000); // Every 10 seconds
56
- this.emit('telemetry:started');
57
- }
58
- /**
59
- * Record a UI event
60
- */
61
- recordEvent(type, eventMetadata) {
62
- if (!this.config.enabled)
63
- return;
64
- const event = {
65
- type,
66
- timestamp: Date.now(),
67
- metadata: this.config.anonymize ? this.anonymizeData(eventMetadata) : eventMetadata,
68
- };
69
- this.events.push(event);
70
- this.trimBuffer('events');
71
- this.emit('event:recorded', event);
72
- }
73
- /**
74
- * Start a performance mark
75
- */
76
- markStart(name) {
77
- if (!this.config.enabled)
78
- return;
79
- this.marks.set(name, performance.now());
80
- }
81
- /**
82
- * End a performance mark and record the duration
83
- */
84
- markEnd(name, _metadata) {
85
- if (!this.config.enabled)
86
- return 0;
87
- const start = this.marks.get(name);
88
- if (!start) {
89
- console.warn(`No start mark found for: ${name}`);
90
- return 0;
91
- }
92
- const duration = performance.now() - start;
93
- this.marks.delete(name);
94
- // Store measure
95
- if (!this.measures.has(name)) {
96
- this.measures.set(name, []);
97
- }
98
- this.measures.get(name).push(duration);
99
- // Record metric
100
- const metric = {
101
- name,
102
- value: duration,
103
- unit: 'ms',
104
- timestamp: Date.now(),
105
- };
106
- this.metrics.push(metric);
107
- this.trimBuffer('metrics');
108
- // Check threshold
109
- this.checkPerformanceThreshold(name, duration);
110
- this.emit('metric:recorded', metric);
111
- return duration;
112
- }
113
- /**
114
- * Record a user interaction
115
- */
116
- recordInteraction(type, target) {
117
- if (!this.config.enabled) {
118
- return {
119
- complete: () => { },
120
- cancel: () => { },
121
- };
122
- }
123
- const interaction = {
124
- type,
125
- target,
126
- timestamp: Date.now(),
127
- completed: false,
128
- };
129
- this.interactions.push(interaction);
130
- return {
131
- complete: () => {
132
- interaction.completed = true;
133
- interaction.responseTime = Date.now() - interaction.timestamp;
134
- this.checkResponseTimeThreshold(interaction.responseTime);
135
- this.emit('interaction:completed', interaction);
136
- },
137
- cancel: () => {
138
- interaction.completed = false;
139
- this.emit('interaction:cancelled', interaction);
140
- },
141
- };
142
- }
143
- /**
144
- * Record render metrics
145
- */
146
- recordRender(component, renderTime) {
147
- if (!this.config.enabled)
148
- return;
149
- // Update frame counter
150
- const now = performance.now();
151
- const timeSinceLastFrame = now - this.frameCounter.lastFrame;
152
- if (timeSinceLastFrame > 33.33) { // More than 2 frames at 60fps
153
- this.frameCounter.dropped++;
154
- }
155
- this.frameCounter.frames++;
156
- this.frameCounter.lastFrame = now;
157
- const metric = {
158
- component,
159
- renderTime,
160
- frameCount: this.frameCounter.frames,
161
- dropped: this.frameCounter.dropped,
162
- timestamp: Date.now(),
163
- };
164
- this.renderMetrics.push(metric);
165
- this.trimBuffer('renderMetrics');
166
- // Check render time threshold
167
- if (renderTime > this.config.performanceThresholds.renderTime) {
168
- this.emit('performance:slow-render', {
169
- component,
170
- renderTime,
171
- threshold: this.config.performanceThresholds.renderTime,
172
- });
173
- }
174
- this.emit('render:recorded', metric);
175
- }
176
- /**
177
- * Record an error
178
- */
179
- recordError(error, context) {
180
- if (!this.config.enabled)
181
- return;
182
- const errorRecord = {
183
- error: {
184
- message: error.message || String(error),
185
- type: error.constructor?.name || 'Error',
186
- stack: this.config.captureStackTraces ? error.stack : undefined,
187
- },
188
- timestamp: Date.now(),
189
- context: this.config.anonymize ? this.anonymizeData(context) : context,
190
- };
191
- this.errors.push(errorRecord);
192
- this.trimBuffer('errors');
193
- this.emit('error:recorded', errorRecord);
194
- }
195
- /**
196
- * Record memory usage
197
- */
198
- recordMemoryUsage() {
199
- const usage = process.memoryUsage();
200
- const metric = {
201
- name: 'memory.heapUsed',
202
- value: usage.heapUsed,
203
- unit: 'bytes',
204
- timestamp: Date.now(),
205
- };
206
- this.metrics.push(metric);
207
- // Check memory threshold
208
- if (usage.heapUsed > this.config.performanceThresholds.memory) {
209
- this.emit('performance:high-memory', {
210
- usage: usage.heapUsed,
211
- threshold: this.config.performanceThresholds.memory,
212
- });
213
- }
214
- }
215
- /**
216
- * Check performance threshold
217
- */
218
- checkPerformanceThreshold(name, duration) {
219
- if (name.includes('render') &&
220
- duration > this.config.performanceThresholds.renderTime) {
221
- this.emit('performance:threshold-exceeded', {
222
- type: 'render',
223
- name,
224
- duration,
225
- threshold: this.config.performanceThresholds.renderTime,
226
- });
227
- }
228
- }
229
- /**
230
- * Check response time threshold
231
- */
232
- checkResponseTimeThreshold(responseTime) {
233
- if (responseTime > this.config.performanceThresholds.responseTime) {
234
- this.emit('performance:threshold-exceeded', {
235
- type: 'response',
236
- responseTime,
237
- threshold: this.config.performanceThresholds.responseTime,
238
- });
239
- }
240
- }
241
- /**
242
- * Trim buffer to prevent memory issues
243
- */
244
- trimBuffer(bufferName) {
245
- const buffer = this[bufferName];
246
- if (Array.isArray(buffer) && buffer.length > this.config.bufferSize) {
247
- // Keep most recent items
248
- const toRemove = buffer.length - this.config.bufferSize;
249
- buffer.splice(0, toRemove);
250
- }
251
- }
252
- /**
253
- * Anonymize sensitive data
254
- */
255
- anonymizeData(data) {
256
- if (!data)
257
- return data;
258
- if (typeof data !== 'object')
259
- return data;
260
- const anonymized = { ...data };
261
- // Remove or hash sensitive fields
262
- const sensitiveFields = ['password', 'token', 'key', 'secret', 'email', 'username'];
263
- for (const field of sensitiveFields) {
264
- if (field in anonymized) {
265
- anonymized[field] = '[REDACTED]';
266
- }
267
- }
268
- // Recursively anonymize nested objects
269
- for (const key in anonymized) {
270
- if (typeof anonymized[key] === 'object' && anonymized[key] !== null) {
271
- anonymized[key] = this.anonymizeData(anonymized[key]);
272
- }
273
- }
274
- return anonymized;
275
- }
276
- /**
277
- * Get current telemetry snapshot
278
- */
279
- getSnapshot() {
280
- const now = Date.now();
281
- const period = {
282
- start: this.sessionStart,
283
- end: now,
284
- };
285
- // Calculate event statistics
286
- const eventsByType = {};
287
- for (const event of this.events) {
288
- eventsByType[event.type] = (eventsByType[event.type] || 0) + 1;
289
- }
290
- // Calculate performance metrics
291
- const renderTimes = this.renderMetrics.map(m => m.renderTime);
292
- const avgRenderTime = renderTimes.length > 0
293
- ? renderTimes.reduce((a, b) => a + b, 0) / renderTimes.length
294
- : 0;
295
- const responseTimes = this.interactions
296
- .filter(i => i.responseTime !== undefined)
297
- .map(i => i.responseTime);
298
- const avgResponseTime = responseTimes.length > 0
299
- ? responseTimes.reduce((a, b) => a + b, 0) / responseTimes.length
300
- : 0;
301
- const framerate = this.frameCounter.frames > 0
302
- ? (this.frameCounter.frames - this.frameCounter.dropped) /
303
- ((now - this.sessionStart) / 1000)
304
- : 0;
305
- // Calculate interaction statistics
306
- const completedInteractions = this.interactions.filter(i => i.completed).length;
307
- const cancelledInteractions = this.interactions.filter(i => !i.completed).length;
308
- // Calculate error statistics
309
- const errorsByType = {};
310
- for (const error of this.errors) {
311
- const type = error.error.type || 'Unknown';
312
- errorsByType[type] = (errorsByType[type] || 0) + 1;
313
- }
314
- return {
315
- timestamp: now,
316
- period,
317
- events: {
318
- total: this.events.length,
319
- byType: eventsByType,
320
- },
321
- performance: {
322
- avgRenderTime,
323
- avgResponseTime,
324
- framerate,
325
- memoryUsage: process.memoryUsage(),
326
- cpuUsage: process.cpuUsage(),
327
- },
328
- interactions: {
329
- total: this.interactions.length,
330
- completed: completedInteractions,
331
- cancelled: cancelledInteractions,
332
- avgResponseTime,
333
- },
334
- errors: {
335
- total: this.errors.length,
336
- byType: errorsByType,
337
- },
338
- };
339
- }
340
- /**
341
- * Get performance summary
342
- */
343
- getPerformanceSummary() {
344
- const summary = {};
345
- for (const [name, durations] of this.measures) {
346
- if (durations.length === 0)
347
- continue;
348
- summary[name] = {
349
- avg: durations.reduce((a, b) => a + b, 0) / durations.length,
350
- min: Math.min(...durations),
351
- max: Math.max(...durations),
352
- count: durations.length,
353
- };
354
- }
355
- // Find slowest operations
356
- const allOperations = [];
357
- for (const metric of this.metrics) {
358
- if (metric.unit === 'ms') {
359
- allOperations.push({ name: metric.name, duration: metric.value });
360
- }
361
- }
362
- const slowestOperations = allOperations
363
- .sort((a, b) => b.duration - a.duration)
364
- .slice(0, 10);
365
- return {
366
- measures: summary,
367
- slowestOperations,
368
- };
369
- }
370
- /**
371
- * Flush telemetry data
372
- */
373
- flush() {
374
- const snapshot = this.getSnapshot();
375
- this.emit('telemetry:flush', snapshot);
376
- // Clear old data based on buffer size
377
- const cutoff = Date.now() - this.config.flushInterval;
378
- this.events = this.events.filter(e => e.timestamp > cutoff);
379
- this.metrics = this.metrics.filter(m => m.timestamp > cutoff);
380
- this.interactions = this.interactions.filter(i => i.timestamp > cutoff);
381
- this.renderMetrics = this.renderMetrics.filter(m => m.timestamp > cutoff);
382
- this.errors = this.errors.filter(e => e.timestamp > cutoff);
383
- }
384
- /**
385
- * Enable or disable telemetry
386
- */
387
- setEnabled(enabled) {
388
- this.config.enabled = enabled;
389
- if (!enabled) {
390
- this.stop();
391
- }
392
- else {
393
- this.startCollection();
394
- }
395
- this.emit('telemetry:status-changed', { enabled });
396
- }
397
- /**
398
- * Update configuration
399
- */
400
- updateConfig(config) {
401
- const wasEnabled = this.config.enabled;
402
- this.config = { ...this.config, ...config };
403
- if (wasEnabled !== this.config.enabled) {
404
- this.setEnabled(this.config.enabled);
405
- }
406
- this.emit('telemetry:config-updated', this.config);
407
- }
408
- /**
409
- * Reset all telemetry data
410
- */
411
- reset() {
412
- this.events = [];
413
- this.metrics = [];
414
- this.interactions = [];
415
- this.renderMetrics = [];
416
- this.errors = [];
417
- this.marks.clear();
418
- this.measures.clear();
419
- this.frameCounter = {
420
- frames: 0,
421
- dropped: 0,
422
- lastFrame: performance.now(),
423
- };
424
- this.sessionStart = Date.now();
425
- this.emit('telemetry:reset');
426
- }
427
- /**
428
- * Stop telemetry collection
429
- */
430
- stop() {
431
- if (this.flushTimer) {
432
- clearInterval(this.flushTimer);
433
- this.flushTimer = null;
434
- }
435
- this.emit('telemetry:stopped');
436
- }
437
- /**
438
- * Dispose of telemetry
439
- */
440
- dispose() {
441
- this.stop();
442
- this.removeAllListeners();
443
- this.reset();
444
- }
445
- }
446
- //# sourceMappingURL=UITelemetry.js.map