feat: improve desktop reliability and customization
Address reliability and consistency gaps across Agent Runtimes, persistence, settings, Knowledge, Magic Notes, Smart Heartbeat, and the download site. Runtime processes now have bounded lifecycle cleanup and atomic configuration rollback, while model packages and persisted mutations recover safely. Add a configurable global shortcut, protect unsaved work, improve modal and keyboard behavior, localize the built-in project without rewriting stored data, and lazy-load heavy renderer routes under enforced bundle budgets. Align project forms and disabled controls with shared typography and interaction states, and strengthen website release metadata validation and navigation accessibility. Release note: 修复 Runtime、设置、知识库、魔法笔记与智能心跳中的可靠性和交互一致性问题;新增可配置全局快捷键,改进无障碍与加载性能,并强化官网下载校验。
This commit is contained in:
@@ -219,6 +219,10 @@ GoodBuddy 控制面自身不导出 `apply(ctx, config)`,也不提供默认 std
|
||||
- 插件成功激活后可注册工具或后台生命周期逻辑。Ask 只能拦截模型工具调用,不能撤销初始化阶段已经发生的副作用。
|
||||
|
||||
GoodBuddy 不扫描任意目录、不读取用户 profile 插件清单,也不接受 Renderer 直接提供文件路径。
|
||||
插件安装、升级和移除在目录重命名前写入受管变更日志。Main 下次初始化时以持久
|
||||
Store 是否已经提交为准,确定性完成新目录或恢复旧目录,并在处理前重新验证受管
|
||||
目录、入口真实路径、符号链接和根目录包含关系。旧版 `store.json` 继续原地迁移,
|
||||
不要求用户重新安装插件。
|
||||
|
||||
## 8. 协议设计
|
||||
|
||||
@@ -523,14 +527,14 @@ OpenCode、Continue 和 DeepSeek Harness 的后续能力按操作生命周期放
|
||||
| 表面 | 负责内容 | 不负责内容 |
|
||||
| --- | --- | --- |
|
||||
| Composer 通用行 | 附件、语音、知识范围、专家、Ask/Execute、Runtime 和发送 | Session 监督、后台进度、历史任务管理 |
|
||||
| Composer Runtime 专属行 | 仅对当前消息生效且需要高频选择的 Agent、预设、Prompt/Command 快捷操作 | Subagent 树、后台 Job、Workflow/Hook 生命周期 |
|
||||
| 助手工作栏固定“Runtime”栏目 | 用户所选会话或 Run 的 Runtime 状态、Subagent 层级与取消、后台 Job 队列/进度/结果、Workflow/Hook 运行、长任务暂停/恢复/终止和会话监督 | 持久模型、程序路径、默认 Agent/预设配置 |
|
||||
| Composer Runtime 专属行 | 仅对当前消息生效且需要高频选择的 Agent、预设、Prompt/Command 快捷操作 | Task 级委派、后台执行、Workflow/Hook 生命周期 |
|
||||
| 助手工作栏固定“Runtime”栏目 | 用户所选 Conversation 或 Task 的 Runtime 状态、Task 级委派与取消、后台执行进度/结果、Workflow/Hook 运行、长任务暂停/恢复/终止和会话监督;不显示 Job/Run 树 | 持久模型、程序路径、默认 Agent/预设配置 |
|
||||
| 设置 > Agent Runtime | 持久 Runtime 配置、默认值、插件管理、能力清单和连接诊断 | 某次活动会话的实时控制 |
|
||||
|
||||
Runtime 栏目入口始终存在,并采用统一监督模型;内部再按用户所选目标及其 Runtime 的真实能力
|
||||
显示 OpenCode、Continue 或 DSH 的具体区域。未支持能力不渲染空卡片或一排禁用按钮,而是
|
||||
在用户需要理解缺口时显示原因和可执行入口。跟随模式切换 Runtime 或会话时必须清理上一归属
|
||||
的 Job/Subagent 状态,固定目标则保持不变。完整工作栏契约见
|
||||
在用户需要理解缺口时显示原因和可执行入口。跟随模式切换 Runtime、Conversation 或 Task
|
||||
时必须清理上一归属的聚合执行状态,固定目标则保持不变。完整工作栏契约见
|
||||
[通用助手工作栏与执行空间 PRD](../prd/assistant-experience/assistant-workbar-and-execution-spaces-prd.md)。
|
||||
|
||||
所有未来的 Subagent、Job、Workflow、Hook 和会话操作仍须经过 Main 的 Runtime 边界,保留取消、超时、权限、Task/Job/Subjob 层级、用量和活动审计。高风险动作在侧栏就地确认,运行结果进入活动与成果记录,不以 Composer 按钮代替监督面板。DeepSeek Harness 首版仍不加载这些服务,本节只确定未来跨 Runtime 的产品位置和协议归属。
|
||||
@@ -732,7 +736,7 @@ npm run build
|
||||
- Harness 文件和命令工具没有 Runtime OS 隔离,会继承 GoodBuddy 客户端当前用户能够访问的主机资源。
|
||||
- 首版不恢复 Harness 原生 Session,Runtime 重启后由 GoodBuddy 历史重建。
|
||||
- 图片输入仅在所选模型连接明确声明支持时可用;首版仍不支持知识库、浏览器控制和 Harness Subagent。Web Search/Fetch 仅使用 Main 代理,MCP 仅支持用户分配、Main 代理和 Execute 自动单次授权路径。
|
||||
- Harness Subagent、后台 Job、Workflow、Hook 和原生会话监督尚未实现;未来入口固定在右侧 Runtime 监督栏,不扩张 Composer 工具栏。
|
||||
- Harness Subagent、后台 Job、Workflow、Hook 和原生会话监督尚未实现;未来按 Task 聚合到右侧 Runtime 监督栏,不扩张 Composer 工具栏或暴露 Job/Run 层级。
|
||||
- 推理、工具和用量扩展属于 GoodBuddy 协议,不是标准 ACP 保证。
|
||||
- 市场来自公共 npm 关键字搜索,不是精选目录;包的质量、兼容性和维护状态由发布者负责。
|
||||
- 插件安装、初始化、后台生命周期和 Execute 工具使用当前用户权限,不受 Runtime OS 沙箱保护;Ask 只控制模型工具调用。
|
||||
|
||||
@@ -918,6 +918,9 @@ Ollama 的模型下载由用户和 Ollama 管理。GoodBuddy 的模型下载源
|
||||
- Renderer 提交过期来源时零网络请求。
|
||||
- 两个来源的安装 Manifest 文件摘要相同。
|
||||
- 取消、关闭、错误和摘要不匹配不留下正式模型目录。
|
||||
- 快照准备会清理名称同时匹配受管模型 ID 与安装 UUID 的陈旧
|
||||
`.install-*` 目录,以及受管文件名对应的孤立 `.partial` 文件;已安装模型、
|
||||
非目录条目和用户自建文件不参与清理。
|
||||
|
||||
### 17.5 回归
|
||||
|
||||
|
||||
@@ -670,6 +670,17 @@ Task 身份和左侧行首展开入口,不改变 Conversation 类型或复制
|
||||
- 清除数据前列出会删除的数据范围。
|
||||
- 配置写入采用原子替换,损坏时可恢复默认配置。
|
||||
|
||||
#### 本地助理数据兼容性
|
||||
|
||||
- 助理 SQLite 当前 schema 为 `user_version = 25`。`projects.built_in_default`
|
||||
是 Main 维护的只读内置身份,默认值为 `0`;普通项目创建、更新输入和 IPC 均不能设置它。
|
||||
- 全新数据库只通过 Main 内部种子路径将自动创建的本地默认项目标记为 `1`。界面仅在该标记
|
||||
存在且原始种子名称、说明仍精确匹配时本地化展示,不改写持久化名称、说明或历史快照。
|
||||
- 从旧 schema 升级时,只有恰好一个项目满足完整旧种子签名(本地用户项目、活动状态、
|
||||
Ask、无 Runtime、原始名称和说明精确匹配、创建与更新时间相同),且该项目仍是数据库
|
||||
最初插入的 Project 时才回填标记。零个、多个、原始项目已编辑或删除后出现的同名候选均
|
||||
不标记,避免把用户后来独立创建的同名项目误认为内置项目。迁移在单一事务中完成。
|
||||
|
||||
### 5.16 自动更新
|
||||
|
||||
#### 功能项
|
||||
|
||||
@@ -397,6 +397,8 @@ Execute 消息通过身份、长度、去重和并发检查后:
|
||||
- 失败:回传经过脱敏、长度受限的用户可处理错误。
|
||||
- 取消:回传“任务已取消”。
|
||||
- 结果投递失败时保留发件箱记录并显示通道错误,不重复执行任务。
|
||||
- 发件箱达到五次投递尝试后进入可查询的终止状态,并继续通过现有通道错误回调
|
||||
暴露;终止记录不再发送,也不会从未投递查询中静默消失。
|
||||
|
||||
### 9.6 媒体与文件
|
||||
|
||||
|
||||
@@ -286,13 +286,14 @@ Supervisor 不能:
|
||||
实验工作台页签:
|
||||
|
||||
1. **设计**:问题、协议、变量、指标和预算。
|
||||
2. **运行**:总体进度、Run 表和状态。
|
||||
2. **运行**:总体进度、候选执行和聚合状态。
|
||||
3. **比较**:指标表、图表、差异和 Pareto 候选。
|
||||
4. **证据**:按结论、指标和 Run 查看证据。
|
||||
4. **证据**:按结论、指标和候选查看证据。
|
||||
5. **结论**:总结、限制和后续操作。
|
||||
|
||||
Run 详情展示参数、协议版本、时间线、消息、任务、成果、监督记录、指标、评估理由、
|
||||
上下文和记忆快照、Token、耗时与错误。
|
||||
候选详情在 Experiment 工作台内展示参数、协议版本、时间线、消息、Task、成果、监督记录、
|
||||
指标、评估理由、上下文和记忆快照、Token、耗时与错误。内部 Run ID 只用于关联和审计,
|
||||
不提供独立 Run 路由、页面或操作菜单。
|
||||
|
||||
## 15. 后续操作
|
||||
|
||||
@@ -302,7 +303,7 @@ Run 详情展示参数、协议版本、时间线、消息、任务、成果、
|
||||
- 创建自动化计划草稿。
|
||||
- 保存实验模板。
|
||||
- 创建记忆候选。
|
||||
- 追加确认 Run。
|
||||
- 追加确认执行。
|
||||
- 导出脱敏结果摘要。
|
||||
|
||||
不得自动启用新计划、覆盖现有计划、确认长期记忆、应用工作区 Patch 或扩大权限。
|
||||
|
||||
@@ -84,7 +84,7 @@ Observe
|
||||
|
||||
- 用户对回答、任务或 Supervisor 意见的显式反馈。
|
||||
- 用户对心跳报告或建议的显式反馈。
|
||||
- Task/Job Run 的成功与失败比较。
|
||||
- Task 执行的成功与失败比较。
|
||||
- 并行实验结论。
|
||||
- 回放评估发现的稳定差异。
|
||||
- 用户手动创建。
|
||||
|
||||
@@ -140,10 +140,10 @@ agent:{expertId}
|
||||
Conversation → Project → Global
|
||||
```
|
||||
|
||||
Task/Job Run:
|
||||
Task 执行(内部 Job/Run):
|
||||
|
||||
```text
|
||||
Run → Automation → Conversation(可选)→ Project → Global
|
||||
Run → Job → Task → Conversation → Project → Global
|
||||
```
|
||||
|
||||
实验 Run:
|
||||
@@ -232,7 +232,7 @@ type MemorySource =
|
||||
|
||||
- 用户明确“记住这个”。
|
||||
- 会话结束总结。
|
||||
- Task/Job Run 结束反思。
|
||||
- Task 执行结束反思。
|
||||
- 实验结论。
|
||||
- Supervisor 建议后用户采纳。
|
||||
- 智能心跳。
|
||||
@@ -481,7 +481,7 @@ Project 记忆与 Global 偏好冲突时:
|
||||
- [ ] 普通会话只读取 Global、当前 Project 和当前 Conversation 的允许记忆。
|
||||
- [ ] 智能心跳配置只能属于 Global 或 Main 已验证的一个、多个 Project。
|
||||
- [ ] 未来分区记忆完成独立设计前,不新增相关表、状态或检索行为。
|
||||
- [ ] Task/Job Run 只读取运行快照绑定的分区。
|
||||
- [ ] Task 执行只读取内部 Run 快照绑定的分区。
|
||||
- [ ] 实验 Run 不能读取其他 Run 的消息或记忆。
|
||||
- [ ] 每条非手动记忆都有可追溯来源。
|
||||
- [ ] 候选和被拒绝记忆不进入普通上下文。
|
||||
@@ -489,6 +489,6 @@ Project 记忆与 Global 偏好冲突时:
|
||||
- [ ] 冲突事实不被静默覆盖。
|
||||
- [ ] 当前有效事实可通过有效时间正确选择。
|
||||
- [ ] 上下文组装遵守各层和总字符预算。
|
||||
- [ ] UI 能显示某次 Run 实际使用的记忆。
|
||||
- [ ] UI 能在 Task 执行记录中显示实际使用的记忆,不把 Run 暴露为独立导航对象。
|
||||
- [ ] 删除或忘记后,文本、索引和缓存不再可检索。
|
||||
- [ ] Restricted 记忆不会自动生成或发送给外部 Embedding 服务。
|
||||
|
||||
@@ -197,6 +197,8 @@ type HeartbeatScope =
|
||||
- 多项目汇总后统一应用上限,不能按项目倍增预算。
|
||||
- 心跳结果默认不在系统通知中暴露私人正文。
|
||||
- 数据迁移必须使用 SQLite 事务,保留外键、级联删除和现有历史。
|
||||
- 心跳运行失败时,运行记录与配置的 `last_status` 必须在同一 SQLite 事务中
|
||||
更新;任一写入失败时两者一起回滚,不能留下半提交状态。
|
||||
|
||||
## 7. 实施状态与后续顺序
|
||||
|
||||
|
||||
@@ -28,9 +28,10 @@ GoodBuddy 的魔法笔记已经提供一种有价值的交互:用户持续写
|
||||
|
||||
## 2. 产品定义
|
||||
|
||||
会话监督是在明确范围和策略下,对普通 Conversation、Task、Job/Run 或 ExperimentRun
|
||||
的可见事件进行独立观察,产生带证据的评论、告警和人工介入请求。一个 Task 与唯一
|
||||
Conversation 一对一绑定;Job/Run 是内部执行和审计对象。
|
||||
会话监督是在明确范围和策略下,对普通 Conversation、Task 或 Experiment 的可见事件
|
||||
进行独立观察,产生带证据的评论、告警和人工介入请求。每个 Task 只关联一条 Conversation,
|
||||
一条 Conversation 可以承载多个 Task;Job/Run 是内部执行和审计对象,不作为当前 UI
|
||||
监督目标。
|
||||
|
||||
它不是:
|
||||
|
||||
@@ -55,7 +56,7 @@ Conversation 一对一绑定;Job/Run 是内部执行和审计对象。
|
||||
|
||||
## 4. 已确认的产品决策
|
||||
|
||||
1. 监督默认关闭,由用户对 Conversation、Task、Job/Run 或实验显式启用。
|
||||
1. 监督默认关闭,由用户对 Conversation、Task 或实验显式启用。
|
||||
2. 监督只读取用户可查看的消息、工具事件、状态、指标、成果摘要和目标。
|
||||
3. 不读取、推断或保存模型隐藏推理链。
|
||||
4. 每条重要判断必须引用具体消息、工具、步骤、指标或成果。
|
||||
@@ -100,9 +101,7 @@ Conversation 一对一绑定;Job/Run 是内部执行和审计对象。
|
||||
| --- | --- | --- |
|
||||
| 普通会话 | 用户消息、助手回答、引用、工具事件 | 质量和证据评论 |
|
||||
| Task | 目标、状态、Conversation、成果 | 偏离、循环和失败分析 |
|
||||
| Job/Run | 触发、步骤、协议、预算、审批、指标 | 无人值守或内部执行关注 |
|
||||
| 实验 Run | 协议、变量、指标、证据 | 协议一致性 |
|
||||
| 实验整体 | 各 Run 结算和比较 | 评估公平性与无结论提示 |
|
||||
| Experiment | 协议、变量、各候选执行、指标和证据 | 协议一致性、评估公平性与无结论提示 |
|
||||
|
||||
每个监督会话只能绑定一个主对象,并继承其项目范围。
|
||||
|
||||
@@ -254,7 +253,7 @@ type SupervisorDecision = {
|
||||
### 13.1 工作栏监督栏目评论流
|
||||
|
||||
监督是助手工作栏中固定且始终可访问的栏目,不是只在聊天页面出现的附属面板。栏目默认
|
||||
跟随当前会话,用户也可以固定到其他普通 Conversation、Task、Job/Run 或 ExperimentRun。
|
||||
跟随当前会话,用户也可以固定到其他普通 Conversation、Task 或 Experiment。
|
||||
切换页面不会改变固定目标;目标失效时必须显示修复状态,不能静默回到当前会话。
|
||||
|
||||
复用魔法笔记的体验方向:
|
||||
|
||||
@@ -12,5 +12,5 @@
|
||||
|
||||
## 阅读顺序
|
||||
|
||||
先阅读统一领域模型。其他三份文档不得重新定义 Task、Conversation、Job、Run 或 Subagent。
|
||||
先阅读统一领域模型。其他功能文档不得重新定义 Task、Conversation、Job、Run 或 Subagent。
|
||||
若实现与文档出现冲突,应先修正统一模型,再同步功能 PRD。
|
||||
|
||||
@@ -11,8 +11,8 @@
|
||||
|
||||
## 1. 产品定义
|
||||
|
||||
Goal Task 是围绕可验证结果持续推进的 Task。它仍然只有一个 Task Conversation;每轮观察、
|
||||
计划、行动和评估由 Job/Run 表达,不创建一串顶层 Task。
|
||||
Goal Task 是围绕可验证结果持续推进的 Task。它只关联一条 Conversation,但该 Conversation
|
||||
也可以承载其他 Task;每轮观察、计划、行动和评估由内部 Job/Run 表达,不创建一串顶层 Task。
|
||||
|
||||
## 2. 必要配置
|
||||
|
||||
@@ -35,8 +35,9 @@ Observe Job
|
||||
→ Complete, pause, revise or continue
|
||||
```
|
||||
|
||||
循环内的所有 Job 共享 Task Conversation。只有协调器把有意义的阶段进展写入消息时间线,
|
||||
避免每个内部步骤产生一条顶层任务或杂乱消息。
|
||||
循环内的所有 Job 通过所属 Task 写入同一关联 Conversation。只有协调器把有意义的阶段进展
|
||||
写入消息时间线,避免每个内部步骤产生一条顶层 Task 或杂乱消息。当前 UI 只显示 Goal Task
|
||||
及其聚合状态,不显示 Job/Run 层级。
|
||||
|
||||
## 4. 完成和无进展
|
||||
|
||||
@@ -47,7 +48,8 @@ Observe Job
|
||||
|
||||
## 5. 验收原则
|
||||
|
||||
- [ ] Goal Task 只有一个 Task Conversation。
|
||||
- [ ] Goal Task 只关联一条 Conversation,Conversation 可以承载其他 Task。
|
||||
- [ ] 循环步骤以 Job 表达,不创建顶层子 Task。
|
||||
- [ ] 当前 UI 不展示 Goal Task 内部 Job/Run 层级。
|
||||
- [ ] 没有成功标准和停止条件时不能启用。
|
||||
- [ ] 无进展和预算耗尽不会伪装为成功。
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
## 3. 并行模型
|
||||
|
||||
```text
|
||||
Task Conversation
|
||||
关联 Conversation
|
||||
└─ Coordinating Job
|
||||
├─ Parallel Job A
|
||||
├─ Parallel Job B
|
||||
@@ -41,7 +41,8 @@ Task Conversation
|
||||
- 每个 Job 有独立输入快照、状态、Run、预算和输出缓冲。
|
||||
- 并行 Job 不直接同时追加助手消息。
|
||||
- Aggregation Job 或 Task 协调器按确定顺序生成一条进展或结果消息。
|
||||
- 用户可以查看每个 Job 的详细活动,但主 Conversation 保持可读。
|
||||
- 用户可以按 Task 查看有界活动和聚合状态,但不选择或展开单个 Job;主 Conversation
|
||||
保持可读。
|
||||
|
||||
## 4. Subjob
|
||||
|
||||
@@ -78,21 +79,24 @@ queued → running → waiting_approval → completed
|
||||
|
||||
## 7. 界面
|
||||
|
||||
Task Conversation 显示:
|
||||
当前产品 UI 的对象层级止于 Task,不提供 Job/Subjob 树、独立页面或导航入口。
|
||||
|
||||
关联 Conversation 和 Task Center 只显示:
|
||||
|
||||
- 当前总体进展。
|
||||
- 并行 Job 数量和聚合状态。
|
||||
- 需要审批或用户输入的 Job。
|
||||
- 并行执行数量和聚合状态。
|
||||
- 需要审批或用户输入的 Task 状态。
|
||||
- 完成后的统一结果。
|
||||
|
||||
详细活动视图显示 Job 树、执行者、Runtime、耗时、预算、Run、错误和成果。Task Center 只显示
|
||||
Task 聚合状态,不展开 Job 树。
|
||||
活动与 Runtime 可以按 Task 显示执行者、工具、耗时、预算、错误、审批和成果事件,但不把
|
||||
Job、Subjob 或 Run 暴露为可选择、可展开或可操作的产品对象。内部标识只用于关联与审计。
|
||||
|
||||
## 8. 验收标准
|
||||
|
||||
- [ ] 并行 Job 共享所属 Task 的 Conversation。
|
||||
- [ ] 并行 Job 通过所属 Task 写入同一关联 Conversation。
|
||||
- [ ] Job 不创建顶层 Task。
|
||||
- [ ] 并行输出不会无序污染消息时间线。
|
||||
- [ ] Subjob 深度、并发、预算和输出有界。
|
||||
- [ ] Subagent 失败能够返回部分输出和明确状态。
|
||||
- [ ] 父级取消传播到所有活动子级。
|
||||
- [ ] 当前 UI 只展示到 Task,不显示 Job/Subjob/Run 层级。
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
| 版本 | 0.3 |
|
||||
| 日期 | 2026-08-19 |
|
||||
| 适用产品 | GoodBuddy 桌面端 |
|
||||
| 相关设计 | [通用助手工作栏与执行空间 PRD](../prd/assistant-experience/assistant-workbar-and-execution-spaces-prd.md)、[Task 与 Job 统一领域模型](../prd/task-and-job/task-and-job-model.md)、[智能心跳 PRD](../prd/smart-heartbeat/smart-heartbeat-prd.md) |
|
||||
| 相关设计 | [通用助手工作栏与执行空间 PRD](../prd/assistant-experience/assistant-workbar-and-execution-spaces-prd.md)、[Task 与 Job 统一领域模型](../prd/task-and-job/task-and-job-model.md)、[智能心跳 PRD](../prd/smart-heartbeat/smart-heartbeat-prd.md)、[全双工实时语音交互设计](../architecture/full-duplex-voice-design.md) |
|
||||
|
||||
## 1. 文档目标
|
||||
|
||||
@@ -202,9 +202,12 @@ GoodBuddy 应能够:
|
||||
|
||||
### 4.10 语音
|
||||
|
||||
- 首期提供按住说话和语音转文字。
|
||||
- 当前已提供点击开始、再次点击停止或到达 20 秒上限后停止的本地一次性语音听写。
|
||||
- 转写结果先进入可编辑输入框,不自动发送。
|
||||
- 后续增加流式语音对话和文本转语音。
|
||||
- 后续按[全双工实时语音交互设计](../architecture/full-duplex-voice-design.md)增加持续听说、
|
||||
Barge-in、流式文本转语音、本地与云端显式语音引擎。
|
||||
- 活动会话冻结引擎、Provider、模型、地域、数据位置和能力;引擎失败时明确停止或重试
|
||||
当前选择,不在本地/云端、原生/模块化、语音/文本之间静默降级。
|
||||
- 麦克风权限仅在可信主窗口、显式语音会话和用户操作后开启。
|
||||
- 音频转写完成后默认删除。
|
||||
|
||||
@@ -304,8 +307,9 @@ GoodBuddy 应能够:
|
||||
|
||||
### 阶段 5:语音
|
||||
|
||||
- 按住说话、转写适配器和可编辑转写。
|
||||
- 后续扩展实时语音与 TTS。
|
||||
- 以现有点击式一次性听写、本地转写适配器和可编辑转写作为实施基线。
|
||||
- 实现全双工会话契约、AudioWorklet 音频平面、Barge-in 和播放提交语义。
|
||||
- 接入本地模块化、本地原生和云端原生语音引擎;所有引擎均由用户显式选择,不静默降级。
|
||||
|
||||
### 阶段 6:专家与远程委派
|
||||
|
||||
|
||||
Reference in New Issue
Block a user