@zhizuqiu/cubectl 0.1.0

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.
@@ -0,0 +1,297 @@
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ import { useState, useEffect, useRef } from 'react';
3
+ import { Box, Text, useInput, useApp, Static } from 'ink';
4
+ import Spinner from 'ink-spinner';
5
+ import { createKubernetesClient, createK8sAgent, } from '../core/index.js';
6
+ import { t, tArray } from '../i18n.js';
7
+ import { MessageComponent } from './MessageComponent.js';
8
+ export function AppContainer({ config }) {
9
+ const [isLoading, setIsLoading] = useState(true);
10
+ const [messages, setMessages] = useState([]);
11
+ const [inputValue, setInputValue] = useState('');
12
+ const [isProcessing, setIsProcessing] = useState(false);
13
+ const [agent, setAgent] = useState(null);
14
+ const [k8sClient, setK8sClient] = useState(null);
15
+ const [autoExecute, setAutoExecute] = useState(config.autoExecute); // 自主执行模式状态
16
+ const queryExecutedRef = useRef(false); // 跟踪CLI查询是否已执行
17
+ const { exit } = useApp();
18
+ useEffect(() => {
19
+ const initializeAgent = async () => {
20
+ try {
21
+ // 初始化K8s客户端
22
+ const k8s = createKubernetesClient();
23
+ setK8sClient(k8s);
24
+ if (!k8s) {
25
+ setMessages([
26
+ {
27
+ type: 'system',
28
+ content: t('app.k8sNotConfigured'),
29
+ timestamp: new Date(),
30
+ },
31
+ ]);
32
+ setIsLoading(false);
33
+ return;
34
+ }
35
+ // 获取环境变量
36
+ const apiKey = process.env['OPENAI_API_KEY'];
37
+ const baseURL = process.env['OPENAI_BASE_URL'];
38
+ const model = process.env['OPENAI_API_MODEL'] || 'gpt-3.5-turbo';
39
+ if (!apiKey || !baseURL) {
40
+ setMessages([
41
+ {
42
+ type: 'system',
43
+ content: t('app.welcome'),
44
+ timestamp: new Date(),
45
+ },
46
+ {
47
+ type: 'system',
48
+ content: `✓ ${t('app.k8sConnected')} (${t('app.k8sContext')}: ${k8s.getCurrentContext()})`,
49
+ timestamp: new Date(),
50
+ },
51
+ {
52
+ type: 'system',
53
+ content: t('app.aiNotConfigured'),
54
+ timestamp: new Date(),
55
+ },
56
+ {
57
+ type: 'system',
58
+ content: t('app.builtInCommands'),
59
+ timestamp: new Date(),
60
+ },
61
+ ]);
62
+ setIsLoading(false);
63
+ return;
64
+ }
65
+ // 创建LangChain智能体
66
+ const agentConfig = {
67
+ apiKey,
68
+ baseURL,
69
+ model,
70
+ k8sClient: k8s,
71
+ context: k8s.getCurrentContext(),
72
+ namespace: config.namespace || 'default',
73
+ };
74
+ const k8sAgent = await createK8sAgent(agentConfig);
75
+ setAgent(k8sAgent);
76
+ setMessages([
77
+ {
78
+ type: 'system',
79
+ content: t('app.welcome'),
80
+ timestamp: new Date(),
81
+ },
82
+ {
83
+ type: 'system',
84
+ content: `✓ ${t('app.agentInitialized')}`,
85
+ timestamp: new Date(),
86
+ },
87
+ {
88
+ type: 'system',
89
+ content: `✓ ${t('app.k8sConnected')} (${t('app.k8sContext')}: ${k8s.getCurrentContext()})`,
90
+ timestamp: new Date(),
91
+ },
92
+ {
93
+ type: 'system',
94
+ content: t('app.askAnything'),
95
+ timestamp: new Date(),
96
+ },
97
+ ]);
98
+ // 组件挂载后会处理自动执行的CLI查询
99
+ }
100
+ catch (error) {
101
+ setMessages([
102
+ {
103
+ type: 'system',
104
+ content: `${t('errors.initError')}: ${error instanceof Error ? error.message : 'Unknown error'}`,
105
+ timestamp: new Date(),
106
+ },
107
+ ]);
108
+ }
109
+ finally {
110
+ setIsLoading(false);
111
+ }
112
+ };
113
+ const timer = setTimeout(() => {
114
+ initializeAgent();
115
+ }, 1000);
116
+ return () => clearTimeout(timer);
117
+ }, [config.namespace]);
118
+ // 从命令行自动执行查询 - 必须在handleCommand定义之后
119
+ useEffect(() => {
120
+ if (!isLoading && config.query && agent && !queryExecutedRef.current && !isProcessing) {
121
+ queryExecutedRef.current = true;
122
+ // 短暂延迟以确保一切就绪
123
+ const timer = setTimeout(() => {
124
+ setMessages(prev => [...prev, {
125
+ type: 'user',
126
+ content: config.query,
127
+ timestamp: new Date(),
128
+ }]);
129
+ setInputValue('');
130
+ handleCommand(config.query, true); // 传递isFromQuery参数,避免重复添加消息
131
+ }, 1000);
132
+ return () => clearTimeout(timer);
133
+ }
134
+ return undefined;
135
+ // eslint-disable-next-line react-hooks/exhaustive-deps
136
+ }, [isLoading, config.query, agent, isProcessing]);
137
+ useInput((input, key) => {
138
+ if (isProcessing)
139
+ return;
140
+ if (key.escape || (key.ctrl && input === 'c')) {
141
+ exit();
142
+ return;
143
+ }
144
+ if (key.return) {
145
+ if (inputValue.trim()) {
146
+ handleCommand(inputValue.trim());
147
+ setInputValue('');
148
+ }
149
+ return;
150
+ }
151
+ if (key.backspace || key.delete) {
152
+ setInputValue((prev) => prev.slice(0, -1));
153
+ return;
154
+ }
155
+ if (!key.ctrl && !key.meta && input) {
156
+ setInputValue((prev) => prev + input);
157
+ }
158
+ });
159
+ const handleCommand = async (command, isFromQuery) => {
160
+ // 只有非查询模式下才添加用户消息到历史记录
161
+ if (!isFromQuery) {
162
+ setMessages((prev) => [
163
+ ...prev,
164
+ { type: 'user', content: command, timestamp: new Date() },
165
+ ]);
166
+ }
167
+ setIsProcessing(true);
168
+ const lowerCommand = command.toLowerCase();
169
+ // 内置命令
170
+ if (lowerCommand === 'help') {
171
+ const examples = tArray('help.exampleQueries').map(q => ` ${q}`).join('\n');
172
+ const response = `${t('help.availableCommands')}
173
+ help - ${t('help.helpCommand')}
174
+ status - ${t('help.statusCommand')}
175
+ version - ${t('help.versionCommand')}
176
+ clear - ${t('help.clearCommand')}
177
+ exit - ${t('help.exitCommand')}
178
+
179
+ ${t('help.withAiAgent')}
180
+ ${examples}
181
+
182
+ ${t('help.aiWillUseTools')}`;
183
+ setMessages((prev) => [...prev, { type: 'system', content: response, timestamp: new Date() }]);
184
+ setIsProcessing(false);
185
+ }
186
+ else if (lowerCommand === 'status') {
187
+ const response = `${t('status.currentConfig')}
188
+ ${t('status.versionLabel')}: ${config.version}
189
+ ${t('status.contextLabel')}: ${config.context || (k8sClient?.getCurrentContext() ?? t('status.notSet'))}
190
+ ${t('status.namespaceLabel')}: ${config.namespace || 'default'}
191
+ ${t('status.debugLabel')}: ${config.debug ? t('status.enabled') : t('status.disabled')}
192
+ ${t('status.autoExecuteLabel')}: ${autoExecute ? t('status.enabled') : t('status.disabled')}
193
+ ${t('status.aiAgentLabel')}: ${agent ? t('status.ready') : t('status.notConfigured')}
194
+ ${t('status.k8sLabel')}: ${k8sClient ? t('status.connected') : t('status.notConfigured')}`;
195
+ setMessages((prev) => [...prev, { type: 'system', content: response, timestamp: new Date() }]);
196
+ setIsProcessing(false);
197
+ }
198
+ else if (lowerCommand === 'auto-execute' || lowerCommand === 'autoexecute' || lowerCommand === 'ae') {
199
+ const parts = command.split(' ');
200
+ if (parts.length > 1) {
201
+ const subCommand = parts[1].toLowerCase();
202
+ if (subCommand === 'on') {
203
+ setAutoExecute(true);
204
+ setMessages((prev) => [...prev, { type: 'system', content: `${t('status.autoExecuteLabel')} ${t('status.enabled')}`, timestamp: new Date() }]);
205
+ }
206
+ else if (subCommand === 'off') {
207
+ setAutoExecute(false);
208
+ setMessages((prev) => [...prev, { type: 'system', content: `${t('status.autoExecuteLabel')} ${t('status.disabled')}`, timestamp: new Date() }]);
209
+ }
210
+ else {
211
+ setMessages((prev) => [...prev, { type: 'system', content: `Usage: ae on/off`, timestamp: new Date() }]);
212
+ }
213
+ }
214
+ else {
215
+ setMessages((prev) => [...prev, { type: 'system', content: `${t('status.autoExecuteLabel')}: ${autoExecute ? t('status.enabled') : t('status.disabled')}`, timestamp: new Date() }]);
216
+ }
217
+ setIsProcessing(false);
218
+ }
219
+ else if (lowerCommand === 'version') {
220
+ setMessages((prev) => [...prev, { type: 'system', content: `Cubectl version ${config.version}`, timestamp: new Date() }]);
221
+ setIsProcessing(false);
222
+ }
223
+ else if (lowerCommand === 'clear') {
224
+ setMessages([]);
225
+ setIsProcessing(false);
226
+ }
227
+ else if (lowerCommand === 'exit' || lowerCommand === 'quit') {
228
+ exit();
229
+ }
230
+ else if (agent) {
231
+ try {
232
+ // 初始化空的 AI 消息,由 MessageComponent 处理思考中状态
233
+ setMessages(prev => [...prev, { type: 'ai', content: '', timestamp: new Date(), streaming: true }]);
234
+ const stream = await agent.stream({ messages: [{ role: 'user', content: command }] }, { streamMode: 'updates' });
235
+ for await (const chunk of stream) {
236
+ if (!chunk || typeof chunk !== 'object')
237
+ continue;
238
+ // 从 LangGraph updates 中提取消息
239
+ const nodeName = Object.keys(chunk)[0];
240
+ const nodeData = chunk[nodeName];
241
+ if (!nodeData || !Array.isArray(nodeData.messages))
242
+ continue;
243
+ for (const msg of nodeData.messages) {
244
+ const content = String(msg.content || msg.kwargs?.content || "");
245
+ const toolCalls = msg.tool_calls || msg.kwargs?.tool_calls;
246
+ const role = (msg.type === 'tool' || msg.id?.includes('ToolMessage')) ? 'tool' : 'assistant';
247
+ setMessages(prev => {
248
+ const next = [...prev];
249
+ const aiIdx = [...next].reverse().findIndex(m => m.type === 'ai');
250
+ if (aiIdx === -1)
251
+ return prev;
252
+ const idx = next.length - 1 - aiIdx;
253
+ const aiMsg = { ...next[idx] };
254
+ if (role === 'assistant') {
255
+ aiMsg.content += content;
256
+ if (toolCalls?.length)
257
+ aiMsg.toolCall = toolCalls[0];
258
+ }
259
+ else if (role === 'tool') {
260
+ aiMsg.toolResult = content;
261
+ }
262
+ next[idx] = aiMsg;
263
+ return next;
264
+ });
265
+ }
266
+ }
267
+ setMessages(prev => {
268
+ const next = [...prev];
269
+ const aiIdx = [...next].reverse().findIndex(m => m.type === 'ai');
270
+ if (aiIdx !== -1) {
271
+ const idx = next.length - 1 - aiIdx;
272
+ next[idx] = { ...next[idx], streaming: false };
273
+ }
274
+ return next;
275
+ });
276
+ }
277
+ catch (error) {
278
+ const errorMsg = error instanceof Error ? error.message : 'Unknown error';
279
+ setMessages(prev => [...prev, { type: 'ai', content: `System Error: ${errorMsg}`, timestamp: new Date(), error: true }]);
280
+ }
281
+ finally {
282
+ setIsProcessing(false);
283
+ }
284
+ }
285
+ else {
286
+ const response = `AI Agent not available. Please configure OPENAI_API_KEY and OPENAI_BASE_URL in .env file.
287
+ Type "help" for available commands.`;
288
+ setMessages(prev => [...prev, { type: 'system', content: response, timestamp: new Date() }]);
289
+ setIsProcessing(false);
290
+ }
291
+ };
292
+ // 分离稳定消息和活动消息
293
+ const stableMessages = messages.filter(m => !m.streaming);
294
+ const activeMessages = messages.filter(m => m.streaming);
295
+ return (_jsxs(Box, { flexDirection: "column", paddingX: 1, paddingY: 1, children: [_jsxs(Box, { flexDirection: "row", justifyContent: "space-between", marginBottom: 1, children: [_jsxs(Text, { bold: true, color: "cyan", children: ["\uD83D\uDE80 Cubectl ", config.version] }), _jsxs(Box, { flexDirection: "row", gap: 2, children: [config.context && (_jsxs(Text, { color: "green", children: ["Context: ", config.context] })), config.namespace && (_jsxs(Text, { color: "blue", children: ["NS: ", config.namespace] })), _jsxs(Text, { color: "magenta", children: ["Auto: ", autoExecute ? '✓' : '✗'] })] })] }), isLoading ? (_jsx(Box, { flexDirection: "column", marginY: 1, children: _jsxs(Box, { flexDirection: "row", alignItems: "center", gap: 1, children: [_jsx(Spinner, { type: "dots" }), _jsxs(Text, { children: [t('app.initializing'), "..."] })] }) })) : (_jsxs(Box, { flexDirection: "column", children: [_jsx(Static, { items: stableMessages, children: (msg, index) => (_jsx(MessageComponent, { message: msg }, index)) }), activeMessages.map((msg, idx) => (_jsx(MessageComponent, { message: msg }, `active-${idx}`))), !isProcessing && (_jsxs(Box, { flexDirection: "row", alignItems: "center", marginTop: 1, children: [_jsx(Text, { color: "green", bold: true, children: '> ' }), _jsx(Box, { flexDirection: "row", children: _jsx(Text, { children: inputValue }) }), _jsx(Text, { color: "green", children: "\u258A" })] })), isProcessing && !activeMessages.length && (_jsxs(Box, { flexDirection: "row", alignItems: "center", marginTop: 1, children: [_jsx(Spinner, { type: "dots" }), _jsx(Box, { marginLeft: 1, children: _jsx(Text, { dimColor: true, children: "\u601D\u8003\u4E2D..." }) })] })), _jsx(Box, { marginTop: 1, children: _jsxs(Text, { dimColor: true, children: ["--- ", t('app.exitHint'), " ---"] }) })] })), config.debug && (_jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: "yellow", children: ["DEBUG: ", t('app.debugMode')] }) }))] }));
296
+ }
297
+ //# sourceMappingURL=AppContainer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AppContainer.js","sourceRoot":"","sources":["../../src/ui/AppContainer.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { Message } from './types.js';
2
+ interface MessageComponentProps {
3
+ message: Message;
4
+ }
5
+ export declare function MessageComponent({ message }: MessageComponentProps): import("react/jsx-runtime").JSX.Element;
6
+ export {};
@@ -0,0 +1,25 @@
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ import { Box, Text } from 'ink';
3
+ // 渲染工具调用
4
+ function renderToolCall(toolCall) {
5
+ const { name, args } = toolCall;
6
+ return (_jsxs(Box, { flexDirection: "column", marginLeft: 2, marginBottom: 1, children: [_jsxs(Text, { color: "blue", children: ["\uD83D\uDD27 [TOOL] ", name] }), Object.keys(args).length > 0 && (_jsx(Box, { marginLeft: 2, children: _jsxs(Text, { dimColor: true, children: ["args: ", JSON.stringify(args)] }) }))] }));
7
+ }
8
+ // 渲染工具结果
9
+ function renderToolResult(result) {
10
+ const truncatedResult = result.length > 50 ? result.substring(0, 50) + '...' : result;
11
+ return (_jsxs(Box, { flexDirection: "column", marginLeft: 2, marginBottom: 1, children: [_jsx(Text, { color: "green", children: "\uD83D\uDCCB [RESULT]" }), _jsx(Box, { marginLeft: 2, children: _jsx(Text, { dimColor: true, children: truncatedResult }) })] }));
12
+ }
13
+ // 渲染系统消息
14
+ function renderSystemMessage(message) {
15
+ return (_jsx(Box, { marginY: 0, marginBottom: 1, children: _jsxs(Text, { dimColor: true, children: ["[System] ", message.content] }) }));
16
+ }
17
+ // 渲染助手内容
18
+ function renderAssistantContent(message) {
19
+ const { content, error, streaming } = message;
20
+ return (_jsx(Box, { flexDirection: "column", children: _jsxs(Text, { color: error ? "red" : "white", children: [content, streaming && _jsx(Text, { color: "yellow", children: "..." })] }) }));
21
+ }
22
+ export function MessageComponent({ message }) {
23
+ return (_jsx(Box, { flexDirection: "column", children: message.type === 'user' ? (_jsxs(Box, { flexDirection: "row", marginBottom: 1, children: [_jsx(Text, { color: "cyan", bold: true, children: "\uD83E\uDDD1 \u4F60: " }), _jsx(Text, { children: message.content })] })) : message.type === 'ai' ? (_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsxs(Box, { flexDirection: "row", children: [_jsx(Text, { color: "magenta", bold: true, children: "\uD83E\uDD16 AI: " }), !message.content && !message.toolCall && message.streaming && _jsx(Text, { color: "yellow", children: "\uD83D\uDCAD \u601D\u8003\u4E2D..." })] }), _jsxs(Box, { flexDirection: "column", marginLeft: 4, children: [message.toolCall && renderToolCall(message.toolCall), message.toolResult && renderToolResult(message.toolResult), message.content && renderAssistantContent(message)] })] })) : (renderSystemMessage(message)) }));
24
+ }
25
+ //# sourceMappingURL=MessageComponent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MessageComponent.js","sourceRoot":"","sources":["../../src/ui/MessageComponent.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ export interface Message {
2
+ type: 'user' | 'system' | 'ai' | 'tool';
3
+ content: string;
4
+ timestamp: Date;
5
+ streaming?: boolean;
6
+ toolName?: string;
7
+ toolCall?: {
8
+ name: string;
9
+ args: Record<string, unknown>;
10
+ };
11
+ toolResult?: string;
12
+ error?: boolean;
13
+ }
14
+ export interface Config {
15
+ debug: boolean;
16
+ autoExecute: boolean;
17
+ context?: string;
18
+ namespace?: string;
19
+ version: string;
20
+ query?: string;
21
+ }
22
+ export interface AppContainerProps {
23
+ config: Config;
24
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/ui/types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,52 @@
1
+ {
2
+ "name": "@zhizuqiu/cubectl",
3
+ "version": "0.1.0",
4
+ "description": "Cubectl CLI - Kubernetes AI Operations Assistant",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "main": "dist/index.js",
8
+ "bin": {
9
+ "cubectl": "dist/index.js"
10
+ },
11
+ "publishConfig": {
12
+ "access": "public"
13
+ },
14
+ "preferGlobal": true,
15
+ "scripts": {
16
+ "build": "node ../../scripts/build_package.js",
17
+ "start": "node dist/index.js",
18
+ "dev": "npm run build && npm run start",
19
+ "typecheck": "tsc --noEmit",
20
+ "test": "vitest run"
21
+ },
22
+ "files": [
23
+ "dist",
24
+ "package.json",
25
+ "README.md"
26
+ ],
27
+ "dependencies": {
28
+ "@kubernetes/client-node": "1.4.0",
29
+ "@langchain/core": "^1.1.15",
30
+ "@langchain/langgraph": "1.1.1",
31
+ "@langchain/openai": "^1.2.2",
32
+ "dotenv": "^17.1.0",
33
+ "ink": "npm:@jrichman/ink@6.4.7",
34
+ "ink-spinner": "^5.0.0",
35
+ "langchain": "^1.2.10",
36
+ "openai": "6.16.0",
37
+ "react": "^19.2.0",
38
+ "yargs": "^17.7.2",
39
+ "zod": "4.3.5"
40
+ },
41
+ "devDependencies": {
42
+ "@types/node": "^20.11.24",
43
+ "@types/react": "^19.2.0",
44
+ "@types/yargs": "^17.0.32",
45
+ "ink-testing-library": "^4.0.0",
46
+ "typescript": "^5.3.3",
47
+ "vitest": "^3.2.4"
48
+ },
49
+ "engines": {
50
+ "node": ">=20"
51
+ }
52
+ }