dsh-forge 完整插件清单(Plugin Inventory)

September 17, 2026 · View on GitHub

真源:src/forge-host/boot.ts(Host 树 §1+§4 insert)与 src/forge-host/boot-graph.ts(Client 图谱 desktopDecls + CLIENT_EXCLUDE_IDS)。本文为派生视图,架构变更时同步更新。 命名规范(D-19):桌面插件统一 @lansi-ai/dsh-*(蓝思 scope + dsh 生态前缀)。 状态更新至:0.1.5-rc.2 基线(2026-09-11 C-7 人工适配 · 对齐 upstream-migrations)· M6-P6 首件「模型」section 自有化代码完成(2026-09-15,待实机点验)· 插件列表管理面(本地安装/卸载/检查更新)代码完成(2026-09-17,待实机点验)。 HTML 可视化版:docs/architecture-plugins.html已过时,停留在 0.1.2 之前的插件树快照,勿作现状依据;以本文为准)。

图例:✅ 已装载 · ⛔ 已禁用 · 🚫 被排除(不入图谱)· 🟠 预载注册(不激活)· 🔁 已自有化(官方件被桌面件替换)


〇·附、插件列表管理面(v4 · 本地安装 / 卸载 / 检查更新)

设置 → 插件 → 「插件列表」Tab(@lansi-ai/dsh-forge-plugin-inventory)从只读清单扩展出管理面

  • 本地安装:Tab 顶部「安装本地插件…」→ native 目录选择器 → host pluginInventory.installLocalforge-host/plugin-install.tsinstallExternalPlugin,本地目录旁加载)→ 成功提示「重启后生效」。
  • 卸载:仅用户安装的外部插件行(快照行带 external 元信息 = 补丁层发现 + profiles/node_modules 落点在盘)显示;两步确认后 host pluginInventory.uninstall 删补丁行 + 包目录 + 安装来源登记。官方/自研/预设组成行没有该字段,天然不可卸。
  • 检查更新 / 更新:GitHub 来源行(安装来源登记 installed-sources.jsongithub: spec,或已装 package.json repository 回溯)对照仓库默认分支的 package.json 版本(compareVersions 轻量比较);有新版 → 「更新到 vX」= 按来源重装默认分支。本地安装行无更新来源。
  • 数据面cordis-inventory.ts 只读快照 pluginInventory/list 之外,新增四个 unary 方法 pluginInventory.installLocal / .uninstall / .checkUpdate / .applyUpdate(与 list 同一 bridge methodTable,UI 经 window.desktopBridge.pluginInventory.*desktop:invoke 通道调用,不给官方 typed remote 域加方法——那需要 client 侧 typert 描述符)。
  • 生效语义:外部插件只在进程启动时发现,安装/卸载/更新都只改磁盘;UI 一律提示「重启后生效」,不做热装载。

〇、插件自有化进度(M6 · D-20 全量自绘路线)

路线(ADR-006 · D-20):逐槽位替换官方 ui-* 直至全部自有,数据面零新增;每阶段可用可验证。 自有化铁律:绝不改官方代码——要么整体排除替换(互斥槽位),要么 host 半保留复用(双装配线,见下);自有插件只在「槽位契约 + 服务面」咬官方,逐条登记 upstream-contracts.md §7。

进度总览

阶段范围状态
P1 布局骨架root 槽位(三列布局 + titlebar 行)✅ 完成(= M3-c,2026-09-01 实机验证通过)
P2 外壳小件Session 导出(首件 ✅)→ brand 洞 → 会话 header 重排🔄 1/3
P3 侧栏自研侧栏壳(✅ 实机通过)+ 会话浏览区(ui-workspace 替换,W1-W5)🔄 壳 ✅;W1 五接管面 + picker 承重件 ✅;W2 tree 派生层 ✅;W3 Rows 行组件 + 视图选项 ✅;W4 Browser 内容搜索 ✅(2026-09-08,派生/行/搜索纯函数单测 16 项全过,待实机点验)→ W5 实机对照点验收口
P4 对话主区ui-conversation + ui-renderer + input/attachment/reference⬜ 未开始(最大单件)
P5 过程可视化tool/subagent/plan/goal/jobs/skill/workflow-run/trajectory⬜ 未开始
P6 设置与底座settings 6 section + theme/locale/model-selection/permission-presets🔄 首件「模型」section ✅(2026-09-15,含两步 onboarding;待实机点验);插件列表 ✅(2026-09-11 实机通过);余下 section 与底座未开始

已自有化明细

官方包桌面自有件接管面host 半状态
dsh-client-ui-layout@lansi-ai/dsh-forge-layoutroot 槽位(三列 grid + ctx.layout 服务)+ ThemePresenter 等价(坑 26)✅ 实机通过
(无官方对应,宿主化骨架 D-21)forge-appearance.ts + LAYOUT_SKELETON_CSS--dsd-* 外观变量 + 首帧骨架(防裸窗口期)宿主模块
(无官方对应,M3-c4)@lansi-ai/dsh-forge-titlebar布局 root 槽位 titlebar 行(拖拽区 + 窗控三钮 + 品牌区)✅ 实机通过
dsh-client-ui-sidebar@lansi-ai/dsh-forge-sidebarsidebar 槽位(fold 状态机 + 新会话 + 5 子槽位声明);ui-workspace/ui-settings 经子槽位无改动继续工作✅ 实机通过(2026-09-01)
dsh-session-log-export(client 半)@lansi-ai/dsh-forge-session-exportconversation.session.header.utilities 槽位(导出胶囊 + 结果弹层,文案修正桌面语义)保留复用(boot.ts session-log-download 行:/export 命令 + /api/session.export ZIP 流式路由)✅ 实机通过(2026-09-02,M6-P2 首件)
dsh-client-ui-settings-models@lansi-ai/dsh-forge-settings-models接管面:① settings.section id=models order=10(官方信息架构 1:1:provider 目录行 + 单卡编辑器 + 添加提供方 + 自定义路由 + 删除确认 + 模型探测选择器 + 只读/冲突态);② 两个子槽位声明与 dispatch(settings.models.provider-card keyed=settingsNs / settings.models.footer list);③ 两步 settings.onboarding(welcome-notice -100 / deepseek-official 0,含 ui-onboarding 声明确认);④ 字典 NS 沿用官方 settings.models(官方 87 键逐字对齐 + 自研增补请求头/opencode 相关键)。官网缺口补齐:⑤ 编辑器加「请求头」区(官方页不暴露 profile 的 headers 字典)——写 providers.<route>.headers,并对 opencode 网关给 x-opencode-session 一键生成(官方 UI 无法配置该头 → opencode Go 恒 400 MissingSessionID,见坑 74)。数据面零新增(五 Remote 调用 + settingsScope/settingsSchema 领域服务)—(host 半空 apply,无连坐)🔄 代码完成(2026-09-15):typecheck/lint 全绿 + settings-models.test.cjs 18 项 + 既有 50 项全过 + dist 图谱实测(entries=64,官方包确认排除、两个子槽位与两步引导在册);待实机点验
(无官方对应,独立插件包 · 坑 74)dsh-llm-opencode-session已发布github.com/lansi-ai/dsh-llm-opencode-session @ v0.1.1(tag)/ a9778a4(2026-09-16;v0.1.0 = e54cbbd root commit);工作区 E:\Projects\DSH\plugins\dsh-llm-opencode-session\,与 dsh-llm-app-credentials 同级)opencode 逐会话头插件applyctx.effect 包装 globalThis.fetch,只对 opencode.ai 域注入 x-opencode-session(= 人可读短标签 dsh-<中文2字><字母2>,如 dsh-青竹aB,由 sha1(model+首条用户消息) 确定性派生 → 同对话稳定、不同对话不同,且能在 opencode 控制台「会话」列认出是哪段;可配 labelStyle: asciidsh-Kx7Q);非 ASCII 标签经 toHeaderValue() 按 UTF-8 → latin-1 逐字节映射(undici Headers.set 只收 ByteString,见坑 76;线上字节仍是 UTF-8);已带该头即不覆盖(上游修好自动 no-op);只克隆读请求体、失败原样放行;卸载即还原。零运行时依赖、零 peer(只用 node:crypto),产物 lib/ 入库(--install-plugin 不跑构建)插件本体(宿主侧,随包分发;主包不再内置副本✅ 已发布并本机已安装(2026-09-16,v0.1.1 覆盖 v0.1.0):--install-plugin github:lansi-ai/dsh-llm-opencode-session@v0.1.1$DSH_HOME/profiles/node_modules + 装载行 id: llm-opencode-session;入口契约实测 name/inject/apply 齐备;包内测试 12 项全绿;socket 级字节复核(头值 hex = UTF-8)通过;待实机点验(发一条消息看是否还有 400,并看「会话」列显示的标签)
dsh-client-ui-workspace(client 半)@lansi-ai/dsh-forge-workspaces五项接管面(详见 upstream-contracts.md §7.1 末行):① provide uiWorkspace 服务(六方法,排除即连坐——侧栏壳/ui-conversation/native picker/agent-preset 四者硬 inject);② provideRoot(hooks.workspaces);③ locale.register('workspace') 63 键;④ 双注册 sidebar.workspaces + conversation.hero.workspace(各带 directoryFlow 子洞);⑤ 十三项动作注入面— (该包 host 半 lib/index.js 本就是空 apply,boot.ts 未插该行,host 侧无连坐)🔄 W1 + picker 承重件 ✅;W2 tree 派生层 ✅(2026-09-08):五接管面全通;选/加工作区路径已实现(原「空壳」写法曾锁死全应用,见坑 35);tree 派生纯函数(deriveGroups/deriveFlat/deriveSearchResults + indexSubagentDescendants 血缘)已内联进 bundle 并经 node:test 单测守护(8 项断言全过);行组件仍后置(W3);静态门禁 + 图谱实测 + bundle 冒烟 40 项 + pickflow 行为断言 21 项 + 字典逐字 diff 均通过,待实机点验

双装配线先例(session-log-export,自有化方法论第 18 条的实践):官方双面包的 client 半被排除替换时,host 半经 boot.ts 照常装载提供数据面——自有件零重复实现。

模型设置dsh-client-ui-settings-models@lansi-ai/dsh-forge-settings-models,2026-09-15 P6 首件):该包 host 半是空 apply(lib/index.js),boot.ts 未插该行,host 侧无连坐;数据面五调用全复用(llm/listProvidersllm/listConfigurableProviderssettings 共享镜像、credentials/describe|set|unsetllm/discoverModelssettings/mutate),零新增。接管面 = settings.section(id=models, order=10)+ 两步 settings.onboardingwelcome-notice / deepseek-official)+ 两个子槽位声明(settings.models.provider-card keyed / settings.models.footer list,第三方 provider 扩展位零改动)。同时补齐外壳的 onboarding 投影(官方派发者原在被排除的 ui-settings-general 内,见坑 73)。

互斥排除清单(CLIENT_EXCLUDE_IDS)

被排除包原因
dsh-client-ui-layoutroot 槽位互斥(桌面布局插件接管,D-18)
dsh-client-ui-sidebarsidebar 槽位互斥(M6-P3 壳接管,D-20)
dsh-client-ui-directory-picker-browse与 native 形态 single slot 冲突(桌面走 Electron chooser)
dsh-session-log-export导出 UI 自有化(client 半;host 半保留,见上)
dsh-client-hmrdev SSE /plugins/events 桌面不存在,轮询必 404(终端静音)
dsh-client-ui-settings-general设置外壳自研(@lansi-ai/dsh-forge-settings-shell 接管 sidebar.settings / settings.trigger 等,双激活抛 "already has a registration")。2026-09-07 补登记:boot-graph 早已排除但本清单漏记
dsh-client-ui-workspaceM6-P3 工作区浏览区自研(@lansi-ai/dsh-forge-workspaces 顶替,2026-09-07 W1)。⚠ 非纯 UI 排除:该包还对外提供 uiWorkspace ctx 服务 + useWorkspaces 全局贡献 + workspace 字典,排除前必须逐项接管(见 §〇 已自有化明细与 upstream-contracts.md §2/§7.1)
dsh-client-ui-settings-modelsM6-P6 模型设置自研(@lansi-ai/dsh-forge-settings-models 顶替,2026-09-15)。纯 UI 排除:host 半为空 apply;无对外 ctx 服务;两个子槽位与 locale NS settings.models 在自有件内原样重声明(settings.models.* 全仓库零外部注册者,已核)。⚠ 其 onboarding 两步随包消失 → 必须由自有件重新注册,且外壳必须真的派发(坑 73)

2026-09-10 起 dsh-cordis-client-runner + dsh-client-ui-cordis 不再排除(创造模式 · dogfood #23):宿主半 cordis-host-runner 已 insert(dynamicCordisRunner/cordisInspect),客户端两半同批回填装载,面板入口注册进自绘侧栏新声明的 sidebar.footer.action 槽位(list/root,对齐官方 ui-sidebar)。

自有化待办(按阶段)

  • P2dsh-forge-brand(sidebar.brand.mark/name 洞)、会话 header 重排评估(TRAE 式会话名 + 按钮组)
  • P3dsh-forge-workspaces(全量复刻 ui-workspace)——W1 五接管面 ✅ + picker 承重件 ✅(2026-09-08;坑 35:原「空壳」锁死全应用,已把选/加工作区提前到首批)→ W2 tree 派生层 ✅(deriveGroups/deriveFlat/deriveSearchResults + indexSubagentDescendants 血缘,内联进 bundle,export.derive 钩子 + node:test 单测 8 项,2026-09-08)→ W3 Rows 行组件 + 视图选项 ✅(组行/会话行 + 状态点优先级 琥珀>蓝>绿 + Manual 拖拽持久排序 + flat 单列表 + 分组/排序下拉,单测 8 项追加,2026-09-08)→ W4 Browser 增强 ✅(内容搜索:wide 内联搜索槽 + narrow 搜索入口展开侧栏 + Host session.search 防抖 250ms + sanitizeSearchQuery 线缆护栏 + 本地/内容命中合并派生,单测追加 sanitizeSearchQuery,全局计 16 项通过,2026-09-08;目录流收养已随 W1 通;分组折叠/视图选项已随 W3)→ W5 实机对照点验收口
  • P6 设置与底座
    • ✅ 插件列表(settings.plugins.tab,2026-09-11 实机通过)
    • 🔄 模型 section 自有化@lansi-ai/dsh-forge-settings-models,2026-09-15 代码完成)——官方 dsh-client-ui-settings-models 整体排除;剩余对照点(待实机点验):① provider 行/密钥点/编辑删除;② 编辑器(deepseek 目录 vs pi-ai 列表、keyEnvLocked、只读/冲突态);③ 自定义路由创建 + 模型探测选择器;④ 首次引导两步(内测声明 → DeepSeek 密钥,ui-onboarding 落盘);⑤ 模型页导航图标随主题切换(settings-nav-models.svg 已存在)
    • ⬜ 余下 section 与底座:ui-settings 其余 section + ui-theme/ui-locale/ui-model-selection/ui-permission-presets
  • P4-P5:见上表(启动前需逐件摸底登记)

一、Host 侧 · Cordis 插件树(boot.ts overlay patches)

装载链:bootDesktopHost() → 官方 boot('dsh-forge', cordis.yml, patches, prepare),所有条目无改动装载。

1. LLM 与凭据(6 条)

插件作用状态
@deepseek-ai/dsh-llmLLM 服务注册与路由(ctx.llm)
@deepseek-ai/dsh-llm-deepseekDeepSeek 官方模型 provider
@deepseek-ai/dsh-llm-pi-aiPi AI provider(备用通道)
@deepseek-ai/dsh-llm-retryLLM 调用重试策略
@deepseek-ai/dsh-agent-default-model默认模型绑定(deepseek-official / v4-flash)
@deepseek-ai/dsh-credentials-local凭据本地持久化(API Key 经环境注入)

2. 会话与持久化(10 条)

插件作用状态
@deepseek-ai/dsh-session会话生命周期(ctx.sessions,create/resume/prompt)
@deepseek-ai/dsh-session-persistence-jsonl会话 JSONL 持久化(RUNTIME_ROOT/user-data/sessions)
@deepseek-ai/dsh-session-projection会话投影(列表态摘要 summarizeCold)
@deepseek-ai/dsh-session-query-sqlite会话查询索引(:memory:,按需打开)
@deepseek-ai/dsh-session-title会话标题服务
@deepseek-ai/dsh-session-title-first-prompt-llm首条 prompt 生成标题
@deepseek-ai/dsh-session-checkpoint-policy会话检查点策略
@deepseek-ai/dsh-session-telemetry-otel遥测上报(默认 DISABLED)
@deepseek-ai/dsh-attachment-local附件本地存储
@deepseek-ai/dsh-workspace工作区注册表

3. Agent 循环与指令(7 条)

插件作用状态
@deepseek-ai/dsh-agentAgent 核心(ctx.agents,per-session live agent)
@deepseek-ai/dsh-agent-loopAgent 对话循环驱动
@deepseek-ai/dsh-agent-instructions指令/系统提示组装(64KB 上限)
@deepseek-ai/dsh-system-prompt系统 persona(§2 覆盖为桌面版)
@deepseek-ai/dsh-plan-mode计划模式
@deepseek-ai/dsh-commands斜杠命令注册表(commands/list)
@deepseek-ai/dsh-command-feedback命令反馈通道

4. 压缩与 Token 管理(6 条)

插件作用状态
@deepseek-ai/dsh-compaction-basic上下文压缩基础实现
@deepseek-ai/dsh-command-compact/compact 命令
@deepseek-ai/dsh-compaction-tool-result-pruner工具结果裁剪(8192 阈值头尾截留)
@deepseek-ai/dsh-token-meterToken 计量
@deepseek-ai/dsh-spill-local大结果外溢本地存储
@deepseek-ai/dsh-spill-policy外溢策略(50KB 内联上限)

5. 沙箱与执行(9 条)

插件作用状态
@deepseek-ai/dsh-sandbox-local本地沙箱执行环境
@deepseek-ai/dsh-sandbox-policy沙箱策略(默认 workspace-write)
@deepseek-ai/dsh-bash-sandboxbash 沙箱(非 Windows)
@deepseek-ai/dsh-pwsh-sandboxPowerShell 沙箱(Windows)
@deepseek-ai/dsh-subprocess-local子进程管理
@deepseek-ai/dsh-shell-envShell 环境探测
@deepseek-ai/dsh-jobs-local后台任务管理
@deepseek-ai/dsh-fs-sandbox文件系统沙箱边界
@deepseek-ai/dsh-fs-observation-policy文件观察策略

6. 工具集(16 条)

插件作用状态
@deepseek-ai/dsh-tools工具注册表(ctx.tools)
@deepseek-ai/dsh-tool-bashbash 工具(非 Windows)
@deepseek-ai/dsh-tool-pwshPowerShell 工具(Windows)
@deepseek-ai/dsh-tool-fs文件读写/移动/删除
@deepseek-ai/dsh-tool-fs-search文件搜索(glob/正则)
@deepseek-ai/dsh-tool-str-replace-editor字符串替换编辑器
@deepseek-ai/dsh-tool-web网页抓取/搜索工具
@deepseek-ai/dsh-tool-todo待办清单工具
@deepseek-ai/dsh-tool-goal目标管理工具
@deepseek-ai/dsh-tool-jobs后台任务工具
@deepseek-ai/dsh-tool-skill技能调用工具
@deepseek-ai/dsh-tool-ralph循环驱动工具(spawn 子代理)
@deepseek-ai/dsh-tool-workflow工作流编排工具(JS 脚本 over ctx.workflowEngine)
@deepseek-ai/dsh-tool-subagent-control子代理控制
@deepseek-ai/dsh-tool-subagent-list-agents子代理列表
@deepseek-ai/dsh-tool-subagent(×2 配置实例)子代理 spawn/fork 双形态

dsh-tool-subagent-report 已移除(0.1.2-alpha.4)send_message 取代单向 report(并入 dsh-tool-subagent 本体),独立包官方未再发布 alpha.4,roster 残留条目致 loader import 失败(M4-d4 收口)。

7. 子代理与工作流(5 条)

插件作用状态
@deepseek-ai/dsh-subagent子代理服务(ctx.subagents)
@deepseek-ai/dsh-subagent-spawn-in-process进程内 spawn provider
@deepseek-ai/dsh-subagent-fork-in-process进程内 fork provider
@deepseek-ai/dsh-workflow-worker-thread工作流 worker 线程
dsh-goal + dsh-goal-round-driver + dsh-command-goal目标域三件套

8. 技能与提示(5 条)

插件作用状态
@deepseek-ai/dsh-skill技能服务(skill.list 等)
@deepseek-ai/dsh-skill-filesystem文件系统技能源
@deepseek-ai/dsh-skill-badge技能徽章⛔ 已禁用
@deepseek-ai/dsh-user-questions用户提问(question/requested 帧)
@deepseek-ai/dsh-repeat-tool-reminder重复工具调用提醒(3/5/8 阈值)

9. API 载波与网关(7 条,0.1.2 重构后形态)

插件作用状态
@deepseek-ai/dsh-client-connection(host 半)HostConnectionHandle:createSharedFetchHandler('/api')(unary 背板)
@deepseek-ai/dsh-api-gatewaytypertGateway(逻辑流 wireStream.open 背板,坑 12)
@deepseek-ai/dsh-typert-registryTypert 注册表
@deepseek-ai/dsh-typert-loaderTypert 加载器
@deepseek-ai/dsh-api-remotes$events forwarded 事件源(0.1.2 必备)
dsh-api-session-controller / settings-controller / workspace-controller三 controller(0.1.2 必备,缺则 unary 404/流 "no active Remote method")
@deepseek-ai/dsh-message-feedback消息反馈 Remote(messageFeedback/list|put|delete)

@deepseek-ai/dsh-host-apiproxy 已删除(0.1.2)AbstractApiClient/apiProxy 整体不存在,RPC 通道由 connection unary + typertGateway 逻辑流两通道取代(M4-d3 迁移,详见 upstream-contracts.md §1/§2)。

10. 配置与存储(5 条)

插件作用状态
@deepseek-ai/dsh-settings-filesettings 持久化(desktop/ui-theme 等 namespace)
@deepseek-ai/dsh-storage存储服务(ctx.storage)
@deepseek-ai/dsh-storage-jsonJSON 后端(RUNTIME_ROOT/user-data/storages)
@deepseek-ai/dsh-storage-domain存储域(ctx.storageDomain)
@deepseek-ai/dsh-agent-presetsAgent 预设(坑 16:必经 §4 insert 装载)

11. 权限与审批(3 条)

插件作用状态
@deepseek-ai/dsh-user-approval审批服务(approval/requested 帧;剪贴板写经此)
@deepseek-ai/dsh-permission-presets权限预设(read-only / workspace-write / danger)
@deepseek-ai/dsh-tool-call-timeout-policy工具调用超时策略

12. Web 与搜索(3 条)

插件作用状态
@deepseek-ai/dsh-webWeb 服务聚合(searchProvider: deepseek-official)
@deepseek-ai/dsh-web-search-deepseekDeepSeek 搜索 provider(DEEPSEEK_API_KEY)
@deepseek-ai/dsh-client-ui-settings-general(host 半)ui-onboarding settings namespace(进入官方 UI 必需,坑 7)

13. 功能 host 行(双面/命令域,4 条)

插件作用状态
@deepseek-ai/dsh-session-log-export(host 半)/export 命令 + /api/session.export ZIP 流式路由(session-log-download 行;client 半已自有化替换)
@deepseek-ai/dsh-tool-subagent/model-selection-settings子代理模型选择设置(缺则 preset mount 报错)
@deepseek-ai/dsh-client-ui-theme 等 4 个双面包 host 半ui-theme/locale/ui-chat/ui-conversation 的 settings namespace 注册(坑 26)
@deepseek-ai/dsh-host-plugin-inventory官方插件清单(pluginInventory/list,设置页「插件列表」Tab)

14. 基础设施与第三方(4 条)

插件作用状态
@deepseek-ai/cordis-plugin-timer定时器服务
@deepseek-ai/cordis-plugin-hmr热重载(桌面不需要)⛔ 已禁用
@lnyanhongyan/dsh-opencode-usage第三方用量统计⛔ 暂移除(0.1.2 不兼容,待其升版重装)
webserver / web-runtime / web-startup / client-hmr官方 Web 传输层与 dev 热重载(禁用 = 零端口红线;client-hmr 为纯 dev 工具)⛔ 已禁用

15. Host 进程内注入(prepare 钩子,非插件,5 项)

服务作用状态
cmdlineArgsprovideCmdline 命令行参数服务✅ 已注入
desktopStartup运行模式元信息(portless/serve + port)✅ 已注入
directoryPickerElectronDirectoryPicker(原生对话框替代 koffi FFI)✅ 已注入
desktop(ctx.desktop)桌面聚合服务(审计总线 + 配置 + 下行事件)✅ 已注入
webServer(等价面)内存路由注册表(compat,第三方插件 HTTP 原义)✅ 已注入

二、Client 侧 · 官方 Web 插件(boot-graph 自动扫描)

装载链:scanClientPackages() 扫描 node_modules/@deepseek-ai 下全部 dsh.client.platform==='web'__DSH_BOOT__ 图谱({rev, entries, batches})注入 index.html → 官方 BootRunner 全量激活(CLIENT_EXCLUDE_IDS 除外)→ 各插件经官方 Slots 组合出 UI。

本节为功能域摘要(非逐包全量;0.1.2 图谱共 54 条目,全量清单经设置页「插件列表」Tab 读 pluginInventory/list 查看)。store/ui-slots 由官方 dist 内核 PLATFORM_MODULES seed,不入图。

1. 模块系统核心(3 个)

插件作用状态
@deepseek-ai/dsh-client-modules客户端模块系统 bootstrap(0.1.2 PARSER_PRELOAD_IDS 仅含它)
@deepseek-ai/dsh-client-connection官方传输连接(0.1.2:读页面全局 __DSH_TRANSPORT__ 自行 provide ctx.connection,桌面 HTML boot 脚本注入 IPC 传输)
@deepseek-ai/dsh-client-locale国际化

dsh-client-runtime 已删除(0.1.2):runtime 重组拆包,store 迁 dsh-client-store(由官方 dist 内核 seed)。

2. 布局与导航(4 个)

插件作用状态
@deepseek-ai/dsh-client-ui-layout官方整体布局骨架🔁 已自有化(桌面布局插件接管 root 槽位,D-18)
@deepseek-ai/dsh-client-ui-sidebar侧边栏壳:fold 折叠状态机 / 新会话按钮 / 5 子槽位声明🔁 已自有化(M6-P3 桌面侧栏壳接管;ui-workspace/ui-settings 经子槽位无改动继续工作)
@deepseek-ai/dsh-client-ui-workspace工作区切换与目录流(P3 待自有化)
@deepseek-ai/dsh-client-ui-brand-official官方品牌标识(P2 待自有化 brand 洞)

3. 对话主区(8 个)

插件作用状态
@deepseek-ai/dsh-client-ui-conversation对话主界面(消息流渲染;声明 conversation.session.header.utilities 槽位)
@deepseek-ai/dsh-client-ui-renderer消息渲染器(markdown/代码块)
@deepseek-ai/dsh-client-ui-input-trigger输入框触发器
@deepseek-ai/dsh-client-ui-attachment附件上传 UI
@deepseek-ai/dsh-client-ui-reference文件引用 UI
@deepseek-ai/dsh-client-ui-tool工具调用展示(bash/fs/编辑器结果卡片)
@deepseek-ai/dsh-client-ui-user-questions用户提问应答 UI
@deepseek-ai/dsh-client-ui-deliverables产物文件尾注 + 可点击引用

4. Agent 过程可视化(8 个)

插件作用状态
@deepseek-ai/dsh-client-ui-subagent子代理过程展示
@deepseek-ai/dsh-client-ui-plan计划模式 UI
@deepseek-ai/dsh-client-ui-goal目标管理 UI
@deepseek-ai/dsh-client-ui-jobs后台任务 UI
@deepseek-ai/dsh-client-ui-skill技能展示
@deepseek-ai/dsh-client-ui-workflow-run工作流运行节点 UI(durable workflow-run)
@deepseek-ai/dsh-client-ui-trajectory轨迹/历史视图
@deepseek-ai/dsh-client-ui-commands斜杠命令 UI

5. 设置页(6 个)

插件作用状态
@deepseek-ai/dsh-client-ui-settings设置页框架(settings.section 槽宿主)
@deepseek-ai/dsh-client-ui-settings-general通用设置 section(General)
@deepseek-ai/dsh-client-ui-settings-models模型设置 section
@deepseek-ai/dsh-client-ui-agent-presetAgent 预设选择器(数据源 = host agentPresets)
@deepseek-ai/dsh-client-ui-settings-plugins插件面板
@deepseek-ai/dsh-client-ui-settings-plugin-inventory插件清单 Tab(读 pluginInventory/list 等价面)

6. 其他 UI 域(6 个)

插件作用状态
@deepseek-ai/dsh-client-ui-theme主题(ui-theme namespace;client 半发 theme/change,DOM 应用由桌面 ThemePresenter 承担——坑 26)
@deepseek-ai/dsh-client-ui-slots插槽系统(所有 UI 插件的组合底座,官方内核 seed)
@deepseek-ai/dsh-client-ui-model-selection模型选择器
@deepseek-ai/dsh-client-ui-permission-presets权限预设 UI
@deepseek-ai/dsh-client-ui-message-feedback消息反馈(点赞/点踩)
@deepseek-ai/dsh-session-log-export(client 半)Session 日志导出 UI(header 导出胶囊 + 结果弹层)🔁 已自有化(M6-P2 首件)

7. 互斥与排除(2 个 + 6 项,见 §〇 排除清单)

插件作用状态
@deepseek-ai/dsh-client-ui-directory-picker-native目录选择 native 形态(与 prepare 注入的 Electron 版匹配)
@deepseek-ai/dsh-client-ui-directory-picker-browse目录选择浏览器形态(single slot 冲突)🚫 被排除

其余排除项(ui-layout / ui-sidebar / session-log-export / hmr / cordis-client-runner / ui-cordis)见 §〇「互斥排除清单」。


三、桌面注入插件(@lansi-ai/dsh-*,boot-graph desktopDecls 显式声明)

Client 半(renderer bundle,下表 11 件;boot-graph desktopDecls 实为 15 件——about / icons / settings-shell / ui-icons 四件尚未入表,属既有台账债,收口时补)

插件文件作用状态
@lansi-ai/dsh-ipc-connectionipc-connection.js零端口 IPC 载波占位(0.1.2:传输经 HTML boot 脚本注入 __DSH_TRANSPORT__,官方 client-connection 自行 provide connection;本条目为图谱激活占位)
@lansi-ai/dsh-forge-layoutforge-layout-client.js三列 grid 布局(sidebar|center|details)+ ctx.layout 服务 + rAF 拖拽 + 窄屏折叠 + ThemePresenter 等价 + 官方主题 token(接管 root 槽位,D-18;inject: slots+theme)✅(2026-09-01 实机验证通过)
@lansi-ai/dsh-forge-titlebarforge-titlebar-client.jstitlebar 行:品牌区(v7:全局 brand-mark-{light,dark}.png 透明底金标,缺失回退官方 FishLogo/占位)+ 折叠钮 + 中部拖拽区 + 窗控三钮;v5:logo + 窗控四枚 + 折叠两枚全部支持主题槽位 icons/titlebar-*.svg(状态对成对提供才启用,缺失回退内置,peekSvg 防首帧空窗)(inject: slots+layout+themeIcon)✅(2026-09-04 v5 / 2026-09-10 v7,待实机点验)
@lansi-ai/dsh-forge-sidebarforge-sidebar-client.js侧栏壳(M6-P3):fold 状态机 + 新会话(经 ctx.get('uiWorkspace').startSession,坑 32 修复件——非 domain 服务)+ 4 子槽位声明(brand.mark/name、workspaces、settings),子槽位注册者无改动继续工作。2026-09-07 注sidebar.workspaces 现由自研 dsh-forge-workspaces 顶替(原为官方 ui-workspace);sidebar.settings 仍为官方注册者✅(2026-09-01 实机验证通过)
@lansi-ai/dsh-forge-session-exportforge-session-export-client.jsSession 日志导出 UI(M6-P2 首件):header 导出胶囊 + 结果弹层 + 下载 controller,文案修正桌面语义;host 半官方保留✅(2026-09-02 实机验证通过)
@lansi-ai/dsh-forge-workspacesforge-workspaces-client.js工作区浏览区(M6-P3 W1 骨架):顶替官方 ui-workspace,承接五项接管面——uiWorkspace 服务(六方法)+ provideRoot(hooks.workspaces) + workspace 字典 63 键 + 双注册(sidebar.workspaces / conversation.hero.workspace 各带 directoryFlow 子洞)+ 十三项动作注入面(薄转发官方 domain,数据面零新增)。store persist key 沿用 dsh.workspace.view.v5选/加工作区已可用(官方 WorkspacePickFlow 等价内核:有工作区列菜单+底部固定「添加」,无工作区 open 即直抬系统目录选择器,收养失败落弹层可重试;侧栏 addOnly + 收养后 startSession);tree 派生层已完成(W2)(deriveGroups/deriveFlat/deriveSearchResults + indexSubagentDescendants 血缘等纯函数内联进 bundle,exports.derive 钩子供 W3/W4 复用 + node:test 单测守护);Rows 行组件 + 视图选项已完成(W3)(组行/会话行 + 状态点 琥珀>蓝>绿 + Manual 拖拽持久排序 + flat 单列表 + 分组/排序下拉,纯函数 8 项单测追加);内容搜索已完成(W4)(wide 内联搜索槽 + narrow 搜索入口 + Host session.search 防抖 + sanitizeSearchQuery 线缆护栏 + 本地/内容命中合并派生,单测追加 sanitizeSearchQuery);批量选择/删除已完成(侧栏 header「多选」进入选择模式:行级勾选 + 工作区组整组勾选(半选态)+ 全选/清除 + 一键批量归档(归档语义,日志与文件保留,Promise.allSettled 部分失败可重试);纯前端,位于本 bundle,listedSessionIds 派生钩子 + 单测追加 1 项)🔄 W1+picker+W2 派生层 + W3 Rows/视图选项 + W4 内容搜索(2026-09-08,图谱实测 + 冒烟 40 项 + pickflow 行为 21 项 + 字典 diff + 派生/行/搜索单测 16 项 全通过,待实机点验)· 批量选择/删除代码完成(2026-09-16,待实机点验)
@lansi-ai/dsh-forge-settingsforge-settings-client.js设置页「桌面」section(tray/通知/快捷键/自启 Toggle)
@lansi-ai/dsh-forge-themeforge-theme-client.js设置页「外观」section,由上至下四项一级设置项:① 应用图标 ② 托盘图标 ③ 品牌 logo(三项 global,存 userData/icons/ 全局单份、不随包切换)④ 图标包(卡片网格 + 新建包,其下二级=界面图标需求清单:默认折叠、按消费方插件分组卡、行内上传·替换);槽位真源 = host ICON_SLOTS(D-23;坑 27/28/29/30)✅(2026-09-04 重构,待实机点验)
@lansi-ai/dsh-forge-audit-viewerforge-audit-viewer-client.js会话审计查看器 Tab
@lansi-ai/dsh-forge-conversation-visualsforge-conversation-visuals-client.js对话区视觉层(data-phase 圆角/裁剪样式,不接管 conversation 槽位)
@lansi-ai/dsh-forge-cmdpaletteforge-cmdpalette-client.js命令面板(2026-08-27 禁用壳,仅留 quick-ask 聚焦)⛔ 已禁用

@lansi-ai/dsh-forge-panel 已下线feat(plugins)! dabdae0,随侧栏触发按钮一并撤下)。

另:HTML 注入预置 LAYOUT_SKELETON_CSS(boot-graph 常量)——首帧布局骨架,防裸窗口期;内容归布局插件,与插件 CSS 同源两处同步。

Host 半(主进程模块,M2 项目内模块形态,16 个)

模块作用状态
forge-api.tsctx.desktop 聚合服务(审计 JSONL / 配置 / 下行事件)
forge-tray.ts托盘 + 关窗驻留 + 快速问答
forge-notify.ts系统通知(审批/错误/进展三类,0.1.2 host 事件直订阅)
forge-shortcuts.ts全局快捷键(Alt+Shift+Q / Space)
forge-clipboard.ts剪贴板(写走 approval)
forge-cmdpalette.ts命令面板 host 半(Ctrl+Shift+P)
forge-audit-viewer.ts审计查询服务(过滤+分页)
forge-autostart.ts开机自启(OS 登录项唯一真源)
forge-appearance.ts--dsd-* 外观变量注入(D-21 骨架宿主化外观契约)
theme-sync.ts主题同步(0.1.2 host 事件双路直订阅,坑 22/26)
connection-fetch-bridge.tsconnection fetch 桥(非 POST /api/ 同源请求 → host connection 共享处理器,导出链路)
window-manager.ts多窗口 WindowManager(会话独立窗口 + 广播)
dsh-protocol.tsdsh:// 系统协议路由
session-rewarm.ts冷会话启动预热(坑 11;0.1.2 wire 契约对齐坑 24)
cordis-inventory.ts插件清单兼容面(pluginInventory/list 等价服务)
compat-webserver.tswebServer 等价面(内存路由)

Host 半插件包化(cordis.patch.yml + dsh.client 声明)排期 M5。


四、维护约定

  • 架构变更(增删插件/改排除表)时更新本文;architecture-plugins.html 已过时(0.1.2 前快照,勿作现状依据),以本文为准。
  • CLIENT_EXCLUDE_IDS 追加排除项时,同步更新 §〇「互斥排除清单」与 §二 对应行(🔁 标记)。
  • 每完成一件自有化(新 @lansi-ai/dsh-* 替换官方件):更新 §〇「进度总览 + 已自有化明细」+ §二/§三 对应行,并在 upstream-contracts.md §7 登记契约矩阵行。
  • 上游升级时:先对照 upstream-contracts.md §7 逐条核对自有插件契约,再复核本文 Host/Client 两侧清单(ui-* 包可能有增删,如 alpha.4 的 tool-subagent-report 废除先例)。