@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.
- package/dist/.tsbuildinfo +1 -0
- package/dist/core/ai/agent.d.ts +15 -0
- package/dist/core/ai/agent.js +56 -0
- package/dist/core/ai/agent.js.map +1 -0
- package/dist/core/ai/openai.d.ts +19 -0
- package/dist/core/ai/openai.js +60 -0
- package/dist/core/ai/openai.js.map +1 -0
- package/dist/core/ai/tools.d.ts +25 -0
- package/dist/core/ai/tools.js +90 -0
- package/dist/core/ai/tools.js.map +1 -0
- package/dist/core/index.d.ts +22 -0
- package/dist/core/index.js +23 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/kubernetes/client.d.ts +38 -0
- package/dist/core/kubernetes/client.js +166 -0
- package/dist/core/kubernetes/client.js.map +1 -0
- package/dist/core/session/session.d.ts +85 -0
- package/dist/core/session/session.js +205 -0
- package/dist/core/session/session.js.map +1 -0
- package/dist/cubectl.d.ts +4 -0
- package/dist/cubectl.js +94 -0
- package/dist/cubectl.js.map +1 -0
- package/dist/i18n.d.ts +17 -0
- package/dist/i18n.js +162 -0
- package/dist/i18n.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/ui/AppContainer.d.ts +2 -0
- package/dist/ui/AppContainer.js +297 -0
- package/dist/ui/AppContainer.js.map +1 -0
- package/dist/ui/MessageComponent.d.ts +6 -0
- package/dist/ui/MessageComponent.js +25 -0
- package/dist/ui/MessageComponent.js.map +1 -0
- package/dist/ui/types.d.ts +24 -0
- package/dist/ui/types.js +2 -0
- package/dist/ui/types.js.map +1 -0
- package/package.json +52 -0
|
@@ -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":"AAAA;;GAEG;AAEH,OAAO,KAAK,GAAG,MAAM,yBAAyB,CAAC;AAkB/C,MAAM,OAAO,gBAAgB;IACjB,EAAE,CAAiB;IACnB,SAAS,CAA0B;IAE3C;QACI,IAAI,CAAC,EAAE,GAAG,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;QAC/B,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC;QAC1B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IACpE,CAAC;IAED,iBAAiB;QACb,OAAO,IAAI,CAAC,EAAE,CAAC,iBAAiB,EAAE,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,yBAAyB,CAC3B,YAAoB,EACpB,UAAgC,EAAE;QAElC,IAAI,CAAC;YACD,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;YACzE,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,IAAI,SAAS,CAAC,CAAC;YAEvF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CACtC,UAAU,EACV,IAAI,EACJ,SAAS,EACT,SAAS,EAAE,SAAS;YACpB,SAAS,EAAE,QAAQ;YACnB,SAAS,EAAE,SAAS;YACpB,OAAO,CAAC,aAAa,EACrB,OAAO,CAAC,aAAa,CACxB,CAAC;YAEF,MAAM,KAAK,GAAI,QAAgB,CAAC,KAAK,IAAI,EAAE,CAAC;YAE5C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACrB,OAAO,MAAM,YAAY,SAAS,CAAC;YACvC,CAAC;YAED,0CAA0C;YAC1C,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;YACrE,MAAM,IAAI,KAAK,CAAC,kBAAkB,YAAY,KAAK,GAAG,EAAE,CAAC,CAAC;QAC9D,CAAC;IACL,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,kBAAkB,CAAC,YAAoB;QACjD,MAAM,SAAS,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;QAE7C,mCAAmC;QACnC,MAAM,cAAc,GAAyD;YACzE,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE;YACzC,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE;YACxC,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE;YACvC,aAAa,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE;YAC5D,YAAY,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE;YAC3D,QAAQ,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE;YACvD,UAAU,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE;YACjD,SAAS,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE;YAChD,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE;YAC5C,YAAY,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE;YACrD,WAAW,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE;YACpD,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE;YAC7C,OAAO,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE;YAC3C,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE;YAC1C,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE;YACxC,YAAY,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE;YACrD,WAAW,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE;YACpD,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE;YAC7C,SAAS,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC/C,QAAQ,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC9C,WAAW,EAAE,EAAE,UAAU,EAAE,sBAAsB,EAAE,IAAI,EAAE,SAAS,EAAE;YACpE,SAAS,EAAE,EAAE,UAAU,EAAE,sBAAsB,EAAE,IAAI,EAAE,SAAS,EAAE;YAClE,KAAK,EAAE,EAAE,UAAU,EAAE,sBAAsB,EAAE,IAAI,EAAE,SAAS,EAAE;YAC9D,cAAc,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,EAAE;YAC9D,aAAa,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,EAAE;YAC7D,KAAK,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,EAAE;YACrD,YAAY,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE;YAC1D,WAAW,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE;YACzD,IAAI,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE;YAClD,MAAM,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE;YAC/C,KAAK,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE;YAC9C,UAAU,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE;YACvD,SAAS,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE;YACtD,IAAI,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE;YACjD,mBAAmB,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,kBAAkB,EAAE;YACnE,kBAAkB,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,kBAAkB,EAAE;YAClE,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,kBAAkB,EAAE;YACpD,wBAAwB,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,uBAAuB,EAAE;YAC7E,uBAAuB,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,uBAAuB,EAAE;YAC5E,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,uBAAuB,EAAE;SAC7D,CAAC;QAEF,IAAI,cAAc,CAAC,SAAS,CAAC,EAAE,CAAC;YAC5B,OAAO,cAAc,CAAC,SAAS,CAAC,CAAC;QACrC,CAAC;QAED,qBAAqB;QACrB,IAAI,CAAC;YACD,MAAM,SAAS,GAAG,MAAO,IAAI,CAAC,SAAiB,CAAC,cAAc,EAAE,CAAC;YACjE,KAAK,MAAM,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC;gBAC3C,MAAM,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,EAAE,OAAO,CAAC;gBACzD,IAAI,CAAC,gBAAgB;oBAAE,SAAS;YACpC,CAAC;QACL,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,SAAS;QACb,CAAC;QAED,kEAAkE;QAClE,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACpE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,kBAAkB,CAAC,YAAoB,SAAS,EAAE,gBAA0B,CAAC,MAAM,EAAE,aAAa,EAAE,UAAU,CAAC;QACjH,IAAI,CAAC;YACD,MAAM,MAAM,GAA2B,EAAE,CAAC;YAE1C,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;gBAC/B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;gBACvE,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;YAC3E,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;iBACjC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC;iBACrF,IAAI,CAAC,IAAI,CAAC,CAAC;YAEhB,OAAO,cAAc,SAAS;;EAExC,OAAO,EAAE,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,mCAAmC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC;QACzG,CAAC;IACL,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,IAAY;QAC7B,IAAI,CAAC;YACD,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAyB,CAAC;YACxD,MAAM,QAAQ,GAAG,MAAO,IAAI,CAAC,SAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC5D,OAAO,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;YACrE,MAAM,IAAI,KAAK,CAAC,8BAA8B,GAAG,EAAE,CAAC,CAAC;QACzD,CAAC;IACL,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,IAAY,EAAE,IAAY,EAAE,KAAU,EAAE,YAAoB,SAAS;QACrF,IAAI,CAAC;YACD,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAC/E,sCAAsC;YACtC,MAAM,IAAI,GAAG;gBACT,UAAU;gBACV,IAAI,EAAE,YAAY;gBAClB,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;gBAC7B,GAAG,KAAK;aACX,CAAC;YACF,MAAM,QAAQ,GAAG,MAAO,IAAI,CAAC,SAAiB,CAAC,KAAK,CAAC,IAA4B,CAAC,CAAC;YACnF,OAAO,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;YACrE,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC,CAAC;QAC/D,CAAC;IACL,CAAC;CACJ;AAED,MAAM,UAAU,sBAAsB;IAClC,IAAI,CAAC;QACD,OAAO,IAAI,gBAAgB,EAAE,CAAC;IAClC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,KAAK,CAAC,CAAC;QAC5D,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC"}
|
|
@@ -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;
|