给 DeepSeek Harness 的 PTC 模式加「黑板块」。
55.9/100
综合分
80
GitHub 星标
332
npm 周下载
—/5
用户评分
数据截至 2026/10/22 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-block-ptcnpm 源 · dsh-block-ptc 的发布者账号已校验与本仓库一致
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · chat
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 13 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包dsh-block-ptc @ 0.4.0
✓Node 引擎要求 >=22 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/29 06:39:38
安全扫描自动 · 静态分析源码v2.7.0🟢 扫描:未发现敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描未发现敏感能力:最多只发网络请求、读取自身元数据或只读文件,未发现执行命令、文件写入或敏感信息读取。
扫描于 2026/11/2(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-agent@deepseek-ai/dsh-llm@deepseek-ai/dsh-session@deepseek-ai/dsh-tools给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
面向 DeepSeek Harness PTC 模式的模型可控上下文块
最近更新
在 GitHub 查看全部 →v0.4.02026-10-21
这次发布修正区块整理时机和信息保留要求,并将工具改名为 block_compact。
· 接口变更:使用 await tools.block_compact({ ids, content }),移除 block_summary、summary 和单个 id 别名,不提供兼容分支。
· 不再引导模型在步骤完成后立即整理;仍用于执行、回复和讨论的材料继续保留,在原始内容不再需要或汇报后转向其他工作时整理。
· 要求完整整理后续需要的信息,仅对不再需要的内容概括或省略。
· 首次请求的 run_code 参数说明、工具描述和 SDK 示例统一为 [block: ] 格式。
更新后重启 DSH,并新建 Block PTC 会话。包名仍为 dsh-block-ptc,要求 DSH >=0.2.1-rc.2、Cordis >=4.0.5,不设上限。
验证:逻辑测试、原生 DSH 首次提示词/SDK 组装、工具 schema、Session 区间替换与重放、发布包内容检查。原生检查为离线检查,不调用模型;尚未验证模型实际整理时机与信息保留质量。
v0.3.02026-10-19
适配 DSH 0.2.1 移除 tool-presentation.mode: both 后的 PTC 约束,修复 Block PTC 预设无法激活的问题。
接口变化: 不再注册 block_run_code。直接调用内置 run_code,在描述中声明 block:
run_code({ description: "[block: session-refresh] Refresh the session cache", code: "…" })
多 block 使用 [block: a, b];程序内部仍通过 tools.block_summary({ ids, summary }) 收口。完整区间替换、剩余 ids 继承及跨用户追加消息的行为保持不变。旧版日志仍可重放。
移除了独立浏览器渲染和发现锚点,工具行使用内置 PTC 渲染。修正描述头校验及旧日志的归属解析。
最低版本:DSH 0.2.1-rc.2、Cordis 4.0.5,不设上限。更新 bundle 后彻底退出并重开 DSH,新建 Block PTC 会话。
验证:语法和逻辑回归、DSH 0.2.1-rc.2 原生 Session 追加/回放、工具 schema、发布包内容检查。未运行新的模型 API 评测或 Windows 实机验收。
v0.2.22026-10-16
修复同一个 block 跨过用户追加消息后,block_summary 被“受保护的用户消息”限制拒绝的问题。
区间内的用户追加消息现在随工作一起总结,摘要要求准确保留新增需求、纠正和约束。系统和 developer 消息仍受保护,错误会标明具体事件类型和序号。
如果新消息在模型写好摘要后才到达,旧摘要会被拒绝,避免延迟提交清理掉尚未读到的新要求。
更新 dsh-block-ptc@0.2.2 后,请彻底退出并重开 DSH。已有历史摘要仍保留原文本,新生成的摘要使用 格式,不显示空 ids。
验证:逻辑及客户端回归、DSH 0.2.0-rc.2 原生 Session 追加/回放与工具 schema 离线检查、发布包核对;未运行新的模型 API 评测或 Windows 实机验收。
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。
README
由 DeepSeek 最新模型翻译生成dsh-block-ptc
给 DeepSeek Harness 的 PTC 模式加「黑板块」。
0.4.0 使用 block_compact({ ids, content }),不兼容旧的 block_summary 工具及 summary/单个 id 参数。更新后重启 DSH,并新建 Block PTC 会话。
区块协议使用内置 run_code 传输层。DSH 的 PTC 呈现只允许直接调用 run_code,所以区块归属写在工具描述的开头:
run_code({ description: "[block: <ids>] <goal>", code })
一个区块就是黑板上的一块区域。模型跑的每段程序都会带上区块 id。当区块内容不再需要,或相关结果已经汇报且准备转向其他工作时,可以提交自己整理的保留内容替换区块消息。仍需用于执行、回复或讨论的内容应继续保留。原始消息仍保留在只追加的会话日志里,人类看到的对话记录不变,重放也是确定性的。
展开完整文档(README 剩余 1 节)
dsh-block-ptc
给 DeepSeek Harness 的 PTC 模式加「黑板块」。
0.4.0 使用 block_compact({ ids, content }),不兼容旧的 block_summary 工具及 summary/单个 id 参数。更新后重启 DSH,并新建 Block PTC 会话。
区块协议使用内置 run_code 传输层。DSH 的 PTC 呈现只允许直接调用 run_code,所以区块归属写在工具描述的开头:
run_code({ description: "[block: <ids>] <goal>", code })
一个区块就是黑板上的一块区域。模型跑的每段程序都会带上区块 id。当区块内容不再需要,或相关结果已经汇报且准备转向其他工作时,可以提交自己整理的保留内容替换区块消息。仍需用于执行、回复或讨论的内容应继续保留。原始消息仍保留在只追加的会话日志里,人类看到的对话记录不变,重放也是确定性的。
- DeepSeek Harness 0.2.1-rc.2 或更新,不设版本上限
- 社区插件,维护者 mengwEX
- 零运行时依赖:唯一的外部导入是 node:crypto
- 许可证:MIT
目录
- 为什么做这个
- 上下文与缓存对比
- 工作原理
- 安装
- 快速上手
- 接口参考
- 设计说明
- 验证
- 排障
- 已知边界
- 开发
- 许可证
为什么做这个
自动压缩在 token 压力上来时压缩历史,它按大小决定压什么,并不知道前四十条消息是一个已经完成的子任务、后十条是新任务。
这个插件让模型自己划线:开一个区块、在里面干活、用一段交接总结收口——于是保留下来的上下文就是模型选择保留的那一段。总结由模型在程序调用里提交,插件不另跑一个总结模型。
上下文与缓存对比
同一段合成对话的输入上下文与建模缓存命中对比
这是机制示意,不是 API 基准测试。 两个面板重放同一段合成四任务负载,token 权重相同。整条 = 输入上下文;蓝色 = 建模的缓存命中;橙色 = 建模的缓存未命中。
被缓存的 token 仍然占用上下文窗口。
区块收口后,下一次请求用一段总结替代已完成的工作。替换历史也可能让缓存后缀失效:上下文变小并不保证缓存命中率更高或账单更低。收口前会等 assistant/tool 对落定;原始用户消息保留。基线尚未触发自动压缩阈值。
数据、假设与复现步骤见 docs/context-comparison/README.md。
插件返回的 tokensFreed 不是服务商的缓存命中指标。
工作原理
模型看到的直接工具就是内置 PTC 传输层,再加一个程序内可调用的工具:
run_code({ description: "[block: <ids>] <goal>", code }) 唯一可直接调用的工具
await tools.block_compact({ ids, content }) 在程序内部调用
1. run_code.description 开头的区块头声明这段程序推进哪些区块。id 归属覆盖整条 assistant 消息(包含工具调用前的 thinking/content)及对应工具结果;同一消息内多个调用的 id 取并集。
2. tools.block_compact({ ids, content }) 用整理后的保留内容替换从最早到最晚一次出现目标 id 的完整区间。
3. 总结继承「区间内 id 的并集减去本次收口的 id」。它可以再次参与后续总结;没有剩余 id 的总结节点也会保留。
4. 区间里的工具对还没完成时,请求先排队,等结果落定再执行。区间里出现受保护的 system/developer 消息会拒绝整个区间,不会只替换前缀。
A A B A C B -- compact([A]) --> S[B] C B
S[B] C B -- compact([B]) --> T[C]
T[C] -- compact([C]) --> U[]
A A B A C B -- compact([A, B]) --> S[C]
人类看到的仍是完整对话(日志只追加);模型下一次请求看到的是总结。Web UI 里总结显示为压缩检查点节点。
安装
要求:DeepSeek Harness >=0.2.1-rc.2 及其自带运行时,Cordis >=4.0.5。
两个 peer 范围都没有上限。插件是一个 profile bundle:安装后往 dsh.profile.bundles 加一行,并新增一个 agent preset block-ptc;不会改动自带的 ptc preset。
版本范围只说明「允许新宿主加载」,不等于已完成兼容性验收。本版本的实机验收使用 DSH 0.2.1-rc.2。DSH 的插件加载器评估 peer 范围时包含预发布版本。插件在挂载前检查所需的工具/提示词方法,在总结前检查会话方法,缺失时报错。方法存在不等于事件语义、preset 配置或模型行为已经验证;宿主变化时仍需要重新验收。
从 npm 安装(推荐)
在 Harness 的 Plugin Manager 里找到 dsh-block-ptc 安装,或让启用了 Plugin Manager 工具的 agent 安装:
plugin_manager install_bundle dsh-block-ptc
包已发布在 npm。安装后重启应用,选择 Block PTC preset。
从本地目录安装
git clone https://github.com/mengwEX/dsh-block-ptc.git
在 Plugin Manager 里安装绝对路径:
plugin_manager install_bundle /absolute/path/to/dsh-block-ptc
两种方式都会在目标 profile 里用 pnpm 安装。本地方式装成 link: 依赖,适合开发。
带版本号的源码包也放在 GitHub Releases。
手动安装(等价做法)
在 ~/.dsh/profiles/<profile>/package.json 里:
{
"dependencies": { "dsh-block-ptc": "link:/absolute/path/to/dsh-block-ptc" },
"dsh": { "profile": { "bundles": ["@deepseek-ai/dsh-base", "@deepseek-ai/dsh-web-app", "dsh-block-ptc"] } }
}
然后在该目录运行 pnpm。
安装之后
1. preset 选择器里出现 Block PTC。
2. 重启一次应用。 加载器按解析后的 URL 缓存插件模块,安装 bundle 会改变组合;运行中的宿主会继续用旧模块,直到重启。
3. 用 Block PTC preset 新建会话。
卸载
plugin_manager remove_bundle dsh-block-ptc
然后重启。plugin_manager set_bundle dsh-block-ptc enabled=false 可以只停用、不卸载。
快速上手
先完成工作并讨论结果;之后转向其他工作、原始内容不再需要时,再整理之前的区块:
讲清 tokenizer 怎么工作。
讨论完之后:接着看 lexer;之前的区块如果已不需要原始内容,就整理一下。
你应该看到:
- 模型每次跑程序都用带区块头的 run_code,例如 [block: tokenizer] Explain the tokenizer;
- 一次 block_compact 收口调用,返回值类似 {"replaced": 3, "tokensFreed": 346}——替换了多少条消息,以及被替换消息的估算 token 数(不含新总结本身);
- 原位置出现一个 <block-summary>…</block-summary> 节点。
首次请求的系统提示、原生工具描述和参数 schema 都会说明区块头要求,SDK 使用说明也使用相同格式。
如果程序调用被拒绝并提示 "Every run_code call, including the first",那是 preset 的 guard 在工作:带上区块头重试即可;被拒绝的那次调用本身不会被归属到任何区块。
接口参考
按相对独立的工作内容组织区块,继续处理同一内容时复用原有 id。区块内容已不再需要,或相关结果已经向用户汇报且准备转向其他工作时,可以整理并收口。仍需用于接下来的执行、回复或讨论的内容应继续保留。不要仅因某个工作步骤完成就收口。
run_code.description 里的区块头
| 部分 | 类型 | 必填 | 含义 |
| [block: <ids>] | 头部 | 是 | 逗号分隔、非空、不重复的区块 id,例如 [block: auth] 或 [block: auth, parser]。id 不能包含逗号、方括号或换行。 |
| <goal> | string | 是 | 头部之后同一行里的目标,显示为工具行的摘要。 |
run_code 本身是 DSH 的工具,插件不替换它。code/timeoutMs 参数、沙箱、并行调度和结果渲染都与内置 PTC 完全一致。插件会对齐模型可见的区块头说明,读取区块头并给周围消息打归属。
可调用 tools.block_compact
| 参数 | 类型 | 必填 | 含义 |
| ids | string[] | 是 | 要整理并收口的区块 id。 |
| content | string | 是 | 由模型撰写,整理这些 id 从第一次到最后一次出现的完整内容。后续仍需使用的信息应完整保留,保证可以直接继续工作;不再需要的内容可以简要概括,无关或重复内容可省略。准确保留用户要求、修正和约束,写清已完成的工作、结果、未完成事项和下一步。 |
替换文本会说明这是模型从先前工作中整理保留的信息,并包在 <block-summary>…</block-summary> 里。只有还有剩余归属时才出现 Block ids 一行;空 ids 留在内部元数据里。这个格式与 DSH 自动压缩分开,二者可以共存。
立即完成时返回 { replaced, tokensFreed, ids? };ids 非空时表示总结继承的剩余归属。tokensFreed 是被替换消息的估算大小,不含新总结的成本。
如果工具结果或另一个压缩还没结束,返回 { replaced: 0, tokensFreed: 0, pending: true, requestSeq, note }。这只表示
已排队,不代表替换完成。成功的工具结果会写入日志,重启/分叉后可以继续完成;延迟执行失败会记录日志,目标归属保留到真正替换为止。目标 id 不存在或区间含受保护消息时,整个请求被拒绝,不会删除任何归属。
预设 block-ptc
自带 ptc preset 加上:
- 与自带 preset 相同的 tool-presentation.mode: ptc,因此宿主的 PTC 收窄规则继续生效:只有 run_code 可以直接调用;
- 本插件的行:一条 guard,要求每次模型直接调用的 run_code 都带 [block: <ids>] <goal> 头(如果收窄规则缺席,也仍然拒绝直接调用其他工具);此外还有区块规则段、原生工具的模型可见说明,以及程序内可调用的 block_compact。
设计说明
为什么用描述头,而不是自定义传输层。 DSH 0.2.1 移除了 both 呈现模式。
在 ptc 下,dsh-tools 会在策略之前把任何非 run_code 的模型直接调用解析为 UNKNOWN_TOOL,旧的 block_run_code 这类插件工具因此再也无法被调用。受支持的传输层就是 run_code;插件把区块 id 放进它的描述,并且不包装、不重写它,从而保持传输层行为完全一致。
为什么用压缩词汇。 一条消息只能通过 DSH 自己的 surface 替换机制从模型上下文里消失,而一次替换必须携带 DSH 期望的事件:
compaction/start 取得持久压缩锁 compaction/summary 声明被替换精确区间的 token 价格 user/message 替换本身(surfaceOp: replace,compact-checkpoint 来源) compaction/end 释放锁
这些都是 DSH 自己的会话事件类型(@deepseek-ai/dsh-compaction、 @deepseek-ai/dsh-session),不是插件发明的名字;插件定义新事件类型会让会话日志无法读取。内置压缩引擎不会被调用,也不会发起总结请求——总结是模型自己写的文本,这四个事件只是 DSH 要求的簿记。任何失败都只做一次收口尝试,失败的总结不会把持久锁留在那里。
保留什么。 system/developer 消息永远不被替换;包含它们的区间会被拒绝。区间内的用户补充和工具通知会随工作一起被总结,总结必须保留新增要求、修正和约束。区间外的消息保持不动。模型写完总结之后才到达的用户消息不会被丢弃:旧总结会被拒绝,模型必须读完新消息再更新总结。未完成的工具对会推迟完整替换。
状态放在哪。 run_code 的描述分配消息归属。已提交的总结检查点在 source.blockPtc 里携带剩余 id、已收口 id 和请求序号。只有总结尝试不会收口任何东西。成功的排队结果可重放;session/event 观察者在 append 边界之外调度完成。
不使用第二个持久化存储。
为什么没有外部导入。 profile bundle 可以以符号链接安装;按裸模块名导入 @deepseek-ai/dsh- 的插件可能因宿主链接方式而解析失败。插件唯一的外部导入是 node:crypto,归属辅助逻辑用包内的相对模块。
验证
npm run check # 语法检查 + 逻辑测试
node tests/logic.test.mjs
逻辑测试用假的 context 和会话驱动真实的插件入口:区块头解析、工具注册、guard、完整的压缩事务、失败后仍释放锁的路径,以及宿主 API 检查。
可选的原生离线检查使用 DSH 已安装的服务:
node tests/native-session.mjs /path/to/dsh-session/lib/index.js /path/to/dsh-tools/lib/index.js
node tests/native-prompt.mjs /path/to/dsh-tools/lib/index.js
Session 检查验证工具 schema、真实事件 append/重放及区间内用户消息替换。提示词检查通过真实的 SystemPrompt、Tools 和 Cordis 服务组装首次请求:原生 run_code 的 schema 与 SDK 示例包含区块头,程序 SDK 提供 block_compact({ ids, content }),宿主原有的程序与运行时说明保持不变。这两项均不调用模型,不验证实时 UI、区块选择、整理时机或信息保留质量。
排障
| 现象 | 原因与处理 |
| preset 选择器里没有 | bundle 不在 dsh.profile.bundles,或宿主还没重新组合。检查 plugin_manager list_bundles,然后重启。 |
| preset 显示损坏 / "dsh-block-ptc: never started"* | 插件模块导入失败(本地链接安装通常是包解析问题)。修正布局后重启。 |
| "invalid config: $.mode expected native \| ptc but got both" | 旧 0.2.x bundle 装在 DSH 0.2.1+ 上。升级到 0.3.0 后重启。 |
| 会话里没有区块归属 | 会话没跑 block-ptc preset,或模型漏了区块头(guard 会拒绝那次调用)。 |
| 总结报 "no current content for ids" | 该 id 没在当前 surface 的 run_code 头里出现过。检查拼写;已收口的 id 不再可见。 |
| 新总结还是旧格式 | 宿主仍在跑旧模块。更新 bundle,完全退出并重开 DSH。历史总结保留原文。 |
| 改了插件不生效 | 模块按 URL 缓存,默认不开模块监听:重启应用。 |
| 某个区块一直不被压缩 | 没有用 block_compact 收口,内容会留到自动压缩把它折进通用总结。 |
| 会话里压缩不工作了 | 没有配对 compaction/end 的 compaction/start 就是持久锁。本插件在每个失败路径都会关闭自己的括号;旧版本留下的锁请开新会话。 |
已知边界
- 一次总结替换一个完整、连续的首尾区间。区间里有受保护的 system/developer 消息就拒绝整个区间,不会跳过它,也不会把前缀当成已完成总结。
- 区块头由模型撰写。没有区块头的调用会在执行前被拒绝,所以未归属的工作不会进入区块。
- 未写入保留内容的信息在后续模型请求中不可见;后续工作仍需使用的细节应完整写入 content。
- 检查点继承剩余 id,可以再次被总结;空 id 的检查点作为已完成结果保留。
- 区块按会话隔离。子 agent 有自己的上下文和区块。
- peer 依赖只声明最低版本、不设上限。允许更新宿主,但事件语义和 preset 配置仍需重新验收。
开发
.
├── lib/plugin.js 宿主侧 guard、block_compact、压缩事务 ├── lib/blocks.js 区块头解析、消息归属与区间规划 ├── lib/prompts.js 区块使用说明与原生工具/schema 提示 ├── cordis.patch.yml bundle 补丁:新增一个 preset block-ptc ├── locale/{en,zh}.json Harness UI 读取的显示元数据 ├── tests/logic.test.mjs 逻辑与事务测试 ├── RELEASING.md 发布与交接检查表 └── package.json bundle manifest(dsh.bundle.patch)
用任意 Node 22+ 运行测试(无需安装依赖):
node tests/logic.test.mjs
发布到 npm
步骤见 RELEASING.md。包名是 dsh-block-ptc,bundle 补丁也按这个名字解析。
贡献与反馈
欢迎在 <https://github.com/mengwEX/dsh-block-ptc> 提 issue 或 PR。提交前运行 npm run check,并把实机验收结果与离线测试分开记录。
许可证
MIT,见 LICENSE。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
mengwEX/dsh-block-ptc
给 DeepSeek Harness 的 PTC 模式加「黑板块」。
相关插件 · 对话 / 记忆
上下文中枢oceanbase/powercontext
上下文跟着工作走 —— 跨会话、跨智能体、跨人。
★ 1,487已汉化DSH
73
智能体记忆库plastic-labs/honcho
Honcho 是记忆基础设施,用来构建有状态的智能体。这些智能体能理解不断变化的人、智能体、群组、项目和想法。
★ 7,894已汉化DSH
71.7
长程智能体控制面loopx-project/loopx
给 Agent 一个目标,让工作持续向前。
★ 6,358已汉化DSH
71.3
智能体上下文数据库volcengine/OpenViking
给 AI 智能体用的上下文数据库
★ 41,379已汉化DSH
71.3
长效机器人团队Fei2411/DS-Bot
DS Bot 是一个基于 DeepSeek Harness简称 dsh的 bot 插件,插件将 dsh 改造为 bot…
★ 5,084已汉化DSH
71.1
可携带记忆层EverMind-AI/EverOS
为什么选择 EverOS
★ 13,778已汉化DSH
71.1