dsh-oidc
ECNU/EduWork可配置的 OIDC 登录与令牌授权模型接入,支持 LiteLLM 和显式启用的 oidc-llm 集成,提供独立 DSH Web 后端。
DeepSeek Harness 的个人指令插件:系统提示词注入、工具与顶部运行时开关,内置中性占位指令可自行替换。
Release stamp: 0.2.9 (2026-10-04).⚠️ 此项目已从 DSH 生态撤除,不再参与任何目录收录(2026-09-13)。
⚠️ This project has been withdrawn from the DSH ecosystem and no longer participates in any catalog listing (2026-09-13).
npm i -g dsh1024 once, then dsh1024 plugin --profile web add dsh-personal-directive (counts toward the deepseek1024.com install ranking).DeepSeek Harness 的「无限一代」二次开发框架版:保留原版仓库的插件形态(系统提示词注入 + 工具 + 顶部运行时开关),但不随包发布原版提示词内容——改用中性占位指令,用户可自行替换为自己的个人指令。
本项目是基于原项目的个人二次开发版本,不是原作者的官方发布版本。
*Workflow overview: install → open panel → act. The examples below use the real command surface.*
推荐直接从 GitHub 安装:
dsh plugin --profile web add github:PerryLink/dsh-personal-directive如果 dsh 没有加入 PATH,可以使用 DSH 安装目录中的命令:
& "D:/deepseek-harness/node_modules/.bin/dsh.cmd" plugin --profile web add github:PerryLink/dsh-personal-directive安装成功后,DSH 会自动:
~/.dsh/profiles/web/package.json 的 dependencies。dsh-personal-directive 加入 dsh.profile.bundles。cordis.patch.yml。然后完全重启 dsh web,再刷新页面:
http://127.0.0.1:3080适合开发、修改源码或从本地备份恢复。git 安装会一并安装依赖:
dsh plugin --profile <p> add github:PerryLink/dsh-personal-directive将 ` 替换为目标 profile 名(如 web`)。
也可以先打包再从本地 tarball 安装:
npm pack
dsh plugin --profile <p> add ./dsh-personal-directive-0.2.0.tgz打包安装同样会安装依赖。修改源码后需重新打包并重装,并重启 dsh web 才能加载新的 Host 或 Web 客户端代码。
如果 profile 中已经存在同名本地 link,先移除旧依赖:
dsh plugin --profile web remove dsh-personal-directive
dsh plugin --profile web add github:PerryLink/dsh-personal-directive从 GitHub 安装后更新到最新版本:
dsh plugin --profile web update dsh-personal-directive更新后完全重启 dsh web。
卸载只会移除插件,不会删除用户其他 bundle:
dsh plugin --profile web remove dsh-personal-directive本项目顶部的「指令:开启 / 指令:关闭」是运行时开关,不等同于上述卸载命令。
Surface · Status Harness · DeepSeek Harness dsh-v0.2.1-alpha.1 (0.2.1-alpha.1 pin: @deepseek-ai/dsh-typert-registry in devDependencies and @deepseek-ai/dsh-typert-protocol in dependencies, both on that line; gated by pnpm run harness:check and pnpm test; the peer ranges also admit >=0.2.1-0 <0.3.0)
原版项目:
本框架版保留原版的插件结构(提示词段注入、personal_directive_profile 工具、Web 顶部开关),在此基础上增加 Web 顶部可视化控制,并将提示词内容替换为中性占位指令(见「归属和许可证说明」)。
相较原版仓库,本项目主要增加了以下功能:
personal_directive_profile 工具形态(原版名为 infinite_gen1_profile)。开关位置由 DSH UI 槽位控制:
conversation.session.header.actions本项目使用顺序 1010,用于排在现有「完成提示」按钮之后。
dsh-personal-directive/
├── index.js # Harness 服务端插件入口和运行时开关
├── lib/
│ └── client.js # 顶部可视化开关
├── scripts/
│ ├── check-client-contract.mjs # 宿主契约检查(符号存在性门禁)
│ ├── check-typert-codec.mjs # Typert codec 门禁(create() 单面)
│ ├── probe-typert-codec-contract.mjs # 对已装宿主实测 codec 契约
│ └── lib/ # 门禁共用的解析/取源/改写 helper
├── prompts/
│ └── personal-directive.md # 中性占位指令(可替换为自己的内容)
├── cordis.patch.yml # Bundle 插入声明
├── package.json # Harness bundle/client 元数据
├── pnpm-lock.yaml # 本地依赖锁定文件
└── README.mddsh web 可以正常启动。dsh plugin 命令可用。pnpm 已加入 PATH。web profile。重启后,在顶部找到:
完成提示 指令:开启点击后切换为:
完成提示 指令:关闭这里的开关只控制运行时提示词是否生效:
prompts/personal-directive.md 中的个人指令。dependencies 中移除插件。dsh.profile.bundles 中移除插件。按钮显示「指令:开启」或「指令:关闭」,表示服务端运行时开关状态。
# Personal Directive开启时可以看到这些内容。切换为「指令:关闭」后发送一条新的消息,再检查新的请求,应该看不到这些特征。
注意:关闭后 Harness 自己的其他系统提示词仍然存在,本项目只移除自己的提示词段。
cd <this repository>
pnpm install --ignore-workspace
pnpm run harness:check
pnpm testBeyond the syntax check, harness:check runs the host contract check (scripts/check-client-contract.mjs). It takes every symbol lib/client.js destructures out of the host's @deepseek-ai/dsh-client-ui-primitives, and verifies each one against the host's own type surface (lib/types/**/*.d.ts) and its runtime exports (lib/index.js); it also checks that the variant values passed to Button still belong to the host's ButtonVariant union. A symbol the host dropped is reported by name with a non-zero exit, so this class of silent non-mounting regression can no longer slip past node --check — which only proves the file parses, while React.createElement(undefined) does not throw until React renders it.
The check locates a host checkout automatically (a deepseek-harness sibling of this repository, an ancestor directory, or a known drive root), or you can point it explicitly:
node scripts/check-client-contract.mjs --host D:/deepseek-harness
$env:DSH_HOST_ROOT = "D:/deepseek-harness"; pnpm run check:client-contractIf it reports that no host checkout could be found, set DSH_HOST_ROOT to your DeepSeek Harness checkout.
harness:check also runs the Typert codec check (scripts/check-typert-codec.mjs). A Typert invocation codec is { mode: 'strict', typeSymbol, create }; on the 0.1.5 line it was { mode, typeSymbol, schema } instead, and the 0.1.7 host refuses the old form at mount — validateCodec throws typert: result strict codec has no create() factory, the plugin row does not activate, and nothing else in this repository can see it: the old literal is a perfectly valid object, so node --check passes and a stub Context accepts it. The check is the local mirror of that host rule. It builds both faces' real artifacts — index.js's exported TYPERT manifest and the contribution lib/client.js hands to ctx.remote.$mount — walks every descriptor, and asserts each codec carries a create() function and no schema member, naming the offending invocation id. test/typert-mount.test.mjs goes further and registers both faces with a real @deepseek-ai/dsh-typert-registry on a real Cordis Context, then rebuilds the rejected 0.1.5-line codec in memory and asserts the registry refuses it — so the gate is proven able to fail.
node scripts/check-typert-codec.mjsscripts/probe-typert-codec-contract.mjs answers the other half of the question against the *installed* host rather than this repository's reading of it: it registers a { mode, typeSymbol, schema } codec and a create() codec on both faces with the real registry, and asserts the first is refused and the second accepted. Run it after a host-line bump to re-measure the assumption the gate encodes.
pnpm run probe:typert-codecChecking the Web profile's bundle composition:
dsh --profile web --dump-config输出中应该包含: