Repository navigation
Releases: LXinH3RT/dsh-readme
Release list
v0.2.0 — 可在插件设置中直接修改约束文件路径
这一版解决什么
0.1.0 的六个字段都是 volatile,settings.describe() 也确实把它们投影成了表单描述符——但面板里看不到任何入口。原因是 DSH 并不从插件的 Config 生成页面:autoGenerate 只是给会用 schema 自建页面的客户端留的开关,官方 Web 客户端不消费它(dsh-settings 文档原文:no shipped client does so yet)。也就是说,没有浏览器半的插件,无论 schema 写得多完整,都没有界面。
新增
-
自带配置页,注册在插件页的两个 keyed 槽上:
plugins.bundle.config,keydsh-readmeplugins.row.config,keydsh-readme#dsh-readme
打开 设置 → 插件,进入本插件所在组合的页面,点
dsh-readme这一行右侧的“配置”,即可编辑路径并保存。写入落到当前 profile 的 patch 文档,无需重启,下一次提示词组装即使用新文件。 -
优先使用宿主注入的表单状态,因此写入自带
revision:过期写入会明确报冲突;字段若已被 profile patch 或命令行覆盖,页面显示为只读,而不是静默丢弃用户的修改。 -
中英双语标签,跟随应用语言。
-
摘要视图一行;详情页自带标题——两个槽都是 keyed,宿主不会在它们外面画框。
变更
dsh.client.inject收敛为客户端图里真实存在的三个包:dsh-client-locale、dsh-client-ui-settings、dsh-client-ui-plugin-manager(插件页与configForms归它所有)。dsh-client-ui-slots与dsh-client-ui-primitives是 Module Loader 的隐式 baseline external,不出现在 boot 图里,列进去无意义。- 浏览器半整体包在
try/catch里并逐级降级:一个抛出异常的客户端 bundle 会把它自己的整个界面一起弄没。宿主没有提供配置作用域时,页面如实提示,而不是一直转圈。
验证
- 42 项 smoke 检查全部通过(
node test/smoke.mjs),含浏览器半的注册槽位、owner form 优先、非 host 模式只读降级。 - 对运行中的宿主实际吐出的 bundle 做了端到端驱动:
200 text/javascript、注册plugins.bundle.config与plugins.row.config、输入被 trim 后写入、恢复默认回到 patch 之下的值。
升级
{ "dependencies": { "dsh-readme": "github:LXinH3RT/dsh-readme#v0.2.0" } }或直接从本页附件安装。装好后重启应用:bundle 行在启动时读取,客户端 bundle 也随启动图下发。
dsh-readme 0.1.0
指定一个文本文件(团队规范、项目的 AgentsReadMe.md、风格指南……),插件会在每个智能体首次运行之前读取它,并把内容作为工作约束注入该智能体的系统提示词。
为什么是系统提示词小节,而不是一条消息
DSH 在每一次模型步骤之前组装系统提示词,而小节文本可以是函数,因此每步重新求值。把文件挂成这样一个小节,就完全不需要监听会话事件——不存在"能发出请求却没组装过该小节"的步骤,所以"首次运行前已阅读"是结构性保证,而不是插件去抢的时序。子智能体同样自动生效。
它同时能扛住上下文压缩:以聊天消息形式喂进去的文件,半小时后可能被摘要掉;系统提示词小节不会。
安装
{
"dependencies": { "dsh-readme": "github:LXinH3RT/dsh-readme" },
"dsh": { "profile": { "bundles": ["dsh-readme", "..."] } }
}重新安装依赖并重启 DSH(打包行只在启动时读取)。然后配置 path:
# 只按 id 覆盖。不要写 name——插入行的 name 是 DSH 生成的 file:/// 地址,
# 重复写会让整条 patch 被判定 name mismatch 而跳过。
- id: dsh-readme
config:
path: ~/workspace/AgentsReadMe.md配置
| 字段 | 默认值 | 含义 |
|---|---|---|
enabled |
true |
是否注入。 |
path |
"" |
目标文件。支持 ~、$VAR、${VAR}、%VAR%;相对路径按会话工作目录解析。 |
maxBytes |
32768 |
注入上限(1024–4194304)。超出会截断,并明确告知模型。 |
reloadOnChange |
true |
文件改动后重新读取;关闭则固定首次读取,提示词各步字节一致,更省缓存。 |
onMissing |
notice |
读不到时:notice 写一行说明,silent 保持安静。 |
order |
520 |
提示词中的位置(计划策略 500 之后、团队策略 600 之前)。 |
每项都有环境变量等价物(DSH_README_PATH 等),适用于无头部署。优先级:配置 > 环境变量 > 内置默认值。
细节
- 懒读取:在首次装配时读,不在插件加载时读——安装数小时后才开的会话也能看到当前内容。
- 按
(path, size, mtime)缓存,未变更时每步只花一次stat。 - 空文件、未配置路径不注入任何内容(不花 token 说废话);二进制文件(前 8 KiB 含 NUL)拒绝注入;截断切在 UTF-8 边界上;BOM 被剥离。
{{...}}是字面量(interpolate: false),不会提示词模板被改写。- 面板改设置下一步即生效,无需重启。
安装包
下方 dsh-readme-0.1.0.tgz 是 pnpm pack 的产物,可用 npm i <path>.tgz 或把它放进 profile 依赖目录后引用。
测试
node test/smoke.mjs # 34 项检查,不需要 DSH host、不需要网络