工作区行为
Guide: 安装 · 来源 · 自建资源 · 服务 · 翻译 · 设置 · 工作区
设置页是版式的准绳,预设管理器渲染同一套部件:所有页面共用同一条页签行(等宽列、绝不横向滚动,标签放不下时用省略号截断),并共用同一套卡片与详情结构(hooks 同样如此),以及工具条尾部同一个原文/译文开关:管理器上的开关会同时翻转卡片与卡片背后的详情。 工作区 Tab 共用持久化的卡片/列表偏好,搜索与筛选按资源独立。新增、刷新统一位于页头。每张卡片都带启用开关(MCP 与 LSP 服务同样),不必进详情就能停掉一个服务。市场按安装状态筛选;其余五页按归属(用户 / 插件)与已停用条目筛选,标签上的计数就是点开后看到的条数。MCP 新增入口校验 JSON 服务配置,写入 ~/.agents/mcp.json,再通过插件自己的 bridge 挂载;LSP 新增写入 ~/.agents/lsp.json。非法配置和重名服务会被拒绝。宿主自行管理的 MCP 服务仍只读观察。
资源详情编辑
详情与编辑器共用同一个窗口,按用途分三档宽度——确认 460px、短表单 640px、详情与编辑器 880px——并受视口宽高约束。编辑类弹窗固定占窗口高度的 80%,切换表单与 JSON 视图不会改变窗口大小,长文档在弹窗内部滚动;详情弹窗仍按内容高度展开。资源卡片由身份线(名称与归属标签)与前缘一条表示状态的颜色边条、两行描述或端点、以及写出归属套件的来源行组成,操作按钮就在身份行上、悬停或键盘聚焦时现形;打开后可以看到概览、描述与按类型分组的内容,每一行都能就地展开。Markdown 预览把 frontmatter 按原文展示在渲染正文之上;原文编辑保留未知字段和注释,编辑器提供带行号与语法高亮的源码,标题旁的按钮可切换到渲染后的草稿。保存的后果写在按钮旁,命令的 argument-hint 在名称旁有自己的字段。MCP 表单用分段控件选择传输方式,每个选项都注明它配置哪些字段;命令、参数、环境变量、URL 与请求头留在主体,编辑入口在卡片上、启用开关的左侧,点开的是与新建流程同一个弹窗;详情弹窗只报告状态、能力与凭据。编辑器展示的是同一份文档——mcpServers 下的可移植定义,加上 com.deepseek.harness 命名空间里本客户端的策略——因此表单可以只覆盖常用字段,其余设置都能以 JSON 写入。你自己声明的服务会原样保留本客户端不认识的键;套件随包发布的 mcp.json 对这些键保持闭集。新建与编辑服务共用同一个弹窗和表单;新建时可填写名称,编辑时保留已有身份,因此一个服务在建立前后读到的是同一张表单;表单没有字段的内容都在 JSON 视图里可写,那里展示的是整份文档;高级设置折叠区只在表单视图出现(JSON 视图已包含它设置的每一项),承载可选的连接输入——stdio 服务的工作目录,以及毫秒计的工具调用超时与启动超时,输入框以当前生效值作为占位内容。把超时留空即恢复为继承,保存时只写回你改动过的字段。宿主兼容后端不执行启动超时,因此该输入被固定,并在先前存过值时提供一个清除操作。保存被拒绝时,每条原因都落到接口点名的字段旁。环境变量与请求头接受整块 KEY=VALUE 或 Key: Value 行的粘贴。LSP 表单包含命令、参数、环境变量、扩展名映射、初始化选项和配置,并沿用同一套分工:详情只报告,编辑入口在卡片上。非法 JSON、未完成的键值行以及越界的超时都保留为可修改草稿,但不能保存。卸载套件前需要先确认会离开当前 profile 的内容,确认后卸载操作才可用。
MCP 服务详情为每个工具列出一个勾选框。勾选表示允许;取消勾选会写入一条拒绝,让该工具在实时注册表丢弃它之后仍然留在列表中,因此可以再次勾选。被套件声明限定的工具显示为未勾选且不可修改,并注明原因来自套件。公布了参数结构的工具,点击名称就能展开它的参数列表。列表默认显示前八行并给出其余数量,服务公布的工具超过八个时提供按名称过滤,需要时再展开。宿主观测到的服务,以及由其它 MCP 客户端挂载的服务,这份列表保持只读。服务详情只用一个状态带承载全部状态:状态点与标签,以及该状态唯一的恢复操作(重试、重新授权);上一次操作的结果;一句话说明插件识别出的失败类型(缺少凭据、连接被拒绝、找不到命令、接缝已被占用等);记录下来的诊断原文及其下面的底层消息,收在「诊断详情」折叠项里;最后是端点或命令。状态带的前缘取与卡片相同的状态色,标题用可读的服务名——插件服务用服务键、自建服务用名称——挂载名与它不同时在概览里紧挨服务键显示。插件识别不出的原因按原文显示;重试结果只说这次操作有没有重新连上;失败且没有注册到工具的服务,工具区会说明需要连接后才能读到清单。
GET /api/agent-plugins/server-config?kind=mcp|lsp&id=... 获取完整可编辑配置,对 MCP 还返回策略视图与挂载后端;POST /api/agent-plugins/server-config/save 替换对应服务配置,并接受可选的 policy: { toolCallTimeoutMs, startupTimeoutMs },数值表示设置超时,null 表示清除并恢复继承。POST /api/agent-plugins/set-mcp-server-tool 接收 { suiteId, serverKey, tool, enabled },把工具拒绝写入覆盖记录。插件 MCP 配置写入已有覆盖文件,插件 LSP 配置写入 data/lsp-overrides.json,不会修改 checkout。未修改的 [redacted] 字段保留原凭据。配置修改通过插件运行时重新挂载。宿主自行管理的 MCP 服务保持只读。GET /api/agent-plugins/server-config?kind=mcp|lsp&create=true 返回未保存的模板,包括当前 MCP 后端与默认超时。POST /api/agent-plugins/mcp-servers/add 接收 { name, config, policy? },先校验两部分,保存策略后再发布声明;声明发布失败时恢复原策略。两个文件不是跨文件事务:中断可能留下未被使用的策略,但不会发布缺少所请求策略的服务。POST /api/agent-plugins/lsp-servers/add 独立新增一个服务,不覆盖其他服务。
操作遮罩
视觉反馈延迟 200ms 出现,最后一个操作完成后立即撤除,没有最短展示时间。读取始终可交互,等待较久时使用非阻断状态卡。写操作立即防止重复输入;只有写操作反馈可见时才转移焦点并设置 inert 状态。
工作区请求、凭据修改和设置修改共用 withBusyOperation(packages/market-ui/src/ui/busy-operation.ts)。操作还包含刷新时应包裹完整流程;嵌套计数确保全部操作结束才撤掉遮罩。唯一的 BusyOverlay 挂载在 body 下,跟随当前窗口边界,设置 inert,阻止背景点击和键盘操作,并在结束后恢复焦点。提示每 3.2 秒轮换,尊重减少动态效果设置。来源进度、模型目录后台加载和 LSP 自动轮询不显示遮罩。遮罩不占列表行,也不虚构百分比进度。
等待不会一直无声:遮罩持续超过 20 秒会明确提示本地服务可能没有响应;读取请求 15 秒后停止等待,写操作以 10 分钟为兜底,超时会被明确告知,而不是一直卡住页面。