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.
Files changed (148) hide show
  1. package/dist/cli-adapter.d.ts +78 -0
  2. package/dist/cli-adapter.d.ts.map +1 -1
  3. package/dist/cli-adapter.js +566 -165
  4. package/dist/cli-adapter.js.map +1 -1
  5. package/dist/config/build-config.d.ts +1 -1
  6. package/dist/config/build-config.js +1 -1
  7. package/dist/config/mcp-config-manager.d.ts +21 -0
  8. package/dist/config/mcp-config-manager.d.ts.map +1 -1
  9. package/dist/config/mcp-config-manager.js +184 -1
  10. package/dist/config/mcp-config-manager.js.map +1 -1
  11. package/dist/config/models.d.ts +1 -0
  12. package/dist/config/models.d.ts.map +1 -1
  13. package/dist/config/models.js +7 -2
  14. package/dist/config/models.js.map +1 -1
  15. package/dist/config/slash-commands.d.ts.map +1 -1
  16. package/dist/config/slash-commands.js +5 -3
  17. package/dist/config/slash-commands.js.map +1 -1
  18. package/dist/index.js +66 -11
  19. package/dist/index.js.map +1 -1
  20. package/dist/mcp/mcp-command-handler.d.ts +34 -3
  21. package/dist/mcp/mcp-command-handler.d.ts.map +1 -1
  22. package/dist/mcp/mcp-command-handler.js +171 -83
  23. package/dist/mcp/mcp-command-handler.js.map +1 -1
  24. package/dist/mcp/mcp-server-manager.d.ts.map +1 -1
  25. package/dist/mcp/mcp-server-manager.js +9 -23
  26. package/dist/mcp/mcp-server-manager.js.map +1 -1
  27. package/dist/mcp/mcp-tool-wrapper.d.ts.map +1 -1
  28. package/dist/mcp/mcp-tool-wrapper.js +42 -5
  29. package/dist/mcp/mcp-tool-wrapper.js.map +1 -1
  30. package/dist/services/ai-service-client.d.ts +6 -1
  31. package/dist/services/ai-service-client.d.ts.map +1 -1
  32. package/dist/services/ai-service-client.js +6 -6
  33. package/dist/services/ai-service-client.js.map +1 -1
  34. package/dist/services/api-client.d.ts +20 -0
  35. package/dist/services/api-client.d.ts.map +1 -1
  36. package/dist/services/api-client.js +35 -0
  37. package/dist/services/api-client.js.map +1 -1
  38. package/dist/services/input-detection-agent.d.ts +40 -0
  39. package/dist/services/input-detection-agent.d.ts.map +1 -0
  40. package/dist/services/input-detection-agent.js +213 -0
  41. package/dist/services/input-detection-agent.js.map +1 -0
  42. package/dist/services/input-requirement-detector.d.ts +28 -0
  43. package/dist/services/input-requirement-detector.d.ts.map +1 -0
  44. package/dist/services/input-requirement-detector.js +203 -0
  45. package/dist/services/input-requirement-detector.js.map +1 -0
  46. package/dist/services/monitored-shell-manager.d.ts +120 -0
  47. package/dist/services/monitored-shell-manager.d.ts.map +1 -0
  48. package/dist/services/monitored-shell-manager.js +239 -0
  49. package/dist/services/monitored-shell-manager.js.map +1 -0
  50. package/dist/services/session-quota-manager.d.ts +101 -0
  51. package/dist/services/session-quota-manager.d.ts.map +1 -0
  52. package/dist/services/session-quota-manager.js +242 -0
  53. package/dist/services/session-quota-manager.js.map +1 -0
  54. package/dist/services/shell-input-agent.d.ts +89 -0
  55. package/dist/services/shell-input-agent.d.ts.map +1 -0
  56. package/dist/services/shell-input-agent.js +361 -0
  57. package/dist/services/shell-input-agent.js.map +1 -0
  58. package/dist/services/sub-agent-manager.d.ts +139 -0
  59. package/dist/services/sub-agent-manager.d.ts.map +1 -0
  60. package/dist/services/sub-agent-manager.js +517 -0
  61. package/dist/services/sub-agent-manager.js.map +1 -0
  62. package/dist/tools/background-command.d.ts.map +1 -1
  63. package/dist/tools/background-command.js +33 -13
  64. package/dist/tools/background-command.js.map +1 -1
  65. package/dist/tools/command.d.ts.map +1 -1
  66. package/dist/tools/command.js +78 -4
  67. package/dist/tools/command.js.map +1 -1
  68. package/dist/tools/file-ops.d.ts.map +1 -1
  69. package/dist/tools/file-ops.js +33 -19
  70. package/dist/tools/file-ops.js.map +1 -1
  71. package/dist/tools/get-diff.d.ts.map +1 -1
  72. package/dist/tools/get-diff.js +5 -2
  73. package/dist/tools/get-diff.js.map +1 -1
  74. package/dist/tools/grep-search.d.ts.map +1 -1
  75. package/dist/tools/grep-search.js +41 -15
  76. package/dist/tools/grep-search.js.map +1 -1
  77. package/dist/tools/plan-mode.js +3 -3
  78. package/dist/tools/plan-mode.js.map +1 -1
  79. package/dist/tools/registry.js +1 -1
  80. package/dist/tools/registry.js.map +1 -1
  81. package/dist/tools/sub-agent.d.ts +9 -0
  82. package/dist/tools/sub-agent.d.ts.map +1 -0
  83. package/dist/tools/sub-agent.js +232 -0
  84. package/dist/tools/sub-agent.js.map +1 -0
  85. package/dist/tools/task-complete.d.ts.map +1 -1
  86. package/dist/tools/task-complete.js +14 -32
  87. package/dist/tools/task-complete.js.map +1 -1
  88. package/dist/ui/components/App.d.ts +45 -0
  89. package/dist/ui/components/App.d.ts.map +1 -1
  90. package/dist/ui/components/App.js +598 -95
  91. package/dist/ui/components/App.js.map +1 -1
  92. package/dist/ui/components/CircularSelectInput.d.ts +24 -0
  93. package/dist/ui/components/CircularSelectInput.d.ts.map +1 -0
  94. package/dist/ui/components/CircularSelectInput.js +71 -0
  95. package/dist/ui/components/CircularSelectInput.js.map +1 -0
  96. package/dist/ui/components/ErrorBoundary.d.ts +3 -2
  97. package/dist/ui/components/ErrorBoundary.d.ts.map +1 -1
  98. package/dist/ui/components/ErrorBoundary.js +29 -1
  99. package/dist/ui/components/ErrorBoundary.js.map +1 -1
  100. package/dist/ui/components/InputBox.d.ts +4 -0
  101. package/dist/ui/components/InputBox.d.ts.map +1 -1
  102. package/dist/ui/components/InputBox.js +40 -2
  103. package/dist/ui/components/InputBox.js.map +1 -1
  104. package/dist/ui/components/InteractiveShell.d.ts +6 -0
  105. package/dist/ui/components/InteractiveShell.d.ts.map +1 -1
  106. package/dist/ui/components/InteractiveShell.js +57 -6
  107. package/dist/ui/components/InteractiveShell.js.map +1 -1
  108. package/dist/ui/components/MCPAddScreen.d.ts +13 -0
  109. package/dist/ui/components/MCPAddScreen.d.ts.map +1 -0
  110. package/dist/ui/components/MCPAddScreen.js +54 -0
  111. package/dist/ui/components/MCPAddScreen.js.map +1 -0
  112. package/dist/ui/components/MCPListScreen.d.ts +17 -0
  113. package/dist/ui/components/MCPListScreen.d.ts.map +1 -0
  114. package/dist/ui/components/MCPListScreen.js +50 -0
  115. package/dist/ui/components/MCPListScreen.js.map +1 -0
  116. package/dist/ui/components/MCPServerListScreen.d.ts +16 -0
  117. package/dist/ui/components/MCPServerListScreen.d.ts.map +1 -0
  118. package/dist/ui/components/MCPServerListScreen.js +59 -0
  119. package/dist/ui/components/MCPServerListScreen.js.map +1 -0
  120. package/dist/ui/components/MonitorModeAIPanel.d.ts +23 -0
  121. package/dist/ui/components/MonitorModeAIPanel.d.ts.map +1 -0
  122. package/dist/ui/components/MonitorModeAIPanel.js +69 -0
  123. package/dist/ui/components/MonitorModeAIPanel.js.map +1 -0
  124. package/dist/ui/components/MultiLineInput.d.ts +13 -0
  125. package/dist/ui/components/MultiLineInput.d.ts.map +1 -0
  126. package/dist/ui/components/MultiLineInput.js +223 -0
  127. package/dist/ui/components/MultiLineInput.js.map +1 -0
  128. package/dist/ui/components/StatusBar.d.ts +2 -0
  129. package/dist/ui/components/StatusBar.d.ts.map +1 -1
  130. package/dist/ui/components/StatusBar.js +33 -2
  131. package/dist/ui/components/StatusBar.js.map +1 -1
  132. package/dist/ui/components/ToolExecutionMessage.d.ts.map +1 -1
  133. package/dist/ui/components/ToolExecutionMessage.js +271 -12
  134. package/dist/ui/components/ToolExecutionMessage.js.map +1 -1
  135. package/dist/ui/components/VersionUpdatePrompt.d.ts.map +1 -1
  136. package/dist/ui/components/VersionUpdatePrompt.js +3 -2
  137. package/dist/ui/components/VersionUpdatePrompt.js.map +1 -1
  138. package/dist/utils/editor-utils.d.ts +3 -3
  139. package/dist/utils/editor-utils.d.ts.map +1 -1
  140. package/dist/utils/editor-utils.js +15 -12
  141. package/dist/utils/editor-utils.js.map +1 -1
  142. package/dist/utils/input-classifier.d.ts.map +1 -1
  143. package/dist/utils/input-classifier.js +1 -0
  144. package/dist/utils/input-classifier.js.map +1 -1
  145. package/dist/utils/terminal-output.d.ts.map +1 -1
  146. package/dist/utils/terminal-output.js +198 -171
  147. package/dist/utils/terminal-output.js.map +1 -1
  148. 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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"}
@@ -6,6 +6,8 @@ interface StatusBarProps {
6
6
  loadingMessage?: string;
7
7
  model?: string;
8
8
  subshellContext?: SubshellContext;
9
+ currentTokens?: number;
10
+ maxTokens?: number;
9
11
  }
10
12
  export declare const StatusBar: React.FC<StatusBarProps>;
11
13
  export {};
@@ -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;CACnC;AAID,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CA4F9C,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"}