@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,15 @@
1
+ /**
2
+ * Kubernetes 操作的 LangChain 智能体
3
+ * 使用 langchain 1.2.10 的 createAgent API 并支持流式处理
4
+ */
5
+ import type { KubernetesClient } from '../kubernetes/client.js';
6
+ export interface AgentConfig {
7
+ apiKey: string;
8
+ baseURL: string;
9
+ model: string;
10
+ k8sClient: KubernetesClient;
11
+ context?: string;
12
+ namespace?: string;
13
+ }
14
+ export declare function createK8sAgent(config: AgentConfig): Promise<any>;
15
+ export declare function queryK8sAgent(agent: any, query: string): Promise<string>;
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Kubernetes 操作的 LangChain 智能体
3
+ * 使用 langchain 1.2.10 的 createAgent API 并支持流式处理
4
+ */
5
+ import { createAgent, initChatModel } from 'langchain';
6
+ import { createK8sTools } from './tools.js';
7
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
8
+ export async function createK8sAgent(config) {
9
+ // 使用 initChatModel 初始化模型并启用流式处理
10
+ const model = await initChatModel(config.model, {
11
+ modelProvider: 'openai',
12
+ baseUrl: config.baseURL,
13
+ apiKey: config.apiKey,
14
+ temperature: 0,
15
+ streaming: true, // 启用流式处理
16
+ });
17
+ // 创建 K8s 工具
18
+ const tools = createK8sTools(config.k8sClient);
19
+ // 使用 createAgent 创建智能体
20
+ const systemMessage = `You are a Kubernetes expert assistant helping users manage and understand their Kubernetes cluster.
21
+
22
+ Current Context:
23
+ - Cluster: ${config.context || 'unknown'}
24
+ - Default Namespace: ${config.namespace || 'default'}
25
+
26
+ You have access to tools that can query the Kubernetes cluster. Use these tools to get real-time information about the cluster state.
27
+
28
+ When answering questions:
29
+ 1. Use the appropriate tools to fetch current data
30
+ 2. Analyze the data and provide clear, actionable insights
31
+ 3. Reference specific resource names when relevant
32
+ 4. Be concise but informative
33
+ 5. If you see issues (e.g., pods not running, deployments not ready), point them out
34
+
35
+ Always base your answers on actual data from the tools, not assumptions.`;
36
+ const agent = createAgent({
37
+ model,
38
+ tools,
39
+ systemPrompt: systemMessage,
40
+ });
41
+ return agent;
42
+ }
43
+ // 非流式查询(用于向后兼容)
44
+ export async function queryK8sAgent(agent, query) {
45
+ try {
46
+ const result = await agent.invoke({
47
+ messages: [{ role: 'user', content: query }],
48
+ });
49
+ const lastMessage = result.messages?.[result.messages.length - 1];
50
+ return lastMessage?.content || 'No response from agent';
51
+ }
52
+ catch (error) {
53
+ return error instanceof Error ? `Agent error: ${error.message}` : 'Unknown agent error';
54
+ }
55
+ }
56
+ //# sourceMappingURL=agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../../src/core/ai/agent.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAEvD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAY5C,8DAA8D;AAC9D,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAAmB;IACpD,gCAAgC;IAChC,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE;QAC5C,aAAa,EAAE,QAAQ;QACvB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,WAAW,EAAE,CAAC;QACd,SAAS,EAAE,IAAI,EAAE,SAAS;KAC7B,CAAC,CAAC;IAEH,YAAY;IACZ,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAE/C,uBAAuB;IACvB,MAAM,aAAa,GAAG;;;aAGb,MAAM,CAAC,OAAO,IAAI,SAAS;uBACjB,MAAM,CAAC,SAAS,IAAI,SAAS;;;;;;;;;;;yEAWqB,CAAC;IAEtE,MAAM,KAAK,GAAG,WAAW,CAAC;QACtB,KAAK;QACL,KAAK;QACL,YAAY,EAAE,aAAa;KAC9B,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,gBAAgB;AAChB,MAAM,CAAC,KAAK,UAAU,aAAa,CAC/B,KAAU,EACV,KAAa;IAEb,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC;YAC9B,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;SAC/C,CAAC,CAAC;QAEH,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAClE,OAAO,WAAW,EAAE,OAAO,IAAI,wBAAwB,CAAC;IAC5D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,gBAAgB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,qBAAqB,CAAC;IAC5F,CAAC;AACL,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * OpenAI Client Configuration and Utilities
3
+ */
4
+ export interface OpenAIConfig {
5
+ apiKey: string;
6
+ baseURL: string;
7
+ model: string;
8
+ }
9
+ export declare class OpenAIClient {
10
+ private client;
11
+ private model;
12
+ constructor(config: OpenAIConfig);
13
+ chat(messages: Array<{
14
+ role: string;
15
+ content: string;
16
+ }>): Promise<string>;
17
+ queryKubernetes(userQuery: string, kubernetesContext?: string): Promise<string>;
18
+ }
19
+ export declare function createOpenAIClient(apiKey?: string, baseURL?: string, model?: string): OpenAIClient | null;
@@ -0,0 +1,60 @@
1
+ /**
2
+ * OpenAI Client Configuration and Utilities
3
+ */
4
+ import OpenAI from 'openai';
5
+ export class OpenAIClient {
6
+ client;
7
+ model;
8
+ constructor(config) {
9
+ this.client = new OpenAI({
10
+ apiKey: config.apiKey,
11
+ baseURL: config.baseURL,
12
+ });
13
+ this.model = config.model;
14
+ }
15
+ async chat(messages) {
16
+ try {
17
+ const response = await this.client.chat.completions.create({
18
+ model: this.model,
19
+ messages: messages,
20
+ temperature: 0.7,
21
+ max_tokens: 2000,
22
+ });
23
+ return response.choices[0]?.message?.content || 'No response from AI';
24
+ }
25
+ catch (error) {
26
+ if (error instanceof Error) {
27
+ throw new Error(`OpenAI API error: ${error.message}`);
28
+ }
29
+ throw new Error('Unknown OpenAI API error');
30
+ }
31
+ }
32
+ async queryKubernetes(userQuery, kubernetesContext) {
33
+ const systemPrompt = `You are a Kubernetes expert assistant. Help users query and understand their Kubernetes cluster resources.
34
+ When users ask about Kubernetes resources, provide clear and concise information.
35
+ If the query requires specific kubectl commands, suggest them.
36
+
37
+ Current context: ${kubernetesContext || 'default'}
38
+
39
+ Respond in a helpful and informative way.`;
40
+ const messages = [
41
+ { role: 'system', content: systemPrompt },
42
+ { role: 'user', content: userQuery },
43
+ ];
44
+ return this.chat(messages);
45
+ }
46
+ }
47
+ export function createOpenAIClient(apiKey, baseURL, model) {
48
+ const key = apiKey || process.env['OPENAI_API_KEY'];
49
+ const url = baseURL || process.env['OPENAI_BASE_URL'];
50
+ const modelName = model || process.env['OPENAI_API_MODEL'] || 'gpt-3.5-turbo';
51
+ if (!key || !url) {
52
+ return null;
53
+ }
54
+ return new OpenAIClient({
55
+ apiKey: key,
56
+ baseURL: url,
57
+ model: modelName,
58
+ });
59
+ }
60
+ //# sourceMappingURL=openai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../src/core/ai/openai.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,MAAM,MAAM,QAAQ,CAAC;AAQ5B,MAAM,OAAO,YAAY;IACb,MAAM,CAAS;IACf,KAAK,CAAS;IAEtB,YAAY,MAAoB;QAC5B,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC;YACrB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,OAAO,EAAE,MAAM,CAAC,OAAO;SAC1B,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,QAAkD;QACzD,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;gBACvD,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,QAAQ,EAAE,QAA6E;gBACvF,WAAW,EAAE,GAAG;gBAChB,UAAU,EAAE,IAAI;aACnB,CAAC,CAAC;YAEH,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,IAAI,qBAAqB,CAAC;QAC1E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;gBACzB,MAAM,IAAI,KAAK,CAAC,qBAAqB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAC1D,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAChD,CAAC;IACL,CAAC;IAED,KAAK,CAAC,eAAe,CACjB,SAAiB,EACjB,iBAA0B;QAE1B,MAAM,YAAY,GAAG;;;;mBAIV,iBAAiB,IAAI,SAAS;;0CAEP,CAAC;QAEnC,MAAM,QAAQ,GAAG;YACb,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE;YACzC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE;SACvC,CAAC;QAEF,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;CACJ;AAED,MAAM,UAAU,kBAAkB,CAC9B,MAAe,EACf,OAAgB,EAChB,KAAc;IAEd,MAAM,GAAG,GAAG,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IACpD,MAAM,GAAG,GAAG,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,eAAe,CAAC;IAE9E,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACf,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,IAAI,YAAY,CAAC;QACpB,MAAM,EAAE,GAAG;QACX,OAAO,EAAE,GAAG;QACZ,KAAK,EAAE,SAAS;KACnB,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Kubernetes Tools for LangChain Agent
3
+ * Using tool() API from langchain 1.2.10
4
+ */
5
+ import { z } from 'zod';
6
+ import type { KubernetesClient } from '../kubernetes/client.js';
7
+ /**
8
+ * Create tools for Kubernetes operations using the tool() API
9
+ */
10
+ export declare function createK8sTools(k8sClient: KubernetesClient): (import("@langchain/core/tools").DynamicStructuredTool<z.ZodObject<{
11
+ resourceType: z.ZodString;
12
+ namespace: z.ZodDefault<z.ZodString>;
13
+ allNamespaces: z.ZodDefault<z.ZodBoolean>;
14
+ names: z.ZodOptional<z.ZodString>;
15
+ }, z.core.$strip>, unknown, unknown, string, "list_k8s_resources"> | import("@langchain/core/tools").DynamicStructuredTool<z.ZodObject<{
16
+ yaml: z.ZodString;
17
+ }, z.core.$strip>, unknown, unknown, string, "create_resource"> | import("@langchain/core/tools").DynamicStructuredTool<z.ZodObject<{
18
+ kind: z.ZodString;
19
+ name: z.ZodString;
20
+ patch: z.ZodString;
21
+ namespace: z.ZodDefault<z.ZodString>;
22
+ }, z.core.$strip>, unknown, unknown, string, "patch_resource"> | import("@langchain/core/tools").DynamicStructuredTool<z.ZodObject<{
23
+ namespace: z.ZodDefault<z.ZodString>;
24
+ resourceTypes: z.ZodOptional<z.ZodArray<z.ZodString>>;
25
+ }, z.core.$strip>, unknown, unknown, string, "get_cluster_summary">)[];
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Kubernetes Tools for LangChain Agent
3
+ * Using tool() API from langchain 1.2.10
4
+ */
5
+ import { tool } from '@langchain/core/tools';
6
+ import { z } from 'zod';
7
+ /**
8
+ * Create tools for Kubernetes operations using the tool() API
9
+ */
10
+ export function createK8sTools(k8sClient) {
11
+ const listResourcesTool = tool(async (input) => {
12
+ try {
13
+ const results = await k8sClient.listUnstructuredResources(input.resourceType, {
14
+ namespace: input.allNamespaces ? undefined : input.namespace,
15
+ allNamespaces: input.allNamespaces,
16
+ names: input.names,
17
+ });
18
+ return results;
19
+ }
20
+ catch (error) {
21
+ return `Error listing ${input.resourceType}: ${error instanceof Error ? error.message : 'Unknown error'}`;
22
+ }
23
+ }, {
24
+ name: 'list_k8s_resources',
25
+ description: 'List any Kubernetes resources (pods, deployments, services, etc.) in a namespace or across all namespaces. Can also be used to get specific resources by providing names. Returns raw YAML.',
26
+ schema: z.object({
27
+ resourceType: z.string().describe('Type of resource to list (e.g., pods, deployments, svc)'),
28
+ namespace: z.string().default('default').describe('Kubernetes namespace (ignored if allNamespaces is true)'),
29
+ allNamespaces: z.boolean().default(false).describe('Whether to list resources across all namespaces'),
30
+ names: z.string().optional().describe('Comma-separated list of specific resource names to filter by'),
31
+ }),
32
+ });
33
+ const createResourceTool = tool(async (input) => {
34
+ try {
35
+ const resource = await k8sClient.createResource(input.yaml);
36
+ return `Resource created successfully:\n${resource}`;
37
+ }
38
+ catch (error) {
39
+ return `Error creating resource: ${error instanceof Error ? error.message : 'Unknown error'}`;
40
+ }
41
+ }, {
42
+ name: 'create_resource',
43
+ description: 'Create a Kubernetes resource from YAML definition.',
44
+ schema: z.object({
45
+ yaml: z.string().describe('YAML definition of the resource to create'),
46
+ }),
47
+ });
48
+ const patchResourceTool = tool(async (input) => {
49
+ try {
50
+ const patch = JSON.parse(input.patch);
51
+ const resource = await k8sClient.patchResource(input.kind, input.name, patch, input.namespace);
52
+ return `Resource patched successfully:\n${resource}`;
53
+ }
54
+ catch (error) {
55
+ return `Error patching resource: ${error instanceof Error ? error.message : 'Unknown error'}`;
56
+ }
57
+ }, {
58
+ name: 'patch_resource',
59
+ description: 'Patch a Kubernetes resource with JSON patch.',
60
+ schema: z.object({
61
+ kind: z.string().describe('Kubernetes resource kind (pod, deployment, service, etc.)'),
62
+ name: z.string().describe('Name of the resource to patch'),
63
+ patch: z.string().describe('JSON patch to apply to the resource (as a stringified JSON object)'),
64
+ namespace: z.string().default('default').describe('Kubernetes namespace'),
65
+ }),
66
+ });
67
+ const getClusterSummaryTool = tool(async (input) => {
68
+ try {
69
+ const summary = await k8sClient.getResourceSummary(input.namespace, input.resourceTypes);
70
+ return summary;
71
+ }
72
+ catch (error) {
73
+ return `Error getting cluster summary: ${error instanceof Error ? error.message : 'Unknown error'}`;
74
+ }
75
+ }, {
76
+ name: 'get_cluster_summary',
77
+ description: 'Get a summary of specific or core resources in a namespace.',
78
+ schema: z.object({
79
+ namespace: z.string().default('default').describe('Kubernetes namespace'),
80
+ resourceTypes: z.array(z.string()).optional().describe('Optional list of resource types to include in the summary (e.g., ["pods", "deployments"])'),
81
+ }),
82
+ });
83
+ return [
84
+ listResourcesTool,
85
+ createResourceTool,
86
+ patchResourceTool,
87
+ getClusterSummaryTool,
88
+ ];
89
+ }
90
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../src/core/ai/tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Cubectl Core Library (merged into CLI)
3
+ *
4
+ * This module provides core functionality for the Cubectl CLI tool.
5
+ */
6
+ export declare const VERSION = "0.1.0";
7
+ export interface Config {
8
+ version: string;
9
+ debug?: boolean;
10
+ autoExecute?: boolean;
11
+ }
12
+ export interface KubernetesContext {
13
+ name: string;
14
+ cluster: string;
15
+ namespace?: string;
16
+ }
17
+ export declare function getVersion(): string;
18
+ export declare function createConfig(options?: Partial<Config>): Config;
19
+ export * from './ai/agent.js';
20
+ export * from './ai/tools.js';
21
+ export * from './kubernetes/client.js';
22
+ export * from './session/session.js';
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Cubectl Core Library (merged into CLI)
3
+ *
4
+ * This module provides core functionality for the Cubectl CLI tool.
5
+ */
6
+ export const VERSION = '0.1.0';
7
+ export function getVersion() {
8
+ return VERSION;
9
+ }
10
+ export function createConfig(options) {
11
+ return {
12
+ version: VERSION,
13
+ debug: false,
14
+ autoExecute: false,
15
+ ...options,
16
+ };
17
+ }
18
+ // Export AI and Kubernetes modules
19
+ export * from './ai/agent.js';
20
+ export * from './ai/tools.js';
21
+ export * from './kubernetes/client.js';
22
+ export * from './session/session.js';
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC;AAc/B,MAAM,UAAU,UAAU;IACtB,OAAO,OAAO,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAyB;IAClD,OAAO;QACH,OAAO,EAAE,OAAO;QAChB,KAAK,EAAE,KAAK;QACZ,WAAW,EAAE,KAAK;QAClB,GAAG,OAAO;KACb,CAAC;AACN,CAAC;AAED,mCAAmC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Enhanced Kubernetes Client with Dynamic Resource Support
3
+ */
4
+ export interface KubernetesResource {
5
+ name: string;
6
+ namespace?: string;
7
+ kind?: string;
8
+ status?: string;
9
+ [key: string]: unknown;
10
+ }
11
+ export interface ListResourcesOptions {
12
+ namespace?: string;
13
+ allNamespaces?: boolean;
14
+ names?: string;
15
+ fieldSelector?: string;
16
+ labelSelector?: string;
17
+ }
18
+ export declare class KubernetesClient {
19
+ private kc;
20
+ private objectApi;
21
+ constructor();
22
+ getCurrentContext(): string;
23
+ /**
24
+ * List resources dynamically using unstructured objects
25
+ */
26
+ listUnstructuredResources(resourceType: string, options?: ListResourcesOptions): Promise<string>;
27
+ /**
28
+ * Resolve resource type to API Version and Kind
29
+ */
30
+ private resolveResourceGVK;
31
+ /**
32
+ * Legacy support or specialized methods
33
+ */
34
+ getResourceSummary(namespace?: string, resourceTypes?: string[]): Promise<string>;
35
+ createResource(yaml: string): Promise<string>;
36
+ patchResource(kind: string, name: string, patch: any, namespace?: string): Promise<string>;
37
+ }
38
+ export declare function createKubernetesClient(): KubernetesClient | null;
@@ -0,0 +1,166 @@
1
+ /**
2
+ * Enhanced Kubernetes Client with Dynamic Resource Support
3
+ */
4
+ import * as k8s from '@kubernetes/client-node';
5
+ export class KubernetesClient {
6
+ kc;
7
+ objectApi;
8
+ constructor() {
9
+ this.kc = new k8s.KubeConfig();
10
+ this.kc.loadFromDefault();
11
+ this.objectApi = this.kc.makeApiClient(k8s.KubernetesObjectApi);
12
+ }
13
+ getCurrentContext() {
14
+ return this.kc.getCurrentContext();
15
+ }
16
+ /**
17
+ * List resources dynamically using unstructured objects
18
+ */
19
+ async listUnstructuredResources(resourceType, options = {}) {
20
+ try {
21
+ const { apiVersion, kind } = await this.resolveResourceGVK(resourceType);
22
+ const namespace = options.allNamespaces ? undefined : (options.namespace || 'default');
23
+ const response = await this.objectApi.list(apiVersion, kind, namespace, undefined, // pretty
24
+ undefined, // exact
25
+ undefined, // export
26
+ options.fieldSelector, options.labelSelector);
27
+ const items = response.items || [];
28
+ if (items.length === 0) {
29
+ return `No ${resourceType} found.`;
30
+ }
31
+ // Return items as a YAML-formatted string
32
+ return items.map((item) => k8s.dumpYaml(item)).join('---\n');
33
+ }
34
+ catch (error) {
35
+ const msg = error instanceof Error ? error.message : 'Unknown error';
36
+ throw new Error(`Failed to list ${resourceType}: ${msg}`);
37
+ }
38
+ }
39
+ /**
40
+ * Resolve resource type to API Version and Kind
41
+ */
42
+ async resolveResourceGVK(resourceType) {
43
+ const lowerType = resourceType.toLowerCase();
44
+ // Common static mappings for speed
45
+ const staticMappings = {
46
+ 'pods': { apiVersion: 'v1', kind: 'Pod' },
47
+ 'pod': { apiVersion: 'v1', kind: 'Pod' },
48
+ 'po': { apiVersion: 'v1', kind: 'Pod' },
49
+ 'deployments': { apiVersion: 'apps/v1', kind: 'Deployment' },
50
+ 'deployment': { apiVersion: 'apps/v1', kind: 'Deployment' },
51
+ 'deploy': { apiVersion: 'apps/v1', kind: 'Deployment' },
52
+ 'services': { apiVersion: 'v1', kind: 'Service' },
53
+ 'service': { apiVersion: 'v1', kind: 'Service' },
54
+ 'svc': { apiVersion: 'v1', kind: 'Service' },
55
+ 'namespaces': { apiVersion: 'v1', kind: 'Namespace' },
56
+ 'namespace': { apiVersion: 'v1', kind: 'Namespace' },
57
+ 'ns': { apiVersion: 'v1', kind: 'Namespace' },
58
+ 'nodes': { apiVersion: 'v1', kind: 'Node' },
59
+ 'node': { apiVersion: 'v1', kind: 'Node' },
60
+ 'no': { apiVersion: 'v1', kind: 'Node' },
61
+ 'configmaps': { apiVersion: 'v1', kind: 'ConfigMap' },
62
+ 'configmap': { apiVersion: 'v1', kind: 'ConfigMap' },
63
+ 'cm': { apiVersion: 'v1', kind: 'ConfigMap' },
64
+ 'secrets': { apiVersion: 'v1', kind: 'Secret' },
65
+ 'secret': { apiVersion: 'v1', kind: 'Secret' },
66
+ 'ingresses': { apiVersion: 'networking.k8s.io/v1', kind: 'Ingress' },
67
+ 'ingress': { apiVersion: 'networking.k8s.io/v1', kind: 'Ingress' },
68
+ 'ing': { apiVersion: 'networking.k8s.io/v1', kind: 'Ingress' },
69
+ 'statefulsets': { apiVersion: 'apps/v1', kind: 'StatefulSet' },
70
+ 'statefulset': { apiVersion: 'apps/v1', kind: 'StatefulSet' },
71
+ 'sts': { apiVersion: 'apps/v1', kind: 'StatefulSet' },
72
+ 'daemonsets': { apiVersion: 'apps/v1', kind: 'DaemonSet' },
73
+ 'daemonset': { apiVersion: 'apps/v1', kind: 'DaemonSet' },
74
+ 'ds': { apiVersion: 'apps/v1', kind: 'DaemonSet' },
75
+ 'jobs': { apiVersion: 'batch/v1', kind: 'Job' },
76
+ 'job': { apiVersion: 'batch/v1', kind: 'Job' },
77
+ 'cronjobs': { apiVersion: 'batch/v1', kind: 'CronJob' },
78
+ 'cronjob': { apiVersion: 'batch/v1', kind: 'CronJob' },
79
+ 'cj': { apiVersion: 'batch/v1', kind: 'CronJob' },
80
+ 'persistentvolumes': { apiVersion: 'v1', kind: 'PersistentVolume' },
81
+ 'persistentvolume': { apiVersion: 'v1', kind: 'PersistentVolume' },
82
+ 'pv': { apiVersion: 'v1', kind: 'PersistentVolume' },
83
+ 'persistentvolumeclaims': { apiVersion: 'v1', kind: 'PersistentVolumeClaim' },
84
+ 'persistentvolumeclaim': { apiVersion: 'v1', kind: 'PersistentVolumeClaim' },
85
+ 'pvc': { apiVersion: 'v1', kind: 'PersistentVolumeClaim' },
86
+ };
87
+ if (staticMappings[lowerType]) {
88
+ return staticMappings[lowerType];
89
+ }
90
+ // Discovery fallback
91
+ try {
92
+ const apiGroups = await this.objectApi.getAPIVersions();
93
+ for (const group of (apiGroups.groups || [])) {
94
+ const preferredVersion = group.preferredVersion?.version;
95
+ if (!preferredVersion)
96
+ continue;
97
+ }
98
+ }
99
+ catch (e) {
100
+ // Ignore
101
+ }
102
+ // Last resort: assume kind is Capitalized version of resourceType
103
+ const kind = lowerType.charAt(0).toUpperCase() + lowerType.slice(1);
104
+ return { apiVersion: 'v1', kind };
105
+ }
106
+ /**
107
+ * Legacy support or specialized methods
108
+ */
109
+ async getResourceSummary(namespace = 'default', resourceTypes = ['pods', 'deployments', 'services']) {
110
+ try {
111
+ const counts = {};
112
+ for (const type of resourceTypes) {
113
+ const yaml = await this.listUnstructuredResources(type, { namespace });
114
+ counts[type] = yaml.startsWith('No ') ? 0 : yaml.split('---\n').length;
115
+ }
116
+ const details = Object.entries(counts)
117
+ .map(([type, count]) => `- ${type.charAt(0).toUpperCase() + type.slice(1)}: ${count}`)
118
+ .join('\n');
119
+ return `Namespace: ${namespace}
120
+ Summary:
121
+ ${details}`;
122
+ }
123
+ catch (error) {
124
+ return `Error getting resource summary: ${error instanceof Error ? error.message : 'Unknown error'}`;
125
+ }
126
+ }
127
+ async createResource(yaml) {
128
+ try {
129
+ const spec = k8s.loadYaml(yaml);
130
+ const response = await this.objectApi.create(spec);
131
+ return k8s.dumpYaml(response);
132
+ }
133
+ catch (error) {
134
+ const msg = error instanceof Error ? error.message : 'Unknown error';
135
+ throw new Error(`Failed to create resource: ${msg}`);
136
+ }
137
+ }
138
+ async patchResource(kind, name, patch, namespace = 'default') {
139
+ try {
140
+ const { apiVersion, kind: resolvedKind } = await this.resolveResourceGVK(kind);
141
+ // Combine identity with patch content
142
+ const spec = {
143
+ apiVersion,
144
+ kind: resolvedKind,
145
+ metadata: { name, namespace },
146
+ ...patch
147
+ };
148
+ const response = await this.objectApi.patch(spec);
149
+ return k8s.dumpYaml(response);
150
+ }
151
+ catch (error) {
152
+ const msg = error instanceof Error ? error.message : 'Unknown error';
153
+ throw new Error(`Failed to patch ${kind} ${name}: ${msg}`);
154
+ }
155
+ }
156
+ }
157
+ export function createKubernetesClient() {
158
+ try {
159
+ return new KubernetesClient();
160
+ }
161
+ catch (error) {
162
+ console.error('Failed to create Kubernetes client:', error);
163
+ return null;
164
+ }
165
+ }
166
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/core/kubernetes/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Session Management Module
3
+ *
4
+ * This module provides session management functionality for the Cubectl CLI tool.
5
+ */
6
+ /**
7
+ * Session data structure
8
+ */
9
+ export interface Session {
10
+ id: string;
11
+ title: string;
12
+ createdAt: Date;
13
+ updatedAt: Date;
14
+ messages: Array<{
15
+ role: 'user' | 'assistant' | 'tool';
16
+ content: string;
17
+ timestamp: Date;
18
+ }>;
19
+ }
20
+ /**
21
+ * Session storage service
22
+ */
23
+ export declare class SessionStore {
24
+ private sessionsDir;
25
+ private activeSessionFile;
26
+ private sessions;
27
+ private activeSessionId;
28
+ constructor(baseDir?: string);
29
+ /**
30
+ * Ensure the sessions directory exists
31
+ */
32
+ private ensureDirectoryExists;
33
+ /**
34
+ * Load sessions from disk
35
+ */
36
+ private loadSessions;
37
+ /**
38
+ * Load active session from disk
39
+ */
40
+ private loadActiveSession;
41
+ /**
42
+ * Save active session to disk
43
+ */
44
+ private saveActiveSession;
45
+ /**
46
+ * Save a session to disk
47
+ */
48
+ private saveSession;
49
+ /**
50
+ * Create a new session
51
+ */
52
+ createSession(title?: string): Session;
53
+ /**
54
+ * Get all sessions
55
+ */
56
+ getAllSessions(): Session[];
57
+ /**
58
+ * Get a session by ID
59
+ */
60
+ getSession(id: string): Session | undefined;
61
+ /**
62
+ * Get the active session
63
+ */
64
+ getActiveSession(): Session | null;
65
+ /**
66
+ * Set the active session
67
+ */
68
+ setActiveSession(id: string): boolean;
69
+ /**
70
+ * Delete a session
71
+ */
72
+ deleteSession(id: string): boolean;
73
+ /**
74
+ * Add a message to a session
75
+ */
76
+ addMessage(sessionId: string, role: 'user' | 'assistant' | 'tool', content: string): boolean;
77
+ /**
78
+ * Update a session's title
79
+ */
80
+ updateSessionTitle(id: string, title: string): boolean;
81
+ }
82
+ /**
83
+ * Get the global session store instance
84
+ */
85
+ export declare function getSessionStore(baseDir?: string): SessionStore;