agentk8 2.2.0 → 2.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +1 -1
- package/dist/components/App.js +7 -13
- package/dist/components/Input.js +11 -18
- package/dist/components/StatusBar.d.ts +3 -0
- package/dist/components/StatusBar.js +33 -10
- package/dist/components/WelcomeBox.d.ts +7 -0
- package/dist/components/WelcomeBox.js +27 -0
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.js +1 -0
- package/package.json +1 -1
package/dist/cli.js
CHANGED
package/dist/components/App.js
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useState } from 'react';
|
|
3
3
|
import { Box, Text, useApp, useInput, Static } from 'ink';
|
|
4
|
-
import {
|
|
4
|
+
import { WelcomeBox } from './WelcomeBox.js';
|
|
5
5
|
import { ChatMessage } from './ChatMessage.js';
|
|
6
6
|
import { Input } from './Input.js';
|
|
7
7
|
import { StatusBar } from './StatusBar.js';
|
|
8
8
|
import { ThinkingIndicator } from './ThinkingIndicator.js';
|
|
9
|
-
import { AgentPanel } from './AgentPanel.js';
|
|
10
9
|
import { runClaude } from '../lib/claude.js';
|
|
11
10
|
export const App = ({ mode, version }) => {
|
|
12
11
|
const { exit } = useApp();
|
|
@@ -45,7 +44,6 @@ export const App = ({ mode, version }) => {
|
|
|
45
44
|
if (awaitingApproval) {
|
|
46
45
|
if (input.toLowerCase() === 'y' || input.toLowerCase() === 'yes') {
|
|
47
46
|
setAwaitingApproval(false);
|
|
48
|
-
// Execute the pending plan
|
|
49
47
|
if (pendingPlan) {
|
|
50
48
|
await executeTask(pendingPlan);
|
|
51
49
|
setPendingPlan(null);
|
|
@@ -93,11 +91,9 @@ Respond with:
|
|
|
93
91
|
|
|
94
92
|
Format your response clearly with headers.`;
|
|
95
93
|
const result = await runClaude(planPrompt, mode);
|
|
96
|
-
// Mark orchestrator done, detect other agents
|
|
97
94
|
const mentioned = detectMentionedAgents(result.response);
|
|
98
95
|
setCompletedAgents(['Orchestrator', ...mentioned]);
|
|
99
96
|
setActiveAgent(undefined);
|
|
100
|
-
// Add plan message
|
|
101
97
|
const planMessage = {
|
|
102
98
|
id: (Date.now() + 1).toString(),
|
|
103
99
|
role: 'agent',
|
|
@@ -107,11 +103,9 @@ Format your response clearly with headers.`;
|
|
|
107
103
|
timestamp: new Date(),
|
|
108
104
|
};
|
|
109
105
|
setMessages(prev => [...prev, planMessage]);
|
|
110
|
-
// Update tokens
|
|
111
106
|
if (result.tokens) {
|
|
112
107
|
setTotalTokens(prev => prev + result.tokens.input + result.tokens.output);
|
|
113
108
|
}
|
|
114
|
-
// Ask for approval
|
|
115
109
|
setPendingPlan(input);
|
|
116
110
|
setAwaitingApproval(true);
|
|
117
111
|
addSystemMessage('Execute this plan? (y/n)');
|
|
@@ -170,7 +164,7 @@ Format your response clearly with headers.`;
|
|
|
170
164
|
};
|
|
171
165
|
// Handle slash commands
|
|
172
166
|
const handleCommand = (cmd) => {
|
|
173
|
-
const [command
|
|
167
|
+
const [command] = cmd.slice(1).split(' ');
|
|
174
168
|
switch (command) {
|
|
175
169
|
case 'exit':
|
|
176
170
|
case 'quit':
|
|
@@ -252,16 +246,16 @@ Ctrl+U - Clear input line`,
|
|
|
252
246
|
exit();
|
|
253
247
|
}
|
|
254
248
|
});
|
|
255
|
-
// Prepare items for Static (include
|
|
249
|
+
// Prepare items for Static (include welcome box as first item)
|
|
256
250
|
const staticItems = messages.length === 0
|
|
257
|
-
? [{ id: '
|
|
251
|
+
? [{ id: 'welcome', isWelcome: true, role: 'system', content: '', timestamp: new Date() }]
|
|
258
252
|
: messages;
|
|
259
253
|
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Static, { items: staticItems, children: (item) => {
|
|
260
|
-
if ('
|
|
261
|
-
return _jsx(
|
|
254
|
+
if ('isWelcome' in item && item.isWelcome) {
|
|
255
|
+
return _jsx(WelcomeBox, { version: version, mode: mode }, "welcome");
|
|
262
256
|
}
|
|
263
257
|
return (_jsx(ChatMessage, { role: item.role, agentName: item.agentName, content: item.content, tokens: item.tokens }, item.id));
|
|
264
|
-
} }), isProcessing && processingStartTime && (_jsx(ThinkingIndicator, { startTime: processingStartTime })), error && (_jsx(Box, { marginY: 1, marginLeft: 1, children: _jsxs(Text, { color: "#e53e3e", children: ["\u2717 Error: ", error] }) })), _jsx(Input, { onSubmit: handleSubmit, disabled: isProcessing, placeholder: awaitingApproval ? "Execute plan? (y/n)" : "
|
|
258
|
+
} }), isProcessing && processingStartTime && (_jsx(ThinkingIndicator, { startTime: processingStartTime })), error && (_jsx(Box, { marginY: 1, marginLeft: 1, children: _jsxs(Text, { color: "#e53e3e", children: ["\u2717 Error: ", error] }) })), _jsx(Input, { onSubmit: handleSubmit, disabled: isProcessing, placeholder: awaitingApproval ? "Execute plan? (y/n)" : 'Try "build a password validator"' }), _jsx(StatusBar, { mode: mode, tokens: totalTokens, startTime: startTime, isProcessing: isProcessing, activeAgent: activeAgent, completedAgents: completedAgents })] }));
|
|
265
259
|
};
|
|
266
260
|
function formatElapsed(start) {
|
|
267
261
|
const secs = Math.floor((Date.now() - start.getTime()) / 1000);
|
package/dist/components/Input.js
CHANGED
|
@@ -1,23 +1,26 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { useState } from 'react';
|
|
3
3
|
import { Box, Text, useInput } from 'ink';
|
|
4
4
|
// Sophisticated theme
|
|
5
5
|
const theme = {
|
|
6
6
|
accent: '#4fd1c5',
|
|
7
7
|
dim: '#4a5568',
|
|
8
|
+
border: '#4a5568',
|
|
8
9
|
suggestion: '#718096',
|
|
10
|
+
text: '#e2e8f0',
|
|
9
11
|
};
|
|
10
12
|
// Available commands for autocomplete
|
|
11
13
|
const COMMANDS = ['/help', '/status', '/clear', '/exit', '/plan', '/auto', '/mode', '/agents'];
|
|
12
14
|
// Store history globally so it persists across re-renders
|
|
13
15
|
const commandHistory = [];
|
|
14
16
|
const MAX_HISTORY = 100;
|
|
15
|
-
export const Input = ({ onSubmit, placeholder = 'Type a message...', prefix = '
|
|
17
|
+
export const Input = ({ onSubmit, placeholder = 'Type a message...', prefix = '❯', disabled = false, }) => {
|
|
16
18
|
const [value, setValue] = useState('');
|
|
17
19
|
const [cursorPosition, setCursorPosition] = useState(0);
|
|
18
20
|
const [historyIndex, setHistoryIndex] = useState(-1);
|
|
19
|
-
const [tempValue, setTempValue] = useState('');
|
|
20
|
-
const [tabIndex, setTabIndex] = useState(0);
|
|
21
|
+
const [tempValue, setTempValue] = useState('');
|
|
22
|
+
const [tabIndex, setTabIndex] = useState(0);
|
|
23
|
+
const termWidth = process.stdout.columns || 80;
|
|
21
24
|
// Get autocomplete suggestion
|
|
22
25
|
const getSuggestion = () => {
|
|
23
26
|
if (!value.startsWith('/') || value.length < 1)
|
|
@@ -33,7 +36,6 @@ export const Input = ({ onSubmit, placeholder = 'Type a message...', prefix = '>
|
|
|
33
36
|
return;
|
|
34
37
|
if (key.return) {
|
|
35
38
|
if (value.trim()) {
|
|
36
|
-
// Add to history (avoid duplicates at the end)
|
|
37
39
|
if (commandHistory.length === 0 || commandHistory[commandHistory.length - 1] !== value) {
|
|
38
40
|
commandHistory.push(value);
|
|
39
41
|
if (commandHistory.length > MAX_HISTORY) {
|
|
@@ -48,10 +50,8 @@ export const Input = ({ onSubmit, placeholder = 'Type a message...', prefix = '>
|
|
|
48
50
|
}
|
|
49
51
|
}
|
|
50
52
|
else if (key.upArrow) {
|
|
51
|
-
// Navigate history backwards
|
|
52
53
|
if (commandHistory.length > 0) {
|
|
53
54
|
if (historyIndex === -1) {
|
|
54
|
-
// Save current input before browsing history
|
|
55
55
|
setTempValue(value);
|
|
56
56
|
const newIndex = commandHistory.length - 1;
|
|
57
57
|
setHistoryIndex(newIndex);
|
|
@@ -67,7 +67,6 @@ export const Input = ({ onSubmit, placeholder = 'Type a message...', prefix = '>
|
|
|
67
67
|
}
|
|
68
68
|
}
|
|
69
69
|
else if (key.downArrow) {
|
|
70
|
-
// Navigate history forwards
|
|
71
70
|
if (historyIndex !== -1) {
|
|
72
71
|
if (historyIndex < commandHistory.length - 1) {
|
|
73
72
|
const newIndex = historyIndex + 1;
|
|
@@ -76,7 +75,6 @@ export const Input = ({ onSubmit, placeholder = 'Type a message...', prefix = '>
|
|
|
76
75
|
setCursorPosition(commandHistory[newIndex].length);
|
|
77
76
|
}
|
|
78
77
|
else {
|
|
79
|
-
// Return to the original input
|
|
80
78
|
setHistoryIndex(-1);
|
|
81
79
|
setValue(tempValue);
|
|
82
80
|
setCursorPosition(tempValue.length);
|
|
@@ -87,7 +85,7 @@ export const Input = ({ onSubmit, placeholder = 'Type a message...', prefix = '>
|
|
|
87
85
|
if (cursorPosition > 0) {
|
|
88
86
|
setValue(prev => prev.slice(0, cursorPosition - 1) + prev.slice(cursorPosition));
|
|
89
87
|
setCursorPosition(pos => pos - 1);
|
|
90
|
-
setHistoryIndex(-1);
|
|
88
|
+
setHistoryIndex(-1);
|
|
91
89
|
}
|
|
92
90
|
}
|
|
93
91
|
else if (key.leftArrow) {
|
|
@@ -100,28 +98,23 @@ export const Input = ({ onSubmit, placeholder = 'Type a message...', prefix = '>
|
|
|
100
98
|
process.exit(0);
|
|
101
99
|
}
|
|
102
100
|
else if (key.ctrl && input === 'u') {
|
|
103
|
-
// Clear line
|
|
104
101
|
setValue('');
|
|
105
102
|
setCursorPosition(0);
|
|
106
103
|
setHistoryIndex(-1);
|
|
107
104
|
}
|
|
108
105
|
else if (key.ctrl && input === 'a') {
|
|
109
|
-
// Go to beginning
|
|
110
106
|
setCursorPosition(0);
|
|
111
107
|
}
|
|
112
108
|
else if (key.ctrl && input === 'e') {
|
|
113
|
-
// Go to end
|
|
114
109
|
setCursorPosition(value.length);
|
|
115
110
|
}
|
|
116
111
|
else if (key.tab) {
|
|
117
|
-
// Tab completion
|
|
118
112
|
if (suggestion) {
|
|
119
113
|
const completed = value + suggestion;
|
|
120
114
|
setValue(completed);
|
|
121
115
|
setCursorPosition(completed.length);
|
|
122
116
|
}
|
|
123
117
|
else if (value.startsWith('/')) {
|
|
124
|
-
// Cycle through matching commands
|
|
125
118
|
const matches = COMMANDS.filter(cmd => cmd.startsWith(value.toLowerCase()));
|
|
126
119
|
if (matches.length > 0) {
|
|
127
120
|
const nextIndex = (tabIndex + 1) % matches.length;
|
|
@@ -134,14 +127,14 @@ export const Input = ({ onSubmit, placeholder = 'Type a message...', prefix = '>
|
|
|
134
127
|
else if (!key.ctrl && !key.meta && input) {
|
|
135
128
|
setValue(prev => prev.slice(0, cursorPosition) + input + prev.slice(cursorPosition));
|
|
136
129
|
setCursorPosition(pos => pos + input.length);
|
|
137
|
-
setHistoryIndex(-1);
|
|
138
|
-
setTabIndex(0);
|
|
130
|
+
setHistoryIndex(-1);
|
|
131
|
+
setTabIndex(0);
|
|
139
132
|
}
|
|
140
133
|
});
|
|
141
134
|
// Render input with cursor
|
|
142
135
|
const beforeCursor = value.slice(0, cursorPosition);
|
|
143
136
|
const atCursor = value[cursorPosition] || ' ';
|
|
144
137
|
const afterCursor = value.slice(cursorPosition + 1);
|
|
145
|
-
return (_jsxs(Box, {
|
|
138
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { children: _jsx(Text, { color: theme.border, children: '─'.repeat(termWidth) }) }), _jsxs(Box, { paddingX: 1, children: [_jsxs(Text, { color: theme.accent, children: [prefix, " "] }), value.length === 0 && !disabled ? (_jsx(Text, { color: theme.dim, children: placeholder })) : (_jsxs(_Fragment, { children: [_jsx(Text, { color: theme.text, children: beforeCursor }), _jsx(Text, { inverse: true, children: atCursor }), _jsx(Text, { color: theme.text, children: afterCursor }), suggestion && cursorPosition === value.length && (_jsx(Text, { color: theme.suggestion, children: suggestion }))] })), disabled && _jsx(Text, { color: theme.dim, children: " processing..." })] }), _jsx(Box, { children: _jsx(Text, { color: theme.border, children: '─'.repeat(termWidth) }) })] }));
|
|
146
139
|
};
|
|
147
140
|
export default Input;
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
+
import { AgentName } from './AgentPanel.js';
|
|
2
3
|
interface StatusBarProps {
|
|
3
4
|
mode: 'dev' | 'ml';
|
|
4
5
|
tokens: number;
|
|
5
6
|
startTime: Date;
|
|
6
7
|
isProcessing?: boolean;
|
|
8
|
+
activeAgent?: AgentName;
|
|
9
|
+
completedAgents?: AgentName[];
|
|
7
10
|
}
|
|
8
11
|
export declare const StatusBar: React.FC<StatusBarProps>;
|
|
9
12
|
export default StatusBar;
|
|
@@ -1,17 +1,30 @@
|
|
|
1
|
-
import { jsx as _jsx,
|
|
2
|
-
import { useState, useEffect } from 'react';
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import React, { useState, useEffect } from 'react';
|
|
3
3
|
import { Box, Text } from 'ink';
|
|
4
4
|
import { icons } from '../themes/retro.js';
|
|
5
|
-
//
|
|
5
|
+
// Theme
|
|
6
6
|
const theme = {
|
|
7
|
-
border: '#
|
|
7
|
+
border: '#4a5568',
|
|
8
8
|
accent: '#4fd1c5',
|
|
9
9
|
highlight: '#81e6d9',
|
|
10
|
-
dim: '#
|
|
11
|
-
|
|
10
|
+
dim: '#718096',
|
|
11
|
+
active: '#f6e05e',
|
|
12
|
+
done: '#48bb78',
|
|
12
13
|
};
|
|
13
|
-
|
|
14
|
-
|
|
14
|
+
// Agent icons
|
|
15
|
+
const agentIcons = {
|
|
16
|
+
Orchestrator: '◆',
|
|
17
|
+
Engineer: '⚙',
|
|
18
|
+
Tester: '✓',
|
|
19
|
+
Security: '⛨',
|
|
20
|
+
Scout: '◎',
|
|
21
|
+
Researcher: '◈',
|
|
22
|
+
'ML Engineer': '⬡',
|
|
23
|
+
'Data Engineer': '⬢',
|
|
24
|
+
Evaluator: '◉',
|
|
25
|
+
};
|
|
26
|
+
export const StatusBar = ({ mode, tokens, startTime, isProcessing = false, activeAgent, completedAgents = [], }) => {
|
|
27
|
+
const [elapsed, setElapsed] = useState('');
|
|
15
28
|
const [spinnerFrame, setSpinnerFrame] = useState(0);
|
|
16
29
|
useEffect(() => {
|
|
17
30
|
if (!isProcessing) {
|
|
@@ -42,7 +55,17 @@ export const StatusBar = ({ mode, tokens, startTime, isProcessing = false, }) =>
|
|
|
42
55
|
return t.toString();
|
|
43
56
|
};
|
|
44
57
|
const modeLabel = mode === 'dev' ? 'DEV' : 'ML';
|
|
45
|
-
|
|
46
|
-
|
|
58
|
+
// Get agents for this mode
|
|
59
|
+
const modeAgents = mode === 'dev'
|
|
60
|
+
? ['Orchestrator', 'Engineer', 'Tester', 'Security']
|
|
61
|
+
: ['Orchestrator', 'Researcher', 'ML Engineer', 'Evaluator'];
|
|
62
|
+
const getAgentColor = (agent) => {
|
|
63
|
+
if (activeAgent === agent)
|
|
64
|
+
return theme.active;
|
|
65
|
+
if (completedAgents.includes(agent))
|
|
66
|
+
return theme.done;
|
|
67
|
+
return theme.dim;
|
|
68
|
+
};
|
|
69
|
+
return (_jsxs(Box, { children: [_jsx(Text, { color: theme.dim, children: " " }), _jsx(Text, { color: theme.accent, children: modeLabel }), _jsx(Text, { color: theme.border, children: " \u2502 " }), modeAgents.map((agent, i) => (_jsxs(React.Fragment, { children: [_jsx(Text, { color: getAgentColor(agent), children: "[" }), _jsx(Text, { color: getAgentColor(agent), children: agentIcons[agent] }), _jsx(Text, { color: getAgentColor(agent), children: "]" }), i < modeAgents.length - 1 && _jsx(Text, { color: theme.dim, children: " " })] }, agent))), _jsx(Text, { color: theme.border, children: " \u2502 " }), _jsx(Text, { color: theme.dim, children: "? help" }), isProcessing && (_jsxs(_Fragment, { children: [_jsx(Text, { color: theme.border, children: " \u2502 " }), _jsx(Text, { color: theme.highlight, children: icons.spinner[spinnerFrame] })] })), elapsed && (_jsxs(_Fragment, { children: [_jsx(Text, { color: theme.border, children: " \u2502 " }), _jsx(Text, { color: theme.dim, children: elapsed })] })), _jsx(Text, { color: theme.dim, children: ' '.repeat(3) }), _jsxs(Text, { color: theme.accent, children: ["\u2191 ", formatTokens(tokens)] }), _jsx(Text, { color: theme.dim, children: " tokens" })] }));
|
|
47
70
|
};
|
|
48
71
|
export default StatusBar;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { Box, Text } from 'ink';
|
|
4
|
+
const theme = {
|
|
5
|
+
border: '#4a5568',
|
|
6
|
+
accent: '#4fd1c5',
|
|
7
|
+
highlight: '#81e6d9',
|
|
8
|
+
dim: '#718096',
|
|
9
|
+
text: '#e2e8f0',
|
|
10
|
+
title: '#f6e05e',
|
|
11
|
+
};
|
|
12
|
+
export const WelcomeBox = ({ version, mode }) => {
|
|
13
|
+
const termWidth = Math.min(process.stdout.columns || 120, 120);
|
|
14
|
+
const boxWidth = termWidth - 4;
|
|
15
|
+
const leftWidth = Math.floor(boxWidth * 0.45);
|
|
16
|
+
const rightWidth = boxWidth - leftWidth - 3;
|
|
17
|
+
const modeLabel = mode === 'dev' ? 'Software Development' : 'ML Research';
|
|
18
|
+
const agents = mode === 'dev'
|
|
19
|
+
? ['Orchestrator', 'Engineer', 'Tester', 'Security']
|
|
20
|
+
: ['Orchestrator', 'Researcher', 'ML Engineer', 'Evaluator'];
|
|
21
|
+
// Title bar
|
|
22
|
+
const titleText = ` AGENT-K v${version} `;
|
|
23
|
+
const titlePadLeft = Math.floor((boxWidth - titleText.length) / 2);
|
|
24
|
+
const titlePadRight = boxWidth - titleText.length - titlePadLeft;
|
|
25
|
+
return (_jsxs(Box, { flexDirection: "column", marginY: 1, children: [_jsxs(Box, { children: [_jsx(Text, { color: theme.border, children: "\u256D" }), _jsx(Text, { color: theme.border, children: '─'.repeat(titlePadLeft - 1) }), _jsx(Text, { color: theme.title, bold: true, children: titleText }), _jsx(Text, { color: theme.border, children: '─'.repeat(titlePadRight - 1) }), _jsx(Text, { color: theme.border, children: "\u256E" })] }), _jsxs(Box, { children: [_jsx(Text, { color: theme.border, children: "\u2502" }), _jsx(Text, { children: ' '.repeat(boxWidth) }), _jsx(Text, { color: theme.border, children: "\u2502" })] }), _jsxs(Box, { children: [_jsx(Text, { color: theme.border, children: "\u2502" }), _jsx(Box, { width: leftWidth, justifyContent: "center", children: _jsx(Text, { color: theme.accent, children: " /\\_/\\ " }) }), _jsx(Text, { color: theme.border, children: "\u2502" }), _jsxs(Box, { width: rightWidth, paddingLeft: 1, children: [_jsx(Text, { color: theme.text, children: "Welcome to " }), _jsx(Text, { color: theme.accent, bold: true, children: "AGENT-K" })] }), _jsx(Text, { color: theme.border, children: "\u2502" })] }), _jsxs(Box, { children: [_jsx(Text, { color: theme.border, children: "\u2502" }), _jsx(Box, { width: leftWidth, justifyContent: "center", children: _jsx(Text, { color: theme.accent, children: " ( o.o ) " }) }), _jsx(Text, { color: theme.border, children: "\u2502" }), _jsx(Box, { width: rightWidth, paddingLeft: 1, children: _jsx(Text, { color: theme.dim, children: "Multi-Agent Intelligence System" }) }), _jsx(Text, { color: theme.border, children: "\u2502" })] }), _jsxs(Box, { children: [_jsx(Text, { color: theme.border, children: "\u2502" }), _jsx(Box, { width: leftWidth, justifyContent: "center", children: _jsxs(Text, { color: theme.accent, children: [" ", '>', " ", '<', " "] }) }), _jsx(Text, { color: theme.border, children: "\u2502" }), _jsxs(Box, { width: rightWidth, paddingLeft: 1, children: [_jsx(Text, { color: theme.dim, children: "Mode: " }), _jsx(Text, { color: theme.highlight, children: modeLabel })] }), _jsx(Text, { color: theme.border, children: "\u2502" })] }), _jsxs(Box, { children: [_jsx(Text, { color: theme.border, children: "\u2502" }), _jsx(Text, { children: ' '.repeat(boxWidth) }), _jsx(Text, { color: theme.border, children: "\u2502" })] }), _jsxs(Box, { children: [_jsx(Text, { color: theme.border, children: "\u2502" }), _jsx(Box, { width: boxWidth, justifyContent: "center", children: agents.map((agent, i) => (_jsxs(React.Fragment, { children: [_jsx(Text, { color: theme.accent, children: "\u25C6 " }), _jsx(Text, { color: theme.text, children: agent }), i < agents.length - 1 && _jsx(Text, { color: theme.dim, children: " \u00B7 " })] }, agent))) }), _jsx(Text, { color: theme.border, children: "\u2502" })] }), _jsxs(Box, { children: [_jsx(Text, { color: theme.border, children: "\u2502" }), _jsx(Text, { children: ' '.repeat(boxWidth) }), _jsx(Text, { color: theme.border, children: "\u2502" })] }), _jsxs(Box, { children: [_jsx(Text, { color: theme.border, children: "\u2502" }), _jsx(Box, { width: boxWidth, justifyContent: "center", children: _jsx(Text, { color: theme.dim, children: "/help for commands \u00B7 /plan or /auto to set mode \u00B7 Ctrl+C to exit" }) }), _jsx(Text, { color: theme.border, children: "\u2502" })] }), _jsxs(Box, { children: [_jsx(Text, { color: theme.border, children: "\u2570" }), _jsx(Text, { color: theme.border, children: '─'.repeat(boxWidth) }), _jsx(Text, { color: theme.border, children: "\u256F" })] })] }));
|
|
26
|
+
};
|
|
27
|
+
export default WelcomeBox;
|
package/dist/components/index.js
CHANGED