Bundle
@huanlin/dsh-plugin-preface-context
在每次会话开头固定注入一段用户配置的文本上下文(设置页输入框可编辑),作为模型可见的 instructions 注入第一轮请求。 | Injects a user-configured text block as model-visible instructions context at the start of every DSH session (editable from the settings page).
- Source
- HuanLinOTO
- License
- AGPL-3.0
- Updated
- Updated 3 days ago
Readme
<p align="center">
<a href="https://dshfind.com/zh/plugins/huanlinoto/dsh-plugin-preface-context"><img src="https://dshfind.com/api/card/huanlinoto/dsh-plugin-preface-context?lang=zh" alt="dsh-plugin-preface-context card"></a>
</p>
# dsh-plugin-preface-context
在每次会话开头固定注入一段用户配置的文本上下文(设置页输入框可编辑),作为模型可见的 instructions 注入第一轮请求。
> Injects a user-configured text block as model-visible instructions context at the start of every DSH session (editable from the settings page).
## 功能
- **会话开始注入**:监听 `agent/session-start` 事件,在每次新建/恢复会话时,通过 `agent.inject()` 把用户配置的文本作为一条 `source.kind: 'plugin'`、`form: 'instructions'` 的 `user/message` 注入会话收件箱。该消息被第一轮 `agent/pre-step` 领取后送入模型请求,作为指令上下文最贴近模型的首个回答。
- **设置页可编辑**:在「插件配置」设置页注册一张卡片(与内置 `bash` / `agent-loop` / `web-search` 卡同列),包含:
- **启用开关**(boolean toggle)
- **上下文文本**(multiline textarea,保留换行和缩进)
- **实时生效**:设置页保存后,下一次会话开始即使用新文本,无需重启。
## 开发
### 仓库结构
```
src/
├── index.ts # host 入口: name/inject/Config/apply + agent/session-start hook
├── config.ts # Config schema (Schemastery) + resolvePrefaceConfig
├── settings.ts # installPrefaceSettings (settings namespace + live source bridge)
└── client/
├── index.ts # client 入口: 挂 settings.plugin.item 槽
├── preface-card.tsx # 设置卡组件
├── preface-card-controller.ts # CardForm 桥接 (staged edit / save / discard)
├── bind-snapshot-selector.ts # 内联 uSES bridge (上游不再从包根导出)
├── preface-card.css.ts # 卡片样式 + <style data-plugin-css> 注入
└── locales.ts # zh/en 字典
tests/
├── config.test.ts # Config schema 校验
├── settings.test.ts # settings bridge source/onChange/fallback
├── index.test.ts # buildPrefaceMessage 注入决策
├── preface-card-controller.test.ts # controller stage/save/discard
└── preface-card.spec.tsx # 卡片渲染 + 交互 (jsdom)
```
### 前置依赖
- Node.js >= 22
- pnpm
- 本机 `~/.dsh/source/current` 指向 DSH 源码 checkout(tsconfig paths 解析 `@deepseek-ai/*` 类型)
### 三件套
```sh
pnpm install
pnpm run typecheck # tsc --noEmit (host + client)
pnpm test # vitest run
pnpm run build # tsdown 双 bundle (host ESM + client __ModuleLoader__ CJS) + tsc 类型产物
```
### 构建策略
**预构建 `lib/` 入库**(不含 `prepare` 脚本)。client 半部依赖 `@deepseek-ai/dsh-client-*` private peer deps,pnpm 在 git install 的 `prepare` 阶段会在临时目录拉不到这些包,所以 `lib/` 必须预构建并提交。改源码后需 `pnpm run build` + commit `lib/`。
## 运行
### 安装到 profile
```sh
# 本地开发(热更新)
dsh plugin --profile web add "link:D:/Projects/deepseek-harness/dsh-plugin-preface-context"
# 从 GitHub 安装
dsh plugin --profile web add "github:huanlinoto/dsh-plugin-preface-context"
```
安装后重启 `dsh web`,浏览器硬刷新(`Ctrl+Shift+R`)。在设置页 → 插件配置 中可见「前言上下文」卡片。
### 配置
设置页卡片中:
- **启用**:开关关闭时不注入任何文本。
- **上下文文本**:输入要注入的文本(支持多行)。文本为空时不注入。
也可通过 `cordis.patch.yml` 的 plugin-row `config` 块提供 composition base(默认 `enabled: true, contextText: ''`)。
## 检查
```sh
pnpm run typecheck # 类型门禁
pnpm test # 42 个单元/组件测试
pnpm run build # 产物: lib/index.js, lib/client.js (+ types)
```
### 为何不发布 `./invariant`
本插件没有独立可分歧的观察:`agent/session-start` 监听器是 cordis effect,随插件 fiber 自动 dispose;settings 命名空间注册挂在自己的 conditional inject child 上,disposal 由 settings 服务契约保证。按上游 v0.1.2-rc.1 收紧的 invariant 规则(空 installer 与「检查服务/元数据存在」式 invariant 无效),不发布 `./invariant` 子路径导出。
### 合规自检
- [x] 零源码 patch:未修改 DSH checkout 任何文件
- [x] B1: `package.json` 声明 `dsh.bundle.patch`
- [x] B2: 自带 `cordis.patch.yml`(insert 行 id/name/config 齐全)
- [x] B3: patch 行 `name` 用包名
- [x] F1: `files` 含 `lib/` + `cordis.patch.yml`
- [x] F2: `peerDependencies` 含 cordis + `@deepseek-ai/*`(全部 optional)
- [x] F3: typecheck/test/build 三 script 齐全
- [x] A4: Config 用 Schemastery `z.object`
- [x] A6: 不导出 default
- [x] 预构建策略:`lib/` 不在 `.gitignore`,无 `prepare` 脚本
- [x] UI1: `settings.plugin.item` keyed 槽位
- [x] G: Unit + Component 测试分层
## License
AGPL-3.0
Install
dsh plugin --profile web add github:HuanLinOTO/dsh-plugin-preface-context#da1c2418b2293e0532a708b455194a281150e17b
Profile: web
With the hub plugin installed, ask your agent to install it by name — it resolves the same plan shown here.
dsh plugin --profile web add github:stvlynn/dsh.fish#path:packages/dsh-plugin-hub
install huanlin-dsh-plugin-preface-context from the hub
- This package builds from source on install. pnpm will ask you to allow its build script — that is permission to run the package’s code on your machine, outside the agent sandbox. Only allow sources you trust.