centaurus-cli 2.9.1 → 2.9.3
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/dist/cli-adapter.d.ts +76 -3
- package/dist/cli-adapter.d.ts.map +1 -1
- package/dist/cli-adapter.js +593 -230
- package/dist/cli-adapter.js.map +1 -1
- package/dist/config/mcp-config-manager.d.ts +21 -0
- package/dist/config/mcp-config-manager.d.ts.map +1 -1
- package/dist/config/mcp-config-manager.js +184 -1
- package/dist/config/mcp-config-manager.js.map +1 -1
- package/dist/config/models.d.ts +1 -0
- package/dist/config/models.d.ts.map +1 -1
- package/dist/config/models.js +9 -2
- package/dist/config/models.js.map +1 -1
- package/dist/config/slash-commands.d.ts +3 -0
- package/dist/config/slash-commands.d.ts.map +1 -1
- package/dist/config/slash-commands.js +39 -4
- package/dist/config/slash-commands.js.map +1 -1
- package/dist/config/types.d.ts +2 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js +1 -0
- package/dist/config/types.js.map +1 -1
- package/dist/index.js +60 -11
- package/dist/index.js.map +1 -1
- package/dist/mcp/mcp-command-handler.d.ts +34 -3
- package/dist/mcp/mcp-command-handler.d.ts.map +1 -1
- package/dist/mcp/mcp-command-handler.js +171 -83
- package/dist/mcp/mcp-command-handler.js.map +1 -1
- package/dist/mcp/mcp-server-manager.d.ts.map +1 -1
- package/dist/mcp/mcp-server-manager.js +9 -23
- package/dist/mcp/mcp-server-manager.js.map +1 -1
- package/dist/mcp/mcp-tool-wrapper.d.ts.map +1 -1
- package/dist/mcp/mcp-tool-wrapper.js +42 -5
- package/dist/mcp/mcp-tool-wrapper.js.map +1 -1
- package/dist/services/ai-autocomplete-agent.d.ts +39 -0
- package/dist/services/ai-autocomplete-agent.d.ts.map +1 -0
- package/dist/services/ai-autocomplete-agent.js +189 -0
- package/dist/services/ai-autocomplete-agent.js.map +1 -0
- package/dist/services/ai-service-client.d.ts +25 -0
- package/dist/services/ai-service-client.d.ts.map +1 -1
- package/dist/services/ai-service-client.js +162 -1
- package/dist/services/ai-service-client.js.map +1 -1
- package/dist/services/api-client.d.ts +9 -0
- package/dist/services/api-client.d.ts.map +1 -1
- package/dist/services/api-client.js +25 -0
- package/dist/services/api-client.js.map +1 -1
- package/dist/services/auth-handler.js +1 -1
- package/dist/services/auth-handler.js.map +1 -1
- package/dist/services/input-detection-agent.d.ts +40 -0
- package/dist/services/input-detection-agent.d.ts.map +1 -0
- package/dist/services/input-detection-agent.js +213 -0
- package/dist/services/input-detection-agent.js.map +1 -0
- package/dist/services/input-requirement-detector.d.ts +28 -0
- package/dist/services/input-requirement-detector.d.ts.map +1 -0
- package/dist/services/input-requirement-detector.js +203 -0
- package/dist/services/input-requirement-detector.js.map +1 -0
- package/dist/services/local-chat-storage.d.ts +21 -0
- package/dist/services/local-chat-storage.d.ts.map +1 -1
- package/dist/services/local-chat-storage.js +138 -43
- package/dist/services/local-chat-storage.js.map +1 -1
- package/dist/services/monitored-shell-manager.d.ts +120 -0
- package/dist/services/monitored-shell-manager.d.ts.map +1 -0
- package/dist/services/monitored-shell-manager.js +239 -0
- package/dist/services/monitored-shell-manager.js.map +1 -0
- package/dist/services/ollama-service.d.ts +197 -0
- package/dist/services/ollama-service.d.ts.map +1 -0
- package/dist/services/ollama-service.js +324 -0
- package/dist/services/ollama-service.js.map +1 -0
- package/dist/services/shell-input-agent.d.ts +89 -0
- package/dist/services/shell-input-agent.d.ts.map +1 -0
- package/dist/services/shell-input-agent.js +361 -0
- package/dist/services/shell-input-agent.js.map +1 -0
- package/dist/services/sub-agent-manager.d.ts +139 -0
- package/dist/services/sub-agent-manager.d.ts.map +1 -0
- package/dist/services/sub-agent-manager.js +517 -0
- package/dist/services/sub-agent-manager.js.map +1 -0
- package/dist/tools/background-command.d.ts.map +1 -1
- package/dist/tools/background-command.js +33 -13
- package/dist/tools/background-command.js.map +1 -1
- package/dist/tools/command.d.ts.map +1 -1
- package/dist/tools/command.js +64 -1
- package/dist/tools/command.js.map +1 -1
- package/dist/tools/file-ops.d.ts.map +1 -1
- package/dist/tools/file-ops.js +33 -19
- package/dist/tools/file-ops.js.map +1 -1
- package/dist/tools/get-diff.js +1 -1
- package/dist/tools/get-diff.js.map +1 -1
- package/dist/tools/grep-search.d.ts.map +1 -1
- package/dist/tools/grep-search.js +41 -15
- package/dist/tools/grep-search.js.map +1 -1
- package/dist/tools/plan-mode.js +3 -3
- package/dist/tools/plan-mode.js.map +1 -1
- package/dist/tools/registry.js +1 -1
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/sub-agent.d.ts +9 -0
- package/dist/tools/sub-agent.d.ts.map +1 -0
- package/dist/tools/sub-agent.js +232 -0
- package/dist/tools/sub-agent.js.map +1 -0
- package/dist/tools/task-complete.d.ts.map +1 -1
- package/dist/tools/task-complete.js +14 -26
- package/dist/tools/task-complete.js.map +1 -1
- package/dist/ui/components/App.d.ts +45 -2
- package/dist/ui/components/App.d.ts.map +1 -1
- package/dist/ui/components/App.js +605 -96
- package/dist/ui/components/App.js.map +1 -1
- package/dist/ui/components/CircularSelectInput.d.ts +24 -0
- package/dist/ui/components/CircularSelectInput.d.ts.map +1 -0
- package/dist/ui/components/CircularSelectInput.js +71 -0
- package/dist/ui/components/CircularSelectInput.js.map +1 -0
- package/dist/ui/components/ErrorBoundary.d.ts +3 -2
- package/dist/ui/components/ErrorBoundary.d.ts.map +1 -1
- package/dist/ui/components/ErrorBoundary.js +29 -1
- package/dist/ui/components/ErrorBoundary.js.map +1 -1
- package/dist/ui/components/InputBox.d.ts +4 -0
- package/dist/ui/components/InputBox.d.ts.map +1 -1
- package/dist/ui/components/InputBox.js +343 -21
- package/dist/ui/components/InputBox.js.map +1 -1
- package/dist/ui/components/InteractiveShell.d.ts +6 -0
- package/dist/ui/components/InteractiveShell.d.ts.map +1 -1
- package/dist/ui/components/InteractiveShell.js +57 -6
- package/dist/ui/components/InteractiveShell.js.map +1 -1
- package/dist/ui/components/MCPAddScreen.d.ts +13 -0
- package/dist/ui/components/MCPAddScreen.d.ts.map +1 -0
- package/dist/ui/components/MCPAddScreen.js +54 -0
- package/dist/ui/components/MCPAddScreen.js.map +1 -0
- package/dist/ui/components/MCPListScreen.d.ts +17 -0
- package/dist/ui/components/MCPListScreen.d.ts.map +1 -0
- package/dist/ui/components/MCPListScreen.js +50 -0
- package/dist/ui/components/MCPListScreen.js.map +1 -0
- package/dist/ui/components/MCPServerListScreen.d.ts +16 -0
- package/dist/ui/components/MCPServerListScreen.d.ts.map +1 -0
- package/dist/ui/components/MCPServerListScreen.js +59 -0
- package/dist/ui/components/MCPServerListScreen.js.map +1 -0
- package/dist/ui/components/MonitorModeAIPanel.d.ts +23 -0
- package/dist/ui/components/MonitorModeAIPanel.d.ts.map +1 -0
- package/dist/ui/components/MonitorModeAIPanel.js +69 -0
- package/dist/ui/components/MonitorModeAIPanel.js.map +1 -0
- package/dist/ui/components/MultiLineInput.d.ts +13 -0
- package/dist/ui/components/MultiLineInput.d.ts.map +1 -0
- package/dist/ui/components/MultiLineInput.js +289 -0
- package/dist/ui/components/MultiLineInput.js.map +1 -0
- package/dist/ui/components/StatusBar.d.ts +2 -0
- package/dist/ui/components/StatusBar.d.ts.map +1 -1
- package/dist/ui/components/StatusBar.js +33 -2
- package/dist/ui/components/StatusBar.js.map +1 -1
- package/dist/ui/components/ToolExecutionMessage.d.ts.map +1 -1
- package/dist/ui/components/ToolExecutionMessage.js +231 -13
- package/dist/ui/components/ToolExecutionMessage.js.map +1 -1
- package/dist/ui/components/VersionUpdatePrompt.d.ts.map +1 -1
- package/dist/ui/components/VersionUpdatePrompt.js +3 -2
- package/dist/ui/components/VersionUpdatePrompt.js.map +1 -1
- package/dist/utils/command-history.d.ts +12 -2
- package/dist/utils/command-history.d.ts.map +1 -1
- package/dist/utils/command-history.js +57 -13
- package/dist/utils/command-history.js.map +1 -1
- package/dist/utils/input-classifier.js +1 -1
- package/dist/utils/input-classifier.js.map +1 -1
- package/package.json +2 -1
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
import stripAnsi from 'strip-ansi';
|
|
2
|
+
/**
|
|
3
|
+
* Input Requirement Detector Service
|
|
4
|
+
*
|
|
5
|
+
* Monitors shell output and detects when user input is required.
|
|
6
|
+
* Used by the agent control mode to know when to prompt the AI for input.
|
|
7
|
+
*/
|
|
8
|
+
// Common patterns that indicate input is required
|
|
9
|
+
const INPUT_PATTERNS = [
|
|
10
|
+
// Password prompts
|
|
11
|
+
/password\s*[:\>]/i,
|
|
12
|
+
/enter\s+password/i,
|
|
13
|
+
/\[sudo\]\s+password/i,
|
|
14
|
+
/passphrase/i,
|
|
15
|
+
// Y/N confirmations
|
|
16
|
+
/\[y\/n\]/i,
|
|
17
|
+
/\[yes\/no\]/i,
|
|
18
|
+
/\(y\/n\)/i,
|
|
19
|
+
/\(yes\/no\)/i,
|
|
20
|
+
/continue\s*\?/i,
|
|
21
|
+
/proceed\s*\?/i,
|
|
22
|
+
/are\s+you\s+sure\s*\?/i,
|
|
23
|
+
/overwrite\s*\?/i,
|
|
24
|
+
/replace\s*\?/i,
|
|
25
|
+
/delete\s*\?/i,
|
|
26
|
+
/confirm\s*[:\?]/i,
|
|
27
|
+
// Generic input prompts (ending with : or ? followed by whitespace or end)
|
|
28
|
+
/:\s*$/,
|
|
29
|
+
/\?\s*$/,
|
|
30
|
+
// npm init and similar prompts
|
|
31
|
+
/^\s*name:\s*\(/i,
|
|
32
|
+
/^\s*version:\s*\(/i,
|
|
33
|
+
/^\s*description:\s*$/i,
|
|
34
|
+
/^\s*entry\s+point:\s*\(/i,
|
|
35
|
+
/^\s*test\s+command:\s*$/i,
|
|
36
|
+
/^\s*git\s+repository:\s*$/i,
|
|
37
|
+
/^\s*keywords:\s*$/i,
|
|
38
|
+
/^\s*author:\s*$/i,
|
|
39
|
+
/^\s*license:\s*\(/i,
|
|
40
|
+
/is\s+this\s+ok\s*\?/i,
|
|
41
|
+
// Read-Host in PowerShell
|
|
42
|
+
/Read-Host/i,
|
|
43
|
+
// Git prompts
|
|
44
|
+
/username\s+for/i,
|
|
45
|
+
/password\s+for/i,
|
|
46
|
+
// SSH prompts
|
|
47
|
+
/are\s+you\s+sure\s+you\s+want\s+to\s+continue\s+connecting/i,
|
|
48
|
+
/\(yes\/no\/\[fingerprint\]\)/i,
|
|
49
|
+
// Press any key / press enter
|
|
50
|
+
/press\s+(any\s+key|enter|return)/i,
|
|
51
|
+
// Choice prompts
|
|
52
|
+
/choice\s*[:\>]/i,
|
|
53
|
+
/select\s+(option|choice)\s*[:\>]/i,
|
|
54
|
+
/\[\d+\]\s+.*:\s*$/i, // Numbered menu items ending with :
|
|
55
|
+
];
|
|
56
|
+
// Patterns that indicate the command is still producing output (not waiting)
|
|
57
|
+
const ACTIVE_OUTPUT_PATTERNS = [
|
|
58
|
+
/\.\.\./, // Progress indicator
|
|
59
|
+
/downloading/i,
|
|
60
|
+
/installing/i,
|
|
61
|
+
/compiling/i,
|
|
62
|
+
/building/i,
|
|
63
|
+
/running/i,
|
|
64
|
+
/starting/i,
|
|
65
|
+
/processing/i,
|
|
66
|
+
/%/, // Percentage progress
|
|
67
|
+
/\[\s*=+\s*\]/, // Progress bar
|
|
68
|
+
];
|
|
69
|
+
/**
|
|
70
|
+
* Default timeout in ms to consider output as "stalled" (waiting for input)
|
|
71
|
+
*/
|
|
72
|
+
export const DEFAULT_STALL_TIMEOUT_MS = 2000;
|
|
73
|
+
/**
|
|
74
|
+
* Detects if the shell output indicates that user input is required.
|
|
75
|
+
*
|
|
76
|
+
* @param output - The complete shell output so far
|
|
77
|
+
* @param timeSinceLastOutput - Time in ms since last output was received (optional)
|
|
78
|
+
* @param stallTimeoutMs - Timeout in ms to consider output stalled (default: 2000)
|
|
79
|
+
* @returns Detection result with confidence level
|
|
80
|
+
*/
|
|
81
|
+
// Patterns that should be IGNORED even if they look like prompts (e.g. system shell prompts)
|
|
82
|
+
const IGNORED_PATTERNS = [
|
|
83
|
+
/PS\s+[A-Z]:\\.*>\s*$/i, // PowerShell prompt: PS C:\path>
|
|
84
|
+
/^[A-Z]:\\.*>\s*$/i, // CMD prompt: C:\path>
|
|
85
|
+
/^\s*>\s*$/, // Single chevron prompt often seen in transitions
|
|
86
|
+
/user@.*[:\$]\s*$/i, // Bash style: user@host:$
|
|
87
|
+
/bash-[\d\.]+\$\s*$/i, // Bash prompt
|
|
88
|
+
];
|
|
89
|
+
export function detectInputRequirement(output, timeSinceLastOutput, stallTimeoutMs = DEFAULT_STALL_TIMEOUT_MS) {
|
|
90
|
+
// Get the last few lines of output for analysis
|
|
91
|
+
const lines = output.split('\n').filter(line => line.trim());
|
|
92
|
+
// Safety check for empty lines
|
|
93
|
+
if (lines.length === 0) {
|
|
94
|
+
return { requiresInput: false, confidence: 'low', lastLine: '' };
|
|
95
|
+
}
|
|
96
|
+
// Get raw last line
|
|
97
|
+
const rawLastLine = lines[lines.length - 1];
|
|
98
|
+
// Sanitize: strip ANSI codes and trim whitespace
|
|
99
|
+
const cleanLastLine = stripAnsi(rawLastLine).trim();
|
|
100
|
+
// Check against IGNORED patterns first
|
|
101
|
+
if (IGNORED_PATTERNS.some(pattern => pattern.test(cleanLastLine))) {
|
|
102
|
+
return { requiresInput: false, confidence: 'low', lastLine: cleanLastLine };
|
|
103
|
+
}
|
|
104
|
+
// Get last 3 lines, stripped of ANSI
|
|
105
|
+
const last3LinesRaw = lines.slice(-3).join('\n');
|
|
106
|
+
const cleanLast3Lines = stripAnsi(last3LinesRaw);
|
|
107
|
+
const lastLine = cleanLastLine; // Use cleaned version for matching
|
|
108
|
+
const last3Lines = cleanLast3Lines;
|
|
109
|
+
// Check if output appears to be actively producing content
|
|
110
|
+
const isActiveOutput = ACTIVE_OUTPUT_PATTERNS.some(pattern => pattern.test(last3Lines));
|
|
111
|
+
// Check for explicit input patterns with high confidence in last line
|
|
112
|
+
for (const pattern of INPUT_PATTERNS) {
|
|
113
|
+
if (pattern.test(lastLine)) {
|
|
114
|
+
return {
|
|
115
|
+
requiresInput: true,
|
|
116
|
+
confidence: 'high',
|
|
117
|
+
matchedPattern: pattern.toString(),
|
|
118
|
+
lastLine
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
// Check the last 3 lines for patterns (slightly lower confidence)
|
|
123
|
+
for (const pattern of INPUT_PATTERNS) {
|
|
124
|
+
if (pattern.test(last3Lines)) {
|
|
125
|
+
return {
|
|
126
|
+
requiresInput: true,
|
|
127
|
+
confidence: 'medium',
|
|
128
|
+
matchedPattern: pattern.toString(),
|
|
129
|
+
lastLine
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
// If output has stalled and no active patterns, might be waiting for input
|
|
134
|
+
if (timeSinceLastOutput !== undefined && timeSinceLastOutput > stallTimeoutMs && !isActiveOutput) {
|
|
135
|
+
// Check if last line looks like a prompt (ends with common prompt characters)
|
|
136
|
+
if (/[:\>\?\$\#]\s*$/.test(lastLine)) {
|
|
137
|
+
return {
|
|
138
|
+
requiresInput: true,
|
|
139
|
+
confidence: 'low',
|
|
140
|
+
matchedPattern: 'stall_with_prompt_ending',
|
|
141
|
+
lastLine
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return {
|
|
146
|
+
requiresInput: false,
|
|
147
|
+
confidence: 'high',
|
|
148
|
+
lastLine
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Get a human-readable description of what type of input is likely required.
|
|
153
|
+
* This is useful for constructing the AI prompt.
|
|
154
|
+
*
|
|
155
|
+
* @param result - The detection result
|
|
156
|
+
* @returns Description of the expected input type
|
|
157
|
+
*/
|
|
158
|
+
export function getInputTypeDescription(result) {
|
|
159
|
+
if (!result.requiresInput || !result.matchedPattern) {
|
|
160
|
+
return 'unknown input';
|
|
161
|
+
}
|
|
162
|
+
const pattern = result.matchedPattern.toLowerCase();
|
|
163
|
+
if (pattern.includes('password') || pattern.includes('passphrase')) {
|
|
164
|
+
return 'password or passphrase';
|
|
165
|
+
}
|
|
166
|
+
if (pattern.includes('y/n') || pattern.includes('yes/no') || pattern.includes('sure')) {
|
|
167
|
+
return 'yes/no confirmation';
|
|
168
|
+
}
|
|
169
|
+
if (pattern.includes('continue') || pattern.includes('proceed') || pattern.includes('confirm')) {
|
|
170
|
+
return 'confirmation to proceed';
|
|
171
|
+
}
|
|
172
|
+
if (pattern.includes('press')) {
|
|
173
|
+
return 'key press (enter or any key)';
|
|
174
|
+
}
|
|
175
|
+
if (pattern.includes('choice') || pattern.includes('select')) {
|
|
176
|
+
return 'selection from options';
|
|
177
|
+
}
|
|
178
|
+
return 'text input';
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Extract the prompt question from the output for context.
|
|
182
|
+
* This helps the AI understand what is being asked.
|
|
183
|
+
*
|
|
184
|
+
* @param output - The complete shell output
|
|
185
|
+
* @returns The prompt/question being asked
|
|
186
|
+
*/
|
|
187
|
+
export function extractPromptContext(output) {
|
|
188
|
+
const lines = output.split('\n').filter(line => line.trim());
|
|
189
|
+
// Get last 5 lines for context
|
|
190
|
+
const contextLines = lines.slice(-5);
|
|
191
|
+
// Find the line that looks most like a prompt
|
|
192
|
+
for (let i = contextLines.length - 1; i >= 0; i--) {
|
|
193
|
+
const line = stripAnsi(contextLines[i]).trim();
|
|
194
|
+
// If line ends with a prompt character and isn't empty
|
|
195
|
+
if (line && /[:\>\?\$\#]\s*$/.test(line)) {
|
|
196
|
+
return line;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
// Just return the last non-empty line
|
|
200
|
+
const lastLine = contextLines[contextLines.length - 1] || '';
|
|
201
|
+
return stripAnsi(lastLine).trim();
|
|
202
|
+
}
|
|
203
|
+
//# sourceMappingURL=input-requirement-detector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input-requirement-detector.js","sourceRoot":"","sources":["../../src/services/input-requirement-detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -102,7 +102,27 @@ export interface LocalChat extends LocalChatMeta {
|
|
|
102
102
|
*/
|
|
103
103
|
export declare class LocalChatStorage {
|
|
104
104
|
private chatsDir;
|
|
105
|
+
private indexPath;
|
|
106
|
+
private chatIndex;
|
|
107
|
+
private indexLoaded;
|
|
105
108
|
constructor();
|
|
109
|
+
/**
|
|
110
|
+
* Load the metadata index from disk, or rebuild it from chat files if missing
|
|
111
|
+
*/
|
|
112
|
+
private loadIndex;
|
|
113
|
+
/**
|
|
114
|
+
* Rebuild the index by reading metadata from all chat files
|
|
115
|
+
* This is a one-time migration that reads full files, but only happens once
|
|
116
|
+
*/
|
|
117
|
+
private rebuildIndex;
|
|
118
|
+
/**
|
|
119
|
+
* Save the metadata index to disk
|
|
120
|
+
*/
|
|
121
|
+
private saveIndex;
|
|
122
|
+
/**
|
|
123
|
+
* Update the index entry for a chat
|
|
124
|
+
*/
|
|
125
|
+
private updateIndexEntry;
|
|
106
126
|
/**
|
|
107
127
|
* Generate a unique chat ID based on timestamp
|
|
108
128
|
*/
|
|
@@ -135,6 +155,7 @@ export declare class LocalChatStorage {
|
|
|
135
155
|
loadChat(chatId: string): LocalChat | null;
|
|
136
156
|
/**
|
|
137
157
|
* List all chats (metadata only, sorted by updatedAt descending)
|
|
158
|
+
* Uses the in-memory index to avoid loading full chat files
|
|
138
159
|
*/
|
|
139
160
|
listChats(): LocalChatMeta[];
|
|
140
161
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-chat-storage.d.ts","sourceRoot":"","sources":["../../src/services/local-chat-storage.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"local-chat-storage.d.ts","sourceRoot":"","sources":["../../src/services/local-chat-storage.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,KAAK,CAAC;QACjB,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KAChC,CAAC,CAAC;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,WAAW,GAAG,OAAO,CAAC;QACxD,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KACjC,CAAC;IACF,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;KAAE,CAAC,CAAC;IACjF,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE;QACf,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,eAAe,EAAE,MAAM,CAAC;QACxB,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,YAAY,CAAC,EAAE;QACb,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,gBAAgB,CAAC,EAAE;QACjB,IAAI,EAAE,KAAK,GAAG,KAAK,GAAG,QAAQ,CAAC;QAC/B,MAAM,EAAE,YAAY,GAAG,WAAW,GAAG,OAAO,GAAG,cAAc,CAAC;QAC9D,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,KAAK,GAAG,KAAK,GAAG,QAAQ,CAAC;IAC/B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,EAAE;QACT,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,SAAU,SAAQ,aAAa;IAC9C,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,UAAU,CAAC,EAAE,eAAe,EAAE,CAAC;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE,mBAAmB,CAAC;IACpC,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAED;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,SAAS,CAAyC;IAC1D,OAAO,CAAC,WAAW,CAAkB;;IAgBrC;;OAEG;IACH,OAAO,CAAC,SAAS;IAsBjB;;;OAGG;IACH,OAAO,CAAC,YAAY;IAmDpB;;OAEG;IACH,OAAO,CAAC,SAAS;IASjB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA0BxB;;OAEG;IACH,cAAc,IAAI,MAAM;IAOxB;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,MAAM;IAsBhD;;OAEG;IACH,OAAO,CAAC,WAAW;IAInB;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,EAAE,UAAU,CAAC,EAAE,eAAe,EAAE,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,mBAAmB,GAAG,IAAI,GAAG,SAAS;IA2DxJ;;;OAGG;IACH,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,qBAAqB,EAAE,MAAM,GAAG,OAAO;IAkBhF;;OAEG;IACH,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAK5D;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAgB1C;;;OAGG;IACH,SAAS,IAAI,aAAa,EAAE;IAe5B;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAqBnC;;;OAGG;IACH,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO;IAoCpC;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO;IAsBrD;;OAEG;IACH,WAAW,IAAI,MAAM;CAGtB;AAGD,eAAO,MAAM,gBAAgB,kBAAyB,CAAC"}
|
|
@@ -13,13 +13,137 @@ import { logError } from '../utils/logger.js';
|
|
|
13
13
|
*/
|
|
14
14
|
export class LocalChatStorage {
|
|
15
15
|
chatsDir;
|
|
16
|
+
indexPath;
|
|
17
|
+
chatIndex = new Map();
|
|
18
|
+
indexLoaded = false;
|
|
16
19
|
constructor() {
|
|
17
20
|
const homeDir = os.homedir();
|
|
18
21
|
this.chatsDir = path.join(homeDir, '.centaurus', 'chats');
|
|
22
|
+
this.indexPath = path.join(this.chatsDir, 'index.json');
|
|
19
23
|
// Ensure chats directory exists
|
|
20
24
|
if (!fs.existsSync(this.chatsDir)) {
|
|
21
25
|
fs.mkdirSync(this.chatsDir, { recursive: true });
|
|
22
26
|
}
|
|
27
|
+
// Load or build the index
|
|
28
|
+
this.loadIndex();
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Load the metadata index from disk, or rebuild it from chat files if missing
|
|
32
|
+
*/
|
|
33
|
+
loadIndex() {
|
|
34
|
+
if (this.indexLoaded)
|
|
35
|
+
return;
|
|
36
|
+
try {
|
|
37
|
+
if (fs.existsSync(this.indexPath)) {
|
|
38
|
+
const data = fs.readFileSync(this.indexPath, 'utf-8');
|
|
39
|
+
const indexArray = JSON.parse(data);
|
|
40
|
+
this.chatIndex.clear();
|
|
41
|
+
for (const meta of indexArray) {
|
|
42
|
+
this.chatIndex.set(meta.id, meta);
|
|
43
|
+
}
|
|
44
|
+
this.indexLoaded = true;
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
// Index file corrupted, rebuild it
|
|
50
|
+
}
|
|
51
|
+
// Rebuild index from chat files (one-time migration)
|
|
52
|
+
this.rebuildIndex();
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Rebuild the index by reading metadata from all chat files
|
|
56
|
+
* This is a one-time migration that reads full files, but only happens once
|
|
57
|
+
*/
|
|
58
|
+
rebuildIndex() {
|
|
59
|
+
this.chatIndex.clear();
|
|
60
|
+
if (!fs.existsSync(this.chatsDir)) {
|
|
61
|
+
this.indexLoaded = true;
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
const files = fs.readdirSync(this.chatsDir)
|
|
65
|
+
.filter(f => f.endsWith('.json') && f !== 'index.json');
|
|
66
|
+
for (const file of files) {
|
|
67
|
+
try {
|
|
68
|
+
const filePath = path.join(this.chatsDir, file);
|
|
69
|
+
const data = fs.readFileSync(filePath, 'utf-8');
|
|
70
|
+
const chat = JSON.parse(data);
|
|
71
|
+
// Determine environment string from remoteContext
|
|
72
|
+
let environment = 'local';
|
|
73
|
+
if (chat.remoteContext) {
|
|
74
|
+
const rc = chat.remoteContext;
|
|
75
|
+
if (rc.type === 'ssh' && rc.metadata?.hostname) {
|
|
76
|
+
environment = `ssh:${rc.metadata.username || 'user'}@${rc.metadata.hostname}`;
|
|
77
|
+
}
|
|
78
|
+
else if (rc.type === 'wsl') {
|
|
79
|
+
environment = `wsl:${rc.metadata?.distroName || 'Ubuntu'}`;
|
|
80
|
+
}
|
|
81
|
+
else if (rc.type === 'docker' && rc.metadata?.containerId) {
|
|
82
|
+
environment = `docker:${rc.metadata.containerId.substring(0, 12)}`;
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
environment = rc.type;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
// Store metadata only
|
|
89
|
+
this.chatIndex.set(chat.id, {
|
|
90
|
+
id: chat.id,
|
|
91
|
+
title: chat.title,
|
|
92
|
+
createdAt: chat.createdAt,
|
|
93
|
+
updatedAt: chat.updatedAt,
|
|
94
|
+
messageCount: chat.messageCount,
|
|
95
|
+
environment,
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
// Skip invalid files
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
this.indexLoaded = true;
|
|
104
|
+
this.saveIndex();
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Save the metadata index to disk
|
|
108
|
+
*/
|
|
109
|
+
saveIndex() {
|
|
110
|
+
try {
|
|
111
|
+
const indexArray = Array.from(this.chatIndex.values());
|
|
112
|
+
fs.writeFileSync(this.indexPath, JSON.stringify(indexArray, null, 2), 'utf-8');
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
logError('Failed to save chat index', error);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Update the index entry for a chat
|
|
120
|
+
*/
|
|
121
|
+
updateIndexEntry(chat) {
|
|
122
|
+
let environment = 'local';
|
|
123
|
+
if (chat.remoteContext) {
|
|
124
|
+
const rc = chat.remoteContext;
|
|
125
|
+
if (rc.type === 'ssh' && rc.metadata?.hostname) {
|
|
126
|
+
environment = `ssh:${rc.metadata.username || 'user'}@${rc.metadata.hostname}`;
|
|
127
|
+
}
|
|
128
|
+
else if (rc.type === 'wsl') {
|
|
129
|
+
environment = `wsl:${rc.metadata?.distroName || 'Ubuntu'}`;
|
|
130
|
+
}
|
|
131
|
+
else if (rc.type === 'docker' && rc.metadata?.containerId) {
|
|
132
|
+
environment = `docker:${rc.metadata.containerId.substring(0, 12)}`;
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
environment = rc.type;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
this.chatIndex.set(chat.id, {
|
|
139
|
+
id: chat.id,
|
|
140
|
+
title: chat.title,
|
|
141
|
+
createdAt: chat.createdAt,
|
|
142
|
+
updatedAt: chat.updatedAt,
|
|
143
|
+
messageCount: chat.messageCount,
|
|
144
|
+
environment,
|
|
145
|
+
});
|
|
146
|
+
this.saveIndex();
|
|
23
147
|
}
|
|
24
148
|
/**
|
|
25
149
|
* Generate a unique chat ID based on timestamp
|
|
@@ -112,6 +236,8 @@ export class LocalChatStorage {
|
|
|
112
236
|
};
|
|
113
237
|
}
|
|
114
238
|
fs.writeFileSync(chatPath, JSON.stringify(chat, null, 2), 'utf-8');
|
|
239
|
+
// Update the metadata index
|
|
240
|
+
this.updateIndexEntry(chat);
|
|
115
241
|
return chat;
|
|
116
242
|
}
|
|
117
243
|
/**
|
|
@@ -161,51 +287,13 @@ export class LocalChatStorage {
|
|
|
161
287
|
}
|
|
162
288
|
/**
|
|
163
289
|
* List all chats (metadata only, sorted by updatedAt descending)
|
|
290
|
+
* Uses the in-memory index to avoid loading full chat files
|
|
164
291
|
*/
|
|
165
292
|
listChats() {
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
const
|
|
170
|
-
.filter(f => f.endsWith('.json'));
|
|
171
|
-
const chats = [];
|
|
172
|
-
for (const file of files) {
|
|
173
|
-
try {
|
|
174
|
-
const filePath = path.join(this.chatsDir, file);
|
|
175
|
-
const data = fs.readFileSync(filePath, 'utf-8');
|
|
176
|
-
const chat = JSON.parse(data);
|
|
177
|
-
// Determine environment string from remoteContext
|
|
178
|
-
let environment = 'local';
|
|
179
|
-
if (chat.remoteContext) {
|
|
180
|
-
const rc = chat.remoteContext;
|
|
181
|
-
if (rc.type === 'ssh' && rc.metadata?.hostname) {
|
|
182
|
-
environment = `ssh:${rc.metadata.username || 'user'}@${rc.metadata.hostname}`;
|
|
183
|
-
}
|
|
184
|
-
else if (rc.type === 'wsl') {
|
|
185
|
-
environment = `wsl:${rc.metadata?.distroName || 'Ubuntu'}`;
|
|
186
|
-
}
|
|
187
|
-
else if (rc.type === 'docker' && rc.metadata?.containerId) {
|
|
188
|
-
environment = `docker:${rc.metadata.containerId.substring(0, 12)}`;
|
|
189
|
-
}
|
|
190
|
-
else {
|
|
191
|
-
environment = rc.type;
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
// Return metadata only (no messages)
|
|
195
|
-
chats.push({
|
|
196
|
-
id: chat.id,
|
|
197
|
-
title: chat.title,
|
|
198
|
-
createdAt: chat.createdAt,
|
|
199
|
-
updatedAt: chat.updatedAt,
|
|
200
|
-
messageCount: chat.messageCount,
|
|
201
|
-
environment,
|
|
202
|
-
});
|
|
203
|
-
}
|
|
204
|
-
catch (error) {
|
|
205
|
-
// Skip invalid files
|
|
206
|
-
continue;
|
|
207
|
-
}
|
|
208
|
-
}
|
|
293
|
+
// Ensure index is loaded
|
|
294
|
+
this.loadIndex();
|
|
295
|
+
// Return sorted metadata from the cache
|
|
296
|
+
const chats = Array.from(this.chatIndex.values());
|
|
209
297
|
// Sort by updatedAt descending (most recent first)
|
|
210
298
|
chats.sort((a, b) => new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime());
|
|
211
299
|
return chats;
|
|
@@ -220,6 +308,9 @@ export class LocalChatStorage {
|
|
|
220
308
|
}
|
|
221
309
|
try {
|
|
222
310
|
fs.unlinkSync(chatPath);
|
|
311
|
+
// Remove from index
|
|
312
|
+
this.chatIndex.delete(chatId);
|
|
313
|
+
this.saveIndex();
|
|
223
314
|
return true;
|
|
224
315
|
}
|
|
225
316
|
catch (error) {
|
|
@@ -253,6 +344,8 @@ export class LocalChatStorage {
|
|
|
253
344
|
environment: chat.environment,
|
|
254
345
|
};
|
|
255
346
|
fs.writeFileSync(chatPath, JSON.stringify(importedChat, null, 2), 'utf-8');
|
|
347
|
+
// Update the index
|
|
348
|
+
this.updateIndexEntry(importedChat);
|
|
256
349
|
return true;
|
|
257
350
|
}
|
|
258
351
|
catch (error) {
|
|
@@ -273,6 +366,8 @@ export class LocalChatStorage {
|
|
|
273
366
|
chat.updatedAt = new Date().toISOString();
|
|
274
367
|
const chatPath = this.getChatPath(chatId);
|
|
275
368
|
fs.writeFileSync(chatPath, JSON.stringify(chat, null, 2), 'utf-8');
|
|
369
|
+
// Update the index
|
|
370
|
+
this.updateIndexEntry(chat);
|
|
276
371
|
return true;
|
|
277
372
|
}
|
|
278
373
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-chat-storage.js","sourceRoot":"","sources":["../../src/services/local-chat-storage.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAgG9C;;GAEG;AACH,MAAM,OAAO,gBAAgB;IACnB,QAAQ,CAAS;IAEzB;QACE,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;QAE1D,gCAAgC;QAChC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAClC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,SAAS,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACvE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1D,OAAO,QAAQ,SAAS,IAAI,MAAM,EAAE,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,QAAyB;QACrC,MAAM,gBAAgB,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;QAC/D,IAAI,CAAC,gBAAgB,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;YACnD,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,kDAAkD;QAClD,IAAI,KAAK,GAAG,gBAAgB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACtD,IAAI,gBAAgB,CAAC,OAAO,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YACzC,MAAM,SAAS,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YACzC,IAAI,SAAS,GAAG,EAAE,EAAE,CAAC;gBACnB,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;YACxC,CAAC;YACD,KAAK,IAAI,KAAK,CAAC;QACjB,CAAC;QAED,mCAAmC;QACnC,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QAE1C,OAAO,KAAK,IAAI,UAAU,CAAC;IAC7B,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,MAAc;QAChC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,MAAM,OAAO,CAAC,CAAC;IACpD,CAAC;IAED;;;OAGG;IACH,QAAQ,CAAC,MAAc,EAAE,QAAyB,EAAE,UAA8B,EAAE,GAAY,EAAE,aAA0C;QAC1I,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC1C,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAErC,IAAI,IAAe,CAAC;QAEpB,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,uBAAuB;YACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACvC,IAAI,QAAQ,EAAE,CAAC;gBACb,IAAI,GAAG;oBACL,GAAG,QAAQ;oBACX,QAAQ;oBACR,UAAU,EAAE,UAAU,IAAI,QAAQ,CAAC,UAAU;oBAC7C,GAAG,EAAE,GAAG,IAAI,QAAQ,CAAC,GAAG,EAAE,+BAA+B;oBACzD,gEAAgE;oBAChE,aAAa,EAAE,aAAa,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC;oBAC1H,8CAA8C;oBAC9C,qBAAqB,EAAE,QAAQ,CAAC,qBAAqB;oBACrD,YAAY,EAAE,QAAQ,CAAC,MAAM;oBAC7B,SAAS,EAAE,GAAG;iBACf,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,iDAAiD;gBACjD,IAAI,GAAG;oBACL,EAAE,EAAE,MAAM;oBACV,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;oBACnC,SAAS,EAAE,GAAG;oBACd,SAAS,EAAE,GAAG;oBACd,YAAY,EAAE,QAAQ,CAAC,MAAM;oBAC7B,QAAQ;oBACR,UAAU;oBACV,GAAG;oBACH,aAAa;iBACd,CAAC;YACJ,CAAC;QACH,CAAC;aAAM,CAAC;YACN,kBAAkB;YAClB,IAAI,GAAG;gBACL,EAAE,EAAE,MAAM;gBACV,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;gBACnC,SAAS,EAAE,GAAG;gBACd,SAAS,EAAE,GAAG;gBACd,YAAY,EAAE,QAAQ,CAAC,MAAM;gBAC7B,QAAQ;gBACR,UAAU;gBACV,GAAG;gBACH,aAAa;aACd,CAAC;QACJ,CAAC;QAED,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACnE,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;OAGG;IACH,wBAAwB,CAAC,MAAc,EAAE,qBAA6B;QACpE,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACnC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,CAAC;YACH,IAAI,CAAC,qBAAqB,GAAG,qBAAqB,CAAC;YACnD,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAC1C,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACnE,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,QAAQ,CAAC,kDAAkD,MAAM,EAAE,EAAE,KAAc,CAAC,CAAC;YACrF,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;OAEG;IACH,wBAAwB,CAAC,MAAc;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACnC,OAAO,IAAI,EAAE,qBAAqB,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,MAAc;QACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAE1C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAChD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAc,CAAC;QACvC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,QAAQ,CAAC,uBAAuB,MAAM,EAAE,EAAE,KAAc,CAAC,CAAC;YAC1D,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,SAAS;QACP,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAClC,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;aACxC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QAEpC,MAAM,KAAK,GAAoB,EAAE,CAAC;QAElC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;gBAChD,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAChD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAc,CAAC;gBAE3C,kDAAkD;gBAClD,IAAI,WAAW,GAAG,OAAO,CAAC;gBAC1B,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;oBACvB,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC;oBAC9B,IAAI,EAAE,CAAC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC;wBAC/C,WAAW,GAAG,OAAO,EAAE,CAAC,QAAQ,CAAC,QAAQ,IAAI,MAAM,IAAI,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;oBAChF,CAAC;yBAAM,IAAI,EAAE,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;wBAC7B,WAAW,GAAG,OAAO,EAAE,CAAC,QAAQ,EAAE,UAAU,IAAI,QAAQ,EAAE,CAAC;oBAC7D,CAAC;yBAAM,IAAI,EAAE,CAAC,IAAI,KAAK,QAAQ,IAAI,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,CAAC;wBAC5D,WAAW,GAAG,UAAU,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;oBACrE,CAAC;yBAAM,CAAC;wBACN,WAAW,GAAG,EAAE,CAAC,IAAI,CAAC;oBACxB,CAAC;gBACH,CAAC;gBAED,qCAAqC;gBACrC,KAAK,CAAC,IAAI,CAAC;oBACT,EAAE,EAAE,IAAI,CAAC,EAAE;oBACX,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,YAAY,EAAE,IAAI,CAAC,YAAY;oBAC/B,WAAW;iBACZ,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,qBAAqB;gBACrB,SAAS;YACX,CAAC;QACH,CAAC;QAED,mDAAmD;QACnD,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAClB,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAClE,CAAC;QAEF,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,MAAc;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAE1C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,CAAC;YACH,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YACxB,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,QAAQ,CAAC,yBAAyB,MAAM,EAAE,EAAE,KAAc,CAAC,CAAC;YAC5D,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,UAAU,CAAC,IAAe;QACxB,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACtB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAE3C,sCAAsC;YACtC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YACrC,MAAM,YAAY,GAAc;gBAC9B,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,eAAe;gBACpC,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,GAAG;gBAChC,SAAS,EAAE,GAAG,EAAE,wCAAwC;gBACxD,YAAY,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC;gBAC7D,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE;gBAC7B,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,aAAa,EAAE,IAAI,CAAC,aAAa;gBACjC,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;gBACjD,WAAW,EAAE,IAAI,CAAC,WAAW;aAC9B,CAAC;YAEF,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YAC3E,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,QAAQ,CAAC,yBAAyB,IAAI,CAAC,EAAE,EAAE,EAAE,KAAc,CAAC,CAAC;YAC7D,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,MAAc,EAAE,QAAgB;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACnC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,CAAC;YACH,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;YACtB,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAC1C,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACnE,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,QAAQ,CAAC,yBAAyB,MAAM,EAAE,EAAE,KAAc,CAAC,CAAC;YAC5D,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;OAEG;IACH,WAAW;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;CACF;AAED,4BAA4B;AAC5B,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"local-chat-storage.js","sourceRoot":"","sources":["../../src/services/local-chat-storage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Monitored Shell Manager Service
|
|
3
|
+
*
|
|
4
|
+
* Manages agent-controlled shell sessions, detecting when input is required
|
|
5
|
+
* and coordinating with the AI to provide appropriate responses.
|
|
6
|
+
*/
|
|
7
|
+
import { InputDetectionResult } from './input-requirement-detector.js';
|
|
8
|
+
/**
|
|
9
|
+
* Represents a message displayed during monitoring mode
|
|
10
|
+
*/
|
|
11
|
+
export interface MonitorMessage {
|
|
12
|
+
id: string;
|
|
13
|
+
type: 'thinking' | 'tool_call' | 'text' | 'input_sent';
|
|
14
|
+
content: string;
|
|
15
|
+
timestamp: Date;
|
|
16
|
+
isAnswered?: boolean;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Represents an active monitored shell session
|
|
20
|
+
*/
|
|
21
|
+
export interface MonitoredShellSession {
|
|
22
|
+
shellId: string;
|
|
23
|
+
command: string;
|
|
24
|
+
cwd: string;
|
|
25
|
+
output: string;
|
|
26
|
+
isRunning: boolean;
|
|
27
|
+
lastOutputTime: number;
|
|
28
|
+
monitoringMessages: MonitorMessage[];
|
|
29
|
+
inputCheckInterval?: NodeJS.Timeout;
|
|
30
|
+
onInputRequired?: (session: MonitoredShellSession, detectionResult: InputDetectionResult) => void;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Callback when the AI needs to be prompted for shell input
|
|
34
|
+
*/
|
|
35
|
+
export type OnAIInputRequestCallback = (shellId: string, shellOutput: string, promptContext: string, inputType: string) => Promise<string | null>;
|
|
36
|
+
/**
|
|
37
|
+
* Monitored Shell Manager
|
|
38
|
+
*
|
|
39
|
+
* Handles tracking of agent-controlled shells and coordinating input detection.
|
|
40
|
+
*/
|
|
41
|
+
declare class MonitoredShellManagerClass {
|
|
42
|
+
private sessions;
|
|
43
|
+
private onAIInputRequest?;
|
|
44
|
+
private onMonitoringMessage?;
|
|
45
|
+
private inputCheckIntervalMs;
|
|
46
|
+
private shellIdCounter;
|
|
47
|
+
/**
|
|
48
|
+
* Generate a unique shell ID
|
|
49
|
+
*/
|
|
50
|
+
generateShellId(): string;
|
|
51
|
+
/**
|
|
52
|
+
* Set the callback for requesting AI input
|
|
53
|
+
*/
|
|
54
|
+
setOnAIInputRequest(callback: OnAIInputRequestCallback): void;
|
|
55
|
+
/**
|
|
56
|
+
* Set the callback for new monitoring messages
|
|
57
|
+
*/
|
|
58
|
+
setOnMonitoringMessage(callback: (shellId: string, message: MonitorMessage) => void): void;
|
|
59
|
+
/**
|
|
60
|
+
* Start monitoring a shell session
|
|
61
|
+
*/
|
|
62
|
+
startMonitoring(shellId: string, command: string, cwd: string, onInputRequired?: (session: MonitoredShellSession, detectionResult: InputDetectionResult) => void): MonitoredShellSession;
|
|
63
|
+
/**
|
|
64
|
+
* Stop monitoring a shell session
|
|
65
|
+
*/
|
|
66
|
+
stopMonitoring(shellId: string): void;
|
|
67
|
+
/**
|
|
68
|
+
* Update shell output for a monitored session
|
|
69
|
+
*/
|
|
70
|
+
updateOutput(shellId: string, newOutput: string): void;
|
|
71
|
+
/**
|
|
72
|
+
* Mark a shell session as complete
|
|
73
|
+
*/
|
|
74
|
+
markComplete(shellId: string): void;
|
|
75
|
+
/**
|
|
76
|
+
* Get a session by ID
|
|
77
|
+
*/
|
|
78
|
+
getSession(shellId: string): MonitoredShellSession | undefined;
|
|
79
|
+
/**
|
|
80
|
+
* Check if a specific shell session is active
|
|
81
|
+
*/
|
|
82
|
+
isSessionActive(shellId: string): boolean;
|
|
83
|
+
/**
|
|
84
|
+
* Get all active shell IDs
|
|
85
|
+
*/
|
|
86
|
+
getActiveShellIds(): string[];
|
|
87
|
+
/**
|
|
88
|
+
* Add a monitoring message to a session
|
|
89
|
+
*/
|
|
90
|
+
addMonitoringMessage(shellId: string, type: MonitorMessage['type'], content: string): MonitorMessage;
|
|
91
|
+
/**
|
|
92
|
+
* Get monitoring messages for a session
|
|
93
|
+
*/
|
|
94
|
+
getMonitoringMessages(shellId: string): MonitorMessage[];
|
|
95
|
+
/**
|
|
96
|
+
* Clear monitoring messages for a session
|
|
97
|
+
*/
|
|
98
|
+
clearMonitoringMessages(shellId: string): void;
|
|
99
|
+
/**
|
|
100
|
+
* Mark the most recent 'thinking' message as answered
|
|
101
|
+
* This changes the spinner to a tick in the UI
|
|
102
|
+
*/
|
|
103
|
+
markLastThinkingAsAnswered(shellId: string): void;
|
|
104
|
+
/**
|
|
105
|
+
* Check if a shell requires input and trigger AI prompt if needed
|
|
106
|
+
*/
|
|
107
|
+
private checkForInputRequirement;
|
|
108
|
+
/**
|
|
109
|
+
* Build a prompt for the AI to provide shell input
|
|
110
|
+
* This is used when the AI needs to decide what to input
|
|
111
|
+
*/
|
|
112
|
+
buildInputPrompt(shellOutput: string, promptContext: string, inputType: string, originalCommand: string): string;
|
|
113
|
+
/**
|
|
114
|
+
* Get the last N lines of output
|
|
115
|
+
*/
|
|
116
|
+
private getLastNLines;
|
|
117
|
+
}
|
|
118
|
+
export declare const MonitoredShellManager: MonitoredShellManagerClass;
|
|
119
|
+
export {};
|
|
120
|
+
//# sourceMappingURL=monitored-shell-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monitored-shell-manager.d.ts","sourceRoot":"","sources":["../../src/services/monitored-shell-manager.ts"],"names":[],"mappings":"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"}
|