@cloudbase/cloudbase-mcp 2.23.11 → 2.24.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/index.cjs CHANGED
@@ -136879,7 +136879,7 @@ class TelemetryReporter {
136879
136879
  const nodeVersion = process.version; // Node.js版本
136880
136880
  const arch = os_1.default.arch(); // 系统架构
136881
136881
  // 从构建时注入的版本号获取MCP版本信息
136882
- const mcpVersion = process.env.npm_package_version || "2.23.11" || 0;
136882
+ const mcpVersion = process.env.npm_package_version || "2.24.0" || 0;
136883
136883
  return {
136884
136884
  userAgent: `${osType} ${osRelease} ${arch} ${nodeVersion} CloudBase-MCP/${mcpVersion}`,
136885
136885
  deviceId: this.deviceId,
@@ -160486,6 +160486,38 @@ function classifySqlRisk(sql) {
160486
160486
  requiresConfirm: true,
160487
160487
  };
160488
160488
  }
160489
+ /**
160490
+ * Schema DDL that must go through applyMigration by default.
160491
+ * Includes CREATE/ALTER/COMMENT (schema_change) and DROP/TRUNCATE / destructive ALTER.
160492
+ * Excludes DML DELETE and security_change (GRANT/POLICY), which may still use execute.
160493
+ */
160494
+ function isSchemaDdlRisk(risk, sql) {
160495
+ if (risk === "schema_change") {
160496
+ return true;
160497
+ }
160498
+ if (risk !== "destructive") {
160499
+ return false;
160500
+ }
160501
+ const verb = getSqlVerb(stripLeadingSqlComments(sql));
160502
+ return ["DROP", "TRUNCATE", "ALTER"].includes(verb);
160503
+ }
160504
+ function buildLocalMigrationFileHint(version, name) {
160505
+ return `migrations/${version}_${name}.sql`;
160506
+ }
160507
+ const MIGRATION_VERSION_REQUIRED_MESSAGE = "migrationVersion is required (14-digit UTC timestamp YYYYMMDDHHMMSS). " +
160508
+ "Decide the version first, write local file migrations/<version>_<migrationName>.sql, " +
160509
+ "then call planMigration/applyMigration with the same migrationVersion and migrationName.";
160510
+ function requireExplicitMigrationVersion(args, actionLabel) {
160511
+ const version = args.migrationVersion?.trim();
160512
+ if (!version) {
160513
+ return buildPgToolResult({
160514
+ success: false,
160515
+ errorCode: "MIGRATION_VERSION_REQUIRED",
160516
+ message: `Provide migrationVersion when action=${actionLabel}. ${MIGRATION_VERSION_REQUIRED_MESSAGE}`,
160517
+ });
160518
+ }
160519
+ return version;
160520
+ }
160489
160521
  function quoteIdentifier(identifier) {
160490
160522
  return `"${identifier.replace(/"/g, '""')}"`;
160491
160523
  }
@@ -160850,12 +160882,6 @@ async function executeManagerPGSql(context, sql, cloudBaseOptions) {
160850
160882
  }
160851
160883
  throw new Error("Current @cloudbase/manager-node runtime does not expose database.executePGSql or commonService fallback. Upgrade to @cloudbase/manager-node >= 5.4.0.");
160852
160884
  }
160853
- /** Generate a 14-digit migration version (YYYYMMDDHHMMSS) from current time */
160854
- function generateMigrationVersion() {
160855
- const d = new Date();
160856
- const p = (n) => String(n).padStart(2, "0");
160857
- return `${d.getFullYear()}${p(d.getMonth() + 1)}${p(d.getDate())}${p(d.getHours())}${p(d.getMinutes())}${p(d.getSeconds())}`;
160858
- }
160859
160885
  /** Call a CloudBase PG migration API via commonService fallback */
160860
160886
  async function callPgMigrationApi(context, action, params, cloudBaseOptions) {
160861
160887
  const manager = await (0, cloudbase_manager_js_1.getCloudBaseManager)({
@@ -161098,6 +161124,34 @@ async function handleExecuteSql(args, context, deps) {
161098
161124
  });
161099
161125
  }
161100
161126
  const classification = classifySqlRisk(args.sql);
161127
+ if (isSchemaDdlRisk(classification.risk, args.sql) && args.allowDdlViaExecute !== true) {
161128
+ return buildPgToolResult({
161129
+ success: false,
161130
+ errorCode: "DDL_USE_APPLY_MIGRATION",
161131
+ message: "Schema DDL (CREATE/ALTER/DROP/TRUNCATE/...) must use applyMigration with an explicit migrationVersion, " +
161132
+ "not execute. Write local migrations/<version>_<name>.sql first, then call applyMigration. " +
161133
+ "Set allowDdlViaExecute=true only for exceptional one-off ops that intentionally bypass migration history.",
161134
+ data: {
161135
+ classification,
161136
+ localFileHintPattern: "migrations/<migrationVersion>_<migrationName>.sql",
161137
+ },
161138
+ nextActions: [
161139
+ buildNextAction(MANAGE_PG_DATABASE, "planMigration", "Preview the schema change as a versioned migration (provide migrationVersion + migrationName).", {
161140
+ action: "planMigration",
161141
+ migrationName: "describe_your_change",
161142
+ migrationVersion: "YYYYMMDDHHMMSS",
161143
+ sql: args.sql,
161144
+ }),
161145
+ buildNextAction(MANAGE_PG_DATABASE, "applyMigration", "Apply the schema change via PushPGUserMigrations with the same explicit migrationVersion.", {
161146
+ action: "applyMigration",
161147
+ migrationName: "describe_your_change",
161148
+ migrationVersion: "YYYYMMDDHHMMSS",
161149
+ sql: args.sql,
161150
+ confirm: true,
161151
+ }),
161152
+ ],
161153
+ });
161154
+ }
161101
161155
  if (!classification.readOnly && !args.confirm) {
161102
161156
  return buildPgToolResult({
161103
161157
  success: false,
@@ -161107,7 +161161,12 @@ async function handleExecuteSql(args, context, deps) {
161107
161161
  classification,
161108
161162
  },
161109
161163
  nextActions: [
161110
- buildNextAction(MANAGE_PG_DATABASE, "execute", "Re-issue with confirm=true to actually run the SQL.", { action: "execute", sql: args.sql, confirm: true }),
161164
+ buildNextAction(MANAGE_PG_DATABASE, "execute", "Re-issue with confirm=true to actually run the SQL.", {
161165
+ action: "execute",
161166
+ sql: args.sql,
161167
+ confirm: true,
161168
+ ...(args.allowDdlViaExecute === true ? { allowDdlViaExecute: true } : {}),
161169
+ }),
161111
161170
  buildNextAction(QUERY_PG_DATABASE, "metadata", "Inspect table size and shape before destructive changes.", { action: "metadata", limit: 20 }),
161112
161171
  ],
161113
161172
  });
@@ -161124,8 +161183,15 @@ async function handleExecuteSql(args, context, deps) {
161124
161183
  .slice(0, 5)
161125
161184
  .map((row) => serializeValue(row)),
161126
161185
  targetTable: targetTable ?? null,
161186
+ ...(args.allowDdlViaExecute === true && isSchemaDdlRisk(classification.risk, args.sql)
161187
+ ? {
161188
+ warning: "DDL executed via allowDdlViaExecute bypasses migration history. Prefer applyMigration for reproducible schema changes.",
161189
+ }
161190
+ : {}),
161127
161191
  },
161128
- message: "Write SQL executed successfully.",
161192
+ message: args.allowDdlViaExecute === true && isSchemaDdlRisk(classification.risk, args.sql)
161193
+ ? "Write SQL executed successfully (DDL via allowDdlViaExecute; migration history was bypassed)."
161194
+ : "Write SQL executed successfully.",
161129
161195
  nextActions: classification.risk === "schema_change" && targetTable
161130
161196
  ? [
161131
161197
  buildNextAction(QUERY_PG_DATABASE, "schema", "Inspect the table schema, columns, indexes, and RLS policies after schema changes.", {
@@ -161153,6 +161219,43 @@ async function handleDryRun(args) {
161153
161219
  });
161154
161220
  }
161155
161221
  const classification = classifySqlRisk(args.sql);
161222
+ const schemaDdl = isSchemaDdlRisk(classification.risk, args.sql);
161223
+ if (classification.readOnly) {
161224
+ return buildPgToolResult({
161225
+ success: true,
161226
+ data: {
161227
+ classification,
161228
+ wouldExecute: false,
161229
+ sqlPreview: args.sql.trim().slice(0, 500),
161230
+ },
161231
+ message: "SQL dry run completed. This statement is read-only; use queryPgDatabase(action=sql) to execute it.",
161232
+ nextActions: [
161233
+ buildNextAction(QUERY_PG_DATABASE, "sql", "Execute the read-only SQL through queryPgDatabase.", { action: "sql", sql: args.sql, limit: 20 }),
161234
+ ],
161235
+ });
161236
+ }
161237
+ if (schemaDdl) {
161238
+ return buildPgToolResult({
161239
+ success: true,
161240
+ data: {
161241
+ classification,
161242
+ wouldExecute: false,
161243
+ sqlPreview: args.sql.trim().slice(0, 500),
161244
+ preferredAction: "applyMigration",
161245
+ localFileHintPattern: "migrations/<migrationVersion>_<migrationName>.sql",
161246
+ },
161247
+ message: "SQL dry run completed. Schema DDL should use applyMigration with an explicit migrationVersion, not execute.",
161248
+ nextActions: [
161249
+ buildNextAction(MANAGE_PG_DATABASE, "applyMigration", "Apply schema DDL via versioned migration (provide migrationVersion + migrationName + confirm=true).", {
161250
+ action: "applyMigration",
161251
+ migrationName: "describe_your_change",
161252
+ migrationVersion: "YYYYMMDDHHMMSS",
161253
+ sql: args.sql,
161254
+ confirm: true,
161255
+ }),
161256
+ ],
161257
+ });
161258
+ }
161156
161259
  return buildPgToolResult({
161157
161260
  success: true,
161158
161261
  data: {
@@ -161160,15 +161263,9 @@ async function handleDryRun(args) {
161160
161263
  wouldExecute: false,
161161
161264
  sqlPreview: args.sql.trim().slice(0, 500),
161162
161265
  },
161163
- message: classification.readOnly
161164
- ? "SQL dry run completed. This statement is read-only; use queryPgDatabase(action=sql) to execute it."
161165
- : "SQL dry run completed. Write SQL requires managePgDatabase(action=execute, confirm=true).",
161266
+ message: "SQL dry run completed. Write SQL requires managePgDatabase(action=execute, confirm=true).",
161166
161267
  nextActions: [
161167
- buildNextAction(classification.readOnly ? QUERY_PG_DATABASE : MANAGE_PG_DATABASE, classification.readOnly ? "sql" : "execute", classification.readOnly
161168
- ? "Execute the read-only SQL through queryPgDatabase."
161169
- : "Execute the write SQL only after explicit confirmation.", classification.readOnly
161170
- ? { action: "sql", sql: args.sql, limit: 20 }
161171
- : { action: "execute", sql: args.sql, confirm: true }),
161268
+ buildNextAction(MANAGE_PG_DATABASE, "execute", "Execute the write SQL only after explicit confirmation.", { action: "execute", sql: args.sql, confirm: true }),
161172
161269
  ],
161173
161270
  });
161174
161271
  }
@@ -161187,7 +161284,12 @@ async function handlePlanMigration(args, context, deps, cloudBaseOptions) {
161187
161284
  message: "Provide migrationName (lowercase letters, digits and underscores, starting with a letter) when action=planMigration.",
161188
161285
  });
161189
161286
  }
161190
- const version = args.migrationVersion?.trim() || generateMigrationVersion();
161287
+ const versionOrError = requireExplicitMigrationVersion(args, "planMigration");
161288
+ if (typeof versionOrError !== "string") {
161289
+ return versionOrError;
161290
+ }
161291
+ const version = versionOrError;
161292
+ const localFileHint = buildLocalMigrationFileHint(version, args.migrationName);
161191
161293
  const migration = {
161192
161294
  Version: version,
161193
161295
  Name: args.migrationName,
@@ -161202,10 +161304,22 @@ async function handlePlanMigration(args, context, deps, cloudBaseOptions) {
161202
161304
  }, cloudBaseOptions);
161203
161305
  return buildPgToolResult({
161204
161306
  success: true,
161205
- data: result,
161206
- message: "Migration plan generated via PreviewPGUserMigrations.",
161307
+ data: {
161308
+ migrationVersion: version,
161309
+ migrationName: args.migrationName,
161310
+ localFileHint,
161311
+ apiResult: result,
161312
+ },
161313
+ message: `Migration plan generated via PreviewPGUserMigrations. Reuse migrationVersion=${version} on applyMigration. Ensure local file ${localFileHint} exists and matches.`,
161207
161314
  nextActions: [
161208
- buildNextAction(MANAGE_PG_DATABASE, "applyMigration", "Review the plan above. If it looks correct, call applyMigration to execute.", { action: "applyMigration", migrationName: args.migrationName, sql: args.sql, confirm: true, ...(args.rollbackSql ? { rollbackSql: args.rollbackSql } : {}) }),
161315
+ buildNextAction(MANAGE_PG_DATABASE, "applyMigration", "Review the plan above. If it looks correct, call applyMigration with the same migrationVersion.", {
161316
+ action: "applyMigration",
161317
+ migrationName: args.migrationName,
161318
+ migrationVersion: version,
161319
+ sql: args.sql,
161320
+ confirm: true,
161321
+ ...(args.rollbackSql ? { rollbackSql: args.rollbackSql } : {}),
161322
+ }),
161209
161323
  ],
161210
161324
  });
161211
161325
  }
@@ -161239,7 +161353,12 @@ async function handleApplyMigration(args, context, deps, cloudBaseOptions) {
161239
161353
  message: "PushPGUserMigrations requires confirm=true. Run with confirm=true to proceed.",
161240
161354
  });
161241
161355
  }
161242
- const version = args.migrationVersion?.trim() || generateMigrationVersion();
161356
+ const versionOrError = requireExplicitMigrationVersion(args, "applyMigration");
161357
+ if (typeof versionOrError !== "string") {
161358
+ return versionOrError;
161359
+ }
161360
+ const version = versionOrError;
161361
+ const localFileHint = buildLocalMigrationFileHint(version, args.migrationName);
161243
161362
  const migration = {
161244
161363
  Version: version,
161245
161364
  Name: args.migrationName,
@@ -161259,8 +161378,16 @@ async function handleApplyMigration(args, context, deps, cloudBaseOptions) {
161259
161378
  const result = await callPgMigrationApi(context, "PushPGUserMigrations", params, cloudBaseOptions);
161260
161379
  return buildPgToolResult({
161261
161380
  success: true,
161262
- data: result,
161263
- message: "Migrations applied via PushPGUserMigrations.",
161381
+ data: {
161382
+ migrationVersion: version,
161383
+ migrationName: args.migrationName,
161384
+ localFileHint,
161385
+ apiResult: result,
161386
+ },
161387
+ message: `Migrations applied via PushPGUserMigrations. Ensure local file ${localFileHint} exists and matches.`,
161388
+ nextActions: [
161389
+ buildNextAction(MANAGE_PG_DATABASE, "listMigrations", "Verify the remote migration history records the same migrationVersion.", { action: "listMigrations", limit: 20 }),
161390
+ ],
161264
161391
  });
161265
161392
  }
161266
161393
  catch (error) {
@@ -161535,11 +161662,11 @@ function registerPGDatabaseTools(server, providedDeps) {
161535
161662
  });
161536
161663
  server.registerTool?.(MANAGE_PG_DATABASE, {
161537
161664
  title: "管理 PostgreSQL 上下文或执行写入 SQL",
161538
- description: "管理 CloudBase PostgreSQL:执行已确认的写入 SQL 或 DDL、SQL 风险预检、迁移管理。建表、改 schema、数据结构变更优先使用 applyMigration(带版本管理与回滚),而非 execute。",
161665
+ description: "管理 CloudBase PostgreSQL:执行已确认的写入 SQL、SQL 风险预检、迁移管理。建表/ALTER/DROP 等 schema 变更必须使用 applyMigration(显式 migrationVersion + 本地 migrations/ 留档),不要默认用 execute。execute 主要用于 DML 与 GRANT/RLS 等运维 SQL。",
161539
161666
  inputSchema: {
161540
161667
  action: zod_1.z
161541
161668
  .enum(MANAGE_ACTIONS)
161542
- .describe("操作类型:execute=执行已确认的写入 SQL 或 DDL;dryRun=只分析 SQL 风险不执行;planMigration=预览迁移计划(需 migrationName + sql);applyMigration=应用迁移,建表/改 schema 首选(需 migrationName + sql + confirm=true);listMigrations=查询已应用的 Migration 列表(可传 limit/offset 分页);migrationDetail=查看单条 Migration 详情(需 migrationVersion);rollbackMigration=回滚最近 N 条 Migration(需 lastN + confirm=true);repairMigration=修复 Migration 历史记录(需 migrationVersion + migrationName + repairStatus + repairReason)"),
161669
+ .describe("操作类型:execute=执行已确认的写入 SQL(DML/GRANT/RLS;schema DDL 默认拒绝,需 allowDdlViaExecute=true);dryRun=只分析 SQL 风险不执行;planMigration=预览迁移计划(需 migrationName + migrationVersion + sql);applyMigration=应用迁移,建表/改 schema 首选(需 migrationName + migrationVersion + sql + confirm=true);listMigrations=查询已应用的 Migration 列表(可传 limit/offset 分页);migrationDetail=查看单条 Migration 详情(需 migrationVersion);rollbackMigration=回滚最近 N 条 Migration(需 lastN + confirm=true);repairMigration=修复 Migration 历史记录(需 migrationVersion + migrationName + repairStatus + repairReason)"),
161543
161670
  sql: zod_1.z
161544
161671
  .string()
161545
161672
  .optional()
@@ -161577,7 +161704,7 @@ function registerPGDatabaseTools(server, providedDeps) {
161577
161704
  .string()
161578
161705
  .regex(/^\d{14}$/)
161579
161706
  .optional()
161580
- .describe("14 位时间戳 YYYYMMDDHHMMSS。detail/repair 必填;plan/apply 不传时自动生成。"),
161707
+ .describe("14 位时间戳 YYYYMMDDHHMMSS。plan/apply/detail/repair 必填;禁止由服务端静默生成,避免与本地 migrations/<version>_<name>.sql 分叉。"),
161581
161708
  rollbackSql: zod_1.z
161582
161709
  .string()
161583
161710
  .optional()
@@ -161619,6 +161746,10 @@ function registerPGDatabaseTools(server, providedDeps) {
161619
161746
  .string()
161620
161747
  .optional()
161621
161748
  .describe("repair 必填:修复原因。"),
161749
+ allowDdlViaExecute: zod_1.z
161750
+ .boolean()
161751
+ .optional()
161752
+ .describe("可选,默认 false。仅当需要故意绕过 migration history 时设为 true,才允许 schema DDL 走 execute;正常建表/改 schema 必须用 applyMigration。"),
161622
161753
  },
161623
161754
  annotations: {
161624
161755
  readOnlyHint: false,
@@ -161632,6 +161763,14 @@ function registerPGDatabaseTools(server, providedDeps) {
161632
161763
  const cbOpts = server.cloudBaseOptions;
161633
161764
  switch (args.action) {
161634
161765
  case "execute": {
161766
+ // Soft-block schema DDL before readiness probe so agents get migration guidance immediately.
161767
+ if (args.sql?.trim()) {
161768
+ const classification = classifySqlRisk(args.sql);
161769
+ if (isSchemaDdlRisk(classification.risk, args.sql) &&
161770
+ args.allowDdlViaExecute !== true) {
161771
+ return handleExecuteSql(args, context, deps);
161772
+ }
161773
+ }
161635
161774
  try {
161636
161775
  await ensurePgReadyOnce(cbOpts, deps);
161637
161776
  }
@@ -196778,7 +196917,7 @@ ${envIdSection}
196778
196917
  ## 环境信息
196779
196918
  - 操作系统: ${os_1.default.type()} ${os_1.default.release()}
196780
196919
  - Node.js版本: ${process.version}
196781
- - MCP 版本:${process.env.npm_package_version || "2.23.11" || 0}
196920
+ - MCP 版本:${process.env.npm_package_version || "2.24.0" || 0}
196782
196921
  - 系统架构: ${os_1.default.arch()}
196783
196922
  - 时间: ${new Date().toISOString()}
196784
196923
  - 请求ID: ${requestId}
@@ -196859,7 +196998,7 @@ function createWrappedHandler(name, handler, server) {
196859
196998
  requestId: (typeof error === 'object' && error && 'requestId' in error) ? error.requestId : '',
196860
196999
  ide: server.ide || process.env.INTEGRATION_IDE || ''
196861
197000
  });
196862
- const mcpVersion = true ? "2.23.11" : 0;
197001
+ const mcpVersion = true ? "2.24.0" : 0;
196863
197002
  const requestIdSuffix = requestId ? `\n🆔 RequestId: ${requestId}` : '';
196864
197003
  const enhancedErrorMessage = `${errorMessage}${requestIdSuffix}\n\n📦 CloudBase MCP v${mcpVersion}\n🔗 遇到问题?请复制以下链接到浏览器打开\n即可自动携带错误详情快速创建 GitHub Issue:\n${issueLink}`;
196865
197004
  // 创建新的错误对象,保持原有的错误类型但更新消息
@@ -212872,7 +213011,7 @@ function registerSetupTools(server) {
212872
213011
  server.registerTool("downloadTemplate", {
212873
213012
  title: "下载项目模板",
212874
213013
  description: `自动下载并部署CloudBase项目模板。
212875
- **Note**: Call this tool when the user requests to create a new project using a CloudBase template.\n\n支持的模板:\n- react: React + CloudBase 全栈应用模板\n- vue: Vue + CloudBase 全栈应用模板\n- miniprogram: 微信小程序 + 云开发模板 \n- uniapp: UniApp + CloudBase 跨端应用模板\n- rules: 只包含AI编辑器配置文件(包含Cursor、WindSurf、CodeBuddy等所有主流编辑器配置),适合在已有项目中补充AI编辑器配置\n\n支持的IDE类型:\n- all: 下载所有IDE配置\n- cursor: Cursor AI编辑器\n- 其他IDE类型见下方列表\n\n注意:如果未传入 ide 参数且无法从环境变量检测到 IDE,将提示错误并要求传入 ide 参数\n- windsurf: WindSurf AI编辑器\n- codebuddy: CodeBuddy AI编辑器\n- claude-code: Claude Code AI编辑器\n- cline: Cline AI编辑器\n- gemini-cli: Gemini CLI\n- opencode: OpenCode AI编辑器\n- qwen-code: 通义灵码\n- baidu-comate: 百度Comate\n- openai-codex-cli: OpenAI Codex CLI\n- augment-code: Augment Code\n- github-copilot: GitHub Copilot\n- roocode: RooCode AI编辑器\n- tongyi-lingma: 通义灵码\n- trae: Trae AI编辑器\n- qoder: Qoder AI编辑器\n- antigravity: Google Antigravity AI编辑器\n- vscode: Visual Studio Code\n- kiro: Kiro AI编辑器\n- aider: Aider AI编辑器\n\n特别说明:\n- rules 模板会自动包含当前 mcp 版本号信息(版本号:${ true ? "2.23.11" : 0}),便于后续维护和版本追踪\n- 下载 rules 模板时,如果项目中已存在 README.md 文件,系统会自动保护该文件不被覆盖(除非设置 overwrite=true)`,
213014
+ **Note**: Call this tool when the user requests to create a new project using a CloudBase template.\n\n支持的模板:\n- react: React + CloudBase 全栈应用模板\n- vue: Vue + CloudBase 全栈应用模板\n- miniprogram: 微信小程序 + 云开发模板 \n- uniapp: UniApp + CloudBase 跨端应用模板\n- rules: 只包含AI编辑器配置文件(包含Cursor、WindSurf、CodeBuddy等所有主流编辑器配置),适合在已有项目中补充AI编辑器配置\n\n支持的IDE类型:\n- all: 下载所有IDE配置\n- cursor: Cursor AI编辑器\n- 其他IDE类型见下方列表\n\n注意:如果未传入 ide 参数且无法从环境变量检测到 IDE,将提示错误并要求传入 ide 参数\n- windsurf: WindSurf AI编辑器\n- codebuddy: CodeBuddy AI编辑器\n- claude-code: Claude Code AI编辑器\n- cline: Cline AI编辑器\n- gemini-cli: Gemini CLI\n- opencode: OpenCode AI编辑器\n- qwen-code: 通义灵码\n- baidu-comate: 百度Comate\n- openai-codex-cli: OpenAI Codex CLI\n- augment-code: Augment Code\n- github-copilot: GitHub Copilot\n- roocode: RooCode AI编辑器\n- tongyi-lingma: 通义灵码\n- trae: Trae AI编辑器\n- qoder: Qoder AI编辑器\n- antigravity: Google Antigravity AI编辑器\n- vscode: Visual Studio Code\n- kiro: Kiro AI编辑器\n- aider: Aider AI编辑器\n\n特别说明:\n- rules 模板会自动包含当前 mcp 版本号信息(版本号:${ true ? "2.24.0" : 0}),便于后续维护和版本追踪\n- 下载 rules 模板时,如果项目中已存在 README.md 文件,系统会自动保护该文件不被覆盖(除非设置 overwrite=true)`,
212876
213015
  inputSchema: {
212877
213016
  template: zod_1.z
212878
213017
  .enum(["react", "vue", "miniprogram", "uniapp", "rules"])