@defai.digital/ax-cli 3.7.2 → 3.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (213) hide show
  1. package/README.md +128 -56
  2. package/dist/agent/context-manager.d.ts +15 -1
  3. package/dist/agent/context-manager.js +50 -19
  4. package/dist/agent/context-manager.js.map +1 -1
  5. package/dist/agent/dependency-resolver.js +13 -7
  6. package/dist/agent/dependency-resolver.js.map +1 -1
  7. package/dist/agent/llm-agent.d.ts +35 -0
  8. package/dist/agent/llm-agent.js +137 -4
  9. package/dist/agent/llm-agent.js.map +1 -1
  10. package/dist/agent/status-reporter.d.ts +114 -0
  11. package/dist/agent/status-reporter.js +335 -0
  12. package/dist/agent/status-reporter.js.map +1 -0
  13. package/dist/analyzers/best-practices/rules/typescript/no-magic-numbers.js +8 -2
  14. package/dist/analyzers/best-practices/rules/typescript/no-magic-numbers.js.map +1 -1
  15. package/dist/analyzers/best-practices/rules/typescript/no-unused-vars.js +3 -1
  16. package/dist/analyzers/best-practices/rules/typescript/no-unused-vars.js.map +1 -1
  17. package/dist/analyzers/best-practices/rules/typescript/prefer-const.js +3 -1
  18. package/dist/analyzers/best-practices/rules/typescript/prefer-const.js.map +1 -1
  19. package/dist/analyzers/best-practices/rules/typescript/prefer-readonly.js +3 -1
  20. package/dist/analyzers/best-practices/rules/typescript/prefer-readonly.js.map +1 -1
  21. package/dist/analyzers/code-smells/detectors/duplicate-code-detector.js +9 -3
  22. package/dist/analyzers/code-smells/detectors/duplicate-code-detector.js.map +1 -1
  23. package/dist/analyzers/git/churn-calculator.d.ts +1 -0
  24. package/dist/analyzers/git/churn-calculator.js +25 -6
  25. package/dist/analyzers/git/churn-calculator.js.map +1 -1
  26. package/dist/analyzers/git/hotspot-detector.js +2 -2
  27. package/dist/analyzers/git/hotspot-detector.js.map +1 -1
  28. package/dist/analyzers/metrics/metrics-analyzer.js +1 -1
  29. package/dist/analyzers/metrics/metrics-analyzer.js.map +1 -1
  30. package/dist/analyzers/security/security-analyzer.js +1 -1
  31. package/dist/analyzers/security/security-analyzer.js.map +1 -1
  32. package/dist/checkpoint/manager.d.ts +1 -0
  33. package/dist/checkpoint/manager.js +49 -9
  34. package/dist/checkpoint/manager.js.map +1 -1
  35. package/dist/checkpoint/storage.js +2 -2
  36. package/dist/checkpoint/storage.js.map +1 -1
  37. package/dist/commands/mcp-migrate.d.ts +9 -0
  38. package/dist/commands/mcp-migrate.js +172 -0
  39. package/dist/commands/mcp-migrate.js.map +1 -0
  40. package/dist/commands/status.d.ts +7 -0
  41. package/dist/commands/status.js +211 -0
  42. package/dist/commands/status.js.map +1 -0
  43. package/dist/commands/vscode.d.ts +7 -0
  44. package/dist/commands/vscode.js +363 -0
  45. package/dist/commands/vscode.js.map +1 -0
  46. package/dist/index.js +79 -30
  47. package/dist/index.js.map +1 -1
  48. package/dist/llm/client.js +22 -4
  49. package/dist/llm/client.js.map +1 -1
  50. package/dist/mcp/automatosx-loader.d.ts +84 -0
  51. package/dist/mcp/automatosx-loader.js +238 -0
  52. package/dist/mcp/automatosx-loader.js.map +1 -0
  53. package/dist/mcp/client-mutex-patch.d.ts +36 -0
  54. package/dist/mcp/client-mutex-patch.js +75 -0
  55. package/dist/mcp/client-mutex-patch.js.map +1 -0
  56. package/dist/mcp/client-v2.d.ts +229 -0
  57. package/dist/mcp/client-v2.js +740 -0
  58. package/dist/mcp/client-v2.js.map +1 -0
  59. package/dist/mcp/client.d.ts +111 -13
  60. package/dist/mcp/client.js +168 -253
  61. package/dist/mcp/client.js.map +1 -1
  62. package/dist/mcp/config-detector-v2.d.ts +83 -0
  63. package/dist/mcp/config-detector-v2.js +328 -0
  64. package/dist/mcp/config-detector-v2.js.map +1 -0
  65. package/dist/mcp/config-detector.d.ts +90 -0
  66. package/dist/mcp/config-detector.js +242 -0
  67. package/dist/mcp/config-detector.js.map +1 -0
  68. package/dist/mcp/config-migrator-v2.d.ts +89 -0
  69. package/dist/mcp/config-migrator-v2.js +288 -0
  70. package/dist/mcp/config-migrator-v2.js.map +1 -0
  71. package/dist/mcp/config-migrator.d.ts +63 -0
  72. package/dist/mcp/config-migrator.js +269 -0
  73. package/dist/mcp/config-migrator.js.map +1 -0
  74. package/dist/mcp/config-v2.d.ts +106 -0
  75. package/dist/mcp/config-v2.js +417 -0
  76. package/dist/mcp/config-v2.js.map +1 -0
  77. package/dist/mcp/config.d.ts +12 -1
  78. package/dist/mcp/config.js +95 -10
  79. package/dist/mcp/config.js.map +1 -1
  80. package/dist/mcp/error-formatter.d.ts +46 -0
  81. package/dist/mcp/error-formatter.js +244 -0
  82. package/dist/mcp/error-formatter.js.map +1 -0
  83. package/dist/mcp/health.d.ts +5 -0
  84. package/dist/mcp/health.js +22 -2
  85. package/dist/mcp/health.js.map +1 -1
  86. package/dist/mcp/invariants.d.ts +141 -0
  87. package/dist/mcp/invariants.js +243 -0
  88. package/dist/mcp/invariants.js.map +1 -0
  89. package/dist/mcp/mutex-safe.d.ts +153 -0
  90. package/dist/mcp/mutex-safe.js +260 -0
  91. package/dist/mcp/mutex-safe.js.map +1 -0
  92. package/dist/mcp/mutex.d.ts +73 -0
  93. package/dist/mcp/mutex.js +130 -0
  94. package/dist/mcp/mutex.js.map +1 -0
  95. package/dist/mcp/reconnection.d.ts +4 -0
  96. package/dist/mcp/reconnection.js +15 -0
  97. package/dist/mcp/reconnection.js.map +1 -1
  98. package/dist/mcp/transports-v2.d.ts +152 -0
  99. package/dist/mcp/transports-v2.js +481 -0
  100. package/dist/mcp/transports-v2.js.map +1 -0
  101. package/dist/mcp/type-safety.d.ts +231 -0
  102. package/dist/mcp/type-safety.js +273 -0
  103. package/dist/mcp/type-safety.js.map +1 -0
  104. package/dist/planner/task-planner.js +13 -0
  105. package/dist/planner/task-planner.js.map +1 -1
  106. package/dist/planner/types.d.ts +6 -6
  107. package/dist/schemas/confirmation-schemas.d.ts +2 -2
  108. package/dist/schemas/settings-schemas.d.ts +196 -0
  109. package/dist/schemas/settings-schemas.js +146 -5
  110. package/dist/schemas/settings-schemas.js.map +1 -1
  111. package/dist/sdk/index.d.ts +118 -2
  112. package/dist/sdk/index.js +146 -4
  113. package/dist/sdk/index.js.map +1 -1
  114. package/dist/sdk/testing.d.ts +182 -0
  115. package/dist/sdk/testing.js +231 -0
  116. package/dist/sdk/testing.js.map +1 -1
  117. package/dist/sdk/version.d.ts +114 -15
  118. package/dist/sdk/version.js +137 -15
  119. package/dist/sdk/version.js.map +1 -1
  120. package/dist/tools/bash.js +54 -9
  121. package/dist/tools/bash.js.map +1 -1
  122. package/dist/tools/registry.d.ts +146 -0
  123. package/dist/tools/registry.js +170 -0
  124. package/dist/tools/registry.js.map +1 -0
  125. package/dist/tools/search.js +12 -2
  126. package/dist/tools/search.js.map +1 -1
  127. package/dist/tools/text-editor.js +84 -26
  128. package/dist/tools/text-editor.js.map +1 -1
  129. package/dist/ui/components/chat-history.js +6 -1
  130. package/dist/ui/components/chat-history.js.map +1 -1
  131. package/dist/ui/components/chat-input.d.ts +2 -1
  132. package/dist/ui/components/chat-input.js +5 -2
  133. package/dist/ui/components/chat-input.js.map +1 -1
  134. package/dist/ui/components/chat-interface.js +187 -5
  135. package/dist/ui/components/chat-interface.js.map +1 -1
  136. package/dist/ui/components/context-breakdown.d.ts +23 -0
  137. package/dist/ui/components/context-breakdown.js +124 -0
  138. package/dist/ui/components/context-breakdown.js.map +1 -0
  139. package/dist/ui/components/keyboard-help.d.ts +17 -0
  140. package/dist/ui/components/keyboard-help.js +116 -0
  141. package/dist/ui/components/keyboard-help.js.map +1 -0
  142. package/dist/ui/components/keyboard-hints.js +2 -2
  143. package/dist/ui/components/keyboard-hints.js.map +1 -1
  144. package/dist/ui/components/quick-actions.js +43 -7
  145. package/dist/ui/components/quick-actions.js.map +1 -1
  146. package/dist/ui/components/status-bar.d.ts +3 -0
  147. package/dist/ui/components/status-bar.js +25 -16
  148. package/dist/ui/components/status-bar.js.map +1 -1
  149. package/dist/ui/components/toast-notification.d.ts +42 -0
  150. package/dist/ui/components/toast-notification.js +30 -2
  151. package/dist/ui/components/toast-notification.js.map +1 -1
  152. package/dist/ui/components/tool-group-display.js +34 -4
  153. package/dist/ui/components/tool-group-display.js.map +1 -1
  154. package/dist/ui/components/welcome-panel.js +2 -2
  155. package/dist/ui/components/welcome-panel.js.map +1 -1
  156. package/dist/ui/hooks/use-enhanced-input.d.ts +9 -1
  157. package/dist/ui/hooks/use-enhanced-input.js +486 -41
  158. package/dist/ui/hooks/use-enhanced-input.js.map +1 -1
  159. package/dist/ui/hooks/use-input-handler.d.ts +11 -1
  160. package/dist/ui/hooks/use-input-handler.js +67 -3
  161. package/dist/ui/hooks/use-input-handler.js.map +1 -1
  162. package/dist/ui/hooks/use-input-history.d.ts +1 -1
  163. package/dist/ui/hooks/use-input-history.js +50 -14
  164. package/dist/ui/hooks/use-input-history.js.map +1 -1
  165. package/dist/ui/utils/bracketed-paste-handler.d.ts +97 -0
  166. package/dist/ui/utils/bracketed-paste-handler.js +322 -0
  167. package/dist/ui/utils/bracketed-paste-handler.js.map +1 -0
  168. package/dist/ui/utils/change-summarizer.js +16 -6
  169. package/dist/ui/utils/change-summarizer.js.map +1 -1
  170. package/dist/ui/utils/tool-grouper.d.ts +10 -1
  171. package/dist/ui/utils/tool-grouper.js +143 -30
  172. package/dist/ui/utils/tool-grouper.js.map +1 -1
  173. package/dist/utils/auto-accept-logger.d.ts +173 -0
  174. package/dist/utils/auto-accept-logger.js +420 -0
  175. package/dist/utils/auto-accept-logger.js.map +1 -0
  176. package/dist/utils/background-task-manager.d.ts +11 -0
  177. package/dist/utils/background-task-manager.js +124 -38
  178. package/dist/utils/background-task-manager.js.map +1 -1
  179. package/dist/utils/confirmation-service.d.ts +1 -0
  180. package/dist/utils/confirmation-service.js +6 -1
  181. package/dist/utils/confirmation-service.js.map +1 -1
  182. package/dist/utils/encryption.d.ts +8 -0
  183. package/dist/utils/encryption.js +44 -27
  184. package/dist/utils/encryption.js.map +1 -1
  185. package/dist/utils/enhanced-error-messages.d.ts +33 -0
  186. package/dist/utils/enhanced-error-messages.js +420 -0
  187. package/dist/utils/enhanced-error-messages.js.map +1 -0
  188. package/dist/utils/error-handler.d.ts +13 -3
  189. package/dist/utils/error-handler.js +16 -4
  190. package/dist/utils/error-handler.js.map +1 -1
  191. package/dist/utils/external-editor.d.ts +47 -0
  192. package/dist/utils/external-editor.js +179 -0
  193. package/dist/utils/external-editor.js.map +1 -0
  194. package/dist/utils/history-migration.d.ts +9 -0
  195. package/dist/utils/history-migration.js +36 -0
  196. package/dist/utils/history-migration.js.map +1 -0
  197. package/dist/utils/paste-utils.js +12 -11
  198. package/dist/utils/paste-utils.js.map +1 -1
  199. package/dist/utils/rate-limiter.js +7 -0
  200. package/dist/utils/rate-limiter.js.map +1 -1
  201. package/dist/utils/safety-rules.d.ts +64 -0
  202. package/dist/utils/safety-rules.js +225 -0
  203. package/dist/utils/safety-rules.js.map +1 -0
  204. package/dist/utils/settings-manager.d.ts +89 -1
  205. package/dist/utils/settings-manager.js +359 -3
  206. package/dist/utils/settings-manager.js.map +1 -1
  207. package/dist/utils/token-counter.d.ts +2 -0
  208. package/dist/utils/token-counter.js +17 -4
  209. package/dist/utils/token-counter.js.map +1 -1
  210. package/dist/utils/version.d.ts +11 -2
  211. package/dist/utils/version.js +54 -21
  212. package/dist/utils/version.js.map +1 -1
  213. package/package.json +2 -1
@@ -0,0 +1,420 @@
1
+ /**
2
+ * Auto-accept Mode Audit Logger
3
+ *
4
+ * Specialized logger for tracking auto-accepted operations.
5
+ * Integrates with safety rules system to track destructive operations.
6
+ *
7
+ * Design Philosophy:
8
+ * - Every auto-accepted operation must be logged
9
+ * - Track both safe and destructive operations
10
+ * - Configurable retention via settings
11
+ * - Easy retrieval for debugging
12
+ * - Integration with general audit logger for compliance
13
+ */
14
+ import { writeFileSync, readFileSync, existsSync, mkdirSync } from 'fs';
15
+ import { join } from 'path';
16
+ import { homedir } from 'os';
17
+ import { getAuditLogger, AuditCategory, AuditSeverity } from './audit-logger.js';
18
+ export class AutoAcceptLogger {
19
+ static instance = null;
20
+ logs = [];
21
+ maxEntries;
22
+ filepath;
23
+ sessionId;
24
+ enabled;
25
+ constructor(enabled, maxEntries = 1000, filepath) {
26
+ this.enabled = enabled;
27
+ this.maxEntries = maxEntries;
28
+ this.filepath = filepath || this.getDefaultFilepath();
29
+ this.sessionId = this.generateSessionId();
30
+ // Ensure directory exists
31
+ const dir = join(homedir(), '.ax-cli');
32
+ if (!existsSync(dir)) {
33
+ mkdirSync(dir, { recursive: true });
34
+ }
35
+ // Load existing logs from file if filepath provided and exists
36
+ if (this.filepath && existsSync(this.filepath)) {
37
+ this.loadFromFile();
38
+ }
39
+ }
40
+ /**
41
+ * Get singleton instance
42
+ */
43
+ static getInstance(enabled, maxEntries, filepath) {
44
+ if (!AutoAcceptLogger.instance) {
45
+ AutoAcceptLogger.instance = new AutoAcceptLogger(enabled ?? true, maxEntries ?? 1000, filepath);
46
+ }
47
+ return AutoAcceptLogger.instance;
48
+ }
49
+ /**
50
+ * Reset singleton (for testing)
51
+ */
52
+ static resetInstance() {
53
+ AutoAcceptLogger.instance = null;
54
+ }
55
+ /**
56
+ * Generate unique session ID
57
+ */
58
+ generateSessionId() {
59
+ return `session-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;
60
+ }
61
+ /**
62
+ * Get default filepath for auto-accept logs
63
+ */
64
+ getDefaultFilepath() {
65
+ return join(homedir(), '.ax-cli', 'auto-accept-audit.json');
66
+ }
67
+ /**
68
+ * Log an operation
69
+ */
70
+ log(entry) {
71
+ if (!this.enabled) {
72
+ return;
73
+ }
74
+ const fullEntry = {
75
+ ...entry,
76
+ timestamp: new Date().toISOString(),
77
+ sessionId: this.sessionId,
78
+ };
79
+ this.logs.push(fullEntry);
80
+ // Enforce max entries (FIFO)
81
+ if (this.logs.length > this.maxEntries) {
82
+ this.logs = this.logs.slice(-this.maxEntries);
83
+ }
84
+ // Persist to file
85
+ this.saveToFile();
86
+ // Also log to general audit logger for compliance
87
+ this.logToGeneralAudit(fullEntry);
88
+ }
89
+ /**
90
+ * Log to general audit logger for compliance
91
+ */
92
+ logToGeneralAudit(entry) {
93
+ try {
94
+ const auditLogger = getAuditLogger();
95
+ auditLogger.log({
96
+ severity: entry.destructive ? AuditSeverity.WARNING : AuditSeverity.INFO,
97
+ category: entry.operation === 'bash'
98
+ ? AuditCategory.COMMAND_EXECUTION
99
+ : AuditCategory.FILE_OPERATION,
100
+ action: entry.autoAccepted ? 'auto_accept' : 'user_confirmed',
101
+ resource: entry.command || entry.filepath || 'unknown',
102
+ outcome: 'success',
103
+ details: {
104
+ operation: entry.operation,
105
+ destructive: entry.destructive,
106
+ matchedRules: entry.matchedRules,
107
+ scope: entry.scope,
108
+ sessionId: entry.sessionId,
109
+ },
110
+ });
111
+ }
112
+ catch (error) {
113
+ // Silently fail - don't block operation if audit logger fails
114
+ console.error('[AutoAcceptLogger] Failed to log to general audit logger:', error);
115
+ }
116
+ }
117
+ /**
118
+ * Log a bash command
119
+ */
120
+ logBashCommand(command, destructiveOperations, userConfirmed, autoAccepted, scope = 'session') {
121
+ this.log({
122
+ operation: 'bash',
123
+ command,
124
+ details: `Executed bash command: ${command}`,
125
+ destructive: destructiveOperations.length > 0,
126
+ matchedRules: destructiveOperations.map((op) => op.id),
127
+ ruleDetails: destructiveOperations,
128
+ userConfirmed,
129
+ autoAccepted,
130
+ scope,
131
+ });
132
+ }
133
+ /**
134
+ * Log a file operation
135
+ */
136
+ logFileOperation(operation, filepath, destructive, userConfirmed, autoAccepted, scope = 'session') {
137
+ this.log({
138
+ operation,
139
+ filepath,
140
+ details: `${operation} file: ${filepath}`,
141
+ destructive,
142
+ userConfirmed,
143
+ autoAccepted,
144
+ scope,
145
+ });
146
+ }
147
+ /**
148
+ * Get all logs
149
+ */
150
+ getAllLogs() {
151
+ return [...this.logs]; // Return copy
152
+ }
153
+ /**
154
+ * Get logs matching filter
155
+ */
156
+ getFilteredLogs(filter) {
157
+ return this.logs.filter((entry) => {
158
+ // Operation filter
159
+ if (filter.operation && entry.operation !== filter.operation) {
160
+ return false;
161
+ }
162
+ // Destructive filter
163
+ if (filter.destructive !== undefined && entry.destructive !== filter.destructive) {
164
+ return false;
165
+ }
166
+ // Auto-accepted filter
167
+ if (filter.autoAccepted !== undefined && entry.autoAccepted !== filter.autoAccepted) {
168
+ return false;
169
+ }
170
+ // Session ID filter
171
+ if (filter.sessionId && entry.sessionId !== filter.sessionId) {
172
+ return false;
173
+ }
174
+ // Scope filter
175
+ if (filter.scope && entry.scope !== filter.scope) {
176
+ return false;
177
+ }
178
+ // Date range filter
179
+ const entryDate = new Date(entry.timestamp);
180
+ if (filter.startDate && entryDate < filter.startDate) {
181
+ return false;
182
+ }
183
+ if (filter.endDate && entryDate > filter.endDate) {
184
+ return false;
185
+ }
186
+ return true;
187
+ });
188
+ }
189
+ /**
190
+ * Get logs for current session
191
+ */
192
+ getCurrentSessionLogs() {
193
+ return this.getFilteredLogs({ sessionId: this.sessionId });
194
+ }
195
+ /**
196
+ * Get recent logs (last N entries)
197
+ */
198
+ getRecentLogs(count) {
199
+ return this.logs.slice(-count);
200
+ }
201
+ /**
202
+ * Get statistics
203
+ */
204
+ getStats(sessionId) {
205
+ const logs = sessionId
206
+ ? this.getFilteredLogs({ sessionId })
207
+ : this.logs;
208
+ const totalOperations = logs.length;
209
+ const autoAccepted = logs.filter((e) => e.autoAccepted).length;
210
+ const destructive = logs.filter((e) => e.destructive).length;
211
+ const userConfirmed = logs.filter((e) => e.userConfirmed).length;
212
+ // Count unique sessions
213
+ const sessionIds = new Set(logs.map((e) => e.sessionId));
214
+ const sessionCount = sessionIds.size;
215
+ // Count operations
216
+ const operationCounts = {};
217
+ logs.forEach((entry) => {
218
+ operationCounts[entry.operation] = (operationCounts[entry.operation] || 0) + 1;
219
+ });
220
+ const mostCommonOperations = Object.entries(operationCounts)
221
+ .map(([operation, count]) => ({ operation, count }))
222
+ .sort((a, b) => b.count - a.count)
223
+ .slice(0, 5);
224
+ // Count matched rules
225
+ const ruleCounts = {};
226
+ logs.forEach((entry) => {
227
+ if (entry.matchedRules) {
228
+ entry.matchedRules.forEach((rule) => {
229
+ ruleCounts[rule] = (ruleCounts[rule] || 0) + 1;
230
+ });
231
+ }
232
+ });
233
+ const mostTriggeredRules = Object.entries(ruleCounts)
234
+ .map(([rule, count]) => ({ rule, count }))
235
+ .sort((a, b) => b.count - a.count)
236
+ .slice(0, 5);
237
+ return {
238
+ totalOperations,
239
+ autoAccepted,
240
+ destructive,
241
+ userConfirmed,
242
+ sessionCount,
243
+ mostCommonOperations,
244
+ mostTriggeredRules,
245
+ };
246
+ }
247
+ /**
248
+ * Get auto-accepted operations count
249
+ */
250
+ getAutoAcceptedCount(sessionId) {
251
+ const filter = { autoAccepted: true };
252
+ if (sessionId) {
253
+ filter.sessionId = sessionId;
254
+ }
255
+ return this.getFilteredLogs(filter).length;
256
+ }
257
+ /**
258
+ * Get destructive operations count
259
+ */
260
+ getDestructiveCount(sessionId) {
261
+ const filter = { destructive: true };
262
+ if (sessionId) {
263
+ filter.sessionId = sessionId;
264
+ }
265
+ return this.getFilteredLogs(filter).length;
266
+ }
267
+ /**
268
+ * Clear all logs
269
+ */
270
+ clearLogs() {
271
+ this.logs = [];
272
+ if (this.filepath) {
273
+ this.saveToFile();
274
+ }
275
+ }
276
+ /**
277
+ * Export logs to JSON file
278
+ */
279
+ exportToFile(filepath) {
280
+ const data = JSON.stringify(this.logs, null, 2);
281
+ writeFileSync(filepath, data, 'utf-8');
282
+ }
283
+ /**
284
+ * Load logs from file
285
+ */
286
+ loadFromFile() {
287
+ try {
288
+ if (!this.filepath || !existsSync(this.filepath)) {
289
+ return;
290
+ }
291
+ const data = readFileSync(this.filepath, 'utf-8');
292
+ const parsed = JSON.parse(data);
293
+ if (Array.isArray(parsed)) {
294
+ this.logs = parsed.slice(-this.maxEntries); // Only keep last maxEntries
295
+ }
296
+ }
297
+ catch (error) {
298
+ // Silently fail - audit log is not critical
299
+ console.error('[AutoAcceptLogger] Failed to load logs from file:', error);
300
+ }
301
+ }
302
+ /**
303
+ * Save logs to file
304
+ */
305
+ saveToFile() {
306
+ try {
307
+ if (!this.filepath) {
308
+ return;
309
+ }
310
+ const data = JSON.stringify(this.logs, null, 2);
311
+ writeFileSync(this.filepath, data, 'utf-8');
312
+ }
313
+ catch (error) {
314
+ // Silently fail - audit log is not critical
315
+ console.error('[AutoAcceptLogger] Failed to save logs to file:', error);
316
+ }
317
+ }
318
+ /**
319
+ * Format log entry for display
320
+ */
321
+ static formatLogEntry(entry) {
322
+ const timestamp = new Date(entry.timestamp).toLocaleString();
323
+ const destructiveFlag = entry.destructive ? '🔴' : '🟢';
324
+ const autoAcceptFlag = entry.autoAccepted ? '⚡' : '✋';
325
+ const scopeFlag = entry.scope === 'global' ? '🌍' : entry.scope === 'project' ? '📁' : '⏱️';
326
+ let message = `[${timestamp}] ${destructiveFlag} ${autoAcceptFlag} ${scopeFlag} ${entry.operation}`;
327
+ if (entry.command) {
328
+ message += ` - ${entry.command}`;
329
+ }
330
+ else if (entry.filepath) {
331
+ message += ` - ${entry.filepath}`;
332
+ }
333
+ else {
334
+ message += ` - ${entry.details}`;
335
+ }
336
+ if (entry.matchedRules && entry.matchedRules.length > 0) {
337
+ message += ` (rules: ${entry.matchedRules.join(', ')})`;
338
+ }
339
+ return message;
340
+ }
341
+ /**
342
+ * Format all logs for display
343
+ */
344
+ formatAllLogs() {
345
+ if (this.logs.length === 0) {
346
+ return 'No auto-accept operations logged yet.';
347
+ }
348
+ const header = `Auto-accept Audit Log (${this.logs.length} entries, session: ${this.sessionId})\n${'='.repeat(80)}\n`;
349
+ const entries = this.logs.map((entry) => AutoAcceptLogger.formatLogEntry(entry)).join('\n');
350
+ const footer = `\n${'='.repeat(80)}`;
351
+ return header + entries + footer;
352
+ }
353
+ /**
354
+ * Generate summary report
355
+ */
356
+ generateSummary(sessionId) {
357
+ const stats = this.getStats(sessionId);
358
+ if (stats.totalOperations === 0) {
359
+ return 'No auto-accept operations logged yet.';
360
+ }
361
+ const lines = [
362
+ 'Auto-accept Audit Summary',
363
+ '='.repeat(50),
364
+ `Session: ${sessionId || this.sessionId}`,
365
+ '',
366
+ '📊 Operations:',
367
+ ` Total: ${stats.totalOperations}`,
368
+ ` Auto-accepted: ${stats.autoAccepted} (${((stats.autoAccepted / stats.totalOperations) * 100).toFixed(1)}%)`,
369
+ ` Destructive: ${stats.destructive} (${((stats.destructive / stats.totalOperations) * 100).toFixed(1)}%)`,
370
+ ` User Confirmed: ${stats.userConfirmed} (${((stats.userConfirmed / stats.totalOperations) * 100).toFixed(1)}%)`,
371
+ '',
372
+ '🔧 Most Common Operations:',
373
+ ...stats.mostCommonOperations.map((op) => ` ${op.operation}: ${op.count}`),
374
+ ];
375
+ if (stats.mostTriggeredRules.length > 0) {
376
+ lines.push('', '⚠️ Most Triggered Safety Rules:');
377
+ stats.mostTriggeredRules.forEach((rule) => {
378
+ lines.push(` ${rule.rule}: ${rule.count}`);
379
+ });
380
+ }
381
+ return lines.join('\n');
382
+ }
383
+ /**
384
+ * Get current session ID
385
+ */
386
+ getCurrentSessionId() {
387
+ return this.sessionId;
388
+ }
389
+ /**
390
+ * Check if logger is enabled
391
+ */
392
+ isEnabled() {
393
+ return this.enabled;
394
+ }
395
+ /**
396
+ * Enable logging
397
+ */
398
+ enable() {
399
+ this.enabled = true;
400
+ }
401
+ /**
402
+ * Disable logging
403
+ */
404
+ disable() {
405
+ this.enabled = false;
406
+ }
407
+ }
408
+ /**
409
+ * Get singleton instance of auto-accept audit logger
410
+ */
411
+ export function getAutoAcceptLogger() {
412
+ return AutoAcceptLogger.getInstance();
413
+ }
414
+ /**
415
+ * Initialize auto-accept audit logger with settings
416
+ */
417
+ export function initializeAutoAcceptLogger(enabled, maxEntries, filepath) {
418
+ return AutoAcceptLogger.getInstance(enabled, maxEntries, filepath);
419
+ }
420
+ //# sourceMappingURL=auto-accept-logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-accept-logger.js","sourceRoot":"","sources":["../../src/utils/auto-accept-logger.ts"],"names":[],"mappings":"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"}
@@ -11,6 +11,13 @@ export interface BackgroundTask {
11
11
  stdout: string[];
12
12
  stderr: string[];
13
13
  process?: ChildProcess;
14
+ listeners?: {
15
+ onStdout?: (data: Buffer) => void;
16
+ onStderr?: (data: Buffer) => void;
17
+ onClose?: (code: number | null) => void;
18
+ onError?: (error: Error) => void;
19
+ };
20
+ forceKillTimeout?: NodeJS.Timeout;
14
21
  }
15
22
  export interface TaskOutput {
16
23
  stdout: string;
@@ -40,6 +47,10 @@ export declare class BackgroundTaskManager extends EventEmitter {
40
47
  * Generate a unique task ID
41
48
  */
42
49
  private generateTaskId;
50
+ /**
51
+ * MEMORY LEAK FIX: Clean up task listeners to prevent EventEmitter leaks
52
+ */
53
+ private cleanupTaskListeners;
43
54
  /**
44
55
  * Spawn a command in the background
45
56
  * @returns Task ID