centaurus-cli 2.8.6 → 2.8.8
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 +85 -0
- package/dist/cli-adapter.d.ts.map +1 -1
- package/dist/cli-adapter.js +773 -31
- package/dist/cli-adapter.js.map +1 -1
- package/dist/config/mcp-config-manager.d.ts.map +1 -1
- package/dist/config/mcp-config-manager.js +9 -8
- package/dist/config/mcp-config-manager.js.map +1 -1
- package/dist/config/slash-commands.d.ts +2 -0
- package/dist/config/slash-commands.d.ts.map +1 -1
- package/dist/config/slash-commands.js +31 -1
- package/dist/config/slash-commands.js.map +1 -1
- package/dist/context/handlers/docker-handler.js.map +1 -1
- package/dist/context/handlers/ssh-handler.d.ts +16 -1
- package/dist/context/handlers/ssh-handler.d.ts.map +1 -1
- package/dist/context/handlers/ssh-handler.js +57 -12
- package/dist/context/handlers/ssh-handler.js.map +1 -1
- package/dist/context/subshell-handler.d.ts +14 -0
- package/dist/context/subshell-handler.d.ts.map +1 -1
- package/dist/hooks/useTerminalDimensions.d.ts +41 -0
- package/dist/hooks/useTerminalDimensions.d.ts.map +1 -0
- package/dist/hooks/useTerminalDimensions.js +84 -0
- package/dist/hooks/useTerminalDimensions.js.map +1 -0
- package/dist/index.js +57 -5
- package/dist/index.js.map +1 -1
- package/dist/mcp/mcp-command-handler.d.ts.map +1 -1
- package/dist/mcp/mcp-command-handler.js +3 -1
- 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 +5 -3
- package/dist/mcp/mcp-server-manager.js.map +1 -1
- package/dist/services/api-client.d.ts +24 -0
- package/dist/services/api-client.d.ts.map +1 -1
- package/dist/services/api-client.js +27 -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/clipboard-service.d.ts +42 -0
- package/dist/services/clipboard-service.d.ts.map +1 -0
- package/dist/services/clipboard-service.js +217 -0
- package/dist/services/clipboard-service.js.map +1 -0
- package/dist/services/local-chat-storage.d.ts +154 -0
- package/dist/services/local-chat-storage.d.ts.map +1 -0
- package/dist/services/local-chat-storage.js +258 -0
- package/dist/services/local-chat-storage.js.map +1 -0
- package/dist/tools/grep-search.d.ts +5 -0
- package/dist/tools/grep-search.d.ts.map +1 -1
- package/dist/tools/grep-search.js +68 -16
- package/dist/tools/grep-search.js.map +1 -1
- package/dist/tools/plan-mode.d.ts +57 -6
- package/dist/tools/plan-mode.d.ts.map +1 -1
- package/dist/tools/plan-mode.js +297 -46
- package/dist/tools/plan-mode.js.map +1 -1
- package/dist/tools/read-binary-file.d.ts +10 -0
- package/dist/tools/read-binary-file.d.ts.map +1 -0
- package/dist/tools/read-binary-file.js +210 -0
- package/dist/tools/read-binary-file.js.map +1 -0
- package/dist/types/index.d.ts +7 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/ui/components/App.d.ts +35 -0
- package/dist/ui/components/App.d.ts.map +1 -1
- package/dist/ui/components/App.js +622 -43
- package/dist/ui/components/App.js.map +1 -1
- package/dist/ui/components/ClipboardImageAutocomplete.d.ts +14 -0
- package/dist/ui/components/ClipboardImageAutocomplete.d.ts.map +1 -0
- package/dist/ui/components/ClipboardImageAutocomplete.js +39 -0
- package/dist/ui/components/ClipboardImageAutocomplete.js.map +1 -0
- package/dist/ui/components/ConnectionStatusMessage.d.ts +1 -1
- package/dist/ui/components/ConnectionStatusMessage.d.ts.map +1 -1
- package/dist/ui/components/ConnectionStatusMessage.js +21 -0
- package/dist/ui/components/ConnectionStatusMessage.js.map +1 -1
- package/dist/ui/components/DetailedPlanReviewScreen.d.ts +17 -0
- package/dist/ui/components/DetailedPlanReviewScreen.d.ts.map +1 -0
- package/dist/ui/components/DetailedPlanReviewScreen.js +110 -0
- package/dist/ui/components/DetailedPlanReviewScreen.js.map +1 -0
- package/dist/ui/components/InputBox.d.ts +4 -1
- package/dist/ui/components/InputBox.d.ts.map +1 -1
- package/dist/ui/components/InputBox.js +419 -30
- package/dist/ui/components/InputBox.js.map +1 -1
- package/dist/ui/components/InteractiveShell.d.ts.map +1 -1
- package/dist/ui/components/InteractiveShell.js +20 -6
- package/dist/ui/components/InteractiveShell.js.map +1 -1
- package/dist/ui/components/MessageDisplay.d.ts +6 -0
- package/dist/ui/components/MessageDisplay.d.ts.map +1 -1
- package/dist/ui/components/MessageDisplay.js +66 -3
- package/dist/ui/components/MessageDisplay.js.map +1 -1
- package/dist/ui/components/PlanAcceptedMessage.d.ts +8 -0
- package/dist/ui/components/PlanAcceptedMessage.d.ts.map +1 -1
- package/dist/ui/components/PlanAcceptedMessage.js +26 -8
- package/dist/ui/components/PlanAcceptedMessage.js.map +1 -1
- package/dist/ui/components/StreamingMessageDisplay.d.ts +3 -0
- package/dist/ui/components/StreamingMessageDisplay.d.ts.map +1 -1
- package/dist/ui/components/StreamingMessageDisplay.js +10 -6
- package/dist/ui/components/StreamingMessageDisplay.js.map +1 -1
- package/dist/ui/components/TaskCompletedMessage.d.ts.map +1 -1
- package/dist/ui/components/TaskCompletedMessage.js +4 -4
- package/dist/ui/components/TaskCompletedMessage.js.map +1 -1
- package/dist/ui/components/TaskProgressIndicator.d.ts +18 -0
- package/dist/ui/components/TaskProgressIndicator.d.ts.map +1 -0
- package/dist/ui/components/TaskProgressIndicator.js +72 -0
- package/dist/ui/components/TaskProgressIndicator.js.map +1 -0
- package/dist/ui/components/ThinkingDisplay.d.ts +3 -0
- package/dist/ui/components/ThinkingDisplay.d.ts.map +1 -1
- package/dist/ui/components/ThinkingDisplay.js +6 -4
- package/dist/ui/components/ThinkingDisplay.js.map +1 -1
- package/dist/ui/components/ToolExecutionMessage.d.ts.map +1 -1
- package/dist/ui/components/ToolExecutionMessage.js +85 -15
- package/dist/ui/components/ToolExecutionMessage.js.map +1 -1
- package/dist/ui/components/VersionUpdatePrompt.d.ts +1 -2
- package/dist/ui/components/VersionUpdatePrompt.d.ts.map +1 -1
- package/dist/ui/components/VersionUpdatePrompt.js +108 -27
- package/dist/ui/components/VersionUpdatePrompt.js.map +1 -1
- package/dist/utils/custom-commands-manager.d.ts +59 -0
- package/dist/utils/custom-commands-manager.d.ts.map +1 -0
- package/dist/utils/custom-commands-manager.js +142 -0
- package/dist/utils/custom-commands-manager.js.map +1 -0
- package/dist/utils/input-classifier.d.ts +10 -11
- package/dist/utils/input-classifier.d.ts.map +1 -1
- package/dist/utils/input-classifier.js +299 -75
- package/dist/utils/input-classifier.js.map +1 -1
- package/dist/utils/terminal-output.d.ts.map +1 -1
- package/dist/utils/terminal-output.js +110 -14
- package/dist/utils/terminal-output.js.map +1 -1
- package/dist/utils/unicode-sanitizer.d.ts +44 -0
- package/dist/utils/unicode-sanitizer.d.ts.map +1 -0
- package/dist/utils/unicode-sanitizer.js +211 -0
- package/dist/utils/unicode-sanitizer.js.map +1 -0
- package/models-config.json +2 -3
- package/package.json +4 -1
|
@@ -1,41 +1,122 @@
|
|
|
1
|
-
import React, { useState } from 'react';
|
|
2
|
-
import { Box, Text,
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
import React, { useState, useEffect, useRef } from 'react';
|
|
2
|
+
import { Box, Text, useApp } from 'ink';
|
|
3
|
+
import Spinner from 'ink-spinner';
|
|
4
|
+
import { spawn } from 'child_process';
|
|
5
|
+
export const VersionUpdatePrompt = ({ currentVersion, latestVersion, onComplete }) => {
|
|
6
|
+
const [status, setStatus] = useState('pending');
|
|
7
|
+
const [errorMessage, setErrorMessage] = useState('');
|
|
8
|
+
const hasStartedRef = useRef(false);
|
|
9
|
+
const { exit } = useApp();
|
|
10
|
+
// Clear the screen on mount to prevent banner duplication from Static component
|
|
11
|
+
useEffect(() => {
|
|
12
|
+
// Clear terminal to remove any previous Static content that might persist
|
|
13
|
+
process.stdout.write('\x1b[2J\x1b[3J\x1b[H');
|
|
14
|
+
}, []);
|
|
15
|
+
// Auto-start installation after a brief delay
|
|
16
|
+
useEffect(() => {
|
|
17
|
+
if (hasStartedRef.current)
|
|
18
|
+
return;
|
|
19
|
+
hasStartedRef.current = true;
|
|
20
|
+
const timer = setTimeout(() => {
|
|
21
|
+
setStatus('installing');
|
|
22
|
+
performUpdate();
|
|
23
|
+
}, 1500); // Brief delay so user can see the update notification
|
|
24
|
+
return () => clearTimeout(timer);
|
|
25
|
+
}, []);
|
|
26
|
+
const performUpdate = () => {
|
|
27
|
+
// Determine the package manager - prefer npm as it's most commonly used
|
|
28
|
+
const isWindows = process.platform === 'win32';
|
|
29
|
+
const npmCmd = isWindows ? 'npm.cmd' : 'npm';
|
|
30
|
+
const installProcess = spawn(npmCmd, ['install', '-g', 'centaurus-cli@latest'], {
|
|
31
|
+
shell: true,
|
|
32
|
+
stdio: 'pipe', // Capture output for error handling
|
|
33
|
+
detached: false
|
|
34
|
+
});
|
|
35
|
+
let stderrOutput = '';
|
|
36
|
+
let stdoutOutput = '';
|
|
37
|
+
if (installProcess.stdout) {
|
|
38
|
+
installProcess.stdout.on('data', (data) => {
|
|
39
|
+
stdoutOutput += data.toString();
|
|
40
|
+
});
|
|
8
41
|
}
|
|
9
|
-
if (
|
|
10
|
-
|
|
11
|
-
|
|
42
|
+
if (installProcess.stderr) {
|
|
43
|
+
installProcess.stderr.on('data', (data) => {
|
|
44
|
+
stderrOutput += data.toString();
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
installProcess.on('error', (err) => {
|
|
48
|
+
setStatus('error');
|
|
49
|
+
setErrorMessage(`Failed to start update: ${err.message}`);
|
|
50
|
+
});
|
|
51
|
+
installProcess.on('close', (code) => {
|
|
52
|
+
if (code === 0) {
|
|
53
|
+
setStatus('success');
|
|
54
|
+
// Wait a moment so user can see success message, then restart
|
|
55
|
+
setTimeout(() => {
|
|
56
|
+
restartCLI();
|
|
57
|
+
}, 1500);
|
|
12
58
|
}
|
|
13
59
|
else {
|
|
14
|
-
|
|
60
|
+
setStatus('error');
|
|
61
|
+
// Parse common error messages for better user feedback
|
|
62
|
+
let friendlyError = 'Update failed. Please try manually: npm install -g centaurus-cli@latest';
|
|
63
|
+
if (stderrOutput.includes('EACCES') || stderrOutput.includes('permission')) {
|
|
64
|
+
friendlyError = 'Permission denied. Try running with sudo (Linux/Mac) or as Administrator (Windows).';
|
|
65
|
+
}
|
|
66
|
+
else if (stderrOutput.includes('ENOTFOUND') || stderrOutput.includes('network')) {
|
|
67
|
+
friendlyError = 'Network error. Please check your internet connection and try again.';
|
|
68
|
+
}
|
|
69
|
+
else if (stderrOutput.includes('ETIMEOUT')) {
|
|
70
|
+
friendlyError = 'Connection timed out. Please check your internet connection and try again.';
|
|
71
|
+
}
|
|
72
|
+
setErrorMessage(friendlyError);
|
|
73
|
+
// After showing error, continue to chat after a delay
|
|
74
|
+
setTimeout(() => {
|
|
75
|
+
onComplete();
|
|
76
|
+
}, 5000);
|
|
15
77
|
}
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
|
|
78
|
+
});
|
|
79
|
+
};
|
|
80
|
+
const restartCLI = () => {
|
|
81
|
+
// Exit the Ink app first
|
|
82
|
+
exit();
|
|
83
|
+
// Clear screen and show success message
|
|
84
|
+
process.stdout.write('\x1b[2J\x1b[3J\x1b[H');
|
|
85
|
+
console.log('\n✅ Update complete! Centaurus has been updated to the latest version.\n');
|
|
86
|
+
console.log('Run \x1b[36mcentaurus\x1b[0m to start the updated CLI.\n');
|
|
87
|
+
process.exit(0);
|
|
88
|
+
};
|
|
89
|
+
return (React.createElement(Box, { flexDirection: "column", borderStyle: "round", borderColor: "cyan", paddingX: 2, paddingY: 1, marginTop: 1 },
|
|
19
90
|
React.createElement(Box, { marginBottom: 1 },
|
|
20
|
-
React.createElement(Text, { color: "
|
|
91
|
+
React.createElement(Text, { color: "cyan", bold: true }, "\uD83D\uDE80 New Update Available!")),
|
|
21
92
|
React.createElement(Box, { marginBottom: 1 },
|
|
22
93
|
React.createElement(Text, null,
|
|
23
94
|
"Current: ",
|
|
24
|
-
React.createElement(Text, { color: "
|
|
95
|
+
React.createElement(Text, { color: "gray" }, currentVersion),
|
|
25
96
|
" \u2192 Latest: ",
|
|
26
97
|
React.createElement(Text, { color: "green", bold: true }, latestVersion))),
|
|
27
|
-
React.createElement(Box,
|
|
28
|
-
React.createElement(Text, {
|
|
29
|
-
|
|
98
|
+
status === 'pending' && (React.createElement(Box, null,
|
|
99
|
+
React.createElement(Text, { color: "yellow" },
|
|
100
|
+
React.createElement(Spinner, { type: "dots" }),
|
|
101
|
+
" Preparing to update..."))),
|
|
102
|
+
status === 'installing' && (React.createElement(Box, { flexDirection: "column" },
|
|
103
|
+
React.createElement(Box, null,
|
|
104
|
+
React.createElement(Text, { color: "cyan" },
|
|
105
|
+
React.createElement(Spinner, { type: "dots" }),
|
|
106
|
+
" Installing update...")),
|
|
107
|
+
React.createElement(Box, { marginTop: 1 },
|
|
108
|
+
React.createElement(Text, { dimColor: true }, "Please wait while we update Centaurus to the latest version.")))),
|
|
109
|
+
status === 'success' && (React.createElement(Box, { flexDirection: "column" },
|
|
30
110
|
React.createElement(Box, null,
|
|
31
|
-
React.createElement(Text, { color:
|
|
32
|
-
|
|
33
|
-
|
|
111
|
+
React.createElement(Text, { color: "green", bold: true }, "\u2705 Update successful!")),
|
|
112
|
+
React.createElement(Box, { marginTop: 1 },
|
|
113
|
+
React.createElement(Text, { dimColor: true }, "Restarting Centaurus...")))),
|
|
114
|
+
status === 'error' && (React.createElement(Box, { flexDirection: "column" },
|
|
34
115
|
React.createElement(Box, null,
|
|
35
|
-
React.createElement(Text, { color:
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
116
|
+
React.createElement(Text, { color: "red", bold: true }, "\u274C Update Failed")),
|
|
117
|
+
React.createElement(Box, { marginTop: 1 },
|
|
118
|
+
React.createElement(Text, { color: "yellow" }, errorMessage)),
|
|
119
|
+
React.createElement(Box, { marginTop: 1 },
|
|
120
|
+
React.createElement(Text, { dimColor: true }, "Continuing to chat in a few seconds..."))))));
|
|
40
121
|
};
|
|
41
122
|
//# sourceMappingURL=VersionUpdatePrompt.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VersionUpdatePrompt.js","sourceRoot":"","sources":["../../../src/ui/components/VersionUpdatePrompt.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"VersionUpdatePrompt.js","sourceRoot":"","sources":["../../../src/ui/components/VersionUpdatePrompt.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Custom Commands Manager
|
|
3
|
+
*
|
|
4
|
+
* Manages user-defined custom terminal commands for auto-mode detection.
|
|
5
|
+
* Custom commands are stored persistently and included in terminal command detection.
|
|
6
|
+
*/
|
|
7
|
+
export declare class CustomCommandsManager {
|
|
8
|
+
private static instance;
|
|
9
|
+
private configPath;
|
|
10
|
+
private data;
|
|
11
|
+
private loaded;
|
|
12
|
+
private constructor();
|
|
13
|
+
static getInstance(): CustomCommandsManager;
|
|
14
|
+
/**
|
|
15
|
+
* Initialize and load custom commands from disk
|
|
16
|
+
*/
|
|
17
|
+
initialize(): Promise<void>;
|
|
18
|
+
/**
|
|
19
|
+
* Sync load for use in detectIntent (must be fast)
|
|
20
|
+
*/
|
|
21
|
+
loadSync(): void;
|
|
22
|
+
private ensureConfigDir;
|
|
23
|
+
private load;
|
|
24
|
+
private save;
|
|
25
|
+
/**
|
|
26
|
+
* Add a custom command word
|
|
27
|
+
* @returns true if added, false if already exists
|
|
28
|
+
*/
|
|
29
|
+
addCommand(command: string): Promise<{
|
|
30
|
+
success: boolean;
|
|
31
|
+
message: string;
|
|
32
|
+
}>;
|
|
33
|
+
/**
|
|
34
|
+
* Delete a custom command word
|
|
35
|
+
* @returns true if deleted, false if not found
|
|
36
|
+
*/
|
|
37
|
+
deleteCommand(command: string): Promise<{
|
|
38
|
+
success: boolean;
|
|
39
|
+
message: string;
|
|
40
|
+
}>;
|
|
41
|
+
/**
|
|
42
|
+
* List all custom commands
|
|
43
|
+
*/
|
|
44
|
+
listCommands(): string[];
|
|
45
|
+
/**
|
|
46
|
+
* Check if a command exists
|
|
47
|
+
*/
|
|
48
|
+
hasCommand(command: string): boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Get all commands as a Set for fast lookup
|
|
51
|
+
*/
|
|
52
|
+
getCommandsSet(): Set<string>;
|
|
53
|
+
/**
|
|
54
|
+
* Get the number of custom commands
|
|
55
|
+
*/
|
|
56
|
+
getCount(): number;
|
|
57
|
+
}
|
|
58
|
+
export default CustomCommandsManager;
|
|
59
|
+
//# sourceMappingURL=custom-commands-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"custom-commands-manager.d.ts","sourceRoot":"","sources":["../../src/utils/custom-commands-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAYH,qBAAa,qBAAqB;IAC9B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAwB;IAC/C,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,IAAI,CAAqB;IACjC,OAAO,CAAC,MAAM,CAAkB;IAEhC,OAAO;IAMP,MAAM,CAAC,WAAW,IAAI,qBAAqB;IAO3C;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAKjC;;OAEG;IACH,QAAQ,IAAI,IAAI;YAiBF,eAAe;YASf,IAAI;YAcJ,IAAI;IASlB;;;OAGG;IACG,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAsBjF;;;OAGG;IACG,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAcpF;;OAEG;IACH,YAAY,IAAI,MAAM,EAAE;IAIxB;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIpC;;OAEG;IACH,cAAc,IAAI,GAAG,CAAC,MAAM,CAAC;IAI7B;;OAEG;IACH,QAAQ,IAAI,MAAM;CAGrB;AAED,eAAe,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Custom Commands Manager
|
|
3
|
+
*
|
|
4
|
+
* Manages user-defined custom terminal commands for auto-mode detection.
|
|
5
|
+
* Custom commands are stored persistently and included in terminal command detection.
|
|
6
|
+
*/
|
|
7
|
+
import * as fs from 'fs/promises';
|
|
8
|
+
import * as fsSync from 'fs';
|
|
9
|
+
import * as path from 'path';
|
|
10
|
+
import * as os from 'os';
|
|
11
|
+
export class CustomCommandsManager {
|
|
12
|
+
static instance;
|
|
13
|
+
configPath;
|
|
14
|
+
data;
|
|
15
|
+
loaded = false;
|
|
16
|
+
constructor() {
|
|
17
|
+
const configDir = path.join(os.homedir(), '.centaurus');
|
|
18
|
+
this.configPath = path.join(configDir, 'custom-commands.json');
|
|
19
|
+
this.data = { commands: [], version: 1 };
|
|
20
|
+
}
|
|
21
|
+
static getInstance() {
|
|
22
|
+
if (!CustomCommandsManager.instance) {
|
|
23
|
+
CustomCommandsManager.instance = new CustomCommandsManager();
|
|
24
|
+
}
|
|
25
|
+
return CustomCommandsManager.instance;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Initialize and load custom commands from disk
|
|
29
|
+
*/
|
|
30
|
+
async initialize() {
|
|
31
|
+
if (this.loaded)
|
|
32
|
+
return;
|
|
33
|
+
await this.load();
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Sync load for use in detectIntent (must be fast)
|
|
37
|
+
*/
|
|
38
|
+
loadSync() {
|
|
39
|
+
if (this.loaded)
|
|
40
|
+
return;
|
|
41
|
+
try {
|
|
42
|
+
if (fsSync.existsSync(this.configPath)) {
|
|
43
|
+
const content = fsSync.readFileSync(this.configPath, 'utf-8');
|
|
44
|
+
const parsed = JSON.parse(content);
|
|
45
|
+
if (parsed.commands && Array.isArray(parsed.commands)) {
|
|
46
|
+
this.data = parsed;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
// Ignore errors - use empty array
|
|
52
|
+
}
|
|
53
|
+
this.loaded = true;
|
|
54
|
+
}
|
|
55
|
+
async ensureConfigDir() {
|
|
56
|
+
const configDir = path.dirname(this.configPath);
|
|
57
|
+
try {
|
|
58
|
+
await fs.access(configDir);
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
await fs.mkdir(configDir, { recursive: true });
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
async load() {
|
|
65
|
+
try {
|
|
66
|
+
const content = await fs.readFile(this.configPath, 'utf-8');
|
|
67
|
+
const parsed = JSON.parse(content);
|
|
68
|
+
if (parsed.commands && Array.isArray(parsed.commands)) {
|
|
69
|
+
this.data = parsed;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
// File doesn't exist or is invalid - use defaults
|
|
74
|
+
this.data = { commands: [], version: 1 };
|
|
75
|
+
}
|
|
76
|
+
this.loaded = true;
|
|
77
|
+
}
|
|
78
|
+
async save() {
|
|
79
|
+
await this.ensureConfigDir();
|
|
80
|
+
await fs.writeFile(this.configPath, JSON.stringify(this.data, null, 2), 'utf-8');
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Add a custom command word
|
|
84
|
+
* @returns true if added, false if already exists
|
|
85
|
+
*/
|
|
86
|
+
async addCommand(command) {
|
|
87
|
+
const normalized = command.toLowerCase().trim();
|
|
88
|
+
if (!normalized) {
|
|
89
|
+
return { success: false, message: 'Command cannot be empty' };
|
|
90
|
+
}
|
|
91
|
+
if (normalized.includes(' ')) {
|
|
92
|
+
return { success: false, message: 'Command must be a single word (no spaces)' };
|
|
93
|
+
}
|
|
94
|
+
if (this.data.commands.includes(normalized)) {
|
|
95
|
+
return { success: false, message: `Command "${normalized}" already exists` };
|
|
96
|
+
}
|
|
97
|
+
this.data.commands.push(normalized);
|
|
98
|
+
this.data.commands.sort();
|
|
99
|
+
await this.save();
|
|
100
|
+
return { success: true, message: `Added "${normalized}" to custom commands` };
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Delete a custom command word
|
|
104
|
+
* @returns true if deleted, false if not found
|
|
105
|
+
*/
|
|
106
|
+
async deleteCommand(command) {
|
|
107
|
+
const normalized = command.toLowerCase().trim();
|
|
108
|
+
const index = this.data.commands.indexOf(normalized);
|
|
109
|
+
if (index === -1) {
|
|
110
|
+
return { success: false, message: `Command "${normalized}" not found` };
|
|
111
|
+
}
|
|
112
|
+
this.data.commands.splice(index, 1);
|
|
113
|
+
await this.save();
|
|
114
|
+
return { success: true, message: `Deleted "${normalized}" from custom commands` };
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* List all custom commands
|
|
118
|
+
*/
|
|
119
|
+
listCommands() {
|
|
120
|
+
return [...this.data.commands];
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Check if a command exists
|
|
124
|
+
*/
|
|
125
|
+
hasCommand(command) {
|
|
126
|
+
return this.data.commands.includes(command.toLowerCase().trim());
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Get all commands as a Set for fast lookup
|
|
130
|
+
*/
|
|
131
|
+
getCommandsSet() {
|
|
132
|
+
return new Set(this.data.commands);
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Get the number of custom commands
|
|
136
|
+
*/
|
|
137
|
+
getCount() {
|
|
138
|
+
return this.data.commands.length;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
export default CustomCommandsManager;
|
|
142
|
+
//# sourceMappingURL=custom-commands-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"custom-commands-manager.js","sourceRoot":"","sources":["../../src/utils/custom-commands-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,23 +1,22 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Input Classification Utilities
|
|
3
3
|
*
|
|
4
|
-
* Provides heuristic-based detection of user intent (Terminal Command vs AI Message).
|
|
5
|
-
*
|
|
4
|
+
* Provides intelligent heuristic-based detection of user intent (Terminal Command vs AI Message).
|
|
5
|
+
* Uses sentence structure analysis, command syntax detection, and context-aware disambiguation.
|
|
6
6
|
*/
|
|
7
7
|
export type InputIntent = 'command' | 'ai';
|
|
8
8
|
/**
|
|
9
|
-
* Detects the intent of the user input using
|
|
9
|
+
* Detects the intent of the user input using intelligent heuristics.
|
|
10
10
|
*
|
|
11
|
-
* Logic:
|
|
11
|
+
* Logic Priority:
|
|
12
12
|
* 1. Slash Commands: If starts with '/', check if valid command -> AI
|
|
13
13
|
* 2. Prefixes: '?' -> AI, '.', '/', '$', '~' -> Command
|
|
14
|
-
* 3.
|
|
15
|
-
* 4. Syntax
|
|
16
|
-
* 5.
|
|
17
|
-
* 6.
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
* - Default -> AI (Safer to assume chat if unsure)
|
|
14
|
+
* 3. Strong AI Indicators: Question marks, AI keywords
|
|
15
|
+
* 4. Strong Command Syntax: Flags, pipes, redirects, quotes, env vars
|
|
16
|
+
* 5. Definite Commands: Known command binaries that aren't ambiguous
|
|
17
|
+
* 6. Ambiguous Command Disambiguation: Context-aware analysis
|
|
18
|
+
* 7. Natural Language Detection: Sentence structure analysis
|
|
19
|
+
* 8. Fallback: Multi-word without command syntax -> AI
|
|
21
20
|
*
|
|
22
21
|
* @param input The user input string
|
|
23
22
|
* @returns 'command' | 'ai'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input-classifier.d.ts","sourceRoot":"","sources":["../../src/utils/input-classifier.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"input-classifier.d.ts","sourceRoot":"","sources":["../../src/utils/input-classifier.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,IAAI,CAAC;AAgU3C;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CA4FvD"}
|