Installer and configuration base for a five-plugin DSH assistant suite: probes the Python, WPS and workspace environment, installs the sibling plugins shipped in the same repository, and generates the workspace baseline (instruction layer, memory seed, skills, settings); it also contributes its own settings section and its own host-side setup and check logic.
Install
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:liangl1985/work-personal-secretary#path:/modules/work-personal-secretary
Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time — pnpm blocks those until you allow them, so an install can stop with ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED or ERR_PNPM_IGNORED_BUILDS; dsh prints the exact key to add under allowBuilds in your profile’s pnpm-workspace.yaml, and the install works on the next run. Allowing a build is a trust decision: only install sources you trust, and pin a commit (github:owner/repo#sha).
README
This plugin publishes its README in Chinese only.
定位:工作秘书集成体的本体插件。一个集成体、一个设置入口;五个子插件各自独立。 本体的第一大功能是安装器(环境检查 → 依赖补齐 → 子插件安装 → 配置底座), 第二大功能是把 DSH 底层配置(指令层 / 记忆种子 / 技能 / 设置)在安装时分步落地。
这个模块做什么
| 能力 | 状态 |
|---|---|
| 设置左侧独立分区「工作秘书」 | ✅ 本版提供 |
| 安装与检查(环境检查 / 依赖补齐 / 子插件安装 / 配置底座) | ✅ 本版提供 |
| 核心配置(首次配置引导:目录与岗位 → 保存即执行一次生成) | ✅ 本版提供 |
| 配置(把五个子插件的设置集中到本分区读写;原「能力配置」) | ✅ 本版提供 |
| 随包说明网页(安装引导页 / 使用说明页,设置页内可展开) | ✅ 本版提供 |
| 关于与致谢(集成体版本 · 五个子插件 · 第三方来源 · 免责边界) | ✅ 本版提供 |
为什么是独立分区,而不是宿主「插件配置」页
DSH 的设置 → 插件 → 插件配置页只列宿主平面插件(终端 / Agent 循环 / Subagent / 网页搜索)。
用户插件要出现在其中,需自行贡献 settings.plugin.item。本集成体选择注册独立的
settings.section 分区:既不会与宿主插件混淆,也比在插件列表里翻找直观。
安装
dsh plugin --profile <profile> add <本模块目录>
宿主侧改动需重启 DSH 才加载;仅客户端改动刷新页面即可(客户端 bundle 按 revision 缓存,
故每次改动都会升 package.json 的版本号,界面里的 BUILD 常量与它同步维护)。
目录结构
work-personal-secretary/
├── package.json # dsh.bundle.patch 指向 cordis.patch.yml;dsh.client.inject 声明客户端包
├── cordis.patch.yml # 中性部署默认层(不含个人路径/称呼)
├── lib/index.js # 宿主半入口:子插件清单 + 版本读取 + 路由接线(零运行时依赖)
├── lib/probe.js # 七项只读环境探针
├── lib/install.js # 子插件安装引擎(原子替换 + 逐文件 SHA256 校验)
├── lib/basedeck.js # 配置底座引擎:指令层 / 记忆种子 / 技能 / 设置 / 目录 + 两个结构生成器
├── lib/preflight.js # 可用性检查(环境就绪 / 目录合法可写 / 同工作区 / 目标无冲突)
├── lib/identity.js # 「使用者身份」条目写入(区间替换 + 目录锁 + 备份 + 逐字节校验 + 回滚)
├── lib/domain.js # 五个预置岗位正文 + 生成通道(promptEnhancer → llm 降级)
├── lib/md.js # Markdown → HTML(随包说明网页渲染;转义 + 链接白名单)
├── lib/settings.js # 本体设置命名空间
├── lib/settings-api.js # 配置页宿主侧:设置只读枚举 / 白名单写入 / 专家打分预览
├── client/index.js # 客户端半:手写 loader bundle,注册 settings.section 分区
├── defaults/ # 随包单一真相源:install.zh-CN.md(安装引导)· use.zh-CN.md(使用说明)
├── scripts/ # 七套自测脚本(不依赖宿主运行时)
├── CHANGELOG.md
├── NOTICE # 集成体包含的子插件与第三方致谢
├── LICENSE
└── README.md
不引入构建步骤:客户端半是手写的 window.__ModuleLoader__.load({ id, factory }) bundle,
只依赖宿主注入的 react;与集成体现有模块(dsh-work-memory)写法一致。
配置项
cordis.patch.yml 是中性部署默认层,提供以下可选项;个性化可在该 profile 的 cordis.patch.yml
或设置页用户层按 id 覆盖:
| 配置项 | 默认 | 说明 |
|---|---|---|
selfCheckOnStartup |
false |
启动时做一次只读环境探测并在日志里给出结论 |
repoRoot |
'' |
集成体仓库目录(子插件安装的来源)。留空 = 自动探测集成体仓库目录;也可在此显式指定 |
workspace |
'' |
部署默认层的工作区目录(.dsh/skills 的落点;AGENTS.md 的检测与引导也按它定位)。留空 = 由记忆镜像目录反推(反推结果可能是知识库 vault → 建议显式指定)。设置页里的同名项优先于这里 |
obsidianDir |
'' |
知识库根目录(Obsidian vault 根)。留空 = knowledgeDeck 显式 none(不猜路径);填了之后镜像建议值改为 <知识库根>/00_全局记忆 |
workspace(设置页用户层) |
'' |
工作区目录的用户层值(volatile,改后即时生效)。优先级:设置用户层 > 上面的部署默认层 > 反推 > 进程目录。核心配置页的「配置底座状态」卡会显示当前解析值与来源 |
agentsMdDirectWrite |
false |
指令层「直接写」开关。默认 false = 授权式:不写你的 <workspace>/AGENTS.md,只把「待注入引导」写进记忆库 PROJECTS/工作秘书.md,助手每轮读到后征得你同意再注入;开启 = 旧行为:直接写入/更新「工作秘书」标记块(只动块内、写前备份、块内被手改则另存候选文件) |
默认约定
首装即生效的语言与协作两条,唯一载体是记忆种子 defaults/global-memory.seed.md(随包,首装时写入使用者记忆库的全局记忆),可由使用者改写:
- 语言:回答与推理使用简体中文;代码、命令、路径、包名、API/字段名、日志与报错原文等保留英文原样,不刻意翻译。
- 协作:主对话负责拆解、派单、核对与对外沟通,具体工作交专家子代理执行;涉密或敏感内容由主上下文直接处理。
为什么不再写进指令模板(2026-09-30 使用者定):同一套措辞此前同时出现在「指令模板 + 记忆种子」两处,属重复维护;现由记忆层单一承担(每轮注入)。若希望它具备指令层的更强约束(DSH 每轮作为指令注入、优先级高于技能文档),请在使用者自己的工作区 AGENTS.md 块外自行声明——块外内容安装器一律不动。
设计约定
- 中性:发布件不含任何个人身份、称呼、私有路径或记忆数据;
- 零运行时依赖:宿主 peer 缺失时不影响加载;
- 不写死版本:宿主半从自身
package.json读取版本;子插件版本由后续的安装器探测(不在界面里写死); - 设置分层:
cordis.patch.yml是部署默认层,个性化只走设置页用户层; - 安装安全:子插件以原子替换就位(临时目录 → 逐文件 SHA256 校验 → 替换,旧目录保留到最后);
装前备份 profile 的
package.json(写后校验 JSON 与 BOM),备份只保留最近 10 份,失败自动回滚。
分期路线
| 期 | 内容 |
|---|---|
| P0 | 本体骨架 + 设置独立分区 + 关于与致谢(本版) |
| P1 | 环境自检 + 依赖补齐 |
| P2 | 子插件从仓库内置副本安装(离线可用,装后逐文件 SHA256 校验) |
| P3 | 配置底座:指令层引导(不直接写 AGENTS.md)· 记忆种子 · 技能 · 设置用户层 · 目录 |
| P4 | 能力配置:把子插件设置集中到本分区读写(子插件命名空间保持独立) |
| P5 | 收尾:第三方 vendor 落库、根级 NOTICE、统一 v1.0.0、发布清单与 CI |
| P6 | 设置界面改版:四页签 / 核心配置执行链 / 配置页按 12.1 收窄 / 两个结构生成器 / 随包说明网页(1.1.3) |
许可
MIT。集成体包含的五个子插件与第三方来源见 NOTICE 及各子模块的 NOTICE。
Links
More in this category
xmanrui/dsh-im★ 3118
Connect IM bots to DeepSeek Harness via QR codes or bot credentials (9 channels: Feishu, WeChat, DingTalk, WeCom, QQ, Slack, Telegram, Discord, and WhatsApp).
shaobeichen/dsh-pocket★ 2685
Remote phone access to the DSH Web UI: scan a QR code for LAN or public (cloudflared tunnel) access with real-time sync, a mobile-adaptive layout, and a settings tab.
OpenPetsHQ/openpets#dsh★ 1373
Bridges DeepSeek Harness lifecycle status, errors, and approval requests to a locally running OpenPets desktop companion.
c1overzz/dsh-bili-scroll★ 1150
Let your DSH agent browse Bilibili on its own, read subtitles, write a daily digest, and @ you when it finds something worth your attention.
inclusionAI/Avernet#deepseek-harness-channel-bcn★ 599
Connects DeepSeek Harness to Avernet's Bot Collaboration Network over WebSocket V2, with automatic onboarding, isolated agent sessions, tool-call events, and multi-bot routing tools.
zaofan-make/dsh-qqbot★ 213
QQ official bot channel for DeepSeek Harness (feature-rich fork of tencent-connect/dsh-qqbot): group and private chat with the full agent, sticker library with auto-tagging and AI meme replies, group management (join approval and mute), botplay interactive card events with paginated catalogs, user extension registry (custom slash commands and QQ tools), scheduled wakeups, remote approvals over QQ, and a floating dock web UI.
Community comments
Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.