DSH HUB
HomePlugin StorePlugin PacksCommunityRankingsResourcesPublish Guide
Plugin source
Back to catalog

muyuanjin /

muyuanjin/dsh-ptc-plus

Verified

A session-bound agent-native REPL for DeepSeek Harness PTC mode.

★ 26 Stars5 Forks0 IssuesN/A Community rating0 Confirmed installs
View on GitHub
READMESource: main@0bc953bd

PTC Plus:不用从头来,改一改,接着算!

简体中文 · English

DeepSeek Harness PTC mode npm version License: MIT

Awesome DSH Plugin

让模型在同一会话中持续计算、直接修订,减少重复工作和可避免的工具调用错误。

PTC Plus 为 DSH 的 PTC 模式提供有状态的 TypeScript 计算环境。它基于 REPL,让变量、函数、导入和中间结果跨工具调用复用;针对模型连续编写和修改代码的需要,扩展声明更新规则,并提供模块语法适配、调用容错和代码编辑能力。

  • 接着算:读取和整理过的数据留在会话里,下一次调用直接继续。
  • 直接改:同名修订变量或函数,已有闭包读取更新后的绑定;小改动可以只发送代码差异。
  • 少些调用错误:适配常用模块语法,处理可准确识别的调用遗漏,并为可验证的语法错误提供修正建议。
  • 复用常用能力:把常用函数保存为全局绑定,向模型提供接口与使用提示,在多个会话中使用。

快速开始 · 功能概览 · 连续计算 · 代码编辑与容错 · 全局绑定 · 界面与设置 · 状态与恢复 · 开发

快速开始

需要最新可用的官方 DSH;Node.js 需同时满足插件的 ^22.19.0 || >=24.0.0 与所选 DSH 的运行要求:

dsh plugin --profile <profile> add dsh-ptc-plus

把 <profile> 换成实际 profile 名称,重启 DSH,在会话中选择 PTC 模式。连续计算、调用容错和全局绑定默认开启;升级用 dsh plugin --profile <profile> add dsh-ptc-plus@latest 再重启宿主,其他安装方式、Desktop、本地开发启动器和故障排查见安装指南。

插件声明 DSH 兼容范围 >=0.2.1-0 <0.2.3,由宿主执行版本预检;范围内的接口适配仍通过公共能力检查与打包测试验证。

界面默认显示会话里的 REPL 页签,宽屏顶部还有 PTC Plus 标志。输入框旁的星光按钮打开全局绑定菜单、会话能力工作台和 PTC Plus 设置,侧边栏的 插件 → 已安装 → dsh-ptc-plus → 配置 是同一套设置。

功能概览

默认 PTC 模式的每次调用都从新环境开始:上次的变量已经不在了,想改动依赖前面的结果就只能重发准备代码。PTC Plus 把 run_code 变成会话级的 TypeScript REPL,补上这些差距。

场景 默认 PTC 模式 使用 PTC Plus
接着上一次处理数据 每次从新环境开始,准备代码要重新发送 变量、函数、导入和中间结果留在会话里,下一次调用直接继续
修订已有的名称 没有已建立的绑定可更新,只能重发整段代码 同名修订变量、函数、类和导入绑定,已有闭包读取更新后的值
只改一小段代码 改动一行也要重新发送整段源码 edit_run_code 只提交差异,再执行修改后的完整代码
使用模块语法 函数体里不能直接写静态 import / export 在 cell 中直接写,插件自动适配模块语法
调用漏填摘要 缺少 run_code.description 时校验失败 自动补充显示摘要,其余参数合法的代码继续执行
提供方拒绝畸形工具 JSON 整个 turn 以 provider 错误终止 可修复的调用尾部继续执行,其余转为 schema 拒绝结果,模型继续下一步
误发顶层工具调用 PTC 模式下未声明的顶层调用被拒绝 当前工具定义能唯一确认目标且参数合法时,转为对应的 run_code
定位代码错误 只返回原生错误与堆栈 对应到 cell 源码位置;末尾缺少闭合符且修正可唯一验证时给出编辑建议
访问当前目录 按宿主为当前调用解析的目录执行 相对文件操作和默认子进程按执行时的会话当前目录解析,格内 tools.working_directory({ cd }) 立即作用于本格剩余语句;模块导入保持进入目录,旧模块和导入闭包保留原来源
查找工具和参数 只能翻已经提供给模型的工具说明 用 capabilities.search 一次取得匹配接口,按字节限制响应;也可列目录或单项检查
传递 JSON 不易表达的数据 JSON 无法完整表达 undefined、BigInt、循环引用等 在支持的值范围内保留特殊值和引用关系,供后续计算与恢复
查看当前计算状态 执行结束后没有可继续使用的会话变量可查 REPL 页签展示保留的名称、定义来源、复用次数和值预览
跨会话使用常用函数 自己保存代码,并在后续调用中重新加载 全局绑定保存 TypeScript 源码,并向模型提供接口与使用提示
编写和测试全局绑定 没有全局绑定的专用工作台 让模型生成待审阅草稿,或在工作台试运行未保存的源码
重启后继续工作 没有跨调用的计算状态可供恢复 从会话记录恢复可验证的状态,无法恢复的部分明确提示

连续计算与语言扩展

以下代码由模型通过 run_code 执行,每次调用的代码称为一个 cell。

const amounts: number[] = [12, 8, 5]
function total() {
  return amounts.reduce((sum, value) => sum + value, 0)
}
return total() // 25

下一次直接修订数据,total 不用重新定义:

const amounts = amounts.filter(value => value >= 8)
return total() // 20

默认的 有状态语义(bindingUpdates: 'stateful')为此扩展了 JavaScript/TypeScript 的绑定规则:

  • 同一作用域里的变量、函数、类和导入绑定都能更新,包括 const 声明的;同一个 cell 内也允许同名修订。
  • 已有闭包读到更新后的绑定,提前保存的函数值仍是原来的函数;不同块、函数和循环迭代的作用域照常区分。
  • 声明初始化失败不会永久占住这个名称,失败前已经生效的修改也不会回滚。

cell 支持 TypeScript(含运行时 enum 和 namespace)、顶层 await / return 和静态 import / export;静态导入在整个 cell 正文执行前生效,正文里的赋值随后可以覆盖它。设置中的“绑定更新语义”直接显示当前策略,可选择“允许重声明和覆盖”(stateful)或“启用名称保护”(protected);tools 这类受保护的运行时名称任何时候都不能覆盖。

run_code、编辑后的代码和全局绑定工作台采用同一套语言策略;显式 eval、Function、node:vm 或独立运行时仍受各自的原生边界约束。作用域、模块互操作和历史会话规则见语言参考,完整的语言规则、配置字段与诊断见运行时参考。

代码编辑与调用容错

模型可以在新的 run_code cell 内调用 tools.edit_run_code,修改当前轮最近的可编辑 cell,不必重发整段源码:

const receipt = await tools.edit_run_code({
  edits: [{ old_string: 'value >= 8', new_string: 'value >= 10' }]
})
return receipt

收据里 accepted: true, scheduled: true 表示编辑已经安排:外层 cell 结束后才重新执行整个目标 cell,下一次 cell 读到的是修订后的值(上例是 12)。同一次调用里再读仍是旧状态,已经发生的状态修改不会回滚,写过文件或调用过外部服务的代码重跑时要考虑重复效果。正则编辑的每项必须给出 pattern、flags、replacement、expected_matches,不需要标志时显式传 ""。

情况 PTC Plus 的处理
run_code 漏填外层 description 补充显示摘要,让其余参数合法的代码继续执行
模型误发 PTC 直接工具列表之外的原生工具调用 当前工具定义能唯一确认目标且参数合法时,转为对应的 run_code
参数校验报告缺少 description 区分外层与嵌套工具参数并给出修正提示;提示以完整消息保存,保持会话历史可加载
代码解析失败 标出源码位置;若错误在末尾,且追加一到两个闭合符只有一种通过验证的修正,给出绑定原调用的编辑建议

被接受的编辑若在真正执行前因为没有取得计算基线而未能运行,收据仍然是收据:修订不执行、不产生新变量,外层 cell 自己的结果照常保存,重启恢复时也不会再因为这次编辑而连带丢掉它已保存为 durable 检查点的状态。

设置里的“编辑时替换原单元格”(editRewritesHistory,默认关闭)决定日志重建环境时怎么看待这次编辑。关闭时保持追加语义:被编辑的单元格和修订都留在环境里,修订只是覆盖了它重新声明的名字。打开后被编辑的单元格仍然留在会话日志里,但不再参与环境重建,改由修订代替它;修订不再声明的名字按“被取代”报告(PTC-R007),而不是按“丢失”报告。日志能证明的具体名字会被点名,证明不了时只陈述取代关系。

前两项默认开启,可以在设置里关掉。语法建议不会自动执行,也不代表代码符合任务意图。volatile 状态存不成 durable 检查点,但保存被拒绝后当前变量还能接着用;恢复不撤销外部效果,也不改全局绑定配置。

项目文件与工具能力

模型可以直接用 Node.js 读文件、处理数据、跑程序。相对路径和没指定 cwd 的子进程按执行时的会话当前目录解析:格内调用 tools.working_directory({ cd }) 后,本格剩余操作就用新目录,与宿主工具同一基准。模块导入和 import.meta 仍按进入目录,已加载模块、旧导入闭包和已捕获的 require 保留原来源;process.chdir 在 cell 内不可用。文件、网络等外部输入在当前环境里可以继续用,但不保证跨重启还能恢复。

capabilities.search() 一次查找并返回完整接口,预算按字节计算,过长条目保持完整并给出单项读取指针;原有的 tree()、find()、inspect() 仍可用。

return capabilities.search({ query: 'read file content', budgetBytes: 8192 })

搜索按中英文词法匹配,没匹配到不代表工具不存在。发现工具不会增加权限,实际调用仍由 DSH 校验和调度,更多用法见能力发现。

全局绑定:跨会话复用常用函数

会话变量服务于当前任务,全局绑定把常用 TypeScript 函数保存下来供多个会话加载:保存 textTools 之后,模型就能调用 textTools.clean(text)。你可以手动创建、导入 .ts 文件,也可以让模型帮忙:

/binding new 创建 textTools,去掉文本首尾空白并保留内部空格
/binding edit <id> 增加逐行清理功能

模型提交的草稿浮在输入框上方,你在大窗口里看完整源码、接口和给模型的提示词,再选 保存并启用、保存为停用 或 丢弃草稿;提交草稿本身不会保存或启用绑定。已启用条目的接口和使用提示会提供给新会话中的模型,中途修改在现有会话的下一次允许请求中生效。

工作台可以运行尚未保存的源码,并在连续执行之间保留临时变量;它的计算状态和模型会话分开,文件和网络操作仍会产生真实效果,没有 PTC 会话时也能管理条目。源码格式、接口生成、保存位置和完整流程见全局绑定指南。

界面与设置

REPL 页签列出会话里保留的名称、定义来源、复用次数和值预览,也能打开全局绑定工作台。执行卡片收起后,鼠标停留 400ms 或键盘聚焦会弹出一份源码、结果和功能标记的摘录,点击或按 Enter/空格展开完整内容并复制代码;不需要时可以在设置的“界面显示”里关掉“悬停预览执行内容”。

REPL 页签中的会话状态与全局绑定工作台

设置窗口和侧边栏的插件配置页是同一套配置,分组如下:

功能模块 分组 可以调整的内容
插件开关 PTC Plus 标题总开关 启用或停用 PTC Plus
核心工作区 REPL 语法 允许同名修订或选择名称保护
核心工作区 状态与恢复 重启恢复、官方 REPL 模式归属、上下文提示及其频率、未测量 cell 回收阈值
扩展与容错 工具扩展 全局绑定及其管理入口、官方 Cordis 工具集成
扩展与容错 调用容错 缺失调用摘要、可识别的错位原生工具调用
界面与资源 界面显示 增强工具卡片、REPL 页签和星光快捷入口
界面与资源 资源限制 执行时间、内存、输出、采样、回收与启动上限
实验性 能力与上下文 实验性能力管理(默认关闭)、独立统计、常用集、单项选择、展示预算和提示文本

新会话尚未开始时,调整能力或全局绑定只更新初始配置,不发送或排队发送变更说明;首轮使用调整后的配置。

面向日常计算的功能默认开启,Cordis 开发工具默认关闭,要检查或开发 DSH 插件时再打开,详见集成说明。

“能力与上下文”是实验性设置,默认关闭。打开后可以按类别、来源和单项选择 Skills、Tools 和 MCP 能力的启停与说明方式,初始提示、提示恢复、输出节选和使用统计也在这里;标题旁的总开关一次暂停整组并保留原有选择,改动对新会话或明确刷新后的会话生效。星光菜单里还有一个会话能力工作台,每个能力一行,分列陈述对象、类型、来源、已保存的启用与披露、本会话记录的决定以及这一行的回执,点击列头可按该列排序:会话入口只写本会话的记录,设置页里的同一张表改的是保存的规则,两个入口各写自己的地址;勾选多行可以一次写下同一个决定,每行仍然各写一条记录。工作台的绑定组不经过批量选择,点击某一行的“本会话使用/本会话不使用”立即提交人类输入的同一条 /binding use|skip <id> 命令,改的是本会话对该全局条目的取用。字段、默认值和完整限制见配置参考。

提示文本页签把插件写给模型的固定文本列成清单:每行标注所属通道、存在条件、字节数与只读原因,合计行分别给出已测字节、未测槽和动态槽。可编辑项按槽位计字节,改完保存即写入配置;通道尚未接通时如实显示“通道未接通”,不以 0 字节冒充已测量;协议文本、由配置或运行事实生成的句子,以及你自己写给模型的绑定说明只读展示。

宿主执行 provider 必须使用 TypeScript;热重载换成别的语言时插件会撤出并报出诊断,换回来就重新启用。

当官方运行时按状态所有者保留程序环境时,可以在“状态与恢复”里用官方 REPL 模式优先选择谁接管 PTC 会话:默认关闭,run_code 由 PTC Plus 接管;开启后由官方运行时接管,PTC Plus 让出执行、REPL 状态语义与观察。判断依据是运行时自己的声明(retainsState;更早的运行时通过 repl 源码形式表达同一件事),不是某个执行模式名或版本号,无状态运行时上该设置不生效。切换立即生效,离开插件执行时会释放插件的内存环境;官方内存状态由 DSH 的 Agent/provider 生命周期管理,切换优先设置不保证清空它。官方执行期间的调用不进入插件记录,切回插件后不会当作可恢复状态。

PTC Plus 设置窗口

值传递与状态恢复

在插件 graph IPC 支持的值范围内,程序参数、结果和恢复记录能保留 undefined、BigInt、NaN、无穷大、稀疏数组、循环引用和共享引用关系,支持的值直接返回即可,不必自己写 JSON.stringify(它会丢掉对象里的 undefined,把 NaN 和无穷大变成 null、把 -0 变成 0,还会拒绝 BigInt)。函数、Promise、类实例、Date、Map、Set 不在这个范围内,原生 tools.* 的 JSON 参数与结果契约也不受影响,详见值契约。

会话状态不是永久内存:重启或上下文压缩后,只保留能从会话记录验证、且来源仍在模型上下文中的状态,其余会被丢弃并给出提示,必要时从空环境继续当前计算。会话记录本身缺失或损坏时会明确报错,不会被当作成功恢复的空会话。恢复不会重新派发已记录的原生工具调用,也不会撤销历史外部效果,依据和限制见运行时参考。

宿主显式重置程序环境时,会清除会话变量、命名 checkpoint 和可编辑目标;重启或 fork 后也不会恢复重置前的状态。已完成的外部操作保留,全局绑定配置保持有效。

停止后台子代理不会清空父会话的 REPL 状态;通知触发的后续调用可以继续使用父会话的变量。父会话自身释放后,后续调用仍按上述恢复规则继续计算。

使用边界

  • 执行权限:主要面向 danger-full-access。代码可以直接访问 Node.js 和操作系统,插件不额外提供安全沙箱;原生工具权限、审批、取消和沙箱策略仍归 DSH。
  • 失败与重跑:代码执行失败不代表之前的语句没生效。进程隔离、编辑和恢复都不保证外部操作可以安全重复,超时或输出超限也可能释放计算环境。
  • 错误与开销:语言适配和调用容错不保证所有代码都能跑通,实际调用次数和 token 用量取决于任务和模型,已有对照观察及限制见评测说明。

PTC Plus 是社区插件,与 DeepSeek 或 DSH 无隶属或背书关系。

开发

Windows 可双击 scripts\run-dev-dsh.cmd 启动隔离开发环境;默认复用经 Windows Node.js 实测可监听的端口,缓存端口被占用或拒绝访问时自动更换。手动指定的端口保持原值,详见安装指南。

开发在仓库根目录进行:npm ci 安装依赖,npm run build 重新生成 client.cjs 和 compiler 产物。聚焦测试必须指定用例:

npm run test:backend:focus -- --file test/<owner>.test.js --test-name-pattern="<case>"
npm run test:client:focus -- "<test name pattern>"

交付前按变更分类选检查:只改文档跑 npm run verify:docs,其他改动跑 npm run check,然后走评审流程。架构和数据面见架构与开发,全部文档见文档索引,安装与发布见安装指南和发布流程。

MIT License

—/ 5

No ratings yet

Verified DSH bundle

Commit 0bc953bd75f3

Community comments

No comments yet. Be the first to write one.

DSH HUB

A community index for DSH plugins. Not an official GitHub or DeepSeek AI product.

CommunityResourcesAPIAbout