centaurus-cli 2.9.0 → 2.9.2
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 +78 -0
- package/dist/cli-adapter.d.ts.map +1 -1
- package/dist/cli-adapter.js +566 -165
- package/dist/cli-adapter.js.map +1 -1
- package/dist/config/build-config.d.ts +1 -1
- package/dist/config/build-config.js +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 +7 -2
- package/dist/config/models.js.map +1 -1
- package/dist/config/slash-commands.d.ts.map +1 -1
- package/dist/config/slash-commands.js +5 -3
- package/dist/config/slash-commands.js.map +1 -1
- package/dist/index.js +66 -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-service-client.d.ts +6 -1
- package/dist/services/ai-service-client.d.ts.map +1 -1
- package/dist/services/ai-service-client.js +6 -6
- package/dist/services/ai-service-client.js.map +1 -1
- package/dist/services/api-client.d.ts +20 -0
- package/dist/services/api-client.d.ts.map +1 -1
- package/dist/services/api-client.js +35 -0
- package/dist/services/api-client.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/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/session-quota-manager.d.ts +101 -0
- package/dist/services/session-quota-manager.d.ts.map +1 -0
- package/dist/services/session-quota-manager.js +242 -0
- package/dist/services/session-quota-manager.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 +78 -4
- 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.d.ts.map +1 -1
- package/dist/tools/get-diff.js +5 -2
- 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 -32
- package/dist/tools/task-complete.js.map +1 -1
- package/dist/ui/components/App.d.ts +45 -0
- package/dist/ui/components/App.d.ts.map +1 -1
- package/dist/ui/components/App.js +598 -95
- 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 +40 -2
- 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 +223 -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 +271 -12
- 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/editor-utils.d.ts +3 -3
- package/dist/utils/editor-utils.d.ts.map +1 -1
- package/dist/utils/editor-utils.js +15 -12
- package/dist/utils/editor-utils.js.map +1 -1
- package/dist/utils/input-classifier.d.ts.map +1 -1
- package/dist/utils/input-classifier.js +1 -0
- 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 +198 -171
- package/dist/utils/terminal-output.js.map +1 -1
- package/package.json +2 -1
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
import { MultiLineInput } from './MultiLineInput.js';
|
|
4
|
+
export const MCPAddScreen = ({ onAdd, onCancel, validateConfig }) => {
|
|
5
|
+
const [input, setInput] = React.useState('');
|
|
6
|
+
const [validationResult, setValidationResult] = React.useState(null);
|
|
7
|
+
// Note: ESC key handling is done in App.tsx
|
|
8
|
+
const handleSubmit = () => {
|
|
9
|
+
if (!input.trim()) {
|
|
10
|
+
setValidationResult({ valid: false, error: 'Please paste your MCP server configuration' });
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
// Validate and add immediately on first Enter
|
|
14
|
+
const result = validateConfig(input.trim());
|
|
15
|
+
setValidationResult(result);
|
|
16
|
+
if (result.valid && result.config) {
|
|
17
|
+
// Add the server immediately
|
|
18
|
+
onAdd(result.config);
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
const handleInputChange = (value) => {
|
|
22
|
+
setInput(value);
|
|
23
|
+
// Reset validation when input changes
|
|
24
|
+
if (validationResult) {
|
|
25
|
+
setValidationResult(null);
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
const exampleConfig = `"chrome-devtools": {
|
|
29
|
+
"command": "npx",
|
|
30
|
+
"args": ["-y", "chrome-devtools-mcp@latest"]
|
|
31
|
+
}`;
|
|
32
|
+
return (React.createElement(Box, { flexDirection: "column", borderStyle: "round", borderColor: "#00ccff", paddingX: 1 },
|
|
33
|
+
React.createElement(Text, { color: "#00ccff", bold: true }, "Add MCP Server"),
|
|
34
|
+
React.createElement(Box, { marginTop: 1 },
|
|
35
|
+
React.createElement(Text, { color: "gray" }, "Example format:")),
|
|
36
|
+
React.createElement(Box, { marginTop: 1, borderStyle: "round", borderColor: "gray", paddingX: 1 },
|
|
37
|
+
React.createElement(Text, { color: "#888888" }, exampleConfig)),
|
|
38
|
+
React.createElement(Box, { marginTop: 1 },
|
|
39
|
+
React.createElement(Text, { color: "gray" }, "Paste your MCP server config:")),
|
|
40
|
+
React.createElement(Box, { marginTop: 1, borderStyle: "round", borderColor: validationResult?.valid ? '#00cc66' : (validationResult?.error ? '#ff6666' : '#555555'), paddingX: 1 },
|
|
41
|
+
React.createElement(MultiLineInput, { value: input, onChange: handleInputChange, onSubmit: handleSubmit, placeholder: '{"name": "...", "command": "...", "args": [...]}', minHeight: 3, maxHeight: 5 })),
|
|
42
|
+
React.createElement(Box, { marginTop: 1 },
|
|
43
|
+
!validationResult && (React.createElement(Text, { dimColor: true }, "Press Enter to add the server")),
|
|
44
|
+
validationResult?.valid && (React.createElement(Text, { color: "#00cc66" },
|
|
45
|
+
"Adding server \"",
|
|
46
|
+
validationResult.config?.name,
|
|
47
|
+
"\"...")),
|
|
48
|
+
validationResult?.error && (React.createElement(Text, { color: "#ff6666" },
|
|
49
|
+
"Error: ",
|
|
50
|
+
validationResult.error))),
|
|
51
|
+
React.createElement(Box, { marginTop: 1 },
|
|
52
|
+
React.createElement(Text, { dimColor: true }, "[Enter] Add Server [ESC] Cancel"))));
|
|
53
|
+
};
|
|
54
|
+
//# sourceMappingURL=MCPAddScreen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MCPAddScreen.js","sourceRoot":"","sources":["../../../src/ui/components/MCPAddScreen.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface MCPTool {
|
|
3
|
+
name: string;
|
|
4
|
+
}
|
|
5
|
+
interface MCPServerInfo {
|
|
6
|
+
name: string;
|
|
7
|
+
enabled: boolean;
|
|
8
|
+
status: 'connected' | 'disconnected' | 'error' | 'connecting';
|
|
9
|
+
tools: MCPTool[];
|
|
10
|
+
}
|
|
11
|
+
interface MCPListScreenProps {
|
|
12
|
+
servers: MCPServerInfo[];
|
|
13
|
+
onClose: () => void;
|
|
14
|
+
}
|
|
15
|
+
export declare const MCPListScreen: React.FC<MCPListScreenProps>;
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=MCPListScreen.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MCPListScreen.d.ts","sourceRoot":"","sources":["../../../src/ui/components/MCPListScreen.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,UAAU,OAAO;IACb,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,aAAa;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,WAAW,GAAG,cAAc,GAAG,OAAO,GAAG,YAAY,CAAC;IAC9D,KAAK,EAAE,OAAO,EAAE,CAAC;CACpB;AAED,UAAU,kBAAkB;IACxB,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,OAAO,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAiEtD,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
export const MCPListScreen = ({ servers, onClose }) => {
|
|
4
|
+
// Note: ESC key handling is done in App.tsx
|
|
5
|
+
const getStatusIcon = (server) => {
|
|
6
|
+
if (!server.enabled)
|
|
7
|
+
return '⏸️';
|
|
8
|
+
switch (server.status) {
|
|
9
|
+
case 'connected': return '✓';
|
|
10
|
+
case 'error': return '❌';
|
|
11
|
+
case 'connecting': return '⚠️';
|
|
12
|
+
default: return '⚠️';
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
const getStatusText = (server) => {
|
|
16
|
+
if (!server.enabled)
|
|
17
|
+
return 'Disabled';
|
|
18
|
+
switch (server.status) {
|
|
19
|
+
case 'connected': return 'Enabled';
|
|
20
|
+
case 'error': return 'Error';
|
|
21
|
+
case 'connecting': return 'Connecting';
|
|
22
|
+
default: return 'Unknown';
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
const renderToolsBox = (tools) => {
|
|
26
|
+
if (tools.length === 0) {
|
|
27
|
+
return (React.createElement(Box, { borderStyle: "round", borderColor: "gray", paddingX: 1, marginTop: 1 },
|
|
28
|
+
React.createElement(Text, { color: "gray" }, "No tools available")));
|
|
29
|
+
}
|
|
30
|
+
// Create a string with all tool names separated by spaces
|
|
31
|
+
const toolNames = tools.map(t => t.name).join(' ');
|
|
32
|
+
return (React.createElement(Box, { borderStyle: "round", borderColor: "gray", paddingX: 1, marginTop: 1, flexWrap: "wrap" },
|
|
33
|
+
React.createElement(Text, { color: "gray" }, toolNames)));
|
|
34
|
+
};
|
|
35
|
+
return (React.createElement(Box, { flexDirection: "column", borderStyle: "round", borderColor: "#00aaff", paddingX: 1 },
|
|
36
|
+
React.createElement(Text, { color: "#00aaff", bold: true }, "MCP Servers and Tools"),
|
|
37
|
+
React.createElement(Text, { dimColor: true }, "View all configured MCP servers and their available tools"),
|
|
38
|
+
React.createElement(Box, { flexDirection: "column", marginTop: 1 }, servers.map((server, index) => (React.createElement(Box, { key: server.name, flexDirection: "column", marginBottom: index < servers.length - 1 ? 1 : 0 },
|
|
39
|
+
React.createElement(Box, null,
|
|
40
|
+
React.createElement(Text, null,
|
|
41
|
+
getStatusIcon(server),
|
|
42
|
+
" ",
|
|
43
|
+
React.createElement(Text, { bold: true }, server.name),
|
|
44
|
+
" - ",
|
|
45
|
+
React.createElement(Text, { color: server.enabled ? 'green' : 'yellow' }, getStatusText(server)))),
|
|
46
|
+
renderToolsBox(server.tools))))),
|
|
47
|
+
React.createElement(Box, { marginTop: 1 },
|
|
48
|
+
React.createElement(Text, { dimColor: true }, "Press ESC to return to chat"))));
|
|
49
|
+
};
|
|
50
|
+
//# sourceMappingURL=MCPListScreen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MCPListScreen.js","sourceRoot":"","sources":["../../../src/ui/components/MCPListScreen.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface MCPServerConfig {
|
|
3
|
+
name: string;
|
|
4
|
+
command: string;
|
|
5
|
+
args?: string[];
|
|
6
|
+
enabled?: boolean;
|
|
7
|
+
}
|
|
8
|
+
interface MCPServerListScreenProps {
|
|
9
|
+
mode: 'remove' | 'enable' | 'disable';
|
|
10
|
+
servers: MCPServerConfig[];
|
|
11
|
+
onSelect: (serverName: string) => void;
|
|
12
|
+
onCancel: () => void;
|
|
13
|
+
}
|
|
14
|
+
export declare const MCPServerListScreen: React.FC<MCPServerListScreenProps>;
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=MCPServerListScreen.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MCPServerListScreen.d.ts","sourceRoot":"","sources":["../../../src/ui/components/MCPServerListScreen.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,UAAU,eAAe;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,UAAU,wBAAwB;IAC9B,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IACtC,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,QAAQ,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,QAAQ,EAAE,MAAM,IAAI,CAAC;CACxB;AAED,eAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAAE,CAAC,wBAAwB,CA6ElE,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
import SelectInput from 'ink-select-input';
|
|
4
|
+
export const MCPServerListScreen = ({ mode, servers, onSelect, onCancel }) => {
|
|
5
|
+
// Note: ESC key handling is done in App.tsx
|
|
6
|
+
const getTitleAndColor = () => {
|
|
7
|
+
switch (mode) {
|
|
8
|
+
case 'remove':
|
|
9
|
+
return { title: 'Remove MCP Server', color: '#ff6666' };
|
|
10
|
+
case 'enable':
|
|
11
|
+
return { title: 'Enable MCP Server', color: '#00cc66' };
|
|
12
|
+
case 'disable':
|
|
13
|
+
return { title: 'Disable MCP Server', color: '#ffaa00' };
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
const { title, color } = getTitleAndColor();
|
|
17
|
+
const getDescription = () => {
|
|
18
|
+
switch (mode) {
|
|
19
|
+
case 'remove':
|
|
20
|
+
return 'Select a server to permanently remove from your configuration';
|
|
21
|
+
case 'enable':
|
|
22
|
+
return 'Select a disabled server to enable (AI will be able to use its tools)';
|
|
23
|
+
case 'disable':
|
|
24
|
+
return 'Select an enabled server to disable (AI will not see this server)';
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
const items = servers.map((server) => {
|
|
28
|
+
const argsStr = server.args?.join(' ') || '';
|
|
29
|
+
const statusIndicator = server.enabled === false ? '[OFF]' : '[ON]';
|
|
30
|
+
return {
|
|
31
|
+
label: server.name,
|
|
32
|
+
value: server.name,
|
|
33
|
+
command: server.command,
|
|
34
|
+
args: argsStr,
|
|
35
|
+
enabled: server.enabled !== false,
|
|
36
|
+
statusIndicator
|
|
37
|
+
};
|
|
38
|
+
});
|
|
39
|
+
return (React.createElement(Box, { flexDirection: "column", borderStyle: "round", borderColor: color, paddingX: 1 },
|
|
40
|
+
React.createElement(Text, { color: color, bold: true }, title),
|
|
41
|
+
React.createElement(Text, { dimColor: true }, getDescription()),
|
|
42
|
+
React.createElement(Box, { marginTop: 1 },
|
|
43
|
+
React.createElement(SelectInput, { items: items, itemComponent: ({ isSelected, label, command, args, statusIndicator }) => (React.createElement(Box, { flexDirection: "column" },
|
|
44
|
+
React.createElement(Box, null,
|
|
45
|
+
React.createElement(Text, { color: isSelected ? color : 'white', bold: isSelected },
|
|
46
|
+
isSelected ? '> ' : ' ',
|
|
47
|
+
statusIndicator,
|
|
48
|
+
" ",
|
|
49
|
+
label)),
|
|
50
|
+
React.createElement(Box, { paddingLeft: 4 },
|
|
51
|
+
React.createElement(Text, { color: "gray" },
|
|
52
|
+
command,
|
|
53
|
+
args ? ` ${args}` : '')))), onSelect: (item) => {
|
|
54
|
+
onSelect(item.value);
|
|
55
|
+
} })),
|
|
56
|
+
React.createElement(Box, { marginTop: 1 },
|
|
57
|
+
React.createElement(Text, { dimColor: true }, "Press ESC to return to chat"))));
|
|
58
|
+
};
|
|
59
|
+
//# sourceMappingURL=MCPServerListScreen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MCPServerListScreen.js","sourceRoot":"","sources":["../../../src/ui/components/MCPServerListScreen.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Monitor Mode AI Panel Component
|
|
3
|
+
*
|
|
4
|
+
* Displays AI monitoring messages in the lower half of the screen during
|
|
5
|
+
* agent-controlled shell mode. Shows thinking indicators, tool calls,
|
|
6
|
+
* and text outputs.
|
|
7
|
+
*/
|
|
8
|
+
import React from 'react';
|
|
9
|
+
import { MonitorMessage } from '../../services/monitored-shell-manager.js';
|
|
10
|
+
export interface MonitorModeAIPanelProps {
|
|
11
|
+
messages: MonitorMessage[];
|
|
12
|
+
maxHeight: number;
|
|
13
|
+
isActive: boolean;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Monitor Mode AI Panel
|
|
17
|
+
*
|
|
18
|
+
* Displays in the lower half of focus mode when agent control is enabled.
|
|
19
|
+
* Shows only the messages that fit within the available height.
|
|
20
|
+
*/
|
|
21
|
+
export declare const MonitorModeAIPanel: React.FC<MonitorModeAIPanelProps>;
|
|
22
|
+
export default MonitorModeAIPanel;
|
|
23
|
+
//# sourceMappingURL=MonitorModeAIPanel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MonitorModeAIPanel.d.ts","sourceRoot":"","sources":["../../../src/ui/components/MonitorModeAIPanel.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAE,cAAc,EAAE,MAAM,2CAA2C,CAAC;AAE3E,MAAM,WAAW,uBAAuB;IACpC,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;CACrB;AAoDD;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAkDhE,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Monitor Mode AI Panel Component
|
|
3
|
+
*
|
|
4
|
+
* Displays AI monitoring messages in the lower half of the screen during
|
|
5
|
+
* agent-controlled shell mode. Shows thinking indicators, tool calls,
|
|
6
|
+
* and text outputs.
|
|
7
|
+
*/
|
|
8
|
+
import React from 'react';
|
|
9
|
+
import { Box, Text } from 'ink';
|
|
10
|
+
import Spinner from 'ink-spinner';
|
|
11
|
+
/**
|
|
12
|
+
* Render a single monitoring message
|
|
13
|
+
*/
|
|
14
|
+
const MonitorMessageItem = ({ message }) => {
|
|
15
|
+
switch (message.type) {
|
|
16
|
+
case 'thinking':
|
|
17
|
+
// Show tick if answered, spinner if still waiting
|
|
18
|
+
if (message.isAnswered) {
|
|
19
|
+
return (React.createElement(Box, { marginY: 0 },
|
|
20
|
+
React.createElement(Text, { color: "#00cc66" }, "\u2713 "),
|
|
21
|
+
React.createElement(Text, { color: "#00cc66" }, message.content)));
|
|
22
|
+
}
|
|
23
|
+
return (React.createElement(Box, { marginY: 0 },
|
|
24
|
+
React.createElement(Text, { color: "#ffaa00" },
|
|
25
|
+
React.createElement(Spinner, { type: "dots" })),
|
|
26
|
+
React.createElement(Text, { color: "#ffaa00", dimColor: true },
|
|
27
|
+
" ",
|
|
28
|
+
message.content)));
|
|
29
|
+
case 'tool_call':
|
|
30
|
+
return (React.createElement(Box, { marginY: 0 },
|
|
31
|
+
React.createElement(Text, { color: "#00ccff" }, "\u26A1 "),
|
|
32
|
+
React.createElement(Text, { color: "#00ccff" }, message.content)));
|
|
33
|
+
case 'input_sent':
|
|
34
|
+
return (React.createElement(Box, { marginY: 0 },
|
|
35
|
+
React.createElement(Text, { color: "#00cc66" }, "\u2192 "),
|
|
36
|
+
React.createElement(Text, { color: "#00cc66" }, message.content)));
|
|
37
|
+
case 'text':
|
|
38
|
+
default:
|
|
39
|
+
return (React.createElement(Box, { marginY: 0 },
|
|
40
|
+
React.createElement(Text, null, message.content)));
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Monitor Mode AI Panel
|
|
45
|
+
*
|
|
46
|
+
* Displays in the lower half of focus mode when agent control is enabled.
|
|
47
|
+
* Shows only the messages that fit within the available height.
|
|
48
|
+
*/
|
|
49
|
+
export const MonitorModeAIPanel = ({ messages, maxHeight, isActive }) => {
|
|
50
|
+
if (!isActive) {
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
// Calculate how many messages to show (estimate 1-2 lines per message)
|
|
54
|
+
// Keep only the most recent messages that fit
|
|
55
|
+
const linesPerMessage = 2;
|
|
56
|
+
const maxMessages = Math.floor(maxHeight / linesPerMessage);
|
|
57
|
+
const visibleMessages = messages.slice(-maxMessages);
|
|
58
|
+
return (React.createElement(Box, { flexDirection: "column", borderStyle: "round", borderColor: "#9945FF", paddingX: 1, height: maxHeight },
|
|
59
|
+
React.createElement(Box, { marginBottom: 1 },
|
|
60
|
+
React.createElement(Text, { color: "#9945FF", bold: true },
|
|
61
|
+
React.createElement(Spinner, { type: "dots" }),
|
|
62
|
+
" Agent Monitor"),
|
|
63
|
+
React.createElement(Text, { color: "#666666", dimColor: true }, " - AI is controlling shell input")),
|
|
64
|
+
React.createElement(Box, { flexDirection: "column", flexGrow: 1 }, visibleMessages.length === 0 ? (React.createElement(Text, { color: "#666666", dimColor: true }, "Monitoring for input prompts...")) : (visibleMessages.map((msg) => (React.createElement(MonitorMessageItem, { key: msg.id, message: msg }))))),
|
|
65
|
+
React.createElement(Box, { marginTop: 1 },
|
|
66
|
+
React.createElement(Text, { color: "#666666", dimColor: true }, "Alt+I to disable agent control"))));
|
|
67
|
+
};
|
|
68
|
+
export default MonitorModeAIPanel;
|
|
69
|
+
//# sourceMappingURL=MonitorModeAIPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MonitorModeAIPanel.js","sourceRoot":"","sources":["../../../src/ui/components/MonitorModeAIPanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface MultiLineInputProps {
|
|
3
|
+
value?: string;
|
|
4
|
+
onChange: (value: string) => void;
|
|
5
|
+
onSubmit: (value: string) => void;
|
|
6
|
+
placeholder?: string;
|
|
7
|
+
isActive?: boolean;
|
|
8
|
+
minHeight?: number;
|
|
9
|
+
maxHeight?: number;
|
|
10
|
+
}
|
|
11
|
+
export declare const MultiLineInput: React.FC<MultiLineInputProps>;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=MultiLineInput.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MultiLineInput.d.ts","sourceRoot":"","sources":["../../../src/ui/components/MultiLineInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAG3D,UAAU,mBAAmB;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AA+CD,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAkOxD,CAAC"}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import React, { useState, useEffect, useRef } from 'react';
|
|
2
|
+
import { Box, Text, useInput } from 'ink';
|
|
3
|
+
const getVisualLines = (text, width) => {
|
|
4
|
+
const logicalLines = text.split('\n');
|
|
5
|
+
const visualLines = [];
|
|
6
|
+
let currentOffset = 0;
|
|
7
|
+
logicalLines.forEach((line, i) => {
|
|
8
|
+
if (line.length === 0) {
|
|
9
|
+
visualLines.push({ start: currentOffset, end: currentOffset, isHardEnd: true });
|
|
10
|
+
currentOffset += 1;
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
let remaining = line;
|
|
14
|
+
let lineStartOffset = currentOffset;
|
|
15
|
+
while (remaining.length > 0) {
|
|
16
|
+
let splitIndex = remaining.length;
|
|
17
|
+
let isHardEnd = false;
|
|
18
|
+
if (remaining.length > width) {
|
|
19
|
+
splitIndex = width;
|
|
20
|
+
const lastSpace = remaining.lastIndexOf(' ', width);
|
|
21
|
+
if (lastSpace > 0) {
|
|
22
|
+
splitIndex = lastSpace + 1;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
isHardEnd = true;
|
|
27
|
+
}
|
|
28
|
+
visualLines.push({
|
|
29
|
+
start: lineStartOffset,
|
|
30
|
+
end: lineStartOffset + splitIndex,
|
|
31
|
+
isHardEnd: isHardEnd
|
|
32
|
+
});
|
|
33
|
+
lineStartOffset += splitIndex;
|
|
34
|
+
remaining = remaining.slice(splitIndex);
|
|
35
|
+
}
|
|
36
|
+
currentOffset += line.length + (i < logicalLines.length - 1 ? 1 : 0);
|
|
37
|
+
});
|
|
38
|
+
return visualLines;
|
|
39
|
+
};
|
|
40
|
+
export const MultiLineInput = ({ value = '', onChange, onSubmit, placeholder = '', isActive = true, minHeight = 3, maxHeight = 10 }) => {
|
|
41
|
+
// Internal cursor state
|
|
42
|
+
const [cursorOffset, setCursorOffset] = useState(0);
|
|
43
|
+
// Refs to prevent stale closures in useInput
|
|
44
|
+
const valueRef = useRef(value);
|
|
45
|
+
const cursorOffsetRef = useRef(cursorOffset);
|
|
46
|
+
// Sync refs with props/state
|
|
47
|
+
useEffect(() => {
|
|
48
|
+
valueRef.current = value;
|
|
49
|
+
}, [value]);
|
|
50
|
+
useEffect(() => {
|
|
51
|
+
cursorOffsetRef.current = cursorOffset;
|
|
52
|
+
}, [cursorOffset]);
|
|
53
|
+
// Ensure cursor stays within bounds if value changes externally
|
|
54
|
+
useEffect(() => {
|
|
55
|
+
if (cursorOffset > value.length) {
|
|
56
|
+
setCursorOffset(value.length);
|
|
57
|
+
}
|
|
58
|
+
}, [value, cursorOffset]);
|
|
59
|
+
useInput((input, key) => {
|
|
60
|
+
if (!isActive)
|
|
61
|
+
return;
|
|
62
|
+
const currentValue = valueRef.current;
|
|
63
|
+
const currentCursorOffset = cursorOffsetRef.current;
|
|
64
|
+
// Handle Backspace
|
|
65
|
+
if (key.backspace || key.delete) {
|
|
66
|
+
if (currentCursorOffset > 0) {
|
|
67
|
+
const newValue = currentValue.slice(0, currentCursorOffset - 1) + currentValue.slice(currentCursorOffset);
|
|
68
|
+
onChange(newValue);
|
|
69
|
+
setCursorOffset(currentCursorOffset - 1);
|
|
70
|
+
}
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
// Handle Return (Submit or Newline)
|
|
74
|
+
if (key.return) {
|
|
75
|
+
// Shift+Enter or just Enter?
|
|
76
|
+
// User requested "same handling as input bar... various enter and newline characters"
|
|
77
|
+
// In InputBox: Enter submits if length <= 1??
|
|
78
|
+
// Wait, for JSON input, we definitely want newlines easily.
|
|
79
|
+
// But usually there is a submit action.
|
|
80
|
+
// Let's make Shift+Enter add newline, and Enter submit?
|
|
81
|
+
// OR checks for validity?
|
|
82
|
+
// The prompt says "[Enter] Validate and Add".
|
|
83
|
+
// If I paste JSON, I might want to edit it.
|
|
84
|
+
// Maybe standard behavior: Enter adds newline, Ctrl+Enter submits?
|
|
85
|
+
// Or matches InputBox: Enter submits.
|
|
86
|
+
// In InputBox, if multiline is needed, Shift+Enter is often used.
|
|
87
|
+
// Let's assume Enter = Submit, unless Shift is pressed?
|
|
88
|
+
// InputBox code: `if (key.return && input.length <= 1 && !key.shift && !key.ctrl)` -> submit.
|
|
89
|
+
// So Shift+Enter is newline.
|
|
90
|
+
if (key.shift) {
|
|
91
|
+
const newValue = currentValue.slice(0, currentCursorOffset) + '\n' + currentValue.slice(currentCursorOffset);
|
|
92
|
+
onChange(newValue);
|
|
93
|
+
setCursorOffset(currentCursorOffset + 1);
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
onSubmit(currentValue);
|
|
97
|
+
}
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
// Handle Arrows
|
|
101
|
+
if (key.upArrow) {
|
|
102
|
+
// Simple up: move back one line roughly?
|
|
103
|
+
// Or use visual lines logic from InputBox for robust navigation
|
|
104
|
+
const width = (process.stdout.columns || 80) - 4; // approximate width correction
|
|
105
|
+
const visualLines = getVisualLines(currentValue, width);
|
|
106
|
+
let currentLineIdx = visualLines.findIndex(line => (currentCursorOffset >= line.start && currentCursorOffset < line.end) ||
|
|
107
|
+
(currentCursorOffset === line.end && line.isHardEnd));
|
|
108
|
+
if (currentLineIdx === -1 && currentCursorOffset === currentValue.length) {
|
|
109
|
+
currentLineIdx = visualLines.length - 1;
|
|
110
|
+
}
|
|
111
|
+
if (currentLineIdx > 0) {
|
|
112
|
+
const currentLine = visualLines[currentLineIdx];
|
|
113
|
+
const targetLine = visualLines[currentLineIdx - 1];
|
|
114
|
+
const offsetInLine = currentCursorOffset - currentLine.start;
|
|
115
|
+
const newOffset = targetLine.start + Math.min(offsetInLine, targetLine.end - targetLine.start);
|
|
116
|
+
setCursorOffset(newOffset);
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
setCursorOffset(0);
|
|
120
|
+
}
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
if (key.downArrow) {
|
|
124
|
+
const width = (process.stdout.columns || 80) - 4;
|
|
125
|
+
const visualLines = getVisualLines(currentValue, width);
|
|
126
|
+
let currentLineIdx = visualLines.findIndex(line => (currentCursorOffset >= line.start && currentCursorOffset < line.end) ||
|
|
127
|
+
(currentCursorOffset === line.end && line.isHardEnd));
|
|
128
|
+
if (currentLineIdx === -1 && currentCursorOffset === currentValue.length) {
|
|
129
|
+
currentLineIdx = visualLines.length - 1;
|
|
130
|
+
}
|
|
131
|
+
if (currentLineIdx < visualLines.length - 1) {
|
|
132
|
+
const currentLine = visualLines[currentLineIdx];
|
|
133
|
+
const targetLine = visualLines[currentLineIdx + 1];
|
|
134
|
+
const offsetInLine = currentCursorOffset - currentLine.start;
|
|
135
|
+
const newOffset = targetLine.start + Math.min(offsetInLine, targetLine.end - targetLine.start);
|
|
136
|
+
setCursorOffset(newOffset);
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
setCursorOffset(currentValue.length);
|
|
140
|
+
}
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
if (key.leftArrow) {
|
|
144
|
+
if (currentCursorOffset > 0) {
|
|
145
|
+
setCursorOffset(currentCursorOffset - 1);
|
|
146
|
+
}
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
if (key.rightArrow) {
|
|
150
|
+
if (currentCursorOffset < currentValue.length) {
|
|
151
|
+
setCursorOffset(currentCursorOffset + 1);
|
|
152
|
+
}
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
// Regular Input (including paste)
|
|
156
|
+
if (input) {
|
|
157
|
+
// Handle paste (newlines are \r\n or \r -> \n)
|
|
158
|
+
const cleanedInput = input.replace(/\r\n/g, '\n').replace(/\r/g, '\n');
|
|
159
|
+
const newValue = currentValue.slice(0, currentCursorOffset) + cleanedInput + currentValue.slice(currentCursorOffset);
|
|
160
|
+
onChange(newValue);
|
|
161
|
+
setCursorOffset(currentCursorOffset + cleanedInput.length);
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
// Rendering
|
|
165
|
+
const termWidth = (process.stdout.columns || 80) - 4; // Padding/Border adjustment
|
|
166
|
+
const visualLines = getVisualLines(value, termWidth);
|
|
167
|
+
// Scrolling logic
|
|
168
|
+
// We want to keep cursor visible.
|
|
169
|
+
// Calculate cursor Visual Line
|
|
170
|
+
let cursorVisualLine = 0;
|
|
171
|
+
for (let i = 0; i < visualLines.length; i++) {
|
|
172
|
+
if (cursorOffset >= visualLines[i].start && cursorOffset <= visualLines[i].end) {
|
|
173
|
+
cursorVisualLine = i;
|
|
174
|
+
break;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
if (cursorOffset === value.length && visualLines.length > 0) {
|
|
178
|
+
cursorVisualLine = visualLines.length - 1;
|
|
179
|
+
}
|
|
180
|
+
const totalLines = visualLines.length;
|
|
181
|
+
// Simple scrolling: allow defining min/max height in props
|
|
182
|
+
const height = Math.min(Math.max(totalLines, minHeight), maxHeight);
|
|
183
|
+
let startLine = 0;
|
|
184
|
+
if (totalLines > height) {
|
|
185
|
+
if (cursorVisualLine < height) {
|
|
186
|
+
startLine = 0;
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
startLine = cursorVisualLine - height + 1;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
const endLine = Math.min(startLine + height, totalLines);
|
|
193
|
+
const visibleLines = visualLines.slice(startLine, endLine);
|
|
194
|
+
if (value.length === 0 && placeholder) {
|
|
195
|
+
return React.createElement(Text, { color: "gray" }, placeholder);
|
|
196
|
+
}
|
|
197
|
+
return (React.createElement(Box, { flexDirection: "column" },
|
|
198
|
+
startLine > 0 && React.createElement(Text, { color: "gray" }, "\u2191"),
|
|
199
|
+
visibleLines.map((vLine, idx) => {
|
|
200
|
+
const lineContent = value.slice(vLine.start, vLine.end);
|
|
201
|
+
const isCursorLine = cursorOffset >= vLine.start && cursorOffset <= vLine.end;
|
|
202
|
+
const cursorCol = isCursorLine ? cursorOffset - vLine.start : -1;
|
|
203
|
+
if (!isActive) {
|
|
204
|
+
return React.createElement(Text, { key: idx }, lineContent);
|
|
205
|
+
}
|
|
206
|
+
const chars = lineContent.split('');
|
|
207
|
+
const renderedChars = chars.map((char, charIdx) => {
|
|
208
|
+
if (isCursorLine && charIdx === cursorCol) {
|
|
209
|
+
return React.createElement(Text, { key: charIdx, inverse: true }, char);
|
|
210
|
+
}
|
|
211
|
+
return React.createElement(Text, { key: charIdx }, char);
|
|
212
|
+
});
|
|
213
|
+
if (isCursorLine && cursorCol === lineContent.length) {
|
|
214
|
+
renderedChars.push(React.createElement(Text, { key: "cursor", inverse: true }, " "));
|
|
215
|
+
}
|
|
216
|
+
if (renderedChars.length === 0) {
|
|
217
|
+
return React.createElement(Text, { key: idx }, " ");
|
|
218
|
+
}
|
|
219
|
+
return React.createElement(Text, { key: idx }, renderedChars);
|
|
220
|
+
}),
|
|
221
|
+
endLine < totalLines && React.createElement(Text, { color: "gray" }, "\u2193")));
|
|
222
|
+
};
|
|
223
|
+
//# sourceMappingURL=MultiLineInput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MultiLineInput.js","sourceRoot":"","sources":["../../../src/ui/components/MultiLineInput.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StatusBar.d.ts","sourceRoot":"","sources":["../../../src/ui/components/StatusBar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,UAAU,cAAc;IACtB,cAAc,EAAE,OAAO,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"StatusBar.d.ts","sourceRoot":"","sources":["../../../src/ui/components/StatusBar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,UAAU,cAAc;IACtB,cAAc,EAAE,OAAO,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAID,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CA+H9C,CAAC"}
|