Skip to content

Commit 8a09881

Browse files
committed
refactor(tool-bailian-kb): 重构默认服务配置管理及设置页同步逻辑
- 替换默认服务配置字段为 defaultRetrieveAgentId 和 defaultChatAgentId,支持分别管理检索和对话服务 - 增加 Bailian knowledge base 插件设置命名空间,配置支持用户层叠覆盖和实时生效 - 统一凭证与设置配置的回退链,新增一阶段设置用户层优先读取字段 - 实现凭证值向设置文档的单次迁移,辅助设置页首次展示历史值 - Bailian 页面控制器支持基于设置作用域的双域同步,回显设置字段且支持删除操作 - 工具代码切换为从设置作用域异步解析默认服务 id,agent_id 在运行时均为可选但调用时必填 - README 与文档更新,包含配置项扩展、回退链说明以及 UI 配置页操作说明 - 底层依赖由 `dsh-client-ui-settings-plugins` 切换为 `dsh-client-ui-settings` - 修正 patch 配置与 API 参数命名,完善错误提示和超时配置读取
1 parent 589e3a4 commit 8a09881

14 files changed

Lines changed: 579 additions & 350 deletions

‎packages/bundle/README.md‎

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# bailian-kb-dsh(分发包)
22

3-
dsh bundle 分发面:`package.json` 的 `dsh.bundle.patch` 声明 + [`cordis.patch.yml`](cordis.patch.yml),向 profile 插入 `tool-bailian-kb` row,并随包分发浏览器端配置卡片(`dsh.client` → `lib/client.js`)。
3+
dsh bundle 分发面:`package.json` 的 `dsh.bundle.patch` 声明 + [`cordis.patch.yml`](cordis.patch.yml),向 profile 插入 `tool-bailian-kb` row,并随包分发浏览器端配置页(`dsh.client` → `lib/client.js`)。
44

55
## Patch row
66

@@ -12,37 +12,38 @@ dsh bundle 分发面:`package.json` 的 `dsh.bundle.patch` 声明 + [`cordis.p
1212
workspaceId: !!js process.env.BAILIAN_WORKSPACE_ID
1313
```
1414
15-
`workspaceId` 只是解析链的一层,不是唯一来源:config 显式值(含此环境变量读取)per-call 优先;未设置时回退到 `BAILIAN_WORKSPACE_ID` credential。同样回退覆盖 `defaultAgentId`(`BAILIAN_DEFAULT_AGENT_ID`)与 API key(`DASHSCOPE_API_KEY`)。
15+
`workspaceId` 只是解析链的一层,不是唯一来源:Config 同时注册为 `bailian-kb` settings namespace,patch entry 作 base 层,设置页/设置文档的用户层叠在其上;都未设置时 per-call 回退到 `BAILIAN_WORKSPACE_ID` credential。同样回退覆盖 `defaultRetrieveAgentId`(`BAILIAN_DEFAULT_RETRIEVE_AGENT_ID`)、`defaultChatAgentId`(`BAILIAN_DEFAULT_CHAT_AGENT_ID`)与 API key(`DASHSCOPE_API_KEY`,无 settings 面)。
1616

17-
## 三个值的解析链
17+
## 四个值的解析链
1818

19-
| 值 | 1️⃣ config 显式值(本 patch 或用户覆盖) | 2️⃣ credential(UI 卡片 / `~/.dsh/.credentials.yaml`) | 3️⃣ 都缺失时 |
20-
|---|---|---|---|
21-
| `DASHSCOPE_API_KEY` | —(无 config 面) | ✅ | 工具调用报错并引导配置 |
22-
| `BAILIAN_WORKSPACE_ID` | `workspaceId` | ✅ | 工具调用报错并引导配置 |
23-
| `BAILIAN_DEFAULT_AGENT_ID` | `defaultAgentId` | ✅ | `agent_id` 参数变必填(schema 恒 optional,运行时校验) |
19+
| 值 | 1️⃣ settings 用户层(设置页可编辑、回显) | 2️⃣ entry config(本 patch 或用户覆盖,作 base 层) | 3️⃣ credential(`~/.dsh/.credentials.yaml` / env) | 4️⃣ 都缺失时 |
20+
|---|---|---|---|---|
21+
| `DASHSCOPE_API_KEY` | —(无 settings 面) | —(无 config 面) | ✅ | 工具调用报错并引导配置 |
22+
| `BAILIAN_WORKSPACE_ID` | ✅ `workspaceId` | ✅ `workspaceId` | ✅ | 工具调用报错并引导配置 |
23+
| `BAILIAN_DEFAULT_RETRIEVE_AGENT_ID` | ✅ `defaultRetrieveAgentId` | ✅ `defaultRetrieveAgentId` | ✅ | `kb_search` 的 `agent_id` 参数变必填(schema 恒 optional,运行时校验) |
24+
| `BAILIAN_DEFAULT_CHAT_AGENT_ID` | ✅ `defaultChatAgentId` | ✅ `defaultChatAgentId` | ✅ | `kb_chat` 的 `agent_id` 参数变必填(schema 恒 optional,运行时校验) |
2425

25-
行为参数(`endpointHost`/`agentVersion`/`chatTimeoutMs`)只在 config 层,见 [tool-bailian-kb README](../tool-bailian-kb/README.md)。
26+
行为参数(`endpointHost`/`agentVersion`/`chatTimeoutMs`)在 config/settings 层(设置文档可改,实时生效),见 [tool-bailian-kb README](../tool-bailian-kb/README.md)。
2627

27-
## Web UI 配置卡片
28+
## Web UI 配置页
2829

29-
装进 profile 后,Settings → Plugins 出现“百炼知识库”卡片,可配置三个 credential(写 `~/.dsh/.credentials.yaml`):
30+
装进 profile 后,Settings 左侧导航出现“百炼知识库”页(`settings.section` 槽位):
3031

31-
- **DashScope API Key** — write-only,`type=password` 遮罩输入草稿
32-
- **Bailian Workspace ID** — 明文(便于粘贴核对 workspace id)
33-
- **默认服务 ID(agent_id)** — 明文,附独立“清除”按钮(留空保存 = 不写,清除须显式 unset)
32+
- **DashScope API Key** — write-only(凭据域 wire 结构上无值位,永不回显),`type=password` 遮罩输入草稿,仅显示 configured/来自环境变量 徽标;写 `~/.dsh/.credentials.yaml`
33+
- **Bailian Workspace ID / 默认检索服务 ID / 默认对话服务 ID** — **回显**:读写 `bailian-kb` settings 用户层(设置文档),预填当前解析值;清空保存 = 移除用户层,回退 entry config → credential;每个默认服务 ID 附“清除”按钮(同时 unset settings 用户层与 credential,避免回退链复活旧值)
3434

35-
值永不回显:字段始终空白起步,仅显示 configured/来自环境变量 徽标;来自 shell export 或 `~/.dsh/.env` 的值只读(继承环境层),输入框禁用。
35+
降级:远程浏览器(非 loopback,settings RPC 不可达)或未组合 settings 服务时,ID 字段退回旧的 write-only credential 控件,页面顶部显示提示。
3636

3737
## 用户覆盖
3838

39-
用户 patch 层在本 bundle 之上,按 id 覆盖时**替换整个 config(无 deep-merge)**。`workspaceId`/`defaultAgentId` 均为可选,只需重述想显式固定的字段:
39+
用户 patch 层在本 bundle 之上,按 id 覆盖时**替换整个 config(无 deep-merge)**,覆盖后的 config 成为 settings namespace 的新 base 层(设置页的用户层仍叠在其上)。`workspaceId`/`defaultRetrieveAgentId`/`defaultChatAgentId` 均为可选,只需重述想显式固定的字段:
4040

4141
```yaml
4242
# ~/.dsh/cordis.patch.yml 或 profile 的 cordis.patch.yml
4343
- id: tool-bailian-kb
4444
config:
45-
defaultAgentId: aid-customer-service # 场景固定式部署;省略 workspaceId 走 credential
45+
defaultRetrieveAgentId: aid-search-service # 检索服务;省略 workspaceId 走 credential
46+
defaultChatAgentId: aid-chat-service # 对话服务
4647
chatTimeoutMs: 600000
4748
```
4849

‎packages/bundle/cordis.patch.yml‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@
22
# workspaceId here is one resolution layer, not the only one: a config value
33
# (this env read included) wins per call; when it is unset the plugin resolves
44
# the BAILIAN_WORKSPACE_ID credential instead (web UI card or
5-
# ~/.dsh/.credentials.yaml). The same fallback covers defaultAgentId via
6-
# BAILIAN_DEFAULT_AGENT_ID, and the API key via DASHSCOPE_API_KEY.
5+
# ~/.dsh/.credentials.yaml). The same fallback covers defaultRetrieveAgentId
6+
# via BAILIAN_DEFAULT_RETRIEVE_AGENT_ID, defaultChatAgentId via
7+
# BAILIAN_DEFAULT_CHAT_AGENT_ID, and the API key via DASHSCOPE_API_KEY.
78

89
- insert:
910
- id: tool-bailian-kb

‎packages/tool-bailian-kb/README.md‎

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,26 @@
44

55
## Config
66

7+
Config 同时注册为 `bailian-kb` settings namespace(`installSettingsSection`):profile patch 的 entry config 作为 base 层,用户在设置页/设置文档的修改叠在其上且实时生效(所有值每次调用经 source thunk 读取,无需重启或重注册工具)。
8+
79
| 字段 | 类型 | 默认 | 语义 |
810
|---|---|---|---|
9-
| `workspaceId` | string | **必填** | 百炼工作空间 id;API host 为 workspace 子域名 `https://<workspaceId>.<endpointHost>` |
11+
| `workspaceId` | string? | — | 百炼工作空间 id;API host 为 workspace 子域名 `https://<workspaceId>.<endpointHost>`。未设置时每次调用回退 `BAILIAN_WORKSPACE_ID` credential |
1012
| `endpointHost` | string | `cn-beijing.maas.aliyuncs.com` | host 后缀,其他 region/私有化时替换 |
11-
| `defaultAgentId` | string? | — | 场景固定式部署绑定的检索服务;**配置后 `agent_id` 参数在注册期变为可选**(加载期静态决定 schema,非运行时 fallback) |
13+
| `defaultRetrieveAgentId` | string? | — | 默认检索服务;`kb_search` 的 `agent_id` 参数 schema 恒可选,默认值每次调用运行时解析(settings/config → credential) |
14+
| `defaultChatAgentId` | string? | — | 默认对话服务;`kb_chat` 的 `agent_id` 参数 schema 恒可选,默认值每次调用运行时解析(settings/config → credential) |
1215
| `agentVersion` | string? | — | `beta`(草稿调试)或已发布版本号;不暴露给模型 |
1316
| `chatTimeoutMs` | number | 300000 | kb_chat 超时;服务端是分钟级 agentic loop |
1417

15-
凭证:`DASHSCOPE_API_KEY` 走 `ctx.credentials` 引用,每次调用重新解析(热更换生效),未配置时报错并附获取指引。
18+
凭证与回退链:`DASHSCOPE_API_KEY` 只走 `ctx.credentials` 引用(write-only,每次调用重新解析,热更换生效);`workspaceId`/`defaultRetrieveAgentId`/`defaultChatAgentId` 先取 settings 解析值(用户层 > entry config),缺失时回退同名 credential(`BAILIAN_WORKSPACE_ID`/`BAILIAN_DEFAULT_RETRIEVE_AGENT_ID`/`BAILIAN_DEFAULT_CHAT_AGENT_ID`),都没有时报错并附配置指引。
1619

1720
## 工具
1821

1922
| 工具 | 参数 | 返回 |
2023
|---|---|---|
2124
| `kb_service_list` | `scene?`(chat\|search,省略查双场景合并)、`name_filter?` | 服务清单(agent_id、名称、scene、status、绑定知识库)+ total + truncated;分页内部消化(单 scene 100 条上限) |
22-
| `kb_search` | `query`、`agent_id`(见 defaultAgentId)、`top_k?`(默认 5,**客户端截断**——服务端无此参数)、`images?` | chunks(text/score/来源)+ total |
23-
| `kb_chat` | `message`、`agent_id` | 完整答案(内部消费 SSE 流缓冲返回)+ request_id |
25+
| `kb_search` | `query`、`agent_id`(见 defaultRetrieveAgentId)、`top_k?`(默认 5,**客户端截断**——服务端无此参数)、`images?` | chunks(text/score/来源)+ total |
26+
| `kb_chat` | `message`、`agent_id`(见 defaultChatAgentId) | 完整答案(内部消费 SSE 流缓冲返回)+ request_id |
2427

2528
## 错误语义
2629

‎packages/tool-bailian-kb/package.json‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
"@deepseek-ai/dsh-client-locale",
1818
"@deepseek-ai/dsh-client-runtime",
1919
"@deepseek-ai/dsh-api-remotes",
20-
"@deepseek-ai/dsh-client-ui-settings-plugins"
20+
"@deepseek-ai/dsh-client-ui-settings"
2121
],
2222
"platform": "web"
2323
}
@@ -28,29 +28,29 @@
2828
"@deepseek-ai/cordis": "^4.0.1",
2929
"@deepseek-ai/dsh-tools": "*",
3030
"@deepseek-ai/dsh-credentials": "*",
31+
"@deepseek-ai/dsh-settings": "*",
3132
"@deepseek-ai/dsh-skill": "*",
3233
"@deepseek-ai/schemastery": "^3.18.1",
3334
"@deepseek-ai/dsh-api-remotes": "*",
3435
"@deepseek-ai/dsh-client-connection": "*",
3536
"@deepseek-ai/dsh-client-locale": "*",
3637
"@deepseek-ai/dsh-client-runtime": "*",
37-
"@deepseek-ai/dsh-client-ui-settings-plugins": "*",
38-
"@deepseek-ai/dsh-client-ui-primitives": "*",
38+
"@deepseek-ai/dsh-client-ui-settings": "*",
3939
"@deepseek-ai/dsh-client-ui-slots": "*",
4040
"react": "^18.2.0"
4141
},
4242
"devDependencies": {
4343
"@deepseek-ai/cordis": "link:../../../deepseek-harness/vendor/cordis",
4444
"@deepseek-ai/dsh-tools": "link:../../../deepseek-harness/packages/core/tools",
4545
"@deepseek-ai/dsh-credentials": "link:../../../deepseek-harness/packages/credentials/credentials",
46+
"@deepseek-ai/dsh-settings": "link:../../../deepseek-harness/packages/settings/settings",
4647
"@deepseek-ai/dsh-skill": "link:../../../deepseek-harness/packages/skill/skill",
4748
"@deepseek-ai/schemastery": "link:../../../deepseek-harness/vendor/schemastery",
4849
"@deepseek-ai/dsh-api-remotes": "link:../../../deepseek-harness/packages/api/remotes",
4950
"@deepseek-ai/dsh-client-connection": "link:../../../deepseek-harness/packages/client/connection",
5051
"@deepseek-ai/dsh-client-locale": "link:../../../deepseek-harness/packages/client/locale",
5152
"@deepseek-ai/dsh-client-runtime": "link:../../../deepseek-harness/packages/client/runtime",
52-
"@deepseek-ai/dsh-client-ui-settings-plugins": "link:../../../deepseek-harness/packages/client/ui-settings-plugins",
53-
"@deepseek-ai/dsh-client-ui-primitives": "link:../../../deepseek-harness/packages/client/ui-primitives",
53+
"@deepseek-ai/dsh-client-ui-settings": "link:../../../deepseek-harness/packages/client/ui-settings",
5454
"@deepseek-ai/dsh-client-ui-slots": "link:../../../deepseek-harness/packages/client/ui-slots",
5555
"@types/node": "^22.0.0",
5656
"@types/react": "~18.3.1",

0 commit comments

Comments
 (0)