@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.
- package/README.md +128 -56
- package/dist/agent/context-manager.d.ts +15 -1
- package/dist/agent/context-manager.js +50 -19
- package/dist/agent/context-manager.js.map +1 -1
- package/dist/agent/dependency-resolver.js +13 -7
- package/dist/agent/dependency-resolver.js.map +1 -1
- package/dist/agent/llm-agent.d.ts +35 -0
- package/dist/agent/llm-agent.js +137 -4
- package/dist/agent/llm-agent.js.map +1 -1
- package/dist/agent/status-reporter.d.ts +114 -0
- package/dist/agent/status-reporter.js +335 -0
- package/dist/agent/status-reporter.js.map +1 -0
- package/dist/analyzers/best-practices/rules/typescript/no-magic-numbers.js +8 -2
- package/dist/analyzers/best-practices/rules/typescript/no-magic-numbers.js.map +1 -1
- package/dist/analyzers/best-practices/rules/typescript/no-unused-vars.js +3 -1
- package/dist/analyzers/best-practices/rules/typescript/no-unused-vars.js.map +1 -1
- package/dist/analyzers/best-practices/rules/typescript/prefer-const.js +3 -1
- package/dist/analyzers/best-practices/rules/typescript/prefer-const.js.map +1 -1
- package/dist/analyzers/best-practices/rules/typescript/prefer-readonly.js +3 -1
- package/dist/analyzers/best-practices/rules/typescript/prefer-readonly.js.map +1 -1
- package/dist/analyzers/code-smells/detectors/duplicate-code-detector.js +9 -3
- package/dist/analyzers/code-smells/detectors/duplicate-code-detector.js.map +1 -1
- package/dist/analyzers/git/churn-calculator.d.ts +1 -0
- package/dist/analyzers/git/churn-calculator.js +25 -6
- package/dist/analyzers/git/churn-calculator.js.map +1 -1
- package/dist/analyzers/git/hotspot-detector.js +2 -2
- package/dist/analyzers/git/hotspot-detector.js.map +1 -1
- package/dist/analyzers/metrics/metrics-analyzer.js +1 -1
- package/dist/analyzers/metrics/metrics-analyzer.js.map +1 -1
- package/dist/analyzers/security/security-analyzer.js +1 -1
- package/dist/analyzers/security/security-analyzer.js.map +1 -1
- package/dist/checkpoint/manager.d.ts +1 -0
- package/dist/checkpoint/manager.js +49 -9
- package/dist/checkpoint/manager.js.map +1 -1
- package/dist/checkpoint/storage.js +2 -2
- package/dist/checkpoint/storage.js.map +1 -1
- package/dist/commands/mcp-migrate.d.ts +9 -0
- package/dist/commands/mcp-migrate.js +172 -0
- package/dist/commands/mcp-migrate.js.map +1 -0
- package/dist/commands/status.d.ts +7 -0
- package/dist/commands/status.js +211 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/vscode.d.ts +7 -0
- package/dist/commands/vscode.js +363 -0
- package/dist/commands/vscode.js.map +1 -0
- package/dist/index.js +79 -30
- package/dist/index.js.map +1 -1
- package/dist/llm/client.js +22 -4
- package/dist/llm/client.js.map +1 -1
- package/dist/mcp/automatosx-loader.d.ts +84 -0
- package/dist/mcp/automatosx-loader.js +238 -0
- package/dist/mcp/automatosx-loader.js.map +1 -0
- package/dist/mcp/client-mutex-patch.d.ts +36 -0
- package/dist/mcp/client-mutex-patch.js +75 -0
- package/dist/mcp/client-mutex-patch.js.map +1 -0
- package/dist/mcp/client-v2.d.ts +229 -0
- package/dist/mcp/client-v2.js +740 -0
- package/dist/mcp/client-v2.js.map +1 -0
- package/dist/mcp/client.d.ts +111 -13
- package/dist/mcp/client.js +168 -253
- package/dist/mcp/client.js.map +1 -1
- package/dist/mcp/config-detector-v2.d.ts +83 -0
- package/dist/mcp/config-detector-v2.js +328 -0
- package/dist/mcp/config-detector-v2.js.map +1 -0
- package/dist/mcp/config-detector.d.ts +90 -0
- package/dist/mcp/config-detector.js +242 -0
- package/dist/mcp/config-detector.js.map +1 -0
- package/dist/mcp/config-migrator-v2.d.ts +89 -0
- package/dist/mcp/config-migrator-v2.js +288 -0
- package/dist/mcp/config-migrator-v2.js.map +1 -0
- package/dist/mcp/config-migrator.d.ts +63 -0
- package/dist/mcp/config-migrator.js +269 -0
- package/dist/mcp/config-migrator.js.map +1 -0
- package/dist/mcp/config-v2.d.ts +106 -0
- package/dist/mcp/config-v2.js +417 -0
- package/dist/mcp/config-v2.js.map +1 -0
- package/dist/mcp/config.d.ts +12 -1
- package/dist/mcp/config.js +95 -10
- package/dist/mcp/config.js.map +1 -1
- package/dist/mcp/error-formatter.d.ts +46 -0
- package/dist/mcp/error-formatter.js +244 -0
- package/dist/mcp/error-formatter.js.map +1 -0
- package/dist/mcp/health.d.ts +5 -0
- package/dist/mcp/health.js +22 -2
- package/dist/mcp/health.js.map +1 -1
- package/dist/mcp/invariants.d.ts +141 -0
- package/dist/mcp/invariants.js +243 -0
- package/dist/mcp/invariants.js.map +1 -0
- package/dist/mcp/mutex-safe.d.ts +153 -0
- package/dist/mcp/mutex-safe.js +260 -0
- package/dist/mcp/mutex-safe.js.map +1 -0
- package/dist/mcp/mutex.d.ts +73 -0
- package/dist/mcp/mutex.js +130 -0
- package/dist/mcp/mutex.js.map +1 -0
- package/dist/mcp/reconnection.d.ts +4 -0
- package/dist/mcp/reconnection.js +15 -0
- package/dist/mcp/reconnection.js.map +1 -1
- package/dist/mcp/transports-v2.d.ts +152 -0
- package/dist/mcp/transports-v2.js +481 -0
- package/dist/mcp/transports-v2.js.map +1 -0
- package/dist/mcp/type-safety.d.ts +231 -0
- package/dist/mcp/type-safety.js +273 -0
- package/dist/mcp/type-safety.js.map +1 -0
- package/dist/planner/task-planner.js +13 -0
- package/dist/planner/task-planner.js.map +1 -1
- package/dist/planner/types.d.ts +6 -6
- package/dist/schemas/confirmation-schemas.d.ts +2 -2
- package/dist/schemas/settings-schemas.d.ts +196 -0
- package/dist/schemas/settings-schemas.js +146 -5
- package/dist/schemas/settings-schemas.js.map +1 -1
- package/dist/sdk/index.d.ts +118 -2
- package/dist/sdk/index.js +146 -4
- package/dist/sdk/index.js.map +1 -1
- package/dist/sdk/testing.d.ts +182 -0
- package/dist/sdk/testing.js +231 -0
- package/dist/sdk/testing.js.map +1 -1
- package/dist/sdk/version.d.ts +114 -15
- package/dist/sdk/version.js +137 -15
- package/dist/sdk/version.js.map +1 -1
- package/dist/tools/bash.js +54 -9
- package/dist/tools/bash.js.map +1 -1
- package/dist/tools/registry.d.ts +146 -0
- package/dist/tools/registry.js +170 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/search.js +12 -2
- package/dist/tools/search.js.map +1 -1
- package/dist/tools/text-editor.js +84 -26
- package/dist/tools/text-editor.js.map +1 -1
- package/dist/ui/components/chat-history.js +6 -1
- package/dist/ui/components/chat-history.js.map +1 -1
- package/dist/ui/components/chat-input.d.ts +2 -1
- package/dist/ui/components/chat-input.js +5 -2
- package/dist/ui/components/chat-input.js.map +1 -1
- package/dist/ui/components/chat-interface.js +187 -5
- package/dist/ui/components/chat-interface.js.map +1 -1
- package/dist/ui/components/context-breakdown.d.ts +23 -0
- package/dist/ui/components/context-breakdown.js +124 -0
- package/dist/ui/components/context-breakdown.js.map +1 -0
- package/dist/ui/components/keyboard-help.d.ts +17 -0
- package/dist/ui/components/keyboard-help.js +116 -0
- package/dist/ui/components/keyboard-help.js.map +1 -0
- package/dist/ui/components/keyboard-hints.js +2 -2
- package/dist/ui/components/keyboard-hints.js.map +1 -1
- package/dist/ui/components/quick-actions.js +43 -7
- package/dist/ui/components/quick-actions.js.map +1 -1
- package/dist/ui/components/status-bar.d.ts +3 -0
- package/dist/ui/components/status-bar.js +25 -16
- package/dist/ui/components/status-bar.js.map +1 -1
- package/dist/ui/components/toast-notification.d.ts +42 -0
- package/dist/ui/components/toast-notification.js +30 -2
- package/dist/ui/components/toast-notification.js.map +1 -1
- package/dist/ui/components/tool-group-display.js +34 -4
- package/dist/ui/components/tool-group-display.js.map +1 -1
- package/dist/ui/components/welcome-panel.js +2 -2
- package/dist/ui/components/welcome-panel.js.map +1 -1
- package/dist/ui/hooks/use-enhanced-input.d.ts +9 -1
- package/dist/ui/hooks/use-enhanced-input.js +486 -41
- package/dist/ui/hooks/use-enhanced-input.js.map +1 -1
- package/dist/ui/hooks/use-input-handler.d.ts +11 -1
- package/dist/ui/hooks/use-input-handler.js +67 -3
- package/dist/ui/hooks/use-input-handler.js.map +1 -1
- package/dist/ui/hooks/use-input-history.d.ts +1 -1
- package/dist/ui/hooks/use-input-history.js +50 -14
- package/dist/ui/hooks/use-input-history.js.map +1 -1
- package/dist/ui/utils/bracketed-paste-handler.d.ts +97 -0
- package/dist/ui/utils/bracketed-paste-handler.js +322 -0
- package/dist/ui/utils/bracketed-paste-handler.js.map +1 -0
- package/dist/ui/utils/change-summarizer.js +16 -6
- package/dist/ui/utils/change-summarizer.js.map +1 -1
- package/dist/ui/utils/tool-grouper.d.ts +10 -1
- package/dist/ui/utils/tool-grouper.js +143 -30
- package/dist/ui/utils/tool-grouper.js.map +1 -1
- package/dist/utils/auto-accept-logger.d.ts +173 -0
- package/dist/utils/auto-accept-logger.js +420 -0
- package/dist/utils/auto-accept-logger.js.map +1 -0
- package/dist/utils/background-task-manager.d.ts +11 -0
- package/dist/utils/background-task-manager.js +124 -38
- package/dist/utils/background-task-manager.js.map +1 -1
- package/dist/utils/confirmation-service.d.ts +1 -0
- package/dist/utils/confirmation-service.js +6 -1
- package/dist/utils/confirmation-service.js.map +1 -1
- package/dist/utils/encryption.d.ts +8 -0
- package/dist/utils/encryption.js +44 -27
- package/dist/utils/encryption.js.map +1 -1
- package/dist/utils/enhanced-error-messages.d.ts +33 -0
- package/dist/utils/enhanced-error-messages.js +420 -0
- package/dist/utils/enhanced-error-messages.js.map +1 -0
- package/dist/utils/error-handler.d.ts +13 -3
- package/dist/utils/error-handler.js +16 -4
- package/dist/utils/error-handler.js.map +1 -1
- package/dist/utils/external-editor.d.ts +47 -0
- package/dist/utils/external-editor.js +179 -0
- package/dist/utils/external-editor.js.map +1 -0
- package/dist/utils/history-migration.d.ts +9 -0
- package/dist/utils/history-migration.js +36 -0
- package/dist/utils/history-migration.js.map +1 -0
- package/dist/utils/paste-utils.js +12 -11
- package/dist/utils/paste-utils.js.map +1 -1
- package/dist/utils/rate-limiter.js +7 -0
- package/dist/utils/rate-limiter.js.map +1 -1
- package/dist/utils/safety-rules.d.ts +64 -0
- package/dist/utils/safety-rules.js +225 -0
- package/dist/utils/safety-rules.js.map +1 -0
- package/dist/utils/settings-manager.d.ts +89 -1
- package/dist/utils/settings-manager.js +359 -3
- package/dist/utils/settings-manager.js.map +1 -1
- package/dist/utils/token-counter.d.ts +2 -0
- package/dist/utils/token-counter.js +17 -4
- package/dist/utils/token-counter.js.map +1 -1
- package/dist/utils/version.d.ts +11 -2
- package/dist/utils/version.js +54 -21
- package/dist/utils/version.js.map +1 -1
- package/package.json +2 -1
|
@@ -3,6 +3,58 @@
|
|
|
3
3
|
* Groups consecutive tool operations for cleaner UX in quiet mode
|
|
4
4
|
*/
|
|
5
5
|
import { UI_CONFIG } from '../../constants.js';
|
|
6
|
+
/**
|
|
7
|
+
* Cache for parsed tool arguments to avoid redundant JSON.parse calls
|
|
8
|
+
* Key: toolCall.id (unique per tool call)
|
|
9
|
+
* Value: Parsed arguments object
|
|
10
|
+
*/
|
|
11
|
+
const parsedArgsCache = new Map();
|
|
12
|
+
/**
|
|
13
|
+
* Clear the parsed arguments cache
|
|
14
|
+
* Useful when chat history is cleared to prevent memory leaks
|
|
15
|
+
*/
|
|
16
|
+
export function clearToolGroupCache() {
|
|
17
|
+
parsedArgsCache.clear();
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Parse tool arguments with caching
|
|
21
|
+
* Uses tool call ID as cache key to avoid redundant JSON.parse
|
|
22
|
+
*
|
|
23
|
+
* @param toolCallId - Unique identifier for this tool call
|
|
24
|
+
* @param argsStr - JSON string of arguments
|
|
25
|
+
* @returns Parsed arguments object
|
|
26
|
+
*/
|
|
27
|
+
function parseToolArguments(toolCallId, argsStr) {
|
|
28
|
+
// Check cache first
|
|
29
|
+
const cached = parsedArgsCache.get(toolCallId);
|
|
30
|
+
if (cached !== undefined) {
|
|
31
|
+
return cached;
|
|
32
|
+
}
|
|
33
|
+
// Limit cache size BEFORE adding new entry
|
|
34
|
+
if (parsedArgsCache.size >= 500) {
|
|
35
|
+
// Collect oldest 100 keys first (Map maintains insertion order)
|
|
36
|
+
const keysToDelete = [];
|
|
37
|
+
for (const key of parsedArgsCache.keys()) {
|
|
38
|
+
keysToDelete.push(key);
|
|
39
|
+
if (keysToDelete.length >= 100)
|
|
40
|
+
break;
|
|
41
|
+
}
|
|
42
|
+
// Delete collected keys (avoid iterator invalidation)
|
|
43
|
+
for (const key of keysToDelete) {
|
|
44
|
+
parsedArgsCache.delete(key);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
// Parse and cache
|
|
48
|
+
try {
|
|
49
|
+
const args = JSON.parse(argsStr);
|
|
50
|
+
parsedArgsCache.set(toolCallId, args);
|
|
51
|
+
return args;
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
// Return empty object on parse error (don't cache failures)
|
|
55
|
+
return {};
|
|
56
|
+
}
|
|
57
|
+
}
|
|
6
58
|
/**
|
|
7
59
|
* Check if an entry is a ToolGroup
|
|
8
60
|
*/
|
|
@@ -19,41 +71,64 @@ function getResourceFromToolCall(entry) {
|
|
|
19
71
|
const toolName = entry.toolCall?.function?.name;
|
|
20
72
|
if (!toolName)
|
|
21
73
|
return '';
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
if (!argsStr)
|
|
25
|
-
return '';
|
|
26
|
-
const args = JSON.parse(argsStr);
|
|
27
|
-
// File operations
|
|
28
|
-
if (toolName === 'view_file' || toolName === 'str_replace_editor' || toolName === 'create_file') {
|
|
29
|
-
return args.path || args.file_path || '';
|
|
30
|
-
}
|
|
31
|
-
// Search operations
|
|
32
|
-
if (toolName === 'search') {
|
|
33
|
-
return `search:${args.query || ''}`;
|
|
34
|
-
}
|
|
35
|
-
// Bash operations
|
|
36
|
-
if (toolName === 'bash') {
|
|
37
|
-
const cmd = args.command || '';
|
|
38
|
-
// Group by command type (git, npm, etc)
|
|
39
|
-
const cmdType = cmd.split(' ')[0];
|
|
40
|
-
return `bash:${cmdType}`;
|
|
41
|
-
}
|
|
42
|
-
// Todo operations
|
|
43
|
-
if (toolName === 'create_todo_list' || toolName === 'update_todo_list') {
|
|
44
|
-
return 'todo';
|
|
45
|
-
}
|
|
74
|
+
const argsStr = entry.toolCall?.function?.arguments;
|
|
75
|
+
if (!argsStr)
|
|
46
76
|
return '';
|
|
77
|
+
// Use toolCall.id for caching (unique per call)
|
|
78
|
+
// Fallback to argsStr hash if no ID (shouldn't happen in practice)
|
|
79
|
+
const toolCallId = entry.toolCall?.id || `fallback:${argsStr.substring(0, 50)}`;
|
|
80
|
+
const args = parseToolArguments(toolCallId, argsStr);
|
|
81
|
+
// File operations
|
|
82
|
+
if (toolName === 'view_file' || toolName === 'str_replace_editor' || toolName === 'create_file') {
|
|
83
|
+
return args.path || args.file_path || '';
|
|
47
84
|
}
|
|
48
|
-
|
|
49
|
-
|
|
85
|
+
// Search operations
|
|
86
|
+
if (toolName === 'search') {
|
|
87
|
+
return `search:${args.query || ''}`;
|
|
88
|
+
}
|
|
89
|
+
// Bash operations
|
|
90
|
+
if (toolName === 'bash') {
|
|
91
|
+
const cmd = args.command || '';
|
|
92
|
+
// Group by command type (git, npm, etc)
|
|
93
|
+
// Handle empty/whitespace commands by trimming first
|
|
94
|
+
const trimmedCmd = cmd.trim();
|
|
95
|
+
if (!trimmedCmd) {
|
|
96
|
+
// Empty command - use generic bash identifier
|
|
97
|
+
return 'bash:empty';
|
|
98
|
+
}
|
|
99
|
+
const cmdType = trimmedCmd.split(/\s+/)[0]; // Use \s+ to handle multiple spaces
|
|
100
|
+
return `bash:${cmdType}`;
|
|
101
|
+
}
|
|
102
|
+
// Bash output operations (checking background tasks)
|
|
103
|
+
if (toolName === 'bash_output') {
|
|
104
|
+
const taskId = args.task_id || '';
|
|
105
|
+
return taskId ? `task:${taskId}` : 'task:unknown';
|
|
106
|
+
}
|
|
107
|
+
// Todo operations
|
|
108
|
+
if (toolName === 'create_todo_list' || toolName === 'update_todo_list') {
|
|
109
|
+
return 'todo';
|
|
110
|
+
}
|
|
111
|
+
// Web search operations
|
|
112
|
+
if (toolName === 'web_search') {
|
|
113
|
+
const query = args.query || '';
|
|
114
|
+
return query ? `websearch:${query}` : 'websearch:unknown';
|
|
115
|
+
}
|
|
116
|
+
// Analysis operations
|
|
117
|
+
if (toolName === 'analyze_architecture') {
|
|
118
|
+
const projectPath = args.projectPath || args.project_path || '';
|
|
119
|
+
return projectPath ? `analysis:${projectPath}` : 'analysis:project';
|
|
50
120
|
}
|
|
121
|
+
if (toolName === 'validate_best_practices') {
|
|
122
|
+
const path = args.path || '';
|
|
123
|
+
return path ? `validation:${path}` : 'validation:project';
|
|
124
|
+
}
|
|
125
|
+
return '';
|
|
51
126
|
}
|
|
52
127
|
/**
|
|
53
128
|
* Determine group type based on tool name
|
|
54
129
|
*/
|
|
55
130
|
function getGroupType(toolName) {
|
|
56
|
-
if (toolName === 'bash')
|
|
131
|
+
if (toolName === 'bash' || toolName === 'bash_output')
|
|
57
132
|
return 'bash';
|
|
58
133
|
if (toolName === 'search')
|
|
59
134
|
return 'search';
|
|
@@ -61,6 +136,10 @@ function getGroupType(toolName) {
|
|
|
61
136
|
return 'todo';
|
|
62
137
|
if (toolName === 'view_file' || toolName === 'str_replace_editor' || toolName === 'create_file')
|
|
63
138
|
return 'file';
|
|
139
|
+
if (toolName === 'web_search')
|
|
140
|
+
return 'web';
|
|
141
|
+
if (toolName === 'analyze_architecture' || toolName === 'validate_best_practices')
|
|
142
|
+
return 'analysis';
|
|
64
143
|
return 'mixed';
|
|
65
144
|
}
|
|
66
145
|
/**
|
|
@@ -77,8 +156,20 @@ function shouldGroup(current, previous, groupSize, maxGroupSize, timeWindow) {
|
|
|
77
156
|
return false;
|
|
78
157
|
}
|
|
79
158
|
// Check time window
|
|
80
|
-
|
|
81
|
-
|
|
159
|
+
// Safely handle timestamps - could be Date objects or strings from deserialization
|
|
160
|
+
const currentTime = current.timestamp instanceof Date
|
|
161
|
+
? current.timestamp.getTime()
|
|
162
|
+
: new Date(current.timestamp).getTime();
|
|
163
|
+
const previousTime = previous.timestamp instanceof Date
|
|
164
|
+
? previous.timestamp.getTime()
|
|
165
|
+
: new Date(previous.timestamp).getTime();
|
|
166
|
+
// Reject if timestamps are invalid (NaN)
|
|
167
|
+
if (Number.isNaN(currentTime) || Number.isNaN(previousTime)) {
|
|
168
|
+
return false;
|
|
169
|
+
}
|
|
170
|
+
const timeDiff = currentTime - previousTime;
|
|
171
|
+
// Reject if time difference is negative (out of order) or exceeds window
|
|
172
|
+
if (timeDiff < 0 || timeDiff > timeWindow) {
|
|
82
173
|
return false;
|
|
83
174
|
}
|
|
84
175
|
// Must operate on the same resource
|
|
@@ -167,6 +258,8 @@ export function getOperationCounts(group) {
|
|
|
167
258
|
searches: 0,
|
|
168
259
|
bash: 0,
|
|
169
260
|
todos: 0,
|
|
261
|
+
web: 0,
|
|
262
|
+
analysis: 0,
|
|
170
263
|
other: 0,
|
|
171
264
|
};
|
|
172
265
|
for (const op of group.operations) {
|
|
@@ -187,12 +280,20 @@ export function getOperationCounts(group) {
|
|
|
187
280
|
counts.searches++;
|
|
188
281
|
break;
|
|
189
282
|
case 'bash':
|
|
283
|
+
case 'bash_output':
|
|
190
284
|
counts.bash++;
|
|
191
285
|
break;
|
|
192
286
|
case 'create_todo_list':
|
|
193
287
|
case 'update_todo_list':
|
|
194
288
|
counts.todos++;
|
|
195
289
|
break;
|
|
290
|
+
case 'web_search':
|
|
291
|
+
counts.web++;
|
|
292
|
+
break;
|
|
293
|
+
case 'analyze_architecture':
|
|
294
|
+
case 'validate_best_practices':
|
|
295
|
+
counts.analysis++;
|
|
296
|
+
break;
|
|
196
297
|
default:
|
|
197
298
|
counts.other++;
|
|
198
299
|
}
|
|
@@ -201,14 +302,26 @@ export function getOperationCounts(group) {
|
|
|
201
302
|
}
|
|
202
303
|
/**
|
|
203
304
|
* Get execution duration for a group in milliseconds
|
|
305
|
+
* Returns 0 if timestamps are invalid
|
|
204
306
|
*/
|
|
205
307
|
export function getGroupDuration(group) {
|
|
206
|
-
|
|
308
|
+
const startMs = group.startTime.getTime();
|
|
309
|
+
const endMs = group.endTime.getTime();
|
|
310
|
+
// Handle Invalid Date objects (getTime() returns NaN)
|
|
311
|
+
if (Number.isNaN(startMs) || Number.isNaN(endMs)) {
|
|
312
|
+
return 0;
|
|
313
|
+
}
|
|
314
|
+
return endMs - startMs;
|
|
207
315
|
}
|
|
208
316
|
/**
|
|
209
317
|
* Format duration in human-readable form
|
|
318
|
+
* Returns "0ms" for invalid durations (NaN, negative, etc.)
|
|
210
319
|
*/
|
|
211
320
|
export function formatDuration(ms) {
|
|
321
|
+
// Handle invalid durations
|
|
322
|
+
if (!Number.isFinite(ms) || ms < 0) {
|
|
323
|
+
return '0ms';
|
|
324
|
+
}
|
|
212
325
|
if (ms < 1000) {
|
|
213
326
|
return `${ms}ms`;
|
|
214
327
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-grouper.js","sourceRoot":"","sources":["../../../src/ui/utils/tool-grouper.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"tool-grouper.js","sourceRoot":"","sources":["../../../src/ui/utils/tool-grouper.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,173 @@
|
|
|
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 type { DestructiveOperation } from './safety-rules.js';
|
|
15
|
+
export interface AutoAcceptLogEntry {
|
|
16
|
+
timestamp: string;
|
|
17
|
+
sessionId: string;
|
|
18
|
+
operation: string;
|
|
19
|
+
command?: string;
|
|
20
|
+
filepath?: string;
|
|
21
|
+
details: string;
|
|
22
|
+
destructive: boolean;
|
|
23
|
+
matchedRules?: string[];
|
|
24
|
+
ruleDetails?: DestructiveOperation[];
|
|
25
|
+
userConfirmed: boolean;
|
|
26
|
+
autoAccepted: boolean;
|
|
27
|
+
scope: 'session' | 'project' | 'global';
|
|
28
|
+
}
|
|
29
|
+
export interface AutoAcceptLogFilter {
|
|
30
|
+
operation?: string;
|
|
31
|
+
destructive?: boolean;
|
|
32
|
+
autoAccepted?: boolean;
|
|
33
|
+
sessionId?: string;
|
|
34
|
+
startDate?: Date;
|
|
35
|
+
endDate?: Date;
|
|
36
|
+
scope?: 'session' | 'project' | 'global';
|
|
37
|
+
}
|
|
38
|
+
export interface AutoAcceptStats {
|
|
39
|
+
totalOperations: number;
|
|
40
|
+
autoAccepted: number;
|
|
41
|
+
destructive: number;
|
|
42
|
+
userConfirmed: number;
|
|
43
|
+
sessionCount: number;
|
|
44
|
+
mostCommonOperations: Array<{
|
|
45
|
+
operation: string;
|
|
46
|
+
count: number;
|
|
47
|
+
}>;
|
|
48
|
+
mostTriggeredRules: Array<{
|
|
49
|
+
rule: string;
|
|
50
|
+
count: number;
|
|
51
|
+
}>;
|
|
52
|
+
}
|
|
53
|
+
export declare class AutoAcceptLogger {
|
|
54
|
+
private static instance;
|
|
55
|
+
private logs;
|
|
56
|
+
private maxEntries;
|
|
57
|
+
private filepath;
|
|
58
|
+
private sessionId;
|
|
59
|
+
private enabled;
|
|
60
|
+
private constructor();
|
|
61
|
+
/**
|
|
62
|
+
* Get singleton instance
|
|
63
|
+
*/
|
|
64
|
+
static getInstance(enabled?: boolean, maxEntries?: number, filepath?: string): AutoAcceptLogger;
|
|
65
|
+
/**
|
|
66
|
+
* Reset singleton (for testing)
|
|
67
|
+
*/
|
|
68
|
+
static resetInstance(): void;
|
|
69
|
+
/**
|
|
70
|
+
* Generate unique session ID
|
|
71
|
+
*/
|
|
72
|
+
private generateSessionId;
|
|
73
|
+
/**
|
|
74
|
+
* Get default filepath for auto-accept logs
|
|
75
|
+
*/
|
|
76
|
+
private getDefaultFilepath;
|
|
77
|
+
/**
|
|
78
|
+
* Log an operation
|
|
79
|
+
*/
|
|
80
|
+
log(entry: Omit<AutoAcceptLogEntry, 'timestamp' | 'sessionId'>): void;
|
|
81
|
+
/**
|
|
82
|
+
* Log to general audit logger for compliance
|
|
83
|
+
*/
|
|
84
|
+
private logToGeneralAudit;
|
|
85
|
+
/**
|
|
86
|
+
* Log a bash command
|
|
87
|
+
*/
|
|
88
|
+
logBashCommand(command: string, destructiveOperations: DestructiveOperation[], userConfirmed: boolean, autoAccepted: boolean, scope?: 'session' | 'project' | 'global'): void;
|
|
89
|
+
/**
|
|
90
|
+
* Log a file operation
|
|
91
|
+
*/
|
|
92
|
+
logFileOperation(operation: 'edit' | 'write' | 'delete', filepath: string, destructive: boolean, userConfirmed: boolean, autoAccepted: boolean, scope?: 'session' | 'project' | 'global'): void;
|
|
93
|
+
/**
|
|
94
|
+
* Get all logs
|
|
95
|
+
*/
|
|
96
|
+
getAllLogs(): AutoAcceptLogEntry[];
|
|
97
|
+
/**
|
|
98
|
+
* Get logs matching filter
|
|
99
|
+
*/
|
|
100
|
+
getFilteredLogs(filter: AutoAcceptLogFilter): AutoAcceptLogEntry[];
|
|
101
|
+
/**
|
|
102
|
+
* Get logs for current session
|
|
103
|
+
*/
|
|
104
|
+
getCurrentSessionLogs(): AutoAcceptLogEntry[];
|
|
105
|
+
/**
|
|
106
|
+
* Get recent logs (last N entries)
|
|
107
|
+
*/
|
|
108
|
+
getRecentLogs(count: number): AutoAcceptLogEntry[];
|
|
109
|
+
/**
|
|
110
|
+
* Get statistics
|
|
111
|
+
*/
|
|
112
|
+
getStats(sessionId?: string): AutoAcceptStats;
|
|
113
|
+
/**
|
|
114
|
+
* Get auto-accepted operations count
|
|
115
|
+
*/
|
|
116
|
+
getAutoAcceptedCount(sessionId?: string): number;
|
|
117
|
+
/**
|
|
118
|
+
* Get destructive operations count
|
|
119
|
+
*/
|
|
120
|
+
getDestructiveCount(sessionId?: string): number;
|
|
121
|
+
/**
|
|
122
|
+
* Clear all logs
|
|
123
|
+
*/
|
|
124
|
+
clearLogs(): void;
|
|
125
|
+
/**
|
|
126
|
+
* Export logs to JSON file
|
|
127
|
+
*/
|
|
128
|
+
exportToFile(filepath: string): void;
|
|
129
|
+
/**
|
|
130
|
+
* Load logs from file
|
|
131
|
+
*/
|
|
132
|
+
private loadFromFile;
|
|
133
|
+
/**
|
|
134
|
+
* Save logs to file
|
|
135
|
+
*/
|
|
136
|
+
private saveToFile;
|
|
137
|
+
/**
|
|
138
|
+
* Format log entry for display
|
|
139
|
+
*/
|
|
140
|
+
static formatLogEntry(entry: AutoAcceptLogEntry): string;
|
|
141
|
+
/**
|
|
142
|
+
* Format all logs for display
|
|
143
|
+
*/
|
|
144
|
+
formatAllLogs(): string;
|
|
145
|
+
/**
|
|
146
|
+
* Generate summary report
|
|
147
|
+
*/
|
|
148
|
+
generateSummary(sessionId?: string): string;
|
|
149
|
+
/**
|
|
150
|
+
* Get current session ID
|
|
151
|
+
*/
|
|
152
|
+
getCurrentSessionId(): string;
|
|
153
|
+
/**
|
|
154
|
+
* Check if logger is enabled
|
|
155
|
+
*/
|
|
156
|
+
isEnabled(): boolean;
|
|
157
|
+
/**
|
|
158
|
+
* Enable logging
|
|
159
|
+
*/
|
|
160
|
+
enable(): void;
|
|
161
|
+
/**
|
|
162
|
+
* Disable logging
|
|
163
|
+
*/
|
|
164
|
+
disable(): void;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Get singleton instance of auto-accept audit logger
|
|
168
|
+
*/
|
|
169
|
+
export declare function getAutoAcceptLogger(): AutoAcceptLogger;
|
|
170
|
+
/**
|
|
171
|
+
* Initialize auto-accept audit logger with settings
|
|
172
|
+
*/
|
|
173
|
+
export declare function initializeAutoAcceptLogger(enabled: boolean, maxEntries: number, filepath?: string): AutoAcceptLogger;
|