Skip to content

Commit 5e28335

Browse files
committed
Merge branch main of github.com:modelstudioai/cli into feat/multi-channel-install
2 parents 434aac5 + afa43a4 commit 5e28335

110 files changed

Lines changed: 7748 additions & 649 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

AGENTS.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ Skill / 命令手册随 `skills/bailian-cli/` 经 `npx skills add modelstudioai/
6868
| 鉴权扩展 | 加 OAuth / SSO / 换 token 来源 | [docs/agents/auth-change.md](docs/agents/auth-change.md) |
6969
| 配置项扩展 | 新 env var 或 `~/.bailian/config.json` 字段 | [docs/agents/config-add.md](docs/agents/config-add.md) |
7070
| Profile / 激活 | 改命名 Profile、预设或 `active_config` | [docs/agents/config-profile-change.md](docs/agents/config-profile-change.md) |
71+
| 安装文档 | 改安装、鉴权、验证流程或线上 install 页面 | [docs/agents/install-doc-change.md](docs/agents/install-doc-change.md) |
7172
| 发布 | channel / stable 发 npm + 二进制(Bun / GitHub Release / OSS);安装脚本仓外维护 | [docs/agents/publish.md](docs/agents/publish.md) |
7273
| Change Log | 发版说明 / 历史版本说明 | [docs/agents/changelog-write.md](docs/agents/changelog-write.md) |
7374
| 工具链调整 | lint 规则 / 构建配置 / 依赖升级 | [docs/agents/lint-toolchain.md](docs/agents/lint-toolchain.md) |

CHANGELOG.md

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,62 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and
66

77
[中文版](CHANGELOG.zh.md) · [README](README.md) · [Contributing](CONTRIBUTING.md)
88

9+
## [1.12.0] - 2026-07-28
10+
11+
### Added
12+
13+
- **`bl config agent --key` / `--region`** — run commands generated by the Model Studio web console as-is: `--key` accepts the console's encoded API key and decodes it locally (use instead of `--api-key`), and `--region` derives the Token Plan endpoint from a region name (use instead of `--base-url`).
14+
- **`bl config agent --context-window`** — set the context window written to the OpenClaw configuration (default 256000).
15+
- **`bl config agent --wire-api`** — choose the wire protocol written to the Codex configuration; `chat` is kept for legacy Codex 0.80.0 and earlier (a warning is shown).
16+
17+
### Changed
18+
19+
- `bl config agent` for Codex now writes `wire_api = "responses"` by default, matching current Codex releases that no longer accept `chat`.
20+
- `bl config agent` for Qwen Code now writes the `DASHSCOPE_API_KEY` environment variable instead of `BAILIAN_CLI_API_KEY`.
21+
22+
### Fixed
23+
24+
- `bl config agent` configurations now match each agent's official format: Claude Code honors `CLAUDE_CONFIG_DIR` and removes a stale `ANTHROPIC_API_KEY`; Qwen Code uses the v3 settings schema and writes credentials so a system-level `OPENAI_API_KEY` no longer takes precedence; OpenCode accepts JSONC config files (comments and trailing commas); OpenClaw registers the primary model in the model allowlist with complete cost metadata; Hermes uses the official flat `model.*` layout; Codex writes the official `env_key` with an `auth.json` fallback.
25+
- `bl config agent` now preserves existing user configuration when writing: it merges instead of overwriting, avoids duplicate provider entries, and keeps custom display names.
26+
27+
## [1.11.2] - 2026-07-28
28+
29+
### Changed
30+
31+
- MCP tools and WebSearch now provide activation guidance and direct marketplace links when Bailian reports that the corresponding service is not activated. WebSearch also guides users with legacy SSE connections to reactivate the service using Streamable HTTP.
32+
33+
### Fixed
34+
35+
- Fixed text chat and API Key validation compatibility failures caused by sending unsupported `enable_thinking` values. Text chat now sends the parameter only when thinking is explicitly enabled, while validation uses a compatible model without sending it.
36+
37+
## [1.11.1] - 2026-07-28
38+
39+
### Added
40+
41+
- `bl image edit` now supports `--function` for specifying edit operations with Wanx image-edit models such as `wanx2.1-imageedit`.
42+
43+
### Fixed
44+
45+
- Fixed image generation and editing failures and incorrect size parameters for some image models, improving compatibility with Qwen-Image, Wan/Wanx, Z-Image, and dated `wanx-v1` variants.
46+
47+
## [1.11.0] - 2026-07-28
48+
49+
### Added
50+
51+
- **`bl managed-agent`** — declaratively manage Managed Agent infrastructure through a unified CLI. The Bailian provider connects to AgentStudio, with Claude, Qoder, and Ark providers also supported:
52+
- `init` / `validate` / `plan` / `apply` / `destroy` — initialize and validate `agents.yaml`, preview and apply resource changes, and destroy managed resources.
53+
- `state list` / `state show` / `state rm` / `state import` — inspect and manage local resource state, including adopting an existing remote resource or removing it from local state without destroying it remotely.
54+
- `session create` / `session list` / `session get` / `session delete` / `session run` / `session send` / `session events` — manage the full session lifecycle with streaming responses and structured `--output json` output.
55+
- `skill-list` — browse custom and official skills; use `--source all` to return both catalogs in one call.
56+
57+
### Changed
58+
59+
- Model Base URLs are now normalized to the URL origin; paths, query parameters, and fragments supplied in the Base URL are no longer included when constructing API request paths.
60+
61+
### Fixed
62+
63+
- The installation guide no longer recommends the removed `--non-interactive` flag and now documents explicit required arguments, `--output json`, and `NO_COLOR=1` for non-interactive environments.
64+
965
## [1.10.1] - 2026-07-22
1066

1167
### Changed

CHANGELOG.zh.md

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,62 @@
66

77
[English](CHANGELOG.md) · [README](README.zh.md) · [参与贡献](CONTRIBUTING.zh.md)
88

9+
## [1.12.0] - 2026-07-28
10+
11+
### 新增
12+
13+
- **`bl config agent --key` / `--region`** —— 百炼控制台生成的命令可直接运行:`--key` 接收控制台编码后的 API Key 并在本地解码(与 `--api-key` 二选一);`--region` 根据地域名自动派生 Token Plan 接入地址(与 `--base-url` 二选一)。
14+
- **`bl config agent --context-window`** —— 设置写入 OpenClaw 配置的上下文窗口大小(默认 256000)。
15+
- **`bl config agent --wire-api`** —— 选择写入 Codex 配置的通信协议;`chat` 仅保留给 Codex 0.80.0 及更早版本(会显示警告)。
16+
17+
### 变更
18+
19+
- `bl config agent` 配置 Codex 时默认写入 `wire_api = "responses"`,以适配已不再支持 `chat` 的新版 Codex。
20+
- `bl config agent` 配置 Qwen Code 时改用 `DASHSCOPE_API_KEY` 环境变量,不再使用 `BAILIAN_CLI_API_KEY`
21+
22+
### 修复
23+
24+
- `bl config agent` 写入的配置现已与各 Agent 官方格式对齐:Claude Code 尊重 `CLAUDE_CONFIG_DIR` 并清理残留的 `ANTHROPIC_API_KEY`;Qwen Code 采用 v3 配置 schema 并正确写入凭证,避免被系统级 `OPENAI_API_KEY` 干扰;OpenCode 支持带注释和尾部逗号的 JSONC 配置文件;OpenClaw 会将主模型注册进模型白名单并补齐计费元数据;Hermes 改用官方扁平 `model.*` 结构;Codex 写入官方 `env_key` 并支持 `auth.json` 兜底。
25+
- `bl config agent` 写入配置时现会保留用户已有配置:合并而非覆盖,避免重复添加 provider 条目,并保留用户自定义的显示名。
26+
27+
## [1.11.2] - 2026-07-28
28+
29+
### 变更
30+
31+
- MCP 工具或 WebSearch 因对应服务未开通而不可用时,CLI 现在会提供开通指引和市场直达链接;对于使用旧版 SSE 连接的 WebSearch,还会提示重新开通以切换至 Streamable HTTP。
32+
33+
### 修复
34+
35+
- 修复文本对话与 API Key 登录校验因传递不受支持的 `enable_thinking` 参数值而产生的兼容性错误。文本对话仅在用户明确开启思考模式时传递该参数,登录校验则改用兼容模型且不再传递该参数。
36+
37+
## [1.11.1] - 2026-07-28
38+
39+
### 新增
40+
41+
- `bl image edit` 新增 `--function` 参数,支持为万相图片编辑模型(如 `wanx2.1-imageedit`)指定编辑功能。
42+
43+
### 修复
44+
45+
- 修复部分图片模型在图片生成与编辑时的调用失败和尺寸参数错误,并完善 Qwen-Image、Wan/Wanx、Z-Image 系列及 `wanx-v1` 日期版本的兼容性。
46+
47+
## [1.11.0] - 2026-07-28
48+
49+
### 新增
50+
51+
- **`bl managed-agent`** —— 通过统一 CLI 声明式管理 Managed Agent 基础设施;百炼 Provider 对接 AgentStudio,并支持 Claude、Qoder 和 Ark:
52+
- `init` / `validate` / `plan` / `apply` / `destroy` —— 基于 `agents.yaml` 初始化、校验、预览和执行资源变更,以及销毁已托管资源。
53+
- `state list` / `state show` / `state rm` / `state import` —— 查看和管理本地资源状态,包括纳管已有远端资源或仅解除本地跟踪。
54+
- `session create` / `session list` / `session get` / `session delete` / `session run` / `session send` / `session events` —— 完整的会话生命周期操作,支持流式响应和结构化的 `--output json` 输出。
55+
- `skill-list` —— 浏览自定义与官方 Skill;使用 `--source all` 可一次返回两个来源。
56+
57+
### 变更
58+
59+
- 模型 Base URL 现在统一仅保留 URL Origin;传入的路径、查询参数和 Fragment 不再参与后续 API 请求路径拼接。
60+
61+
### 修复
62+
63+
- 安装指南不再推荐已移除的 `--non-interactive`,改为说明显式传入必填参数,并使用 `--output json``NO_COLOR=1` 适配非交互环境。
64+
965
## [1.10.1] - 2026-07-22
1066

1167
### 变更

INSTALL.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ which bl # Windows: where.exe bl
3535

3636
> CDN / GitHub Release 未就绪或下载失败时,回退到下方 npm 安装。
3737
38-
## 2. 备选:npm 安装(需要 Node.js >= 18.17)
38+
## 2. 备选:npm 安装(要求 **18.17.0**
3939

4040
1. `node -v` 确认版本。
4141
2. `npm -v` 确认可用(**仅允许 npm** 全局安装,不要用 pnpm/yarn)。
@@ -69,7 +69,9 @@ npx skills add modelstudioai/cli --all -g
6969
### Agent 安全约束
7070

7171
- **禁止**把真实 API Key 写入仓库、日志、Skill、聊天记录的可公开部分。
72-
- CI / 非交互环境:使用 `bl ... --non-interactive`;通过密钥管理或环境变量注入。
72+
- CI / 非交互环境:显式传入必填参数并使用 `--output json` 获取机器可读结果;如需纯文本输出,设置 `NO_COLOR=1`。通过密钥管理或环境变量注入,勿在脚本中硬编码 Key。
73+
74+
---
7375

7476
## 4. 配置验证
7577

@@ -84,4 +86,4 @@ bl auth status --output json
8486
| `bl: command not found` | bin 不在 PATH | 检查 `~/.local/bin``npm prefix -g` |
8587
| curl 安装 404 | GitHub Release 资产未上传 | 改用 `npm install -g bailian-cli` |
8688
| `plugin` 需要 npm | 二进制安装无本机 npm | 安装 Node,或改用 npm 版 CLI |
87-
| 安装报错 engines | Node 版本过低(仅 npm 路径) | 升级到 ≥ 18.17 |
89+
| 安装报错 engines | Node 版本过低(仅 npm 路径) | 升级到 ≥ 18.17.0 |

docs/agents/auth-change.md

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ defineCommand({ auth }) → runtime/authStage → ctx.client → command.run(ctx
4343
解析分工:
4444

4545
- `resolveApiKey()``auth: "apiKey"` 命令;优先级 `--api-key` > `DASHSCOPE_API_KEY` > config `api_key`
46-
- `resolveModelBaseUrl()` — model base URL;优先级 `--base-url` > `DASHSCOPE_BASE_URL` > config `base_url` > `REGIONS.cn`返回前统一去除 query、fragment、尾斜杠和已知 SDK/API Base 后缀,同时保留自定义网关前缀
46+
- `resolveModelBaseUrl()` — model base URL;优先级 `--base-url` > `DASHSCOPE_BASE_URL` > config `base_url` > `REGIONS.cn`返回前统一归一化为 URL origin(仅保留协议、host 和显式端口,去除 path、query、fragment)
4747
- `--config` 只选择 config 文件 block,不提升该 block 的字段优先级;内置套餐 Profile(当前为 `token-plan`)的预设仅在登录时物化写入,运行时继续走统一的 flag > env > selected config file > 默认值
4848
- 显式 `auth login --config <name>` 在凭证验证并落盘成功后自动激活目标 Profile;未传
4949
`--config` 时继续写当前激活项,失败和 dry-run 不切换
@@ -53,6 +53,23 @@ defineCommand({ auth }) → runtime/authStage → ctx.client → command.run(ctx
5353

5454
命令不要直接解析 token、env 或 config。业务请求统一走 `ctx.client`;登录/配置命令通过 `ctx.authStore` / `ctx.configStore` 的窄接口操作落盘。
5555

56+
### 例外:agent 命令的分层鉴权与 SDK 凭证内存注入
57+
58+
`bl managed-agent *` 按调用链分两层:
59+
60+
- **离线命令**`init``validate``state list/show/rm`:`auth: "none"`,只读写本地文件,无需登录;引擎侧传 `credentials: "none"` 跳过凭证断言
61+
- **联网命令**`plan``apply``destroy``state import``skill-list`、全部 `session *`:统一声明 `auth: "apiKey"` 硬门禁 —— 无论目标 provider 是谁,authStage 都经 `resolveApiKey(sources)` 解析 bailian 凭证(flag > env > active profile config),缺失报统一 AUTH;引擎层 `assertProviderCredentials` 再对 agents.yaml 里**全部已声明 provider** 的空 key 拦截并给 provider 专属 hint。例外:`plan --no-refresh` / `plan --dry-run``credentials: "none"` 并强制 `refresh: false`(不联网、不回写 state,不查 provider key),其中 `--dry-run` 连登录也不要求(authStage 的 dry-run 豁免),`--no-refresh` 仍需登录。
62+
63+
凭证不以真实值写入 `process.env`,而是经 `packages/commands/src/commands/managed-agent/_engine/`**内存注入管道**(`resolveAgentProjectConfig`)注入 SDK,管道五步:
64+
65+
1. `prepareProviderEnv()` — 先 `bootstrapRuntimeCredentialsSync()`(SDK 把 `.env` / `~/.agents/config.json` 灌进 env,服务 claude/ark/qoder 等非 bailian provider),再把全部凭证类 env(`CREDENTIAL_ENV_KEYS`,含别名)中仍为 undefined 的占位为 `""`,使 agents.yaml 插值不因缺变量抛错
66+
2. `resolveProjectConfig` — 插值发生:bailian 插值拿到占位空串,claude/ark 拿到真实 env 值;随后 `normalizeInterpolatedProviderBlocks()` 把插值为空导致的 YAML `null` 归一为 `""`(避免离线命令下空 key 在 SDK zod 层报 "received null")
67+
3. `injectProviderCredentials()` — 用 `ctx.client.exportApiCredential()`(lint 限定 `managed-agent/_engine/**` 可用)覆写内存 config 对象的 bailian 块:有凭证时 `api_key` 无条件覆写;`base_url`(拼 `/api/v1/agentstudio` 后缀,无凭证时用 client 默认域名补齐以满足 schema)/`workspace_id`(取 `settings.workspaceId`)仅在引用且为空时填充
68+
4. `scrubCredentialEnv()` — 从 `process.env` 删除全部凭证变量(真实凭证此后只存于 config 对象 → provider adapter 实例内存,不驻留 env / 不被子进程继承)
69+
5. `assertProviderCredentials(providers)` — 任一已声明 provider 的 `api_key` 为空 → CLI 权威 `AUTH` 错误 + provider 专属 hint(取代 SDK 原始插值/zod 报错);离线命令传 `credentials: "none"` 整体跳过
70+
71+
`bl auth login` 仅管理 bailian(DashScope)凭证;claude/ark/qoder 的 key 从 env(shell / `.env` / `~/.agents/config.json`)经插值进入 config 对象,同样被清扫。禁止命令层直接 `readConfigFile` 裸读凭证;bailian 字段以 CLI 鉴权链为唯一信源。
72+
5673
## 必查清单
5774

5875
### A. core 层(类型 + 解析)

docs/agents/install-doc-change.md

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
# 安装文档变更
2+
3+
## 触发条件
4+
5+
- 修改根目录 `INSTALL.md` 的安装、鉴权或验证流程
6+
- 修改发布包 Node.js 要求、全局 flag 或安装文档引用的命令
7+
- 同步或发布 `https://bailian.aliyun.com/cli/install.md`
8+
9+
## 必查清单
10+
11+
### A. CLI 契约
12+
13+
- [ ] `INSTALL.md` 中的 `bl` 命令路径存在于 `packages/cli/src/commands.ts`
14+
- [ ] 示例 flag 属于 `GLOBAL_FLAGS`、命令鉴权域 flag 或命令自身 `flags`
15+
- [ ] Node.js 用户安装要求与 `packages/cli/package.json``engines.node` 一致,不使用根 `package.json` 的开发环境要求
16+
- [ ] 鉴权流程与 `packages/commands/src/commands/auth/` 的实际校验、保存和 Profile 激活行为一致
17+
18+
### B. 静态副本
19+
20+
- [ ]`INSTALL.md` 同步到 `bailian-cli-static-resources/public/install.txt`
21+
- [ ] 使用 `cmp -s` 确认两份文档逐字节一致
22+
- [ ] 静态资源仓库单独创建分支、提交和发布,不把跨仓库改动遗漏在 CLI PR 之外
23+
24+
### C. 线上验证
25+
26+
- [ ] 发布后读取 `https://bailian.aliyun.com/cli/install.md`,确认内容来自最新静态副本
27+
- [ ] 带随机 query 参数复查,区分 CDN 缓存与源站未更新
28+
- [ ] 验证线上文档中的安装命令、Node.js 要求和配置验证段落,不只检查页面可访问
29+
30+
## 完成后自查
31+
32+
```sh
33+
pnpm -F bailian-cli test -- tests/install-doc.test.ts
34+
cmp -s INSTALL.md ../bailian-cli-static-resources/public/install.txt
35+
curl -L -s "https://bailian.aliyun.com/cli/install.md?verify=$(date +%s)"
36+
```
37+
38+
## 常见漏点
39+
40+
- `--non-interactive` 已从 CLI 移除,但旧安装文档和静态副本仍把它当作全局 flag
41+
-`package.json` 是开发工具链 Node.js 要求;用户安装要求以 `packages/cli/package.json` 为准
42+
- 静态仓库文件名是 `public/install.txt`,线上稳定地址是 `/cli/install.md`;只更新其中一侧不会自动证明发布成功

docs/agents/url-change.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ runtime/src/urls.ts ← 用户面控制台 URL(cn-only)
2020
BAILIAN_CONSOLE BAILIAN_CONSOLE_ROOT/cn-beijing
2121
API_KEY_PAGE BAILIAN_CONSOLE/?tab=app#/api-key
2222
TOKEN_PLAN_PAGE BAILIAN_CONSOLE_ROOT/cn-beijing?tab=plan#/efm/subscription/overview
23+
MCP_WEBSEARCH_PAGE mcpMarketplaceDetailPage("WebSearch")
24+
mcpMarketplaceDetailPage BAILIAN_CONSOLE?tab=mcp#/mcp-market/detail/<serverCode>
2325
2426
core/files/upload.ts ← 文件上传 endpoint(cn-pinned)
2527
UPLOAD_API ${REGIONS.cn}/api/v1/uploads

packages/cli/.gitignore

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,7 @@ node_modules
22
dist
33
*.log
44
.DS_Store
5-
outputs/
5+
outputs/
6+
# agents
7+
agents.state.json
8+
.env

packages/cli/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "bailian-cli",
3-
"version": "1.10.1",
3+
"version": "1.12.0",
44
"description": "CLI for Aliyun Model Studio (DashScope) AI Platform.",
55
"keywords": [
66
"agent",

packages/cli/src/commands.ts

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,23 @@ import {
8989
pluginLink,
9090
pluginList,
9191
pluginRemove,
92+
managedAgentInit,
93+
managedAgentValidate,
94+
managedAgentPlan,
95+
managedAgentApply,
96+
managedAgentDestroy,
97+
managedAgentStateList,
98+
managedAgentStateShow,
99+
managedAgentStateRm,
100+
managedAgentStateImport,
101+
managedAgentSessionCreate,
102+
managedAgentSessionList,
103+
managedAgentSessionGet,
104+
managedAgentSessionDelete,
105+
managedAgentSessionRun,
106+
managedAgentSessionSend,
107+
managedAgentSessionEvents,
108+
managedAgentSkillList,
92109
} from "bailian-cli-commands";
93110

94111
// Full bailian-cli product: every command, exposed under the `bl` binary.
@@ -186,4 +203,21 @@ export const commands: Record<string, AnyCommand> = {
186203
"plugin link": pluginLink,
187204
"plugin list": pluginList,
188205
"plugin remove": pluginRemove,
206+
"managed-agent init": managedAgentInit,
207+
"managed-agent validate": managedAgentValidate,
208+
"managed-agent plan": managedAgentPlan,
209+
"managed-agent apply": managedAgentApply,
210+
"managed-agent destroy": managedAgentDestroy,
211+
"managed-agent state list": managedAgentStateList,
212+
"managed-agent state show": managedAgentStateShow,
213+
"managed-agent state rm": managedAgentStateRm,
214+
"managed-agent state import": managedAgentStateImport,
215+
"managed-agent session create": managedAgentSessionCreate,
216+
"managed-agent session list": managedAgentSessionList,
217+
"managed-agent session get": managedAgentSessionGet,
218+
"managed-agent session delete": managedAgentSessionDelete,
219+
"managed-agent session run": managedAgentSessionRun,
220+
"managed-agent session send": managedAgentSessionSend,
221+
"managed-agent session events": managedAgentSessionEvents,
222+
"managed-agent skill-list": managedAgentSkillList,
189223
};

0 commit comments

Comments
 (0)