简体中文 · English
让模型在同一会话中持续计算、直接修订,减少重复工作和可避免的工具调用错误。
PTC Plus 为 DSH 的 PTC 模式提供有状态的 TypeScript 计算环境。它基于 REPL,让变量、函数、导入和中间结果跨工具调用复用;针对模型连续编写和修改代码的需要,扩展声明更新规则,并提供模块语法适配、调用容错和代码编辑能力。
- 接着算:读取和整理过的数据留在会话里,下一次调用直接继续。
- 直接改:同名修订变量或函数,已有闭包读取更新后的绑定;小改动可以只发送代码差异。
- 少些调用错误:适配常用模块语法,处理可准确识别的调用遗漏,并为可验证的语法错误提供修正建议。
- 复用常用能力:把常用函数保存为全局绑定,向模型提供接口与使用提示,在多个会话中使用。
一次 Command Goat / DeepSeek V4.1 Flash 完整配对实测中,PTC Plus 完成 28/30 项、基线 25/30 项,直接工具错误为 2 对 4;优势主要来自静态模块语法等能力探针。13 类普通任务两组均完成 24/26 项,PTC Plus 的完整家族 token traffic 高 18.04%,尚未证明广泛成本收益。
快速开始 · 功能概览 · 连续计算 · 代码编辑与容错 · 全局绑定 · 界面与设置 · 状态与恢复
PTC 模式只将 run_code 声明为顶层工具;代码编辑经 cell 内的 tools.edit_run_code 调用,并由 DSH 原生工具流水线执行。见编辑契约。
快速开始
需要 Node.js ^22.19.0 || >=24.0.0 和最新可用的官方 DSH。将插件安装到实际使用的 profile:
dsh plugin --profile add dsh-ptc-plus
将 `` 替换为实际 profile 名称。安装后重启 DSH,在会话中选择 PTC 模式。连续计算、调用容错和全局绑定默认开启;已有配置中显式关闭的选项会保持关闭。
会话历史通过 DSH 的公开 reader 读取,提示事实由 Host 增量投影维护;读取面缺失或旧格式事件数组损坏时会明确报错,不把不可用历史当作成功恢复的空会话。
在默认界面设置下,会话中会出现 REPL 页签;宽屏顶部还会显示绿色 PTC Plus 标志。输入框旁的星光按钮可打开全局绑定菜单和 PTC Plus 设置;菜单与“修改绑定”列表均用绿色标识启用、灰色标识停用。也可从侧边栏 插件 → 已安装 → dsh-ptc-plus → 配置 检查插件总开关和全部设置。
升级已安装插件时,运行 dsh plugin --profile add dsh-ptc-plus@latest,然后重启该宿主;本地 tarball 与固定 Git revision 同样使用 add 更新 profile 依赖。
安装完成后正常向模型描述任务即可,下面的 run_code 和程序内 tools.edit_run_code 示例说明模型如何使用这些能力。其他安装方式、Desktop、本地开发启动器、升级和故障排查见安装指南。
Windows 源码测试:双击 scripts\run-upstream-dsh.cmd,拉取官方 DSH 默认分支并复用隔离的构建缓存,加载当前插件工作区。首次运行需要安装依赖和构建;详见上游源码测试。
Windows 开发脚本会检查本地 esbuild 是否可执行;依赖缺失或由 WSL 安装时,使用 Git 忽略的 win_node_modules 隔离安装和打包,不替换工作区的 node_modules。
星光菜单可打开会话能力工作台:按类别、来源和状态检索 Skills、普通 Tools、MCP 服务及其能力,在详情中分别查看当前全局保存、会话冻结的继承策略、临时覆盖与当前生效的选择。全局保存但未刷新时,取消临时覆盖仍继承该会话的冻结来源;界面不把自动策略当作已确定的最终分配。编辑同一份待应用更改后,在右下角选择“放弃更改”“应用到会话”或“保存并应用”;后者保存为全局默认并同步当前会话。撤销临时覆盖只适用于本会话。多个选择会逐项通过正式命令提交,部分失败时保留未确认的草稿供重试。普通刷新保留临时选择;全局维度操作只清除同一项的对应临时维度。工作台不覆盖输入框中未发送的草稿,也不启动模型任务;刷新与状态回执只显示一行结果文案,例如“会话能力已更新。”;不重复显示命令、完成状态或原始结果入口。能力查询仍可展开查看完整列表和原始结果。复制命名配置不带临时选择。关闭插件后在获准步骤撤销旧声明;完整卸载经公开会话持久化交还 provider,写入失败明确报告。详见生命周期契约。
功能概览
默认 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 源码位置;末尾缺少闭合符且修正可唯一验证时给出编辑建议 |
| 访问当前目录 | 按宿主为当前调用解析的目录执行 | 新 cell 的文件操作、导入和默认子进程使用当前执行目录;旧模块和导入闭包保留原来源 |
| 查找工具和参数 | 只能翻已经提供给模型的工具说明 | 用 capabilities.search 一次取得匹配接口,按字节限制响应;也可列目录或单项检查 |
| 传递 JSON 不易表达的数据 | JSON 无法完整表达 undefined、BigInt、循环引用等 |
在支持的值范围内保留特殊值和引用关系,供后续计算与恢复 |
| 查看当前计算状态 | 执行结束后没有可继续使用的会话变量可查 | REPL 页签展示保留的名称、定义来源、复用次数和有界值预览 |
| 跨会话使用常用函数 | 自己保存代码,并在后续调用中重新加载 | 全局绑定保存 TypeScript 源码,并向模型提供接口与使用提示 |
| 编写和测试全局绑定 | 没有全局绑定的专用工作台 | 让模型生成待审阅草稿,或在工作台试运行未保存的源码 |
| 重启后继续工作 | 没有跨调用的计算状态可供恢复 | 从会话记录恢复可验证的状态,无法恢复的部分明确提示 |
以下各节介绍具体用法和边界;完整语言规则、配置字段与诊断见运行时参考。
能力查询可在 run_code 内使用 await capabilities.search({ query: "read file content", budgetBytes: 8192 }),一次读取预算内的完整接口,过长条目提供单项读取指针。设置中可直接搜索并勾选常用能力。可用性与说明方式分开选择:只控制 Tools、Skills 或 MCP 的启停时,其余能力沿用宿主说明;也可选择完整、按需或按依据分配。默认、类别、MCP 来源、单项按维度覆盖;停用不会丢失说明偏好。常用集、统计依据和预算分别选用,统计采集与分配独立;提示恢复与输出节选也各自选用。新配置默认沿用说明,恢复与预览关闭,旧配置迁移保留原行为;MCP 来源分别选择可用性与说明方式,均可恢复上层规则,子工具保留独立偏好,无需编写 JSON;开启“能力配置”后应用已保存的启停与说明规则;其他功能独立选用。统计使用开关、样本数与百分比输入。独立统计按会话家族计算实际使用覆盖率,损坏或关闭时保留手动选择。新会话在首个请求前组装能力说明,并将其放在任务文本之前;精简的类别用途导航与手动固定契约排在统计选择说明之前,以提高跨会话前缀复用机会,实际缓存命中由 provider 决定。已有会话冻结启用与披露选择;宿主实际修订或撤下能力时,当前契约以追加说明更新,不等待用户刷新。用户专用 Skill 只说明其 /name 入口,不推荐模型使用 tools.skill 加载。保存设置后执行 /capabilities refresh 才同步运行环境与模型通知。星光菜单的“刷新会话能力”与绑定编写一样,将 /capabilities refresh 填入空输入框,由你发送;已有草稿不会被覆盖。能力设置中明确选定目标会话后的刷新按钮直接通过宿主正式命令执行,不启动模型任务。能力页直接搜索和启停,名称下方显示精确 ID;上下文单项编辑和筛选按需打开,类型与来源保持兼容;能力、类型、来源、是否启用和上下文表头支持升序、降序、默认三态排序,会话能力列表使用同样的列与排序。批量设置在小弹窗中对当前筛选的可用能力执行一次单项变更,确认才保存,取消不写入;持久继承规则另有入口。提示侧栏显示具体配置,分配依据、额度、当前能力分配和统计设置直接展示。使用统计显示工作区和全局的合格会话家族样本数、使用数及覆盖率;预算预览使用同一分配规则重新计算当前能力。配置页左侧选择已保存配置,右侧查看摘要并应用;保存当前设置、导入和更多操作位于列表下方。已有会话观察与刷新有独立入口,也可从会话源设置复制成具名配置。切换配置不会自动刷新已有会话。全部开关统一使用 DSH 官方样式。选用插件预览时,大结果与日志通过宿主 spill 服务保留完整展示,预览不改变程序值;未选用时沿用宿主展示。实现和验证范围见上下文优化计划;固定 7 项普通任务加 1 项 canary 的付费配对已运行并完成盲评;插件侧效率评分为 15/24,基线为 10/24,普通任务 token traffic 为 122,933 对 325,862。原生基线有 3 项超出预设调用或 token 上限,机器验收未通过;这是单 replicate 观察,不能保证普遍质量或成本收益。
连续计算与语言扩展
以下代码由模型通过 run_code 执行。每次调用的代码称为一个 cell。
第一次,建立数据和计算函数:
const amounts: number[] = [12, 8, 5]
function total() {
return amounts.reduce((sum, value) => sum + value, 0)
}
return total() // 25
下一次,直接修订数据并复用函数:
const amounts = amounts.filter(value => value >= 8)
return total() // 20
无需重新定义 total,也无需为了避开重复声明而另起变量名。total() 读取的是更新后的 amounts。
默认的 有状态语义(bindingUpdates: 'stateful')为连续修订扩展了 JavaScript/TypeScript 的绑定规则:
- 同一作用域内的变量、函数、类和导入绑定可以更新,包括用
const声明的绑定;同一 cell 内也允许同名修订。 - 已有闭包读取更新后的绑定;提前保存的函数值仍是原来的函数。
- 不同块、函数和循环迭代的作用域仍然区分。
- 声明初始化失败时,尚未成功建立的名称不会永久阻止后续声明;失败前已经发生的其他修改不会因此回滚。
cell 支持 TypeScript(包括运行时 enum 和 namespace)、顶层 await / return 和静态 import / export。需要检测名称覆盖时,可在设置中关闭“允许重声明和覆盖”,使用 protected 策略。tools 等受保护的运行时名称仍不能覆盖。
静态导入与局部覆盖的时机
静态导入在 整个 cell 的正文执行前 生效,正文中的赋值或普通声明随后可以覆盖它。要恢复跟随模块导出,可在后续 cell 中再次静态导入。同一 cell 中,即使把 import 写在普通声明后面,也不会在那个文本位置重新覆盖局部值;若要在某一步取回当前导出值,可以显式赋值:
join = (await import('node:path')).join
这会取得当时的函数值;静态导入则持续跟随模块来源。更多规则见运行时参考。
run_code、编辑后的代码和全局绑定工作台采用相同的语言策略;工作台的临时状态与模型会话分开。显式使用 eval、Function、node:vm 或独立运行时仍受对应原生边界约束。详细的作用域、模块互操作与历史会话规则见语言参考。
代码编辑与调用容错
小改动只发送差异
模型可以在新的 run_code cell 内调用 tools.edit_run_code 修改当前轮最近的可编辑 cell,无需重新发送整段源码。假设前面的第二个 cell 刚执行完,且仍在同一轮运行中,可以把筛选条件改为 value >= 10:
const receipt = await tools.edit_run_code({
edits: [{ old_string: 'value >= 8', new_string: 'value >= 10' }]
})
return receipt
收据中的 accepted: true, scheduled: true 表示已安排编辑;外层 cell 结束后才重新执行整个目标 cell,派生结果会随这次 run_code 结果报告,下一次 cell 可读取修订后的值(以上例子为 12)。调用编辑后同一 cell 中的读取仍是旧状态。已发生的状态修改不会回滚;如果代码涉及写文件或外部服务,重跑仍需考虑重复效果。编辑既可用于修复失败的代码,也可用于微调已成功的计算。
正则编辑的每项必须包含 pattern、flags、replacement、expected_matches。flags 必须是字符串;不需要标志时显式传 "":
await tools.edit_run_code({
regex_edits: [{ pattern: "value >= 8", flags: "", replacement: "value >= 10", expected_matches: 1 }]
})
历史结果被压缩为新的显示条目,不算再次执行,也不会把旧 cell 变成新的编辑目标;较新的失败 cell 仍可继续修正。
处理可以确定的调用问题
| 情况 | PTC Plus 的处理 |
|---|---|
run_code 漏填外层 description |
补充显示摘要,让其余参数合法的代码继续执行 |
| 模型误发 PTC 直接工具列表之外的原生工具调用 | 当前工具定义能唯一确认目标且参数合法时,转为对应的 run_code |
参数校验报告缺少 description |
区分外层与嵌套工具参数并给出修正提示;提示以完整消息保存,保持会话历史可加载 |
| 代码解析失败 | 标出源码位置;若错误在末尾,且追加一到两个闭合符只有一种通过验证的修正,给出绑定原调用的编辑建议 |
前两项默认开启,可在设置中关闭。语法建议不会自动执行,也不代表插件能判断代码是否符合任务意图。
volatile 状态不能保存为 durable 检查点,但保存被拒绝后仍可继续使用当前变量。显式恢复会丢弃目标之后的状态;没有 durable head 时无名称恢复会清空 REPL。恢复不撤销外部效果,也不改变全局绑定配置。
项目文件与工具能力
从当前工作目录开始
模型可以直接使用 Node.js 读取文件、处理数据和运行程序。新 cell 的相对文件操作、模块导入和未指定 cwd 的子进程使用 DSH 当前工作目录;切换目录保留已有变量和模块,旧导入闭包与已捕获的 require 保留自己的解析基准。恢复逐 cell 使用记录的目录,显式路径与目录选项仍然生效。
普通模块计算可以直接在 cell 内完成并供后续 cell 复用;需要独立进程、特定执行环境或外部引擎验证时,再使用相应进程或宿主工具。
例如,在包含 package.json 的项目中,第一次调用读取依赖:
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])
这里没有重新读文件,结果来自会话中已有的 manifest。直接文件、网络等外部输入可以在当前环境继续使用,但不保证能跨重启恢复。
按需发现工具
模型仍可通过 tools.* 使用 DSH 当前提供的原生工具。capabilities.search() 一次查找并返回完整索引条目:
return capabilities.search({ query: 'read file content', budgetBytes: 8192 })
搜索使用中英文词法匹配,没有匹配不代表工具一定不存在。字节预算包含结果 JSON 包装,过长接口保持完整并返回单项读取指针。原有 tree()、find()、inspect() 仍可使用;其中 inspect 的 budget 是条目数。发现工具不会增加权限,实际调用仍由 DSH 校验和调度。更多用法见能力发现。
全局绑定:跨会话复用常用函数
会话变量服务于当前任务;全局绑定把常用 TypeScript 函数保存下来,供多个会话加载。例如,保存名为 textTools 的绑定后,模型可以使用 textTools.clean(text)。
全局绑定和星光入口默认开启。你可以手动创建、导入 .ts 文件,也可以让模型帮忙编写和修改:
/binding new 创建 textTools,去掉文本首尾空白并保留内部空格
/binding edit 增加逐行清理功能
`` 是工作台中的条目标识,也可以从星光菜单选择要修改的绑定。
编写、审阅与启用
模型可先用内存样例测试,再提交草稿。草稿悬浮在输入框上方,展开或折叠不挤动对话;从星光菜单或原请求打开草稿时,直接进入大窗口。点击 放大查看绑定草稿 可在大窗口内审阅完整源码,正文独立滚动,底部保留保存与丢弃按钮;标题栏的放大、缩小与关闭操作分开显示,点击 缩小显示绑定草稿 返回预览;由你检查源码、接口和给模型的提示词,并选择 保存并启用、保存为停用 或 丢弃草稿。提交草稿本身不会保存或启用绑定;关闭面板后,可从星光按钮的草稿角标重新打开。
星光菜单可在首条消息发出前查看、启停条目,选择对所有会话生效。已启用条目优先展示,启停状态使用小胶囊,停用组是显示数量的浅色折叠行;底部编写与工具操作统一为带图标的双列按钮,文字居中,使用柔和底色且不显示描边。只有绑定列表滚动,底部操作始终可见。已启用条目的接口和使用提示会提供给新会话中的模型;中途修改后,在现有会话的下一次允许请求中更新。
接口提示与独立试运行
每个条目可以从源码生成公开接口,并附加用途、输入约束或使用示例。仅修改提示词不会重置已加载函数的运行状态。会话中的同名赋值或重声明只覆盖对应名称,不会改写保存的全局条目。
工作台支持运行尚未保存的源码,并在连续执行间保留临时变量。它与模型会话的计算状态分开,适合手动检查函数;文件和网络操作仍会产生真实效果。没有当前 PTC 会话也可管理条目。源码格式、接口生成、保存位置和完整流程见全局绑定指南。
界面与设置
REPL 页签可搜索当前保留的名称,查看定义来源、复用次数和有界值预览,也可打开全局绑定工作台。预览有类型和大小限制,未采集、不完整或不可读取时会明确标注,不会为展示调用用户 getter。宽屏顶部的绿色 PTC Plus 标志提供快捷绑定清单,窄屏可使用 REPL 页签。
增强执行卡片收起时,鼠标停留 400ms 后可快速预览已记录的源码、结果和功能标记,键盘聚焦也可打开。预览优先显示在鼠标右侧,空间不足时显示在执行行上下方;可在设置的“界面显示”中关闭“悬停预览执行内容”(默认开启)。预览只显示有限摘录,标明“部分内容”,不接管鼠标或滚轮;滚动时立即隐藏,滚动经过执行行不会弹出。点击或按 Enter/空格展开完整内容并复制代码,触摸设备使用点击。若整个过程组已收起,需要先展开组。
工作台控件提供可见的键盘焦点和禁用反馈,REPL 名称在明暗主题下保持可读;关键控件的浏览器回归检查及覆盖边界见视觉契约。
输入框旁的星光菜单将绑定编写、条目管理、会话能力刷新和 PTC Plus 设置 分组提供。星光入口打开大尺寸设置窗口,宽屏使用左侧分区导航与右侧设置卡片,小屏自动变为单列。总开关与导航顶部的 PTC Plus 标题合成一行,正文按核心工作区、扩展与容错、界面与资源、实验性分组,REPL 语法最先呈现,实验性能力管理在后并明确标记。设置弹窗与侧边栏插件配置页使用同一套配置;配置页和弹窗的正文独立滚动,点击分区导航不会带动导航区或外层页面;静态分组标题与带图标、箭头和选中标记的导航项有明确区分:
| 功能模块 | 分组 | 可以调整的内容 |
|---|---|---|
| 插件开关 | PTC Plus 标题总开关 | 启用或停用 PTC Plus |
| 核心工作区 | REPL 语法 | 允许同名修订或选择名称保护 |
| 核心工作区 | 状态与恢复 | 重启恢复、上下文提示及其频率 |
| 扩展与容错 | 工具扩展 | 全局绑定及其管理入口、官方 Cordis 工具集成 |
| 扩展与容错 | 调用容错 | 缺失调用摘要、可识别的错位原生工具调用 |
| 界面与资源 | 界面显示 | 增强工具卡片、REPL 页签和星光快捷入口 |
| 界面与资源 | 资源限制 | 执行时间、内存和输出预算 |
| 实验性 | 能力与上下文 | 实验性能力管理(默认关闭)、独立统计、常用集、单项选择和展示预算 |
“能力与上下文”标题旁的总开关可一次暂停能力配置(含初始提示)、提示恢复、输出节选和使用统计,保留原配置,重新开启恢复原选择。暂停时已开启子项显示“已暂停”,未选用子项显示“未选用”。配置库保存这一整体选择;新会话或明确刷新后生效,已有会话不会自动改变。总开关默认开启,各子功能仍按各自设置选用。
面向日常计算的功能默认开启。Cordis 开发工具默认关闭,适用于检查或开发 DSH 插件,按需开启即可;详见集成说明。已有配置中显式关闭的选项会保持关闭,条目是否启用也由各自的保存状态决定。
页签上方持续显示“新会话设置”,按能力配置、初始提示、提示恢复、输出节选、使用统计排列,并按能力、提示、统计分组。初始提示管理新会话的能力说明、常用集分配和预算,随能力配置应用;后三项可独立选用。摘要与编辑入口同名、状态一致,点击直接打开对应设置。下方“对照已有会话”须明确选择目标,显示上次读取的冻结方案、通知是否已记录、与保存配置的差异及临时覆盖;保存不代表已有会话生效,刷新接受回执也不证明模型已收到通知。读取失败保留旧观察并标明未确认,重新读取不执行刷新。分配依据只用于最终选择“按依据分配”的可用能力;采集关闭仍可消费有效历史统计,显式完整说明不受预算降级。
“能力与上下文”分为能力配置、提示设置、使用统计和配置方案四个页签。能力清单区分 Tools、Skills 和 MCP 来源,名称下方显示精确 ID,并有独立来源列;行内直接启停,上下文编辑与组合筛选按需展开。提示设置采用“初始提示”“提示恢复”“输出节选”固定导航与单项详情两栏,分配依据、额度和当前能力分配直接展示。导航与摘要使用同一保存状态:已选用、未选用、已暂停或沿用 DSH。统计分别显示使用家族数、可用家族数和覆盖率,采集开关与留存数据独立,采集参数在“统计设置”中直接展示。配置采用列表与详情两栏,唯一保存当前设置、导入和更多操作放在左列表下方。能力筛选可组合来源、已保存可用性、已保存说明方式、常用项和库存状态;能力、类型、来源、是否启用和上下文表头支持升序、降序、默认三态排序。批量设置在独立小弹窗中对当前筛选的可用能力执行一次单项变更,持久继承规则有独立入口。类别规则提供 Tools、Skills、MCP 资源与模板三类;资源与模板按服务器共同管理。默认、类别、MCP 来源和单项分别设置可用性与说明方式;来源和单项均可撤销为沿用上层规则。其下每个 tool 保留独立策略;关闭 server 优先于子项,重开后恢复原子项设置。常用星标与手动策略独立,详情分别展示保存配置和所选会话的冻结方案;Skill 完整说明不预加载正文。当前不可用的配置可保留或移除,清单读取失败保留最后观察结果。基础执行环境不列为受管设置;会话观察不依赖子功能选用,全部关闭时仍可查看已有冻结来源并保留手动配置。能力配置对每个会话冻结,保存后用于新会话,已有会话通过 /capabilities refresh 刷新。其他设置通常即时生效;活动 worker 存在或已提交的 cell 正在准备执行时不能修改其内存上限。字段、默认值和完整限制见配置参考。
宿主执行 provider 必须使用 TypeScript。热重载改为其他语言时,PTC Plus 撤出当前接管并报告诊断;恢复 TypeScript 后重新启用,插件开关保持原选择。
值传递与状态恢复
保留超出普通 JSON 的值
在插件 graph IPC 的支持域内,程序参数、结果和恢复记录可以保留 undefined、BigInt、NaN、无穷大、稀疏数组、循环引用和共享引用关系。普通 JSON 结果仍以结构化值返回;特殊值会以可读文本展示给模型,其程序内值与展示文本分别处理。直接返回支持的值无需 JSON.stringify。插件自有隔离 code.run 向父程序返回真实值图,不合并父子变量;native 委托遵守其原契约。
这不扩展原生 tools.* 的 JSON 参数或结果契约:传入 BigInt 仍可能被 DSH 拒绝;显式 JSON.stringify 和 BigInt/Number 混合算术仍遵守原生 JavaScript 规则。Date、Map 等可在 live binding 内计算,但不在当前传输支持域;输出时显式选取所需数据。传输错误会区分不支持的值与预算超限。详见 值契约。
这不等于任意 JavaScript 对象都可传递或持久化:函数、Promise、类实例、Date、Map、Set 等不属于值传递的支持域。在 REPL 中保留函数供后续调用,与把函数作为工具结果返回,是不同的能力。需要继续计算时应复用会话变量;完整支持域见值传递说明。
检查特殊值时可以直接返回所需字段或类型观察。自行 JSON.stringify 会省略对象中的 undefined、把 NaN 和无穷大变成 null、把 -0 变成 0,并拒绝 BigInt;只有需要 JSON 文本时才选择该格式。
恢复有依据的计算状态
会话级状态不等于永久内存。重启、执行环境重置或上下文压缩后,只保留能从会话记录验证、且其来源仍在模型上下文中的计算状态。直接读取外部文件或网络、历史记录损坏、来源被压缩等情况,都可能缩小可保留的范围。
无法证明的状态会被丢弃并给出提示,必要时从空环境继续当前计算。恢复不会重新派发已记录的原生工具调用,也不会撤销历史外部效果。恢复依据和限制见运行时参考。
子代理按自己的会话历史连续复用计算状态。恢复范围缩小时只显示一次完整提示;失败时,恢复说明与错误一起显示,控制台输出保留代码实际打印的内容。
使用边界
- 执行权限:主要面向
danger-full-access。代码可直接访问 Node.js 与操作系统;插件不额外提供安全沙箱。DSH 继续负责原生工具权限、审批、取消和沙箱策略。 - 失败与重跑:代码执行失败不代表此前语句没有生效。进程隔离、编辑和恢复都不保证外部操作可以安全重复;超时或输出超限等情况也可能释放计算环境。
- 错误与开销:语言适配和调用容错不保证所有代码成功。实际调用次数与 token 用量取决于任务和模型;已有对照观察及限制见评测说明。
PTC Plus 是社区插件,与 DeepSeek 或 DSH 无隶属或背书关系。