@cloudbase/cli 2.8.0-beta.7 → 2.8.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/README.md CHANGED
@@ -5,7 +5,7 @@ CloudBase CLI 是一个开源的命令行界面交互工具,用于帮助用户
5
5
  ## 主要功能
6
6
 
7
7
  - **云开发资源管理**:快速部署项目,管理云函数、数据库、存储等资源
8
- - **AI 开发助手**:集成多种 AI 工具(Claude、Qwen、Codex、aider 等),提升开发效率
8
+ - **AI 开发助手**:集成多种 AI 工具(Claude、Qwen、Codex、Aider 等),提升开发效率
9
9
  - **MCP 协议支持**:内置 `cloudbase-mcp` 命令,支持 Model Context Protocol,无需额外安装
10
10
  - **模板下载**:提供多种项目模板,自动配置 IDE 和 MCP 环境
11
11
 
@@ -35,6 +35,7 @@ const gateway_1 = require("../../gateway");
35
35
  const utils_1 = require("../../utils");
36
36
  const constant_1 = require("../../constant");
37
37
  const decorators_1 = require("../../decorators");
38
+ const function_2 = require("../../function");
38
39
  const regionIdMap = {
39
40
  'ap-guangzhou': 1,
40
41
  'ap-shanghai': 4,
@@ -207,19 +208,31 @@ let FunctionDeploy = class FunctionDeploy extends common_1.Command {
207
208
  message: `存在同名云函数:[${func.name}],是否覆盖原函数代码与配置`,
208
209
  default: false
209
210
  });
211
+ const { triggers } = func;
210
212
  if (force) {
211
- loading.start('云函数部署中...');
213
+ loading.start('云函数更新部署中...');
212
214
  try {
213
- yield (0, function_1.createFunction)({
215
+ yield (0, function_2.updateFunctionCode)({
214
216
  func,
215
217
  envId,
216
218
  codeSecret,
217
- accessPath,
218
- force: true,
219
- functionPath,
220
219
  functionRootPath
221
220
  });
222
- loading.succeed(`[${func.name}] 云函数部署成功!`);
221
+ const code_text = '代码';
222
+ yield this.waitForFunctionReady(envId, func.name, loading, code_text);
223
+ yield (0, function_2.updateFunctionConfig)({
224
+ envId,
225
+ functionName: func.name,
226
+ config: func
227
+ });
228
+ const config_text = '配置';
229
+ yield this.waitForFunctionReady(envId, func.name, loading, config_text);
230
+ yield (0, function_2.createFunctionTriggers)({
231
+ envId,
232
+ functionName: func.name,
233
+ triggers
234
+ });
235
+ loading.succeed(`[${func.name}] 云函数更新成功!`);
223
236
  yield this.printSuccessTips(envId);
224
237
  }
225
238
  catch (e) {
@@ -232,6 +245,36 @@ let FunctionDeploy = class FunctionDeploy extends common_1.Command {
232
245
  throw e;
233
246
  });
234
247
  }
248
+ waitForFunctionReady(envId, functionName, loading, text, timeoutMinutes = 5) {
249
+ return __awaiter(this, void 0, void 0, function* () {
250
+ const scfService = yield (0, function_2.getFunctionService)(envId);
251
+ const timeoutMs = timeoutMinutes * 60 * 1000;
252
+ return new Promise((resolve, reject) => {
253
+ let intervalId = null;
254
+ const timeoutId = setTimeout(() => {
255
+ clearInterval(intervalId);
256
+ reject(new error_1.CloudBaseError(`[${functionName}] 等待函数更新超时,已等待 ${timeoutMinutes} 分钟`));
257
+ }, timeoutMs);
258
+ intervalId = setInterval(() => __awaiter(this, void 0, void 0, function* () {
259
+ try {
260
+ const functionInfo = yield scfService.getFunctionDetail(functionName);
261
+ if ((functionInfo === null || functionInfo === void 0 ? void 0 : functionInfo.Status) === 'Active') {
262
+ clearTimeout(timeoutId);
263
+ clearInterval(intervalId);
264
+ loading.succeed(`[${functionName}] 云函数${text}已更新!`);
265
+ resolve();
266
+ }
267
+ else {
268
+ loading.text = `正在更新[${functionName}] 云函数${text}... 当前状态: ${(functionInfo === null || functionInfo === void 0 ? void 0 : functionInfo.Status) || '未知'}`;
269
+ }
270
+ }
271
+ catch (error) {
272
+ loading.text = `获取[${functionName}] 云函数状态失败,重试中...`;
273
+ }
274
+ }), 2000);
275
+ });
276
+ });
277
+ }
235
278
  printSuccessTips(envId, log) {
236
279
  return __awaiter(this, void 0, void 0, function* () {
237
280
  let url = `https://console.cloud.tencent.com/tcb/scf?envId=${envId}`;
@@ -54,11 +54,15 @@ function unAttachLayer(options) {
54
54
  throw new error_1.CloudBaseError('层不存在');
55
55
  }
56
56
  Layers.splice(index, 1);
57
- return scfService.request('UpdateFunctionConfiguration', {
58
- Layers,
57
+ const apiParams = {
59
58
  Namespace: envId,
60
- FunctionName: functionName
61
- });
59
+ FunctionName: functionName,
60
+ Layers: Layers.length > 0 ? Layers : [{
61
+ LayerName: '',
62
+ LayerVersion: 0
63
+ }]
64
+ };
65
+ return scfService.request('UpdateFunctionConfiguration', apiParams);
62
66
  });
63
67
  }
64
68
  exports.unAttachLayer = unAttachLayer;
@@ -37,6 +37,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
37
37
  Object.defineProperty(exports, "__esModule", { value: true });
38
38
  exports.showBanner = void 0;
39
39
  const chalk_1 = __importDefault(require("chalk"));
40
+ const output_1 = require("../output");
40
41
  function showBanner(log) {
41
42
  return __awaiter(this, void 0, void 0, function* () {
42
43
  try {
@@ -74,6 +75,8 @@ AI ToolKit`, {
74
75
  log.log(' 🎯 无需运维,极速上线你的创意 💫');
75
76
  }
76
77
  log.log('');
78
+ log.log(`beta 能力,如遇问题可创建 issue: ${(0, output_1.genClickableLink)('https://cnb.cool/tencent/cloud/cloudbase/community/-/issues')}`);
79
+ log.log('');
77
80
  }
78
81
  catch (e) {
79
82
  log.log(chalk_1.default.bold.cyanBright('⛰︎'), chalk_1.default.bold.hex('#FFFFFF')(' CloudBase AI ToolKit CLI'));
@@ -3,13 +3,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.getDefaultModelByBaseUrl = exports.BASE_URL_MODEL_MAPPING = exports.getAgentConfigValidator = exports.getDefaultConfig = exports.CLOUDBASE_PROVIDERS = exports.AGENTS = exports.NONE = exports.AIDER = exports.CODEX = exports.QWEN = exports.CLAUDE = exports.DEFAULT_CONFIG = exports.CLOUDBASE_MCP_CONFIG_PATH = exports.CLAUDE_CODE_ROUTER_CONFIG_PATH = exports.ENV_LOCAL_PATH = exports.CONFIG_PATH = void 0;
6
+ exports.getDefaultModelByBaseUrl = exports.BASE_URL_MODEL_MAPPING = exports.getAgentConfigValidator = exports.getDefaultConfig = exports.CLOUDBASE_PROVIDERS = exports.AGENTS = exports.NONE = exports.AIDER = exports.CODEX = exports.QWEN = exports.CLAUDE = exports.DEFAULT_CONFIG = exports.CLOUDBASE_MCP_CONFIG_PATH = exports.CLAUDE_CODE_ROUTER_LOG_PATH = exports.CLAUDE_CODE_ROUTER_CONFIG_PATH = exports.ENV_LOCAL_PATH = exports.CONFIG_PATH = void 0;
7
7
  const os_1 = __importDefault(require("os"));
8
8
  const path_1 = __importDefault(require("path"));
9
9
  const v3_1 = __importDefault(require("zod/v3"));
10
10
  exports.CONFIG_PATH = path_1.default.join(process.cwd(), 'cloudbaserc.json');
11
11
  exports.ENV_LOCAL_PATH = path_1.default.join(process.cwd(), '.env.local');
12
12
  exports.CLAUDE_CODE_ROUTER_CONFIG_PATH = path_1.default.join(os_1.default.homedir(), '.claude-code-router', 'config.json');
13
+ exports.CLAUDE_CODE_ROUTER_LOG_PATH = path_1.default.join(os_1.default.homedir(), '.claude-code-router', 'claude-code-router.log');
13
14
  exports.CLOUDBASE_MCP_CONFIG_PATH = path_1.default.join(os_1.default.homedir(), '.cloudbase-env-id');
14
15
  exports.DEFAULT_CONFIG = `{
15
16
  "envId": "{{env.ENV_ID}}"
@@ -105,18 +106,18 @@ exports.NONE = {
105
106
  };
106
107
  exports.AGENTS = [exports.CLAUDE, exports.QWEN, exports.CODEX, exports.AIDER, exports.NONE];
107
108
  exports.CLOUDBASE_PROVIDERS = [
109
+ {
110
+ name: 'Kimi',
111
+ value: 'kimi-exp',
112
+ models: ['kimi-k2-instruct-local'],
113
+ transformer: undefined
114
+ },
108
115
  {
109
116
  name: 'DeepSeek',
110
117
  value: 'deepseek',
111
118
  models: ['deepseek-v3'],
112
119
  transformer: 'deepseek'
113
120
  },
114
- {
115
- name: 'Kimi',
116
- value: 'kimi',
117
- models: ['Kimi-K2-Instruct-Online-128K'],
118
- transformer: undefined
119
- },
120
121
  {
121
122
  name: '自定义',
122
123
  value: 'custom',
@@ -359,38 +359,6 @@ class AICommandRouter {
359
359
  yield this.modifyMCPConfigs(extractDir, log);
360
360
  });
361
361
  }
362
- validateTemplateIntegrity(templateType, extractDir, log) {
363
- return __awaiter(this, void 0, void 0, function* () {
364
- const fs = yield Promise.resolve().then(() => __importStar(require('fs-extra')));
365
- const path = yield Promise.resolve().then(() => __importStar(require('path')));
366
- const requiredFiles = {
367
- rules: ['.mcp.json', 'CLAUDE.md'],
368
- react: ['package.json', 'src/', 'public/', 'cloudbaserc.json'],
369
- vue: ['package.json', 'src/', 'public/', 'cloudbaserc.json'],
370
- miniprogram: ['app.js', 'app.json', 'pages/', 'cloudbaserc.json'],
371
- uniapp: ['pages.json', 'manifest.json', 'pages/', 'cloudbaserc.json']
372
- };
373
- const files = requiredFiles[templateType] || [];
374
- const missingFiles = [];
375
- for (const file of files) {
376
- const filePath = path.join(extractDir, file);
377
- if (!(yield fs.pathExists(filePath))) {
378
- missingFiles.push(file);
379
- }
380
- }
381
- if (missingFiles.length > 0) {
382
- log.warn(`⚠️ 模板解压不完整,缺失文件: ${missingFiles.join(', ')}`);
383
- log.info('💡 建议重新下载模板或检查网络连接');
384
- if (templateType === 'miniprogram' && missingFiles.some((f) => f.includes('pages/'))) {
385
- log.warn('⚠️ 小程序 pages 文件夹缺失,可能影响项目正常运行');
386
- log.info('💡 请重新运行 tcb ai 并选择下载 miniprogram 模板');
387
- }
388
- }
389
- else {
390
- log.info('✅ 模板完整性校验通过,所有必要文件已解压');
391
- }
392
- });
393
- }
394
362
  getInstallCommand(agent) {
395
363
  switch (agent) {
396
364
  case 'claude':
@@ -454,6 +422,9 @@ class AICommandRouter {
454
422
  log.info('💡 可能是参数错误或配置问题');
455
423
  log.info('🔧 请检查 API 密钥、模型名称等配置是否正确');
456
424
  }
425
+ if (command === 'ccr') {
426
+ log.info(`🔧 请前往 ${const_1.CLAUDE_CODE_ROUTER_LOG_PATH} 查看日志`);
427
+ }
457
428
  reject(new Error(errorMsg));
458
429
  }
459
430
  });
@@ -597,7 +568,7 @@ class AICommandRouter {
597
568
  while (current < max) {
598
569
  current++;
599
570
  if (current > max) {
600
- throw new Error('ccr 重启完成失败');
571
+ throw new Error(`ccr 重启完成失败,可前往 ${const_1.CLAUDE_CODE_ROUTER_LOG_PATH} 查看日志`);
601
572
  }
602
573
  log.info(`${current}/${max}等待 ccr 重启完成...`);
603
574
  const isRunning = yield this.isClaudeCodeRouterRunning();
@@ -708,7 +679,8 @@ class AICommandRouter {
708
679
  config.Router === null) {
709
680
  config.Router = {};
710
681
  }
711
- config.Router.default = 'cloudbase,deepseek-v3';
682
+ config.Router.default = `cloudbase,${model}`;
683
+ config.Log = true;
712
684
  yield fs.writeJson(const_1.CLAUDE_CODE_ROUTER_CONFIG_PATH, config, { spaces: 2 });
713
685
  log.debug('✅ claude-code-router 配置完成');
714
686
  }
@@ -124,7 +124,8 @@ class AISetupWizard {
124
124
  {
125
125
  type: 'confirm',
126
126
  name: 'shouldUpdateEnvId',
127
- message: `当前使用的 envId 为 ${configEnvId},是否需要更新?`
127
+ message: `当前使用的 envId 为 ${configEnvId},是否需要更新?`,
128
+ default: false
128
129
  }
129
130
  ]);
130
131
  if (shouldUpdateEnvId) {
@@ -493,7 +494,7 @@ class AISetupWizard {
493
494
  name: 'selectedProvider',
494
495
  message: '选择大模型供应商:',
495
496
  choices: const_1.CLOUDBASE_PROVIDERS.map(p => ({ name: p.name, value: p.value })),
496
- default: 'deepseek'
497
+ default: 'kimi-exp'
497
498
  }
498
499
  ]);
499
500
  if (selectedProvider === 'custom') {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cloudbase/cli",
3
- "version": "2.8.0-beta.7",
3
+ "version": "2.8.0",
4
4
  "description": "cli tool for cloudbase",
5
5
  "main": "lib/index.js",
6
6
  "scripts": {
@@ -39,7 +39,7 @@
39
39
  "@cloudbase/iac-core": "0.0.3-alpha.11",
40
40
  "@cloudbase/lowcode-cli": "^0.22.2",
41
41
  "@cloudbase/manager-node": "4.3.3",
42
- "@cloudbase/toolbox": "^0.7.5",
42
+ "@cloudbase/toolbox": "^0.7.7",
43
43
  "@dotenvx/dotenvx": "^1.48.3",
44
44
  "address": "^1.1.2",
45
45
  "camelcase-keys": "^7.0.2",
@@ -0,0 +1,196 @@
1
+ # Qwen Code 使用指南
2
+
3
+ ## 简介
4
+
5
+ Qwen Code 是一个基于 Qwen3-Coder 模型的命令行 AI 工作流工具,专门为代码理解和编辑优化。
6
+
7
+ ## 安装
8
+
9
+ ```bash
10
+ npm install -g @qwen-code/qwen-code
11
+ ```
12
+
13
+ ## 配置
14
+
15
+ ### 环境变量
16
+
17
+ 在 `.env` 文件中配置以下环境变量:
18
+
19
+ ```bash
20
+ # Qwen API 配置
21
+ OPENAI_API_KEY=your_qwen_api_key_here
22
+ OPENAI_BASE_URL=https://dashscope.aliyuncs.com
23
+ OPENAI_MODEL=qwen-turbo
24
+ ```
25
+
26
+ ### 获取 API Key
27
+
28
+ 1. 访问 [阿里云 DashScope](https://dashscope.aliyun.com/)
29
+ 2. 注册并登录账户
30
+ 3. 创建 API Key
31
+ 4. 将 API Key 配置到环境变量中
32
+
33
+ ## 使用方法
34
+
35
+ ### 基本命令
36
+
37
+ ```bash
38
+ # 启动 Qwen Code
39
+ qwen
40
+
41
+ # 指定项目目录
42
+ cd your-project/
43
+ qwen
44
+ ```
45
+
46
+ ### 常用任务
47
+
48
+ #### 代码理解
49
+
50
+ ```
51
+ > 描述这个系统的主要架构组件
52
+ > 这个模块的数据流是如何工作的?
53
+ > 有哪些安全机制?
54
+ ```
55
+
56
+ #### 代码重构
57
+
58
+ ```
59
+ > 重构这个函数以提高可读性和性能
60
+ > 帮助我重构这个类以遵循更好的设计模式
61
+ > 添加适当的错误处理和日志记录
62
+ ```
63
+
64
+ #### 文档和测试
65
+
66
+ ```
67
+ > 为这个函数生成全面的 JSDoc 注释
68
+ > 为这个组件编写单元测试
69
+ > 创建 API 文档
70
+ ```
71
+
72
+ #### 工作流自动化
73
+
74
+ ```
75
+ > 分析过去 7 天的 git 提交,按功能和团队成员分组
76
+ > 将此目录中的所有图像转换为 PNG 格式
77
+ ```
78
+
79
+ ## 与 CloudBase 集成
80
+
81
+ ### 云开发项目
82
+
83
+ Qwen Code 可以与 CloudBase 项目完美集成:
84
+
85
+ ```bash
86
+ # 在 CloudBase 项目中使用
87
+ cd my-cloudbase-project/
88
+ qwen
89
+
90
+ # 询问云开发相关问题
91
+ > 如何优化这个云函数的性能?
92
+ > 这个数据库集合的权限配置是否正确?
93
+ > 如何添加新的云函数触发器?
94
+ ```
95
+
96
+ ### 最佳实践
97
+
98
+ 1. **项目结构分析**:让 Qwen Code 理解你的 CloudBase 项目结构
99
+ 2. **代码审查**:使用 AI 进行代码质量检查
100
+ 3. **文档生成**:自动生成 API 文档和部署说明
101
+ 4. **问题诊断**:快速定位和解决代码问题
102
+
103
+ ## 高级功能
104
+
105
+ ### 代码编辑
106
+
107
+ Qwen Code 支持直接编辑代码文件:
108
+
109
+ ```
110
+ > 优化这个云函数的错误处理
111
+ > 添加 TypeScript 类型定义
112
+ > 重构数据库查询以提高性能
113
+ ```
114
+
115
+ ### 工作流自动化
116
+
117
+ ```
118
+ > 创建部署脚本
119
+ > 生成测试用例
120
+ > 设置 CI/CD 配置
121
+ ```
122
+
123
+ ## 故障排除
124
+
125
+ ### 常见问题
126
+
127
+ 1. **API Key 错误**
128
+ - 检查 API Key 是否正确
129
+ - 确认账户余额充足
130
+
131
+ 2. **模型不可用**
132
+ - 确认模型名称正确
133
+ - 检查 API 端点配置
134
+
135
+ 3. **权限问题**
136
+ - 确认 API Key 有足够权限
137
+ - 检查网络连接
138
+
139
+ ### 调试模式
140
+
141
+ ```bash
142
+ # 启用详细日志
143
+ DEBUG=* qwen
144
+ ```
145
+
146
+ ## 性能优化
147
+
148
+ ### 上下文管理
149
+
150
+ - 使用 `.qwenignore` 文件排除不必要的文件
151
+ - 合理设置上下文窗口大小
152
+ - 定期清理缓存
153
+
154
+ ### 模型选择
155
+
156
+ - `qwen-turbo`: 快速响应,适合简单任务
157
+ - `qwen-plus`: 平衡性能和准确性
158
+ - `qwen-max`: 最高准确性,适合复杂任务
159
+
160
+ ## 示例项目
161
+
162
+ ### 云函数优化
163
+
164
+ ```bash
165
+ cd cloudfunctions/
166
+ qwen
167
+
168
+ > 分析这个云函数的性能瓶颈
169
+ > 添加适当的日志记录
170
+ > 优化数据库查询
171
+ ```
172
+
173
+ ### 前端应用
174
+
175
+ ```bash
176
+ cd miniprogram/
177
+ qwen
178
+
179
+ > 检查小程序代码规范
180
+ > 优化页面加载性能
181
+ > 添加错误处理
182
+ ```
183
+
184
+ ## 相关资源
185
+
186
+ - [Qwen Code GitHub](https://github.com/QwenLM/qwen-code)
187
+ - [阿里云 DashScope](https://dashscope.aliyun.com/)
188
+ - [CloudBase 文档](https://cloud.tencent.com/document/product/876)
189
+ - [Qwen 模型介绍](https://qwen.readthedocs.io/)
190
+
191
+ ## 更新日志
192
+
193
+ ### v1.0.0
194
+ - 初始版本发布
195
+ - 支持基本的代码理解和编辑功能
196
+ - 集成 CloudBase 项目支持
@@ -0,0 +1,185 @@
1
+ # 技术方案设计
2
+
3
+ ## 整体架构
4
+
5
+ ### 核心组件
6
+ - **AICommandRouter**: 命令路由与执行引擎
7
+ - **AIConfigManager**: 配置管理与持久化
8
+ - **AISetupWizard**: 交互式配置向导
9
+ - **TemplateManager**: 模板下载与完整性校验
10
+
11
+ ### 技术栈
12
+ - **语言**: TypeScript
13
+ - **CLI框架**: 基于现有 CloudBase CLI 架构
14
+ - **配置管理**: JSON + 环境变量
15
+ - **模板系统**: 远程下载 + 本地解压
16
+ - **终端美化**: figlet + gradient-string + chalk
17
+
18
+ ## 命令设计
19
+
20
+ ### 主命令结构
21
+ ```bash
22
+ tcb ai [options] -- [agent-args]
23
+ ```
24
+
25
+ ### 核心选项
26
+ - `-a, --agent <name>`: 指定 AI 工具 (claude/codex/gemini)
27
+ - `-e, --envId <id>`: 云开发环境 ID
28
+ - `--setup`: 启动配置向导
29
+ - `--config`: 显示当前配置
30
+ - `--reset`: 重置配置
31
+
32
+ ### 参数透传机制
33
+ - 使用 `--` 分隔符实现参数透传
34
+ - 支持所有 agent CLI 原生参数
35
+ - 自动注入环境变量和配置
36
+
37
+ ## 多 Agent 配置
38
+
39
+ ### 配置结构
40
+ ```json
41
+ {
42
+ "defaultAgent": "claude",
43
+ "agents": {
44
+ "claude": {
45
+ "command": "claude",
46
+ "apiKey": "sk-xxx",
47
+ "baseUrl": "https://api.anthropic.com",
48
+ "model": "claude-3.5-sonnet"
49
+ }
50
+ }
51
+ }
52
+ ```
53
+
54
+ ### 协议适配
55
+ - **Anthropic协议**: 直接透传 (claude, kimi, k2)
56
+ - **OpenAI协议**: 通过 claude-code-router 转发
57
+ - **自定义协议**: 支持自定义 baseUrl 和认证
58
+
59
+ ## 路由与调用
60
+
61
+ ### 工具检测
62
+ - 动态检测本地安装的工具
63
+ - 提供安装指导和命令
64
+ - 支持多平台兼容性
65
+
66
+ ### 环境变量注入
67
+ - 自动注入 API 密钥
68
+ - 设置基础 URL 和模型
69
+ - 传递云开发环境 ID
70
+
71
+ ### claude-code-router 集成
72
+ - 自动检测和安装
73
+ - 智能配置生成
74
+ - 环境变量自动注入
75
+
76
+ ## 模板完整性校验
77
+
78
+ ### 校验机制
79
+ - 定义每个模板类型的必要文件列表
80
+ - 解压后自动校验关键文件
81
+ - 缺失文件时输出修复建议
82
+
83
+ ### 模板类型
84
+ - **rules**: AI编辑器配置模板
85
+ - **react**: React + CloudBase 全栈应用
86
+ - **vue**: Vue + CloudBase 全栈应用
87
+ - **miniprogram**: 微信小程序 + 云开发
88
+ - **uniapp**: UniApp + CloudBase 跨端应用
89
+
90
+ ## 终端输出美观
91
+
92
+ ### ASCII 艺术横幅
93
+ - 使用 `figlet` 库生成 "CloudBase AI ToolKit" 艺术字体
94
+ - 采用 "Slant" 字体样式,支持多行布局
95
+ - 自动适配终端宽度,避免显示溢出
96
+
97
+ ### 渐变色彩效果
98
+ - 使用 `gradient-string` 库实现渐变色彩
99
+ - 色彩方案:青色 → 深蓝 → 绿色渐变
100
+ - 支持多行文本的渐变效果
101
+
102
+ ### 实现细节
103
+ ```typescript
104
+ async function showBanner() {
105
+ try {
106
+ const data = await promisify(figlet.text)(
107
+ `CloudBase
108
+ AI ToolKit`,
109
+ {
110
+ font: 'Slant',
111
+ horizontalLayout: 'fitted',
112
+ verticalLayout: 'fitted',
113
+ }
114
+ );
115
+ console.log(
116
+ chalk.bold(
117
+ gradient(['cyan', 'rgb(0, 111, 150)', 'rgb(0, 246,136)']).multiline(
118
+ data + '\n'
119
+ )
120
+ )
121
+ );
122
+ } catch (e) {
123
+ // 降级到简单横幅
124
+ console.log(chalk.bold.cyanBright('⛰︎ CloudBase AI ToolKit CLI'));
125
+ }
126
+ }
127
+ ```
128
+
129
+ ### 多终端兼容性
130
+ - **支持终端**: iTerm2, Terminal.app, Windows Terminal, Git Bash
131
+ - **降级处理**: 当 figlet 不可用时使用简单横幅
132
+ - **色彩适配**: 自动检测终端色彩支持能力
133
+ - **Unicode 支持**: 使用 emoji 和特殊字符增强视觉效果
134
+
135
+ ### 交互体验优化
136
+ - **状态指示**: 使用 emoji 和颜色区分不同状态
137
+ - **进度反馈**: 实时显示下载和安装进度
138
+ - **错误处理**: 友好的错误信息和解决建议
139
+ - **帮助提示**: 上下文相关的操作指导
140
+
141
+ ## 用户体验
142
+
143
+ ### 交互式配置
144
+ - 使用 inquirer 提供友好的交互界面
145
+ - 支持配置验证和错误提示
146
+ - 提供默认值和快速配置选项
147
+
148
+ ### 错误处理
149
+ - 详细的错误信息和解决建议
150
+ - 支持配置重置和重新初始化
151
+ - 网络异常时的重试机制
152
+
153
+ ### 帮助系统
154
+ - 内置命令帮助和示例
155
+ - 上下文相关的提示信息
156
+ - 链接到官方文档和资源
157
+
158
+ ## 安全性
159
+
160
+ ### 配置安全
161
+ - API 密钥本地加密存储
162
+ - 环境变量安全注入
163
+ - 配置文件权限控制
164
+
165
+ ### 网络安全
166
+ - HTTPS 下载模板
167
+ - 证书验证
168
+ - 代理支持
169
+
170
+ ## 测试策略
171
+
172
+ ### 单元测试
173
+ - 配置管理测试
174
+ - 命令解析测试
175
+ - 模板校验测试
176
+
177
+ ### 集成测试
178
+ - 端到端工作流测试
179
+ - 多平台兼容性测试
180
+ - 错误场景测试
181
+
182
+ ### 用户体验测试
183
+ - 终端输出效果测试
184
+ - 交互流程测试
185
+ - 性能基准测试
@@ -0,0 +1,51 @@
1
+ # 需求文档
2
+
3
+ ## 介绍
4
+
5
+ 本需求旨在为云开发 CLI(CloudBase CLI)集成 AI 开发向导能力,内置云开发 AI ToolKit,支持主流 AI 编程 CLI(如 Claude Code、Opencode、Gemini CLI 等)的快速启动和配置。
6
+ 该功能不直接集成第三方 CLI 工具,而是作为启动器和配置助手,提供极简与高级两种配置模式,内置云开发最佳实践和部署能力,并支持本地/远程大模型的灵活切换。
7
+ 如本地未安装相关 AI CLI,则引导用户安装;如已安装,则可自动唤起并传递配置。
8
+ 同时,解决现有实现中的环境变量、参数传递、CLI 兼容性、模板解压等问题。
9
+
10
+ ## 需求
11
+
12
+ ### 需求 1 - AI 开发向导启动与配置
13
+
14
+ **用户故事:**
15
+ 作为一名开发者,我希望通过云开发 CLI 一键启动 AI 编程助手(如 Claude Code、Opencode、Gemini CLI),并能自动完成环境检测、配置和最佳实践集成,从而快速体验和使用 AI 编程能力。
16
+
17
+ #### 验收标准
18
+
19
+ 1. When 用户在云开发 CLI 中执行 AI 向导命令时,系统应检测本地是否已安装主流 AI CLI 工具(如 claude、opencode、gemini 等)。
20
+ 2. When 本地未安装目标 CLI 工具时,系统应输出清晰的安装指引(如 npm install -g @anthropic-ai/claude-code),并提示用户完成安装。
21
+ 3. When 本地已安装目标 CLI 工具时,系统应自动唤起该工具,并可传递必要的环境变量和参数(如环境 ID、API Key、模型类型等)。
22
+ 4. When 用户选择极简模式时,系统应默认使用云开发内置 DeepSeek 大模型,无需复杂配置即可体验 AI 编程。
23
+ 5. When 用户选择高级模式时,系统应支持自定义 AI 大模型(如 claude/k2/qwen/gemini/openrouter/ollama 等),并可配置 API 协议、路由、密钥等参数。
24
+ 6. When 目标 AI CLI 支持 anthropic 协议时,系统应自动透传相关参数(如 claude/k2/kimi 等)。
25
+ 7. When 目标 AI CLI 支持 OpenAI 协议时,系统应自动透传相关参数,或通过 claude-code-router 进行协议转发。
26
+ 8. When 用户配置了 claude-code-router,系统应支持自动检测和路由转发,支持多模型和多后端切换。
27
+ 9. When 用户在微信开发者工具等特殊终端使用时,CLI 输出应兼容终端特性(如防止滚动、支持浅色/深色模式)。
28
+ 10. When 用户通过 CLI 下载模板包时,系统应确保所有必要文件(包括小程序文件夹)完整解压。
29
+
30
+ ### 需求 2 - 兼容性与用户体验优化
31
+
32
+ **用户故事:**
33
+ 作为一名开发者,我希望云开发 CLI 的 AI 向导功能在不同终端和操作系统下都能稳定运行,输出内容美观、易读,并能及时反馈错误和操作建议。
34
+
35
+ #### 验收标准
36
+
37
+ 1. When CLI 输出 CloudBase AI CLI 相关文字时,应自动适配浅色/深色终端,保证可读性。
38
+ 2. When 在微信开发者工具等特殊终端运行时,CLI 输出应避免内容被自动滚动,保证用户能看到最新提示。
39
+ 3. When CLI 发生错误(如参数传递失败、环境变量缺失、模板解压不完整等),应输出明确的错误信息和修复建议。
40
+ 4. When 用户需要帮助时,CLI 应提供详细的帮助文档和最佳实践指引。
41
+
42
+ ### 需求 3 - 安全与合规
43
+
44
+ **用户故事:**
45
+ 作为一名企业开发者,我希望云开发 CLI 的 AI 向导功能在集成第三方 AI CLI 时,能够遵守合规要求,不直接集成或分发第三方工具,仅作为启动器和配置助手。
46
+
47
+ #### 验收标准
48
+
49
+ 1. When 启动第三方 AI CLI 时,系统不得直接集成或分发其代码,仅作为启动器和配置助手。
50
+ 2. When 需要传递敏感信息(如 API Key)时,系统应遵循最佳安全实践,避免明文泄露。
51
+ 3. When 用户未授权时,系统不得自动收集或上传用户数据。
@@ -0,0 +1,70 @@
1
+ # 实施计划
2
+
3
+ - [x] 1. 实现 tcb ai 命令的参数透传机制,支持 -- 后参数原样传递给 agent CLI
4
+ - 修改 `src/commands/ai/index.ts` 中的 `parseArgs` 方法,优先处理 `--` 分隔符
5
+ - 确保 `--` 后的所有参数直接透传给目标 AI CLI
6
+ - 测试参数透传功能正常工作
7
+ - _需求: 需求 1.1, 需求 1.2
8
+
9
+ - [x] 2. 完善 Claude Code 本地检测与多平台兼容逻辑,输出推荐安装命令和 doctor 检查建议
10
+ - 在 `src/utils/ai/router.ts` 中增强 `isToolAvailable` 检测逻辑
11
+ - 添加 Windows 平台兼容性提示(WSL/Git Bash)
12
+ - 提供 `claude doctor` 检查建议
13
+ - 输出详细的安装指导
14
+ - _需求: 需求 1.3, 需求 2.1
15
+
16
+ - [x] 3. 实现 claude-code-router 的本地检测、自动引导配置、典型配置结构生成
17
+ - 检测 `ccr` 命令可用性
18
+ - 自动安装 `@musistudio/claude-code-router`
19
+ - 执行 `ccr init` 初始化配置
20
+ - 根据用户配置生成智能 router 配置
21
+ - 支持自定义 provider 和路由规则
22
+ - _需求: 需求 1.4, 需求 2.2
23
+
24
+ - [x] 4. 完善 agent CLI 路由与协议适配,支持 anthropic/OpenAI 协议自动透传或 router 转发
25
+ - 实现协议检测和自动适配
26
+ - 支持 anthropic 协议直接透传
27
+ - 通过 claude-code-router 转发 OpenAI 协议
28
+ - 自动注入环境变量和配置
29
+ - 处理不同协议的认证方式
30
+ - _需求: 需求 1.5, 需求 2.3
31
+
32
+ - [x] 5. 完善模板完整性校验与自动修复,确保小程序文件夹等必要文件完整
33
+ - 定义每个模板类型的必要文件列表
34
+ - 解压后自动校验关键文件存在性
35
+ - 特别关注小程序 pages 文件夹完整性
36
+ - 缺失文件时输出具体修复建议
37
+ - 提供重新下载和网络检查建议
38
+ - _需求: 需求 3.1, 需求 3.2
39
+
40
+ - [x] 6. 优化交互体验,终端输出美观、支持多终端、错误处理与帮助提示
41
+ - 使用 figlet 生成 ASCII 艺术横幅
42
+ - 添加 gradient-string 渐变色彩效果
43
+ - 实现多终端兼容性和降级处理
44
+ - 优化错误处理和帮助提示
45
+ - 添加详细的配置验证和解决建议
46
+ - 支持 emoji 和颜色区分不同状态
47
+ - _需求: 需求 4.1, 需求 4.2, 需求 4.3
48
+
49
+ ## 完成状态
50
+
51
+ ✅ **所有任务已完成**
52
+
53
+ ### 主要成果
54
+
55
+ 1. **参数透传机制**:完美支持 `--` 后参数原样透传
56
+ 2. **Claude Code 集成**:完整的安装检测和多平台兼容
57
+ 3. **claude-code-router 自动化**:智能检测、安装和配置
58
+ 4. **协议适配**:支持 anthropic/OpenAI 协议自动适配
59
+ 5. **模板完整性**:完善的校验和修复机制
60
+ 6. **终端美化**:ASCII 艺术横幅和渐变色彩效果
61
+
62
+ ### 技术亮点
63
+
64
+ - 🎨 **美观的终端输出**:使用 figlet + gradient-string 生成专业横幅
65
+ - 🔧 **智能配置管理**:自动检测、安装和配置 AI 工具
66
+ - 🌐 **多协议支持**:无缝适配不同的 AI 服务协议
67
+ - 🛡️ **错误处理**:友好的错误信息和解决建议
68
+ - 📱 **多终端兼容**:支持各种终端环境和降级处理
69
+
70
+ **CloudBase AI ToolKit CLI 功能已全部实现完成!** 🎉
@@ -0,0 +1,421 @@
1
+ # AI 开发套件
2
+
3
+ AI 开发套件是云开发为用户提供的 AI 辅助开发能力,用户可以通过云开发提供的 CLI 工具快速启动和配置主流 AI 编程工具,如 Claude Code、OpenAI Codex、Gemini CLI 等。AI 开发套件内置云开发全栈能力,支持生成、部署和托管全栈 Web 应用与小程序、数据库和后端服务。
4
+
5
+ ## 命令总览
6
+
7
+ ```bash
8
+ tcb ai [options] -- [agent-args]
9
+ ```
10
+
11
+ ## 路径说明
12
+
13
+ * `options` 为 AI 开发套件的配置选项,如 `-a claude`、`-e my-env` 等。
14
+ * `agent-args` 为目标 AI CLI 工具的原生参数,通过 `--` 分隔符透传。
15
+
16
+ ⚠️ 注意事项
17
+
18
+ * `--` 分隔符后的所有参数将原样传递给目标 AI CLI 工具,请确保参数格式正确。
19
+ * 首次使用需要运行 `tcb ai --setup` 进行配置。
20
+ * 确保已安装目标 AI CLI 工具,如 Claude Code、OpenAI CLI 等。
21
+
22
+ ## 快速开始
23
+
24
+ ### 1. 配置 AI 开发套件
25
+
26
+ 首次使用需要配置 AI 开发套件:
27
+
28
+ ```bash
29
+ # 启动配置向导
30
+ tcb ai --setup
31
+ ```
32
+
33
+ 配置向导将引导您:
34
+ - 选择默认的 AI 工具(Claude Code、OpenAI Codex、Gemini CLI)
35
+ - 配置 API 密钥和基础 URL
36
+ - 设置云开发环境 ID
37
+ - 选择模型和协议类型
38
+
39
+ ### 2. 启动 AI 工具
40
+
41
+ 配置完成后,可以直接启动 AI 工具:
42
+
43
+ ```bash
44
+ # 使用默认配置启动 Claude Code
45
+ tcb ai -a claude -- --continue
46
+
47
+ # 指定环境 ID 启动
48
+ tcb ai -a claude -e my-env -- --model=claude-3.5-sonnet
49
+
50
+ # 查看帮助信息
51
+ tcb ai -a claude -- --help
52
+ ```
53
+
54
+ ## 核心功能
55
+
56
+ ### 启动 AI 工具
57
+
58
+ 您可以使用下面的命令启动配置好的 AI 工具:
59
+
60
+ ```bash
61
+ tcb ai -a <agent> [options] -- [agent-args]
62
+ ```
63
+
64
+ **参数说明:**
65
+ - `-a, --agent <name>`: 指定 AI 工具名称(claude/codex/gemini)
66
+ - `-e, --envId <id>`: 指定云开发环境 ID
67
+ - `--`: 参数分隔符,后面的参数将透传给 AI 工具
68
+
69
+ **使用示例:**
70
+ ```bash
71
+ # 启动 Claude Code 并继续上次会话
72
+ tcb ai -a claude -- --continue
73
+
74
+ # 启动 OpenAI Codex 并指定模型
75
+ tcb ai -a codex -- --model=gpt-4
76
+
77
+ # 启动 Gemini CLI 并设置最大 token
78
+ tcb ai -a gemini -- --max-tokens=4096
79
+ ```
80
+
81
+ ### 配置管理
82
+
83
+ #### 查看当前配置
84
+
85
+ ```bash
86
+ tcb ai --config
87
+ ```
88
+
89
+ 显示当前配置信息,包括:
90
+ - 默认 AI 工具
91
+ - API 密钥状态
92
+ - 环境 ID 配置
93
+ - 模型和协议设置
94
+
95
+ #### 重置配置
96
+
97
+ ```bash
98
+ tcb ai --reset
99
+ ```
100
+
101
+ 清除所有配置信息,恢复到初始状态。
102
+
103
+ #### 交互式配置
104
+
105
+ ```bash
106
+ tcb ai --setup
107
+ ```
108
+
109
+ 启动交互式配置向导,引导您完成:
110
+ - AI 工具选择和配置
111
+ - API 密钥设置
112
+ - 云开发环境绑定
113
+ - 协议和模型选择
114
+
115
+ ## 支持的 AI 工具
116
+
117
+ ### Claude Code
118
+
119
+ Claude Code 是 Anthropic 推出的 AI 编程助手,支持自然语言编程和代码生成。
120
+
121
+ **安装命令:**
122
+ ```bash
123
+ npm install -g @anthropic-ai/claude-code
124
+ ```
125
+
126
+ **配置要求:**
127
+ - API 密钥:`ANTHROPIC_API_KEY`
128
+ - 基础 URL:`https://api.anthropic.com`
129
+ - 支持模型:claude-3.5-sonnet, claude-3-opus 等
130
+
131
+ **使用示例:**
132
+ ```bash
133
+ # 启动 Claude Code
134
+ tcb ai -a claude -- --continue
135
+
136
+ # 指定模型和参数
137
+ tcb ai -a claude -- --model=claude-3.5-sonnet --max-tokens=4096
138
+ ```
139
+
140
+ ### OpenAI Codex
141
+
142
+ OpenAI Codex 是 OpenAI 的代码生成 AI,基于 GPT 模型优化。
143
+
144
+ **安装命令:**
145
+ ```bash
146
+ npm install -g openai
147
+ ```
148
+
149
+ **配置要求:**
150
+ - API 密钥:`OPENAI_API_KEY`
151
+ - 基础 URL:`https://api.openai.com`
152
+ - 支持模型:gpt-4, gpt-3.5-turbo 等
153
+
154
+ **使用示例:**
155
+ ```bash
156
+ # 启动 OpenAI Codex
157
+ tcb ai -a codex -- --model=gpt-4
158
+
159
+ # 设置温度和最大 token
160
+ tcb ai -a codex -- --temperature=0.7 --max-tokens=2048
161
+ ```
162
+
163
+ ### Gemini CLI
164
+
165
+ Gemini CLI 是 Google 的 AI 编程工具,基于 Gemini 模型。
166
+
167
+ **安装命令:**
168
+ ```bash
169
+ npm install -g @google/generative-ai
170
+ ```
171
+
172
+ **配置要求:**
173
+ - API 密钥:`GOOGLE_API_KEY`
174
+ - 基础 URL:`https://generativelanguage.googleapis.com`
175
+ - 支持模型:gemini-2.0-flash, gemini-2.0-pro 等
176
+
177
+ **使用示例:**
178
+ ```bash
179
+ # 启动 Gemini CLI
180
+ tcb ai -a gemini -- --model=gemini-2.0-pro
181
+
182
+ # 设置安全过滤
183
+ tcb ai -a gemini -- --safety-level=BLOCK_MEDIUM_AND_ABOVE
184
+ ```
185
+
186
+ ## 协议适配
187
+
188
+ ### Anthropic 协议
189
+
190
+ 支持 Anthropic 协议的 AI 工具可以直接透传:
191
+
192
+ ```bash
193
+ # Claude Code(原生支持)
194
+ tcb ai -a claude -- --continue
195
+
196
+ # Kimi(支持 Anthropic 协议)
197
+ tcb ai -a kimi -- --model=claude-3.5-sonnet
198
+
199
+ # K2(支持 Anthropic 协议)
200
+ tcb ai -a k2 -- --max-tokens=4096
201
+ ```
202
+
203
+ ### OpenAI 协议
204
+
205
+ 支持 OpenAI 协议的 AI 工具通过 claude-code-router 转发:
206
+
207
+ ```bash
208
+ # 自动检测并安装 claude-code-router
209
+ tcb ai -a openai -- --model=gpt-4
210
+
211
+ # 自定义 OpenAI 兼容服务
212
+ tcb ai -a custom -- --base-url=https://api.example.com
213
+ ```
214
+
215
+ ## 云开发集成
216
+
217
+ ### 环境变量注入
218
+
219
+ AI 开发套件会自动注入云开发相关环境变量:
220
+
221
+ ```bash
222
+ # 自动注入环境 ID
223
+ tcb ai -a claude -e my-env -- --continue
224
+
225
+ # 环境变量示例
226
+ CLOUDBASE_ENV_ID=my-env
227
+ CLOUDBASE_REGION=ap-shanghai
228
+ ```
229
+
230
+ ### 模板下载
231
+
232
+ 支持下载云开发项目模板:
233
+
234
+ ```bash
235
+ # 下载 React + CloudBase 模板
236
+ tcb ai --template react
237
+
238
+ # 下载小程序模板
239
+ tcb ai --template miniprogram
240
+
241
+ # 下载 Vue + CloudBase 模板
242
+ tcb ai --template vue
243
+ ```
244
+
245
+ **支持的模板类型:**
246
+ - `rules`: AI 编辑器配置模板
247
+ - `react`: React + CloudBase 全栈应用
248
+ - `vue`: Vue + CloudBase 全栈应用
249
+ - `miniprogram`: 微信小程序 + 云开发
250
+ - `uniapp`: UniApp + CloudBase 跨端应用
251
+
252
+ ### 自动部署
253
+
254
+ AI 工具生成的代码可以直接部署到云开发:
255
+
256
+ ```bash
257
+ # 生成并部署 React 应用
258
+ tcb ai -a claude -e my-env -- --prompt="创建一个 React 购物车应用"
259
+
260
+ # 部署到云函数
261
+ tcb ai -a claude -e my-env -- --prompt="创建一个用户注册云函数"
262
+ ```
263
+
264
+ ## 高级配置
265
+
266
+ ### 自定义 Provider
267
+
268
+ 支持配置自定义 AI 服务提供商:
269
+
270
+ ```json
271
+ {
272
+ "defaultAgent": "custom",
273
+ "agents": {
274
+ "custom": {
275
+ "command": "claude",
276
+ "apiKey": "sk-xxx",
277
+ "baseUrl": "https://api.custom-ai.com",
278
+ "model": "custom-model"
279
+ }
280
+ }
281
+ }
282
+ ```
283
+
284
+ ### 多环境支持
285
+
286
+ 支持配置多个云开发环境:
287
+
288
+ ```bash
289
+ # 开发环境
290
+ tcb ai -a claude -e dev-env -- --continue
291
+
292
+ # 生产环境
293
+ tcb ai -a claude -e prod-env -- --continue
294
+ ```
295
+
296
+ ### 代理配置
297
+
298
+ 支持通过代理访问 AI 服务:
299
+
300
+ ```bash
301
+ # 设置代理
302
+ export HTTP_PROXY=http://127.0.0.1:7890
303
+ export HTTPS_PROXY=http://127.0.0.1:7890
304
+
305
+ # 启动 AI 工具
306
+ tcb ai -a claude -- --continue
307
+ ```
308
+
309
+ ## 故障排除
310
+
311
+ ### 常见问题
312
+
313
+ #### 1. AI 工具未安装
314
+
315
+ **错误信息:** `⚠️ claude 工具未安装`
316
+
317
+ **解决方案:**
318
+ ```bash
319
+ # 安装 Claude Code
320
+ npm install -g @anthropic-ai/claude-code
321
+
322
+ # 检查安装
323
+ claude doctor
324
+ ```
325
+
326
+ #### 2. API 密钥无效
327
+
328
+ **错误信息:** `❌ API 密钥无效`
329
+
330
+ **解决方案:**
331
+ ```bash
332
+ # 重新配置
333
+ tcb ai --setup
334
+
335
+ # 检查 API 密钥格式
336
+ # Claude: sk-ant-api03-xxx
337
+ # OpenAI: sk-xxx
338
+ # Google: AIzaSyCxxx
339
+ ```
340
+
341
+ #### 3. 网络连接问题
342
+
343
+ **错误信息:** `❌ 网络连接失败`
344
+
345
+ **解决方案:**
346
+ ```bash
347
+ # 检查网络连接
348
+ ping api.anthropic.com
349
+
350
+ # 配置代理
351
+ export HTTP_PROXY=http://127.0.0.1:7890
352
+
353
+ # 使用国内镜像(如果支持)
354
+ tcb ai -a claude -- --base-url=https://api.anthropic.cn
355
+ ```
356
+
357
+ #### 4. 模板下载失败
358
+
359
+ **错误信息:** `❌ 模板下载失败`
360
+
361
+ **解决方案:**
362
+ ```bash
363
+ # 检查网络连接
364
+ curl -I https://static.cloudbase.net
365
+
366
+ # 重新下载
367
+ tcb ai --template react --force
368
+
369
+ # 手动下载模板
370
+ wget https://static.cloudbase.net/cloudbase-examples/web-cloudbase-react-template.zip
371
+ ```
372
+
373
+ ### 调试模式
374
+
375
+ 启用调试模式获取详细信息:
376
+
377
+ ```bash
378
+ # 启用调试
379
+ DEBUG=* tcb ai -a claude -- --continue
380
+
381
+ # 查看详细日志
382
+ tcb ai -a claude -- --verbose --continue
383
+ ```
384
+
385
+ ## 最佳实践
386
+
387
+ ### 1. 配置管理
388
+
389
+ - 使用 `tcb ai --setup` 进行初始配置
390
+ - 定期更新 API 密钥
391
+ - 为不同项目使用不同的环境 ID
392
+
393
+ ### 2. 安全考虑
394
+
395
+ - 不要在代码中硬编码 API 密钥
396
+ - 使用环境变量存储敏感信息
397
+ - 定期轮换 API 密钥
398
+
399
+ ### 3. 性能优化
400
+
401
+ - 选择合适的模型和参数
402
+ - 使用 `--continue` 保持会话连续性
403
+ - 合理设置 `max-tokens` 参数
404
+
405
+ ### 4. 云开发集成
406
+
407
+ - 充分利用云开发的全栈能力
408
+ - 使用模板快速搭建项目
409
+ - 结合云函数和数据库构建完整应用
410
+
411
+ ## 相关资源
412
+
413
+ - [CloudBase CLI 官方文档](https://docs.cloudbase.net/cli-v1/)
414
+ - [Claude Code 官方文档](https://docs.anthropic.com/en/docs/claude-code)
415
+ - [OpenAI API 文档](https://platform.openai.com/docs)
416
+ - [Google AI Studio](https://aistudio.google.com/)
417
+ - [云开发社区](https://cloudbase.net/community)
418
+
419
+ ---
420
+
421
+ 上一页[云存储](./storage) 下一页[静态网站托管](./hosting)
@@ -25,7 +25,7 @@
25
25
 
26
26
  ### 3. IDE 配置映射和格式支持
27
27
  - 参考 CloudBase-AI-ToolKit 的 IDE 到文件映射关系
28
- - 支持 Cursor、VSCode、Claude Code、OpenAI Codex、OpenCode、aider 等多种 IDE
28
+ - 支持 Cursor、VSCode、Claude Code、OpenAI Codex、OpenCode、Aider 等多种 IDE
29
29
  - 支持 JSON 和 TOML 两种配置文件格式
30
30
  - 实现 TOML 解析和修改功能
31
31
 
@@ -39,5 +39,5 @@
39
39
  4. When 配置 Claude Code 时,the 系统 shall 生成 `CLAUDE.md` 和 `.mcp.json`
40
40
  5. When 配置 OpenAI Codex 时,the 系统 shall 处理 `.codex/config.toml` 文件
41
41
  6. When 配置 OpenCode 时,the 系统 shall 处理 `.opencode.json` 文件
42
- 7. When 配置 aider 时,the 系统 shall 处理 `mcp.json` 文件
42
+ 7. When 配置 Aider 时,the 系统 shall 处理 `mcp.json` 文件
43
43
  8. When 处理 TOML 格式时,the 系统 shall 正确解析和修改配置
@@ -20,7 +20,7 @@
20
20
  - [x] 3.1. 扩展支持更多 IDE 和格式
21
21
  - 添加 OpenAI Codex (.codex/config.toml) 支持
22
22
  - 添加 OpenCode (.opencode.json) 支持
23
- - 添加 aider (mcp.json) 支持
23
+ - 添加 Aider (mcp.json) 支持
24
24
  - 实现 TOML 格式解析和修改功能
25
25
  - _需求: 需求 3
26
26
 
@@ -16,6 +16,7 @@ export declare class FunctionDeploy extends Command {
16
16
  execute(ctx: any, params: any, log: Logger): Promise<void>;
17
17
  deployAllFunction(options: any): Promise<void>;
18
18
  handleDeployFail(e: CloudBaseError, options: ICreateFunctionOptions): Promise<void>;
19
+ waitForFunctionReady(envId: string, functionName: string, loading: any, text: string, timeoutMinutes?: number): Promise<void>;
19
20
  printSuccessTips(envId: string, log?: Logger): Promise<void>;
20
21
  genApiGateway(envId: string, name: string): Promise<void>;
21
22
  }
@@ -2,6 +2,7 @@ import z from 'zod/v3';
2
2
  export declare const CONFIG_PATH: string;
3
3
  export declare const ENV_LOCAL_PATH: string;
4
4
  export declare const CLAUDE_CODE_ROUTER_CONFIG_PATH: string;
5
+ export declare const CLAUDE_CODE_ROUTER_LOG_PATH: string;
5
6
  export declare const CLOUDBASE_MCP_CONFIG_PATH: string;
6
7
  export declare const DEFAULT_CONFIG = "{\n \"envId\": \"{{env.ENV_ID}}\"\n}";
7
8
  export declare const CLAUDE: {
@@ -299,15 +300,15 @@ export declare const AGENTS: readonly [{
299
300
  value: string;
300
301
  }];
301
302
  export declare const CLOUDBASE_PROVIDERS: readonly [{
303
+ readonly name: "Kimi";
304
+ readonly value: "kimi-exp";
305
+ readonly models: readonly ["kimi-k2-instruct-local"];
306
+ readonly transformer: any;
307
+ }, {
302
308
  readonly name: "DeepSeek";
303
309
  readonly value: "deepseek";
304
310
  readonly models: readonly ["deepseek-v3"];
305
311
  readonly transformer: "deepseek";
306
- }, {
307
- readonly name: "Kimi";
308
- readonly value: "kimi";
309
- readonly models: readonly ["Kimi-K2-Instruct-Online-128K"];
310
- readonly transformer: any;
311
312
  }, {
312
313
  readonly name: "自定义";
313
314
  readonly value: "custom";
@@ -13,7 +13,6 @@ export declare class AICommandRouter {
13
13
  private promptForTemplateDownload;
14
14
  private downloadTemplate;
15
15
  private downloadAndExtractTemplate;
16
- private validateTemplateIntegrity;
17
16
  private getInstallCommand;
18
17
  private shouldCheckOverwrite;
19
18
  private executeCommand;