把长跑任务做成卡片,跑完必须由人点确认才算完成
29.5/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/9/26 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add kira905/dsh-task-board-local该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · dev
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 40 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 38 处,展示前 28 条)
- 发起网络请求src/client/host-api.ts:57
return await this.request(`${TASK_BOARD_API_PREFIX}/state`, { cache: 'no-store' }) - 发起网络请求src/client/host-api.ts:66
return await this.request(`${TASK_BOARD_API_PREFIX}/action`, { - 发起网络请求src/client/host-api.ts:77
return await readJson<TaskBoardSnapshot>(await fetch(url, { ...init, signal: controller.signal })) - 发起网络请求src/client/telemetry.ts:94
void fetch(ENDPOINT, { - 读取本地文件src/host-ledger.ts:124
const stat = readFileSync(`/proc/${pid}/stat`, 'utf8') - 执行外部命令固定命令src/host-ledger.ts:134
const probe = spawnSync('ps', ['-o', 'stat=', '-p', String(pid)], { timeout: PROCESS_PROBE_TIMEOUT_MS }) - 读取本地文件src/host-ledger.ts:168
const stat = readFileSync(`/proc/${pid}/stat`, 'utf8') - 读取本地文件src/host-ledger.ts:173
const bootMatch = /^btime +( +)/m.exec(readFileSync('/proc/stat', 'utf8')) - 执行外部命令固定命令src/host-ledger.ts:193
const probe = spawnSync( - 执行外部命令固定命令src/host-ledger.ts:206
const probe = spawnSync('ps', ['-o', 'lstart=', '-p', String(pid)], { timeout: PROCESS_PROBE_TIMEOUT_MS, env }) - 执行外部命令固定命令src/host-ledger.ts:211
const elapsed = spawnSync('ps', ['-o', 'etimes=', '-p', String(pid)], { timeout: PROCESS_PROBE_TIMEOUT_MS, env }) - 写入本地文件src/host-ledger.ts:300
mkdirSync(dir, { recursive: true }) - 读取本地文件src/host-ledger.ts:391
const owner = JSON.parse(readFileSync(this.lockFile, 'utf8')) as { token?: unknown } - 删除本地文件src/host-ledger.ts:392
if (owner.token === this.lockToken) unlinkSync(this.lockFile) - 读取本地文件src/host-ledger.ts:656
const existed = existsSync(this.file) - 读取本地文件src/host-ledger.ts:658
const parsed = JSON.parse(readFileSync(this.file, 'utf8')) as Partial<LedgerDocument> - 写入本地文件src/host-ledger.ts:702
if (existed) renameSync(this.file, `${this.file}.corrupt-${this.now()}-${process.pid}-${crypto.randomUUID()}`) - 写入本地文件src/host-ledger.ts:703
mkdirSync(dir, { recursive: true }) - 写入本地文件src/host-ledger.ts:733
mkdirSync(dirname(this.schedulerFile), { recursive: true }) - 写入本地文件src/host-ledger.ts:738
writeFileSync(fd, payload, { encoding: 'utf8' }) - 写入本地文件src/host-ledger.ts:742
try { chmodSync(tmp, 0o600) } catch { } - 删除本地文件src/host-ledger.ts:752
try { unlinkSync(tmp) } catch { } - 删除本地文件src/host-ledger.ts:779
try { unlinkSync(tmp) } catch { } - 删除本地文件src/host-ledger.ts:844
try { unlinkSync(this.lockFile) } catch (unlinkError) { - 发起网络请求src/host-runner.ts:643
const res = await fetch(`${this.base()}/api/session.list`, { - 发起网络请求src/host-runner.ts:884
const res = await fetch(`${base}/api/${LEGACY_HISTORY_METHOD}`, { - 执行外部命令来自配置/变量src/power-inhibitor.ts:96
this.spawn = options.spawn ?? ((file, args, spawnOptions) => nodeSpawn(file, [...args], spawnOptions)) - 执行外部命令来自配置/变量src/power-inhibitor.ts:97
this.spawnSync = options.spawnSync ?? ((file, args, spawnOptions) => nodeSpawnSync(file, [...args], spawnOptions))
扫描于 2026/10/31(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 长跑任务卡片化
- 人工确认完成
- 卡片对应真实会话
DSH 插件:给 DSH 网页界面用的自维护任务看板(从上游 0.3.4 分叉,已脱钩)。一张卡就是一次真实的 DSH 会话,跑完由人验收,而不是由执行器判定完成。
README
由 DeepSeek 最新模型翻译生成dsh-task-board-local
状态:已开源 · 最新发布 v1.1.0(Gitee + GitHub 双端)仓库: | 上游:@linxin666/dsh-client-ui-task-board 0.3.4(Apache-2.0)—— 本仓是已脱离上游版本线的 fork,版本号自 1.0.0 起独立许可:Apache-2.0(见 LICENSE 与 NOTICE,NOTICE 内含上游署名与改动声明) English: README.en.md
给 DSH Web GUI 加一块任务看板:一张卡片 = 一次真实的 DSH 会话,而且跑完不由执行方自己宣布完成——要人点一下。
设计依据
本组件是「ops-handoff-design」所述体系的一个实现,设计依据:
- 它为什么存在、边界在哪 → 见《自治式运维管家》§4(对象三型 + 自治光谱):哪些事可以交给 agent 自己跑、哪些必须留一个人类闸门
- 它与宿主版本的兼容区间 → 见《多机交接与云中继》§4.5「兼容性要求」(四条):插件声明宿主版本区间、运行时探测而不是静态绑定
- 本组件特有的坑与实测 → 本仓 README「已知限制」一节;上游项目的 issue 区
这是什么 / 给谁看 / 怎么读
展开完整文档(README 剩余 1 节)
dsh-task-board-local 状态:已开源 · 最新发布 v1.1.0(Gitee + GitHub 双端)仓库: | 上游:@linxin666/dsh-client-ui-task-board 0.3.4(Apache-2.0)—— 本仓是已脱离上游版本线的 fork,版本号自 1.0.0 起独立许可:Apache-2.0(见 LICENSE 与 NOTICE,NOTICE 内含上游署名与改动声明) English: README.en.md 给 DSH Web GUI 加一块任务看板:一张卡片 = 一次真实的 DSH 会话,而且跑完不由执行方自己宣布完成——要人点一下。 设计依据 本组件是「ops-handoff-design」所述体系的一个实现,设计依据: - 它为什么存在、边界在哪 → 见《自治式运维管家》§4(对象三型 + 自治光谱):哪些事可以交给 agent 自己跑、哪些必须留一个人类闸门 - 它与宿主版本的兼容区间 → 见《多机交接与云中继》§4.5「兼容性要求」(四条):插件声明宿主版本区间、运行时探测而不是静态绑定 - 本组件特有的坑与实测 → 本仓 README「已知限制」一节;上游项目的 issue 区 这是什么 / 给谁看 / 怎么读 - 给谁看:想让长跑型 agent 真的"接活—干完—被人验收"的人;尤其是已经被"agent 说它干完了,其实没干"坑过的人。 - 怎么读:先看「与上游的差异清单」(本仓的增量都在那里),再看「已知限制」(这插件不承诺什么),最后看「安装」。 - 三条最反直觉的点: 1. 卡片会花钱:每张卡执行 = 开一个独立的 DSH 会话,消耗与普通会话相同的 API 额度。看板不是待办清单,是预算。 2. 执行方不能自己结账:runner 结算成功只把卡送进「待验收」,必须由人 confirm(或 reject 打回并附原因)。 3. 浏览器只是视图:关掉页面不影响 Host 的 cron 触发、会话创建与结算;重开页面会重新拉一份全量快照。 与上游的差异清单 本仓 fork 自上游 0.3.4,之后不再跟随上游发布。差异用脚本比对得出:把本仓 src/ 与上游 npm 包里随附的 src/ 逐文件比较(上游把源码一起发布,因此可比对,无需 git 历史)。 总览:上游 43 个文件 / 本仓 45 个;完全相同的 21 个;改动 22 个;本仓新增 2 个;删除 0 个。 新增文件(上游没有) | 文件 | 加来干什么 | | src/settings-compat.ts | 跨宿主版本的设置服务兼容层:新老签名运行时探测,避免宿主升级后插件启动即崩 | | src/client/client-faces.ts | 浏览器半边自持的运行时 face 声明,让客户端 bundle 不再依赖 dsh-* 客户端包 | 改动的文件(逐条:加了什么) | 文件 | 上游 → 本仓(行) | 加了什么 | | core/tasks.ts | 290 → 428(+103 −14) | 人工验收闸 review 状态;卡类型 once/recurring/interactive(含对 fork 前旧卡按 schedule 反推);主线 line/seq 字段与排序 | | host-runner.ts | 167 → 459(+274 −50) | 结算加固:新增 interrupted 结果;inspect 直读会话历史(不再只看 tail);假 running 兜底;大分页不展开实参 | | host-service.ts | 236 → 284(+57 −11) | 结算入口按上述结果重排:成功停「待验收」,被打断/挂死可兜底收敛,不再永久卡 running | | host-ledger.ts | 776 → 852(+64 −10) | 验收动作(confirm/reject)落账;打回原因追加进 description;已执行卡备注可改 | | protocol.ts | 221 → 239(+22 −6) | 验收闸与卡类型相关的协议字段与动作 | | index.ts | 151 → 207(+53 −10) | 宿主侧提示词(插件能力自述);宿主适配层改为外部运行时依赖 | | core/controller.ts | 566 → 649(+57 −4) | 验收动作、母线视图的状态编排;事件流改为按需订阅(看板不可见时不占连接) | | core/store.ts | 230 → 251(+19 −2) | 新字段的本地视图存取 | | core/use-cases/task-update.ts | 81 → 105(+27 −9) | 「已执行卡只允许改备注」的用例规则(标题/Prompt 执行后只读) | | client/board/TaskBoard.tsx | 158 → 296(+120 −8) | 主线视图(按 line 分列,列头显示完成度)与状态视图切换 | | client/board/TaskDetail.tsx | 420 → 551(+90 −4) | 验收按钮组、打回备注、卡类型编辑器、执行历史 | | client/board/NewTaskModal.tsx | 219 → 274(+83 −47) | 建卡表单的卡类型与主线/序号字段 | | client/board/EditTaskModal.tsx | 95 → 103(+14 −8) | 执行后只读标题/Prompt,只放开备注 | | client/board/TaskCard.tsx | 89 → 121(+29 −4) | 卡面显示主线标签、卡类型、验收态 | | client/board/status-key.ts | 12 → 13(+1) | 新增 review 列的标题映射 | | client/board.module.css | 1130 → 1292(+57) | 验收闸与主线标签样式 | | client/locales.ts | 282 → 341(+59) | 新增文案(验收/卡类型/主线),中英双份 | | client/index.ts | 213 → 225(+14 −4) | 门控订阅接入 + 本地 face 声明 | | client/host-api.ts | 105 → 111(+12 −5) | subscribe() 退化为纯开/关事件流(可见性策略上移) | | client/sidebar-entry-core.ts | 209 → 236(+29 −4) | 侧边栏入口行的渲染对齐宿主「新建会话」按钮(展开态药丸 / 折叠态图标) | | client/settings-form.ts | 454 → 459(+7 −2) | 与上游同步切片的本地差异说明 | | client/TaskBoardSettingsCard.tsx | 180 → 217(+37 −6) | 电源状态行改由可见性门控;使用本地 face 声明 | 复跑方法(只读):拿任意一份上游 @linxin666/dsh-client-ui-task-board@0.3.4 的 src/,与本仓 src/ 逐文件比对;总览与逐文件行数即上表口径。上游后续版本未并入本仓(2026-09-21 查阅 npm registry,上游 latest 为 0.3.24,仍在活跃迭代)。 不变的边界 - 不向上游回灌:本仓是 fork,上游是独立项目;本仓的改动不回推,也不跟随上游版本号。 - 不引入本机耦合:本仓代码里没有本机路径、主机名、账号、私有组件名(见「开发与自检」的脱敏扫描)。 安装 本仓当前不在 npm 上,两种方式: A. 从源码构建后本地挂载(推荐,当前可用) git clone https://github.com/kira905/dsh-task-board-local dsh-task-board-local 国内网络可改用 Gitee 镜像: git clone https://gitee.com/kira905/dsh-task-board-local dsh-task-board-local cd dsh-task-board-local npm install npm run build # 产出 lib/index.js 与 lib/client.js 然后把这个目录放进目标 profile 的 node_modules($DSH_HOME/profiles/web/node_modules/dsh-task-board-local),并按本仓 cordis.patch.yml 的写法在 profile 的 bundle 层里 insert 该插件;重启 dsh web(或只重载页面,浏览器半边是每请求读盘的)。 B. 若将来发布到 npm dsh plugin --profile web add dsh-task-board-local@ 宿主版本兼容区间:dsh >= 0.1.1-rc.1(与上游声明一致)。本仓的日常运行线是 0.1.1-rc.2;对更高版本线(服务拆包、设置服务新签名)代码里做了运行时探测,但未在新线上实测 —— 换线前请先在自己的环境里跑一遍建卡/执行/验收。 配置 - 账本落在 $DSH_HOME/task-board/ledger-v2.json(Host 权威,浏览器只提交动作)。 - 每条卡可钉住工作区 / agent 预设 / 权限;任一钉不住(工作区缺失、预设坏了、权限被拒)→ 在发提示词之前失败,不会"半跑"。 - cron 是 5 段式,按 Host 本地时区;错过的触发点不补跑,nextRunAt 直接向前滚动。 - 可选且默认关闭的空闲系统睡眠保护(preventIdleSleep):只拦空闲系统睡眠,允许屏幕熄灭与锁屏,不承诺拦合盖/手动睡眠/休眠/关机。 已知限制 - 卡片执行消耗 API 额度,与普通 agent 会话相同。 - 同一张卡不会并发:上一次还在跑时,到点的触发被跳过并滚到下一个 cron 点。 - Host 停机、系统睡眠期间错过的触发点不补跑。 - DST 按 Host 本地挂钟:春季跳过的分钟不补,秋季重复的分钟不重放。 - 电源保护只保证"不进空闲系统睡眠",其余电源行为由系统策略决定。 - 结算依赖会话历史可读:历史读不出来时卡片会保持 running 而不猜(宁可卡着,不误判完成);过长时间的 stale 状态有兜底收敛。 隐私与遥测 浏览器半边继承了上游的匿名安装心跳:每个 UTC 日最多一次,把包名(和已知时的版本)POST 到上游项目自建的服务端点;载荷只带一个 localStorage 里随机生成的 visitor id(服务端加盐哈希后存储,不保存 IP,只对外提供聚合计数)。它不含会话内容、不含文件路径、不含账号。 如实说明两点,请自行判断: 1. 本仓是从上游继承该逻辑的,没有开关;要完全关闭需要自行去掉 src/client/index.ts 里的调用(或以构建期替换掉该模块)。 2. 本仓 fork 后仍未改上报的包名,因此这些心跳在上游的统计里会算作上游包。是否改为本仓自己的标识,属发布前待定项。 许可 Apache-2.0 —— 见 LICENSE(与上游包内许可文件逐字节相同)。 本仓是上游 @linxin666/dsh-client-ui-task-board 0.3.4 的衍生作品,按 Apache-2.0 §4 保留上游署名与许可副本,并在 NOTICE 里给出改动声明。上游包内没有 NOTICE 文件、源码文件也没有版权头,因此本仓的 NOTICE 同时承担署名与改动声明两件事。未被重新授权的上游文件继续按 Apache-2.0 分发。 开发与自检 npm run build # tsdown:lib/index.js(宿主半边)+ lib/client.js(浏览器半边) npm run typecheck # tsc --noEmit 单测在 _test/(Node 原生 test 风格脚本,无需额外框架;--experimental-transform-types 读取 TS 源码): node --experimental-strip-types --experimental-transform-types _test/.test.mjs 发布前脱敏扫描(只读、可复跑;本仓自带): node scan-oss-sanitize.mjs --dir --deny-file - 规则表里不含任何本机路径、主机名、账号或私有组件名;这类词由外部注入(--deny-words / --deny-file / $OSS_DENY_WORDS)。因为规则表本身可以公开,所以扫描器可以扫自己(它会跳过自身文件,理由见脚本头部注释)。 - 判定模型:命中 → 逐条判定 → 「放行(带理由)」或「待复核」。待复核必须为 0 才可发布;词表为空时脚本会拒绝给出"通过"结论(退出码 3)。 - 报告默认对命中文本做掩码,可以直接入仓。
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
kira905/dsh-task-board-local
把长跑任务做成卡片,跑完必须由人点确认才算完成
相关插件 · 开发 / 工程
隐私简历生成器reactive-resume/reactive-resume
Reactive Resume 已迁至 GitHub 上的…
★ 45,125已汉化MCP
71.7
AI 架构文档生成器sopaco/deepwiki-rs
🚀 Litho 已进化为 Terrain —— 给你的 AI 智能体一张会呼吸的代码库地图。
★ 3,157已汉化DSH
70.8
长时任务执行闭环AMAP-ML/LongHorizon-Harness
面向 Computer-Use Agent 的 Loop Engineering
★ 1,764已汉化DSH
70.5
AI 编程纪律方法包GanyuanRan/Aegis
让 AI 编程 agent 变得可信:少返工、更安全、说“完成”前先给证据。
★ 1,384已汉化DSH
69.6
多代理编排运行时Enderfga/claw-orchestrator
面向编程智能体的运行时。把 Claude Code、Codex、Antigravity、Grok…
★ 586已汉化MCP
69.4
记忆进化插件csyangwen/dsh-memory-evolve
dsh-memory-evolve 使用场景指南
★ 461已汉化DSH
67.9