deepchat

GitHub

🐬DeepChat - A smart assistant that connects powerful AI to your personal world

AI Prompts & Endpoints

README

DeepChat 文档索引

本文档反映 2026-08-12 的当前代码。历史实施过程、已完成 issue 和一次性 SDD 通过 Git
历史查询,不再长期留在 docs/

当前必读

| 文档 | 用途 |
| --- | --- |
| ARCHITECTURE.md | main 进程模块、所有权、生命周期和依赖方向 |
| FLOWS.md | 启动、Session、Agent、Tool、Remote、Scheduler、Sync 和退出流程 |
| architecture/agent-system.md | DeepChat / ACP backend、Run、权限和 Subagent 合同 |
| architecture/session-management.md | Session 数据、binding、恢复、删除和 transfer |
| architecture/tool-system.md | Tool、MCP、Skill、Plugin 和权限边界 |
| architecture/memory-system.md | Memory 存储、检索、写入、隔离和维护 |
| architecture/tape-system.md | Tape、ViewManifest、回放和 Subagent lineage |
| architecture/event-system.md | typed route、typed event 和 main 内部调用规则 |
| architecture/shared-skills/spec.md | 全局 Skills、Agent binding、迁移和运行时授权合同 |
| guides/getting-started.md | 当前代码入口和本地开发命令 |
| guides/cli.md | 随包 CLI 的能力、生命周期、安全边界和 benchmark 合同 |
| guides/plugin-packaging.md | .dcplugin 打包、内置分发和 release 规则 |
| release-flow.md | 版本、分支、tag 和平台构建流程 |
| spec-driven-dev.md | SDD 分类、产物和清理规则 |

进行中的目标

新建或继续维护的 feature / architecture 以 plan.md 作为唯一执行清单;有界复杂 bug 可在
spec.md 中保留简短清单。历史 tasks.md 仅在对应目标下次更新时迁移:优先并入已有
plan.md;没有 plan 的单阶段复杂 bug 并入 spec.md,其他目标创建 plan.md。不为规范迁移
单独批量改写。

| 文档 | 状态 |
| --- | --- |
| architecture/local-control-plane/ | CLI V1 已实现;全量测试与生产构建通过,当前平台 unpack 受发布 runtime 下载网络阻塞 |
| features/acp-v1-reliability/ | ACP capability、auth、session lifecycle 与 diagnostics 待实施 |
| features/cua-cross-platform-computer-use/ | 已实现主体,等待 CI platform matrix 验证 |
| features/mcp-oauth-authentication/ | 已实现主体,等待真实 OAuth smoke |
| architecture/mcp-v2-protocol/ | v2 与 legacy wire 已落地,等待外部互操作验证及兼容窗口结束 |
| features/mcp-apps/ | MCP Apps host 已落地,等待 packaged sandbox 与外部 App 验证 |
| features/mcp-authorization-extensions/ | 授权扩展已落地,等待受控 OAuth 与安全存储验证 |
| features/mcp-tasks/ | Tasks 被上游公开 v2 adapter 阻塞,未实现、未宣称支持 |
| architecture/chat-scroll-ownership/ | chat viewport ownership、windowing 与真实 Chromium 验证进行中 |
| architecture/memory-quality-gates-and-observability/ | retrieval artifact upload 待完成 |
| architecture/memory-vector-store-v2/ | v2 已落地,保留 migration window 后的 VSS removal follow-up |
| architecture/main-process-structured-logging/ | Main JSONL、持久日志隐私边界与 Agent 并发诊断已落地;本地 SQLite ABI 不匹配导致部分 native tests 跳过,详见任务清单 |
| issues/chat-history-search-scroll-coordinates/ | 等待 Electron/macOS 物理滚动验证 |

保留的产品合同

以下 feature spec 仍承担跨模块产品或扩展合同,不是实施历史:

- Provider Runtime
- DeepChat Skills Management
- Plugins Hub
- Complete Directory Management
- MCP Permission Ownership

机器读取基线

| 文件 | 使用方 |
| --- | --- |
| agent-system-layered-runtime-baseline.json | architecture baseline generator test 的 canonical fixture |
| main-kernel-bridge-register.json | architecture baseline generator 的 retired boundary register |

其它 dependency、scoreboard、zero-inbound 报表由 pnpm run architecture:baseline 按需生成,
不作为长期文档。

文档保留规则

- 当前事实写入核心 architecture、flow 或 guide,不再保留重复的 implemented SDD。
- 完成的 feature / architecture 删除 plan.md 和遗留 tasks.md;只有维护合同需要时保留
压缩后的 spec.md
- 已修复 issue 直接删除;历史由 Git 保存,必要的持久化回归由测试保护。
- active goal、plan.md 中的未完成步骤、遗留未完成 task 和 [NEEDS CLARIFICATION] 不得在
cleanup 中删除。
- 文档引用的路径必须存在;旧实现只通过 git log / git show 查询。

---

ARCHITECTURE

DeepChat 当前架构概览

本文档描述 2026-07-16 的 main 进程实际结构。旧的全局 Presenter
LifecycleManager、全局 EventBus 和业务模块查找入口已经删除。

总体结构

mermaid
flowchart TD
Renderer["Renderer"] --> Preload["Preload bridge"]
Preload --> Contracts["shared typed routes / events"]
Contracts --> RouteMaps["各模块 route map"]
RouteMaps --> Modules["负责该行为的模块"]

App["App composition"] --> Platform["Platform / Settings / Data"]
App --> Capabilities["Provider / Tool / MCP / Skill / Plugin / Memory / Knowledge / Workspace"]
App --> Agent["Agent: DeepChat / ACP"]
App --> Session["Session"]
App --> Entries["Desktop / Remote / Scheduler / Deeplink"]

Entries --> Session
Session --> Agent
Agent --> Capabilities
Capabilities --> Platform

src/main/app/composition.ts 是唯一的组合入口。它创建模块、传入明确依赖、注册 route、
排定启动与停止顺序,但不导出模块列表,也不提供按名称查找模块的方法。

依赖方向是:

text
App composition
-> Desktop / Remote / Scheduler / Deeplink
-> Session
-> Agent runtime
-> Provider / Tool / MCP / Skill / Plugin / Memory / Knowledge / Workspace
-> Platform / Settings / Data

下层模块不能反向读取 App、Desktop、Remote 或 Scheduler。需要通知 renderer 时,App 在创建模块时
传入有类型的发送函数。

生命周期

App

src/main/appMain.ts 负责 Electron 进程入口、single-instance、deeplink 缓存和退出请求。
src/main/app/mainProcess.ts 负责数据库解锁、连接、迁移和启动失败清理。
src/main/app/composition.ts 负责创建、连接、启动和停止业务模块。

startMainProcess() 只返回 MainProcessControl。它只能聚焦主窗口、处理 deeplink、清理权限、
确认退出、查询主窗口和停止 main 进程,不能读取业务模块。

Session

src/main/session/ 负责可长期保存的 Session 规则:

- lifecycle.ts:创建、草稿、关闭和基础生命周期;
- turn.ts:发送、排队、停止和交互回复;
- assignment.ts:Agent、model、project、fork 和 subagent 结果处理;
- query.ts:不会偷偷载入 Agent 的查询;
- deletion.ts:删除顺序和两类 backend 清理;
- data/:transcript、Tape、pending input、settings、search 和 trace。

窗口与 Session 的绑定不在 Session 数据中,由 DesktopSessionBinding 负责。窗口关闭不会默认删除
Session,也不会默认停止仍由其他入口使用的任务。

Agent

AgentManager 根据 AgentDescriptor.kind 选择两套独立实现:

- DeepChatDeepChatAgentRuntimeDeepChatAgentInstanceDeepChatLoopEngine
- ACPAcpAgentRuntimeAcpAgentInstance 和 ACP protocol runtime。

一个已载入的 Session 只有一个对应 instance。每次 Turn 使用独立 Run 保存取消信号、provider round、
request sequence 和临时输出状态。Session 拥有长期数据,Agent runtime 只通过窄接口读写这些数据。

模块职责

| 模块 | 位置 | 负责内容 |
| --- | --- | --- |
| App | src/main/app/ | 进程启动、退出、维护状态、组合依赖 |
| Desktop | src/main/desktop/ | window、tab、tray、shortcut、floating、browser、renderer binding |
| Session | src/main/session/ | Session 生命周期、Turn、查询、长期数据和删除规则 |
| Agent | src/main/agent/ | Agent catalog、backend 选择、DeepChat/ACP instance 和执行 |
| Provider | src/main/provider/ | Provider/model 配置、实例、请求和认证 |
| Tool | src/main/tool/ | Tool catalog、执行、权限和本地 Agent tools |
| MCP | src/main/mcp/ | MCP 配置、server/client 生命周期和 MCP 调用 |
| Skill | src/main/skill/ | Skill 文件、扫描、同步、选择和贡献 |
| Plugin | src/main/plugin/ | Plugin package、安装状态和能力登记 |
| Memory | src/main/memory/ | 长期记忆、检索、写入、索引和后台维护 |
| Knowledge | src/main/knowledge/ | 内置知识库、切片、索引和检索 |
| Workspace / File | src/main/workspace/src/main/file/ | Workspace 授权、文件树、搜索、转换和临时文件 |
| Remote | src/main/remote/ | channel runtime、endpoint binding、远程命令和结果发送 |
| Scheduler | src/main/scheduler/ | Cron job、run、delivery 和 detached Session |
| Settings | src/main/settings/、各模块 settings.ts | 底层设置存储和各模块自己的配置解释 |
| Data | src/main/data/、各模块 data/ | SQLite 连接、schema,以及各模块自己的 table 访问 |

Desktop 内仍有 WindowPresenterTabPresenter 等历史类名。它们只是 Desktop 模块内部的具体实现,
不是全局入口,也不能被业务模块用来查找其他能力。

Desktop 的平台合同:

- app-scoped 命令使用 application menu accelerator;globalShortcut 只用于真正的全局窗口显示/隐藏;
- primary app chrome 和列表行使用桌面 cursor 语义,内容 hyperlink 保留 link affordance;
- chat search、message jump 和 app chrome 默认使用 immediate/native scroll,不启用全局 smooth scroll;
- macOS window material 按 main/settings/window state 设置,Windows/Linux 保持各自平台选项;
- 修改 shortcut settings 后重新注册 menu accelerator,不创建第二套 renderer shortcut owner。

数据边界

MainDatabase 只负责连接、事务、schema、诊断、修复、备份和 reopen。业务 table 由各模块自己的
database 对象取得。长期运行对象不能缓存一次打开数据库时创建的旧 table;数据库维护完成后,
它们通过稳定的 database owner 读取当前连接。

通用 SettingsStoreSecretStore 只提供底层存储。Provider、MCP、Agent、Desktop、Sync、
Knowledge、Hook、Skill、Project 和 Upgrade 分别解释自己的配置,不通过一个通用 Config 业务入口。

通信边界

- Renderer 调用使用 src/shared/contracts/ 中的 typed route。
- 各模块在自己的 routes.ts 创建 route map;App 统一注册并拒绝重名。
- 发给 renderer 的通知使用 typed event envelope。
- main 内部业务操作使用直接调用,不通过全局 event bus。
- route 只做通信适配;event 只表示已经发生的事实。

验证

模块行为由 typecheck、lint 和对应的 unit/integration tests 验证。Agent legacy boundary 仍由
scripts/agent-cleanup-guard.mjs 做窄范围检查;其余依赖方向在模块测试和 code review 中维护,不再运行
全仓库启发式扫描器。

详细合同见 Agent 系统
Session 管理Tool 系统
Memory 系统Tape 系统
事件系统。已完成的 main-process realignment 实施记录由 Git 历史保存。

---

FLOWS

DeepChat 当前核心流程

本文档描述 2026-07-16 的实际流程。旧 Presenter、通用 lifecycle hook 和全局 EventBus
不再属于当前流程。

1. main 进程启动

mermaid
sequenceDiagram
participant Entry as appMain.ts
participant Main as app/mainProcess.ts
participant DB as Database
participant App as app/composition.ts
participant Desktop as Desktop

Entry->>Entry: single-instance / deeplink cache
Entry->>Main: startMainProcess()
Main->>Main: create splash and settings stores
Main->>DB: unlock, open, migrate
Main->>Main: migrate config storage and register protocols
Main->>App: createMainProcessControl(dependencies)
App->>App: create modules and connect narrow dependencies
App->>App: register module route maps
App->>Desktop: create first main window
App->>App: start shortcut, tray, Scheduler and Memory maintenance
App->>App: schedule deferred/background work
App-->>Main: MainProcessControl
Main->>Main: close splash

首个窗口之前必须完成数据库、配置迁移、route 注册和 ACP registry migration。Skill 扫描、MCP、
Remote、Provider warmup、legacy import 和统计回填在窗口可用后调度。

2. 创建 Session 并发送消息

mermaid
sequenceDiagram
participant R as Renderer / Remote / Scheduler
participant Route as Module route or entry service
participant Session as Session Lifecycle / Turn
participant Manager as AgentManager
participant Backend as DeepChat or ACP backend

R->>Route: create or send
Route->>Session: narrow operation
Session->>Manager: resolve descriptor and session handle
Manager->>Backend: choose by descriptor.kind
Session->>Backend: initialize / send / cancel / snapshot
Backend-->>R: persisted result and typed renderer event

Desktop、Remote 和 Scheduler 共用同一套 Session 生命周期。Scheduler 每次运行创建新的 detached
Session;Remote 保存自己的 endpoint binding;Desktop 只保存 renderer binding。

3. DeepChat 执行

mermaid
flowchart TD
Send["SessionTurn.send"] --> Instance["DeepChatAgentInstance"]
Instance --> Prepare["读取 Session 数据并准备 prompt"]
Prepare --> Run["创建独立 LoopRun"]
Run --> Provider["ProviderRuntime.streamChat"]
Provider --> Output["更新 message projection"]
Output --> Tool{"有 Tool 调用?"}
Tool -->|否| Settle["提交结果并结束 Turn"]
Tool -->|是| Execute["ToolService 执行"]
Execute --> Interaction{"需要用户交互?"}
Interaction -->|是| Pause["保存交互并暂停"]
Interaction -->|否| Tape["写入 Tape tool fact"]
Tape --> Provider
Pause --> Resume["最后一项完成后创建新的 resume Run"]
Resume --> Provider

Provider、Tool、Skill、Memory 和 Session data 都通过创建时传入的必需接口使用。DeepChat runtime
不能从 App、Routes、Desktop、Remote 或 Scheduler 查找依赖。

- generationSettings 在 Session 创建、草稿和 active Session 中统一传递,包括 system prompt、
temperature、topP、max tokens、reasoning effort 和 verbosity。
- providerRoundCount 按 outer round 递增,requestSeq 按实际 Provider attempt 递增;strict retry
不会伪造新的 outer round。
- Memory prompt contribution 必须等待结果、清理内容、限制大小并允许失败;terminal extraction 在后台
执行,并保持 epoch、cursor 和 fence 约束。
- TapeToolFactWriter.appendToolFact 在 message projection 完成后写 terminal tool call/result;
写入失败不影响当前回复完成。

4. ACP 执行

mermaid
flowchart LR
Session["Session"] --> Manager["AgentManager"]
Manager --> Kind{"descriptor.kind"}
Kind -->|acp| Direct["Direct ACP backend"]
Direct --> Runtime["AcpAgentRuntime"]
Runtime --> Process["ACP process / protocol session"]
Process --> Projection["Session message / Tape projection"]
Kind -->|deepchat| Deep["DeepChat backend"]

Direct ACP 不进入 DeepChatLoopEnginekind=deepchat + providerId=acp 仍是独立的兼容组合,
它使用 DeepChat loop,并把 ACP 当作 Provider。

5. Tool、MCP、Skill 和 Plugin

mermaid
flowchart LR
Agent["DeepChat runtime"] --> Tool["ToolService"]
SessionSkills["Session selected Skill names"] --> Scope["Agent Skill scope"]
AgentCatalog["Current Agent valid enabled catalog"] --> Scope
Scope --> Skill["SkillService scoped snapshot"]
Tool --> Local["Local Agent tools"]
Tool --> MCP["McpService"]
Tool --> Permission["Permission services"]
Skill --> Tool
Plugin["PluginService"] --> Skill
Plugin --> MCP

Tool 负责 catalog、权限预检查和执行路由。MCP 负责 server/client 生命周期。Skill 负责 per-Agent
物理 Skill root 和 catalog。Run 只接收 Session persisted selection ∩ current Agent valid enabled catalog
的闭合快照;transfer、rebind 和 Subagent entry 都重新计算该交集,缺失 manual Agent scope 不回退到
built-in deepchat。Plugin 只登记 package 提供的能力,不接管 MCP、Skill 或 Tool 的运行状态。

内部或外部 Agent Skill 导入必须显式指定 target Agent,先 preview 再由 main 重新验证并 staging copy。
导入结果是目标 root 下的独立快照,不建立 live link;source 后续修改或删除不会传播到 target。

模型只能看到 tape_searchtape_context。Subagent 完成后,父 Session 保存指向 child Tape
固定 head 的 link;查询时通过明确的 linked Tape view 读取,不把 child entries 复制到父 Tape。
subagent_orchestrator 只在当前 Agent policy 开启且存在有效 slot 时提供,Subagent child 不能继续递归
创建 Subagent。

6. renderer binding

mermaid
sequenceDiagram
participant Window as Desktop window/tab
participant Binding as DesktopSessionBinding
participant Query as SessionQuery
participant Runtime as Agent runtime

Window->>Binding: activate(webContentsId, sessionId)
Binding->>Query: read Session and messages
Query-->>Window: projection
Window->>Binding: deactivate or destroy
Binding->>Binding: remove renderer binding only
Note over Runtime: Session and running task are not deleted by window close

普通列表、历史和 binding 查询不会载入 Agent instance。只有执行、完整 restore 或明确的 backend
设置操作可以 hydrate runtime。

7. 数据库维护

mermaid
sequenceDiagram
participant Route as Sync / Database Security route
participant App as App maintenance
participant Entry as Remote / Scheduler
participant Runtime as Session / Memory
participant DB as MainDatabase

Route->>App: runDatabaseMaintenance(operation)
App->>Entry: stop new remote requests and scheduled runs
App->>Runtime: fence Memory and suspend Session runtimes
App->>DB: checkpoint and close
App->>DB: import or encryption operation
App->>DB: reopen
App->>Runtime: resume Memory maintenance
App->>Entry: restart Hook, Scheduler and Remote

维护期间新的 chat.sessions.remoteControl.cronJobs. route 会被拒绝。
恢复失败时 App 进入 failed 并停止,不在关闭了一半的数据库上继续运行。

8. Remote

mermaid
sequenceDiagram
participant C as Remote channel
participant R as RemoteService
participant S as Session ports
participant A as AgentManager
participant D as DeliveryService

C->>R: authenticated command / message
R->>R: resolve endpoint binding and command
R->>S: create, restore, send, cancel or interact
S->>A: resolve typed backend
A-->>S: stream / terminal projection
S-->>R: typed result
R->>D: render and deliver to channel

Remote 负责 channel runtime、endpoint binding、授权、命令解析和结果发送;它不拥有 Session 或 Agent
状态。/agent 只通过 Session assignment 选择可用 Agent。Feishu/Lark scan auth 的 begin/poll/cancel、
host 选择和 open_id pairing 保持在 Remote channel adapter 内,token 和 pairing secret 不进入 renderer
或聊天文本。Window 关闭不终止 Remote-bound Session。

9. Scheduler

Scheduler 查询到期 job 后,为每次 run 创建新的 detached regular Session:

text
find due job
-> acquire run identity and timeout
-> create detached Session with saved Agent/settings/project
-> SessionTurn.send
-> wait for terminal result or cancel
-> persist run status
-> optional Remote delivery
-> compute next run

Job、run、retry、timeout 和 delivery 由 src/main/scheduler/ 负责。Scheduler 使用与 Desktop/Remote 相同
的 Session lifecycle,不直接构造 Agent runtime,也不复用上次 run 的 Session。Database maintenance 和
shutdown 会先停止接受新 run,再等待或取消已接收 run。

10. Sync 和导入

本地备份、数据库导入和 S3-compatible cloud sync 由 src/main/sync/ 发起,并统一包在 App database
maintenance 中。Cloud flow 为:读取 SyncSettings 中的 endpoint/bucket/path/credential,生成或读取加密
数据库备份,上传/下载对象,校验完成后再替换本地数据。Secret 只保存在 main process 的 secret store,
renderer 只接收脱敏状态。

导入成功后重新打开数据库,各模块通过稳定 database owner 读取新 table;长期运行对象不能继续缓存
旧连接产生的 table。任何 close/import/reopen 失败都会让 App 进入 failed 并停止,不执行半恢复。

11. 退出

before-quit 先询问 Knowledge 是否允许退出。确认后,MainProcessControl.stop() 只运行一次,
并按明确顺序停止:

text
cancel startup work
-> stop Scheduler / Remote / Hook
-> suspend Session runtimes
-> stop Plugin / MCP / browser / Desktop resources
-> stop Workspace / Skill / watcher / exec host
-> fence and drain Memory
-> stop Knowledge / Provider / ACP
-> close SQLite
-> destroy shortcut / notification / tray

更新安装复用同一条停止路径。数据重置和 App restart 也先完成停止,再由 Device 执行最终操作。

---

Design System

DeepChat Design System — CSS 令牌

src/renderer/src/assets/style.css 提取,基于 Tailwind CSS v4 @theme inline + CSS 自定义属性。

颜色详见「一~九」,排版 / 圆角 / 模糊 / 层级 / 动效 / 布局见「十~十五」,

系统化机制(色阶计算、Feedback、状态、浮层、密度、Token 契约)见「十六~二十一」。

---

一、核心色阶

1.1 Base 灰度(11 阶)

| Token | Light | HSL |
|-------|-------|-----|
| base-50 | 纯白 | hsl(0 0% 100%) |
| base-100 | 近白 | hsl(0 0% 98.1%) |
| base-200 | 浅灰 | hsl(0 0% 93.4%) |
| base-300 | 灰 | hsl(0 0% 85.9%) |
| base-400 | 中灰 | hsl(0 0% 67.1%) |
| base-500 | 半灰 | hsl(0 0% 48.9%) |
| base-600 | 深灰 | hsl(0 0% 36.5%) |
| base-700 | 暗灰 | hsl(0 0% 28.7%) |
| base-800 | 深暗 | hsl(0 0% 19.5%) |
| base-900 | 近黑 | hsl(0 0% 13.2%) |
| base-950 | 极暗 | hsl(0 0% 12.2%) |
| base-1000 | 纯黑 | hsl(0 0% 1.2%) |

1.2 Primary 蓝色(11 阶)

| Token | Hue | Lightness |
|-------|-----|-----------|
| primary-50 | 208.6° | 94.3% |
| primary-100 | 210° | 88.6% |
| primary-200 | 210° | 80% |
| primary-300 | 209.7° | 71.6% |
| primary-400 | 209.8° | 62.9% |
| primary-500 | 209.8° | 54.3% |
| primary-600 (主色) | 209.9° | 42.9% |
| primary-700 | 209.8° | 34.3% |
| primary-800 | 209.6° | 27.8% |
| primary-900 | 210° | 21.6% |
| primary-950 | 209.6° | 15.1% |
| primary-1000 | 210° | 8.6% |

1.3 Zinc 辅助灰度(10 阶)

| Token | HSL |
|-------|-----|
| zinc-50 | hsl(0 0% 98%) |
| zinc-100 | hsl(240 4.8% 95.9%) |
| zinc-200 | hsl(240 5.9% 90%) |
| zinc-300 | hsl(240 4.9% 83.9%) |
| zinc-400 | hsl(240 5.5% 64.3%) |
| zinc-500 | hsl(240 4.2% 46.3%) |
| zinc-600 | hsl(240 5.7% 34.1%) |
| zinc-700 | hsl(240 5.3% 26.1%) |
| zinc-800 | hsl(240 3.7% 15.9%) |
| zinc-900 | hsl(240 5.9% 10%) |
| zinc-950 | hsl(240 10% 3.9%) |

---

二、语义色(shadcn 风格)

2.1 Light 模式

| Token | 值 | 用途 |
|-------|-----|------|
| background | #fff | 页面背景 |
| foreground | hsl(0 0 15% / 1) | 正文文字 |
| card | #fff | 卡片背景 |
| card-foreground | hsl(0 0 15% / 1) | 卡片文字 |
| popover | #fff | 弹出层背景 |
| popover-foreground | hsl(0 0 15% / 1) | 弹出层文字 |
| primary | hsl(210 100% 43%) | 主色 |
| primary-foreground | #fff | 主色上文字 |
| secondary | hsl(0 0 0% / 0.05) | 次要色 |
| secondary-foreground | hsl(0 0 15% / 0.5) | 次要色文字 |
| muted | hsl(0 0 0% / 0.03) | 柔和背景 |
| muted-foreground | hsl(0 0 15% / 0.5) | 柔和文字 |
| accent | hsl(0 0 15% / 0.05) | 强调背景 |
| accent-foreground | hsl(0 0 15% / 0.8) | 强调文字 |
| destructive | hsl(0 84.2% 60.2%) | 危险/删除 |
| destructive-foreground | hsl(0 0% 98%) | 危险上文字 |
| border | 默认 base-200hsl(0 0% 93.4%) | 边框 |
| input | hsl(0 0 10% / 0.1) | 输入框边框 |
| ring | primary-600hsl(209.9 100% 42.9%) | 聚焦环 |
| chart-1 ~ chart-5 | 对应 primary-600/200/400/300/100 | 图表色 |

2.2 Sidebar 侧边栏

| Token | Light | Dark |
|-------|-------|------|
| sidebar | #fff | base-900 |
| sidebar-foreground | base-800 | base-200 |
| sidebar-primary | primary-600 | (继承) |
| sidebar-primary-foreground | #fff | (继承) |
| sidebar-accent | base-50 | base-800 |
| sidebar-accent-foreground | base-800 | base-200 |
| sidebar-border | base-200 | base-800 |
| sidebar-ring | primary-600 | (继承) |

2.3 Dark 模式覆盖

| Token | Dark 值 |
|-------|---------|
| background | hsl(0 0 5% / 1) |
| foreground | base-200 |
| card | #121212hsl(0 0% 7.1%) |
| card-foreground | base-200 |
| popover | #121212hsl(0 0% 7.1%) |
| popover-foreground | #fff |
| secondary | hsl(0 0 100% / 0.05) |
| secondary-foreground | base-50 |
| muted | hsl(0 0 100% / 0.03) |
| muted-foreground | hsl(0 0 100% / 0.5) |
| accent | hsl(0 0 100% / 0.1)(Dashboard interactive-card hover 基准) |
| accent-foreground | hsl(0 0 100% / 0.8) |
| destructive | hsl(0 62.8% 30.6%) |
| border | base-800 |
| input | base-700 |

---

三、自定义语义 Token(新主题体系)

3.1 背景类

| Token | Light | Dark |
|-------|-------|------|
| bg-accent | hsl(0 0 15% / 0.05) | hsl(0 0 100% / 0.05) |
| bg-window-background | hsl(0 0 95% / 0.8) | hsl(0 0 5% / 0.5) |
| bg-background-70 | hsl(0 0 100% / 0.7) | hsl(0 0 15% / 0.7) |
| bg-card | hsl(0 0 100%) | hsl(217 6% 15%) |
| bg-muted | (继承 muted) | hsl(0 0 100% / 0.03) |
| bg-primary | hsl(210 100% 43%) | (相同) |
| bg-primary-70 | hsl(210 100% 43% / 0.7) | (相同) |
| bg-primary-700 | hsl(210 100% 37%) | (相同) |

3.2 文字类

| Token | Light | Dark |
|-------|-------|------|
| text-foreground | hsl(0 0% 14%) | hsl(0 0 100%) |
| text-primary | hsl(210 100% 43%) | (相同) |
| text-primary-foreground | hsl(0 0 100%) | (相同) |
| text-accent-foreground | hsl(0 0 15% / 0.8) | hsl(0 0 100% / 0.8) |
| text-secondary-foreground | hsl(0 0 15% / 0.5) | hsl(0 0 100% / 0.5) |
| text-muted-foreground | hsl(0 0 15% / 0.2) | hsl(0 0 100% / 0.2) |
| text-green | hsl(142 71% 45%) | (相同) |
| text-red | hsl(0 73% 58%) | (相同) |
| text-skeleton-primary | hsl(0 0 15% / 0.05) | hsl(0 0 100% / 0.05) |

3.3 边框 / 阴影 / 窗口

| Token | Light | Dark |
|-------|-------|------|
| border | hsl(0 0 0% / 0.05) | hsl(0 0 100% / 0.05) |
| border-window-outside | hsl(0 0 21% / 0.25) | hsl(0 0 0% / 0.4) |
| shadow-card | hsl(0 0 0% / 0.1) | hsl(0 0 0% / 0.4) |
| window-inner-border | hsl(0 0 100% / 0.5) | hsl(0 0 100% / 0.05) |

3.4 语法高亮

| Token | Light | Dark |
|-------|-------|------|
| syntax-bold | hsl(227 76% 41%) | blue-500 |
| syntax-comment | hsl(218 12% 64%) | gray-400 |
| syntax-const | hsl(176 100% 24%) | emerald-300 |
| syntax-property | hsl(221 97% 54%) | blue-100 |
| syntax-symbol | hsl(0 0 15%) | hsl(0 0 100% / 0.8) |
| syntax-variable | blue-800 | blue-300 |

---

四、通知色(Notifications)

| 类型 | Light 背景 | Light 文字 | Dark 背景 | Dark 文字 |
|------|-----------|-----------|----------|----------|
| Success | hsl(142 48% 96%) | hsl(142 48% 28%) | hsl(142 22% 13%) | hsl(142 38% 72%) |
| Info | hsl(210 58% 96%) | hsl(210 52% 30%) | hsl(210 24% 14%) | hsl(210 42% 74%) |
| Warning | hsl(42 72% 95%) | hsl(38 58% 28%) | hsl(42 24% 13%) | hsl(42 48% 72%) |
| Error | hsl(0 58% 96%) | hsl(0 48% 34%) | hsl(0 24% 14%) | hsl(0 44% 75%) |

---

五、用量指示色(Usage)

| Token | Light | Dark |
|-------|-------|------|
| usage-low | hsl(142 71% 45%) | hsl(142 40% 60%) |
| usage-mid | hsl(48 96% 53%) | hsl(48 80% 60%) |
| usage-high | hsl(0 72% 51%) | hsl(0 70% 65%) |

---

六、shadcn Theme 备用色系(theme-

| Token | 值 |
|-------|-----|
| theme-background | white |
| theme-foreground | slate-950 |
| theme-card | white |
| theme-card-foreground | slate-950 |
| theme-popover | white |
| theme-popover-foreground | slate-950 |
| theme-primary | blue-600 |
| theme-primary-foreground | slate-50 |
| theme-secondary | slate-100 |
| theme-secondary-foreground | slate-900 |
| theme-muted | slate-100 |
| theme-muted-foreground | slate-500 |
| theme-accent | slate-100 |
| theme-accent-foreground | slate-900 |
| theme-destructive | red-600 |
| theme-destructive-foreground | slate-50 |
| theme-border | slate-200 |
| theme-input | slate-200 |
| theme-ring | slate-950 |

---

七、完整 Tailwind 调色板

项目通过 @theme inline 注册了完整 Tailwind 色板(每色 50-950 共 11 阶),涵盖:

| 色系 | 说明 |
|------|------|
| slate | 蓝灰 |
| gray | 中性灰 |
| zinc | 暖灰 |
| neutral | 纯灰 |
| stone | 暖石色 |
| red | 红 |
| orange | 橙 |
| amber | 琥珀 |
| yellow | 黄 |
| lime | 青柠 |
| green | 绿 |
| emerald | 翡翠 |
| teal | 青 |
| cyan | 青蓝 |
| sky | 天蓝 |
| blue | 蓝 |
| indigo | 靛蓝 |
| violet | 紫罗兰 |
| purple | 紫 |
| fuchsia | 品红 |
| pink | 粉 |
| rose | 玫瑰 |

---

八、使用方式

Tailwind 类名


html
<div class="bg-background text-foreground">...</div>
<div class="bg-primary text-primary-foreground">...</div>
<div class="border-border">...</div>


<div class="bg-base-100 text-base-800">...</div>
<div class="bg-primary-600 text-primary-50">...</div>


<div class="bg-window-background text-text-foreground">...</div>
<div class="border-window-inner-border">...</div>

CSS 自定义属性


css
.my-component {
background: var(--bg-card);
color: var(--text-foreground);
border: 1px solid var(--border);
}

---

九、设计决策记录

1. Base 色阶 使用 0% 饱和度灰度(纯中性),作为主背景体系。
2. Primary 蓝色 色相锁定在 ~210°,饱和度 72-100%,作为品牌主色。
3. 双主题体系并存:shadcn 语义色(background/foreground 等)+ 自定义 Token(bg-/text- 等),自定义 Token 为实际组件使用的主要体系。
4. Dark 模式 通过 .dark / [data-theme='dark'] 选择器触发,同时保留 prefers-color-scheme 媒体查询作为系统级兜底。
5. 暗色表面与 hover:所有表面(包括 shadcn 消费的 card / popover)以 #121212 为基准,禁止引入 20% 灰色表面;交互 hover 统一消费 accent,其暗色值为 foreground 的 10% 透明度,与 Dashboard 的 interactive-card 一致。必须在主题 token 层调整,禁止修改 src/shadcn 源码或在组件中硬编码颜色。
6. 通知色 使用独立的 dc-notification-* 命名空间,与 shadcn 语义色解耦。
7. 语法高亮色 在 Light/Dark 下分别使用硬编码 HSL 和 Tailwind 色板引用。

---

十、排版 Token

| Token | 值 | 用途 |
|-------|-----|------|
| --dc-font-family | Geist, Noto Sans, ui-sans-serif, system-ui, sans-serif | 正文字体栈(@font-face 内置 Geist) |
| --dc-code-font-family | JetBrains Mono, Fira Code, Menlo, Monaco, Consolas, monospace | 代码 / 等宽(code pre kbd samp .font-mono) |
| --dc-font-scale | 1html.text-sm=0.875 · base=1 · lg=1.125 · xl=1.25 · 2xl=1.5) | 全局字号缩放 |
| --text-weight | 400.font-text) | 正文默认字重 |
| --display-weight | 700.font-display) | 标题 / 强调字重 |

常用字号阶梯(Tailwind 默认):

| 类 | 大小 | 行高 |
|----|------|------|
| text-xs | 12px | 16px |
| text-sm | 14px | 20px |
| text-base | 16px | 24px |
| text-lg | 18px | 28px |
| text-xl | 20px | 28px |
| text-2xl | 24px | 32px |

---

十一、圆角与模糊

圆角(语义级)

| Token | 计算 | 值 |
|-------|------|-----|
| --radius-sm | calc(var(--radius) - 4px) | 8px |
| --radius-md | calc(var(--radius) - 2px) | 10px |
| --radius-lg | var(--radius) | 12px |
| --radius-xl | calc(var(--radius) + 4px) | 16px |

基准 --radius: 0.75rem(12px)。控件用 sm/md,容器用 lg,浮层用 xl。

模糊(玻璃效果,三档语义值)

| Token | 值 | 工具类 | 适用 |
|-------|-----|--------|------|
| --dc-blur-soft | 8px | .dc-blur-soft | 搜索条、状态浮条 |
| --dc-blur-panel | 16px | .dc-blur-panel | 粘性顶栏、输入器 |
| --dc-blur-overlay | 26px | .dc-blur-overlay | Spotlight / Agent 计划浮层 |

优先使用上述工具类,不要随手写 backdrop-blur-* 临时值。

---

十二、层级(z-index 阶梯)

| Token | 值 | 用途 |
|-------|-----|------|
| --dc-z-base | 0 | 页面内容 |
| --dc-z-sticky | 10 | 粘性顶栏、tab 栏 |
| --dc-z-float | 20 | 浮动元素、滚动 pill |
| --dc-z-sidepanel | 30 | 侧滑面板(全屏) |
| --dc-z-popover | 50 | Popover / Tooltip |
| --dc-z-spotlight | 90 | 系统级浮层 |
| --dc-z-modal | 100 | Dialog |
| --dc-z-toast | 1000 | Toast |

优先 z-[var(--dc-z-*)];tooltip/popover 用 --dc-z-popover,禁止使用 --dc-z-toast

---

十三、动效 Token

| Token | 值 | 用途 |
|-------|-----|------|
| --dc-motion-fast | 140ms | hover、轻量内容切换 |
| --dc-motion-default | 220ms | 面板开合、toggle |
| --dc-motion-slow | 320ms | 大型浮层出入 |
| --dc-ease-out-express | cubic-bezier(0.16, 1, 0.3, 1) | 快起→精确落点 |
| --dc-ease-out-soft | cubic-bezier(0.22, 1, 0.36, 1) | 柔和收尾 |

内置动画:accordion-down/up(fast + soft)、collapsible-down/up(default + express)、
pulse(2.4s 无限)、loading-shimmer(1.6s 线性)。

prefers-reduced-motion 下全部动画压缩为 1ms 且仅执行一次;主题切换瞬间通过

.dc-theme-switching 关闭所有过渡避免重绘卡顿。

---

十四、滚动条与阴影

滚动条(常驻导航线)

| 状态 | 浅色 | 深色 |
|------|------|------|
| 宽/形状 | 8px · rounded-full · 轨道透明 | 同左 |
| thumb | rgba(107, 114, 128, 0.55) | rgba(148, 163, 184, 0.45) |
| thumb hover | rgba(148, 163, 184, 0.8) | rgba(148, 163, 184, 0.7) |

阴影(最高只到 lg)

| 等级 | 用途 |
|------|------|
| shadow-sm | 卡片、下拉菜单 |
| shadow-md | Popover、菜单内容 |
| shadow-lg | Dialog(最高阴影等级) |

---

十五、布局与间距常量

| 断点 | 值 |
|------|-----|
| sm / md / lg / xl / 2xl | 640 / 768 / 1024 / 1280 / 1536px |

| 间距 | 值 |
|------|-----|
| spacing-0.5 / 1 / 2 | 2 / 4 / 8px |
| spacing-3 / 4 / 5 / 6 | 12 / 16 / 20 / 24px |
| spacing-8 / 10 / 12 | 32 / 40 / 48px |

| 页面常量 | 值 |
|----------|-----|
| 设置内容区 | max-w-7xlSettingsPageShell) |
| 消息内容区 | max-w-5xl 居中 |
| 会话列表 | 240px |
| Agent rail | 48px |
| 开关控件 | 32 × 18.4px(除以 --dc-font-scale 缩放) |

---

十六、色阶计算契约

16.1 唯一锚点

一切品牌色由一个源色派生:primary-600 ≡ --primary ≡ hsl(210 100% 43%)

16.2 Primary 亮度阶梯

| 色阶 | 亮度 | 色阶 | 亮度 |
|------|------|------|------|
| 50 | 94.3% | 700 | 34.3% |
| 100 | 88.6% | 800 | 27.8% |
| 200 | 80% | 900 | 21.6% |
| 300 | 71.6% | 950 | 15.1% |
| 400 | 62.9% | 1000 | 8.6% |
| 500 | 54.3% | — | — |
| 600 | 42.9%(锚点) | — | — |

16.3 派生规则

- 饱和度:亮端 50–500 去饱和(50 阶约 72% → 600 阶 100%),暗端 600–1000 锁 100%。
淡色端去饱和避免「粉色感」,暗色端保饱和维持品牌识别。
- 中性色base-* 饱和度恒 0,亮度 100% → 1.2%;base-800(19.5%)为深色边框参考点。
- 新增色阶:必须按本阶梯插值(oklch 感知均匀插值优先),禁止手写无关色相或任意亮度。
- 不可派生场景destructiveemeraldamber 等语义色独立于品牌色阶,各自维护
亮/暗两套,不并入 primary。

16.4 对比度验收

| 文本层级 | 最小对比度 | 适用范围 |
|----------|-----------|----------|
| 正文 | 4.5:1 | foreground / text-foreground 全部正文 |
| 辅助信息 | 3:1 | muted-foreground、时间戳、描述 |
| 状态 pill | 3:1 | pill 文字与 pill 底色 |
| 品牌蓝按钮 | 3:1 | 白字 on primary(43% 亮度 + 白字) |

验收时用相对亮度/oklch 计算,双主题分别核验;不满足则上移一个色阶,而不是微调透明度。

---

十七、Feedback 机制矩阵

17.1 四类反馈通道

| 通道 | 载体 | 特征 |
|------|------|------|
| 静态状态 | 状态 pill、徽标、开关 | 常驻,不打断 |
| 瞬时通知 | Toast | 自动消失,aria-live polite,不抢焦点 |
| 模态确认 | AlertDialog | 需用户确认,焦点陷阱 |
| 内联校验 | UX 优先(元素自身状态 + 防错设计),文字最后手段 | 就地表达,不打断流程 |

17.2 操作 × 通道映射

| 操作类型 | 乐观更新 | 成功反馈 | 失败反馈 | 不可逆确认 |
|----------|:---:|------|------|:---:|
| switch / toggle | ✓ 立即切换 | 状态自明(可选 toast) | 回滚 + destructive toast | — |
| 失焦自动保存 | 内联「保存中→已保存」 | 同上 | destructive toast + 保留内容 | — |
| 创建 / 编辑提交 | — | 关闭浮层 + 列表即时更新 | destructive toast + 保留表单内容 | — |
| 删除 | — | toast | destructive toast | 必选 AlertDialog |
| 覆盖导入 | — | 结果 toast(含新增/更新统计) | destructive toast(含失败原因) | 覆盖语义需确认 |

17.3 Toast 契约

- 时长:success 3s · destructive 5s
- 同屏 ≤ 3 条,可手动关闭,不抢焦点
- 含失败原因时使用描述行,不用标题堆叠长句

17.4 内联校验:UX 优先原则

错误发生在元素上,就用元素自身的语言表达,不要一上来就往旁边注入文字。优先级从高到低:

1. 预防(防错设计):约束输入本身——maxLength、类型/格式过滤、选择器替代自由输入、
placeholder 给出正确示例、无效状态下禁用提交按钮。让错误不发生,而不是发生后解释。
2. 元素自身状态:destructive 边框 / ring 变色、错误图标(icon-only + tooltip +
aria-label)、焦点停留在出错字段、光标定位到问题位置。
3. 微动效:出错瞬间轻量 shake(fast 140ms,一次),配合 ring 变化引起注意,不重复播放。
4. 文字说明(最后手段):仅当错误无法从元素状态推断(如格式规则、业务约束)时才
注入一行短句,并用 aria-describedby 关联;说明写「如何修正」,不重复已可见的事实。

补充规则:

- 元素自身的错误状态必须自洽:用户在编辑该字段时错误态即时清除(不残留红色)。
- 错误恢复优先「就地修正」(光标定位、保留输入),避免让用户删除重输。
- 校验消息不堆叠:同一时刻每个字段最多一条说明。
- 旁注文字不是默认形态——评审时出现「每个输入框下面都挂一段提示」的界面即判定违规。

17.5 数据区四状态契约

任何数据驱动的区块必须显式覆盖四态,缺一不可:

| 状态 | 必备元素 |
|------|----------|
| loading | skeleton(与目标形状一致)或 spinner |
| empty | 对象说明 + 一个明确主行动 |
| error | 失败说明 + 重试入口 |
| disabled | 原因说明或可恢复的入口 |

---

十八、语义状态体系

统一状态集:neutral / active / success / warning / danger / disabled

| 状态 | 色值来源 | pill 样式 | 文案时态 |
|------|----------|-----------|----------|
| neutral | muted + muted-foreground | 灰底灰字 | 名词(「本地」「导入」) |
| active | primary / primary-10 底 | 蓝底蓝字 | 名词(「已启用」「默认」) |
| success | emerald 系 | 绿底绿字 | 过去时(「已完成」「已同步」) |
| warning | amber 系 | 琥珀底琥珀字 | 现在时(「待处理」「注意」) |
| danger | destructive 系 | 红底红字 | 现在时(「失败」「不可用」) |
| disabled | muted + 低对比文字 | 灰底灰字 + 禁止光标 | 名词(「已禁用」) |

规则:

- 状态色只出现在小面积(图标、pill、细边框);面积越大对比度要求越高,禁止大面积状态底色。
- 状态文案用完成时/名词表达事实,不用祈使句(「点击启用」属于按钮文案,不属于状态)。
- 状态色不承担装饰职能,同一信息不得同时用两个状态色表达。

---

十九、浮层与焦点契约

| z 层 | 交互契约 |
|------|----------|
| Popover / Tooltip(50) | Esc 或外部点击关闭;无焦点陷阱 |
| Dialog(100) | 焦点陷阱;关闭后焦点还原到触发元素 |
| Sheet(30,全屏侧滑) | 入场焦点移到首个可编辑字段;Esc 关闭;背景滚动锁定 |
| Toast(1000) | 不抢焦点;aria-live polite 播报 |
| Spotlight(90) | 焦点陷阱;系统级语义,覆盖全窗口 |

通用规则:

- 同一时刻只允许一个 true modal;AlertDialog 叠加在 Dialog 之上是唯一允许的嵌套。
- 浮层关闭后必须还原用户的上下文(滚动位置、焦点、选择状态)。
- z-index 一律走 --dc-z-* 阶梯,禁止绕过。

---

二十、密度与命中区契约

- 基础单位 4px(spacing-0.5=2px 为唯一例外)。
- 控件高度表:

| 控件 | 高度 |
|------|------|
| 按钮 sm / 默认 / lg | 32 / 36 / 40px |
| 输入框 / 选择器 | 36px |
| 图标按钮 | 28–32px |
| 开关 | 32 × 18.4px |
| 会话列表行 | 36–40px |
| 数据行(列表/表格) | 44–52px |

- 最小可点击区 ≥ 24×24px;icon-only 按钮不足时用 padding 或 wrapper 补足。
- 间距只用既有 spacing 阶梯,禁止中间值(如 13px、22px)。

---

二十一、新增 Token 契约

新增或修改设计令牌时,必须同时满足:

1. 颜色成对:light / dark 两套值同时定义,不得只改一侧。
2. 标明用途:每个 token 至少一个使用场景和禁用场景(写进注释)。
3. 对比度验收:按 §16.4 通过双主题对比度检查。
4. 阶梯内取值:motion 只用 140/220/320ms;radius 只用 8/10/12/16px;blur 只用 8/16/26px;
z 只用 --dc-z-*;禁止新增中间档。
5. 禁止硬编码:组件内不写裸色值(局部透明度叠加除外),一律引用语义 token。
6. 来源同步:token 变更必须在 src/renderer/src/assets/style.css 与本文档同步落地。

---

二十二、dc-ui 设计组件层(src/dc-ui/

@shadcn 同级的封装层(别名 @dc-ui/*),消费语义令牌与 shadcn 原语,
收敛 renderer 中的重复写法。组件以稳定交互语义分组并统一由 @dc-ui/* 导出。

设计哲学:功能聚合、少而全。 一个组件聚合一类交互的全部能力(如 DcButton
聚合 icon / tooltip / label / loading / active / 插槽),禁止为单一场景另立组件;
需要新能力时先扩展既有组件,再考虑新增。按钮体系收敛为一条链:
DcButton(唯一按钮)→ DcSubmitButton(表单提交语义)→ DcFormActions(按钮组)。

| 组件 | 导入路径 | 契约要点 |
|------|----------|----------|
| DcButton | @dc-ui/components/button | 统一按钮:variant/size 透传(xs 紧凑档 h-7 text-xs;icon/icon-sm/icon-xs/icon-lg 图标档 32/28/24/40px);icon/icon-size(3/3.5/4)/icon-class 替代手写 <Icon>;显式 tooltip 内建悬浮提示,支持 tooltip-side/tooltip-side-offset/tooltip-delay-duration/tooltip-content-class/tooltip-ignore-non-keyboard-focuslabel 仅提供可访问名(icon-only 至少 label/tooltip 其一,缺失 DEV 告警);loading 内建 Spinner;active 高亮态;$attrs(data-testid 等)透传到按钮元素;默认插槽承接任意内容 |
| DcStatusPill | @dc-ui/components/status-pill | 六状态(neutral/active/success/warning/danger/disabled)+ 别名(running/loading/auth-required/auth-error/error/stopped/offline);圆点 + 文案;pulse(loading);size sm/xs |
| DcConfirmDialog | @dc-ui/components/confirm-dialog | AlertDialog 封装;danger 驱动 destructive 确认;busy 时禁用双按钮 + Spinner;confirm-label/cancel-label 默认走 common.* i18n;confirm-attrs/cancel-attrs/busy-data-testid 透传(保留测试钩子);默认插槽放错误信息,actions 插槽自定义 footer。confirm 不自动关窗@confirm 处理器负责关闭 |
| DcToggleRow | @dc-ui/components/toggle-row | label + Switch 行;有 description 时双行布局;trailing 插槽;aria-label 缺省用 label。Switch 必须用 :model-value + @update:model-value(reka-ui 2.x 约定,checked/update:checked 无效) |
| DcEmpty | @dc-ui/components/empty | shadcn Empty 封装;icon/title/description + action 插槽(空状态单一主行动) |
| DcSkeleton | @dc-ui/components/skeleton | width/height/rounded 参数化,bg-muted/60 基底 |
| DcToast | @dc-ui/components/toast | notifyRenderer 适配层;success/info/warning/error({title, description?, code?});时长沿用 kind 策略,不新增 per-call duration |
| DcTooltip | @dc-ui/components/tooltip | 触发器 + 内容封装;content/side/side-offset/disabled/delay-duration;内建 Provider 200ms;用于非按钮提示(按钮提示一律走 DcButtontooltip prop) |
| DcSheetPanel | @dc-ui/components/sheet-panel | 唯一标准 Sheet:appearance="panel" 为玻璃 header + ScrollArea 正文 + footer;appearance="plain" 兼容详情 Sheet 的默认 padding、sm:max-w-xl、无 ScrollArea 正文与 footer;width-class/scroll-body 保留精确布局控制 |
| DcPopover | @dc-ui/components/popover | 可交互 Popover:受控 opentrigger/header/title/header-actions/默认内容插槽;width-class/align/side/side-offset/content-class;默认 w-80align=endoverflow-hidden p-0 |
| DcSectionCard | @dc-ui/components/section-card | 设置分区卡片(rounded-lg 细边框 + 可选 header/actions/description 插槽) |
| DcInlineError | @dc-ui/components/inline-error | UX 优先内联反馈:error(destructive + 图标)/hint(中性)二态,role="alert" |
| DcForm | @dc-ui/components/form | vee-validate Form 封装(shadcn form 原语);内建 useDcFormSubmit 提交状态机,@submit 自动包裹 loading/success/error;success-duration/error-duration@success/@error 事件 |
| DcFormField | @dc-ui/components/form | shadcn FormField+FormItem 家族封装:name/label/description + #control="{ field }" 插槽 + FormMessage 错误绑定(aria 关联) |
| DcSubmitButton | @dc-ui/components/form | 提交按钮(dc 的 DcButton 本体):status 缺省自动注入最近的 DcForm;submitting→Spinner,success→✅(可配 success-icon/success-label),error→⚠,到时自动回退 idle |
| useDcFormSubmit | @dc-ui/components/form | 提交状态机 composable:{ status, run, reset }run(fn) 驱动 idle→submitting→success/error,成功/失败按时长自动回退 |
| useDcForm | @dc-ui/components/form | 读取 DcForm 注入上下文(DC_FORM_INJECTION_KEY),供自定义提交控件使用 |
| DcBadge | @dc-ui/components/badge | shadcn Badge 语义化封装:default/secondary/outline/destructive 透传 + success/warning/danger/active/neutral(带 dark 变体,与 DcStatusPill 色系一致) |
| DcCopyButton | @dc-ui/components/button | 复制按钮:复用 DcButton 契约,variant 缺省 ghostcopy-text 必填触发复制(useClipboard),成功图标切 ✅(1200ms 自动回退、色值变 emerald);@copied/@error 事件;label/tooltip 提供可访问名,copy-text 兜底 |
| DcDropdownActionItem | @dc-ui/components/dropdown-action-item | 菜单动作项:icon/label/danger(destructive 变体)/disabled/inset + @select,收敛 Icon mr-2 + span 散写 |
| DcFormActions | @dc-ui/components/form-actions | 表单底部操作组:「取消 + 提交(DcSubmitButton)」+ 中间插槽;submit-status/cancel-label/submit-label/danger-submit |

22.2 使用规则

- 按钮一律用 DcButton:icon / tooltip / label / loading / active 均在组件内聚合,禁止手写 Tooltip + Button + Icon 组合;icon-only 至少传 labeltooltip(缺失 DEV 告警)。已有 tooltip 必须保留其文案、方位、延迟与显示条件;缺失 tooltip 的可操作 icon-only 控件必须补齐,优先复用对应操作的既有 i18n 文案,并同时作为 label
- 非按钮提示(问号图标、下划线说明、Switch 包裹提示、Checkbox 行提示)不用按钮组件,用 DcTooltip / shadcn Tooltip 原样保持。
- 确认/删除类对话框统一 DcConfirmDialog;动态多按钮弹窗、需隐藏确认按钮或 ESC 拦截的路由守卫弹窗保持原实现。
- 空状态统一 DcEmpty#action 放主行动按钮);仅描述的内嵌小提示不套空态。
- 设置分区卡片统一 DcSectionCard;danger-zone 等特殊边框语义卡不迁移。
- 状态展示统一 DcStatusPill(标准六态 + 别名映射);图表圆点/计数徽标不迁移。
- 紧凑内联错误统一 DcInlineError(根元素 role="alert");带重试按钮的错误横幅保持原实现。
- 迁移必须行为等价:保留原事件与修饰符(@click / @select / .stop / .prevent)、payload、禁用条件、type、loading 状态、Popover/Dialog 开闭、键盘与焦点行为、i18n key、data-testid;测试选择器(如 [role="alert"])不因换组件失效。dc-ui 组件不得吞掉、改名或重发业务事件。
- tooltip 补齐边界:只为可操作的 icon-only 控件补齐;文字按钮、纯展示 Icon、以及说明型 Switch/Checkbox/链接提示维持原行为,不为统一形式强行增加 tooltip。
- 新增 dc-ui 组件需先证明既有组件无法覆盖;在本文档登记聚合后的完整契约,并符合 §20/§21 的密度与 token 规则。

22.3 迁移状态(2026-08 批次)

- DcButton 聚合DcIconButton 已并入并删除(13 处调用迁入);手写 Tooltip+按钮迁移 10 文件 30 处(MessageToolbar 12 / WindowSideBar 8 / ChatStatusBar 2 / ModelConfigItem / MessageBlockImage / MessageBlockToolCallImagePreview / SkillsIndicator / SkillsPanel / ChatInputToolbar 4)。DcButton 已补齐 tooltip 定位、延迟、content class 与 keyboard-focus 参数,保留复杂提示契约。
- DcCopyButton 归位:由 @dc-ui/components/copy-button 并入 @dc-ui/components/button(旧目录删除),消费方(MessageToolbar / ArtifactBlock / CodeArtifact / McpJsonViewer / McpServers / TraceDialog / MessageBlockToolCall)全部经 copy-text 传入复制内容,MessageToolbar 增加 copy-text prop。
- DcConfirmDialog:迁移 5 文件 7 框(ChatPage / ModelConfigDialog ×2 / KnowledgeFileItem ×2 / SkillInstallDialog / SkillDetailDialog ×2)+ ChatPage.test.ts 适配。
- DcEmpty:迁移 10 文件 12 处空态(含 MemoryEmptyState 用 #action 插槽,组件接口不变)。
- DcSectionCard 4 文件 11 卡(MemoryDiagnosticsPanel / MemoryDirectivesPanel / MemoryConfigInlinePanel / OfficialPluginDetailPage);DcStatusPill 2 文件(RemoteSettings 5 渠道 / AcpDebugDialog);DcInlineError 12 文件(McpServerForm 5 处等)。
- 有意保留(记录在案):WindowSideBar remote-control(多行 tooltip)、WindowSideBarSessionItem pin/delete(依赖 scoped CSS)、MessageDialog / UpdateTaskCheckDialog(动态多按钮)、SettingsLeaveGuardDialog(路由守卫)、DataSettings 单按钮错误弹窗、desc-only 空态提示、带重试按钮的错误横幅。

---

Release Flow

Release Flow

This document defines the maintainer release flow for DeepChat without rewriting existing dev / main history.

Goals

- Keep dev as the only long-lived integration branch.
- Keep main as a stable mirror of reviewed release commits.
- Keep releases tag-driven through .github/workflows/release.yml.
- Avoid creating new merge commits on main.

Branch Roles

- dev: active development and integration branch.
- main: stable mirror of released source snapshots.
- release/<version>: short-lived review branch cut from an existing commit on dev.

release/<version> must not carry release-only commits. If a release fix is required, land it on dev first and then move the release branch forward to the updated dev commit.

Standard Release Sequence

1. Prepare release metadata on dev.

- Update the version, CHANGELOG.md, and any release notes on dev.
- Run the required local checks before cutting a release branch.

2. Cut the review branch from the release-ready commit on dev.

bash
git switch dev
git pull --ff-only origin dev
git switch -c release/v1.0.0-beta.4
git push -u origin release/v1.0.0-beta.4

3. Open a PR from release/<version> to main.

- The PR exists for review and CI only.
- Do not use the GitHub merge button to land the PR.
- Do not click "Update branch" on the PR, because it creates new merge commits.

4. If review finds a release issue, fix it on dev first.

bash
git switch dev
git pull --ff-only origin dev
# land the release fix on dev
git branch -f release/v1.0.0-beta.4 origin/dev
git switch release/v1.0.0-beta.4
git push --force-with-lease origin release/v1.0.0-beta.4

Use --force-with-lease only because the release branch is a disposable review branch that must stay identical to a commit already on dev.

5. After the PR is approved, fast-forward main locally on macOS or Linux.

bash
pnpm run release:ff -- release/v1.0.0-beta.4 --tag v1.0.0-beta.4

The helper script validates:

- the working tree is clean
- the target release commit already exists on origin/dev
- origin/main is an ancestor of the target commit
- main can be updated with git merge --ff-only
- the requested tag is free locally and on origin

The --tag option validates tag availability and prints the tag command. Create and push the
tag in the next step.

Windows maintainers should skip this helper and use the manual release sequence below.

6. Create and push the release tag on the same commit.

bash
git tag v1.0.0-beta.4 release/v1.0.0-beta.4
git push origin v1.0.0-beta.4

7. Wait for the tag-triggered Release workflow and review its draft.

- Preflight must resolve the existing tag to the expected commit, confirm that commit is
reachable from origin/main, match package.json, and find a non-empty matching CHANGELOG
section before any native package starts.
- All six native package jobs must pass. macOS x64 and ARM64 must be signed, notarized, stapled,
and verified; Windows remains unsigned.
- The workflow writes the draft only after fail-closed assembly and local revalidation, then
verifies the uploaded assets through the GitHub API. Treat the run as successful only after
that remote size and digest verification passes. Do not add ad hoc assets to the draft.
- The draft must contain exactly nineteen assets: fourteen target files, four updater metadata
files, and release-index.json.
- If a release run must be retried after a native job has completed, rerun all jobs. Package
manifests bind GITHUB_RUN_ATTEMPT, so mixing artifacts from different attempts intentionally
fails assembly.

Publish the verified draft manually after reviewing its notes, target list, and
release-index.json.

8. Delete the temporary release branch after the release is published.

bash
git push origin --delete release/v1.0.0-beta.4
git branch -d release/v1.0.0-beta.4

Manual Release Sequence

Use this sequence when the automatic helper is unavailable, especially on Windows. It updates origin/main directly from the reviewed release commit and does not depend on the state of your local main.

1. Fetch the latest release refs.

bash
git fetch origin main dev --prune

2. Resolve the reviewed release commit and record it as TARGET_SHA.

bash
git rev-parse origin/release/v1.0.0-beta.4^{commit}
# or
git rev-parse release/v1.0.0-beta.4^{commit}
# or
git rev-parse <target-ref>^{commit}

3. Confirm the release commit already exists on origin/dev.

bash
git merge-base --is-ancestor <TARGET_SHA> origin/dev

4. Confirm origin/main can be fast-forwarded to the reviewed release commit.

bash
git merge-base --is-ancestor origin/main <TARGET_SHA>

5. Confirm the release tag does not already exist locally or on origin.

bash
git rev-parse --verify --quiet refs/tags/v1.0.0-beta.4
git ls-remote --exit-code --tags origin refs/tags/v1.0.0-beta.4

Both commands should report that the tag is missing before you continue.

6. Fast-forward origin/main directly to the reviewed release commit.

bash
git push origin <TARGET_SHA>:refs/heads/main

7. Create and push the release tag on the same commit.

bash
git tag v1.0.0-beta.4 <TARGET_SHA>
git push origin refs/tags/v1.0.0-beta.4

8. Wait for the Release workflow, review the exact nineteen-asset draft using the checks in the
standard sequence, and publish it manually.

9. Delete the temporary release branch after the release is published.

bash
git push origin --delete release/v1.0.0-beta.4
git branch -d release/v1.0.0-beta.4

Repository Settings

These settings are not stored in the repository and must be configured manually on GitHub:

- Enable Require linear history on main.
- Keep PR checks required for PRs targeting main and dev.
- Allow maintainers to push main only through the documented ff-only procedure.
- Treat the PR merge button for main as disabled by policy, even if the repository UI still shows it.

CI Guardrails

- PRs targeting main must come from release/<version> branches.
- The head commit of a PR targeting main must already be contained in origin/dev.
- Release tags must point to commits that are already reachable from origin/main.

Build, Release, and package regression call one reusable workflow per operating system. The fixed
native runner and unpacked-directory mapping live in those called workflows, not in each caller.
Secrets are passed explicitly; package jobs have only contents: read, and only the final draft
publication job has contents: write.

Release assembly accepts exactly one distribution manifest for each of Windows, Linux, and macOS on
x64 and ARM64. It recomputes file digests, rejects incomplete checks or unknown files, and generates:

- latest.yml for Windows x64 and ARM64 NSIS payloads;
- latest-mac.yml for macOS x64 and ARM64 ZIP payloads, never DMGs;
- separate latest-linux.yml and latest-linux-arm64.yml AppImage metadata;
- release-index.json with six-target evidence and SHA-256 for the other eighteen public files.

Windows ARM64 uses the build:win:arm64 script, installs only runtime payloads available for
win32/arm64, and packages only plugins whose manifest declares that target. Artifact names and
update metadata retain architecture so an ARM64 build cannot replace or be served as an x64
package. The equivalent platform/architecture contract for bundled plugins is documented in
plugin packaging.

These rules are enforced in the repository workflows so the documented flow and the automation stay aligned.

History Hygiene

Use first-parent history for day-to-day inspection:

bash
git log --oneline --decorate --first-parent dev -n 30
git log --oneline --decorate --first-parent main -n 30

Avoid using git log --all --decorate --graph as the default project view because old release merges and stale branch refs make it noisier than the actual mainline history.

Clean up short-lived branches after they are merged:

bash
git fetch --prune origin
git branch --merged dev

---

Spec Driven Dev

Specification-Driven Development for DeepChat

Core Philosophy

Specification-Driven Development (SDD) makes the specification the primary artifact. Specifications
do not serve code; code serves specifications. For substantial DeepChat work, the specification is
an RFC that defines the problem, required behavior, design decisions, invariants, and implementation
constraints before execution begins.

The spec is the durable source of truth. The plan is the single live execution tracker. Tests are
one validation mechanism and a form of regression protection; they do not drive implementation by
default. Use SDD for substantial work that needs shared context or a durable decision record, not
for every small edit. Keep spec → plan → code traceability without duplicating the same design or
status across files.

Required Artifacts

Keep substantial active changes in a lightweight SDD folder so reviewers can find the intent without
hunting through code. Use one kebab-case folder per goal when SDD is needed:

- docs/features/<goal>/ - new features, user-visible capabilities, integrations, and tools large
enough to need a shared plan
- docs/issues/<goal>/ - complex bug fixes, regressions, failing tests, CI failures, reliability
issues, and prompt/runtime problems
- docs/architecture/<goal>/ - refactors, migrations, dependency boundaries, shared contracts, runtime architecture, and cross-module design

Skip SDD unless a developer explicitly asks for it when the change is trivial or tightly localized:

- visual/style fixes, copy changes, and small UI layout adjustments
- simple localized logic changes with a clear owner module
- routine docs edits that do not change project direction

Pure release metadata work is exempt from SDD. Version bumps, CHANGELOG.md updates, release branch
management, tags, and release PR preparation should follow docs/release-flow.md without creating a
release-specific SDD folder.

Feature and architecture goals use two artifacts:

- spec.md - the RFC: context, goals, non-goals, design, invariants, interfaces, compatibility,
acceptance criteria, and open questions
- plan.md - the ordered implementation steps and their live completion state, including final
review, validation decisions, cleanup, and quality gates

Do not create tasks.md. The plan is the only execution tracker.

Complex bug goals normally use one file:

- spec.md - issue description, impact, root cause or suspected location, fix design, a concise
implementation checklist, validation outcome, and linked GitHub issue if one exists

Add plan.md to a complex bug only when the implementation has multiple independently trackable
slices. Use the same artifact boundaries as feature and architecture work, and never add
tasks.md.

A bug is SDD-worthy only when the root cause, blast radius, or fix path is complex enough that
future developers benefit from the written record. For simple style defects or obvious local logic
fixes, skip docs/issues/* and implement directly.

If a bug fix introduces a new user-visible capability, data migration, public contract, or
cross-module redesign, classify the work as feature or architecture instead.

If a change is tiny, prefer skipping SDD over creating a token artifact.

Artifact Responsibilities

Specification

Write spec.md as the normative RFC. It should explain enough of the implementation direction that
a capable developer can make local coding decisions without inventing architecture. Include only
sections that carry real information, chosen from:

- context and problem
- goals and non-goals
- current and proposed design
- ownership, dependency direction, interfaces, and data flow
- invariants, failure behavior, compatibility, and migration
- security, privacy, and performance constraints
- acceptance criteria, open questions, and rejected alternatives

Acceptance criteria describe observable outcomes or independently verifiable contracts. They are
not a test-case inventory. Keep file-by-file work, status checkboxes, and command transcripts out of
the spec.

Implementation Plan

Use plan.md as both the implementation plan and task tracker. Organize it into ordered checkbox
sections. Each step should be a coherent, reviewable implementation slice with its objective,
ownership boundary, essential implementation guidance, dependencies when any, and completion
condition.

Reference the spec instead of repeating its design. Do not split individual functions, files, or
tests into bookkeeping tasks unless they are independently meaningful deliverables. End the plan
with whole-change review, validation selection, temporary-verification cleanup, and required
quality gates.

GitHub Issue Sync

Do not sync GitHub issues by default. Issue sync is a follow-up record, not a gate for local SDD or
implementation.

Only create or link a GitHub issue when the developer explicitly asks, or after asking and getting
approval once the SDD artifacts are written or the implementation is complete.

Eligible work:

- Complex bugs only; simple style defects and obvious local logic fixes should not get issues.
- Whole new features or major feature rewrites only; single actions, small behavior tweaks, and
ordinary adjustments should not get issues.

If eligibility is unclear, ask the developer after the work is understood. Never self-authorize issue
creation just because local gh is installed and authenticated.

When approved:

- Feature work uses the [feature] label.
- Bug work uses the [bug] label.
- If the label is missing and gh has permission, create it.
- Record the issue URL or number in the SDD artifact.
- If gh is unavailable or unauthorized, continue local-only and note that no GitHub issue was
created only when sync was requested or approved.

When opening a PR for linked work, include Closes #NNN in the PR body so GitHub closes the issue
after merge.

Workflow

1. Classification - Decide whether SDD is needed, then choose feature, complex bug, or
architecture.
2. Specification - Write the RFC, settle ownership and design, and resolve every open question
that would change the implementation.
3. Planning - For feature, architecture, or multi-slice bug work, write one ordered
implementation plan; do not create a separate task list or an upfront test matrix.
4. Implementation - Complete the planned code change while following existing DeepChat
boundaries. Existing checks may run whenever they provide useful feedback.
5. Review - Review the complete change against the spec for hidden side effects, compatibility,
failure behavior, performance, security, naming, and maintenance cost.
6. Validation - Decide which existing checks, temporary verification, and durable regression
tests are warranted. Remove temporary verification before handoff.
7. GitHub Sync - Ask whether to sync an eligible GitHub issue only after the docs or
implementation clarify the scope, unless the developer already requested issue sync.

Before implementation, inspect existing docs, code, callers, ownership, and nearby tests; choose the
correct SDD folder; and resolve every [NEEDS CLARIFICATION] marker. For architecture work that
changes or replaces a historical feature, update that feature's retained spec.md if it is still a
maintained contract.

Implementation-First Validation

Implementation-first means finishing the planned implementation before deciding whether to author
new test code. It does not prohibit running existing tests, type checking, linting, builds, or
manual checks during development.

New test code before implementation is exceptional. Use it only when:

- the developer explicitly requests TDD;
- a minimal executable reproduction is required to understand a complex failure; or
- migration, concurrency, recovery, or protocol compatibility cannot be designed safely without
characterization of existing behavior.

Record the exception and its reason in one sentence in plan.md or the complex-bug spec. Keep the
reproduction narrow; it may become a durable regression only if it protects a qualifying contract.

After implementation, classify validation as follows:

- Existing validation: run the smallest relevant existing tests and static or build checks.
- Temporary verification: add a probe, script, or test only to investigate implementation
behavior, then remove it before handoff.
- Durable regression protection: commit the smallest test that protects user-visible behavior,
a documented cross-module contract, persistence or migration, lifecycle or concurrency,
recovery, a security boundary, or a proven regression.

Do not retain tests that merely mirror private control flow, assert incidental call order, duplicate
the implementation through mocks, or exist only to increase coverage. Prefer no new test to a
low-value implementation-coupled test.

Cleanup policy:

- Do not perform broad SDD cleanup during ordinary feature, bug, or architecture work.
- Use the deepchat-sdd-cleanup skill only when a developer explicitly asks to clean, prune, or
organize SDD docs.
- Completed feature/architecture SDD content should become current documentation in README.md,
ARCHITECTURE.md, FLOWS.md, architecture/.md, or guides/.md; remove plan.md and keep a
spec-only folder when the RFC still defines a useful maintained contract.
- Completed issue folders may be deleted when a linked GitHub issue is closed or the implementation
and validation evidence prove the bug no longer exists.
- Long-term history should be recovered from git history, not accumulated under docs/archives/.

Six Core Principles

1. Specification-First Development

Write clear requirements, design decisions, invariants, and independently verifiable acceptance
criteria before writing code. Mark ambiguities with [NEEDS CLARIFICATION] and resolve them before
implementation. Include the architectural guidance needed to constrain the implementation, but
leave file-level sequencing and status tracking to the plan.

2. Architectural Consistency

Follow DeepChat's existing architectural patterns:

- 明确模块职责: 把行为放到负责该能力的 main 模块,不新增通用 Presenter 总入口
- Typed Event Communication: main → renderer 状态通知使用
shared/contracts/events.ts + publishDeepchatEvent();main 内部操作使用直接调用
- Secure IPC: Prefer typed IPC via src/preload/ (contextIsolation on); avoid ad-hoc channels
- Type Definitions: Shared types live in src/shared/

Every feature should integrate seamlessly with existing Presenters and use the established event
flow patterns.

renderer-main 能力使用 typed route / typed event + renderer/api/*Client
useLegacyPresenter() 和 legacy presenter transport 已删除,不存在可复用的兼容路径。

3. Minimal Complexity

Start simple. Add complexity only when proven necessary. Avoid:

- Future-proofing (build for now, not hypothetical future needs)
- Unnecessary abstraction layers
- Over-generalization
- Premature optimization

Use framework features directly. Prefer a small coherent implementation slice that proves the
end-to-end design. If a change touches many files, explain why in the plan.

4. Compatibility & Migration

Prefer forward-looking designs, but treat stored user data, config, and external APIs as contracts. If a breaking change is necessary:

- Document the migration path in the spec/plan
- Include upgrade/rollback considerations (data, settings, UI defaults)
- Keep user impact explicit (what changes, what might break)

5. UI Consistency

Maintain consistency across the codebase:

- Vue 3 Composition API for all components
- i18n for all user-facing strings in src/renderer/src/i18n/
- Tailwind CSS following existing utility patterns
- Follow existing component conventions (props, emits, composition patterns)

6. Implementation-First, Risk-Based Validation

Put the primary reasoning budget into design and implementation. After the implementation is
coherent, choose the cheapest validation that can reveal meaningful failures. When durable
regression coverage is warranted, use Vitest in test/main, Vitest with Vue Test Utils in
test/renderer, and Playwright in test/e2e. Optimize for protected contracts and project
stability, not test count or coverage percentage.

Development Checklist

Specification Phase

- [ ] Problem, goals, and affected users or systems are clear
- [ ] Acceptance criteria are observable or independently verifiable
- [ ] Non-goals and constraints stated
- [ ] Ownership, interfaces, data flow, and required invariants defined
- [ ] Compatibility, migration, failure, security, and performance implications addressed
- [ ] Key UX states covered (loading/empty/error)
- [ ] No [NEEDS CLARIFICATION] markers remain

Planning Phase

- [ ] Identify all involved owning modules and narrow ports
- [ ] Design event flow (if cross-process communication required)
- [ ] Define/verify IPC surface (src/preload/) and types (src/shared/)
- [ ] Define shared types in src/shared/
- [ ] Express the implementation as ordered, coherent slices in plan.md, or in the bounded
complex-bug spec when no separate plan is needed
- [ ] Keep whole-change review and validation selection after implementation
- [ ] Identify risks (security/privacy/perf) and mitigations

Implementation Phase

- [ ] Implement owning module and typed route/client changes
- [ ] Implement UI component (if needed)
- [ ] Add i18n keys (if user-facing)
- [ ] Review the complete implementation against the spec and affected boundaries
- [ ] Run existing validation and add temporary verification only where uncertainty remains
- [ ] Add the smallest durable regression tests only for qualifying behavior or contracts
- [ ] Remove temporary probes, scripts, and tests
- [ ] Run: pnpm run format && pnpm run i18n && pnpm run lint && pnpm run typecheck

Common Patterns

typescript
// 1. Typed Route / Client Method Signature
async methodName(params: InputType): Promise<OutputType>

// 2. Typed Event Publication (Main Process)
publishDeepchatEvent('settings.changed', payload)

// 3. Renderer-main Integration
const settingsClient = new SettingsClient()
await settingsClient.update([{ key: 'fontSizeLevel', value: 2 }])

// 4. Vue 3 Component Pattern
<script setup lang="ts">
import { SettingsClient } from '../../api/SettingsClient'

const settingsClient = new SettingsClient()
// Composition API logic
</script>

Compatibility note:

- 新 renderer-main 能力优先定义 shared/contracts/renderer/api/Client
- useLegacyPresenter()presenter:callremoteControlPresenter:call
src/renderer/api/legacy/ 已退休
- copy、file、openExternal 等低层能力通过 dedicated preload API 和 renderer client 封装
- src/renderer/api/legacy/ 保持删除,不恢复 legacy renderer-main boundary

Quick Reference

- Main modules: src/main/{app,session,agent,provider,tool,mcp,skill,plugin,memory,knowledge,workspace,file,desktop,platform}/
- Renderer clients: src/renderer/api/
- Tests: test/main//, test/renderer//
- Typed events: src/shared/contracts/events.ts
- Raw input constants: src/main/events.ts and src/renderer/src/events.ts
- IPC bridge: src/preload/
- i18n: src/renderer/src/i18n/
- Shared types: src/shared/types/ and src/shared/contracts/

Definition of Done (DoD)

A change is “done” when:

- The acceptance criteria and documented invariants are met
- The complete implementation has been reviewed against affected boundaries and failure modes
- Relevant existing tests and required quality gates pass locally, or environment limits are
reported precisely
- Any warranted durable regression tests are focused on qualifying behavior or contracts
- Temporary verification code has been removed
- User-facing strings use i18n keys
- Any migrations or breaking changes are documented
- Linked GitHub issues, when any, are referenced from the PR with Closes #NNN

---

CONTRIBUTING

Contributing to DeepChat

We love your input! We want to make contributing to DeepChat as easy and transparent as possible, whether it's:

- Reporting a bug
- Discussing the current state of the code
- Submitting a fix
- Proposing new features
- Becoming a maintainer

Development Process

We use GitHub to host code, to track issues and feature requests, as well as accept pull requests.

Internal Team Contributors

#### Bug Fixes and Minor Feature Improvements

- Develop directly on the dev branch
- Code submitted to the dev branch must ensure:
- Basic functionality works
- No compilation errors
- Project can start normally with pnpm run dev

#### Major Features or Refactoring

- Create a new feature branch named feature/featurename
- Merge the feature branch back to dev branch upon completion

#### Maintainer Release Flow

- Keep dev as the integration branch and main as the stable mirror.
- Cut a short-lived release/<version> branch from an existing commit on dev.
- Open release/<version> -> main for review and CI, but do not use the GitHub merge button to land it.
- macOS and Linux maintainers can land the approved release with pnpm run release:ff -- release/<version> --tag v<version>.
- Windows maintainers must use the documented manual release steps instead of pnpm run release:ff.
- Create the release tag on the same commit after main has been fast-forwarded.
- See docs/release-flow.md for the full maintainer procedure, manual fallback, and guardrails.

External Contributors

1. Fork this repository to your personal account
2. Create your development branch from dev
3. Develop in your forked repository
4. Submit a Pull Request to the dev branch of the original repository
5. Describe the Issues fixed in your PR description (if applicable)

Local Development Setup

1. Clone the repository:

bash
git clone https://github.com/ThinkInAIXYZ/deepchat.git
cd deepchat

2. Install required development tools:

- Install Node.js (Latest LTS version recommended)

3. Additional setup based on your operating system:

Windows:

- Install Windows Build Tools:
GUI Installation:
- Install Visual Studio Community
- Select "Desktop development with C++" workload during installation
- Ensure "Windows 10/11 SDK" and "MSVC v143 build tools" components are selected(Vistual Studio 2022 recommended)
- Install Git for Windows

macOS:

- Install Xcode Command Line Tools:

bash
xcode-select --install

- Recommended: Install Homebrew package manager:
bash
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Linux:

- Install required build dependencies:

bash
# Ubuntu/Debian
sudo apt-get install build-essential git
# Fedora
sudo dnf groupinstall "Development Tools"
sudo dnf install git

4. Install project dependencies:

bash
pnpm install
pnpm run installRuntime

5. Start the development server:

bash
pnpm run dev

Project Structure

- src/main/: Electron main process. Presenters, typed route handlers, runtime orchestration, and storage owners live here (window/tab/thread/config/llmProvider/mcp/knowledge/sync/floating button/deeplink/OAuth, etc.).
- src/preload/: Context-isolated bridge. Exposes typed window.deepchat APIs plus a minimal legacy compatibility surface.
- src/renderer/: Vue 3 + Pinia app. Business/UI code lives under src/renderer/src (components, stores, views, lib, i18n). Shell UI lives in src/renderer/shell/.
- src/renderer/api/: Renderer-main boundary layer. Put typed *Client classes, event subscriptions, and named runtime wrappers here. src/renderer/api/legacy/ is quarantine-only compatibility code.
- src/shared/: Shared route contracts, event contracts, types, and utilities used by both processes. Legacy presenter typings still exist for main internals and quarantine adapters.
- runtime/: Bundled runtimes used by MCP and agent tooling (Node/uv).
- scripts/, resources/: Build, packaging, and asset pipelines.
- build/, out/, dist/: Build outputs (do not edit manually).
- docs/: Design docs and guides.
- test/: Vitest suites for main/renderer.

Architecture Overview

Design Principles

- Single-track renderer-main boundary: New renderer business code should go through typed route contracts, typed event contracts, src/renderer/api/*Client, and named runtime wrappers. Do not treat presenter names as a public renderer API.
- Presenters stay in main: Presenters still own most main-process capabilities, but on active paths they are an implementation detail behind routes, events, and wrappers. src/renderer/api/legacy/ is quarantine-only compatibility code.
- Multi-window + multi-tab shell: WindowPresenter and TabPresenter manage true Electron windows/BrowserViews with detach/move support; an EventBus fans out cross-process events.
- Clear data boundaries: Chat data lives in SQLite (app_db/chat.db), settings in Electron Store, knowledge bases in DuckDB, and backups via SyncPresenter. Renderer never touches the filesystem directly.
- Tooling-first runtime: LLMProviderPresenter handles streaming, rate limits, and provider instances (cloud/local/ACP agent). MCPPresenter boots MCP servers, router marketplace, and in-memory tools with a bundled Node runtime.
- Safety & resilience: contextIsolation is on; renderer-side OS/file/network access is gated behind typed bridges or quarantined wrappers; backup/import pipelines validate inputs; rate-limit guards prevent provider overload.

text
/ Detailed source-code truncated for AI context efficiency. /

Domain Modules & Feature Notes

- LLM pipeline: LLMProviderPresenter orchestrates providers with rate-limit guards, per-provider instances, model discovery, ModelScope sync, custom model import, Ollama lifecycle, embeddings, and the agent loop (tool calls, streaming states). Session persistence for ACP agents lives in AcpSessionPersistence.
- MCP stack: McpPresenter uses ServerManager/ToolManager/McpRouterManager to start/stop servers, choose npm registries, auto-start default/builtin servers, and surface tools/prompts/resources. Supports StreamableHTTP/SSE/Stdio transports and a debugging UI.
- ACP (Agent Client Protocol): ACP providers spawn agent processes, map notifications into chat blocks, and feed the ACP Workspace (plan panel with incremental updates, terminal output, and a guarded file tree that requires registerWorkdir). PlanStateManager deduplicates plan items and keeps recent completions.
- Knowledge & search: Built-in knowledge bases use DuckDB/vector pipelines with text splitters and MCP-backed configs; search assistants auto-select models and support API + simulated-browser engines via MCP or custom templates.
- Shell & UX: Multi-window/multi-tab navigation, floating chat window, deeplink handling, sync/backup/restore (SQLite + configs zipped with manifest), notifications, and upgrade channel selection.

Best Practices

- Use typed clients and runtime wrappers from renderer business code: In src/renderer/src/, prefer src/renderer/api/*Client, typed event helpers, and named runtime wrappers. Do not import @api/legacy/presenters or add new presenter-name-based transport there.
- Do not use Node APIs in the renderer: All OS/network/filesystem work should go through window.deepchat, typed clients, or explicitly named wrappers. Keep features multi-window-safe by scoping state to tabId/windowId.
- i18n everywhere: All user-visible strings belong in src/renderer/src/i18n; avoid hardcoded text in components.
- State & UI: Favor Pinia stores and composition utilities; keep components stateless where possible and compatible with detached tabs. Consider artifacts, variants, and streaming states when touching chat flows.
- LLM/MCP/ACP changes: Respect rate limits; clean up active streams before switching providers; prefer typed events on migrated paths instead of adding new raw IPC or presenter reflection. For MCP, persist changes through main-owned config/runtime layers and surface server start/stop events. For ACP, always call registerWorkdir before reading the filesystem and clear plan/workspace state when sessions end.
- Data & persistence: Route conversation/settings/provider/backup changes through main-owned clients or compatibility adapters; do not write directly into appData or other local stores from the renderer.
- Testing & quality gates: Before sending a PR, run pnpm run format, pnpm run lint, pnpm run typecheck, and relevant pnpm test* suites. Use pnpm run i18n to validate locale keys when adding strings.

Code Style

- TypeScript + Vue 3 Composition API + Pinia; Tailwind + shadcn/ui for styling.
- Oxfmt enforces single quotes, no semicolons, and width 100; pnpm run format before committing.
- OxLint is used for linting (pnpm run lint). Type checking via pnpm run typecheck (node + web targets).
- Tests use Vitest (test/main, test/renderer). Name tests .test.ts/.spec.ts.
- Follow naming conventions: PascalCase components/types, camelCase variables/functions, SCREAMING_SNAKE_CASE constants.

Pull Request Process

1. Keep PRs focused; describe what changed and which issues are addressed.
2. Include screenshots/GIFs for UI changes and note any docs updates (README/CONTRIBUTING/docs).
3. Verify format + lint + typecheck + relevant tests locally; note anything not run.
4. Target the dev branch; external contributors should fork-first and open PRs against dev.
5. At least one maintainer approval is required before merge.
6. PRs targeting main are reserved for release/<version> branches and are review-only; maintainers land them with the documented ff-only flow in docs/release-flow.md.

Any Questions?

Feel free to open an issue with the tag "question" if you have any questions about contributing.

License

By contributing, you agree that your contributions will be licensed under the project's license.

---

CHANGELOG

Changelog

v1.1.0 (2026-08-11)


- Added proactive multi-Agent collaboration with live child Sessions, progress controls, result handoff, durable execution journaling, and contract-bound delegation recovery
- Added a bundled local deepchat CLI for inference, media, OCR, artifacts, Agent runs, provider and model administration, Settings, Skills, and MCP operations
- Expanded Agent Memory with time-aware Directives, persistent corrections and deletions, incremental maintenance, and more reliable vector storage and recovery
- Added fully offline OCR for image and PDF attachments, with per-attachment modes, cancellation, caching, page-aware truncation, and reuse across history, retry, export, and search
- Gave every Agent an isolated Skills catalog with explicit imports, and added MCP v2 ecosystem support, a built-in McDonald's server, larger tool catalogs, and resilient schema handling
- Added native DeepSeek web search and built-in support for AMD GPU Cloud, DaoXE, GreenPT, Modelsell, OrcaRouter, Routerra, Straico, StepFun Token Plan, and Grok OAuth
- Upgraded Computer Use to 0.19.2 with snapshot-bound targeting, post-action verification, new window, menu, and clipboard tools, native picture-in-picture previews, and stronger runtime integrity checks
- Added browser session import, sidebar workspace management, persistent composer drafts, configurable Agent output limits, and Windows command shell profiles
- Improved chat and Agent recovery for pending or released inputs, permission outcomes, interrupted sessions, truncated tool calls, transient provider failures, and long-context prompt caching
- Refined notifications, Steer conversations, Settings, startup visuals, UI controls, motion, scrolling, search, and message actions while reducing renderer and dashboard overhead
- Added Linux ARM64 packages and a branded macOS installer, hardened updater metadata and native distribution verification, and rebuilt release assembly around reproducible, fail-closed checks
- Upgraded Electron to 41.10.4, the bundled Node.js runtime to 24.18.0, Light OCR to 0.5.7, and patched DOMPurify, Nano ID, YAML, and Mermaid security issues
- 新增主动式多 Agent 协作,支持实时子会话、进度控制、结果回传、持久化执行日志,以及受契约约束的委派恢复
- 新增内置本地 deepchat CLI,覆盖推理、媒体生成、OCR、产物管理、Agent 运行、Provider 与模型管理、设置、Skills 和 MCP 操作
- 扩展 Agent Memory,新增具备时间感知能力的 Directives、可持久生效的纠正与删除、增量维护,以及更可靠的向量存储与恢复机制
- 新增完全离线的图片与 PDF 附件 OCR,支持逐附件模式、取消、缓存、按页截断,以及在历史、重试、导出和搜索中复用结果
- 为每个 Agent 提供隔离的 Skills 目录与显式导入,并新增 MCP v2 生态、内置 McDonald's 服务器、大型工具目录支持和稳健的 Schema 兼容处理
- 新增 DeepSeek 原生联网搜索,并内置支持 AMD GPU Cloud、DaoXE、GreenPT、Modelsell、OrcaRouter、Routerra、Straico、StepFun Token Plan 和 Grok OAuth
- 将 Computer Use 升级至 0.19.2,新增基于快照的目标定位、操作后验证、窗口、菜单与剪贴板工具、原生画中画预览,并强化运行时完整性校验
- 新增浏览器会话导入、侧边栏工作区管理、输入框草稿持久化、Agent 输出上限配置,以及 Windows 命令行 Shell 配置
- 改进待处理或已释放输入、权限结果、中断会话、截断工具调用、瞬时 Provider 故障和长上下文提示词缓存的恢复与可靠性
- 优化通知反馈、Steer 对话、设置页、启动视觉、UI 控件、动效、滚动、搜索和消息操作,并降低渲染器与 Dashboard 开销
- 新增 Linux ARM64 安装包和品牌化 macOS 安装器,强化更新元数据与原生分发校验,并以可复现、失败即关闭的检查重构发布组装流程
- 将 Electron 升级至 41.10.4、内置 Node.js 运行时升级至 24.18.0、Light OCR 升级至 0.5.7,并修复 DOMPurify、Nano ID、YAML 与 Mermaid 安全问题

v1.1.0-beta.12 (2026-08-07)


- Added proactive multi-Agent collaboration with live child Sessions, progress tracking, controls, and result handoff
- Added a bundled local deepchat CLI for inference, media, OCR, artifacts, Agent runs, provider and model administration, Settings, Skills, and MCP operations
- Added native web search for supported DeepSeek V4 Flash models, with a per-turn toggle, visible search activity, and source links
- Added OrcaRouter as a built-in provider with live model discovery
- Upgraded the bundled Computer Use driver to 0.17.0 with snapshot-bound targeting, post-action verification, and new window, menu, and clipboard tools
- Persisted images generated through MCP tools so they remain available after restart and in follow-up actions
- Improved compatibility with large MCP tool catalogs and equivalent JSON schemas
- Standardized UI controls and refined interface motion, hover behavior, and reduced-motion feedback
- Upgraded Light OCR to 0.5.7, Electron to 41.10.4, and the bundled Node.js runtime to 24.18.0
- Restored provider database refreshes for larger catalogs and refreshed model and Agent registries
- Fixed long unbroken text expanding the chat composer, untranslated confirmation labels, and scheduler restart and manual-run feedback
- 新增主动式多 Agent 协作,支持实时子会话、进度跟踪、控制与结果回传
- 新增内置本地 deepchat CLI,覆盖推理、媒体生成、OCR、产物管理、Agent 运行、Provider 与模型管理、设置、Skills 和 MCP 操作
- 为支持的 DeepSeek V4 Flash 模型新增原生联网搜索,提供逐轮开关、可见搜索过程与来源链接
- 新增 OrcaRouter 内置 Provider,并支持动态获取模型列表
- 将内置 Computer Use 驱动升级至 0.17.0,新增基于快照的目标定位、操作后验证,以及窗口、菜单和剪贴板工具
- 持久化 MCP 工具生成的图片,确保重启后及后续操作中仍可使用
- 改进大型 MCP 工具目录及等价 JSON Schema 的兼容性
- 统一界面控件,并优化动效、悬停行为与减少动态效果反馈
- 将 Light OCR 升级至 0.5.7、Electron 升级至 41.10.4,并将内置 Node.js 运行时升级至 24.18.0
- 恢复大型 Provider 数据库的刷新能力,并更新模型与 Agent 注册表
- 修复无空格长文本撑宽聊天输入框、确认按钮未翻译,以及调度器重启与手动运行反馈异常

v1.1.0-beta.11 (2026-07-31)


- Tolerated invalid MCP tool output schemas without rejecting otherwise usable tools
- 容忍无效的 MCP 工具输出 Schema,避免拒绝其他可用工具

v1.1.0-beta.10 (2026-07-31)


- Improved alert confirmations and notification feedback so user actions report reliable results
- Added MCP v2 ecosystem support and a built-in McDonald's server
- Upgraded Light OCR to 0.5.6 and moved OCR management into Plugins Hub
- Redesigned Steer messages as IM-style conversations
- Deferred automatic updates until active tasks finish
- Fixed provider image inputs by sending file parts where required
- Removed dashboard usage cost figures and hardened locale resolution
- Restored scheduled package regression checks
- Upgraded the bundled Computer Use driver to v0.14.1
- 改进提醒确认与通知反馈,确保用户操作能够可靠地显示结果
- 支持 MCP v2 生态,并新增 McDonald's 内置服务器
- 将 Light OCR 升级至 0.5.6,并将 OCR 管理移至 Plugins Hub
- 将 Steer 消息重做为类似即时通讯的对话形式
- 延迟自动更新安装,避免打断正在执行的任务
- 修复部分 Provider 的图片输入,按要求改用文件分片发送
- 移除 Dashboard 费用估算,并强化语言环境解析
- 恢复定时软件包回归检查
- 内置 Computer Use 驱动升级至 v0.14.1

v1.1.0-beta.9 (2026-07-29)


- Added Directives to Agent Memory: instructions you write take effect immediately, instructions the model suggests stay as drafts until you approve them, and suppression directives keep a topic out of recalled memory. Clearing memories now keeps your directives
- Made Agent Memory time-aware: it records when a fact was true, so expired plans and outdated states are no longer recalled as current; corrections and deletions now stick instead of reappearing in the next conversation; and memory maintenance runs incrementally instead of rescanning everything
- Added fully offline PDF OCR (Light-OCR 0.5.5): multi-page recognition with a per-attachment Auto / Text / OCR switch, page-aware truncation that reports which pages were included, and results cached and reused across history, retry, export and search
- Added GreenPT and Modelsell as built-in providers, with model lists fetched live from the provider
- Fixed enabling Computer Use blacking out the desktop on Linux/X11: the driver now starts only when a tool actually needs it, its files are verified before every launch, and a runtime that exits uncleanly is quarantined with Test runtime and Retry runtime controls in Settings
- Upgraded the bundled Computer Use driver to v0.13.1, and added a read-only picture-in-picture showing the latest snapshot of the app being controlled
- Made native preview support load only on first use so missing dependencies no longer affect startup: Browser opens in the side panel when native preview is unavailable, Computer Use keeps working without picture-in-picture, and Windows x64 now uses a statically linked runtime to reduce missing-DLL launch failures
- Fixed model context and output limits being overwritten on refresh, reset, restart and backup restore — GPT-5.6-sol on New API was capped at 16000/4096 instead of 1050000/32000 — and fixed Kimi K3 on New API sending temperature and top_p, which it does not support
- Replaced the startup window with an animated DeepChat splash
- Redesigned the Settings overview and usage dashboard: hovering a day in the activity calendar now shows that day's input, output and cache-hit tokens. The usage trend chart and estimated cost figures have been removed
- Fixed confirming a message deletion doing nothing, and delete failures now show an error instead of failing silently
- Fixed three Agent Skills issues: importing from another Agent failing with "An object could not be cloned", a failed skill snapshot migration blocking startup, and the skill list flickering when toggling a skill on or off
- Agent Memory 新增 Directives(长期指令):自己写的指令立即生效,模型建议的指令先存为草稿、经你确认后才生效,抑制类指令可以让某个话题不再被记忆召回。清空记忆时会保留这些指令
- Agent Memory 现在理解时间:会记录一条信息在什么时间范围内成立,过期的计划和已失效的状态不再被当作当前事实召回;纠正和删除会真正生效,不会在下一次对话里重新冒出来;记忆整理改为增量进行,不再每次全量扫描
- 新增完全离线的 PDF OCR(Light-OCR 0.5.5):支持多页识别,每个附件可单独选择 Auto / 文本 / OCR;超出限制时会明确告知识别到了哪些页面。识别结果会缓存,并在历史、重试、导出和搜索中复用
- 新增 GreenPT 与 Modelsell 两个内置 Provider,模型列表从服务商动态获取
- 修复 Linux/X11 下启用 Computer Use 导致桌面黑屏的问题:驱动改为在工具真正需要时才启动,每次启动前校验文件完整性;异常退出的运行时会被隔离,并在设置中提供「测试运行时」和「重试运行时」操作
- 内置 Computer Use 驱动升级至 v0.13.1,并新增只读画中画,显示被操作应用的最新截图
- 原生预览能力改为首次使用时才加载,避免依赖缺失影响应用启动:原生预览不可用时 Browser 自动打开侧边栏、Computer Use 不显示画中画但功能照常;Windows x64 改用静态链接运行时,减少缺少 DLL 导致的启动失败
- 修复模型上下文与输出上限在刷新、重置、重启和备份恢复后被覆盖的问题(New API 下 GPT-5.6-sol 会被限制为 16000/4096 而非 1050000/32000),以及 New API 下 Kimi K3 发送了它并不支持的 temperature 和 top_p
- 启动窗口更换为带动画的 DeepChat 启动页
- 重做设置概览页与用量面板:在活跃日历上悬停某一天可查看当天的输入、输出与缓存命中 token。已移除用量趋势图和费用估算
- 修复点击确认删除消息后没有任何反应的问题,删除失败时也会给出错误提示而不再静默失败
- 修复 Agent Skills 的三个问题:从其他 Agent 导入时报「An object could not be cloned」、技能快照迁移失败会阻塞启动、开关技能时列表闪烁

v1.1.0-beta.8 (2026-07-26)


- Added fully offline OCR for image attachments (Light-OCR): images are routed to vision or OCR based on the selected model, OCR text is reused across history, retry, edit and compaction, and per-attachment mode, cancellation and cache controls are available in Settings
- Gave every Agent its own Skills root and catalog, replacing the shared catalog and its sync workflow with explicit import from another Agent or from an external DeepChat data directory
- Rebuilt the Agent browser picture-in-picture as a native overlay: open-in-side-panel and close controls, dragging outside the DeepChat window, with the Canvas overlay kept as a fallback
- Added Routerra, Straico, and StepFun Token Plan as built-in provider presets
- Added Linux ARM64 installers, and gave the macOS DMG installer a proper drag-to-install window with a background image and the app and Applications icons aligned to it
- Made long conversations reuse the provider prompt cache: the system prompt no longer changes whenever a summary, handoff state or memory updates, cache markers now reach the request for OpenAI, Anthropic, Bedrock, OpenRouter and Zenmux, and compaction sizes the retained history to the model's context budget
- Retried transient provider failures with bounded, abortable backoff, and never replayed a request once text, reasoning or tool output was committed
- Stopped executing tool calls truncated by max_tokens: the batch is rejected atomically, matching error results are written, and the request is retried once
- Restructured the Agent runtime into a one-directional owner graph behind a harness facade, added a typed tool execution contract that keeps write-capable tools sequential, and rebuilt Hooks on a typed event pipeline with bounded command execution
- Fixed chat search highlights on streamed rows, sidebar search pagination, the invisible pending-assistant row, session-restore scrolling that overrode a search or spotlight jump, and session revision recovery on existing databases
- Cut Settings startup cost by lazy-loading locales (synchronous JS 4.25 MB to 0.9 MB) and reduced Dashboard CPU with cached formatters and polling that pauses in the background
- Fixed auto-update failing with Invalid input: expected string, received Date: updater metadata is now published with a quoted releaseDate and validated against electron-updater's own parser across all four channel files
- Fixed the macOS clean-install Gatekeeper failure caused by the bundled Computer Use helper, and added distribution verification for both the app and the macOS updater payload
- Rebuilt the release pipeline to verify every published package before release, and locked dependencies with a tracked pnpm lockfile for reproducible builds
- 新增完全离线的图片附件 OCR(Light-OCR):根据所选模型自动在视觉与 OCR 之间路由,OCR 文本在历史、重试、编辑与压缩中复用,并提供逐附件模式、取消与缓存管理
- 每个 Agent 拥有独立的 Skills 根目录与目录管理,取消共享目录与同步流程,改为从其他 Agent 或外部 DeepChat 数据目录显式导入
- 将 Agent 浏览器画中画重构为原生浮窗:提供打开侧边栏与关闭按钮,可拖动到 DeepChat 窗口之外,并保留 Canvas 浮层作为回退方案
- 新增 Routerra、Straico 与 StepFun Token Plan 内置 Provider
- 新增 Linux ARM64 安装包;macOS DMG 安装窗口改为带背景图的拖拽安装界面,应用图标与 Applications 快捷方式按背景对齐
- 让长对话真正复用 Provider 的提示词缓存:系统提示词不再随摘要、handoff 状态与记忆的更新而变化,缓存标记能正确传给 OpenAI、Anthropic、Bedrock、OpenRouter 与 Zenmux,压缩时按模型上下文预算保留近期历史
- 对瞬时 Provider 失败进行有界、可中断的退避重试,并在已产出文本、思考或工具调用后不再重放请求
- 不再执行被 max_tokens 截断的工具调用:整批原子拒绝并写入对应错误结果,随后仅自动重试一次
- 将 Agent runtime 重构为 harness facade 之上的单向 owner 图,引入类型化工具执行契约(可写工具强制串行),并将 Hook 重建为类型化事件管道与有界命令执行
- 修复流式消息的搜索高亮、侧边栏搜索分页、待生成消息行不可见、会话恢复滚动覆盖搜索/聚光跳转,以及已有数据库的 session revision 恢复问题
- 懒加载语言包降低设置页启动开销(同步 JS 4.25 MB 降至 0.9 MB),并通过缓存 formatter 与后台暂停轮询降低 Dashboard CPU 占用
- 修复自动更新报错 Invalid input: expected string, received Date:发布端强制为 releaseDate 加引号,并用 electron-updater 自身的解析器校验全部四个更新渠道文件
- 修复由内置 Computer Use 助手导致的 macOS 全新安装 Gatekeeper 失败,并对应用与 macOS 更新包补充分发校验
- 重构发布流水线,发布前校验每个产物;纳入 pnpm lockfile 锁定依赖,保证构建可复现

v1.1.0-beta.4 (2026-07-19)


- Added browser session import and an agent picture-in-picture view
- Improved Feishu delivery error feedback and test user-data directory handling
- Reworked the Tape runtime into layered architecture with improved session recall reliability
- Restructured the chat main renderer and added rendering performance diagnostics
- 新增浏览器会话导入与 Agent 画中画视图
- 改进飞书投递错误反馈及测试用户数据目录处理
- 将 Tape runtime 重构为分层架构,提升会话召回可靠性
- 重构聊天主渲染器并新增渲染性能诊断

v1.1.0-beta.3 (2026-07-17)


- Reworked the overall architecture and improved reliability
- 重构整体架构,提升可靠性

v1.1.0-beta.2 (2026-07-16)


- Centralized Subagent capability policy ownership across the agent runtime and sessions
- Added explicit subagent tape lineage with linked tape views and cross-tape recall
- Separated Tape runtime tool capabilities for clearer isolation
- Split agent runtime lifecycle owners and tightened message, permission, and stop boundaries
- Improved renderer interaction quality for panels, MCP market, and message actions
- Stabilized chat scroll ownership and hardened session view ownership
- Fixed Agent Memory provider cancellation and config ABA fence bypass
- Upgraded markstream-vue and stream-monaco for streaming render alignment
- 集中管理 Subagent capability policy 与 ownership,统一 runtime 与 session 边界
- 新增显式 subagent tape lineage,支持 linked tape 视图与跨 tape 召回
- 拆分 Tape runtime 工具能力边界,提升隔离性
- 拆分 agent runtime lifecycle owners,收紧 message、permission 与 stop 边界
- 改进面板、MCP market 与消息操作等交互体验
- 稳定聊天滚动归属并强化 session view ownership
- 修复 Agent Memory provider cancellation 与 config ABA fence 绕过问题
- 升级 markstream-vue 与 stream-monaco,对齐流式渲染依赖

v1.1.0-beta.1 (2026-07-14)


- Added Grok OAuth device login and DaoXE provider support
- Reworked the agent runtime and session boundaries to improve isolation and lifecycle handling
- Improved Agent Memory vector storage, embedding reindex recovery, and bounded workload reliability
- Improved streaming rendering and preserved the active sidebar workspace while navigating chat history
- Fixed ACP direct-runtime refresh and manual health checks
- 新增 Grok OAuth 设备登录和 DaoXE Provider 支持
- 重构 Agent runtime 与 session 边界,提升隔离性和生命周期处理能力
- 改进 Agent Memory 向量存储、embedding reindex 恢复与有界工作负载的可靠性
- 优化流式渲染,并在浏览聊天历史时保留侧边栏当前工作区
- 修复 ACP direct runtime 刷新和手动健康检查问题

v1.0.9 (2026-07-10)


- Fixed Agent Memory correctness edge cases and strengthened record-level privacy controls
- Fixed chat scroll position jumping to the bottom during streaming output
- Fixed chat history restoration race conditions that could cause message loss
- 修复 Agent Memory 正确性边界问题,并强化记录级隐私控制
- 修复流式输出时聊天滚动位置跳到底部的问题
- 修复聊天历史恢复竞态条件可能导致消息丢失的问题

v1.0.8 (2026-07-10)


- Added the main-window Plugins Hub, Feishu/Lark install authentication, and streaming card delivery for remote control
- Added MCP OAuth authentication, agent-scoped plugin controls for skills, MCP servers, and tools, plus improved skill sync workflows
- Expanded Agent Memory with task-aware recall, redesigned settings, health and lifecycle diagnostics, in-chat visibility, and reliability improvements
- Reworked scheduled tasks into Cron Jobs with a dedicated scheduler runtime, delivery routing, settings UI, and agent tool support
- Added TokenLab, OpenCode Go, and GPT-5.6/Codex 5.6 support with configurable effort levels
- Upgraded the provider and runtime stack to AI SDK v7, Zod v4, Electron 40.10.5, and DuckDB 1.5.4, while improving startup, chat rendering, scrolling, and responsive interaction performance
- Fixed New API response handling, endpoint debug selection, memory first-turn stalls, context-overflow auto-handoff, ACP permission requests, assistant loading state, attachment replay, draft cleanup, and macOS window restoration and hide behavior
- 新增主窗口插件中心、飞书/Lark 安装认证,以及远程控制流式卡片推送
- 新增 MCP OAuth 认证、Agent 级 skills、MCP servers 与 tools 控制,并改进 skill sync 工作流
- 扩展 Agent Memory,支持任务感知召回、重做设置页、健康与生命周期诊断、聊天内可见性,并提升可靠性
- 将 scheduled tasks 重构为 Cron Jobs,支持独立 scheduler runtime、delivery routing、设置 UI 和 Agent tool
- 新增 TokenLab、OpenCode Go 和 GPT-5.6/Codex 5.6 支持,并提供可配置的 effort levels
- 将 provider 与 runtime 栈升级至 AI SDK v7、Zod v4、Electron 40.10.5 和 DuckDB 1.5.4,同时提升启动、聊天渲染、滚动与响应式交互性能
- 修复 New API 响应处理、endpoint debug 选择、memory 首轮卡顿、context overflow 自动 handoff、ACP 权限请求、Assistant loading state、附件内容回放、草稿清理,以及 macOS 窗口恢复与隐藏行为

v1.0.8-beta.4 (2026-07-09)


- Added TokenLab and OpenCode Go provider support
- Redesigned Agent Memory settings with inline configuration, inbox, diagnostics, persona, and list views
- Improved Agent Memory reliability for retrieval, pruning, write coordination, vector storage, and audit handling
- Optimized chat markdown rendering to reduce send-time jitter and improve message layout stability
- Updated Computer Use driver/runtime metadata and renamed the bundled CUA skill to computer-use
- 新增 TokenLab 和 OpenCode Go provider 支持
- 重做 Agent Memory 设置页,加入 inline configuration、inbox、diagnostics、persona 和 list views
- 改进 Agent Memory retrieval、pruning、write coordination、vector storage 与 audit handling 的可靠性
- 优化聊天 Markdown 渲染,减少发送时抖动并提升消息布局稳定性
- 更新 Computer Use driver/runtime 元数据,并将内置 CUA skill 重命名为 computer-use

v1.0.8-beta.3 (2026-07-06)


- Added MCP OAuth authentication, assistant approval review mode, delete confirmations, and in-chat Agent Memory visibility
- Reworked scheduled tasks into Cron Jobs with scheduler runtime, delivery routing, settings UI, and agent tool support
- Improved Agent Memory lifecycle management, skill sync UX, startup performance, and packaged Linux OpenDAL native libraries
- Fixed ACP permission requests, assistant loading state, attachment replay behavior, MCP session tools, skill adoption, and multiple chat/settings regressions
- 新增 MCP OAuth 认证、Assistant approval review mode、删除确认,以及聊天内 Agent Memory 可见性
- 将 scheduled tasks 重构为 Cron Jobs,支持 scheduler runtime、delivery routing、设置页 UI 和 Agent tool
- 改进 Agent Memory 生命周期管理、skill sync 体验、启动性能,并补齐 Linux OpenDAL native libraries 打包
- 修复 ACP permission requests、Assistant loading state、附件内容重复回放、MCP session tools、skill adopt 和多项聊天/设置回归问题

v1.0.8-beta.2 (2026-06-30)


- Added agent-scoped plugin extension controls for skills, MCP servers, and tools
- Added Agent Memory health snapshots and audit details in settings
- Fixed settings window sizing, sidebar chat actions, manual memory category handling, skill conflict popup layout, and provider 302 domain
- Migrated commit hooks to commitlint and refreshed electron-builder plus provider and ACP registry data
- 新增 Agent 级插件扩展控制,可按 Agent 限制 skills、MCP servers 和 tools
- 新增 Agent Memory health snapshot 与设置页审计详情
- 修复设置窗口尺寸、侧边栏会话操作、手动添加 memory category、技能冲突弹窗布局和 provider 302 domain
- 迁移 commit hooks 到 commitlint,并刷新 electron-builder、Provider 与 ACP registry 数据

v1.0.8-beta.1 (2026-06-29)


- Added the main-window Plugins Hub plus Feishu/Lark install authentication and streaming card delivery for remote control
- Upgraded the provider/runtime stack with AI SDK v7, Zod v4 schemas, Electron 40.10.5, DuckDB 1.5.4, and refreshed toolchains
- Fixed New API responses handling and endpoint debug selection, memory first-turn stalls, context-overflow auto-handoff, message-scoped skill activation, and request preview editor layout
- 新增主窗口插件中心,并支持飞书/Lark 安装认证与远程控制流式卡片推送
- 升级 provider/runtime 栈到 AI SDK v7、Zod v4 schema、Electron 40.10.5、DuckDB 1.5.4,并刷新工具链
- 修复 New API responses 处理与 endpoint debug 选择、memory 首轮卡顿、context overflow 自动 handoff、按消息激活 skill,以及请求预览编辑器布局

v1.0.7 (2026-06-25)


- Added the default chat workspace, task-aware Agent Memory, and persistent agent plan blocks in chat history
- Improved Computer Use helper runtime isolation, packaging, shutdown cleanup, and refreshed bundled dependencies and resources
- Fixed fresh SQLite schema bootstrap, stale Tape FTS search hits, New API responses endpoint configuration, sidebar history pagination, and locked skill reinstall handling
- 新增默认聊天工作区、任务感知 Agent Memory,并支持在聊天历史中持久化 Agent plan blocks
- 优化 Computer Use helper runtime 的隔离、打包和退出清理,并刷新内置依赖与资源
- 修复首次 SQLite schema 初始化、陈旧 Tape FTS 搜索命中、New API responses endpoint 配置、侧边栏历史分页和技能重装锁定目录处理

v1.0.7-beta.2 (2026-06-25)


- Fixed fresh SQLite schema bootstrap so new installations initialize reliably
- Fixed New API responses endpoint configuration so it stays separate from other endpoint options
- 修复首次 SQLite schema 初始化,提升新安装启动可靠性
- 修复 New API responses endpoint 配置,避免与其他 endpoint 选项混用

v1.0.7-beta.1 (2026-06-24)


- Added the default chat workspace so new chats start with prepared workspace context
- Added task-aware Agent Memory with improved maintenance scheduling and management controls
- Improved Computer Use helper runtime isolation, packaging, and shutdown cleanup
- Fixed sidebar history pagination, locked skill reinstall handling, and refreshed Markstream Vue
- 新增默认聊天工作区,让新聊天具备预设工作区上下文
- 新增任务感知 Agent Memory,并改进维护调度与管理控制
- 优化 Computer Use helper runtime 的隔离、打包和退出清理
- 修复侧边栏历史分页、技能重装锁定目录处理,并刷新 Markstream Vue

v1.0.6 (2026-06-22)


- Added S3-compatible cloud backup sync, OpenDAL-based backup storage, and workspace environment management
- Added Agent Memory, Tape view manifests, replay lineage details, and focused workspace file inspection
- Added OpenAI Codex runtime support, built-in API key providers, AWS Bedrock profile authentication, MiniMax M3 handling, and drag-and-drop skill installation
- Added cross-platform Computer Use runtime packaging and improved agent runtime discovery, watcher reliability, and provider/ACP registry freshness
- Fixed packaged cloud sync startup, Codex login behavior, memory followups, MCP server cleanup, steer abort queue handling, sidebar pagination, markdown scrollbar jitter, and settings save payloads
- 新增 S3 兼容云备份同步、基于 OpenDAL 的备份存储,以及工作区环境管理
- 新增 Agent Memory、Tape view manifests、replay lineage 详情,以及聚焦式工作区文件检查
- 新增 OpenAI Codex runtime、内置 API key providers、AWS Bedrock profile 认证、MiniMax M3 处理和技能拖放安装
- 新增跨平台 Computer Use runtime 打包,并改进 Agent runtime 发现、工作区监听可靠性和 Provider/ACP registry 更新
- 修复打包版云同步启动、Codex 登录行为、memory followups、MCP server 清理、steer abort queue 处理、侧边栏分页、Markdown 滚动条抖动和设置保存 payload 问题

v1.0.6-beta.8 (2026-06-20)


- Added OpenAI Codex runtime support with OAuth authentication and provider-specific request handling
- Added built-in API key providers and provider registry metadata for easier model setup
- Added environment management for workspace sessions and improved directory state persistence
- Fixed steer abort queue handling so pending chat input pauses and resumes more reliably
- Updated Markstream Vue and refreshed bundled provider/model and ACP registry data
- 新增 OpenAI Codex runtime 支持,包含 OAuth 认证与 Provider 专属请求处理
- 新增内置 API key providers 和 Provider registry metadata,简化模型配置
- 新增工作区会话的环境管理,并改进目录状态持久化
- 修复 steer abort queue 处理,让待处理聊天输入的暂停和恢复更可靠
- 更新 Markstream Vue,并刷新内置 Provider/模型与 ACP registry 数据

v1.0.6-beta.7 (2026-06-17)


- Added Tape manifest integrity and lineage details so replay traces can be audited more reliably
- Added a workspace single item viewer for focused file inspection from the workspace panel
- Added cross-platform CUA runtime packaging and plugin runtime build improvements
- Fixed deterministic Tape view hashing and trace sequence handling
- 新增 Tape manifest 完整性与 lineage 详情,让 replay trace 审计更可靠
- 新增工作区单项查看器,方便从工作区面板聚焦检查文件
- 支持了 Windows 和 Linux 平台的 Computer Use 能力
- 修复 Tape view hash 与 trace sequence 的确定性处理

v1.0.6-beta.6 (2026-06-16)


- Added Agent Memory so agents can extract, manage, and reuse persistent memory in agent workflows
- Added DeepChat Tape view manifests and richer trace inspection for replay and context provenance
- Added drag-and-drop skill installation, MiniMax M3 handling, and refreshed provider/model and ACP registry data
- Improved workspace watching with a Parcel watcher utility host for large workspace reliability
- Fixed markdown code block scrollbar jitter, sidebar history pagination stalls, and cloned settings save payloads
- 新增 Agent Memory,让 Agent 工作流可以提取、管理并复用持久记忆
- 新增 DeepChat Tape view manifest 与更完整的 trace 检查,支持 replay 和上下文来源追踪
- 新增技能拖放安装、MiniMax M3 处理,并刷新 Provider/模型与 ACP registry 数据
- 使用 Parcel watcher utility host 改进工作区监听,提升大型工作区可靠性
- 修复 Markdown 代码块滚动条抖动、侧边栏历史分页卡住,以及设置保存 payload clone 问题

v1.0.6-beta.5 (2026-06-11)


- Fixed packaged app startup by bundling the OpenDAL native binding needed by cloud sync
- 修复打包应用启动问题,补齐云同步所需的 OpenDAL native binding

v1.0.6-beta.4 (2026-06-11)


- Migrated cloud sync to OpenDAL and improved R2 setup for more reliable S3-compatible backups
- Fixed agent runtime FFF loading from unpacked app builds and cleaned up logging, skill IO, and status bar behavior
- 将云同步迁移到 OpenDAL,并优化 R2 设置,让 S3 兼容备份更可靠
- 修复 Agent 运行时在 unpacked app 构建中的 FFF 加载,并清理日志、skill IO 与状态栏行为

v1.0.6-beta.3 (2026-06-10)


- Added AWS Bedrock profile authentication support for easier account and credential switching
- Improved agent runtime node discovery with FFF search and refreshed AI SDK packages plus bundled resources
- Fixed Anthropic reasoning controls so supported thinking settings stay available after provider data refreshes
- Fixed AWS provider styling consistency in the provider configuration UI
- 新增 AWS Bedrock profile 认证支持,方便切换账号与凭据
- 改进 Agent 运行时节点发现,使用 FFF 搜索,并刷新 AI SDK 依赖与内置资源
- 修复 Anthropic 推理控制,让支持的 thinking 设置在 Provider 数据刷新后仍保持可用
- 修复 AWS Provider 配置界面的样式一致性

v1.0.6-beta.2 (2026-06-08)


- Fixed release CI tooltip module resolution so macOS release builds can complete reliably
- 修复发布 CI 中 tooltip 模块解析问题,让 macOS 发布构建可稳定完成

v1.0.6-beta.1 (2026-06-08)


- Added S3-compatible cloud backup sync for more flexible cross-device data backup
- Improved Dify knowledge import compatibility with the latest retrieval_model schema
- Refreshed bundled provider and ACP registry data for current model and agent availability
- 新增 S3 兼容云备份同步,让跨设备数据备份更灵活
- 优化 Dify 知识库导入兼容性,适配最新 retrieval_model schema
- 刷新内置 Provider 与 ACP registry 数据,更新模型和 Agent 可用性

v1.0.5 (2026-06-05)


- Added scheduled tasks, agent progress todos, session transfer, session tape memory, and remote /agent commands for more persistent agent workflows
- Added OpenAI-compatible video generation, tool result image previews, remote image delivery, and richer TTS model routing controls
- Added provider configuration import for CC Switch and external tools, plus refreshed bundled provider data to 142 providers and 6,964 models
- Added encrypted SQLite database storage and a safer settings Danger Zone reset flow
- Added the workspace file tree sidebar, richer Git diff rendering, sidebar theme and chat shortcut controls, and a cleaner new-thread input transition
- Improved chat readability and performance with automatic activity collapsing, merged activity groups, content-visibility message windowing, and smoother streaming
- Improved ACP v1 and remote-control reliability with stronger session handling, diagnostics, alias resolution, media delivery, and working-directory errors
- Fixed macOS foreground identity, provider capability handling, browser recovery errors, startup warning noise, floating button persistence, and session list behavior
- 新增定时任务、Agent 进度 todo、会话转移、Session Tape Memory 和远程 /agent 命令,让 Agent 工作流更持久可控
- 新增 OpenAI 兼容视频生成、工具结果图片预览、远程图片投递和更完整的 TTS 模型路由控制
- 新增 CC Switch 与外部工具的 Provider 配置导入,并刷新内置 Provider 数据至 142 个 Provider、6,964 个模型
- 新增 SQLite 数据库加密存储,并让设置里的 Danger Zone 重置流程更安全
- 新增工作区文件树侧栏、更丰富的 Git diff 渲染、侧栏主题与聊天快捷键控制,以及更清爽的新会话输入框过渡
- 通过活动自动折叠、活动组合并、content-visibility 消息窗口和更平滑的流式渲染,提升聊天可读性与性能
- 提升 ACP v1 与远程控制可靠性,强化会话处理、诊断、别名解析、媒体投递和工作目录错误处理
- 修复 macOS 前台身份、Provider 能力处理、浏览器恢复错误、启动告警噪声、浮动按钮位置持久化和会话列表行为

v1.0.5-beta.8 (2026-06-02)


- Added a collapsible workspace file tree sidebar and an animated theme toggle in the app sidebar
- Added automatic chat activity collapsing so completed reasoning and tool-call work stays easier to scan
- Improved ACP v1 reliability with stronger capability handling, session persistence, terminal behavior, diagnostics, and protocol coverage
- Fixed model capability handling for temperature controls and provider database budget sentinels
- 新增可折叠的工作区文件树侧栏和应用侧栏动态主题切换按钮
- 新增聊天活动自动折叠,让完成后的思考和工具调用内容更易扫读
- 提升 ACP v1 可靠性,完善能力处理、会话持久化、终端行为、诊断和协议覆盖
- 修复温度控制和 Provider 数据库预算特殊值的模型能力处理

v1.0.5-beta.7 (2026-06-01)


- Added agent session transfer so chats can be preserved or moved when changing agent ownership
- Added a richer workspace Git diff panel rendering experience
- Improved NewAPI routing, AI SDK system prompt handling, image-capable model switching, and plan model styling
- Fixed workspace file reference insertion, floating button position persistence, and collapsed sidebar agent expansion
- 新增 Agent 会话转移能力,让切换 Agent 归属时可以保留或移动聊天
- 新增更完整的工作区 Git diff 面板渲染体验
- 优化 NewAPI 路由、AI SDK system prompt 处理、图片能力模型切回聊天和计划模型样式
- 修复工作区文件引用插入、浮动按钮位置持久化和折叠侧边栏 Agent 展开问题

v1.0.5-beta.6 (2026-05-29)


- Added /agent commands across remote-control channels so remote conversations can switch agents more easily
- Added tool result image previews and remote image delivery for richer agent output
- Added skill draft confirmation cards with view, install, and discard actions, plus Top P generation controls
- Improved ACP agent alias resolution and remote workdir error handling
- Fixed agent exec utility host startup failures, prerelease upgrade channel handling, startup warning noise, and inline stream auto-follow jitter
- 新增远程控制渠道的 /agent 命令,让远程会话更方便地切换 Agent
- 新增工具结果图片预览与远程图片投递,完善 Agent 输出展示
- 新增带查看、安装、丢弃操作的 Skill 草稿确认卡,并加入 Top P 生成设置
- 优化 ACP Agent 别名解析和远程工作目录错误处理
- 修复 Agent exec utility host 启动失败、预发布渠道升级、防降级、启动告警噪声和流式输出底部抖动问题

v1.0.5-beta.5 (2026-05-27)


- Added scheduled tasks for recurring agent work
- Added high-priority language support and completed missing locale keys for broader localization coverage
- Simplified the data settings Danger Zone entry so reset choices stay inside the confirmation dialog
- Fixed MiMo Pro TTS routing so it uses chat-compatible provider behavior
- Preserved paired Feishu users across remote-control state updates
- 新增定时任务能力,支持周期性的 Agent 工作
- 新增高优先级语言支持,并补齐缺失的本地化 keys,扩大多语言覆盖
- 简化数据设置中的 Danger Zone 入口,将具体重置选项收进确认弹窗
- 修复 MiMo Pro 的 TTS 路由,使其使用兼容聊天的 Provider 行为
- 修复飞书远程控制状态更新时配对用户被丢失的问题

v1.0.5-beta.4 (2026-05-25)


- Added session tape memory to persist and compress agent conversation history more reliably
- Synced CUA driver to v0.2.0 with diagnostic tools and improved app launching
- Telegram replies now render Markdown as HTML for proper formatting
- Improved agent steer execution responsiveness
- Updated AI SDK packages and refreshed bundled provider registry data
- 新增 Session Tape Memory,更可靠地持久化和压缩 Agent 会话历史
- 同步 CUA driver 至 v0.2.0,新增诊断工具并改进应用启动能力
- Telegram 回复现在将 Markdown 渲染为 HTML,格式展示更准确
- 提升 Agent steer 执行的响应性
- 更新 AI SDK 依赖并刷新内置 Provider registry 数据

v1.0.5-beta.3 (2026-05-22)


- Added encrypted SQLite database storage to strengthen local data protection
- Improved onboarding guide handoff by refreshing state after setup transitions
- Refined onboarding spotlight rendering with SVG paths and fixed panel stacking and hover performance issues
- 新增 SQLite 数据库加密存储,增强本地数据保护
- 优化引导流程交接,在设置切换后刷新状态
- 优化引导高亮的 SVG path 渲染,并修复面板层级与 hover 性能问题

v1.0.5-beta.2 (2026-05-21)


- Added provider configuration import with preview, validation, conflict handling, and localized settings UI
- Added CC Switch configuration import and broader provider import path discovery for smoother migration from external tools
- Added a hero transition for the chat input on new threads and refined chat overlay/sidebar styling for a cleaner first-run flow
- Improved session list behavior with stable alphabetical ordering and more predictable pinning
- Added Feishu thing reactions and tightened Feishu remote-control runtime handling
- 新增 Provider 配置导入,支持预览、校验、冲突处理和本地化设置界面
- 新增 CC Switch 配置导入,并扩展 Provider 导入路径发现,方便从外部工具迁移
- 新增新会话聊天输入框的 hero 过渡,并优化聊天浮层与侧边栏样式,让首次使用流程更清爽
- 优化会话列表行为,保持稳定的字母排序和更可预期的置顶表现
- 新增飞书 thing 表情互动,并加强飞书远程控制运行时处理

v1.0.5-beta.1 (2026-05-19)


- Added an agent progress todo tool with floating progress UI and plan message rendering so long-running agent work is easier to track
- Added OpenAI-compatible video generation with model settings, generated video message rendering, and provider runtime support
- Improved TTS routing and Gemini TTS behavior with unified model settings, provider metadata, and stronger runtime coverage
- Improved Feishu plugin packaging with platform bundles, release workflow support, and updated packaging documentation
- Updated TypeScript native preview, vue-tsgo, provider registry, and ACP registry data for current tooling and runtime compatibility
- Fixed image-route chat budget handling so generated image requests avoid unnecessary context budget failures
- 新增 Agent 进度 todo 工具、浮动进度界面和计划消息渲染,让长时间 Agent 工作更容易跟踪
- 新增 OpenAI 兼容的视频生成能力,包含模型设置、生成视频消息渲染和 Provider 运行时支持
- 优化 TTS 路由和 Gemini TTS 表现,补齐统一模型设置、Provider 元数据和更强的运行时覆盖
- 优化飞书插件打包,支持平台 bundle、发布 workflow,并更新插件打包文档
- 更新 TypeScript native preview、vue-tsgo、Provider registry 和 ACP registry 数据,提升当前工具链与运行时兼容性
- 修复图片路线的聊天预算处理,让生成图片请求避免不必要的上下文预算失败

v1.0.4 (2026-05-15)


- Added guided onboarding, voice input transcription, and a redesigned settings control center to make first setup and daily configuration easier
- Added agent image generation, OpenAI image settings, Mac computer use, manual compaction, and side panel fullscreen controls for more capable agent workflows
- Added Mistral, Xiaomi Token Plan regions, refreshed provider data, and improved model capability controls for broader model access
- Improved remote control across Feishu, Weixin, Discord, QQ Bot, Telegram, and WeChat iLink with richer media delivery and steadier streamed replies
- Improved ACP and agent runtime reliability with safer working-directory handling, context budgeting, session routing, tool output limits, and persisted turn metadata
- Improved chat and workspace responsiveness with smoother Markdown streaming, older-message pagination, YoBrowser activity feedback, and more native desktop interactions
- Hardened plugin MCP isolation, SVG and external-link handling, provider verification, config import compatibility, and SQLite upgrade recovery
- Updated bundled runtimes, AI SDK patch versions, Markstream rendering, provider registry data, and release packaging support for stable builds
- 新增引导式上手、语音输入转写和重新设计的设置控制中心,让首次配置与日常设置更顺手
- 新增 Agent 图片生成、OpenAI 图片设置、Mac 电脑使用、手动压缩和侧边栏全屏控制,提升 Agent 工作流能力
- 新增 Mistral、小米 Token Plan 多区域支持,刷新 Provider 数据,并优化模型能力控制,扩展模型接入范围
- 优化飞书、微信、Discord、QQ Bot、Telegram 与 WeChat iLink 远程控制,支持更丰富的媒体投递和更稳定的流式回复
- 优化 ACP 与 Agent 运行时可靠性,包括工作目录保护、上下文预算、会话路由、工具输出限制和 turn 元数据持久化
- 优化聊天与工作区响应表现,改进 Markdown 流式渲染、历史消息分页、YoBrowser 活动反馈和更原生的桌面交互
- 加强 Plugin MCP 隔离、SVG 与外部链接处理、Provider 验证、配置导入兼容性和 SQLite 升级恢复
- 更新内置运行时、AI SDK patch 版本、Markstream 渲染、Provider registry 数据与发布打包支持,面向稳定构建

v1.0.4-beta.8 (2026-05-12)


- Added a redesigned settings control center with overview cards, grouped navigation, settings activity, and refined MCP, provider, and data panels
- Added a fullscreen toggle for the side panel and improved layout responsiveness across side panel and workspace views
- Added an isolated Feishu plugin settings surface with credential management, MCP presets, and plugin-owned MCP servers hidden from global MCP settings
- ACP client runtime now has clearer connection and session routing, debug logging, path guarding, and persisted turn metadata for steadier ACP sessions
- Weixin remote control now delivers generated images and avoids leaving silent pending interactions behind
- Feishu remote replies now send post payloads with the expected message shape
- Agent failed-message context is preserved more consistently after compaction and context-pressure errors
- Updated AI SDK patch versions and refreshed bundled provider and ACP registry data for fresher runtime compatibility
- 设置页升级为控制中心,新增概览卡片、分组导航、设置活动记录,并优化 MCP、Provider 与数据设置面板
- 新增侧边栏全屏切换,并优化侧边栏与工作区视图的布局响应表现
- 新增隔离的飞书插件设置页,支持凭证管理、MCP 预设,并从全局 MCP 设置中隐藏插件自有 MCP server
- ACP client runtime 现在具备更清晰的连接与会话路由、调试日志、路径保护和 turn 元数据持久化,让 ACP 会话更稳定
- 微信远程控制现在可以发送生成图片,并避免留下静默的 pending 交互
- 飞书远程回复现在会按预期消息结构发送 post payload
- Agent 在上下文压缩和上下文压力错误后,会更稳定地保留失败消息上下文
- 更新 AI SDK patch 版本,并刷新内置 Provider 与 ACP registry 数据,提升运行时兼容性新鲜度

v1.0.4-beta.7 (2026-05-11)


- Added Mistral as a built-in provider, including model icons, provider catalog support, and deeplink handling
- Agent runs now budget tool schemas and tool output more defensively, reducing oversized context failures and follow-up stalls
- Context-window overflow errors now include budget diagnostics and try pressure recovery before failing oversized requests
- Feishu remote control replies now use optimized Markdown posts for headings, tables, lists, code blocks, and streamed updates
- Markdown streaming now stays smooth while messages are loading without leaving completed content in a streaming state
- Upgraded markstream-vue to 0.0.14-beta.8 for improved Markdown rendering behavior
- Agent terminal execution is steadier when shells, working directories, or context compaction need fallback handling
- Disabled providers no longer trigger verification requests from settings screens
- Plugin MCP servers now keep their lifecycle more isolated, improving start/stop behavior and built-in plugin visibility
- 新增 Mistral 内置 Provider,补齐模型图标、Provider 目录与 deeplink 支持
- Agent 运行会更谨慎地预算工具 schema 与工具输出,减少上下文过大和后续执行卡住的问题
- 上下文窗口溢出错误现在会带上预算诊断,并在失败前尝试恢复上下文压力
- 飞书远程控制回复改用优化后的 Markdown post,改善标题、表格、列表、代码块和流式更新
- Markdown 流式渲染只在消息加载中保持平滑,完成后的内容不会继续停留在流式状态
- markstream-vue 升级到 0.0.14-beta.8,改善 Markdown 渲染表现
- 当 shell、工作目录或上下文压缩需要 fallback 时,Agent 终端执行更稳定
- 设置页不会再对已禁用的 Provider 发起验证请求
- Plugin MCP server 的生命周期隔离更清晰,启动、停止和内置插件展示更可靠

v1.0.4-beta.6 (2026-05-09)


- Agents can now generate images right inside chat, with OpenAI image settings available when you want more control
- Image previews and image actions feel smoother, especially around generated results and tool output
- Long conversations should feel lighter when you scroll back through older messages
- Sync and import are more forgiving when settings come from a different app version
- Mac computer use got a couple of driver updates, so window handling, clicking, and app control should be steadier
- Fixed a handful of everyday annoyances around Ollama, provider search, Windows command output, search docs, and empty computer-use settings messages
- Agent 现在可以直接在聊天里生成图片;需要细调时,也能设置 OpenAI 图片生成选项
- 图片预览和图片操作更顺了一些,生成结果和工具输出里的图片都更好处理
- 长对话回看历史时会轻快一点,旧消息加载不再那么吃劲
- 设置同步和导入更宽容了,从不同版本带来的备份也更稳
- Mac 电脑使用能力升级了几轮驱动,窗口处理、点击和控制应用会更稳
- 修了一批日常小毛病,包括 Ollama、模型服务商搜索、Windows 命令输出、搜索文档和电脑使用设置里的空提示

v1.0.4-beta.5 (2026-05-04)


- Added Mac computer use capability for enhanced desktop automation
- Added launch at login and access controls for better app startup management
- Enhanced agent capabilities with improved model source derivation
- Upgraded markstream-vue for better stream rendering performance
- Fixed disabled provider models still appearing in model selection
- Fixed DeepSeek empty reasoning content handling
- Fixed file join failures in chat flows
- 新增 Mac 电脑使用功能,增强桌面自动化能力
- 新增开机启动与访问控制,优化应用启动管理
- 增强 Agent 功能,优化模型源选择逻辑
- 升级 markstream-vue,提升流式渲染性能
- 修复已禁用供应商模型仍在模型选择中显示的问题
- 修复 DeepSeek 空推理内容处理
- 修复聊天流程中的文件连接失败问题

v1.0.4-beta.4 (2026-04-29)


- Added model fetching fallbacks for Anthropic and Gemini so provider model lists recover more reliably
- Added Xiaomi Token Plan providers for CN, SGP, and AMS regions
- Enhanced DeepSeek V4 compatibility across provider and model workflows
- Improved active chat input routing and tool-call image previews for clearer chat workflows
- Fixed agent and ACP workspace propagation, interleaved tool streams, and context budgeting for tool schemas
- 新增 Anthropic 与 Gemini 模型拉取 fallback,提升 Provider 模型列表恢复稳定性
- 新增小米 Token Plan 的 CN、SGP 与 AMS 区域 Provider
- 增强 DeepSeek V4 在 Provider 与模型流程中的兼容性
- 优化当前聊天输入路由与工具调用图片预览,让聊天流程更清晰
- 修复 Agent 与 ACP 工作区传递、交错工具流以及工具 schema 上下文预算处理

v1.0.4-beta.3 (2026-04-27)


- Fixed attachment date metadata transfer across IPC payloads so attachment records stay valid in chat flows
- 修复附件日期元数据在 IPC 载荷中的传递,确保聊天流程中的附件记录保持有效

v1.0.4-beta.2 (2026-04-27)


- Preserved interleaved reasoning output so mixed reasoning and answer streams stay in the correct order
- Updated the Markstream renderer to the stable 0.0.13 release for more reliable Markdown streaming
- Improved chat message transitions, sidebar updates, and side panel rendering performance
- Fixed RTK and built-in knowledge configuration status handling across MCP tool setup flows
- 保留交错 reasoning 输出顺序,确保 reasoning 与正文混合流式内容按预期展示
- 将 Markstream 渲染器更新到稳定版 0.0.13,提升 Markdown 流式渲染可靠性
- 优化聊天消息动效、侧边栏更新与侧边面板渲染性能
- 修复 RTK 与内置知识库配置状态处理,完善 MCP 工具配置流程

v1.0.4-beta.1 (2026-04-25)


- Improved remote control media delivery across Discord, Feishu, QQ Bot, Telegram, and WeChat iLink, including block streaming and file handling
- Fixed ACP working directory propagation for remote executions so agent commands run in the intended workspace
- Added batch model status updates to reduce provider model list churn and keep model management more responsive
- Hardened renderer model capability detection, external URL opening, and SVG sanitization against stale state and unsafe links
- Fixed RTK runtime startup when the expected hook is missing, improving agent runtime resilience on affected installs
- 优化 Discord、飞书、QQ Bot、Telegram 与微信 iLink 的远程控制媒体投递,完善块流式输出与文件处理
- 修复远程执行中的 ACP 工作目录传递,确保 agent 命令在预期工作区运行
- 新增模型状态批量更新,减少 Provider 模型列表抖动并提升模型管理响应速度
- 加强渲染端模型能力检测、外部链接打开与 SVG 清理,避免过期状态和不安全链接
- 修复缺少预期 hook 时 RTK runtime 启动失败的问题,提升受影响安装环境下的 agent runtime 韧性

v1.0.3 (2026-04-24)


- Added DeepSeek V4 series model support and refreshed provider model data for more complete default model availability
- Migrated model requests to the AI SDK runtime for more consistent provider behavior, streaming, prompt cache, and tool calling
- Expanded remote control into a unified multi-channel setup with Discord, QQ Bot, and WeChat iLink support
- Added project workspace directories, privacy mode, inline chat session renaming, long user message collapse, and improved new chat entry behavior
- Added NewAPI and Astraflow (ModelVerse) provider support, richer model capability controls, request timeout settings, and more reliable model list management
- Improved desktop security, startup responsiveness, embedded browser resizing, image paste submission, Gemini compatibility, and SQLite upgrade recovery
- Added Sharp native package hoisting to keep image processing dependencies available in release builds
- 新增 DeepSeek V4 系列模型支持,并刷新 Provider 模型数据,提升默认模型可用性覆盖
- 将模型请求迁移到 AI SDK 运行时,提升 Provider 行为、流式输出、Prompt Cache 与工具调用一致性
- 远程控制升级为统一多渠道配置,新增 Discord、QQ Bot 与微信 iLink 支持
- 新增项目工作区目录、隐私模式、会话内联重命名、长用户消息折叠,并优化新建会话入口体验
- 新增 NewAPI 与 Astraflow(ModelVerse)Provider,补充模型能力控制、请求超时配置与更稳定的模型列表管理
- 提升桌面端安全性、启动响应、内嵌浏览器尺寸调整、图片粘贴提交、Gemini 兼容性与 SQLite 升级恢复稳定性
- 增加 Sharp 原生包 hoist 配置,确保图片处理依赖在 release 构建中可用

v1.0.3-beta.6 (2026-04-22)


- Added model initialization in settings so ModelSelect respects the current chat mode and restores default model controls more reliably
- Added ACP registry icon request handling in the floating widget to improve agent icon rendering and related session visuals
- Simplified YoBrowser host readiness handling to keep the embedded browser lifecycle more predictable
- 新增设置页模型初始化流程,使 ModelSelect 更准确地遵循当前聊天模式,并提升默认模型配置恢复稳定性
- 新增悬浮组件中的 ACP registry 图标请求处理,优化 Agent 图标渲染与相关会话视觉表现
- 精简 YoBrowser host readiness 处理逻辑,提升内嵌浏览器生命周期的可预测性

v1.0.3-beta.5 (2026-04-22)


- Added privacy mode and inline chat session renaming to improve workspace discretion and session organization
- Added request timeout controls with a higher default range, and refined Kimi fixed-temperature plus Gemini v1beta compatibility handling
- Improved startup and runtime responsiveness through asynchronous icon loading, store initialization cleanup, and more stable navigation payload normalization
- Hardened desktop security by enabling Electron context isolation and disabling node integration for embedded web contents
- Fixed several workflow regressions across trackpad scrolling, new thread entry visibility, project clearing, timeout propagation, and upgraded SQLite/provider recovery
- 新增隐私模式与会话内联重命名,提升工作区信息保护和会话整理效率
- 新增请求超时配置并扩展默认范围,同时优化 Kimi 固定温度策略与 Gemini v1beta 兼容处理
- 通过异步图标加载、store 初始化清理与导航载荷规范化,改善启动速度和运行时响应性
- 强化桌面端安全基线,为内嵌 Web 内容启用 Electron context isolation 并关闭 node integration
- 修复触控板滚动、新建会话入口显隐、项目清空选择、超时参数传递,以及升级后 SQLite/provider 恢复等多项流程问题

v1.0.3-beta.4 (2026-04-19)


- Recovered missing SQLite deepchat_sessions columns on upgraded installs to restore stable session persistence
- 修复升级安装后 SQLite deepchat_sessions 缺失列的问题,恢复会话持久化稳定性

v1.0.3-beta.3 (2026-04-18)


- Added Anthropic temperature support in model capability controls
- Added none and xhigh reasoning effort options for supported models
- Improved sidebar session pin feedback and stabilized session group identity handling
- Refined app update installation by cleaning up floating windows before relaunch
- Added Astraflow (ModelVerse) provider support and removed the deprecated Laoshi provider
- Added project-based workspace directories with drag-and-drop setup support
- Enhanced the floating agent widget to support all agents with more stable session handling
- Improved Anthropic reasoning routing and capped derived max token defaults for safer model setup
- 为模型能力配置补充 Anthropic temperature 支持
- 为受支持模型新增 nonexhigh reasoning effort 选项
- 优化侧栏会话 pin 反馈,并稳定会话分组标识处理
- 在应用更新安装前清理悬浮窗口,提升升级流程稳定性
- 新增 Astraflow(ModelVerse)Provider 支持,并移除已废弃的 Laoshi Provider
- 新增基于项目目录的工作区管理能力,并支持拖拽接入工作区
- 增强悬浮 Agent 按钮,支持全部 Agent 并提升会话管理稳定性
- 优化 Anthropic reasoning 路由,并限制推导出的默认 max tokens,降低模型配置风险

v1.0.3-beta.2 (2026-04-15)


- Expanded remote control into a unified multi-channel setup with Discord, QQ Bot, and WeChat iLink support
- Added default collapsing for long user messages so dense chats stay readable while attachments remain fully visible
- Polished the new conversation entry flow with a persistent collapsed-sidebar + action and a shorter default input box
- Improved streaming responsiveness by reducing renderer reflow and translate popup overhead during live updates
- Fixed ACP terminal permission approval bridging so streamed permission requests stay intact during execution
- 远程控制升级为统一多渠道配置流程,新增 Discord、QQ Bot 与微信 iLink 支持
- 为超长用户消息加入默认折叠,保留附件完整展示,提升长会话可读性
- 打磨新建会话入口体验,在折叠侧栏下保留常驻 + 按钮,并缩短默认输入框高度
- 降低流式更新期间的渲染回流与翻译弹窗开销,提升消息流动顺滑度
- 修复 ACP 终端权限审批桥接流程,保证执行期间的流式权限请求信息完整传递

v1.0.3-beta.1 (2026-04-11)


- Migrated model requests to the AI SDK runtime, improving prompt cache behavior, provider consistency, and streaming stability
- Added NewAPI provider support and refined compatible endpoint configuration
- Improved model management with more stable provider toggles and synchronized Ollama selectable model status
- Added skill_view draft flow and automatic tool activation after skill previews to smooth skill setup
- Enhanced Markdown and workspace link navigation, added sidebar panel toggle hotkeys, and fixed artifact viewer sizing in the side panel
- 将模型请求迁移到 AI SDK 运行时,进一步改善 Prompt Cache 表现、Provider 一致性与流式稳定性
- 新增 NewAPI Provider 支持,并完善兼容端点配置体验
- 改进模型管理,修复 Provider 模型开关稳定性并同步 Ollama 可选模型状态
- 新增 skill_view 草稿流,并在技能预览后自动激活工具,减少技能接入摩擦
- 优化 Markdown 与工作区链接跳转体验,新增侧栏面板切换快捷键,并修复侧边栏制品预览高度问题

v1.0.2 (2026-04-08)


- Added provider model list filtering and sorting, and now remembers the sidebar session grouping mode
- Added ACP Agent uninstall support and refined provider prompt cache configuration
- Improved remote delivery ordering for Telegram and Feishu, and fixed db-backed model list sync stability
- Refined dashboard and settings responsiveness, and fixed auto compact settings persistence
- 新增 Provider 模型列表筛选排序能力,并记住侧边栏会话分组方式
- 新增 ACP Agent 卸载支持,并完善 Provider Prompt Cache 配置体验
- 优化 Telegram 与 Feishu 远程消息投递顺序,修复数据库驱动模型列表同步稳定性
- 改进仪表盘与设置页响应式布局,并修复自动压缩设置保存问题

v1.0.1 (2026-04-02)


- Added in-chat search and Spotlight global search for faster access to messages and app entry points
- Improved the provider database refresh flow and added manual model config refresh
- Updated the Markdown renderer preprocessing flow to improve rendering stability
- Fixed rate limit handling to reduce failures and degraded request experience
- 新增会话内搜索与 Spotlight 全局搜索,方便快速定位历史消息与应用入口
- 优化 Provider 数据库刷新流程,支持手动刷新模型配置
- 更新 Markdown 渲染器预处理逻辑,提升消息渲染稳定性
- 修复速率限制处理问题,减少请求受限时的异常体验

v1.0.0 (2026-03-31)


- DeepChat 1.0 正式发布:完成全新 Agent 架构切换,统一 DeepChat Agent 与 ACP Agent 主流程,并内置 DimCode Agent
- 新增远程控制能力矩阵:支持 Telegram、Feishu 与 ACP Agent Remote,补齐权限消息、流式块渲染与工作目录选择
- 强化工作流与工具链:支持 RTK 工具调用、Environments、Provider Deeplink 导入、Workspace 拖拽引用与 DeepChat Sub Agent 协作
- 持续打磨桌面端体验:新增浮动窗口、用户仪表盘、自动压缩控制,并优化侧边栏、悬浮按钮、状态栏与工具调用交互
- 完成正式版稳定性收敛:修复 HTML 预览、主题同步、消息标题选择、会话工作目录、MCP 生命周期与历史序列化等问题

v1.0.0-beta.7 (2026-03-27)


- 新增 Novita AI LLM 提供商接入
- 新增 Provider 配置导入能力(Deeplink 导入)
- 新增 Feishu Bot 远端接入能力
- 改进悬浮窗与侧边栏交互体验:SessionItem 由右键菜单切换为 hover/浮层交互,浮动按钮 hover 与透明度细节优化
- 修复消息标题选择与 MCP 生命周期相关稳定性问题,并清理已过期 MCP Server

v1.0.0-beta.6 (2026-03-24)


- 新增 Telegram Remote Control,可通过 Telegram 远程查看与驱动会话,远程控制配置也已接入设置页
- 统一 DeepChat Agent 与 ACP Agent 的 Agent 能力和入口,补齐欢迎页、本地化文案与默认配置,整体使用路径更一致
- 优化会话默认工作目录传递,修复 Agent / ACP / Skills 在 session workdir 继承上的问题
- 强化启动与工具输出稳定性,修复 Splash 窗口显示时机,并为大体量工具输出增加保护与批处理适配
- 移除过时 MCP UI 支持,修复 OpenAI Responses 历史序列化问题,同时继续打磨状态同步与路由细节

v1.0.0-beta.5 (2026-03-22)


- 优化启动 Splash 窗口与 ACP 配置加载提示,启动过程更直观
- 支持 ACP Registry 搜索安装与 ACP 模型选择,ACP Agent 配置体验继续完善
- 新增会话 steer / queue 能力,支持待发送消息排队、转向与恢复处理
- 打磨工具调用卡片、状态栏控制与更新入口,整体交互更顺手
- 修复 OpenAI Compatible MCP 工具、interleaved thinking,以及队列与 stop 状态同步等问题

v1.0.0-beta.4 (2026-03-18)


- 新增浮动窗口,全新效果一目了然
- 增加用户仪表盘,token使用一目了然
- 重构内建工具链,支持 RTK 工具调用,控制和性能都有提升
- 新增 Environments 设置,方便为不同场景管理独立运行配置
- 修复全新安装时 SQLite 迁移冲突问题,提升首次启动稳定性

v1.0.0-beta.3 (2026-03-18, withdrawn)


- 新增浮动窗口,全新效果一目了然
- 增加用户仪表盘,token使用一目了然
- 重构内建工具链,支持 RTK 工具调用,控制和性能都有提升
- 统一 Workspace 生命周期刷新,清理旧代码,提升整体稳定性

v1.0.0-beta.2 (2026-03-13)


- 新增自动压缩控制,可在设置中配置会话摘要压缩行为
- 优化 Yo Browser 生命周期与迁移流程,提升稳定性
- 强化 Skills 运行时执行安全,并补齐欢迎页自定义能力
- 修复多项界面问题,包括 Agent 文案对齐、语音输入按钮显示与悬浮按钮细节

v1.0.0-beta.1 (2026-03-09)


- 全新 Agent 架构:重构 Agent UI 与 Agent Loop,模块化流处理,统一代码路径
- 移除 Chat 模式:简化模式选择,仅保留 Agent 和 ACP Agent 两种模式
- 默认模型配置系统:新增默认模型与默认视觉模型全局设置
- 内置 DimCode Agent:预置 ACP Agent,开箱即用的代码助手

v0.5.8 (2026-02-09)


- OpenAI 默认改为 Responses API
- 支持了 Telegram/Discord/Confirmo 通知
- 支持任务生命周期 hooks
- 修复少量 Bug

v0.5.7 (2026-02-05)


- 完善 Skills 支持
- Agent 现在可以生成可交互的提问信息
- 增加 Voice.ai 为新供应商
- 修复大量 Bug

v0.5.6-beta.5 (2025-01-16)


- 全新 Skills 管理系统,支持技能安装、同步与多平台适配
- 新增 o3.fan 提供商、优化工具调用(大型调用卸载、差异块展示、权限管理)、性能提升(消息列表虚拟滚动、流式事件批处理调度)
- 修复多项问题:Ollama 错误处理、滚动定位、聊天输入高度、macOS 全屏等
- All-new Skills management system with installation, sync, and multi-platform adapters
- Added o3.fan provider, enhanced tool calls (offloading, diff blocks, permissions), performance boost (message list virtual scrolling, batched stream scheduling)
- Fixed multiple issues: Ollama error handling, scroll positioning, chat input height, macOS fullscreen, etc.

v0.5.6-beta.4 (2025-12-30)


- 全面重构 Agent 与会话架构:拆分 agent/session/loop/tool/persistence,替换 Thread Presenter 为 Session Presenter,强化消息压缩、工具调用、持久化与导出
- 增强搜索体验:新增 Search Presenter 与搜索提示模板,完善搜索助手与搜索引擎配置流程
- 加固权限与数据:新增命令权限缓存/服务,更新模型与提供商数据库,并补充多语言 i18n 文案
- Agent and session architecture refactor (agent/session/loop/tool/persistence) with Session Presenter replacing Thread Presenter to improve compression, tool calls, persistence, and exports
- Better search experience via new Search Presenter and prompt templates, refining the search assistant and engine setup
- Hardened permissions and data updates with command permission cache/service, refreshed provider/model DB, and broader i18n coverage

v0.5.6-beta.3 (2025-12-27)


- 全新 Agent Mode,支持 RipGrep 等数十项新特性
- 全新子会话概念,随时针对会话中任意消息单独讨论
- 修复一些已知问题
- ACP Agent 可以直接使用软件里面配置的 MCP
- All-new Agent Mode with dozens of new features, including RipGrep
- New sub-session concept: discuss any message in a conversation at any time
- Fixed some known issues
- ACP Agent can directly use the MCP configured in the app

v0.5.6-beta.1 (2025-12-23)


- Markdown 优化,修复列表元素异常
- 修复 Ollama 视觉模型图片格式
- Improved Markdown rendering, fixed list element issues
- Fixed Ollama vision model image format

v0.5.5 (2025-12-19)


- 全新 Yo Browser 功能,让你的模型畅游网络
- All-new Yo Browser lets your model roam the web

v0.5.3 (2025-12-13)


- 优化 ACP 体验,增加 ACP 调试能力
- 增加了自定义软件字体能力
- add acp process warmup and debug panel
- add font settings
- add Hebrew (he-IL) Translation

---