Z ZPI 文档 v0.3.8
介绍页

总览设计与模块地图

ZPI 是本地运行的编码桌面客户端。用户选择项目、模型和任务,模型通过工具读取和修改工作区,客户端把执行过程、文件变更与结果呈现在同一界面中。本文解释整体边界及阅读路线;每项功能的操作和实现分别由独立页面维护。

阅读路线

目的 路线
第一次使用 新手向导 → 模型接入 → 对话操作 → 变更审查
查询功能 根索引的功能列 → 对应原理列
理解执行核心 本文 → Agent 循环 → 工具 → 上下文
排查连接 诊断 → 认证 → WebSocket → 恢复
修改桌面功能 进程边界 → 对应功能原理 → 源码地图 → 测试

产品边界

执行内核保留 read、write、edit、bash 四个基础工具。提问、联网、子智能体协作、后台命令、记忆、自动标题和任务通知由独立的系统内置插件提供,在“设置 → 插件”按需启停;默认状态与生效范围见插件。核心和 TypeScript Agent SDK 不依赖 Electron,公共 SDK 在内核之上提供标准工具名与查询协议。

辅助对话、工作树、终端标签、预览和审查等工作区能力由桌面提供。独立应用 zpi-quick-chat 与桌面共用 Agent SDK,不随桌面启动。

项目没有内置 MCP、遥测、专用 REPL 或 Agent 浏览器控制工具。浏览器面板由用户操作;Agent 可以经 bash 使用工作机器已经具备的脚本和依赖。

主任务、辅助对话、子智能体可拥有独立对话状态,但辅助对话和子智能体共享父任务工作目录。Git 工作树隔离检出文件;工作目录和提示词都不构成操作系统权限沙箱。

包边界

flowchart TD D[desktop:主进程、preload、renderer] --> SDK[agent-sdk:查询与消息协议] Q[zpi-quick-chat 等独立应用] --> SDK SDK --> C[coding-agent:会话、工具、上下文] D --> U[ui:对话组件和展示模型] D --> AI[ai:认证、模型协议和流] C --> A[agent:执行循环和工具调度] C --> AI A --> AI D --> B[builtin-plugins:系统插件与运行时] B --> SDK B --> C D --> PC[plugin-compat:本地外部插件适配] PC --> C
包 负责 入口
ai 协议、消息事件、认证原语、缓存、媒体投影、模型发现 stream.ts、types.ts
agent 请求模型、执行工具、消费排队指令、结束运行 agent-loop.ts
agent-sdk TypeScript 公共查询、控制和消息协议;独立打包与宿主接入 公开入口、SDK 说明
coding-agent 会话装配、资源、四工具、历史、压缩、运行设置 sdk.ts、agent-session.ts
builtin-plugins 五类行为指令、项目初始化命令及七类运行时的实现、策略与生命周期;通过宿主通用接口接入 插件定义、运行时、宿主接口 · 装配与 hook
plugin-compat 本地 Claude/ZCode 插件的声明适配、文件冻结和命令 hook 子进程,独立于执行核心 适配器 · 兼容边界
ui 对话、Markdown、输入、工具卡片、查找、预览解析 index.ts
desktop 平台服务、持久状态、会话事务、原生窗口、IPC、桌面界面 main/index.ts、App.tsx

一次输入如何成为结果

sequenceDiagram participant U as 用户和输入框 participant H as SessionHost / 输入队列 participant SDK as Agent SDK participant S as AgentSession participant M as 模型协议层 participant T as 工具 participant P as 历史存储和界面投影 U->>H: 提交文字、引用和附件 H->>H: 校验、持久化接受状态、准备目录与命令 H->>H: 首次发送冻结插件并装配运行时 H->>SDK: query 驱动已装配的会话 SDK->>S: 发送准备后的输入 S->>S: 刷新指令、投影上下文、检查预算 S->>M: 获取凭据并生成请求 M-->>P: 统一的文本、思考、工具调用事件 M-->>S: 完整响应 S->>T: 执行工具批次 T-->>P: 持久化结果和文件快照 T-->>S: 配对工具结果 S->>M: 必要时继续下一步 S-->>SDK: 完成、停止或失败 SDK-->>H: 执行结果 H-->>U: 最终状态、变更、通知

普通工具在完整响应后执行;符合只读并发条件的流式工具可以提前开始,但必须收到显式工具参数结束事件。工具日志先持久化,完成结果只消费一次。详情见工具调度。

BuiltinPluginRuntime 持有插件服务及其恢复、取消和清理;宿主注入模型调用、存储、历史和系统通知等通用接口。提示预览、工具列表与实际会话复用同一份插件装配规则,预览不执行插件。详见运行时隔离。

状态归属

状态 所有者 保存方式
项目、任务、分组、设置、草稿、队列 主进程 StateStore 及各服务 state.sqlite
会话事实、工具日志、压缩边界 会话层,桌面通过 HistoryStorage 写入 JSONL v2
历史偏移、搜索和投影索引 历史 Worker 可重建的 history.sqlite
API Key 和 OAuth 凭据 SettingsStore 系统加密文件;加密不可用时留在内存
当前执行、取消、WebSocket 续接 AgentSession 和连接管理器 进程内存
提问等待、子任务调度、后台命令、记忆批次、标题及通知策略 BuiltinPluginRuntime 中各插件 owner 运行句柄留在内存;可恢复状态经宿主存储接口保存
标签、选区、阅读位置和显示状态 renderer store、pane store、组件 按用途使用内存或本地偏好

历史、模型上下文和界面时间线是三种视图:完整事实留在 JSONL;模型看到有效上下文;界面分页读取并按需挂载。压缩不等于删除原始对话,界面虚拟化也不等于限制全部历史内存。

功能和原理的覆盖边界

根索引为每个主题提供成对入口。源码地图把文件归到原理页面,包括协议转换、缓存、重试、当前数据格式与恢复、原生桥接和测试设施。

功能页维护入口、步骤、可见行为、作用域和排错。原理页维护调用链、状态归属、协议与数据结构、并发、取消、恢复及源码和测试依据。数值规则由解释其机制的页面维护,其他页面链接过去。

关键取舍

  • 四工具内核、公共 SDK、系统插件与桌面工作区分层,SDK 可独立使用。
  • 平台服务及桌面使用的插件运行时在主进程执行;插件通过通用接口使用持久化与平台能力,preload 提供有限类型接口。
  • 首次发送冻结插件指令、命令、运行时版本与选项;修改选择不重配已经开始的请求。
  • 原始历史和派生索引分离,重建索引不改写事实;业务数据库不能按缓存删除。
  • 模型恢复与工具恢复分开,避免网络重试隐式重放修改和命令。
  • 同一功能只维护一份当前规则,外部参考项目的历史实现不覆盖本项目代码。

维护范围

文档解释仓库实现。外部模型目录、额度和协议是否可用由实际账号与服务端决定。测试文档区分本地自动化、Electron 和系统/线上验证,历史测试数量不作为当前通过证明。

源码变化时更新对应功能和原理页;新增模块进入源码地图。