needware-cli 1.5.15 → 1.5.17
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/README.md +49 -1
- package/dist/commands/agent.d.ts +12 -0
- package/dist/commands/agent.d.ts.map +1 -1
- package/dist/commands/agent.js +133 -7
- package/dist/commands/agent.js.map +1 -1
- package/dist/commands/index.d.ts +1 -1
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +1 -1
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/skill.d.ts +34 -0
- package/dist/commands/skill.d.ts.map +1 -0
- package/dist/commands/skill.js +307 -0
- package/dist/commands/skill.js.map +1 -0
- package/dist/commands/system-prompt.d.ts +2 -1
- package/dist/commands/system-prompt.d.ts.map +1 -1
- package/dist/commands/system-prompt.js +12 -9
- package/dist/commands/system-prompt.js.map +1 -1
- package/dist/core/cli.d.ts.map +1 -1
- package/dist/core/cli.js +8 -1
- package/dist/core/cli.js.map +1 -1
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/dist/sdk/firecrawl-sdk.d.ts +85 -0
- package/dist/sdk/firecrawl-sdk.d.ts.map +1 -0
- package/dist/sdk/firecrawl-sdk.js +207 -0
- package/dist/sdk/firecrawl-sdk.js.map +1 -0
- package/dist/tools/ai-gateway-enable-tool.d.ts +12 -0
- package/dist/tools/ai-gateway-enable-tool.d.ts.map +1 -0
- package/dist/tools/ai-gateway-enable-tool.js +33 -0
- package/dist/tools/ai-gateway-enable-tool.js.map +1 -0
- package/dist/tools/base-tool.d.ts +76 -0
- package/dist/tools/base-tool.d.ts.map +1 -0
- package/dist/tools/base-tool.js +119 -0
- package/dist/tools/base-tool.js.map +1 -0
- package/dist/tools/example-tool.d.ts +16 -0
- package/dist/tools/example-tool.d.ts.map +1 -0
- package/dist/tools/example-tool.js +67 -0
- package/dist/tools/example-tool.js.map +1 -0
- package/dist/tools/index.d.ts +9 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +9 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/supabase-deploy-functions-tool.d.ts +18 -0
- package/dist/tools/supabase-deploy-functions-tool.d.ts.map +1 -0
- package/dist/tools/supabase-deploy-functions-tool.js +127 -0
- package/dist/tools/supabase-deploy-functions-tool.js.map +1 -0
- package/dist/tools/supabase-enable-tool.d.ts +12 -0
- package/dist/tools/supabase-enable-tool.d.ts.map +1 -0
- package/dist/tools/supabase-enable-tool.js +89 -0
- package/dist/tools/supabase-enable-tool.js.map +1 -0
- package/dist/tools/tool-registry.d.ts +51 -0
- package/dist/tools/tool-registry.d.ts.map +1 -0
- package/dist/tools/tool-registry.js +81 -0
- package/dist/tools/tool-registry.js.map +1 -0
- package/dist/tools/user-registration-tool.d.ts +17 -0
- package/dist/tools/user-registration-tool.d.ts.map +1 -0
- package/dist/tools/user-registration-tool.js +63 -0
- package/dist/tools/user-registration-tool.js.map +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/tool.d.ts +60 -0
- package/dist/types/tool.d.ts.map +1 -0
- package/dist/types/tool.js +5 -0
- package/dist/types/tool.js.map +1 -0
- package/examples/gateway-config-usage.sh +71 -0
- package/examples/tool-usage-example.sh +44 -0
- package/package.json +2 -2
- package/CHANGELOG_DB_CONFIG.md +0 -142
- package/IMPLEMENTATION_SUMMARY.md +0 -303
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Supabase Deploy Functions Tool
|
|
3
|
+
* Tool for deploying Supabase Edge Functions
|
|
4
|
+
*/
|
|
5
|
+
import { BaseTool } from './base-tool.js';
|
|
6
|
+
import chalk from 'chalk';
|
|
7
|
+
import { z } from 'zod';
|
|
8
|
+
export class SupabaseDeployFunctionsTool extends BaseTool {
|
|
9
|
+
definition = {
|
|
10
|
+
name: 'supabase-deploy-functions',
|
|
11
|
+
description: 'Deploy Supabase Edge Functions. Can deploy a specific function or all functions in the supabase/functions directory.',
|
|
12
|
+
input_schema: {
|
|
13
|
+
type: 'object',
|
|
14
|
+
properties: {
|
|
15
|
+
functionName: {
|
|
16
|
+
type: 'string',
|
|
17
|
+
description: 'Name of the function to deploy. If not provided, will deploy all functions.',
|
|
18
|
+
},
|
|
19
|
+
functionPath: {
|
|
20
|
+
type: 'string',
|
|
21
|
+
description: 'Path to the function directory. Defaults to supabase/functions/<functionName>',
|
|
22
|
+
},
|
|
23
|
+
noVerifyJwt: {
|
|
24
|
+
type: 'boolean',
|
|
25
|
+
description: 'Deploy without JWT verification (useful for public functions)',
|
|
26
|
+
},
|
|
27
|
+
importMap: {
|
|
28
|
+
type: 'string',
|
|
29
|
+
description: 'Path to import map file',
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
required: [],
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
getZodSchema() {
|
|
36
|
+
return {
|
|
37
|
+
functionName: z.string().optional().describe('Name of the function to deploy'),
|
|
38
|
+
functionPath: z.string().optional().describe('Path to the function directory'),
|
|
39
|
+
noVerifyJwt: z.boolean().optional().describe('Deploy without JWT verification'),
|
|
40
|
+
importMap: z.string().optional().describe('Path to import map file'),
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
async execute(input) {
|
|
44
|
+
try {
|
|
45
|
+
// 验证并获取 Gateway 配置
|
|
46
|
+
this.validateGatewayConfig();
|
|
47
|
+
const { apiKey, chatId, workspaceId } = this.getGatewayConfig();
|
|
48
|
+
const { functionName, functionPath, noVerifyJwt, importMap } = input;
|
|
49
|
+
// 1. 先检查 Supabase 项目状态
|
|
50
|
+
console.log(chalk.blue('🔍 检查 Supabase 项目状态...'));
|
|
51
|
+
const statusUrl = `https://www.needware.dev/api/supabase/status?chatId=${chatId}`;
|
|
52
|
+
const statusResponse = await fetch(statusUrl, {
|
|
53
|
+
method: 'GET',
|
|
54
|
+
headers: {
|
|
55
|
+
'Authorization': `Bearer ${apiKey}`,
|
|
56
|
+
},
|
|
57
|
+
});
|
|
58
|
+
if (!statusResponse.ok) {
|
|
59
|
+
throw new Error(`Status check failed: ${statusResponse.statusText}`);
|
|
60
|
+
}
|
|
61
|
+
const statusData = await statusResponse.json();
|
|
62
|
+
if (!statusData.success || !statusData.data) {
|
|
63
|
+
throw new Error('Supabase project not found. Please run supabase-enable first to create a project.');
|
|
64
|
+
}
|
|
65
|
+
const projectId = statusData.data.projectId;
|
|
66
|
+
console.log(chalk.green(`✓ 找到 Supabase 项目: ${projectId}`));
|
|
67
|
+
// 2. 部署 Edge Function
|
|
68
|
+
console.log(chalk.blue(`🚀 开始部署 Edge Function${functionName ? `: ${functionName}` : 's'}...`));
|
|
69
|
+
const deployUrl = 'https://www.needware.dev/api/supabase/deploy-functions';
|
|
70
|
+
const deployPayload = {
|
|
71
|
+
chatId,
|
|
72
|
+
workspaceId,
|
|
73
|
+
projectId,
|
|
74
|
+
};
|
|
75
|
+
if (functionName) {
|
|
76
|
+
deployPayload.functionName = functionName;
|
|
77
|
+
}
|
|
78
|
+
if (functionPath) {
|
|
79
|
+
deployPayload.functionPath = functionPath;
|
|
80
|
+
}
|
|
81
|
+
if (noVerifyJwt !== undefined) {
|
|
82
|
+
deployPayload.noVerifyJwt = noVerifyJwt;
|
|
83
|
+
}
|
|
84
|
+
if (importMap) {
|
|
85
|
+
deployPayload.importMap = importMap;
|
|
86
|
+
}
|
|
87
|
+
const deployResponse = await fetch(deployUrl, {
|
|
88
|
+
method: 'POST',
|
|
89
|
+
headers: {
|
|
90
|
+
'Authorization': `Bearer ${apiKey}`,
|
|
91
|
+
'Content-Type': 'application/json',
|
|
92
|
+
},
|
|
93
|
+
body: JSON.stringify(deployPayload),
|
|
94
|
+
});
|
|
95
|
+
if (!deployResponse.ok) {
|
|
96
|
+
const errorText = await deployResponse.text();
|
|
97
|
+
throw new Error(`Deploy failed: ${deployResponse.statusText}. ${errorText}`);
|
|
98
|
+
}
|
|
99
|
+
const deployData = await deployResponse.json();
|
|
100
|
+
if (!deployData.success) {
|
|
101
|
+
throw new Error(`Deploy failed: ${deployData.error || deployData.message || 'Unknown error'}`);
|
|
102
|
+
}
|
|
103
|
+
console.log(chalk.green('✓ Edge Function 部署成功'));
|
|
104
|
+
// 3. 构建返回信息
|
|
105
|
+
const resultMessage = `Supabase Edge Function deployed successfully!
|
|
106
|
+
|
|
107
|
+
${deployData.message}
|
|
108
|
+
|
|
109
|
+
${deployData.data ? `Deployment Details:
|
|
110
|
+
- Function ID: ${deployData.data.functionId}
|
|
111
|
+
- Function Name: ${deployData.data.functionName}
|
|
112
|
+
- Status: ${deployData.data.status}
|
|
113
|
+
- Version: ${deployData.data.version}
|
|
114
|
+
- Deployed At: ${deployData.data.deployedAt}` : ''}
|
|
115
|
+
|
|
116
|
+
Project ID: ${projectId}
|
|
117
|
+
${functionName ? `Function: ${functionName}` : 'All functions deployed'}`;
|
|
118
|
+
return this.successWithContent(resultMessage);
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
const message = error instanceof Error ? error.message : 'Failed to deploy Supabase Edge Functions';
|
|
122
|
+
console.log(chalk.red(`\n✖ ${message}\n`));
|
|
123
|
+
return this.errorWithContent(message);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=supabase-deploy-functions-tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"supabase-deploy-functions-tool.js","sourceRoot":"","sources":["../../src/tools/supabase-deploy-functions-tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Supabase Enable Tool
|
|
3
|
+
* Tool for enabling Supabase integration
|
|
4
|
+
*/
|
|
5
|
+
import { BaseTool } from './base-tool.js';
|
|
6
|
+
import { ToolDefinition, ToolResult } from '../types/tool.js';
|
|
7
|
+
export declare class SupabaseEnableTool extends BaseTool {
|
|
8
|
+
definition: ToolDefinition;
|
|
9
|
+
getZodSchema(): {};
|
|
10
|
+
execute(input: Record<string, any>): Promise<ToolResult>;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=supabase-enable-tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"supabase-enable-tool.d.ts","sourceRoot":"","sources":["../../src/tools/supabase-enable-tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAkD9D,qBAAa,kBAAmB,SAAQ,QAAQ;IAC9C,UAAU,EAAE,cAAc,CAQxB;IAEF,YAAY;IAIN,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;CAiF/D"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Supabase Enable Tool
|
|
3
|
+
* Tool for enabling Supabase integration
|
|
4
|
+
*/
|
|
5
|
+
import { BaseTool } from './base-tool.js';
|
|
6
|
+
import chalk from 'chalk';
|
|
7
|
+
export class SupabaseEnableTool extends BaseTool {
|
|
8
|
+
definition = {
|
|
9
|
+
name: 'supabase-enable',
|
|
10
|
+
description: 'Enable Supabase database integration',
|
|
11
|
+
input_schema: {
|
|
12
|
+
type: 'object',
|
|
13
|
+
properties: {},
|
|
14
|
+
required: [],
|
|
15
|
+
},
|
|
16
|
+
};
|
|
17
|
+
getZodSchema() {
|
|
18
|
+
return {};
|
|
19
|
+
}
|
|
20
|
+
async execute(input) {
|
|
21
|
+
try {
|
|
22
|
+
// 验证并获取 Gateway 配置
|
|
23
|
+
this.validateGatewayConfig();
|
|
24
|
+
const { apiKey, chatId, workspaceId } = this.getGatewayConfig();
|
|
25
|
+
// 1. 先检查 Supabase 项目状态
|
|
26
|
+
console.log(chalk.blue('🔍 检查 Supabase 项目状态...'));
|
|
27
|
+
const statusUrl = `https://www.needware.dev/api/supabase/status?chatId=${chatId}`;
|
|
28
|
+
const statusResponse = await fetch(statusUrl, {
|
|
29
|
+
method: 'GET',
|
|
30
|
+
headers: {
|
|
31
|
+
'Authorization': `Bearer ${apiKey}`,
|
|
32
|
+
},
|
|
33
|
+
});
|
|
34
|
+
if (!statusResponse.ok) {
|
|
35
|
+
throw new Error(`Status check failed: ${statusResponse.statusText}`);
|
|
36
|
+
}
|
|
37
|
+
const statusData = await statusResponse.json();
|
|
38
|
+
let supabaseProject;
|
|
39
|
+
// 2. 如果项目不存在,则创建新项目
|
|
40
|
+
if (!statusData.success || !statusData.data) {
|
|
41
|
+
console.log(chalk.yellow('⚠️ Supabase 项目不存在,开始创建...'));
|
|
42
|
+
const createUrl = 'https://www.needware.dev/api/supabase/create-project';
|
|
43
|
+
const createResponse = await fetch(createUrl, {
|
|
44
|
+
method: 'POST',
|
|
45
|
+
headers: {
|
|
46
|
+
'Authorization': `Bearer ${apiKey}`,
|
|
47
|
+
'Content-Type': 'application/json',
|
|
48
|
+
},
|
|
49
|
+
body: JSON.stringify({
|
|
50
|
+
name: chatId,
|
|
51
|
+
workspaceId: workspaceId,
|
|
52
|
+
chatId: chatId,
|
|
53
|
+
}),
|
|
54
|
+
});
|
|
55
|
+
if (!createResponse.ok) {
|
|
56
|
+
throw new Error(`Project creation failed: ${createResponse.statusText}`);
|
|
57
|
+
}
|
|
58
|
+
const createData = await createResponse.json();
|
|
59
|
+
if (!createData.success || !createData.supabaseProject) {
|
|
60
|
+
throw new Error(`Project creation failed: ${createData.message || 'Unknown error'}`);
|
|
61
|
+
}
|
|
62
|
+
supabaseProject = createData.supabaseProject;
|
|
63
|
+
console.log(chalk.green('✓ Supabase 项目创建成功'));
|
|
64
|
+
console.log(chalk.green(` ${createData.message}`));
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
return this.successWithContent('Supabase 项目已存在, 无需初始化Supabase执行具体需求');
|
|
68
|
+
}
|
|
69
|
+
// 4. 返回配置信息
|
|
70
|
+
const envConfig = `VITE_SUPABASE_PROJECT_ID="${supabaseProject.projectId}"
|
|
71
|
+
VITE_SUPABASE_PUBLISHABLE_KEY="${supabaseProject.publishableKey}"
|
|
72
|
+
VITE_SUPABASE_URL="${supabaseProject.url}"`;
|
|
73
|
+
const resultMessage = `Supabase integration enabled successfully
|
|
74
|
+
|
|
75
|
+
Environment Variables:
|
|
76
|
+
${envConfig}
|
|
77
|
+
|
|
78
|
+
Project Configuration:
|
|
79
|
+
${JSON.stringify(supabaseProject, null, 2)}`;
|
|
80
|
+
return this.successWithContent(resultMessage);
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
const message = error instanceof Error ? error.message : 'Failed to enable Supabase';
|
|
84
|
+
console.log(chalk.red(`\n✖ ${message}\n`));
|
|
85
|
+
return this.errorWithContent(message);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=supabase-enable-tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"supabase-enable-tool.js","sourceRoot":"","sources":["../../src/tools/supabase-enable-tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool Registry
|
|
3
|
+
* 工具注册中心,管理所有可用的工具
|
|
4
|
+
*/
|
|
5
|
+
import { Tool, ToolDefinition } from '../types/tool.js';
|
|
6
|
+
import { BaseToolConfig } from './base-tool.js';
|
|
7
|
+
export interface ToolConfig {
|
|
8
|
+
gateway?: BaseToolConfig;
|
|
9
|
+
}
|
|
10
|
+
export declare class ToolRegistry {
|
|
11
|
+
private static tools;
|
|
12
|
+
/**
|
|
13
|
+
* 初始化内置工具
|
|
14
|
+
* @param config 工具配置
|
|
15
|
+
*/
|
|
16
|
+
static initialize(config?: ToolConfig): void;
|
|
17
|
+
/**
|
|
18
|
+
* 注册工具
|
|
19
|
+
* @param tool 要注册的工具
|
|
20
|
+
*/
|
|
21
|
+
static register(tool: Tool): void;
|
|
22
|
+
/**
|
|
23
|
+
* 获取工具
|
|
24
|
+
* @param name 工具名称
|
|
25
|
+
*/
|
|
26
|
+
static get(name: string): Tool | undefined;
|
|
27
|
+
/**
|
|
28
|
+
* 获取所有工具定义
|
|
29
|
+
*/
|
|
30
|
+
static getAllDefinitions(): ToolDefinition[];
|
|
31
|
+
/**
|
|
32
|
+
* 获取所有工具
|
|
33
|
+
*/
|
|
34
|
+
static getAll(): Tool[];
|
|
35
|
+
/**
|
|
36
|
+
* 检查工具是否存在
|
|
37
|
+
* @param name 工具名称
|
|
38
|
+
*/
|
|
39
|
+
static has(name: string): boolean;
|
|
40
|
+
/**
|
|
41
|
+
* 执行工具
|
|
42
|
+
* @param name 工具名称
|
|
43
|
+
* @param input 输入参数
|
|
44
|
+
*/
|
|
45
|
+
static execute(name: string, input: Record<string, any>): Promise<any>;
|
|
46
|
+
/**
|
|
47
|
+
* 将工具转换为 Claude Agent SDK 格式
|
|
48
|
+
*/
|
|
49
|
+
static toAgentSDKFormat(): any[];
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=tool-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-registry.d.ts","sourceRoot":"","sources":["../../src/tools/tool-registry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAKxD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,EAAE,cAAc,CAAC;CAC1B;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAgC;IAEpD;;;OAGG;IACH,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,IAAI;IAW5C;;;OAGG;IACH,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAIjC;;;OAGG;IACH,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IAI1C;;OAEG;IACH,MAAM,CAAC,iBAAiB,IAAI,cAAc,EAAE;IAI5C;;OAEG;IACH,MAAM,CAAC,MAAM,IAAI,IAAI,EAAE;IAIvB;;;OAGG;IACH,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIjC;;;;OAIG;WACU,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC;IAQ5E;;OAEG;IACH,MAAM,CAAC,gBAAgB,IAAI,GAAG,EAAE;CAOjC"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool Registry
|
|
3
|
+
* 工具注册中心,管理所有可用的工具
|
|
4
|
+
*/
|
|
5
|
+
import { SupabaseEnableTool } from './supabase-enable-tool.js';
|
|
6
|
+
import { SupabaseDeployFunctionsTool } from './supabase-deploy-functions-tool.js';
|
|
7
|
+
import { AiGatewayEnableTool } from './ai-gateway-enable-tool.js';
|
|
8
|
+
export class ToolRegistry {
|
|
9
|
+
static tools = new Map();
|
|
10
|
+
/**
|
|
11
|
+
* 初始化内置工具
|
|
12
|
+
* @param config 工具配置
|
|
13
|
+
*/
|
|
14
|
+
static initialize(config) {
|
|
15
|
+
// 清空已注册的工具
|
|
16
|
+
this.tools.clear();
|
|
17
|
+
// 注册内置工具,传入配置
|
|
18
|
+
// 所有工具都接收相同的配置
|
|
19
|
+
this.register(new SupabaseEnableTool(config?.gateway));
|
|
20
|
+
this.register(new SupabaseDeployFunctionsTool(config?.gateway));
|
|
21
|
+
this.register(new AiGatewayEnableTool(config?.gateway));
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* 注册工具
|
|
25
|
+
* @param tool 要注册的工具
|
|
26
|
+
*/
|
|
27
|
+
static register(tool) {
|
|
28
|
+
this.tools.set(tool.definition.name, tool);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* 获取工具
|
|
32
|
+
* @param name 工具名称
|
|
33
|
+
*/
|
|
34
|
+
static get(name) {
|
|
35
|
+
return this.tools.get(name);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* 获取所有工具定义
|
|
39
|
+
*/
|
|
40
|
+
static getAllDefinitions() {
|
|
41
|
+
return Array.from(this.tools.values()).map((tool) => tool.definition);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* 获取所有工具
|
|
45
|
+
*/
|
|
46
|
+
static getAll() {
|
|
47
|
+
return Array.from(this.tools.values());
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* 检查工具是否存在
|
|
51
|
+
* @param name 工具名称
|
|
52
|
+
*/
|
|
53
|
+
static has(name) {
|
|
54
|
+
return this.tools.has(name);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* 执行工具
|
|
58
|
+
* @param name 工具名称
|
|
59
|
+
* @param input 输入参数
|
|
60
|
+
*/
|
|
61
|
+
static async execute(name, input) {
|
|
62
|
+
const tool = this.get(name);
|
|
63
|
+
if (!tool) {
|
|
64
|
+
throw new Error(`Tool not found: ${name}`);
|
|
65
|
+
}
|
|
66
|
+
return await tool.execute(input);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* 将工具转换为 Claude Agent SDK 格式
|
|
70
|
+
*/
|
|
71
|
+
static toAgentSDKFormat() {
|
|
72
|
+
return this.getAllDefinitions().map((def) => ({
|
|
73
|
+
name: def.name,
|
|
74
|
+
description: def.description,
|
|
75
|
+
input_schema: def.input_schema,
|
|
76
|
+
}));
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
// 初始化工具注册表(默认不带配置,在 agent 命令中会重新初始化)
|
|
80
|
+
ToolRegistry.initialize();
|
|
81
|
+
//# sourceMappingURL=tool-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-registry.js","sourceRoot":"","sources":["../../src/tools/tool-registry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAC;AAClF,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAQlE,MAAM,OAAO,YAAY;IACf,MAAM,CAAC,KAAK,GAAsB,IAAI,GAAG,EAAE,CAAC;IAEpD;;;OAGG;IACH,MAAM,CAAC,UAAU,CAAC,MAAmB;QACnC,WAAW;QACX,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAEnB,cAAc;QACd,eAAe;QACf,IAAI,CAAC,QAAQ,CAAC,IAAI,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;QACvD,IAAI,CAAC,QAAQ,CAAC,IAAI,2BAA2B,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;QAChE,IAAI,CAAC,QAAQ,CAAC,IAAI,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC1D,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,QAAQ,CAAC,IAAU;QACxB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,GAAG,CAAC,IAAY;QACrB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,iBAAiB;QACtB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACxE,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,MAAM;QACX,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACzC,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,GAAG,CAAC,IAAY;QACrB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAY,EAAE,KAA0B;QAC3D,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC5B,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAC;QAC7C,CAAC;QACD,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,gBAAgB;QACrB,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAC5C,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,WAAW,EAAE,GAAG,CAAC,WAAW;YAC5B,YAAY,EAAE,GAAG,CAAC,YAAY;SAC/B,CAAC,CAAC,CAAC;IACN,CAAC;;AAGH,qCAAqC;AACrC,YAAY,CAAC,UAAU,EAAE,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* User Registration Tool
|
|
3
|
+
* Example tool showing SDK content format
|
|
4
|
+
*/
|
|
5
|
+
import { BaseTool } from './base-tool.js';
|
|
6
|
+
import { ToolDefinition, ToolResult } from '../types/tool.js';
|
|
7
|
+
import { z } from 'zod';
|
|
8
|
+
export declare class UserRegistrationTool extends BaseTool {
|
|
9
|
+
definition: ToolDefinition;
|
|
10
|
+
getZodSchema(): {
|
|
11
|
+
username: z.ZodString;
|
|
12
|
+
email: z.ZodString;
|
|
13
|
+
newsletter: z.ZodOptional<z.ZodBoolean>;
|
|
14
|
+
};
|
|
15
|
+
execute(input: Record<string, any>): Promise<ToolResult>;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=user-registration-tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-registration-tool.d.ts","sourceRoot":"","sources":["../../src/tools/user-registration-tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,qBAAa,oBAAqB,SAAQ,QAAQ;IAChD,UAAU,EAAE,cAAc,CAwBxB;IAEF,YAAY;;;;;IAQN,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;CA2B/D"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* User Registration Tool
|
|
3
|
+
* Example tool showing SDK content format
|
|
4
|
+
*/
|
|
5
|
+
import { BaseTool } from './base-tool.js';
|
|
6
|
+
import chalk from 'chalk';
|
|
7
|
+
import { z } from 'zod';
|
|
8
|
+
export class UserRegistrationTool extends BaseTool {
|
|
9
|
+
definition = {
|
|
10
|
+
name: 'user-registration',
|
|
11
|
+
description: 'Register a new user with username, email and newsletter preference',
|
|
12
|
+
input_schema: {
|
|
13
|
+
type: 'object',
|
|
14
|
+
properties: {
|
|
15
|
+
username: {
|
|
16
|
+
type: 'string',
|
|
17
|
+
description: 'Username for the new user',
|
|
18
|
+
required: true,
|
|
19
|
+
},
|
|
20
|
+
email: {
|
|
21
|
+
type: 'string',
|
|
22
|
+
description: 'Email address',
|
|
23
|
+
required: true,
|
|
24
|
+
},
|
|
25
|
+
newsletter: {
|
|
26
|
+
type: 'boolean',
|
|
27
|
+
description: 'Subscribe to newsletter',
|
|
28
|
+
required: false,
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
required: ['username', 'email'],
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
getZodSchema() {
|
|
35
|
+
return {
|
|
36
|
+
username: z.string().describe('Username for the new user'),
|
|
37
|
+
email: z.string().email().describe('Email address'),
|
|
38
|
+
newsletter: z.boolean().optional().describe('Subscribe to newsletter'),
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
async execute(input) {
|
|
42
|
+
try {
|
|
43
|
+
// Validate required parameters
|
|
44
|
+
this.validateInput(input, this.definition.input_schema.required);
|
|
45
|
+
const { username, email, newsletter = false } = input;
|
|
46
|
+
console.log(chalk.blue('\n👤 Registering new user...\n'));
|
|
47
|
+
console.log(chalk.gray(`Username: ${username}`));
|
|
48
|
+
console.log(chalk.gray(`Email: ${email}`));
|
|
49
|
+
console.log(chalk.gray(`Newsletter: ${newsletter ? 'Yes' : 'No'}`));
|
|
50
|
+
// 模拟注册逻辑
|
|
51
|
+
// 在实际应用中,这里会调用数据库或 API
|
|
52
|
+
console.log(chalk.green('\n✓ User registered successfully!\n'));
|
|
53
|
+
// 返回 SDK 格式的结果
|
|
54
|
+
return this.successWithContent(`Registration successful!\n\nUsername: ${username}\nEmail: ${email}\nNewsletter: ${newsletter ? 'Yes' : 'No'}`);
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
const message = error instanceof Error ? error.message : 'Failed to register user';
|
|
58
|
+
console.log(chalk.red(`\n✖ ${message}\n`));
|
|
59
|
+
return this.errorWithContent(message);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=user-registration-tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-registration-tool.js","sourceRoot":"","sources":["../../src/tools/user-registration-tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,OAAO,oBAAqB,SAAQ,QAAQ;IAChD,UAAU,GAAmB;QAC3B,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,oEAAoE;QACjF,YAAY,EAAE;YACZ,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,2BAA2B;oBACxC,QAAQ,EAAE,IAAI;iBACf;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,eAAe;oBAC5B,QAAQ,EAAE,IAAI;iBACf;gBACD,UAAU,EAAE;oBACV,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,yBAAyB;oBACtC,QAAQ,EAAE,KAAK;iBAChB;aACF;YACD,QAAQ,EAAE,CAAC,UAAU,EAAE,OAAO,CAAC;SAChC;KACF,CAAC;IAEF,YAAY;QACV,OAAO;YACL,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;YAC1D,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;YACnD,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;SACvE,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,KAA0B;QACtC,IAAI,CAAC;YACH,+BAA+B;YAC/B,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;YAEjE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,GAAG,KAAK,EAAE,GAAG,KAAK,CAAC;YAEtD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC,CAAC;YAC1D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,QAAQ,EAAE,CAAC,CAAC,CAAC;YACjD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,KAAK,EAAE,CAAC,CAAC,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YAEpE,SAAS;YACT,uBAAuB;YAEvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC,CAAC;YAEhE,eAAe;YACf,OAAO,IAAI,CAAC,kBAAkB,CAC5B,yCAAyC,QAAQ,YAAY,KAAK,iBAAiB,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAC/G,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,yBAAyB,CAAC;YACnF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,OAAO,IAAI,CAAC,CAAC,CAAC;YAC3C,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;CACF"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACxE,cAAc,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACxE,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC"}
|
package/dist/types/index.js
CHANGED
package/dist/types/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAE3B,cAAc,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAE3B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool 类型定义
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Tool 参数定义
|
|
6
|
+
*/
|
|
7
|
+
export interface ToolParameter {
|
|
8
|
+
type: 'string' | 'number' | 'boolean' | 'object' | 'array';
|
|
9
|
+
description: string;
|
|
10
|
+
required?: boolean;
|
|
11
|
+
enum?: string[];
|
|
12
|
+
properties?: Record<string, ToolParameter>;
|
|
13
|
+
items?: ToolParameter;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Tool 定义接口
|
|
17
|
+
*/
|
|
18
|
+
export interface ToolDefinition {
|
|
19
|
+
name: string;
|
|
20
|
+
description: string;
|
|
21
|
+
input_schema: {
|
|
22
|
+
type: 'object';
|
|
23
|
+
properties: Record<string, ToolParameter>;
|
|
24
|
+
required?: string[];
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Tool 执行结果
|
|
29
|
+
*/
|
|
30
|
+
export interface ToolResult {
|
|
31
|
+
success: boolean;
|
|
32
|
+
data?: any;
|
|
33
|
+
error?: string;
|
|
34
|
+
message?: string;
|
|
35
|
+
content?: Array<{
|
|
36
|
+
type: 'text' | 'image';
|
|
37
|
+
text?: string;
|
|
38
|
+
source?: any;
|
|
39
|
+
}>;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Tool 执行接口
|
|
43
|
+
*/
|
|
44
|
+
export interface Tool {
|
|
45
|
+
/**
|
|
46
|
+
* Tool 的定义信息
|
|
47
|
+
*/
|
|
48
|
+
definition: ToolDefinition;
|
|
49
|
+
/**
|
|
50
|
+
* 执行 Tool
|
|
51
|
+
* @param input Tool 的输入参数
|
|
52
|
+
* @returns Tool 执行结果
|
|
53
|
+
*/
|
|
54
|
+
execute(input: Record<string, any>): Promise<ToolResult>;
|
|
55
|
+
/**
|
|
56
|
+
* 转换为 SDK tool
|
|
57
|
+
*/
|
|
58
|
+
toSdkTool(): any;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/types/tool.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;IAC3D,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC3C,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE;QACZ,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QAC1C,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,OAAO,CAAC,EAAE,KAAK,CAAC;QACd,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,GAAG,CAAC;KACd,CAAC,CAAC;CACJ;AAED;;GAEG;AACH,MAAM,WAAW,IAAI;IACnB;;OAEG;IACH,UAAU,EAAE,cAAc,CAAC;IAE3B;;;;OAIG;IACH,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAEzD;;OAEG;IACH,SAAS,IAAI,GAAG,CAAC;CAClB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool.js","sourceRoot":"","sources":["../../src/types/tool.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Gateway Configuration Usage Examples
|
|
3
|
+
|
|
4
|
+
echo "================================"
|
|
5
|
+
echo "Gateway Configuration Examples"
|
|
6
|
+
echo "================================"
|
|
7
|
+
echo ""
|
|
8
|
+
|
|
9
|
+
# 示例 1: 使用 JSON 格式(推荐)
|
|
10
|
+
echo "1. 使用 JSON 格式配置(推荐)"
|
|
11
|
+
echo "--------------------------------"
|
|
12
|
+
echo "needware-cli agent \"启用 Supabase\" \\"
|
|
13
|
+
echo " --gateway-config '{\"apiKey\":\"your-key\",\"chatId\":\"your-chat-id\",\"workspaceId\":\"your-workspace-id\"}'"
|
|
14
|
+
echo ""
|
|
15
|
+
|
|
16
|
+
# 示例 2: 使用环境变量
|
|
17
|
+
echo "2. 使用环境变量"
|
|
18
|
+
echo "--------------------------------"
|
|
19
|
+
echo "export GATEWAY_API_KEY=\"your-api-key\""
|
|
20
|
+
echo "export GATEWAY_CHAT_ID=\"your-chat-id\""
|
|
21
|
+
echo "export GATEWAY_WORKSPACE_ID=\"your-workspace-id\""
|
|
22
|
+
echo "needware-cli agent \"启用 Supabase\""
|
|
23
|
+
echo ""
|
|
24
|
+
|
|
25
|
+
# 示例 3: 从 .env 文件加载环境变量
|
|
26
|
+
echo "3. 从 .env 文件加载环境变量"
|
|
27
|
+
echo "--------------------------------"
|
|
28
|
+
echo "# 1. 创建 .env 文件"
|
|
29
|
+
echo "cat > .env << EOF"
|
|
30
|
+
echo "GATEWAY_API_KEY=your-api-key"
|
|
31
|
+
echo "GATEWAY_CHAT_ID=your-chat-id"
|
|
32
|
+
echo "GATEWAY_WORKSPACE_ID=your-workspace-id"
|
|
33
|
+
echo "EOF"
|
|
34
|
+
echo ""
|
|
35
|
+
echo "# 2. 加载环境变量并运行命令"
|
|
36
|
+
echo "source .env # 或使用 export \$(cat .env | xargs)"
|
|
37
|
+
echo "needware-cli agent \"启用 Supabase\""
|
|
38
|
+
echo ""
|
|
39
|
+
|
|
40
|
+
# 示例 4: 混合使用(环境变量 + JSON 配置)
|
|
41
|
+
echo "4. 混合使用(优先级:--gateway-config > 环境变量)"
|
|
42
|
+
echo "--------------------------------"
|
|
43
|
+
echo "# 在环境变量中设置默认值"
|
|
44
|
+
echo "export GATEWAY_WORKSPACE_ID=\"default-workspace-id\""
|
|
45
|
+
echo ""
|
|
46
|
+
echo "# 使用 JSON 配置覆盖部分值(workspaceId 使用环境变量)"
|
|
47
|
+
echo "needware-cli agent \"启用 Supabase\" \\"
|
|
48
|
+
echo " --gateway-config '{\"apiKey\":\"temp-key\",\"chatId\":\"temp-chat-id\"}'"
|
|
49
|
+
echo ""
|
|
50
|
+
|
|
51
|
+
echo "================================"
|
|
52
|
+
echo "完整示例"
|
|
53
|
+
echo "================================"
|
|
54
|
+
echo ""
|
|
55
|
+
|
|
56
|
+
# 完整示例:使用 JSON 格式配置
|
|
57
|
+
echo "# 直接使用 JSON 格式配置"
|
|
58
|
+
echo "needware-cli agent \"启用 Supabase 数据库\" \\"
|
|
59
|
+
echo " --gateway-config '{\"apiKey\":\"gf_fc6414157f61ce986749a60a849b902b75ef90da9266fe6f1ae29372da996919\",\"chatId\":\"333cd083-7aa1-473c-b6c4-4ef32465b96f\",\"workspaceId\":\"4494d599-cbc4-4902-b8c6-ae306df89943\"}'"
|
|
60
|
+
echo ""
|
|
61
|
+
|
|
62
|
+
echo "================================"
|
|
63
|
+
echo "提示"
|
|
64
|
+
echo "================================"
|
|
65
|
+
echo "- 推荐使用 JSON 格式配置 (--gateway-config),简洁直观"
|
|
66
|
+
echo "- 敏感信息不要提交到版本控制系统"
|
|
67
|
+
echo "- 使用环境变量适合 CI/CD 环境和长期使用"
|
|
68
|
+
echo "- JSON 配置支持部分覆盖,未指定的字段会使用环境变量"
|
|
69
|
+
echo "- 配置优先级:--gateway-config > 环境变量"
|
|
70
|
+
echo ""
|
|
71
|
+
|