@xmanrui/dsh-im 4.9.1 → 4.11.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/PROACTIVE_DELIVERY.en.md +23 -1
- package/PROACTIVE_DELIVERY.md +23 -1
- package/README.en.md +5 -1
- package/README.md +6 -2
- package/lib/client.js +2077 -673
- package/lib/index.js +277 -272
- package/package.json +13 -1
- package/plugin-src/client/channel-card-meta.js +9 -1
- package/plugin-src/client/channels/dingtalk/api.js +4 -0
- package/plugin-src/client/channels/dingtalk/index.js +25 -2
- package/plugin-src/client/channels/feishu/api.js +6 -0
- package/plugin-src/client/channels/feishu/group-settings.js +581 -0
- package/plugin-src/client/channels/feishu/index.js +26 -150
- package/plugin-src/client/channels/qq/api.js +4 -0
- package/plugin-src/client/channels/qq/index.js +25 -2
- package/plugin-src/client/channels/shared/token-api.js +4 -0
- package/plugin-src/client/channels/shared/token-channel.js +25 -3
- package/plugin-src/client/channels/wecom/api.js +4 -0
- package/plugin-src/client/channels/wecom/index.js +25 -2
- package/plugin-src/client/channels/weixin/api.js +4 -0
- package/plugin-src/client/channels/weixin/index.js +25 -2
- package/plugin-src/client/channels/whatsapp/api.js +4 -0
- package/plugin-src/client/channels/whatsapp/index.js +24 -2
- package/plugin-src/client/delivery-settings.js +73 -5
- package/plugin-src/client/global-settings.js +341 -0
- package/plugin-src/client/i18n.js +49 -0
- package/plugin-src/client/index.js +47 -6
- package/plugin-src/client/model-setting.js +104 -0
- package/plugin-src/client/styles.js +99 -0
- package/plugin-src/host/channels/dingtalk/production.mjs +15 -0
- package/plugin-src/host/channels/dingtalk/rpc.mjs +11 -0
- package/plugin-src/host/channels/feishu/production.mjs +17 -0
- package/plugin-src/host/channels/feishu/rpc.mjs +32 -0
- package/plugin-src/host/channels/qq/production.mjs +15 -0
- package/plugin-src/host/channels/qq/rpc.mjs +11 -0
- package/plugin-src/host/channels/shared/model-setting-rpc.mjs +19 -0
- package/plugin-src/host/channels/shared/production.mjs +15 -0
- package/plugin-src/host/channels/shared/rpc.mjs +9 -0
- package/plugin-src/host/channels/shared/workspace-rpc.mjs +2 -0
- package/plugin-src/host/channels/slack/production.mjs +15 -0
- package/plugin-src/host/channels/slack/rpc.mjs +9 -0
- package/plugin-src/host/channels/wecom/production.mjs +15 -0
- package/plugin-src/host/channels/wecom/rpc.mjs +11 -0
- package/plugin-src/host/channels/weixin/production.mjs +15 -0
- package/plugin-src/host/channels/weixin/rpc.mjs +11 -0
- package/plugin-src/host/channels/whatsapp/production.mjs +15 -0
- package/plugin-src/host/channels/whatsapp/rpc.mjs +11 -0
- package/plugin-src/host/delivery-adapter.mjs +142 -3
- package/plugin-src/host/delivery-rpc.mjs +12 -0
- package/plugin-src/host/delivery-service.mjs +125 -3
- package/plugin-src/host/delivery-suggestions.mjs +46 -0
- package/plugin-src/host/harness-session-coordinator.mjs +32 -10
- package/plugin-src/host/inbound-ttl-rpc.mjs +83 -0
- package/plugin-src/host/inbound-ttl-runtime.mjs +85 -0
- package/plugin-src/host/inbound-ttl-service.mjs +179 -0
- package/plugin-src/host/index.mjs +26 -1
- package/plugin-src/host/modern-harness-api.mjs +58 -2
- package/plugin-src/host/session-sync-coordinator.mjs +217 -0
- package/scripts/verify-package.mjs +12 -6
- package/src/channels/feishu/bridge.mjs +164 -4
- package/src/channels/feishu/feishu-channel.mjs +45 -10
- package/src/channels/feishu/feishu-runtime.mjs +9 -0
- package/src/channels/feishu/message-utils.mjs +13 -0
- package/src/channels/feishu/multi-bot-controller.mjs +16 -0
- package/src/channels/feishu/plugin-config-store.mjs +1 -0
- package/src/channels/feishu/state-store.mjs +25 -0
- package/src/channels/shared/bot-workspace-store.mjs +291 -38
- package/src/channels/shared/harness-client.mjs +124 -43
- package/src/channels/shared/inbound-file.mjs +117 -2
- package/src/channels/shared/inbound-ttl-store.mjs +110 -0
- package/src/channels/shared/inbound-ttl.mjs +22 -0
- package/src/channels/shared/model-setting.mjs +110 -0
package/PROACTIVE_DELIVERY.en.md
CHANGED
|
@@ -78,6 +78,18 @@ Assume the Feishu bot has already received a message in the alert group:
|
|
|
78
78
|
|
|
79
79
|
If the group Chat ID is edited later, callers can continue using the same `botId + release-alerts` pair.
|
|
80
80
|
|
|
81
|
+
## Two-way sync for direct-message Sessions
|
|
82
|
+
|
|
83
|
+
A saved direct-message target has an opt-in **Two-way Session sync** switch. When enabled:
|
|
84
|
+
|
|
85
|
+
1. User text submitted from DSH Web/CLI to the DM's current Session is sent to the DM with a `[来自 DSH]` prefix.
|
|
86
|
+
2. After that turn completes successfully, the final assistant text merged in step order is sent once more with a `[DSH 助手]` prefix.
|
|
87
|
+
3. Ordinary IM prompts and `/steer` continue through the existing reply path. They are neither duplicated nor forwarded to another target.
|
|
88
|
+
|
|
89
|
+
The setting stores the private conversation target, never a `sessionId`, so it follows `/session` changes automatically. After `/new` or a workspace change, its status becomes **Waiting for this DM to establish a new Session** and recovers as soon as that DM creates one; the switch does not need to be toggled again.
|
|
90
|
+
|
|
91
|
+
Enabling requires one uniquely known DM that already has a current Session for this bot. Groups, Slack Threads, Telegram Topics, Discord server channels, and targets that cannot be confirmed as DMs are unavailable. A channel with an explicit remote `harnessBaseUrl` is also unsupported. The first version mirrors current-Host text only—no images, files, cards, tool progress, approvals, or history. Changing the target type or native route disables sync; renaming the target does not.
|
|
92
|
+
|
|
81
93
|
## Native fields for all nine channels
|
|
82
94
|
|
|
83
95
|
Choose a known conversation whenever possible. Obtain and enter a platform-native ID manually only when the target is missing from the suggestions.
|
|
@@ -165,6 +177,14 @@ const targets = await ctx.dshIm.listTargets(botId);
|
|
|
165
177
|
// [{ targetId, name?, kind, route }, ...]
|
|
166
178
|
```
|
|
167
179
|
|
|
180
|
+
Companion plugins can discover configured bots through the same Host service:
|
|
181
|
+
|
|
182
|
+
```js
|
|
183
|
+
const bots = await ctx.dshIm.listBots();
|
|
184
|
+
// [{ botId, channel }, ...]
|
|
185
|
+
```
|
|
186
|
+
The result contains stable public metadata only; it never includes credentials, platform routes, or target data.
|
|
187
|
+
|
|
168
188
|
On failure, the Promise rejects with an Error whose `code` is one of the public error codes below.
|
|
169
189
|
|
|
170
190
|
## Send through Connection RPC
|
|
@@ -242,10 +262,11 @@ Every response is either `{ ok: true, value }` or `{ ok: false, error: { code, m
|
|
|
242
262
|
| `target.create` | `{ botId, target: { targetId, name?, kind, route } }` | The complete created target |
|
|
243
263
|
| `target.update` | `{ botId, targetId, target: { name?, kind, route } }` | The complete updated target |
|
|
244
264
|
| `target.delete` | `{ botId, targetId }` | `{ deleted: true }` |
|
|
265
|
+
| `target.session-sync.set` | `{ botId, targetId, enabled }` | `{ enabled, state }`; manages DM sync from the local settings UI |
|
|
245
266
|
| `target.test` | `{ botId, targetId }` | `{ sent: true }` |
|
|
246
267
|
| `target.test` | `{ botId, target: { kind, route } }` | `{ sent: true }`; tests a draft without saving it |
|
|
247
268
|
|
|
248
|
-
Payloads are validated with exact fields. The inner `target` in `target.update` must not contain `targetId`; a draft test must not contain `targetId` or `name`.
|
|
269
|
+
Payloads are validated with exact fields. The inner `target` in `target.update` must not contain `targetId`; a draft test must not contain `targetId` or `name`. Every target returned by `target.list` includes read-only `sessionSync: { enabled, state }`, where `state` is `off`, `active`, `waiting`, or `unavailable`; the internal private-conversation key is never returned to the client.
|
|
249
270
|
|
|
250
271
|
## Error handling
|
|
251
272
|
|
|
@@ -261,6 +282,7 @@ An HTTP failure returns `{ "error": { "code", "message", "details" } }`. Same-Ho
|
|
|
261
282
|
| `bot-not-connected` | 503 | The bot is offline; let the caller decide whether to retry after reconnection |
|
|
262
283
|
| `target-rejected` | 422 | The platform explicitly rejected the target or the bot lacks permission; check platform permissions and the target ID |
|
|
263
284
|
| `delivery-failed` | 502 | A network, platform, or other safely redacted delivery failure; check bot state and Host logs |
|
|
285
|
+
| `session-sync-unavailable` | — | The target is not a confirmed current-Host DM, has no current Session, or uses a remote Harness; create it from a known DM and establish a Session first |
|
|
264
286
|
| `cancelled` | 408 | The call was cancelled; stop or start a new call as required by the application |
|
|
265
287
|
|
|
266
288
|
The HTTP protocol layer may also return `method-not-allowed` (405), `unsupported-media-type` (415), or `payload-too-large` (413).
|
package/PROACTIVE_DELIVERY.md
CHANGED
|
@@ -78,6 +78,18 @@
|
|
|
78
78
|
|
|
79
79
|
以后即使编辑并更换群 Chat ID,调用方仍可继续使用同一组 `botId + release-alerts`。
|
|
80
80
|
|
|
81
|
+
## 私聊会话双向同步
|
|
82
|
+
|
|
83
|
+
已保存的私聊目标可以在目标行开启「会话双向同步」,默认关闭。开启后:
|
|
84
|
+
|
|
85
|
+
1. DSH Web/CLI 向该私聊当前绑定的 Session 提交的用户文字,会以 `[来自 DSH]` 开头发送到私聊。
|
|
86
|
+
2. 该 Turn 成功完成后,按 step 合并的最终助手文字会以 `[DSH 助手]` 开头再发送一次。
|
|
87
|
+
3. IM 用户自己的普通提问和 `/steer` 仍走原回复链,不会被同步逻辑重复发送或转发给其他目标。
|
|
88
|
+
|
|
89
|
+
开关只保存私聊目标,不保存 `sessionId`,因此会自动跟随 `/session` 切换。执行 `/new` 或切换工作区后,状态暂时显示「等待该私聊建立新会话」;该私聊下一次建立 Session 后自动恢复,无需重新开关。
|
|
90
|
+
|
|
91
|
+
开启要求目标来自该机器人已经聊过、已有当前 Session 的唯一私聊。群聊、Slack Thread、Telegram Topic、Discord 服务器频道和其他无法确认是私聊的目标显示为不可用。显式配置了远程 `harnessBaseUrl` 的渠道也不支持;首版仅同步当前 Host 的文字,不同步图片、文件、卡片、工具过程、审批或历史消息。修改目标类型或平台路由会自动关闭同步,改名不会。
|
|
92
|
+
|
|
81
93
|
## 九渠道手动填写字段
|
|
82
94
|
|
|
83
95
|
优先从已聊会话中选择。只有目标未出现在候选中时,才需要手动取得以下平台原生 ID。
|
|
@@ -165,6 +177,14 @@ const targets = await ctx.dshIm.listTargets(botId);
|
|
|
165
177
|
// [{ targetId, name?, kind, route }, ...]
|
|
166
178
|
```
|
|
167
179
|
|
|
180
|
+
同 Host 插件可以通过同一个服务发现已配置机器人:
|
|
181
|
+
|
|
182
|
+
```js
|
|
183
|
+
const bots = await ctx.dshIm.listBots();
|
|
184
|
+
// [{ botId, channel }, ...]
|
|
185
|
+
```
|
|
186
|
+
返回值只包含稳定的公开元数据,不包含凭据、平台路由或目标内容。
|
|
187
|
+
|
|
168
188
|
调用失败时 Promise 会拒绝,`error.code` 使用本文后面的公共错误码。
|
|
169
189
|
|
|
170
190
|
## 通过 Connection RPC 发送
|
|
@@ -242,10 +262,11 @@ async function sendDailyReport(connection, summary) {
|
|
|
242
262
|
| `target.create` | `{ botId, target: { targetId, name?, kind, route } }` | 已创建的完整目标 |
|
|
243
263
|
| `target.update` | `{ botId, targetId, target: { name?, kind, route } }` | 更新后的完整目标 |
|
|
244
264
|
| `target.delete` | `{ botId, targetId }` | `{ deleted: true }` |
|
|
265
|
+
| `target.session-sync.set` | `{ botId, targetId, enabled }` | `{ enabled, state }`;仅供本机设置页管理私聊同步 |
|
|
245
266
|
| `target.test` | `{ botId, targetId }` | `{ sent: true }` |
|
|
246
267
|
| `target.test` | `{ botId, target: { kind, route } }` | `{ sent: true }`;测试草稿,不保存 |
|
|
247
268
|
|
|
248
|
-
接口严格校验字段。`target.update` 的内部 `target` 不能包含 `targetId`;草稿测试不能包含 `targetId` 或 `name
|
|
269
|
+
接口严格校验字段。`target.update` 的内部 `target` 不能包含 `targetId`;草稿测试不能包含 `targetId` 或 `name`。`target.list` 返回的每个目标带只读 `sessionSync: { enabled, state }`,其中 `state` 为 `off`、`active`、`waiting` 或 `unavailable`;内部私聊键不会返回客户端。
|
|
249
270
|
|
|
250
271
|
## 错误处理
|
|
251
272
|
|
|
@@ -261,6 +282,7 @@ HTTP 失败响应格式为 `{ "error": { "code", "message", "details" } }`。同
|
|
|
261
282
|
| `bot-not-connected` | 503 | 机器人当前离线;恢复连接后由调用方决定是否重试 |
|
|
262
283
|
| `target-rejected` | 422 | 平台明确拒绝目标或机器人缺少发送权限;检查平台权限和目标 ID |
|
|
263
284
|
| `delivery-failed` | 502 | 网络、平台或其他无法安全细分的发送失败;检查连接状态和 Host 日志 |
|
|
285
|
+
| `session-sync-unavailable` | — | 目标不是可确认的当前 Host 私聊,尚无当前 Session,或渠道使用远程 Harness;先从已聊私聊创建目标并建立 Session |
|
|
264
286
|
| `cancelled` | 408 | 调用被取消;按业务需要结束或重新发起 |
|
|
265
287
|
|
|
266
288
|
HTTP 协议层还可能返回 `method-not-allowed`(405)、`unsupported-media-type`(415)或 `payload-too-large`(413)。
|
package/README.en.md
CHANGED
|
@@ -123,6 +123,7 @@ Use the proxy URL required by your network and restart the Host after changing i
|
|
|
123
123
|
| Default behavior | Description |
|
|
124
124
|
| --- | --- |
|
|
125
125
|
| Bot workspace | Each bot stores its workspace independently. New bots start with the Host's current working directory, which can later be changed from the bot card. |
|
|
126
|
+
| Model | Every bot in all nine IM channels can choose a model directly below its workspace, or follow the Host default. A change applies only to later new Sessions; send `/new` and then an ordinary message in the current chat to use it. |
|
|
126
127
|
| Agent Preset | Each bot can choose an Agent Preset on its settings card. When none is chosen, new Sessions follow the Host's `agent-presets.default`. A channel-level `config.agentPreset` is only the default for later new bots on that channel. Changing the preset never modifies or clears existing Sessions; if the current chat already has a Session, send `/new` and then a regular message to create one with the new selection. |
|
|
127
128
|
| Context enhancement | Open settings from a bot card to enable groups and DMs independently. Both switches default to off, including for existing bots after an upgrade. |
|
|
128
129
|
|
|
@@ -130,6 +131,8 @@ Use the proxy URL required by your network and restart the Host after changing i
|
|
|
130
131
|
|
|
131
132
|
All nine IM channels can proactively send text through a stable `botId + targetId` pair. Bot settings support choosing a known conversation or entering a target manually, testing the current route before saving, and copying call parameters. HTTP POST, same-Host plugins, and Connection RPC share the same target configuration and delivery core.
|
|
132
133
|
|
|
134
|
+
Saved direct-message targets also offer an opt-in **Two-way Session sync** switch. Once enabled, user text submitted from DSH Web/CLI and the final assistant text in that DM's current Session are mirrored back to the DM; ordinary IM prompts and `/steer` are not duplicated. The switch follows the current Session across `/session`, `/new`, and workspace changes. The first version supports text DMs on the current Host only; groups, Topics, Threads, and explicit remote `harnessBaseUrl` connections are unavailable.
|
|
135
|
+
|
|
133
136
|
See the [Proactive Delivery Guide](PROACTIVE_DELIVERY.en.md) ([简体中文](PROACTIVE_DELIVERY.md)) for setup steps, native fields for all nine channels, complete call examples, management endpoints, error codes, and troubleshooting.
|
|
134
137
|
|
|
135
138
|
### Context enhancement
|
|
@@ -187,10 +190,11 @@ See the [Proactive Delivery Guide](PROACTIVE_DELIVERY.en.md) ([简体中文](PRO
|
|
|
187
190
|
|
|
188
191
|
- **Image understanding**: all nine built-in channels can send JPEG, PNG, WebP, and GIF files sent as images to Harness, with an optional text description. Each image is limited to 5 MB, and all images in one message are limited to 20 MB in total.
|
|
189
192
|
- **Switch workspaces from a bot card**: every bot card on the settings page shows its current Harness workspace. Enter an existing absolute directory path directly or open the directory picker. Switching clears only that bot's old chat mappings; it never deletes, empties, or archives old Sessions. Replies already in progress may finish, while later messages use the new workspace.
|
|
193
|
+
- **Choose a model from a bot card**: every bot card in all nine IM channels offers the Host's available models directly below the workspace, plus an option to follow the default. The selection is stored per bot and used only for later new Sessions; existing Sessions and replies already in progress are unchanged.
|
|
190
194
|
- **Choose an Agent Preset from a bot card**: every bot card can select one of the Host's existing Agent Presets, or follow the Host default. The change applies only to that bot and only to later new Sessions; existing Sessions and replies already in progress are left unchanged.
|
|
191
195
|
- **Check the connection and send a test message**: when a bot is online, clicking **Check connection** verifies the platform connection and sends a “DeepSeek Harness connection test succeeded” message to the bot's most recently remembered direct conversation; WhatsApp uses the account's self-chat. The test neither creates a Harness Session nor invokes the model. The bot must have received at least one direct message before it has a remembered test target; otherwise the page reports that no test conversation is available yet.
|
|
192
196
|
- **Retry a connection or remove an integration**: when a bot is offline, its card action changes to **Retry connection**. Use **Remove integration** when the bot is no longer needed. Each action affects only the selected bot and leaves other bots and channels unchanged.
|
|
193
|
-
- **Manage multiple bots independently**: a channel can have multiple connected bots. Credentials, connection state, workspace, Agent Preset, and chat-to-Session mappings are kept separately for every bot, so card actions do not affect sibling bots.
|
|
197
|
+
- **Manage multiple bots independently**: a channel can have multiple connected bots. Credentials, connection state, workspace, model, Agent Preset, and chat-to-Session mappings are kept separately for every bot, so card actions do not affect sibling bots.
|
|
194
198
|
- **Streaming replies and progress**: the plugin uses each platform's available capabilities to show thinking state, tool progress, and incremental answers. Platforms without a native streaming API complete replies through message edits, card updates, or a final message.
|
|
195
199
|
|
|
196
200
|
## Design
|
package/README.md
CHANGED
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
|
|
38
38
|
## 简介
|
|
39
39
|
|
|
40
|
-
通过扫码、App Manifest 或已有机器人凭据把 IM 机器人接入 DeepSeek Harness,并让本机 Harness 主动连接公网 AI Office。一个插件、一个设置入口,统一管理九种 IM 渠道和 AI Office Connector。**每个 IM
|
|
40
|
+
通过扫码、App Manifest 或已有机器人凭据把 IM 机器人接入 DeepSeek Harness,并让本机 Harness 主动连接公网 AI Office。一个插件、一个设置入口,统一管理九种 IM 渠道和 AI Office Connector。**每个 IM 渠道都支持接入多个机器人**,各机器人的连接状态、工作区、模型和会话绑定彼此独立。
|
|
41
41
|
|
|
42
42
|
Connect IM bots to DeepSeek Harness by scanning a QR code, using an App Manifest, or entering existing bot credentials, and let the local Harness connect outward to a public AI Office. One plugin and one settings entry manage nine multi-bot IM channels and the AI Office Connector.
|
|
43
43
|
|
|
@@ -126,6 +126,7 @@ dsh web
|
|
|
126
126
|
| 默认行为 | 说明 |
|
|
127
127
|
| --- | --- |
|
|
128
128
|
| 机器人工作区 | 每个机器人独立保存工作区。新机器人默认使用 Host 当时的工作目录;之后可在机器人卡片中修改。 |
|
|
129
|
+
| 模型 | 九个 IM 渠道的每个机器人都可在工作区下方独立选择模型;未选择时跟随 Host 默认。切换只影响之后新建的会话;当前聊天先发送 `/new`,再发送普通消息才会使用新选择。 |
|
|
129
130
|
| Agent Preset | 每个机器人可在设置页卡片中选择 Agent Preset。未选择时跟随 Host 的 `agent-presets.default`;渠道级 `config.agentPreset` 只作为该渠道之后新接入机器人的默认值。切换不会修改或清空已有会话;若当前聊天已有会话,需先发送 `/new`,再发送一条普通消息,才会按新选择创建会话。 |
|
|
130
131
|
| 上下文增强 | 从机器人卡片打开设置,分别决定群聊、私聊是否增强;两个开关默认均关闭,旧机器人升级后也不会自动开启。 |
|
|
131
132
|
|
|
@@ -133,6 +134,8 @@ dsh web
|
|
|
133
134
|
|
|
134
135
|
九个 IM 渠道都可以使用稳定的 `botId + targetId` 主动发送文字消息。机器人设置页支持从已聊会话选择或手工填写目标、保存前测试当前路由,以及复制调用参数;HTTP POST、同 Host 插件和 Connection RPC 共用同一目标配置与投递核心。
|
|
135
136
|
|
|
137
|
+
已保存的私聊目标还可以开启默认关闭的「会话双向同步」。开启后,DSH Web/CLI 在该私聊当前 Session 中发送的用户文字和最终助手文字会同步回私聊;IM 侧原有提问与 `/steer` 不会重复。开关自动跟随 `/session`、`/new` 和工作区切换后的当前 Session。首版仅支持当前 Host 的私聊文字;群聊、Topic、Thread 与显式远程 `harnessBaseUrl` 不支持。
|
|
138
|
+
|
|
136
139
|
设置步骤、九渠道字段、完整调用示例、管理端点、错误码与排错说明请查看[《主动投递使用指南》](PROACTIVE_DELIVERY.md)([English](PROACTIVE_DELIVERY.en.md))。
|
|
137
140
|
|
|
138
141
|
### 上下文增强
|
|
@@ -190,10 +193,11 @@ dsh web
|
|
|
190
193
|
|
|
191
194
|
- **图片识别**:九个内置渠道都可以把 JPEG、PNG、WebP,以及以图片文件方式发送的 GIF 交给 Harness;图片可以附带文字说明。单张图片上限为 5 MB,单条消息中的图片总大小上限为 20 MB。
|
|
192
195
|
- **在机器人卡片切换工作区**:设置页中的每张机器人卡片都会显示当前 Harness 工作区。可以直接填写已有目录的绝对路径,也可以打开目录选择器。切换只清除该机器人的旧聊天映射,不会删除、清空或归档旧 Session;已经开始的回复可以继续完成,后续消息使用新工作区。
|
|
196
|
+
- **在机器人卡片选择模型**:九个 IM 渠道的每张机器人卡片都在工作区下方提供模型选择,可选 Host 当前可用模型或跟随默认。选择按机器人独立保存,只用于之后新建的 Session;已有 Session 和正在生成的回复不受影响。
|
|
193
197
|
- **在机器人卡片选择 Agent Preset**:设置页中的每张机器人卡片都可以选择 Host 已有的 Agent Preset,或跟随 Host 默认。切换只作用于该机器人,并且只影响之后新建的会话;已有会话和正在生成的回复不受影响。
|
|
194
198
|
- **检查连接并发送测试消息**:机器人在线时,点击卡片上的「检查连接」会检查平台连接,并向该机器人最近记录的私聊发送一条“DeepSeek Harness 连接测试成功”消息;WhatsApp 会发送到账号自聊。测试消息不会创建 Harness Session,也不会调用模型。机器人必须至少收到过一条私聊才能记住测试目标,否则页面会提示尚无可用的测试会话。
|
|
195
199
|
- **重试连接和移除接入**:机器人离线时,卡片上的操作会变为「重试连接」;不再使用时可以点击「移除接入」。这些操作都只作用于所选机器人,不影响其他机器人或渠道。
|
|
196
|
-
-
|
|
200
|
+
- **多机器人独立管理**:同一渠道可以接入多个机器人。每个机器人分别保存凭据、连接状态、工作区、模型、Agent Preset 和聊天会话映射,卡片上的工作区、模型、Preset、连接检查、重试和移除操作互不影响。
|
|
197
201
|
- **流式回复和进度提示**:插件会按各平台能力显示正在思考、工具执行和逐步生成的回答;不支持原生流式接口的平台会通过编辑消息、卡片更新或最终消息完成回复。
|
|
198
202
|
|
|
199
203
|
## 设计
|