用命令行管理任务卡、归档会话并跨机取数
30.8/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/11/2 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add kira905/dsh-board-toolkit该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
是什么
dsh 原生插件 · tool
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 1 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 97 处,展示前 63 条)
- 发起网络请求board-card.mjs:67
const res = await fetch(`${BASE}/api/task-board/action`, { - 发起网络请求board-card.mjs:76
const res = await fetch(`${BASE}/api/task-board/state`, { headers: H }); - 发起网络请求board-card-add.mjs:193
const res = await fetch(`${BASE}/api/task-board/action`, { - 发起网络请求board-card-add.mjs:223
const st = await (await fetch(`${BASE}/api/task-board/state`, { headers: H })).json(); - 发起网络请求board-dup-check.mjs:107
res = await fetch(STATE_URL, { headers: HEADERS, signal: AbortSignal.timeout(TIMEOUT_MS) }); - 发起网络请求board-dup-check.mjs:140
res = await fetch(`${ARCHIVE_URL}?limit=1`, { headers: HEADERS, signal: AbortSignal.timeout(TIMEOUT_MS) }); - 发起网络请求board-archive-bulk.mjs:95
const res = await fetch(STATE_URL, { headers: HEADERS_GET, signal: AbortSignal.timeout(TIMEOUT_MS) }) - 发起网络请求board-archive-bulk.mjs:101
const res = await fetch(ACTION_URL, { - 发起网络请求board-archive-bulk.mjs:133
const res = await fetch(`${ARCHIVE_URL}?limit=100&offset=${offset}`, { - 发起网络请求board-archive-line.mjs:178
res = await fetch(STATE_URL, { headers: HEADERS_GET, signal: AbortSignal.timeout(TIMEOUT_MS) }); - 发起网络请求board-archive-line.mjs:197
res = await fetch(ACTION_URL, { - 发起网络请求board-archive-line.mjs:228
const res = await fetch(`${BASE}/api/task-board/archive?limit=100&offset=${offset}`, { - 发起网络请求board-line-backfill.mjs:111
res = await fetch(STATE_URL, { headers: HEADERS_GET, signal: AbortSignal.timeout(TIMEOUT_MS) }); - 发起网络请求board-line-backfill.mjs:124
res = await fetch(ACTION_URL, { - 发起网络请求board-merge.mjs:245
const res = await fetch(`${BASE}/api/task-board/archive?limit=100&offset=${offset}`, { headers: H }); - 发起网络请求board-merge.mjs:283
const res = await fetch(`${BASE}/api/task-board/state`, { headers: { ...H, 'x-dsh-board-scope': 'all' } }); - 发起网络请求board-merge.mjs:289
const res = await fetch(`${BASE}/api/task-board/action`, { - 执行外部命令来自配置/变量board-merge.mjs:347
const r = spawnSync(process.execPath, [cli, '--text', text], { encoding: 'utf8', windowsHide: true, timeout: 60000 }); - 读取本地文件archive-card-sessions.mjs:82
function sha256File(p) { return createHash('sha256').update(readFileSync(p)).digest('hex'); } - 读取本地文件archive-card-sessions.mjs:84
let buf; try { buf = readFileSync(file); } catch { return null; } - 读取本地文件archive-card-sessions.mjs:144
let buf; try { buf = readFileSync(file); } catch { return []; } - 读取本地文件archive-card-sessions.mjs:241
const ledger = JSON.parse(readFileSync(LEDGER, 'utf8')); - 读取本地文件archive-card-sessions.mjs:272
if (existsSync(SYNCED_REPO)) { - 读取本地文件archive-card-sessions.mjs:309
const st = statSync(currentPath); - 写入本地文件archive-card-sessions.mjs:355
mkdirSync(ARCHIVE_ROOT, { recursive: true }); - 删除本地文件递归archive-card-sessions.mjs:399
rmSync(c.dir, { recursive: true, force: true }); - 写入本地文件archive-card-sessions.mjs:409
writeFileSync(mf, JSON.stringify({ kind: 'card-sessions-archive', stamp: STAMP, hours: HOURS, moved, entries: manifest }, null, 2), 'utf8'); - 读取密钥环境变量dsh-session-mirror.mjs:117
const KEY = process.env.DSH_MIRROR_KEY || path.join(HOME, '.ssh', 'id_ed25519_mirror'); - 执行外部命令来自配置/变量dsh-session-mirror.mjs:217
const r = spawnSync(cmd, args, { encoding: 'utf8', timeout: opts.timeout ?? 600_000, maxBuffer: 64 * 1024 * 1024, windowsHide: true }); - 读取本地文件dsh-session-mirror.mjs:248
try { txt = fs.readFileSync(file, 'utf8'); } catch { return blocks; } - 读取本地文件dsh-session-mirror.mjs:363
const j = JSON.parse(fs.readFileSync(STATE, 'utf8')); - 读取本地文件dsh-session-mirror.mjs:414
&& fs.existsSync(AUDIT_LEGACY_REPORT_DIR)) dirs.push(AUDIT_LEGACY_REPORT_DIR); - 读取本地文件dsh-session-mirror.mjs:425
try { names = fs.readdirSync(dir); } catch { continue; } - 读取本地文件dsh-session-mirror.mjs:430
try { j = JSON.parse(fs.readFileSync(p, 'utf8')); } catch { continue; } - 读取本地文件dsh-session-mirror.mjs:457
reportMdPath: fs.existsSync(mdPath) ? mdPath : null, - 写入本地文件dsh-session-mirror.mjs:490
fs.writeFileSync(tmp, JSON.stringify(obj, null, 2), 'utf8'); - 写入本地文件dsh-session-mirror.mjs:491
fs.renameSync(tmp, STATE); - 写入本地文件dsh-session-mirror.mjs:881
fs.writeFileSync(tmp, text, 'utf8'); - 写入本地文件dsh-session-mirror.mjs:882
try { fs.renameSync(tmp, file); } - 删除本地文件dsh-session-mirror.mjs:884
try { fs.rmSync(file, { force: true }); } catch { } - 写入本地文件dsh-session-mirror.mjs:885
fs.renameSync(tmp, file); - 删除本地文件dsh-session-mirror.mjs:1033
if (recursive) fs.rmSync(target, { recursive: true, force: true }); - 删除本地文件dsh-session-mirror.mjs:1034
else fs.rmSync(target, { force: true }); - 写入本地文件dsh-session-mirror.mjs:1044
fs.mkdirSync(localTmp, { recursive: true }); - 发起网络请求board-ops/board-status.mjs:30
const res = await fetch(`${BASE}/api/task-board/state`, { headers: H }); - 发起网络请求board-ops/card-action.mjs:53
const res = await fetch(`${BASE}/api/task-board/action`, { - 发起网络请求board-ops/card-note.mjs:39
const res = await fetch(`${BASE}/api/task-board/state`, { headers: H }); - 发起网络请求board-ops/card-note.mjs:51
const r = await fetch(`${BASE}/api/task-board/action`, { - 发起网络请求board-ops/card-prompt.mjs:48
const res = await fetch(`${BASE}/api/task-board/state`, { headers: H }); - 发起网络请求board-ops/card-run.mjs:41
const res = await fetch(`${BASE}/api/task-board/action`, { - 发起网络请求board-ops/card-state.mjs:31
const res = await fetch(`${BASE}/api/task-board/state`, { headers: H }); - 发起网络请求board-ops/panel-fetch.mjs:283
const res = await fetch(url, { redirect: 'manual', signal: AbortSignal.timeout(timeoutMs), headers: { accept: 'text/html' } }); - 发起网络请求board-ops/panel-fetch.mjs:312
const res = await fetch(base + ep.path, { headers, signal: AbortSignal.timeout(timeoutMs) }); - 发起网络请求board-tools/board-act.mjs:44
const st = await (await fetch(`${BASE}/api/task-board/state`, { headers: H })).json(); - 发起网络请求board-tools/board-act.mjs:58
const res = await fetch(`${BASE}/api/task-board/action`, { - 发起网络请求board-tools/board-card-dump.mjs:23
const st = await (await fetch(`${BASE}/api/task-board/state`, { headers: H })).json(); - 发起网络请求board-tools/board-card-status.mjs:89
const st = await (await fetch(`${BASE}/api/task-board/state`, { headers: H })).json(); - 发起网络请求board-tools/board-status-brief.mjs:20
const res = await fetch(`${BASE}/api/task-board/state`, { headers: H }); - 读取密钥环境变量lib/dsh-rpc-client.mjs:195
const env = process.env.DSH_RPC_COOKIE_SECRET; - 执行外部命令来自配置/变量lib/peer-channel.mjs:150
const r = spawnSync(process.execPath, [cli, sub, '--json'], { - 执行外部命令来自配置/变量lib/deploy-guard.mjs:266
return spawnSync(process.execPath, ['--input-type=module'], { - 执行外部命令来自配置/变量lib/deploy-guard.mjs:280
return spawnSync(process.execPath, ['--input-type=module'], { - 执行外部命令来自配置/变量board-ops/_test/test-session-tail-v3.mjs:70
const r = spawnSync(process.execPath, [CLI, ...args, '--home', HOME], { encoding: 'utf8', timeout: 60_000, windowsHide: true });
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
看板与会话运维的 30 件零依赖命令行工具:任务卡、会话归档与索引、跨机取数。
README
由 DeepSeek 最新模型翻译生成dsh-board-toolkit · DSH 看板与会话运维工具集
这是什么看板与会话运维的 30 件零依赖命令行工具:任务卡、会话归档与索引、跨机取数 —— 一件一个小脚本,node 能跑就够。
它解决什么任务看板一旦「自己维护自己」,卡就不是纸片了,而是一次真实的智能体会话:谁在跑、跑完该谁验收、失败怎么打回、归档后去哪查。这些操作如果靠人手改 JSON 账本,迟早写坏。所以全部走宿主 HTTP 接口,账本一律由宿主权威持有。
一条命令跑起来
npm i -g @kira905/dsh-board-toolkit
board-card status --line "某条主线" # 只读:整条主线的卡况 + 执行会话是否还在跑
先看它长什么样(真实输出)用法 board-card <status|run|confirm|reject|move> <cardId> [选项]
看板卡操作:查状态 / 执行 / 验收 / 打回 / 移列。一律走宿主 HTTP 接口,绝不手改看板账本文件。
30 个入口的完整清单见下方「里面有什么」。
本仓是命令行工具,不挂宿主界面,不需要 dsh.bundle、不需要写 cordis.patch.yml。
展开完整文档(README 剩余 1 节)
dsh-board-toolkit · DSH 看板与会话运维工具集 这是什么看板与会话运维的 30 件零依赖命令行工具:任务卡、会话归档与索引、跨机取数 —— 一件一个小脚本,node 能跑就够。 它解决什么任务看板一旦「自己维护自己」,卡就不是纸片了,而是一次真实的智能体会话:谁在跑、跑完该谁验收、失败怎么打回、归档后去哪查。这些操作如果靠人手改 JSON 账本,迟早写坏。所以全部走宿主 HTTP 接口,账本一律由宿主权威持有。 一条命令跑起来 npm i -g @kira905/dsh-board-toolkit board-card status --line "某条主线" # 只读:整条主线的卡况 + 执行会话是否还在跑 先看它长什么样(真实输出)用法 board-card <status|run|confirm|reject|move> <cardId> [选项] 看板卡操作:查状态 / 执行 / 验收 / 打回 / 移列。一律走宿主 HTTP 接口,绝不手改看板账本文件。 30 个入口的完整清单见下方「里面有什么」。 本仓是命令行工具,不挂宿主界面,不需要 dsh.bundle、不需要写 cordis.patch.yml。 装它 = npm i -g @kira905/dsh-board-toolkit(或 npx -p @kira905/dsh-board-toolkit board-status)。装进配置档也对,但那条 declares no dsh.bundle 警告是正常现象,不是故障。 装完自检(三条只读验法) <profile> 换成你实际用的配置档(默认 web),<数据根> 换成你的 DSH 数据根(默认 ~/.dsh)。 ① 组合树里有没有它(只读、约 0.6 秒、不启服务) dsh --profile <profile> --dump-config | Select-String "dsh-board-toolkit" 期望:bundle 层出现一行 "# == <登记名>"、insert 层出现 "- id: <entry>"(问的都是「它挂上没」);本仓包名 @kira905/dsh-board-toolkit —— 带 scope 装的写带 scope 名、老工装 / 手写的可能是裸名,两种都搜一遍 ⚠️ 若该包会 insert 一行,还要数一遍"同一个 id 出现了几次",必须 == 1 ② 组合列表里有没有它(只读) Get-Content <数据根>/profiles/<profile>/package.json | Select-String "@kira905/dsh-board-toolkit" 期望:dependencies 与 dsh.profile.bundles 两处都有(CLI 类只需要 dependencies;bundles 里也可能写裸名 dsh-board-toolkit) ③ 命令在不在 —— 【只查存在,不执行】 Test-Path <数据根>/profiles/<profile>/node_modules/.bin/board-status.CMD # 装进 profile 的 Test-Path "$env:APPDATA\npm\board-status.CMD" # npm i -g 装的期望:True。两条路径按你实际用的装法挑一条 探针只做存在性检查(只看命令文件在不在,不执行任何命令)。 要不要用 --help 验,见本仓当前说明与该命令的参数表。 三十个零依赖命令行小件:看板卡(建卡 / 查重 / 起卡 / 验收 / 归档 / 并回 / 快照 / 趋势)、会话(按卡归档、索引导出与元数据回填、索引缓存瘦身与恢复)、会话异地镜像。 全部走宿主 HTTP API 或只读文件,批量写操作默认 dry-run,真写必须显式 --apply。 这是什么 · 给谁用 DSH(DeepSeek Harness)把「任务卡」做成了真会话:一张卡 = 一条待办 + 一次独立执行。 本仓库把这些日常动作做成可以脚本化、可以进 CI、可以被另一个智能体调用的命令行件: - 人:想看板面之外的东西(趋势、归一化率、归档前后一致性); - 脚本 / 智能体:想在一个无人值守的夜里批量归档、批量回填、批量并回,并且每一步都能回滚; - 排障:想在一分钟内回答「这张卡为什么卡住了」「这个会话到底是死是活」「归档端点为什么 403」。 设计前提:账本是宿主(Host)的,不是脚本的。所有写动作要么走 Host API,要么在本地文件上做「备份 → 改 → 校验 → 可回滚」三段式。 同源说明 本仓部分文件与一套内部生产实现同源(同一份工程长期演进下来的两处落点)。 - 同源程度:按行级同源度口径统计(同名可比件里,仓内文件的非空行有多少能在参照件中找到,多重集扣减),本仓「≥50% 行同占比」= 100%。 - 这意味着:本仓是那套实现的提炼导出 —— 既不是逐字副本,也不是完全重写的独立实现。拿单个文件当"独立参考实现"读之前,请先跑下面的判据。 - 怎么复跑:同源度扫描器见 dsh-quality-toolkit 的 dsh-sim-scan.mjs(--repo <本仓> --prod-root <参照根>);分档阈值与口径写在它的 config/sim-scan.json 里,不藏在代码里。 - 许可:本仓许可见仓根 LICENSE(有子树例外时以子树 LICENSE 为准)。 零依赖 · 怎么跑 需要 Node.js ≥ 22(用到 AbortSignal.timeout、多帧 zstd 解压等)。没有第三方依赖,不需要 npm install 之前的网络。 git clone https://github.com/kira905/dsh-board-toolkit.git cd dsh-board-toolkit node board-card.mjs status --line "主线名" 安装成全局命令(可选,会得到 board-status / board-card-run 等短名): npm install -g @kira905/dsh-board-toolkit board-status <cardId> 也可以直接 npx -p @kira905/dsh-board-toolkit board-dup-check --kw 归档。 ℹ️ 帮助与参数闸(2026-10-30 起):board-card · board-card-add · board-merge · board-snapshot-export · archive-card-sessions · archive-index-export · projcache-prune · board-act · board-card-dump · board-card-check · board-brief · board-selfdev-ratio · board-upstream-symbol-gate 这 13 件已支持 --help(打印用法、退出码 0)与未知参数拒收(退出码 2,绝不继续执行)。用法文本会写清「这个命令会写什么」与退出码。 其余历史脚本(board-ops/ 下的小工具、archive-meta-backfill、dsh-session-mirror、projcache-restore)仍是旧行为:未识别的参数被忽略、脚本直接执行 —— 对它们请照下面每件用途表给的参数调用,不要用 --help 试探。 环境变量 | 变量 | 作用 | 默认 | | DSH_WORKSPACE | 工作区根(放 docs/ tools/ _archive/ logs/ 的那棵树) | ~/DSH | | DSH_HOME | 宿主 home(放 sessions/、task-board/ledger-v2.json 等) | ~/.dsh | | DSH_WEB_URL / DSH_BOARD_BASE / DSH_BOARD_URL | 宿主 HTTP 地址 | http://localhost:3080 | | DSH_MIRROR_HOST / DSH_MIRROR_ROOT | 异地镜像的目标主机与镜像根 | mirror@example-host / ~/dsh-session-mirror/local/.dsh | | DSH_OFFSYNC_ROOT / SYNCED_SESSIONS_REPO | 跨机同步根 / 仓2 会话落地区 | 同步根缺省取 <workspace 同级> 下的约定目录名(两变量任一显式给出即覆盖) | | DSH_WORKSPACE_ID | 建卡时用的工作区 id(board-card-add 的 --ws 缺省值) | 空(不设即由宿主决定落到哪个工作区) | | BOARD_UPSTREAM_SRC / BOARD_PLUGIN_SRC | 上游看板包 src 与本地看板插件 src(两个比对类工具必需) | 无(不设则报错退出 2) | | PROJCACHE_PRUNE_SNAPSHOT | projcache-restore 的默认来源快照 | 无(须 --from) | 本发行版不内置任何机器专属路径;拿不到配置时宁可报错退出,也不静默落到某个磁盘。 目录结构 . ├── board-.mjs 看板 11 件(根目录,见下表) ├── archive-.mjs 归档 3 件 ├── projcache-.mjs 会话索引缓存 2 件 ├── dsh-session-mirror.mjs 会话异地镜像 1 件 ├── board-ops/ 盯卡运维 9 件(含一份子 README) ├── board-tools/ 只读/写动作 4 件(含一份子 README) └── lib/ 依赖闭包(RPC 客户端、归档视图、生产闸、zstd 帧、主机短码…) 逐件用途表 看板(根目录 11 件) | 文件 | 一行用途 | 典型用法 | | board-card.mjs | 单卡操作:查状态 / 起卡 / 验收 / 打回 / 移列 | node board-card.mjs status --line "主线名" | | board-card-add.mjs | 建卡(内置 DoR 模板与字段校验) | node board-card-add.mjs --title "…" --prompt p.md | | board-dup-check.mjs | 建卡前查重(扫全量,含归档卡) | node board-dup-check.mjs --kw 归档 --deep | | board-archive-bulk.mjs | 批量归档已完成的卡(可生成回滚脚本) | node board-archive-bulk.mjs --apply --emit-restore | | board-archive-line.mjs | 按主线整条归档(可生成逐卡回滚脚本 + 桌面入口) | node board-archive-line.mjs --line "…" --apply | | board-line-backfill.mjs | 批量回填卡的主线 / 节点字段(映射文件驱动) | node board-line-backfill.mjs --map map.json --apply | | board-merge.mjs | 把异地快照并回本机账本(含 line/seq 合法性门) | node board-merge.mjs --snapshot snap.json --dry-run | | board-snapshot-export.mjs | 导出看板快照(含主机名与时间戳,另带敏感串自检) | node board-snapshot-export.mjs --label depart | | board-j1b-trend.mjs | 复算看板体量趋势判据(斜率 / 阈值告警) | node board-j1b-trend.mjs --days 30 | | board-selfdev-ratio.mjs | 量化「自研程度」:与上游看板包逐行比对 | BOARD_UPSTREAM_SRC=… BOARD_PLUGIN_SRC=… node board-selfdev-ratio.mjs | | board-upstream-symbol-gate.mjs | 符号门:上游独有的 import 在宿主主包闭包里是否真能解析 | node board-upstream-symbol-gate.mjs | 归档与索引(5 件) | 文件 | 一行用途 | 典型用法 | | archive-card-sessions.mjs | 把「看板卡触发的执行会话」里超过 N 小时不活跃的搬进归档区 | node archive-card-sessions.mjs --hours=24 | | archive-index-export.mjs | 导出归档区索引(按主机短码落 JSON) | node archive-index-export.mjs --top 20 | | archive-meta-backfill.mjs | 归档元数据回填:库表 ↔ 归档目录对账(孤儿 / 缺档) | node archive-meta-backfill.mjs --dry-run | | projcache-prune.mjs | 会话索引缓存瘦身(先备份、后裁剪、可回滚) | node projcache-prune.mjs --dry-run | | projcache-restore-archived.mjs | 从历史备份里把「已归档会话」的记录合并回来 | node projcache-restore-archived.mjs --from snap.before | 会话异地镜像(1 件) | 文件 | 一行用途 | 典型用法 | | dsh-session-mirror.mjs | 会话与附件增量镜像到对端主机(只增不删、带空壳守卫与远端盘告警) | node dsh-session-mirror.mjs --dry-run(默认即 dry-run) | board-ops/ · 盯卡运维 9 件 | 文件 | 一行用途 | | board-ops/board-status.mjs | 看板总览(在板 / 归档 / 状态分布 / 主线分组) | | board-ops/panel-fetch.mjs | 面板与归档端点取证:三组对照(裸 / 只带同源栅栏头 / 带 cookie),给状态码 · 字段名 · 体积 · 耗时 | | board-ops/card-state.mjs | 单卡状态 + 执行记录 + 交付报告 | | board-ops/card-prompt.mjs | 打印单卡的 title / status / description / prompt(只读) | | board-ops/card-run.mjs | 起卡(run / rerun),--apply 才真执行 | | board-ops/card-action.mjs | confirm / reject / move / archive / restore / delete,--apply 才真写 | | board-ops/card-note.mjs | 往卡 description 追加留痕(幂等) | | board-ops/session-state.mjs | 会话存活判据(防「假结算」)/ 找在跑的会话 | | board-ops/session-tail.mjs | 读会话 jsonl.zstd 尾部(多帧解压;排障用) | | board-ops/_test/test-session-tail-v3.mjs | session-tail 的 v3 文件名世代自测(退出码 0 = 全绿) | board-tools/ · 短小四件 | 文件 | 一行用途 | | board-tools/board-status-brief.mjs | 极简总览:现役主线 + 全部非 done 在途卡 | | board-tools/board-card-status.mjs | 单卡速查(status + 末两条执行 + 执行会话是否在跑) | | board-tools/board-card-dump.mjs | dump 卡的 title / description / prompt 全文 | | board-tools/board-act.mjs | 写动作 run / confirm / reject / move(--card 建议给完整 uuid) | lib/ · 依赖闭包(不单独发命令,但可 import) dsh-rpc-client(宿主 HTTP RPC 客户端,端点表 + 新旧双栈回落)、dsh-home / workspace(home 与工作区根解析)、archive-meta-store / projcache-read / session-file-name / zstd-frames(归档与索引读取)、board-archive-view / board-j1-limits(看板判据)、production-guard / deploy-guard / bypass-ledger(生产路径闸与放行台账)、redact(敏感串脱敏)、host-tag(主机短码)、peer-channel / remote-space / sync-topology / shell-session-watch / watch-events / pitfall-(镜像与跨机同步)。 与 DSH 的集成点 | 集成点 | 走什么 | 说明 | | 看板读写 | POST/GET /api/task-board/ | 账本 ledger-v2.json 归宿主所有,脚本永不直接改它 | | 宿主 RPC | /api/<ns>/<method>(lib/dsh-rpc-client.mjs) | cookie 三路注入:显式参数 / DSH_RPC_COOKIE_SECRET / 宿主本机凭据件(公开环境不存在 ⇒ 无凭据,不静默改变行为) | | 会话文件 | <DSH_HOME>/sessions/(session.v3.jsonl.zstd) | 文件名由 lib/session-file-name.mjs 统一解析,不写死世代名* | | 归档区 | <DSH_HOME>/_archived-sessions/** | 卡会话在 cards/<批次>/、主线在 <批次>/,两层都要扫 | | 回滚点 | <DSH_WORKSPACE>/_archive/<任务>-<时间戳>/ | 写动作 --emit-restore 会生成 before.json + 逐卡恢复脚本 + 桌面 .cmd | 安全边界(重要) 1. 默认 dry-run:所有批量写操作(归档 / 回填 / 起卡 / 验收 / 删卡)不传 --apply 只打印计划。 2. 生产路径闸:lib/production-guard.mjs 对「生产树」做逻辑路径 + realpath 双侧判定(junction 场景下只判一边必然失效)。 3. 只读优先:board-status / card-state / session-tail / panel-fetch / board-j1b-trend --no-sample 等只读;自检(--self-test / --selftest)不读也不写生产账本。 4. 不删除历史:镜像与归档都「只增不删」;本机删除面集中在 %TEMP% 与显式 --apply 的归档动作。 5. 凭据:本仓库不含任何凭据读取件(宿主专有的凭据解析件不随仓发布)。需要鉴权的调用由环境变量或调用方显式注入。 版本与许可 - 版本:CHANGELOG.md;当前 v0.1.0(首批拆仓)。 - 许可:AGPL-3.0 + 商业授权(双许可)——要么按 AGPL-3.0 使用并开源你的衍生作品,要么购买商业授权。详见 LICENSE 与下方「License / 商业授权」段。 - 上游:DSH(DeepSeek Harness)本身另有其许可,本仓库只包含自研的命令行件。 License / 商业授权 This project is dual-licensed. 1. Open source: GNU Affero General Public License v3.0 (see LICENSE). You may use, modify and distribute this software under AGPL-3.0, provided that derivative works are also released under AGPL-3.0 (including when offered over a network). 2. Commercial license: If you want to use this software in a closed-source product, or you cannot comply with AGPL-3.0, a commercial license is available. Contact the author to obtain one. 本项目采用双许可:开源使用请遵循 LICENSE 中的 AGPL-3.0(衍生作品需同样开源,含网络提供服务的情形);如需闭源商用或不适用 AGPL-3.0,请联系作者取得商业授权。
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
kira905/dsh-board-toolkit
用命令行管理任务卡、归档会话并跨机取数
相关插件 · 工具 / 效率
破甲管控台kingcharleslzy-ai/dsh-purge
dsh-purge Community · DeepSeek Harness 社区维护版:宿主兼容、状态诊断、提示词管理、更新与本机备份回滚。基于小杨 / YuJunZhiXue 的 dsh-purge。
★ 4,330已汉化DeepSeek 客户端
74.5
网文长卷lingfengQAQ/webnovel-writer
基于 Claude Code 的长篇网文辅助创作系统,解决 AI 写作中的「遗忘」和「幻觉」问题,支持 200…
★ 7,636已汉化DSH
72.2
多智能体协作HKUDS/AutoSwarm
AutoSwarm: Unify Your Agents. Unify Your Context (Codex · Claude Code · DeepSeek Harness · Muse · Grok · WorkBuddy· nanobot · and more)
★ 2,349已汉化DSH
71.6
Vox 拼贴视频生成Alisa0808/vox-director
🎬 Vox Director拼贴动效导演
★ 2,129已汉化DSH
71.4
Agent 演化引擎Q00/ouroboros
智能体 OS:智能体自己变聪明,我们只守住底线:面试准入、分阶段评估、带预算的进化循环。MCP 服务器,14 种运行时:Claude Code、Codex CLI、Gemini CLI、OpenCode、Copilot、Kiro 等。
★ 6,311已汉化DSH
71.4
智能体运行框架路由HarnessRouter/harnessrouter
智能体 harness 的统一接口。
★ 3,984已汉化DSH
71.3
这是你的仓库?认领条目