# AGENTS.md — dsh-mermaid-plugin > 本文件面向在本仓库工作的 AI Agent 与开发者,描述项目定位、结构、机制与开发/验证约定。 ## 项目概述 - **插件名**:`@local/mermaid-chat`(v1.0.0,private,ESM) - **定位**:DeepSeek Harness(DSH)Web 端客户端插件,把聊天消息中的 ` ```mermaid ` 代码块直接渲染为图形 - **核心能力**: - 自动识别会话中的 mermaid 代码块并渲染为 SVG 图形 - 图形 / 源码双模式切换(header 上的按钮) - 跟随 DSH 深浅色主题自动重渲染 - 渲染失败时保留源码并显示错误信息(不吞内容) - **形态**:纯前端插件,无后端交互、无 npm 依赖、无构建脚本、无测试框架 ## 仓库结构 | 文件 | 性质 | 说明 | | --- | --- | --- | | `package.json` | 手写 | 插件清单:exports 映射、`dsh.bundle.patch`、`dsh.client` 加载配置 | | `index.js` | 手写 | 宿主半边入口,仅一个空 `apply()`(渲染逻辑全在 client 侧),保持原样 | | `client.js` | **打包产物**(约 3.4 MB) | mermaid 11.17.2 全量 bundle(含 dayjs / dompurify / katex)+ 文件末尾的插件自身逻辑(`__ModuleLoader__.load` 注册段) | | `cordis.patch.yml` | 手写 | bundle 补丁:向宿主模块树插入 `id: mermaid-chat` / `name: '@local/mermaid-chat'` | | `locale/zh.json`、`locale/en.json` | 手写 | 插件元信息(标题/描述),用于插件列表展示 | | `icon.svg` | 手写 | 插件图标 | > 仓库同级目录存在 `dsh-mermaid-plugin.zip`,推测为打包分发的产物(安装渠道待确认)。 > git 仓库目前尚无任何提交(master 无 commit),全部文件处于未跟踪状态。 ## 架构与加载机制 ```mermaid flowchart LR A[package.json dsh 字段] --> B[bundle.patch: cordis.patch.yml] B --> C[宿主模块树插入 mermaid-chat] C --> D["__ModuleLoader__.load(id, factory)"] D --> E["inject: locale 服务"] E --> F["apply(ctx): MutationObserver 扫描 .md-code-block"] F --> G{是 mermaid?} G -->|是| H[插入表面元素 + 懒加载 mermaid + render] G -->|否| F ``` - **加载链路**:DSH 读取 `package.json` 的 `dsh` 字段 → `dsh.bundle.patch` 指向 `cordis.patch.yml`,把模块插入宿主 bundle → 前端 `window.__ModuleLoader__.load({id, factory})` 注册模块,factory 返回 `{inject: ["locale"], apply(ctx)}`。 - **client 配置**(`dsh.client`): - `platform: "web"` — 仅 Web 端 - `immediately: true` — 页面加载即执行,非懒加载 - `inject: ["@deepseek-ai/dsh-client-ui-conversation"]` — 依赖会话 UI 的 DOM 结构与 `locale` 服务 ## client.js 插件逻辑速查(修改前必读) 插件自身逻辑全部位于 client.js 文件末尾的 `__ModuleLoader__.load(...)` 段(bundle 内其余部分为 mermaid 及其依赖,勿动)。 ### 关键选择器与常量 | 标识 | 值/含义 | | --- | --- | | 宿主代码块 | `.md-code-block` | | 语言横幅 | `[data-code-block-banner]`(首子元素文本为 `mermaid` 即判定) | | 代码内容 | `[data-code-block-content]` | | 表面元素 | `[data-mermaid-chat-surface]`(插件插入的容器,含 `data-mode` / `data-render` 状态) | | 样式注入 | `