# dsh-gfm-alerts
**Repository Path**: NEVSTOP-LAB/dsh-gfm-alerts
## Basic Information
- **Project Name**: dsh-gfm-alerts
- **Description**: DSH GitHub 提示块插件:把回复里的 > [!NOTE] / [!TIP] / [!IMPORTANT] / [!WARNING] / [!CAUTION] 渲染成 GitHub 风格。
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-11-03
- **Last Updated**: 2026-11-09
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
**DSH 的 GitHub 提示块插件:把回复里的 GitHub Markdown 提示块渲染成 GitHub 的提示框——圆角底、左侧色条、图标加本地化标题,浅色/深色主题跟随宿主。插件还会注入一条偏好,让模型在回复里优先用提示块强调信息。**
>
> [!IMPORTANT]
> 插件默认把下面这条偏好注入系统提示(见[提示注入](#提示注入)),回复会更倾向使用 GitHub Markdown Callouts。
>
> - **Markdown 中倾向于使用 GitHub Markdown Callouts(`> [!NOTE]`、`> [!WARNING]` 等)来强调信息,而不是单纯的加粗或斜体,或使用强烈的语气词语。**
>
> 同样的要求也可以写进 AGENTS.md、copilot-instructions.md 或其他 AI 参考规范文档;和插件注入的内容一致即可。不需要插件注入时,把行 `config` 的 `enabled` 设为 `false`。
---------------
## 功能
- 支持 GitHub 的五种提示块:`[!NOTE]`、`[!TIP]`、`[!IMPORTANT]`、`[!WARNING]`、`[!CAUTION]`,类型大小写不敏感
- 标题本地化:跟随界面语言显示 `Note` / `注意`,中英词典随插件注册
- 主题自适应:颜色只用 `--dsw-alias-*` 主题 token,切换浅色/深色不需要重启
- 流式输出中同样生效;宿主重新渲染把字面标记写回来时,立刻再处理一次
- 只改显示:会话记录、事件流、复制出来的 Markdown 原文都不变
- 提示注入:Host 半边向系统提示注册一段排版偏好,让模型优先用提示块(见[提示注入](#提示注入))
| 写法 | 显示 |
| --- | --- |
| `> [!NOTE]` | 蓝色「注意」框 |
| `> [!TIP]` | 绿色「提示」框 |
| `> [!IMPORTANT]` | 紫色「重要」框 |
| `> [!WARNING]` | 琥珀色「警告」框 |
| `> [!CAUTION]` | 红色「危险」框 |
## 提示注入
Host 半边往系统提示里加一个 prompt section,默认内容是:
> 回复中更倾向于使用 GitHub Markdown Callouts(> [!NOTE]、> [!WARNING] 等)来强调信息,而不是单纯的加粗或斜体,或使用强烈的语气词语。
它只改模型写回复时的排版偏好:不写会话事件、不产生消息、不改已有记录。
`cordis.patch.yml` 里这一行的 `config` 可以调整,字段全部可选:
| 字段 | 默认 | 作用 |
| --- | --- | --- |
| `enabled` | `true` | `false` 关闭注入 |
| `text` | 上面那段 | 自定义注入文本;空字符串等于不注入 |
| `order` | `10150` | 在系统提示里的排序值,越大越靠后(宿主内置段落占 9000–10200) |
> [!NOTE]
> 注入是偏好而不是强制:模型仍可能不用提示块。插件不会改写模型输出的正文,也不会把普通加粗替换成提示块。
## 安装
需要 [dsh CLI](https://github.com/deepseek-ai/deepseek-harness),宿主版本下界 `0.2.0-rc.1`。
从 GitHub 仓库安装:
```sh
dsh plugin --profile web add github:NEVSTOP-LAB/dsh-gfm-alerts
```
> [!NOTE]
> `--profile web` 是默认 profile;其他 profile 换成对应名字。
建议锁定提交,避免后续更新改变实际内容:
```sh
dsh plugin --profile web add github:NEVSTOP-LAB/dsh-gfm-alerts#
```
也可以从 [Releases](https://github.com/NEVSTOP-LAB/dsh-gfm-alerts/releases) 下载 tarball 安装:
```sh
dsh plugin --profile web add ./dsh-gfm-alerts-0.2.0.tgz
```
安装后确认组合层里出现该插件:
```sh
dsh --profile web --dump-config
```
**重启 DSH 并刷新页面**后生效:带提示块的回复会显示为圆角提示框,而不是带竖线的引用块;之后的回复也更倾向用提示块强调信息。
卸载:
```sh
dsh plugin --profile web remove dsh-gfm-alerts
```
## 已知限制
- **只认 blockquote 形式**:`> [!NOTE]` 才是提示块;单独一行 `[!NOTE]` 按普通文本渲染(GitHub 的规则相同)。
- **装饰依赖渲染后的 DOM 结构**:宿主把 Markdown 渲染成 `blockquote > p`,插件据此识别首段的字面标记。宿主改渲染结构时最坏的结果是提示块退化成普通引用块,不会报错。
- **不改 Markdown 源**:导出的会话记录、复制的全文仍是原文;样式只存在于界面。
- **只在 Web 界面渲染提示框**:DSH Desktop 的对话界面同样由 Web 渲染,因此一并生效;纯终端(headless / ACP)没有这条渲染路径。提示注入走的是 Host 半边,不受此限。
- **提示注入只是偏好**:模型可能不用提示块;宿主没有 `systemPrompt` 服务时注入不生效。
## 实现
插件分两半:
- **Host(`index.js`)**:用 `ctx.systemPrompt.section()` 注册一段排版偏好;不 import 任何宿主包,也不写会话事件。
- **Client(`lib/client.js`)**:DSH `0.2.1-rc.5` 的 Markdown 渲染器是宿主内置的 mdast 渲染器,没有可注册的块级渲染扩展点,也没有「助手正文」槽位。插件因此对渲染结果做增量装饰:识别 `blockquote` 首段开头的 `[!TYPE]`,挂 `data-dsh-gfm-alert*` 属性,由注入的样式表用伪元素画标题与图标,并去掉首段的字面标记;不插入、不移动 React 节点。
细节、DOM 契约、注入顺序与风险边界见 [doc/design.md](./doc/design.md);开发与发版流程见 [CONTRIBUTING.md](./CONTRIBUTING.md)。
## License
MIT