description: "Worker 线程代码执行,供用户与维护者组合、调优或排查这个已发布的 TypeScript 后端——它在全新的 Node worker 中运行每个程序。"
English | 中文
dsh-code-runtime-worker-thread 为 dsh-code-runtime seam 执行 TypeScript 程序:每个程序都在一个全新的 Node Worker 线程中运行,宿主提供的绑定可作为普通异步函数调用,运行返回 { value, logs, error? }。它是 dsh-tools 中 PTC mode 的已发布后端,因此挂载它正是让模型编写的 TypeScript 执行在组合中生效的方式。运行时「包含」程序,但不隔离它:信任立场与 bash 等价,并带有空环境、堆上限、实测忙碌时间与墙钟预算,以及强制终止。程序每次请求只运行一次,运行之间不保留状态;每个失败——语法错误、预算到期、中止、OOM 退出或输出溢出——都以结果字段返回。
当组合需要执行模型编写的 TypeScript 程序时,连同 code-runtime seam 一起挂载此后端;只要模型调用 run_code,dsh-tools 中的 PTC mode 就会通过 ctx.codeRuntime 驱动它。每个执行上限都是已验证的配置,因此你可以从 cordis.yml 为部署调整运行时规模。
- name: '@deepseek-ai/dsh-code-runtime'
- name: '@deepseek-ai/dsh-code-runtime-worker-thread'
config:
computeMs: 60000 # busy-time budget (measured event-loop active time)
maxWallMs: 600000 # wall-clock ceiling; never pauses for anything
maxOutputBytes: 67108864 # combined serialized outer-output cap (64 MiB)
maxOldGenerationSizeMb: 512 # worker heap cap
| 字段 | 默认值 | 含义 |
|---|---|---|
computeMs |
60,000 |
忙碌时间预算:worker 实测事件循环活跃时间超过该值时,运行以 timeout 失败 |
maxWallMs |
600,000 |
墙钟上限,为忙碌时间无法观测的等待兜底;最大 2_147_483_647 |
maxOutputBytes |
67,108,864 |
序列化日志加完成值或失败消息的硬上限;至少 4 |
maxOldGenerationSizeMb |
512 |
worker 堆上限;溢出会杀死 worker,并以 worker-exit 呈现 |
每个字段在加载时都会验证并提供默认值;没有其他可调项。生成的配置目录是每个受支持字段的穷尽式真源。
成功的运行把程序的无损 JSON 完成值作为 result.value 返回,把程序打印的文本按顺序作为 result.logs 返回。顶层 await/return 可用,程序可以把宿主提供的绑定函数(PTC mode 暴露一个 tools 对象)当作普通异步调用。
程序运行时的权限与 bash 工具相当:它可以访问 Node API,后端也刻意不承诺与宿主的隔离。它提供的是包含——独立 isolate、空环境(没有环境变量凭据,也不继承 loader 标志)、可配置堆上限,以及也能终止同步热循环的强制终止。程序派生的 OS 进程在 terminate() 后仍然存活,需要部署层面的清理。
每个程序结果都以结果 resolve,因此失败的运行是 result.error,而不是 rejection:语法错误或不可擦除的 TypeScript(enum、namespace)在任何 worker 启动前就以 exception 失败;预算到期是 timeout;中止信号是 abort;堆溢出或其他 worker 终止是 worker-exit;不是无损 JSON 的完成值是 invalid-output;超出上限的序列化输出是 output-limit——并保留能容纳的已捕获日志前缀。reject 只表示调用方误用,例如在 dispose(资源释放)后提交运行。
当后端约定不够用时阅读以下内容。它们从 seam 定义进入消费方与配置面。
dsh-tools 如何消费 ctx.codeRuntime 并呈现 run_code。通过 dsh-tools 中的 PTC mode 间接提供,如果外层值能容纳则原样渲染,否则返回明确的 invalid-output/output-limit 失败,且只有外层 run_code 结果在其普通落盘策略下进入模型上下文,绑定通信与中间值始终只存在于执行环境中。
不会直接失效;由上述消费方负责请求前缀变更。
这些限制说明此后端何时不合适,或何时需要特别的运维注意。它们是当前包约束,不是任务积压。
worker.terminate() 只结束线程,比 bash-local 的进程组终止更弱;在容器后端出现前,孤儿进程清理属于部署职责。stripTypeScriptTypes API——如依赖的行为发生变化,amaro 或 sucrase 是已经点名的直接替代品。computeMs 到期最多可能超过一个轮询间隔——系统每 25 ms 采样一次忙碌时间(内部常量,有意不做成配置)。console shim(log/info/warn/error/debug)——有意不提供 Node 的完整 console 接口。output-limit 后返回的有界日志和诊断;在运行时上限之外被拒绝的字节永远不会到达落盘层。