muyuanjin/dsh-ptc-plus 预览 preview

muyuanjin/dsh-ptc-plus

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

Project Overview项目介绍

dsh-ptc-plus is a DSH plugin that adds a session-bound persistent TypeScript REPL to PTC mode. Its core capability: consecutive run_code calls share variables, imports, and the project directory; AST adaptation allows top-level import/export, and edit_run_code applies diffs without resending full source. Use it for multi-turn debugging, long sessions, and cross-call state reuse in TypeScript PTC mode. Caveat: it requires danger-full-access; the worker isolates lifecycle only, not untrusted code.

dsh-ptc-plus 是 DeepSeek Harness 的 PTC 模式插件,提供会话绑定的持久 TypeScript REPL。核心能力:让连续 run_code 共享变量、导入与项目目录,通过 AST 适配 import/export,支持 edit_run_code 局部修复,避免重复发送整段代码。适用于需多轮调试、长会话、跨调用复用状态的 PTC 场景。需 danger-full-access,工作进程仅隔离生命周期,不沙箱化恶意代码。

Or use CLI install (for developers)或使用命令行安装(适合开发者)

CLI Install命令行安装

dsh plugin --profile web add dsh-ptc-plus

muyuanjin/dsh-ptc-plus 加入你的 DSH 配置(web profile)即可启用。

READMEREADME

dsh-ptc-plus 横幅

简体中文 · English

问题 · 场景 · 设置 · 范围 · 安装 · 文档

DeepSeek Harness PTC mode Node.js ^22.19.0 || >=24.0.0 npm version License: MIT

Awesome DSH Plugin


PTC Plus 让 DSH 的 PTC 模式拥有连续的 TypeScript REPL。 上一次 run_code 的变量、导入和计算结果,下一次可以直接复用。默认允许直接同名修订:已有闭包读取更新后的绑定,导入可被局部覆盖再重新导入,失败的声明不会永久占住名称。

[!NOTE] 社区插件,与 DeepSeek 或 DSH 无隶属、无背书。

[!IMPORTANT] 面向 danger-full-access 设计:代码可直接访问 Node.js 与操作系统,插件不另加沙箱。仅在可接受此权限的环境使用。

安装

需要 Node.js ^22.19.0 || >=24.0.0 和支持 TypeScript PTC 模式的官方 DSH。安装到你使用的 profile,然后重启 DSH 并选择 PTC 模式:

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

无需修改 DSH 或使用定制版本。其他安装方式、升级和故障排查见安装指南

默认 PTC 模式的问题

默认 PTC 模式每次执行都从新环境开始,模型需要重新发送准备代码。PTC Plus 保留会话中的计算状态,让后续调用可以接着完成任务。

场景 默认 PTC 模式 使用 PTC Plus
接着上次计算 每次从新环境开始,需重发准备代码 直接复用已有变量、函数、导入和结果
修改一处错误 修正后重新发送整段代码 edit_run_code 只发修改内容,再执行修正后的完整代码
使用模块语法 函数体内不能直接写静态 importexport 在 cell 中直接写,插件自动适配
传递特殊值 JSON 无法完整表达 undefined、BigInt、循环引用等 在支持的值范围内保留特殊值及引用关系,供后续计算与恢复
查找可用工具 从提供给模型的工具接口说明中查找 可在代码中列出、搜索工具,并按需查看参数说明
调用漏填摘要 缺少 run_code.description 时校验失败 自动补充显示摘要,合法代码可继续执行
误发顶层工具调用 PTC 模式下未声明的顶层调用被拒绝 当前工具定义能唯一确认目标且参数合法时,自动转为 run_code
访问项目文件 Node 相对路径依赖宿主进程目录 按会话记录的项目目录解析文件路径、模块和默认子进程目录
定位代码错误 返回原生错误与堆栈 对应到 cell 源码位置;末尾缺少单个闭合符且修正可唯一验证时,给出编辑建议
查看计算状态 执行结束后不保留可继续使用的会话变量 REPL 页签展示保留的变量、定义来源和有界值预览
编写并复用 helper 需自行保存代码,并在后续执行中重新加载 /binding 编写草稿,在输入框上方审阅后保存;启用后跨会话使用,并向模型提供接口说明
手动试运行 helper 没有全局绑定的专用代码工作台 在工作台运行未保存源码,连续测试并查看结果,临时状态与 Agent 会话分开
重启后继续 没有跨调用的计算状态可恢复 从会话记录恢复可验证的状态,无法恢复的部分明确提示

全局绑定需在设置中开启;其余可选行为和恢复范围见下方设置范围

三个最直接的场景

状态跨调用

模型第一次执行:

import { readFile } from 'node:fs/promises'
const manifest = JSON.parse(await readFile('package.json', 'utf8'))
const deps = Object.keys(manifest.dependencies ?? {})
return deps.length

下一次直接接着用:

return deps.map(dep => dep + '@' + manifest.dependencies[dep])

depsmanifest 仍在当前会话里,无需重发准备代码。

修错不重发

模型可以只提交替换内容:

edit_run_code({ edits: [{ old_string: 'deps.length', new_string: 'deps' }] })

编辑会重新执行完整 cell。已经写文件或调用外部服务的代码,仍需确认可以安全重试。语法错误会指出位置;能够明确定位的末尾缺符号错误还会给出修正建议。

被拒的 run_code 与随后的 edit_run_code 修复调用

让 Agent 编写可复用 helper

在设置中开启“全局用户绑定”,然后输入:

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

Agent 可以在会话 REPL 中用内存样例逐步测试和修正,再交出草稿;编写时的测试不得修改外部文件或服务。草稿在输入框上方展开,你可以检查源码和模型提示词,选择“保存为停用”“保存并启用”或“丢弃草稿”。测试和提交本身不会保存全局绑定。

草稿面板可折叠或关闭,输入框星光按钮上的角标可重新打开。保存或丢弃成功后自动关闭,历史请求保留当时的源码和结果。

会话开始前也可以悬停或点击星光按钮,查看并启停全局绑定;这些选择对所有会话生效,但该入口只在当前会话使用 ptc 或兼容 code preset 时注册。菜单同时提供编写新绑定、修改已有绑定和完整管理入口;REPL 可复用绑定列表按后续 cell 源码中的静态引用显示每项复用次数和总复用次数,重定义或重声明不会清零。

已启用绑定的接口会提供给新会话中的模型,也会在现有会话的下一次允许请求中更新。每个绑定可以另写使用提示词,或关闭接口展示;仅改提示词不会重置 helper 的运行状态。在会话中给某个名字赋值或重声明只覆盖该名字,同一条目的其他名字继续可用,会话内的覆盖也不会写回保存的条目。详细操作见全局绑定使用指南

设置

打开 设置 → 插件配置 → PTC Plus。总开关控制插件,其余设置按用途分组:

  • 调用容错:允许缺少摘要的 run_code,修复可以准确识别的顶层工具误调用。
  • REPL 语法bindingUpdates 默认是 stateful,允许跨 cell 更新变量、函数、类和 import alias,也允许同一 cell 内同一逻辑 scope 的重复声明更新同一身份;protected 可选择名称保护。tools 与注入的错误类是请求保留的程序绑定,既不能重声明也不能写入:冲突在 preflight 报 PTC-N001,赋值在执行时以指明该名称的错误失败,不会静默丢弃。旧版五个细分开关仅在迁移旧配置时生效;设置页明确显示尚未迁移的状态,可直接选择任一种统一策略。模块语法默认可用。
  • 模块互操作:PTC 管理的 namespace 支持实时读取和局部覆盖,传给外部函数后仍保留这些语义。外部代码自行原生导入编译模块不承诺同一 namespace 或可写导出语义,详见运行时说明
  • 状态与恢复:控制重启恢复和按需错误提示。
  • 工具扩展:开启全局绑定,或供高级用户使用的官方 Cordis 工具。
  • 界面显示:控制增强工具卡片、REPL 页签和绑定编写快捷入口。
  • 资源限制:调整执行时间、内存和输出上限。

全局绑定与 Cordis 工具默认关闭。设置通常即时生效;活动 worker 存在时不能更改其内存上限。字段、默认值和限制见配置参考

PTC Plus 对 run_codeedit_run_code、插件自有子计算及用户绑定入口使用共同的有状态计算契约。用户主动调用 evalFunctionnode:vm 或其他外部引擎时,动态源码保留对应的原生语法规则与结果;直接 eval 仍须访问调用处的逻辑作用域,间接 evalFunction 使用所属 realm 的逻辑根环境,不能因内部名称改写而读错状态。模块接口与原生互操作边界见 ADR 0025

间接 eval 和四种 Function 构造器使用所属 realm 的 root,作为原生回调传递时也一样,例如 const value=41 后的 ["typeof value"].map(eval) 返回 ["number"]。函数源码观察保留原始 JavaScript 源码及其真实依赖,自包含函数可用 Function 重新编译;函数值本身、用户改写和另外创建的 realm 保持各自语义。

切换计算模式时,旧闭包仍保留原有执行环境和已保存的函数身份,包括异步继续执行中的直接 evalFunction.prototype.toString。各代源码取得稳定的回调接口,全局和原型属性保持原值;兼容模式通过原生 REPL 环境复用已有逻辑绑定,原有原生声明仍优先,其模块导入也通过 PTC 管理的 namespace 读取。

PTC Plus 设置卡片

REPL 页签查看会话绑定、搜索名称和检查定义,也可以管理全局绑定。全局绑定工作台中的代码控制台支持试运行未保存的源码,拥有独立的临时状态;执行的文件或网络操作仍会产生真实效果。

REPL 工作区:会话绑定检查与全局绑定管理

宽屏下,会话头部的绿色 PTC Plus 标识提供快捷绑定清单;窄屏可从 REPL 页签查看:

REPL 可复用绑定

范围

DSH 继续负责工具权限、审批、取消和沙箱策略。PTC Plus 不保证所有状态都能跨重启恢复;外部输入、无法验证的历史或上下文压缩都可能缩小恢复范围。恢复不会重做或撤销历史外部操作。

值预览有大小和类型限制,无法可靠读取的对象会显示“不可读取”。绑定的启用配置也不等于初始化一定成功,具体失败会在执行结果中说明。更多行为见运行时参考

模型调用和 token 用量取决于任务与模型;已有配对观测及其限制见评测说明

文档

全局绑定使用指南 · 安装与升级 · 运行时参考 · 开发与架构 · 验证与测试并发 · 全部文档

使用 MIT License

上一个 Prev dsh-logcat 下一个 Next dsh-graph