Skip to content

Commit aec026e

Browse files
authored
Merge pull request #579 from TencentCloudBase/fix/skill-alias-resolution
fix(skills): guide alias→EnvId resolution & align Web SDK quick-start examples
2 parents c4be596 + fdf1985 commit aec026e

11 files changed

Lines changed: 66 additions & 24 deletions

File tree

config/codebuddy-plugin/rules/cloudbase_rules.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,3 +53,8 @@ updatedAt: 2026-03-27T00:00:00.000Z
5353

5454
**7. 环境检查**
5555
开始工作前调用 `envQuery` 检查云开发环境状态,确保已知晓当前环境 ID。
56+
57+
**8. 环境 ID 使用规则**
58+
- 在 SDK 初始化、`auth.set_env`、控制台链接和生成配置文件时,必须使用完整 `EnvId`
59+
- 如果对话里只有环境别名、昵称或其他简写,先用 `envQuery(action=list, alias=..., aliasExact=true)` 解析出完整 `EnvId`
60+
- 不要把别名式简写直接传给 `auth.set_env`、SDK 初始化、控制台链接或生成配置;如果别名不唯一或不存在,先向用户确认

config/source/editor-config/guides/cloudbase-rules.mdc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -375,6 +375,8 @@ For example, many interfaces require a confirm parameter, which is a boolean typ
375375

376376
### Environment ID Auto-Configuration Rules
377377
- When generating project configuration files (such as `cloudbaserc.json`, `project.config.json`, etc.), automatically use the environment ID queried by `envQuery`
378+
- If the conversation only provides an environment alias, nickname, or shorthand, first resolve it with `envQuery(action=list, alias=..., aliasExact=true)` and use the returned full `EnvId`
379+
- Do not pass alias-like short forms directly into `auth.set_env`, SDK init, console links, or generated config files; if the alias is ambiguous or missing, stop and ask the user to confirm
378380
- In code examples involving environment ID, automatically fill in current environment ID, no need for manual user replacement
379381
- In deployment and preview related operations, prioritize using already queried environment information
380382

config/source/guideline/cloudbase/SKILL.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,7 @@ When your IDE does not support native MCP, use **mcporter** as the CLI to config
133133

134134
- **When managing or deploying CloudBase, you MUST use MCP and MUST understand tool details first.** Before calling any CloudBase tool, run `npx mcporter describe cloudbase --all-parameters` (or `ToolSearch` in IDE) to inspect available tools and their parameters.
135135
- You **do not need to hard-code Secret ID / Secret Key / Env ID** in the config. CloudBase MCP supports device-code based login via the `auth` tool, so credentials can be obtained interactively instead of being stored in config.
136+
- When the environment identifier in the conversation is an alias, nickname, or other short form, **do not pass it directly** to `auth.set_env`, SDK init, console URLs, or generated config files. First resolve it to the canonical full `EnvId` with `envQuery(action=list, alias=..., aliasExact=true)`. If multiple environments match or no exact alias exists, stop and clarify with the user.
136137

137138
### Quick Start (mcporter CLI)
138139
- `npx mcporter list` — list configured servers
@@ -146,8 +147,10 @@ When your IDE does not support native MCP, use **mcporter** as the CLI to config
146147
`npx mcporter call cloudbase.auth action=status --output json`
147148
- Start device-flow login (future-friendly device-code login; no keys in config):
148149
`npx mcporter call cloudbase.auth action=start_auth authMode=device --output json`
150+
- If the user gives an environment alias / nickname / short form instead of the full `EnvId`, resolve it first:
151+
`npx mcporter call cloudbase.envQuery action=list alias=demo aliasExact=true fields='["EnvId","Alias","Status","IsDefault"]' --output json`
149152
- Bind environment after login (envId from CloudBase console):
150-
`npx mcporter call cloudbase.auth action=set_env envId=env-xxx --output json`
153+
`npx mcporter call cloudbase.auth action=set_env envId=<full-env-id> --output json`
151154
- Query app-side login config:
152155
`npx mcporter call cloudbase.queryAppAuth action=getLoginConfig --output json`
153156
- Patch app-side login strategy:

config/source/skills/SKILL.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,7 @@ alwaysApply: true
3939

4040
- If the same path fails 2-3 times, stop retrying and reroute. Check platform skill, auth domain, runtime, and permission model before editing more code.
4141
- Always specify `EnvId` explicitly in code, configuration, and command examples when initializing CloudBase clients or manager operations. Do not rely on the current CLI-selected environment or implicit defaults.
42-
- When saving MCP or tool results to a local file with a generic file-writing tool, pass text, not raw objects. For JSON output files, serialize first with `JSON.stringify(result, null, 2)` and write that string as the file content.
43-
- If the file-writing tool reports that a field such as `content` expected a string but received an object, do not retry with the same raw object. Serialize the object first, then retry once with the serialized text, and make sure the retried call actually passes the serialized string rather than the original object.
42+
- If the conversation only provides an environment alias, nickname, or other shorthand, resolve it with `envQuery(action=list, alias=..., aliasExact=true)` and use the returned canonical full `EnvId` before calling `auth.set_env`, generating console links, or writing config/code. If the alias is ambiguous or missing, stop and ask the user to confirm.
4443

4544
### Do NOT use this as
4645

config/source/skills/auth-tool/SKILL.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ Recommended MCP request:
9494
```json
9595
{
9696
"success": true,
97-
"envId": "env-xxx",
97+
"envId": "your-full-env-id",
9898
"loginMethods": {
9999
"usernamePassword": true,
100100
"email": true,
@@ -135,6 +135,7 @@ Parameter mapping for downstream Web auth code:
135135
- `UserNameLogin` also enables the broader password-login surface exposed by `auth.signInWithPassword({ username|email|phone, password })`
136136
- `SmsVerificationConfig.Type = "apis"` requires both `Name` and `Method`
137137
- `EnvId` is always the CloudBase environment ID, not the publishable key
138+
- If the conversation only contains an environment alias, nickname, or other shorthand, resolve it to the canonical full `EnvId` first before generating auth config, SDK init examples, or console links
138139

139140
Internal behavior of `manageAppAuth(action="patchLoginStrategy")`:
140141

config/source/skills/auth-web/SKILL.md

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,8 @@ Keep local `references/...` paths for files that ship with the current skill dir
5959

6060
**Use Case**: Web frontend projects using `@cloudbase/js-sdk@2.24.0+` for user authentication
6161
**Key Benefits**: Supabase-like Auth API shape, supports phone, email, anonymous, username/password, and third-party login methods
62-
**Official `@cloudbase/js-sdk` CDN**: `https://static.cloudbase.net/cloudbase-js-sdk/latest/cloudbase.full.js`
6362

64-
Use the same CDN address as `web-development`. Prefer npm installation in modern bundler projects, and use the CDN form for static HTML, no-build demos, or low-friction examples.
63+
Use npm installation for modern Web projects. In React, Vue, Vite, and other bundler-based apps, install and import `@cloudbase/js-sdk` from the project dependencies instead of using a CDN script.
6564

6665
## Prerequisites
6766

@@ -71,6 +70,7 @@ Use the same CDN address as `web-development`. Prefer npm installation in modern
7170
### Parameter map
7271

7372
- For username-style identifiers, the required precondition is `loginMethods.usernamePassword === true` from `queryAppAuth(action="getLoginConfig")`. If it is false, enable it with `manageAppAuth(action="patchLoginStrategy", patch={ usernamePassword: true })` before wiring frontend auth code.
73+
- If the conversation only provides an environment alias, nickname, or other shorthand, resolve it with `envQuery(action="list", alias=..., aliasExact=true)` first and use the returned canonical full `EnvId` for SDK init, console links, and generated config. Do not pass alias-like short forms directly into `cloudbase.init({ env })`.
7474
- Treat CloudBase Web Auth as **Supabase-like**, not “every `supabase-js` auth example is valid unchanged”
7575
- When `queryAppAuth` / `manageAppAuth` returns `sdkStyle: "supabase-like"` and `sdkHints`, follow those method and parameter hints first
7676
- `auth.signInWithOtp({ phone })` and `auth.signUp({ phone })` use the phone number in a `phone` field, not `phone_number`
@@ -85,10 +85,11 @@ Use the same CDN address as `web-development`. Prefer npm installation in modern
8585
## Quick Start
8686

8787
```js
88+
// npm install @cloudbase/js-sdk
8889
import cloudbase from '@cloudbase/js-sdk'
8990

9091
const app = cloudbase.init({
91-
env: `env`, // CloudBase environment ID
92+
env: 'your-full-env-id', // Canonical full CloudBase environment ID resolved from envQuery or the console, not an alias or shorthand
9293
region: `region`, // CloudBase environment Region, default 'ap-shanghai'
9394
accessKey: 'publishable key', // required, get from auth-tool-cloudbase
9495
auth: { detectSessionInUrl: true }, // required
@@ -105,8 +106,9 @@ If the current task has not retrieved a real Publishable Key, omit `accessKey` i
105106

106107
**1. Phone OTP (Recommended)**
107108
- Automatically use `auth-tool-cloudbase` to turn on `SMS Login` through `manageAppAuth`
109+
- For phone registration, send the phone number to `auth.signUp({ phone, ... })` first, then call the returned `verifyOtp({ token })`. Do not swap the order.
108110
```js
109-
const { data, error } = await auth.signInWithOtp({ phone: '13800138000' })
111+
const { data, error } = await auth.signUp({ phone: '13800138000' })
110112
const { data: loginData, error: loginError } = await data.verifyOtp({ token:'123456' })
111113
```
112114

@@ -145,7 +147,7 @@ const emailVerifyResult = await emailSignUp.data.verifyOtp({ token: '123456' })
145147
// Phone Otp
146148
// Use only when the task explicitly requires phone numbers.
147149
// Phone Otp
148-
const phoneSignUp = await auth.signUp({ phone: '13800138000', nickname: 'User' })
150+
const phoneSignUp = await auth.signUp({ phone: '13800138000', password: 'pass123', nickname: 'User' })
149151
const phoneVerifyResult = await phoneSignUp.data.verifyOtp({ token: '123456' })
150152
```
151153

@@ -178,25 +180,21 @@ Do not use email OTP or email-only helpers for these flows unless the task expli
178180
const handleSendCode = async () => {
179181
try {
180182
const { data, error } = await auth.signUp({
181-
email,
182-
name: username || email.split('@')[0],
183+
phone,
184+
password: password || undefined,
183185
})
184186
if (error) throw error
185-
setSignUpData(data)
187+
verifyOtpRef.current = data.verifyOtp
186188
} catch (error) {
187189
console.error('Failed to send sign-up code', error)
188190
}
189191
}
190192

191193
const handleRegister = async () => {
192194
try {
193-
if (!signUpData?.verifyOtp) throw new Error('Please send the code first')
195+
if (!verifyOtpRef.current) throw new Error('Please send the code first')
194196

195-
const { error } = await signUpData.verifyOtp({
196-
email,
197-
token: code,
198-
type: 'signup',
199-
})
197+
const { error } = await verifyOtpRef.current({ token: code })
200198
if (error) throw error
201199
} catch (error) {
202200
console.error('Failed to complete sign-up', error)

config/source/skills/cloudbase-platform/SKILL.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,8 +112,10 @@ Use this skill for **CloudBase platform knowledge** when you need to:
112112
1. **SDK Initialization**:
113113
- CloudBase SDK initialization requires environment ID
114114
- Can query environment ID via `envQuery` tool
115+
- If the user only provides an environment alias, nickname, or other short form, resolve it with `envQuery(action="list", alias=..., aliasExact=true)` first and use the returned full `EnvId`
116+
- Do not pass alias-like short forms directly into SDK init, `auth.set_env`, console URLs, or generated config files
115117
- For Web, always initialize synchronously:
116-
- `import cloudbase from "@cloudbase/js-sdk"; const app = cloudbase.init({ env: "xxxx-yyy" });`
118+
- `import cloudbase from "@cloudbase/js-sdk"; const app = cloudbase.init({ env: "your-full-env-id" });`
117119
- Do **not** use dynamic imports like `import("@cloudbase/js-sdk")` or async wrappers such as `initCloudBase()` with internal `initPromise`
118120
- Then proceed with login, for example using anonymous login
119121

@@ -305,6 +307,7 @@ The CloudBase console is updated frequently. If a live, logged-in console shows
305307

306308
- **Base URL Pattern**: `https://tcb.cloud.tencent.com/dev?envId=${envId}#/{path}`
307309
- **Replace Variables**: Always replace `${envId}` with the actual environment ID queried via `envQuery` tool
310+
- **Alias Handling**: If the conversation only contains an alias or shorthand, first resolve it with `envQuery(action="list", alias=..., aliasExact=true)` and use the returned `EnvId`; if the alias is ambiguous or missing, ask the user to confirm before generating links
308311
- **Resource-Specific URLs**: For specific resources (collections, functions, models), replace resource name variables with actual values
309312
- **Usage**: After creating/deploying resources, provide these console links to users for management operations
310313

config/source/skills/web-development/SKILL.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ Use this section only when the Web project needs CloudBase platform features.
117117
- Use the CDN only for static HTML pages, quick demos, embedded snippets, or README examples
118118
- Only use documented CloudBase Web SDK APIs; do not invent methods or options
119119
- Keep a shared `app` or `auth` instance instead of re-initializing on every call
120+
- If the user only provides an environment alias, nickname, or other shorthand, resolve it to the canonical full `EnvId` before writing SDK init code, console links, or config files. Do not pass alias-like short forms directly into `cloudbase.init({ env })`.
120121

121122
### Authentication boundary
122123

@@ -134,10 +135,11 @@ Use this section only when the Web project needs CloudBase platform features.
134135
### CloudBase quick start
135136

136137
```js
138+
// npm install @cloudbase/js-sdk
137139
import cloudbase from "@cloudbase/js-sdk";
138140

139141
const app = cloudbase.init({
140-
env: "xxxx-yyy",
142+
env: "your-full-env-id", // Canonical full CloudBase environment ID resolved from envQuery or the console
141143
});
142144

143145
const auth = app.auth();

scripts/prompts/cloudbase-integrated.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ When user's application fits the above scenarios, suggest confirming the tech st
1414
### 1. Environment Check (MANDATORY - First Step)
1515
- **Always call `envQuery` tool first** with `action=info` to get environment ID
1616
- Auto-use queried envId in code/config, no manual input needed
17+
- If the conversation only gives an environment alias, nickname, or other shorthand, resolve it with `envQuery(action=list, alias=..., aliasExact=true)` and use the returned canonical full `EnvId`
18+
- Do not pass alias-like short forms directly into SDK init, `auth.set_env`, console URLs, or generated config files. If the alias is ambiguous or missing, stop and clarify with the user
1719

1820
### 2. Template Download (MANDATORY for New Projects)
1921
- **MUST call `downloadTemplate` FIRST** when starting new projects - Do NOT manually create files

scripts/skills-repo-template/cloudbase-guidelines/SKILL.md

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -91,11 +91,13 @@ mcpServers:
9191
9292
In environments that do not support MCP (e.g. openclaw) or when users are unsure how to configure MCP, use **mcporter** as a CLI to call CloudBase MCP tools.
9393
94-
**When managing or deploying CloudBase, you MUST use MCP and MUST understand tool details first.** Before calling any CloudBase tool, run `npx mcporter describe cloudbase` (or equivalent in your IDE) to inspect the server config and available tools.
94+
**When managing or deploying CloudBase, you MUST use MCP and MUST understand tool details first.** Before calling any CloudBase tool, run `npx mcporter describe cloudbase --all-parameters` (or equivalent in your IDE) to inspect available tools and their full parameters.
9595

9696
You **do not need to hard-code Secret ID / Secret Key / Env ID** in the config.
9797
CloudBase MCP will support device-code based login via the `auth` tool, so credentials can be obtained interactively instead of being stored in config.
9898

99+
When the environment identifier in the conversation is an alias, nickname, or other short form, **do not pass it directly** to `auth.set_env`, SDK init, console URLs, or generated config files. First resolve it to the canonical full `EnvId` with `envQuery(action=list, alias=..., aliasExact=true)`. If multiple environments match or no exact alias exists, stop and clarify with the user.
100+
99101
**Add CloudBase MCP server in `config/mcporter.json` (recommended):**
100102

101103
If `config/mcporter.json` already contains other MCP servers, keep them and only add the `cloudbase` entry under `mcpServers`.
@@ -115,7 +117,7 @@ If `config/mcporter.json` already contains other MCP servers, keep them and only
115117

116118
**Quick start:**
117119
- `npx mcporter list` — list configured servers
118-
- **Required:** `npx mcporter describe cloudbase` — inspect CloudBase server config and available tools (must run before managing/deploying CloudBase)
120+
- **Required:** `npx mcporter describe cloudbase --all-parameters` — inspect CloudBase server config and get full tool schemas with all parameters (must run before managing/deploying CloudBase)
119121
- `npx mcporter list cloudbase --schema` — get full JSON schema for all CloudBase tools
120122
- `npx mcporter call cloudbase.help --output json` — discover available CloudBase tools and their schemas
121123
- `npx mcporter call cloudbase.<tool> key=value` — call a CloudBase tool
@@ -125,8 +127,10 @@ If `config/mcporter.json` already contains other MCP servers, keep them and only
125127
`npx mcporter call cloudbase.auth action=status --output json`
126128
- Start device-flow login (future-friendly device-code login; no keys in config):
127129
`npx mcporter call cloudbase.auth action=start_auth authMode=device --output json`
130+
- If the user gives an environment alias / nickname / short form instead of the full `EnvId`, resolve it first:
131+
`npx mcporter call cloudbase.envQuery action=list alias=demo aliasExact=true fields='["EnvId","Alias","Status","IsDefault"]' --output json`
128132
- Bind environment after login (envId from CloudBase console):
129-
`npx mcporter call cloudbase.auth action=set_env envId=env-xxx --output json`
133+
`npx mcporter call cloudbase.auth action=set_env envId=<full-env-id> --output json`
130134

131135
---
132136

@@ -174,7 +178,7 @@ If the platform supports long-term memory, persist these scenarios so the agent
174178
Prefer long-term memory when available: write the scenarios and working rules there so the agent always applies them. When configuring the workspace (e.g. `AGENTS.md`) or long-term memory, add reminders like:
175179

176180
- **CloudBase skills** → Run `npx skills add tencentcloudbase/cloudbase-skills` to install; use `cloudbase` and log in to CloudBase (MCP auth, device-code) for full-stack development.
177-
- **CloudBase = MCP, understand tools first** → When managing or deploying CloudBase, you MUST use MCP and MUST understand tool details first. Before calling any CloudBase tool, run `npx mcporter describe cloudbase` (or equivalent in your IDE) to inspect the server config and available tools.
181+
- **CloudBase = MCP, understand tools first** → When managing or deploying CloudBase, you MUST use MCP and MUST understand tool details first. Before calling any CloudBase tool, run `npx mcporter describe cloudbase --all-parameters` (or equivalent in your IDE) to inspect available tools and their full parameters.
178182
- **mcporter call format** → `npx mcporter call cloudbase.<tool> key=value`, e.g. `npx mcporter call cloudbase.auth action=status --output json`.
179183
- **CloudBase development and deployment** → Use MCP to automate (environment, functions, database, hosting, etc.).
180184
- **Development norms** → Read the relevant CloudBase skills (e.g. `cloudbase`, `web-development`, `miniprogram-development`, `cloud-functions`) before writing code.

0 commit comments

Comments
 (0)