deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
PROJECT TOPICS
PROJECT README
可热插拔的 DeepSeek Harness (DSH) 任务看板 GUI 插件。以 cordis 插件 + 浏览器 DOM 扩展挂载(外挂形态,与 dsh-web-ui/packages/skins/skin-center 一致),不修改 DSH 源码;卸载即恢复原状,其它托管段(dsh-skin / skin-center / dshmarket / 个人配置)互不干扰。
社区安装(DSH 插件市场 / dshmarket):
dsh plugin --profile web add github:anitoce/dsh-task-board仓库带有
dsh-plugin等 GitHub topic,供 awesome-dsh-plugin 社区目录发现与收录。
[class*="sidebarCol"],DSH 0.1.0-rc.6 AppFrame 布局)内、「新会话」按钮下方注入「任务看板」入口行;宽栏显示图标+文字,折叠 rail 显示纯图标,颜色随 DSH 皮肤 token 自适应。workspaces.connectWorkspace,空白会话复用或 host 新建),把任务标题设为会话名,以任务 Prompt 调用 session.prompt([{ type: 'text', text }], 'queue') 驱动真实 agent;随后订阅会话快照,回合真实结束后把卡片置为 已完成/已失败 并记录执行结果。执行会话出现在会话列表,可点进对话查看真实 transcript。* / */n / a-b / a-b/n / 逗号列表;日与周同时受限为「或」)+ 常用预设(每天 09:00、每小时、每 10 分钟、每周一 09:00);启用即计算并持久化「下次运行时间」;到点自动走同一真实执行链路。SystemPrompt.section 注册 plugin:task-board 段(order 200),向每个 agent 声明本插件存在、能力与限制——插件在组合中即注入,移出组合即消失。localStorage(键 dsh-task-board),刷新页面、重启 DSH 均不丢失。npm run build # 生成 lib/index.js(host 半边)与 dist/client.js(client 打包)
node scripts/dsh-task-board.js mount # 热挂载进 DSH profile(写入托管段 + 依赖链接)
# 刷新 http://127.0.0.1:3080 —— 侧边栏「新会话」下方出现「任务看板」
挂载写入的是 profile 的
cordis.patch.yml(DSH 自带watchUserPatches热监视,约 1 秒内热重组),因此无需重启 DSH。同一补丁文件在每次 DSH 启动时重放,挂载在重启后依然生效。
node scripts/dsh-task-board.js unmount # 热卸载;刷新后 GUI 恢复原状
node scripts/dsh-task-board.js status # 查看挂载状态(托管段/依赖链接/boot graph)
node scripts/dsh-task-board.js mount --profile <name> [--url http://127.0.0.1:3080] [--no-wait]
挂载仅改动两处、均可逆,且只属于本插件:
profile package.json 中一条 "dsh-task-board": "link:<本目录>" 依赖(离线 pnpm install 建立链接;失败时回退为 node_modules 手工 junction);
profile cordis.patch.yml 中一个注释标记的托管段:
# === dsh-task-board managed segment (managed by scripts/dsh-task-board.js; do not edit by hand) ===
- insert:
- id: task-board
name: dsh-task-board
# === end dsh-task-board managed segment ===
不触碰 dsh.profile.bundles、$DSH_HOME/cordis.patch.yml、.dsh-market 状态或任何其它托管段。插件包内亦提供标准 bundle 形态(cordis.patch.yml + dsh.bundle.patch):如偏好 bundle 挂载,把 dsh-task-board 加入 dsh.profile.bundles 即可——但不要同时使用两种方式(同 id 行会冲突)。
*/10 * * * *),卡片出现定时标识;下一个整 10 分钟点自动进入「进行中」并最终完成,详情「上次触发」出现时间、执行记录新增一条(会话可跳转)。浏览器端调度,标签页需保持打开;刷新后调度自动恢复(重新计算下次运行时间)。plugin:task-board 段;卸载后消失。src/
├── index.js # host 半边:SystemPrompt.section('plugin:task-board', order 200)
└── client/ # 浏览器半边(微打包为 dist/client.js,__ModuleLoader__ 工厂契约)
├── index.js # cordis 插件入口:inject ['sessions','workspaces'],装配 store/executor/scheduler/ui
├── store.js # localStorage 持久化(v1 文档、迁移、订阅、跨标签页同步)
├── cron.js # 5 段 cron 解析/校验/nextRun 计算(纯逻辑)
├── status.js # 状态机:列流转、执行权限
├── executor.js # 真实执行驱动:connectWorkspace → rename → prompt('queue') → 快照订阅 → 回写
├── scheduler.js # 浏览器端 cron 调度循环(注入时钟,可测)
├── ui.js # DOM 扩展:侧边栏入口、五列看板、详情/新建/删除确认弹层
└── css.js # 样式(全部使用 DSH 皮肤 token,随主题自适应)
scripts/
├── build.js # 零依赖构建:host 复制 + client 微打包(无需网络/外部 bundler)
├── dsh-task-board.js # mount / unmount / status(托管段 + 依赖链接,热挂载)
└── run-tests.js # 逐文件测试运行器(兼容受限沙箱)
tests/ # node:test:存储读写 / 状态流转 / 执行触发 / cron 解析 / 调度器 / host 段 / 打包契约
workspaces.list 的 recent 工作区 → 当前会话 cwd 所属工作区 → 第一个工作区 → 用当前会话 cwd 新建;workspaces.connectWorkspace(id):复用空白会话或 host 新建,返回 sessionId;session.rename(任务标题):执行会话以任务标题出现在会话列表;session.prompt([{ type: 'text', text: 任务Prompt }], 'queue') 驱动真实 agent 回合;session 快照:running true→false、lastAgentError、窗口内 turn-error/assistant 节点共同判定 完成/失败,回写卡片并记录执行结果;手动执行在任务看板覆盖对话列时同步打开会话(不可见切换),完成后再读出真实 transcript 结果。reconcile():按会话现状对账遗留 running 任务(会话消失→失败;仍在运行→继续追踪;已结束→按错误/结果落状态)。npm run build # 构建(无需网络;client 由 scripts/build.js 微打包)
npm test # 37 个 node:test 用例(逐文件运行,兼容沙箱)
npm run verify # build + test
UI 样式遵循工作区规范 docs/dsh-ui-style-guide.md(DSH 官方 UI 风格:语义 token / 官方排版变量 / 官方圆角高度与焦点、动效约定)。
测试覆盖:存储读写/迁移/订阅、状态流转与执行权限、执行触发(含 prompt 拒绝、agent 错误、回合错误、reconcile 三种对账)、cron 解析与 nextRun(含闰年、OR 语义、周日 7==0)、调度器(启用/禁用/到点触发/跳过执行中/失效禁用/刷新恢复)、host 系统提示段注册与卸载、打包契约(__ModuleLoader__ 工厂、apply 全链路冒烟)。
npm run build 并重新挂载(或重启 DSH)生效;client 包内容变更走 boot graph 的 rev 哈希。pnpm install 不可用,挂载脚本回退为手工 junction:DSH 重启不受影响,但 profile 内后续 pnpm install 可能清理该链接,重新执行 mount 即可恢复。CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。