@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,205 @@
1
+ /**
2
+ * Session Management Module
3
+ *
4
+ * This module provides session management functionality for the Cubectl CLI tool.
5
+ */
6
+ import fs from 'fs';
7
+ import path from 'path';
8
+ /**
9
+ * Session storage service
10
+ */
11
+ export class SessionStore {
12
+ sessionsDir;
13
+ activeSessionFile;
14
+ sessions = new Map();
15
+ activeSessionId = null;
16
+ constructor(baseDir) {
17
+ // Use default directory if none provided
18
+ const defaultDir = path.join(process.env['HOME'] || '', '.cubectl', 'sessions');
19
+ this.sessionsDir = baseDir || defaultDir;
20
+ this.activeSessionFile = path.join(this.sessionsDir, 'active_session');
21
+ // Ensure sessions directory exists
22
+ this.ensureDirectoryExists();
23
+ // Load sessions from disk
24
+ this.loadSessions();
25
+ // Load active session
26
+ this.loadActiveSession();
27
+ }
28
+ /**
29
+ * Ensure the sessions directory exists
30
+ */
31
+ ensureDirectoryExists() {
32
+ if (!fs.existsSync(this.sessionsDir)) {
33
+ fs.mkdirSync(this.sessionsDir, { recursive: true });
34
+ }
35
+ }
36
+ /**
37
+ * Load sessions from disk
38
+ */
39
+ loadSessions() {
40
+ const files = fs.readdirSync(this.sessionsDir);
41
+ for (const file of files) {
42
+ if (file.endsWith('.json') && file !== 'active_session.json') {
43
+ const filePath = path.join(this.sessionsDir, file);
44
+ try {
45
+ const sessionData = fs.readFileSync(filePath, 'utf8');
46
+ const session = JSON.parse(sessionData, (key, value) => {
47
+ if (key.includes('At') && typeof value === 'string') {
48
+ return new Date(value);
49
+ }
50
+ return value;
51
+ });
52
+ this.sessions.set(session.id, session);
53
+ }
54
+ catch (error) {
55
+ console.error(`Failed to load session ${file}: ${error instanceof Error ? error.message : String(error)}`);
56
+ }
57
+ }
58
+ }
59
+ }
60
+ /**
61
+ * Load active session from disk
62
+ */
63
+ loadActiveSession() {
64
+ if (fs.existsSync(this.activeSessionFile)) {
65
+ try {
66
+ const activeSessionId = fs.readFileSync(this.activeSessionFile, 'utf8').trim();
67
+ if (activeSessionId && this.sessions.has(activeSessionId)) {
68
+ this.activeSessionId = activeSessionId;
69
+ }
70
+ }
71
+ catch (error) {
72
+ console.error(`Failed to load active session: ${error instanceof Error ? error.message : String(error)}`);
73
+ }
74
+ }
75
+ }
76
+ /**
77
+ * Save active session to disk
78
+ */
79
+ saveActiveSession() {
80
+ if (this.activeSessionId) {
81
+ fs.writeFileSync(this.activeSessionFile, this.activeSessionId, 'utf8');
82
+ }
83
+ }
84
+ /**
85
+ * Save a session to disk
86
+ */
87
+ saveSession(session) {
88
+ const filePath = path.join(this.sessionsDir, `${session.id}.json`);
89
+ fs.writeFileSync(filePath, JSON.stringify(session, null, 2), 'utf8');
90
+ }
91
+ /**
92
+ * Create a new session
93
+ */
94
+ createSession(title = 'New Session') {
95
+ const session = {
96
+ id: Date.now().toString(),
97
+ title,
98
+ createdAt: new Date(),
99
+ updatedAt: new Date(),
100
+ messages: [],
101
+ };
102
+ this.sessions.set(session.id, session);
103
+ this.saveSession(session);
104
+ // Set as active session
105
+ this.activeSessionId = session.id;
106
+ this.saveActiveSession();
107
+ return session;
108
+ }
109
+ /**
110
+ * Get all sessions
111
+ */
112
+ getAllSessions() {
113
+ return Array.from(this.sessions.values()).sort((a, b) => b.updatedAt.getTime() - a.updatedAt.getTime());
114
+ }
115
+ /**
116
+ * Get a session by ID
117
+ */
118
+ getSession(id) {
119
+ return this.sessions.get(id);
120
+ }
121
+ /**
122
+ * Get the active session
123
+ */
124
+ getActiveSession() {
125
+ if (!this.activeSessionId) {
126
+ return null;
127
+ }
128
+ return this.getSession(this.activeSessionId) || null;
129
+ }
130
+ /**
131
+ * Set the active session
132
+ */
133
+ setActiveSession(id) {
134
+ if (this.sessions.has(id)) {
135
+ this.activeSessionId = id;
136
+ this.saveActiveSession();
137
+ return true;
138
+ }
139
+ return false;
140
+ }
141
+ /**
142
+ * Delete a session
143
+ */
144
+ deleteSession(id) {
145
+ if (this.sessions.delete(id)) {
146
+ const filePath = path.join(this.sessionsDir, `${id}.json`);
147
+ if (fs.existsSync(filePath)) {
148
+ fs.unlinkSync(filePath);
149
+ }
150
+ // If deleted session was active, set active to null
151
+ if (this.activeSessionId === id) {
152
+ this.activeSessionId = null;
153
+ if (fs.existsSync(this.activeSessionFile)) {
154
+ fs.unlinkSync(this.activeSessionFile);
155
+ }
156
+ }
157
+ return true;
158
+ }
159
+ return false;
160
+ }
161
+ /**
162
+ * Add a message to a session
163
+ */
164
+ addMessage(sessionId, role, content) {
165
+ const session = this.sessions.get(sessionId);
166
+ if (session) {
167
+ session.messages.push({
168
+ role,
169
+ content,
170
+ timestamp: new Date(),
171
+ });
172
+ session.updatedAt = new Date();
173
+ this.saveSession(session);
174
+ return true;
175
+ }
176
+ return false;
177
+ }
178
+ /**
179
+ * Update a session's title
180
+ */
181
+ updateSessionTitle(id, title) {
182
+ const session = this.sessions.get(id);
183
+ if (session) {
184
+ session.title = title;
185
+ session.updatedAt = new Date();
186
+ this.saveSession(session);
187
+ return true;
188
+ }
189
+ return false;
190
+ }
191
+ }
192
+ /**
193
+ * Global session store instance
194
+ */
195
+ let sessionStoreInstance = null;
196
+ /**
197
+ * Get the global session store instance
198
+ */
199
+ export function getSessionStore(baseDir) {
200
+ if (!sessionStoreInstance) {
201
+ sessionStoreInstance = new SessionStore(baseDir);
202
+ }
203
+ return sessionStoreInstance;
204
+ }
205
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/core/session/session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Cubectl 主应用程序
3
+ */
4
+ export declare function main(): Promise<void>;
@@ -0,0 +1,94 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ /**
3
+ * Cubectl 主应用程序
4
+ */
5
+ // 导入dotenv,用于加载环境变量
6
+ import { config } from 'dotenv';
7
+ import { fileURLToPath } from 'url';
8
+ import { dirname, join } from 'path';
9
+ const __filename = fileURLToPath(import.meta.url);
10
+ const __dirname = dirname(__filename);
11
+ // 加载项目根目录的 .env 文件
12
+ config({ path: join(__dirname, '..', '..', '..', '.env'), override: true });
13
+ // 从ink库导入render函数,用于渲染终端UI
14
+ import { render } from 'ink';
15
+ // 导入yargs库,用于解析命令行参数
16
+ import yargs from 'yargs';
17
+ // 导入hideBin函数,用于处理命令行参数
18
+ import { hideBin } from 'yargs/helpers';
19
+ // 导入主应用容器组件
20
+ import { AppContainer } from './ui/AppContainer.js';
21
+ // 从核心库导入版本获取函数
22
+ import { getVersion } from './core/index.js';
23
+ // 主函数,应用程序入口点
24
+ export async function main() {
25
+ // 解析命令行参数
26
+ const argv = await yargs(hideBin(process.argv))
27
+ // 调试模式选项
28
+ .option('debug', {
29
+ alias: 'd',
30
+ type: 'boolean',
31
+ description: '启用调试模式',
32
+ default: false,
33
+ })
34
+ // 自主执行模式选项
35
+ .option('autoExecute', {
36
+ alias: 'a',
37
+ type: 'boolean',
38
+ description: '启用自主执行模式',
39
+ default: false,
40
+ })
41
+ // Kubernetes上下文选项
42
+ .option('context', {
43
+ alias: 'c',
44
+ type: 'string',
45
+ description: '要使用的Kubernetes上下文',
46
+ })
47
+ // Kubernetes命名空间选项
48
+ .option('namespace', {
49
+ alias: 'n',
50
+ type: 'string',
51
+ description: '要使用的Kubernetes命名空间',
52
+ })
53
+ // 查询选项
54
+ .option('query', {
55
+ alias: 'q',
56
+ type: 'string',
57
+ description: '直接执行的查询内容',
58
+ })
59
+ // 设置版本信息
60
+ .version(getVersion())
61
+ // 启用帮助选项
62
+ .help()
63
+ // 设置帮助选项的别名
64
+ .alias('help', 'h')
65
+ // 解析并转换为Arguments类型
66
+ .parse();
67
+ // 处理查询参数:优先使用--query选项,其次使用位置参数
68
+ // 如果是直接执行模式且没有--query,使用位置参数作为查询
69
+ let query = argv.query;
70
+ if (!query && argv._.length > 0) {
71
+ query = argv._.join(' ');
72
+ }
73
+ // 创建应用程序配置对象
74
+ const config = {
75
+ // 调试模式标志
76
+ debug: argv.debug || false,
77
+ // 自主执行模式
78
+ autoExecute: argv.autoExecute || false,
79
+ // Kubernetes上下文
80
+ context: argv.context,
81
+ // Kubernetes命名空间
82
+ namespace: argv.namespace,
83
+ // 应用程序版本
84
+ version: getVersion(),
85
+ // 用户查询内容
86
+ query: query || undefined,
87
+ };
88
+ // 渲染主应用容器组件
89
+ render(_jsx(AppContainer, { config: config }), {
90
+ // 按Ctrl+C时退出应用
91
+ exitOnCtrlC: true,
92
+ });
93
+ }
94
+ //# sourceMappingURL=cubectl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cubectl.js","sourceRoot":"","sources":["../src/cubectl.tsx"],"names":[],"mappings":"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"}
package/dist/i18n.d.ts ADDED
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Internationalization (i18n) support
3
+ * Supports Chinese (zh) and English (en)
4
+ * Default: Chinese
5
+ */
6
+ export type Language = 'zh' | 'en';
7
+ declare class I18n {
8
+ private currentLanguage;
9
+ setLanguage(lang: Language): void;
10
+ getLanguage(): Language;
11
+ t(key: string): string;
12
+ tArray(key: string): string[];
13
+ }
14
+ export declare const i18n: I18n;
15
+ export declare const t: (key: string) => string;
16
+ export declare const tArray: (key: string) => string[];
17
+ export {};
package/dist/i18n.js ADDED
@@ -0,0 +1,162 @@
1
+ /**
2
+ * Internationalization (i18n) support
3
+ * Supports Chinese (zh) and English (en)
4
+ * Default: Chinese
5
+ */
6
+ const translations = {
7
+ zh: {
8
+ app: {
9
+ title: 'Cubectl - Kubernetes AI 运维助手',
10
+ version: '版本',
11
+ ready: '就绪!',
12
+ initializing: '初始化 AI Agent',
13
+ welcome: '欢迎使用 Cubectl!🚀 您的 AI 驱动的 Kubernetes 助手。',
14
+ agentInitialized: 'AI Agent 已初始化并配备 Kubernetes 工具!',
15
+ k8sConnected: 'Kubernetes 已连接',
16
+ k8sContext: '上下文',
17
+ askAnything: '向我询问关于您集群的任何问题!我可以自动查询资源并提供洞察。',
18
+ exitHint: '按 Esc 或 Ctrl+C 退出。',
19
+ agentError: 'Agent 错误',
20
+ k8sNotConfigured: '⚠ Kubernetes 未配置。请确保 kubeconfig 已设置。',
21
+ aiNotConfigured: '⚠ AI 模型未配置。请在 .env 文件中设置 OPENAI_API_KEY、OPENAI_BASE_URL 和 OPENAI_API_MODEL。',
22
+ builtInCommands: '您仍然可以使用内置命令,如:pods、deploy、svc、ns、nodes',
23
+ debugMode: '调试模式已启用',
24
+ context: '上下文',
25
+ namespace: '命名空间',
26
+ },
27
+ help: {
28
+ availableCommands: '可用命令:',
29
+ helpCommand: '显示此帮助信息',
30
+ statusCommand: '显示当前配置',
31
+ versionCommand: '显示版本信息',
32
+ clearCommand: '清除消息历史',
33
+ exitCommand: '退出应用程序',
34
+ withAiAgent: '启用 AI Agent 后,您可以用自然语言提问:',
35
+ exampleQueries: [
36
+ '"显示所有运行中的 pods"',
37
+ '"哪些 deployments 未就绪?"',
38
+ '"列出 default 命名空间中的所有 services"',
39
+ '"集群中有多少个节点?"',
40
+ '"显示 configmaps"',
41
+ ],
42
+ aiWillUseTools: 'AI 将自动使用正确的工具来回答您的问题!',
43
+ },
44
+ status: {
45
+ currentConfig: '当前配置:',
46
+ versionLabel: '版本',
47
+ contextLabel: '上下文',
48
+ namespaceLabel: '命名空间',
49
+ debugLabel: '调试',
50
+ aiAgentLabel: 'AI Agent',
51
+ k8sLabel: 'K8s',
52
+ ready: '就绪',
53
+ notConfigured: '未配置',
54
+ enabled: '已启用',
55
+ disabled: '已禁用',
56
+ connected: '已连接',
57
+ notSet: '未设置',
58
+ },
59
+ errors: {
60
+ initError: '初始化 agent 时出错',
61
+ agentNotAvailable: 'AI Agent 不可用。请在 .env 文件中配置 OPENAI_API_KEY 和 OPENAI_BASE_URL。\n输入 "help" 查看可用命令。',
62
+ },
63
+ },
64
+ en: {
65
+ app: {
66
+ title: 'Cubectl - Kubernetes AI Operations Assistant',
67
+ version: 'Version',
68
+ ready: 'Ready!',
69
+ initializing: 'Initializing AI Agent',
70
+ welcome: 'Welcome to Cubectl! 🚀 Your AI-powered Kubernetes assistant.',
71
+ agentInitialized: 'AI Agent initialized with Kubernetes tools!',
72
+ k8sConnected: 'Kubernetes connected',
73
+ k8sContext: 'context',
74
+ askAnything: 'Ask me anything about your cluster! I can automatically query resources and provide insights.',
75
+ exitHint: 'Press Esc or Ctrl+C to exit.',
76
+ agentError: 'Agent error',
77
+ k8sNotConfigured: '⚠ Kubernetes not configured. Make sure kubeconfig is set up.',
78
+ aiNotConfigured: '⚠ AI Model not configured. Set OPENAI_API_KEY, OPENAI_BASE_URL, and OPENAI_API_MODEL in .env file.',
79
+ builtInCommands: 'You can still use built-in commands like: pods, deploy, svc, ns, nodes',
80
+ debugMode: 'Debug mode enabled',
81
+ context: 'Context',
82
+ namespace: 'Namespace',
83
+ },
84
+ help: {
85
+ availableCommands: 'Available commands:',
86
+ helpCommand: 'Show this help message',
87
+ statusCommand: 'Show current configuration',
88
+ versionCommand: 'Show version information',
89
+ clearCommand: 'Clear message history',
90
+ exitCommand: 'Exit the application',
91
+ withAiAgent: 'With AI Agent enabled, you can ask questions in natural language:',
92
+ exampleQueries: [
93
+ '"show me all running pods"',
94
+ '"which deployments are not ready?"',
95
+ '"list all services in default namespace"',
96
+ '"how many nodes are in the cluster?"',
97
+ '"show me configmaps"',
98
+ ],
99
+ aiWillUseTools: 'The AI will automatically use the right tools to answer your questions!',
100
+ },
101
+ status: {
102
+ currentConfig: 'Current Configuration:',
103
+ versionLabel: 'Version',
104
+ contextLabel: 'Context',
105
+ namespaceLabel: 'Namespace',
106
+ debugLabel: 'Debug',
107
+ aiAgentLabel: 'AI Agent',
108
+ k8sLabel: 'K8s',
109
+ ready: 'Ready',
110
+ notConfigured: 'Not configured',
111
+ enabled: 'Enabled',
112
+ disabled: 'Disabled',
113
+ connected: 'Connected',
114
+ notSet: 'Not set',
115
+ },
116
+ errors: {
117
+ initError: 'Error initializing agent',
118
+ agentNotAvailable: 'AI Agent not available. Please configure OPENAI_API_KEY and OPENAI_BASE_URL in .env file.\nType "help" for available commands.',
119
+ },
120
+ },
121
+ };
122
+ class I18n {
123
+ currentLanguage = 'zh';
124
+ setLanguage(lang) {
125
+ this.currentLanguage = lang;
126
+ }
127
+ getLanguage() {
128
+ return this.currentLanguage;
129
+ }
130
+ t(key) {
131
+ const keys = key.split('.');
132
+ let value = translations[this.currentLanguage];
133
+ for (const k of keys) {
134
+ if (value && typeof value === 'object' && k in value) {
135
+ value = value[k];
136
+ }
137
+ else {
138
+ return key; // Return key if translation not found
139
+ }
140
+ }
141
+ return typeof value === 'string' ? value : key;
142
+ }
143
+ // Get array translations
144
+ tArray(key) {
145
+ const keys = key.split('.');
146
+ let value = translations[this.currentLanguage];
147
+ for (const k of keys) {
148
+ if (value && typeof value === 'object' && k in value) {
149
+ value = value[k];
150
+ }
151
+ else {
152
+ return []; // Return empty array if translation not found
153
+ }
154
+ }
155
+ return Array.isArray(value) ? value : [];
156
+ }
157
+ }
158
+ export const i18n = new I18n();
159
+ // Helper functions for quick translation
160
+ export const t = (key) => i18n.t(key);
161
+ export const tArray = (key) => i18n.tArray(key);
162
+ //# sourceMappingURL=i18n.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n.js","sourceRoot":"","sources":["../src/i18n.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Cubectl CLI Entry Point
4
+ */
5
+ export {};
package/dist/index.js ADDED
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Cubectl CLI Entry Point
4
+ */
5
+ import { main } from './cubectl.js';
6
+ main().catch((error) => {
7
+ console.error('Fatal error:', error);
8
+ process.exit(1);
9
+ });
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEpC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { AppContainerProps } from './types.js';
2
+ export declare function AppContainer({ config }: AppContainerProps): import("react/jsx-runtime").JSX.Element;