Skip to content

Commit 3766b6d

Browse files
committed
Merge branch 'main' into feat/bailian-wiki-doc-sync
2 parents 1962758 + 6d61afc commit 3766b6d

42 files changed

Lines changed: 5759 additions & 245 deletions

Some content is hidden

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

CHANGELOG.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,33 @@ 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.13.1] - 2026-08-03
10+
11+
### Changed
12+
13+
- **Default text model upgraded to Qwen3.8-Max**`bl text chat`, pipelines, API key validation, the config UI, and Managed Agent init templates now default to `qwen3.8-max`; Token Plan also moves from the preview model to the stable release.
14+
15+
## [1.13.0] - 2026-07-30
16+
17+
### Added
18+
19+
- **`bl config ui` Skills / MCP / Agents / Assets inventory** — browse installed skills, MCP servers, coding agents, and generated assets in the local Web UI with click-to-open detail drawers:
20+
- Skills: render `SKILL.md` as Markdown (GFM tables supported), show local vs remote origin badges, and install a skill by uploading a `.zip` archive into any supported agent's skills root.
21+
- MCP: view and edit JSON configuration with secret masking and mask-preserving writes; create, update, and delete MCP entries across Claude Code, Qwen Code, OpenCode, Cursor, Windsurf, Gemini, Qoder Work, OpenClaw, and Claude Desktop.
22+
- Agents: quick-launch coding agents directly from the UI (gated on the CLI binary being on PATH).
23+
- Assets: categorized, time-sorted browser with preview, open-locally, and delete.
24+
- **Model catalog suggestion chips** — per-category model names surfaced as click-to-fill chips under each `default_*_model` field in the config UI.
25+
- **Profiles tile grid** — profiles displayed as a tile grid with an add-tile and a design-consistent new-profile modal.
26+
27+
### Changed
28+
29+
- Config UI layout: collapsible grouped sidebar with icons and persistent state, responsive breakpoint, wider main area, sticky view headers, and right-side drawers for editing.
30+
31+
### Fixed
32+
33+
- Symlinked skill directories are now correctly identified as an installed source.
34+
- Config file detection now supports environment-variable-based paths and legacy configuration schemes.
35+
936
## [1.12.0] - 2026-07-28
1037

1138
### Added

CHANGELOG.zh.md

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

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

9+
## [1.13.1] - 2026-08-03
10+
11+
### 变更
12+
13+
- **默认文本模型升级至 Qwen3.8-Max**`bl text chat`、Pipeline、API Key 登录校验、配置 UI 和 Managed Agent 初始化模板现在默认使用 `qwen3.8-max`;Token Plan 也由预览版切换至正式版。
14+
15+
## [1.13.0] - 2026-07-30
16+
17+
### 新增
18+
19+
- **`bl config ui` 技能 / MCP / 代理 / 资产清单** — 在本地 Web UI 中浏览已安装的技能、MCP 服务器、编码代理和生成的资产,点击打开右侧详情抽屉:
20+
- 技能:将 `SKILL.md` 渲染为 Markdown(支持 GFM 表格),展示本地/远程来源徽章,支持上传 `.zip` 压缩包将技能安装到任意受支持代理的技能目录。
21+
- MCP:查看和编辑 JSON 配置,支持密钥掩码与掩码保真写回;支持在 Claude Code、Qwen Code、OpenCode、Cursor、Windsurf、Gemini、Qoder Work、OpenClaw 和 Claude Desktop 中创建、更新、删除 MCP 条目。
22+
- 代理:从 UI 一键启动编码代理(需对应 CLI 二进制在 PATH 中)。
23+
- 资产:按类别分组、按时间排序的浏览器,支持预览、本地打开和删除。
24+
- **模型目录建议芯片** — 在配置 UI 的每个 `default_*_model` 字段下方展示按类别分组的模型名称,点击即可填入。
25+
- **Profile 磁贴网格** — 配置文件以磁贴网格展示,新增添加磁贴和设计一致的新建 Profile 弹窗。
26+
27+
### 变更
28+
29+
- 配置 UI 布局:可折叠分组侧边栏(带图标和持久化状态)、响应式断点、更宽的主区域、吸顶视图标题、右侧抽屉式编辑。
30+
31+
### 修复
32+
33+
- 修复软链接技能目录未被正确识别为已安装来源的问题。
34+
- 配置文件检测现支持基于环境变量的路径和旧版配置方案。
35+
936
## [1.12.0] - 2026-07-28
1037

1138
### 新增

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ _Built for AI Agents. Every command works as a structured tool call._
2424

2525
Equip your AI Agent out-of-the-box with these capabilities, composable across complex tasks:
2626

27-
- **Text chat** — Qwen3.7-max: major gains in agentic coding, frontend coding, and vibe coding
27+
- **Text chat** — Qwen3.8-max: major gains in agentic coding, frontend coding, and vibe coding
2828
- **Multimodal (Omni)** — Full omni-modal support across text + image + audio + video
2929
- **Image generation & editing** — Qwen-Image 2.0: pro text rendering, photorealism, strong semantic adherence, multi-image composition
3030
- **Video generation & editing** — happyhorse-1.1 series: text-/image-/reference-to-video and natural-language video editing (up to 9-image reference)

README.zh.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ _专为 AI Agent 打造,每个命令均可作为结构化工具调用。_
2424

2525
让您的 AI Agent 开箱即具备以下能力,并可在复杂任务中自动组合调用:
2626

27-
- **文本对话** — Qwen3.7-max:Agentic coding、前端编程、Vibe coding 等能力显著增强
27+
- **文本对话** — Qwen3.8-max:Agentic coding、前端编程、Vibe coding 等能力显著增强
2828
- **全模态对话** — 文本 + 图像 + 音频 + 视频全模态支持
2929
- **图像生成与编辑** — Qwen-Image 2.0:专业文字渲染、真实质感、强语义遵循、多图合成
3030
- **视频生成与编辑** — happyhorse-1.1 系列,支持文生 / 图生 / 参考生(最多 9 张图参考)/ 自然语言视频编辑

docs/agents/config-profile-change.md

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,9 @@
4646
- `config list` 标识所有 Profile 与当前激活项。
4747
- `config show``auth status` 只输出本次最终选择的 `config``config_file`,不重复携带激活状态。
4848
- `config ui` 从持久化元数据读取激活项,提供显式激活操作,并在删除激活项后刷新为 `default`
49-
- `config ui` 保存时只替换 UI 管理的字段;Profile 中未展示但仍属于 `ConfigFile` 的合法字段必须保留,不能因打开并保存 UI 而丢失。
49+
- `config ui` 展示并可编辑完整 `ConfigFile`(含 `console_*``telemetry`),保存时按类型(数字/布尔/枚举)归一化写回;`config set` 仍只暴露较窄的 `VALID_KEYS`。UI 未管理的顶层元数据(如 `active_config`)不进入 Profile block,仍由写盘逻辑单独保留。
50+
- `config ui` 只读展示本地 agent 生态:Skills 跨全部 agent skill 目录(`~/.agents/skills` 及各 agent 的 `skills/`,含软链接)按 id 聚合并标注安装来源;MCP、Agents 从各 agent 本地配置读取。
51+
- `config ui` 提供 Assets 资产管理:扫描 `output_dir`(默认 `~/bailian-output`)下的 `images/videos/speech/omni` 分类及根目录散落文件,按分类与生成时间(mtime)标记,支持按分类筛选、内联预览(图/视频/音频)与删除单个文件;文件读取与删除均通过限定在输出目录内的路径校验(防目录穿越)。
5052
- 同步 E2E topic routes、Skill setup 和自动生成 reference。
5153

5254
## 6. 最小测试矩阵
@@ -62,7 +64,8 @@
6264
`--config default` 成功后切回 `default`
6365
- Console token 自动刷新不从其他 Profile 借用 AK/SK,也不把新 token 写入其他 Profile。
6466
- `config list/show/use/ui``auth status` 和依赖默认模型的消费命令覆盖对应 E2E。
65-
- `config ui` 覆盖保存时保留未管理字段,并继续允许空值清除 UI 管理字段。
67+
- `config ui` 覆盖保存时保留顶层元数据(如 `active_config`),继续允许空值清除字段,并覆盖 `console_*`/`telemetry` 的类型归一化与枚举校验。
68+
- Assets:`listAssets` 覆盖分类归类、时间倒序、目录缺失返回空;`resolveAssetPath` 覆盖目录穿越拦截;`contentType` 覆盖常见扩展名映射。
6669

6770
## 7. 完成检查
6871

packages/cli/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ _Built for AI Agents. Every command works as a structured tool call._
2424

2525
Equip your AI Agent out-of-the-box with these capabilities, composable across complex tasks:
2626

27-
- **Text chat** — Qwen3.7-max: major gains in agentic coding, frontend coding, and vibe coding
27+
- **Text chat** — Qwen3.8-max: major gains in agentic coding, frontend coding, and vibe coding
2828
- **Multimodal (Omni)** — Full omni-modal support across text + image + audio + video
2929
- **Image generation & editing** — Qwen-Image 2.0: pro text rendering, photorealism, strong semantic adherence, multi-image composition
3030
- **Video generation & editing** — happyhorse-1.1 series: text-/image-/reference-to-video and natural-language video editing (up to 9-image reference)

packages/cli/README.zh.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ _专为 AI Agent 打造,每个命令均可作为结构化工具调用。_
2424

2525
让您的 AI Agent 开箱即具备以下能力,并可在复杂任务中自动组合调用:
2626

27-
- **文本对话** — Qwen3.7-max:Agentic coding、前端编程、Vibe coding 等能力显著增强
27+
- **文本对话** — Qwen3.8-max:Agentic coding、前端编程、Vibe coding 等能力显著增强
2828
- **全模态对话** — 文本 + 图像 + 音频 + 视频全模态支持
2929
- **图像生成与编辑** — Qwen-Image 2.0:专业文字渲染、真实质感、强语义遵循、多图合成
3030
- **视频生成与编辑** — happyhorse-1.1 系列,支持文生 / 图生 / 参考生(最多 9 张图参考)/ 自然语言视频编辑

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.12.0",
3+
"version": "1.13.1",
44
"description": "CLI for Aliyun Model Studio (DashScope) AI Platform.",
55
"keywords": [
66
"agent",

packages/commands/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-commands",
3-
"version": "1.12.0",
3+
"version": "1.13.1",
44
"description": "Command library for bailian-cli products (knowledge, memory, media, …). See https://www.npmjs.com/package/bailian-cli for usage.",
55
"homepage": "https://bailian.console.aliyun.com/cli",
66
"bugs": {
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
import { maskToken, type AuthStore, type Identity, type Settings } from "bailian-cli-core";
2+
import { runConsoleLogin, resolveConsoleOrigin } from "./login-console.ts";
3+
4+
/** Read-only auth snapshot the config UI account widget renders. bl stores no
5+
* user profile (name/avatar), so this exposes only which credential domains
6+
* resolve, the console region/site, and a masked token. */
7+
export interface AuthUiStatus {
8+
authenticated: boolean;
9+
methods: { apiKey: boolean; console: boolean; openapi: boolean };
10+
primary: "console" | "apiKey" | "openapi" | null;
11+
region?: string;
12+
site?: "domestic" | "international";
13+
masked?: string;
14+
}
15+
16+
/**
17+
* The auth capability surface the config UI is allowed to use. All `authStore`
18+
* access is kept inside this module (commands/auth/**), which the lint boundary
19+
* permits; commands/config/** consumes only this opaque bridge and never
20+
* touches `authStore` directly.
21+
*/
22+
export interface AuthUiBridge {
23+
status(): AuthUiStatus;
24+
/** Start browser-based console login (fire-and-forget; UI polls status). */
25+
startConsoleLogin(): void;
26+
/** Clear all stored credentials. Returns whether anything changed. */
27+
logout(): Promise<boolean>;
28+
}
29+
30+
/** Build the bridge from a command context (identity/settings/authStore). */
31+
export function makeAuthUiBridge(ctx: {
32+
identity: Identity;
33+
settings: Settings;
34+
authStore: AuthStore;
35+
}): AuthUiBridge {
36+
const { identity, settings, authStore } = ctx;
37+
return {
38+
status() {
39+
const a = authStore.describe();
40+
const methods = { apiKey: !!a.apiKey, console: !!a.console, openapi: !!a.openapi };
41+
let masked: string | undefined;
42+
if (a.console) masked = maskToken(a.console.token);
43+
else if (a.apiKey) masked = maskToken(a.apiKey.token);
44+
else if (a.openapi) masked = maskToken(a.openapi.accessKeyId);
45+
const primary = a.console ? "console" : a.apiKey ? "apiKey" : a.openapi ? "openapi" : null;
46+
return {
47+
authenticated: methods.apiKey || methods.console || methods.openapi,
48+
methods,
49+
primary,
50+
region: a.console?.region,
51+
site: a.console?.site,
52+
masked,
53+
};
54+
},
55+
startConsoleLogin() {
56+
const origin = resolveConsoleOrigin(authStore.describe().console?.site);
57+
// Mirror the CLI (`bl auth login --console`): request an api_key from the
58+
// console only when one isn't already stored, so a first console login in
59+
// the config UI also provisions the model api_key (not just access_token).
60+
const hasApiKey = !!authStore.stored().apiKey;
61+
// runConsoleLogin opens the browser and runs its own callback server
62+
// (up to 15 min). We don't await it — the config UI polls the status
63+
// endpoint to detect completion. Errors are logged, not surfaced.
64+
void runConsoleLogin(
65+
origin,
66+
{ identity, settings, authStore },
67+
{
68+
needApiKey: !hasApiKey,
69+
},
70+
).catch((err: unknown) => {
71+
const msg = err instanceof Error ? err.message : String(err);
72+
process.stderr.write(`console login failed: ${msg}\n`);
73+
});
74+
},
75+
logout() {
76+
return authStore.logout("all");
77+
},
78+
};
79+
}

0 commit comments

Comments
 (0)