集中浏览编辑所有插件配置,支持表单与文件两种方式
26.2/100
综合分
2
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/12 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add oneinitAI/dsh-settings-plus该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:需留意
是什么
dsh 原生插件 · other
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 79 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
⚠︎ 实装验证未通过(unknown · 2026/10/12) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件
查看扫描证据(共 36 处,展示前 30 条)
- 删除本地文件递归scripts/prepare.mjs:19
rmSync(join(root, 'lib'), { recursive: true, force: true }) - 读取本地文件scripts/prepare.mjs:22
if (!existsSync(entry)) { - 执行外部命令来自配置/变量scripts/prepare.mjs:26
const result = spawnSync(process.execPath, [entry, ...args], { cwd: root, stdio: 'inherit' }) - 读取本地文件lib/types/file-browser.js:47
return statSync(path).isFile(); - 读取本地文件lib/types/file-browser.js:56
return statSync(path).isDirectory(); - 读取本地文件lib/types/file-browser.js:88
raw = readFileSync(join(profileDir, 'package.json'), 'utf8'); - 读取本地文件lib/types/file-browser.js:133
rootFiles = readdirSync(dshHome); - 读取本地文件lib/types/file-browser.js:154
profileNames = readdirSync(join(dshHome, 'profiles')); - 读取本地文件lib/types/file-browser.js:165
files = readdirSync(profileDir); - 执行外部命令固定命令scripts/extract-patch.mjs:40
return execFileSync('git', ['-C', harness, ...args], { cwd, encoding: 'utf8' }) - 读取本地文件scripts/extract-patch.mjs:61
const config = existsSync(args.config) - 读取本地文件scripts/extract-patch.mjs:62
? JSON.parse(await readFile(args.config, 'utf8')) - 读取本地文件scripts/extract-patch.mjs:71
if (!existsSync(args.config)) { - 读取本地文件scripts/extract-patch.mjs:103
const content = await readFile(path, 'utf8') - 写入本地文件scripts/extract-patch.mjs:107
await writeFile(path, content.replace(seam.old, seam.new)) - 写入本地文件scripts/extract-patch.mjs:115
await writeFile(out, patch) - 执行外部命令固定命令scripts/extract-patch.mjs:116
execFileSync('git', ['-C', baselineTree, 'apply', '--check', out], { encoding: 'utf8' }) - 执行外部命令固定命令scripts/extract-patch.mjs:117
execFileSync('git', ['-C', trimmed, 'apply', '--check', '-R', out], { encoding: 'utf8' }) - 读取本地文件scripts/verify-self-contained.mjs:18
for (const entry of readdirSync(directory, { withFileTypes: true })) { - 读取本地文件scripts/verify-self-contained.mjs:43
const source = readFileSync(filePath, 'utf8').replace(/ /g, '\n') - 读取本地文件scripts/verify-self-contained.mjs:60
} else if (!existsSync(targetPath)) { - 读取本地文件scripts/verify-self-contained.mjs:89
if (!existsSync(join(root, requiredPath))) failures.push(`missing repository-layout contract ${requiredPath}`) - 读取本地文件scripts/verify-self-contained.mjs:92
const packageJson = JSON.parse(readFileSync(join(root, 'package.json'), 'utf8')) - 读取本地文件scripts/verify-self-contained.mjs:101
const lockfileSource = readFileSync(join(root, 'pnpm-lock.yaml'), 'utf8') - 读取本地文件src/file-browser.ts:80
return statSync(path).isFile() - 读取本地文件src/file-browser.ts:89
return statSync(path).isDirectory() - 读取本地文件src/file-browser.ts:129
raw = readFileSync(join(profileDir, 'package.json'), 'utf8') - 读取本地文件src/file-browser.ts:170
rootFiles = readdirSync(dshHome) - 读取本地文件src/file-browser.ts:188
profileNames = readdirSync(join(dshHome, 'profiles')) - 读取本地文件src/file-browser.ts:197
files = readdirSync(profileDir)
扫描于 2026/11/2(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/dsh@deepseek-ai/dsh-api-remotes@deepseek-ai/dsh-client-connection@deepseek-ai/dsh-client-locale@deepseek-ai/dsh-client-runtime@deepseek-ai/dsh-client-ui-settings@deepseek-ai/dsh-client-ui-slots给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 集中浏览编辑插件配置
- 表单方式配置
- 文件方式配置
README
由 DeepSeek 最新模型翻译生成DSH 高级设置(Settings Plus)
English · 中文
██████╗ ███████╗ ██╗ ██╗
██╔══██╗ ██╔════╝ ██║ ██║
██║ ██║ ███████╗ ███████║
██║ ██║ ╚════██║ ██╔══██║
██████╔╝ ███████║ ██║ ██║
╚═════╝ ╚══════╝ ╚═╝ ╚═╝
┌─────────────────────────────────────────────────────────────┐
│ dsh-settings-plus │
│ DeepSeek Harness 官方设置的 plus │ │ 表单级 + 文件级配置管理 │ │ + 面向所有插件的开放注册 SDK │ │ │ │ 175 个测试 | MIT | TypeScript ESM | Cordis v4 │ └─────────────────────────────────────────────────────────────┘
dsh-settings-plus 是 DeepSeek Harness 官方设置的 plus。
展开完整文档(README 剩余 1 节)
DSH 高级设置(Settings Plus)
English · 中文
██████╗ ███████╗ ██╗ ██╗
██╔══██╗ ██╔════╝ ██║ ██║
██║ ██║ ███████╗ ███████║
██║ ██║ ╚════██║ ██╔══██║
██████╔╝ ███████║ ██║ ██║
╚═════╝ ╚══════╝ ╚═╝ ╚═╝
┌─────────────────────────────────────────────────────────────┐
│ dsh-settings-plus │
│ DeepSeek Harness 官方设置的 plus │ │ 表单级 + 文件级配置管理 │ │ + 面向所有插件的开放注册 SDK │ │ │ │ 175 个测试 | MIT | TypeScript ESM | Cordis v4 │ └─────────────────────────────────────────────────────────────┘
dsh-settings-plus 是 DeepSeek Harness 官方设置的 plus。官方入口是单个设置表单;本插件提供的是设置管理面:所有已注册的 settings namespace 与所有已挂载插件的组合配置,既可以表单方式浏览编辑,也可以文件方式浏览编辑。任何插件都能通过薄 SDK 注册自己的设置 namespace。
本仓库是自包含的独立 ESM Cordis 插件仓库。DSH 宿主是成品包的运行时消费者,不是源码或构建输入。
已发布至 dsh-plugin topic,PR 进入 awesome-DSH-plugin,dsh-market 跟随。
架构
flowchart LR
subgraph HOST["DSH 宿主(运行时)"]
REG["cordis registry:settings namespace + 组合行"]
GW["gateway:exposed-namespaces 白名单"]
FS["ctx.fs 形态通道"]
end
subgraph PLUS["dsh-settings-plus(本仓库)"]
C1["C1 宿主爬取"]
C2["C2 表单级编辑(浏览器半)"]
C3["C3 文件级编辑"]
C4["C4 插件 SDK"]
CLIENT["lib/client.js"]
end
C4 -->|注册用户 namespace| C1
C1 -->|枚举,secret 脱敏| REG
C1 -->|经 settings seam + 版本守卫写入| REG
C1 -.->|Fabric 加宽,可选| GW
C3 -->|原子读写 + expected-version 守卫| FS
C2 -->|打包为| CLIENT
C2 -->|经 catalog source seam 读取,wire 待落地| C1
四大能力
🔭 C1 · 宿主爬取
(src/crawler.ts、src/service.ts、src/fabric.ts)
只读 crawler 枚举所有已注册的 settings namespace(ctx.settings.describe + secret 脱敏)与所有已挂载插件的组合配置(schemastery Config + 行 id,来自 cordis 运行时 registry)。bundle 以 ctx.dshSettingsPlus 宿主服务发布:listNamespaces、listCompositionConfigs、updateComposition、removeComposition。写操作经宿主 settings seam + 乐观并发版本守卫。普通 cordis.yml 组合行不可经服务写入(请用文件编辑面或 cordis.patch.yml)。Fabric 绑定在加载时加宽 gateway 的 exposed-namespaces 白名单:可选挂载,缺失时安全 no-op。
🎛️ C2 · 表单级编辑
(src/client/)
浏览器半注册 settings.section 贡献:始终存在的 高级设置 入口(order 30)、catalog 无数据时的 loading/empty/error 三态状态行、每 catalog 条目一个分区,按签名差分(${key}\u0000${label})reconcile。通用 schema 表单渲染器(src/client/schema-form.tsx)渲染白名单控件:string/number/boolean 原生、const-only union 下拉、嵌套对象分组、其余 JSON textarea 兜底。secret 占位协议保证占位永不回传、留空保持原值、显式输入才提交。逐字段 reset 用 unset 操作,绝不写值。revision 冲突给出重载提示,restart 提示说明宿主何时需要重启。渲染器已完整实现并通过测试;接入数据分区随宿主 wire 面落地(见"已知限制")。
🗂️ C3 · 文件级编辑
(src/file-browser.ts、src/file-store.ts、src/yaml-editor.ts、src/patch-validator.ts、src/hmr-aware.ts)
封闭配置清单(可写的 $DSH_HOME 根 YAML 文件 + 每 profile 的 cordis.yml,bundle 层只读展示)经 realpath 越界校验。读写经注入的 ctx.fs 形态通道原子进行,带字节上限与 expected-version 写守卫。YAML round-trip 保留注释。语义校验拒绝会破坏文档的补丁编辑。HMR 说明诚实:插件不拥有 watcher,宿主已热重载 cordis.patch.yml 与 settings.yaml,保存策略只保证原子写。
🧩 C4 · 开放注册 SDK
(src/sdk.ts、docs/sdk-contract.md)
其他插件通过 registerUserSettings(实注册 + 显式移除 disposer)、defineSettingsSection(声明式,无副作用)、settingsNamespace(命名品牌,^[a-z][a-z0-9-]$)在宿主上注册自己的 settings namespace。注册随调用方 fiber 回收,secret 语义归宿主 seam,重复注册在宿主响亮报错。
官方设置 vs dsh-settings-plus
| 领域 | 官方设置入口 | dsh-settings-plus |
| 编辑形态 | 单个设置表单 | 表单级编辑,外加文件级编辑面 |
| 可浏览范围 | 宿主设置表单 | 所有已注册 settings namespace 与所有已挂载插件的组合配置,secret 脱敏 |
| 文件写入 | 不在范围内 | 封闭可写清单,原子写 + 版本守卫 |
| 插件自定义设置 | 仅宿主管理 | 任何插件经 SDK 注册自己的 namespace |
来自真实 DSH profile 的实机截图——左为官方设置入口,右为 SDK 注册 namespace 渲染出的插件设置页:
设计原则
- 默认只读。 crawler 从不写入;文件浏览器只枚举与校验。
- secret 归宿主 seam。 占位永不回传,脱敏在 schema 遍历中完成。
- 写入有守卫。 每条写路径都有 expected-version 守卫、字节上限与 realpath 越界校验。
- 不自建 watcher。 插件从不擅自重启你,只如实说明宿主已经热重载什么。
- 响亮失败,安全降级。 畸形 Fabric facade 响亮报错;缺失 facade 是安全 no-op。
快速开始
1. 安装 到 DSH profile(对本仓库做 file: 安装):
dsh plugin --profile <name> add file:/<repo-dir>/dsh-settings-plus
2. 启动 profile。 包 manifest 声明 dsh.bundle.patch(cordis.patch.yml),在所选 profile 的运行时上组合三行:dsh-settings-plus、dsh-settings-plus-invariant companion、以及一个禁用状态的 cordis-fabric 桩(加载时加宽 gateway 的 exposed-namespaces 白名单,运行时绑定在 src/fabric.ts)。补丁只组合插件;不改宿主源码、编译器设置或构建脚本。profile 的 node_modules 提供裸名 peer 依赖。
3. 打开设置导航。 高级设置 入口出现,带 loading/empty/error 三态状态行。每条目数据分区随宿主 wire 面落地后渲染(见"已知限制")。
插件作者的 SDK 用法
在插件 apply 内注册一个 namespace,随调用方 fiber 回收:
import { Context } from 'cordis'
import z from 'schemastery'
import { registerUserSettings } from '@oneinitai/dsh-settings-plus/sdk'
export const name = 'my-plugin'
export const inject = ['settings']
const MySection = z.object({
host: z.string().default('localhost'),
token: z.string().role('secret'),
})
export function apply(ctx: Context) {
ctx.effect(() => registerUserSettings(ctx, 'my-plugin', MySection, { applies: 'live' }))
}
注册后 namespace 立即进入宿主设置面:crawler 的 ctx.dshSettingsPlus.listNamespaces() 会包含它,配置 UI 自动渲染其 schema。完整契约(命名、secret、生命周期、去重语义)见 docs/sdk-contract.md。
浏览器半
src/client/ 是 Web bundle,以 lib/client.js 提供(exports map ./client)。它注册 settings.section 贡献与 dsh-settings-plus locale namespace(src/client/locales.ts 中 zh/en 双字典;中文是产品文案,英文镜像,en satisfies Record<keyof typeof zh, string> 保证对齐)。catalog 通过可注入的 settingsPlusCatalog source seam 读取。生产默认是诚实的本地空源(宿主 wire 面落地前),因此设置导航显示状态行的 empty 阶段,尚无数据分区。
已知限制
如实陈述:
- defer 到 v2(计划约定):聚合配置页、per-namespace 拒绝名单、导出/导入、required secret 保存修复。
- 宿主 wire 面处于诚实降级状态:T16 分发冒烟验证了插件安装/加载与服务挂载;宿主 wire 面(浏览器 catalog 数据通道、真实 ctx.fs 适配器、Fabric patch 端到端)待宿主升级后补验证。当前为诚实降级状态:catalog 空源、Fabric no-op、文件写走本地 FsLike 通道。
- Fabric 依赖姿态:cordis-fabric 在绑定时从宿主上下文可选加载。未挂载 facade → 安全 no-op(桩行保持禁用,gateway 保持默认白名单);facade 挂载但畸形 → 响亮报错。
- updateComposition 的写范围:只有已注册 settings namespace 的 id 可经服务写入;普通 cordis.yml 组合行响亮失败,须经文件编辑面或 cordis.patch.yml 修改。
后续计划(Roadmap)
- L2 浏览器 RPC 接入:把客户端 catalog 从空本地源接到真实宿主数据通道。
- L3 外部 HTTP API:按需将 settings 服务暴露为外部 HTTP 接口。
- 宿主版本兼容范围锁定:维持宿主版本范围锁定(见 peerDependencies),宿主升级后补验证 wire 面。
独立开发
所有命令都在本目录运行:
pnpm install
pnpm run verify:self-contained
pnpm run typecheck
pnpm test
pnpm run build
pnpm run prepare
verify:self-contained 拒绝文件系统依赖 spec、离开仓库的编译器路径、外部或损坏的 Markdown 链接、绝对工作站路径和格式错误的 bundle skill 元数据。typecheck 同时检查声明工程与源码平面测试。build 是开发/CI 类型安全门禁;prepare 产出消费者侧产物(含 lib/),供 Git 与 tarball 安装。
仓库布局
.
├── .agents/skills/ # 仓库本地插件开发工作流 ├── docs/ │ ├── dsh-plugin-contracts.md # 所有插件 skill 共享的本地契约 │ └── sdk-contract.md # 注册 SDK 契约(C4) ├── patches/ # 依赖补丁与 DSH host patch 契约 ├── scripts/ # prepare、verify-self-contained、补丁辅助 ├── src/ │ ├── index.ts # Loader 面向的函数插件命名空间 │ ├── config.ts # 可序列化 schema 与解析后的默认值 │ ├── runtime.ts # Cordis 激活与宿主边界接线 │ ├── invariant.ts # 包自有的 invariant companion │ ├── crawler.ts # 只读设置/组合枚举(C1) │ ├── service.ts # ctx.dshSettingsPlus 服务面(C1) │ ├── fabric.ts # 可选 gateway 白名单加宽(C1) │ ├── sdk.ts # 开放注册 SDK(C4) │ ├── file-browser.ts # 封闭配置清单 + 越界校验(C3) │ ├── file-store.ts # 原子读写 + 版本守卫(C3) │ ├── yaml-editor.ts # 保留注释的 YAML round-trip(C3) │ ├── patch-validator.ts # 语义补丁校验 + 自保护(C3) │ ├── hmr-aware.ts # 保存的 HMR 说明(C3) │ └── client/ # 浏览器半,以 lib/client.js 提供(C2) │ ├── index.ts # settings.section 注册 + 状态行 │ ├── catalog.ts # 可观察 catalog store + 可注入 source seam │ ├── component.tsx # 入口 / 状态行 / 数据分区组件 │ ├── schema-form.tsx # 通用 schema 表单渲染器 │ ├── form-logic.ts # 表单逻辑 + secret/reset/冲突协议 │ └── locales.ts # zh/en locale 字典 ├── tests/ # 宿主 spec(node)与客户端 spec(jsdom) ├── AGENTS.md # 仓库本地贡献契约 ├── LICENSE # MIT ├── README.md / README.zh.md # 仓库与使用契约 ├── cordis.patch.yml # profile bundle 贡献 └── package.json # 导出、peers、dsh.bundle.patch
许可证
MIT,Copyright (c) 2026 oneinitAI。贡献规则见 AGENTS.md。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
oneinitAI/dsh-settings-plus
集中浏览编辑所有插件配置,支持表单与文件两种方式
相关插件 · 其他
模型破甲清洗YuJunZhiXue/dsh-purge
⚔️ DeepSeek Harness 网络安全红队工具dsh-purge
★ 16,148已汉化DeepSeek 客户端
73
女娲蒸馏alchaincyf/nuwa-skill
输入名人名字,提炼其思维模型与决策方式供你调用
★ 37,308已汉化DSH
72
逆向分析桥接Fanqi89/dsh-rea
REA(Reverse Engineer Anything)MCP 桥接,用来把 REA 逆向工具接入 DSH 插件
★ 51已汉化DSH
72
语音女友beiyege-01/dsh-voice-ai-girlfriend
语音 AI 女友Voice AI girlfriend for DeepSeek Harness:Whisper…
★ 888已汉化DSH
71.6
红队越狱测试套件Minglink/dsh-infinite-gen-5
DeepSeek v4.1 flash 逆向工具无限五代 求 Star 收藏 ⭐欢迎大家提交项目的改进
★ 3,759已汉化DSH
71.4
协同办公空间dream-num/univer-workspace
一个让人类与 AI Agent 共同创作、协作和审阅的开源 Office 工作空间。
★ 2,266已汉化DSH
70.7
这是你的仓库?认领条目