dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
English | 中文
面向运维场景的 DeepSeek Harness(dsh)插件集:把 dsh agent 变成生产事件排查员——按名字解析 kubectl / ceph / ssh 凭证、对集群执行只读命令、把排查过程组织成树。
以单个 npm 包 @elinpf/dsh-ops 安装,颗粒化的 @elinpf/dsh-ops-* 包作为依赖整体带入,锁步版本发布。
trace 工具把排查组织成树,web UI 以 git-graph 风格渲染kubectl 且集群网络可达;ceph / ssh 按需;使用密码登录的 ssh 档案(网络设备等)还需要 sshpass安装插件包(依赖与宿主层行自动挂载):
dsh plugin --profile ops add @elinpf/dsh-ops
需要 web UI 时,编辑 ~/.dsh/profiles/ops/package.json,把 web 宿主加进 bundles:
"dsh": {
"profile": {
"bundles": [
"@deepseek-ai/dsh-base",
"@deepseek-ai/dsh-web-app",
"@elinpf/dsh-ops"
]
}
}
@deepseek-ai/dsh-web-app 随 dsh 安装解析,不能用 dsh plugin add 安装。
安装报 minimumReleaseAge 错误时,在 profile 的 pnpm-workspace.yaml 加排除项——用纯名字模式 @elinpf/*,不带版本号,升级时无需再改:
minimumReleaseAgeExclude:
- '@elinpf/*'
落盘 ops 预设:
npx @elinpf/dsh-ops preset install --agents-home ~/.dsh
harness 从 ~/.dsh/.agent-presets/ 发现用户预设;不带 --agents-home 会装到 ~/.agents,静默失效。
编辑 ~/.dsh/profiles/ops/cordis.patch.yml,把顶层数组改为:
- id: agent-presets
config:
default: ops
- id: session-reference
disabled: true
启动(--no-open 不自动开浏览器;参数同 dsh web):
dsh --profile ops --no-open
登记凭证到 ~/.dsh-ops/access.yaml——只存路径和连接参数,不存密钥。list_access 带 help: true 可拉取格式文档,也可用 web 管理界面登记。
验证:
dsh --profile ops --dump-config | grep -A4 'id: agent-presets' # default 应为 ops
dsh --profile ops --dump-config | grep -A2 'id: session-reference' # 应带 disabled: true
然后 web UI 开一个 ops 会话:list_access 列出档案、kubectl 正确解析、trace 面板渲染、rw 凭证触发审批。
默认凭证存在 dsh 宿主机的本地 YAML 注册表里。需要集中管理——一处登记、轮换、审计——可以跑 @elinpf/dsh-ops-access-hub:一个独立部署的服务(不是 dsh 插件),全部凭证存于单一 AES-256-GCM 加密文档,对外提供 token 认证的小型 HTTP API 和内置 Web 界面。
启动 hub:
npx @elinpf/dsh-ops-access-hub serve
参数(flag / 环境变量 / 默认):--port / ACCESS_HUB_PORT / 3090;--host / ACCESS_HUB_HOST / 127.0.0.1;--data-dir / ACCESS_HUB_DATA_DIR / ~/.dsh-ops-hub;--key-file / ACCESS_HUB_KEY_FILE / <data-dir>/hub.key;--admin-token / ACCESS_HUB_ADMIN_TOKEN 与 --read-token / ACCESS_HUB_READ_TOKEN / 未配置时首启生成并打印一次。master key 来自 ACCESS_HUB_KEY(base64/hex)或 key 文件(自动生成,0600)。
把现有 YAML 注册表迁入 hub(路径形态的字段值会替换为文件内容):
npx @elinpf/dsh-ops-access-hub import ~/.dsh-ops/access.yaml \
--url http://127.0.0.1:3090 --admin-token <admin token>
离线方式:用 --data-dir <dir> 替代 --url,直接写 hub 的数据文件。
通过 dsh 服务的进程环境变量把 ops-access 指向 hub——这是升级不丢的接缝。access core 在 agent preset 面:profile 的 cordis.patch.yml 只能打 host 面的补丁,而落盘的 preset 文件(~/.dsh/.agent-presets/ops/agent.cordis.yml)每次 preset install 都会被重写。systemd 场景:
# /etc/systemd/system/<你的-dsh-unit>.service
Environment=ACCESS_HUB_URL=http://127.0.0.1:3090
Environment=ACCESS_HUB_READ_TOKEN=<read token>
Environment=ACCESS_HUB_ADMIN_TOKEN=<admin token>
只设 ACCESS_HUB_URL 即切换到 hub 模式;token 本就支持环境变量兜底。preset 条目里显式写的 source/hubUrl 优先级高于环境变量(临时实验可用,但 preset install 后会被冲掉)。
改完重启服务。文件字段内容在 resolve 时按需从 hub 拉取并物化到 ~/.dsh-ops/hub-cache 下的 TTL 缓存文件(0600,过期与启动时清扫);profile 仍只携路径,访问门、能力探针、管理 UI、各工具的行为与 YAML 模式完全一致。
安全提示:v1 是明文 HTTP——保持默认的 loopback 绑定,或把 hub 放在 TLS 反向代理之后。hub 是单点:数据文件和 master key 都要备份。本地 YAML 模式随时可切回作为回退。
在任意 dsh 会话里把下面这段发给 agent,让它替你完成安装与部署:
阅读 https://github.com/Elinpf/dsh-ops-plugins 的 README.zh.md,
把 @elinpf/dsh-ops 插件集安装部署到 ops profile,
完成后按 README 里的验证步骤确认。
dsh plugin --profile ops add @elinpf/dsh-ops@latest
npx @elinpf/dsh-ops@latest preset install --agents-home ~/.dsh # 预设是落盘文件,必须重新拷
dsh --profile ops --no-open # 重启
用 add @latest 而不是 update——update 不跨 minor。预设不随包更新自动刷新,必须重新落盘。
移除预设:
npx @elinpf/dsh-ops preset remove --agents-home ~/.dsh
移除插件包:
dsh plugin --profile ops remove @elinpf/dsh-ops
重启 profile:
dsh --profile ops --no-open
按需删除 ~/.dsh-ops/——凭证登记表、环境清单、被引用的凭证文件。
卸载不影响集群:凭证只是对自有文件的只读引用。
docs/adr/;领域词汇表见 CONTEXT.md