@x1a0f3n9/dsh-ptc-runtime 0.1.7-rc.4 → 0.2.1-rc.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.i18n.yaml CHANGED
@@ -5,66 +5,66 @@
5
5
  /:
6
6
  en: 8904d5f5d5251a83
7
7
  zh: 69b48f289b0416f0
8
- /x1a0f3n9-dsh-ptc-runtime:
9
- en: 44022b553091816b
10
- zh: 43a6935d93af05ff
11
- /x1a0f3n9-dsh-ptc-runtime/summary:
12
- en: d5a1f0be39931018
13
- zh: 3584bd577f654a38
14
- /x1a0f3n9-dsh-ptc-runtime/table-of-contents:
8
+ /deepseek-ai-dsh-ptc-runtime:
9
+ en: cced8c691b58657a
10
+ zh: 3da9cdf76a1a07ff
11
+ /deepseek-ai-dsh-ptc-runtime/summary:
12
+ en: b04917e62d63c7ff
13
+ zh: 12cb9f38cbf8ee3f
14
+ /deepseek-ai-dsh-ptc-runtime/table-of-contents:
15
15
  en: d152484eb41ac6b4
16
16
  zh: 09388d293f9be9cb
17
- /x1a0f3n9-dsh-ptc-runtime/use-this-package:
17
+ /deepseek-ai-dsh-ptc-runtime/use-this-package:
18
18
  en: 7e5ebf7420c13af4
19
19
  zh: 9ad1e056e794ca4a
20
- /x1a0f3n9-dsh-ptc-runtime/use-this-package/run-a-program:
21
- en: 6f97019cebc2f417
22
- zh: c56f18a690dbe814
23
- /x1a0f3n9-dsh-ptc-runtime/use-this-package/choose-a-backend:
24
- en: f2dd49b11ef5e888
25
- zh: f2be82b0cae2d8e4
26
- /x1a0f3n9-dsh-ptc-runtime/use-this-package/name-your-bindings-portably:
20
+ /deepseek-ai-dsh-ptc-runtime/use-this-package/run-a-program:
21
+ en: c856760ebc15d59e
22
+ zh: dc093083b29794e0
23
+ /deepseek-ai-dsh-ptc-runtime/use-this-package/choose-a-backend:
24
+ en: fc0d515f0c3664f3
25
+ zh: 0a1b646b5cf92232
26
+ /deepseek-ai-dsh-ptc-runtime/use-this-package/name-your-bindings-portably:
27
27
  en: 4e46c1672701b8df
28
28
  zh: 0353c5855c9ff6be
29
- /x1a0f3n9-dsh-ptc-runtime/use-this-package/what-can-go-wrong:
29
+ /deepseek-ai-dsh-ptc-runtime/use-this-package/what-can-go-wrong:
30
30
  en: 44f9fdf2c8e2cacc
31
31
  zh: 99dd555a49075f88
32
- /x1a0f3n9-dsh-ptc-runtime/understand-the-implementation:
32
+ /deepseek-ai-dsh-ptc-runtime/understand-the-implementation:
33
33
  en: 686d570f5e669fa4
34
34
  zh: 2075cf27c30f251a
35
- /x1a0f3n9-dsh-ptc-runtime/understand-the-implementation/design-concept:
35
+ /deepseek-ai-dsh-ptc-runtime/understand-the-implementation/design-concept:
36
36
  en: 9f0055e22a1595a5
37
37
  zh: 0aa3ceb9dd145128
38
- /x1a0f3n9-dsh-ptc-runtime/understand-the-implementation/service-api:
38
+ /deepseek-ai-dsh-ptc-runtime/understand-the-implementation/service-api:
39
39
  en: 1d7a792c9a78a517
40
40
  zh: b49bddf18c259edc
41
- /x1a0f3n9-dsh-ptc-runtime/understand-the-implementation/vocabulary:
41
+ /deepseek-ai-dsh-ptc-runtime/understand-the-implementation/vocabulary:
42
42
  en: 855cb8366e3bd293
43
43
  zh: da6d7a0ce51f97fc
44
- /x1a0f3n9-dsh-ptc-runtime/understand-the-implementation/portable-identifiers:
44
+ /deepseek-ai-dsh-ptc-runtime/understand-the-implementation/portable-identifiers:
45
45
  en: 01c82c6e73180979
46
46
  zh: e29b066f9f82c8b4
47
- /x1a0f3n9-dsh-ptc-runtime/understand-the-implementation/source-map:
48
- en: 73b7deab23f3b00d
49
- zh: 780ddf5ff0dd5f65
50
- /x1a0f3n9-dsh-ptc-runtime/further-exploration:
47
+ /deepseek-ai-dsh-ptc-runtime/understand-the-implementation/source-map:
48
+ en: 85b65ceb9be0c49f
49
+ zh: 52df7f06d4e49d6e
50
+ /deepseek-ai-dsh-ptc-runtime/further-exploration:
51
51
  en: a77e68bc4f5e66d9
52
52
  zh: 101a57bcad581668
53
- /x1a0f3n9-dsh-ptc-runtime/model-experience:
53
+ /deepseek-ai-dsh-ptc-runtime/model-experience:
54
54
  en: 5506904c50c1ee20
55
55
  zh: f0ffa9f4f08b20cf
56
- /x1a0f3n9-dsh-ptc-runtime/model-experience/kv-cache-effect:
56
+ /deepseek-ai-dsh-ptc-runtime/model-experience/kv-cache-effect:
57
57
  en: 40294c1c31b74824
58
58
  zh: 081cebc2e2650f03
59
- /x1a0f3n9-dsh-ptc-runtime/known-limitations-and-deferred-work:
60
- en: 7f30f78c5d427667
61
- zh: 99d21160016deea2
62
- /x1a0f3n9-dsh-ptc-runtime/known-limitations-and-deferred-work/dev-note:
59
+ /deepseek-ai-dsh-ptc-runtime/known-limitations-and-deferred-work:
60
+ en: e20364d073f78c60
61
+ zh: 6cac5c46ff91b3ca
62
+ /deepseek-ai-dsh-ptc-runtime/known-limitations-and-deferred-work/dev-note:
63
63
  en: d56846da29ad869c
64
64
  zh: 0397151a7e29b8ba
65
- /x1a0f3n9-dsh-ptc-runtime/known-limitations-and-deferred-work/dev-note/future-persistent-kernel-backend:
66
- en: cfefaae6ed9705d5
67
- zh: 3cca5b1bd92445b0
68
- /x1a0f3n9-dsh-ptc-runtime/known-limitations-and-deferred-work/dev-note/future-container-backend:
65
+ /deepseek-ai-dsh-ptc-runtime/known-limitations-and-deferred-work/dev-note/retained-state:
66
+ en: cd86d95f288b86dc
67
+ zh: 2157b7a97eb62667
68
+ /deepseek-ai-dsh-ptc-runtime/known-limitations-and-deferred-work/dev-note/future-container-backend:
69
69
  en: 2b94202842f0556c
70
70
  zh: 5aa0311fa621a018
package/README.md CHANGED
@@ -9,7 +9,7 @@ English | [中文](README.zh.md)
9
9
 
10
10
  ## Summary
11
11
 
12
- Use `dsh-ptc-runtime` to run one model-written program against host-provided asynchronous functions through a configured backend. A request returns a lossless-JSON value, ordered per-channel logs, or a structured error; program failures resolve in the result, while rejected promises indicate caller misuse. Each run is isolated from prior runs, and the runtime has no knowledge of tools or sessions. Choose an execution backend separately; its language and isolation descriptors identify the required source language and execution substrate but do not themselves promise a security boundary.
12
+ Use `dsh-ptc-runtime` to execute model programs against host-provided asynchronous functions. Requests return lossless JSON, captured logs, or structured failures; rejected promises indicate caller misuse. Providers isolate distinct state owners and declare whether source is an async function body or REPL statements. A provider may retain memory for an explicit owner until release; it never restores that memory from a Session. Language and isolation descriptors identify syntax and execution substrate, not security guarantees.
13
13
 
14
14
  ## Table of Contents
15
15
 
@@ -29,7 +29,7 @@ Choose this package when you compose a deployment that executes model-written pr
29
29
 
30
30
  ### Run a program
31
31
 
32
- Give the runtime a program and binding namespaces, then call `resolve(request)` followed by `run(spec)`. Resolution validates optional cwd, timeout and sandbox policy against the provider's capabilities and fills deployment defaults. The program runs as an async function body, so top-level `await` and `return` work; a lossless-JSON completion becomes `result.value`, captured text becomes `result.logs`, and program failures become `result.error`. Each output channel preserves its own order, while cross-channel interleaving is backend-dependent.
32
+ Call `resolve(request)` followed by `run(spec)` with a program and binding namespaces. Resolution validates cwd, timeout and sandbox choices and applies provider defaults. `programFormat` selects an async function body with top-level `await` and `return`, or REPL statements with top-level declarations, `await`, and a final expression. Lossless-JSON completion becomes `result.value`, text becomes `result.logs`, and failures become `result.error`.
33
33
 
34
34
  ```text
35
35
  const spec = ctx.ptcRuntime.resolve({
@@ -44,6 +44,8 @@ const result = await ctx.ptcRuntime.run(spec)
44
44
 
45
45
  Backends expose `language` and `isolation` as diagnostic descriptors; neither grants authority or proves confinement. [`dsh-ptc-runtime-node`](../ptc-runtime-node/README.md) executes erasable TypeScript in a fresh managed Node process under the resolved sandbox policy. The private [`dsh-experimental-ptc-runtime-python`](../../experimental/ptc-runtime-python/README.md) provider executes Python in a fresh CPython subprocess without file confinement. `sandboxMode` advertises a provider's deployment file-policy mode, or is absent when that capability is unsupported.
46
46
 
47
+ For the optional [Node in-memory mode](../ptc-runtime-node/README.md#persistent-repl), pass the same `stateOwner` object across runs and await `release(owner)` at the owner's end. Different object identities never share an environment; omitted owners use a temporary environment. Stateless providers ignore ownership. Calls for one retained owner must not overlap.
48
+
47
49
  ### Name your bindings portably
48
50
 
49
51
  Binding-global and error-class names are language-portable: they must match `[A-Za-z_][A-Za-z0-9_]*`, avoid every portable target language's reserved words, and avoid backend-owned slots, so one namespace list is valid against every backend. A name like `$tools`, `lambda`, or `console` fails the run before it starts; the exact exclusion sets are part of the seam contract.
@@ -90,7 +92,6 @@ Binding-global and error-class names are language-portable: they must match the
90
92
  |---|---|
91
93
  | [`src/index.ts`](src/index.ts) | Plugin entry: abstract `PtcRuntime` service and the portable-identifier exclusion sets |
92
94
  | [`src/types.ts`](src/types.ts) | Vocabulary: `PtcRunRequest`, `PtcRunSpec`, bindings, results, failures and sandbox facts |
93
- | — | No runtime invariant companion is published; this package exposes no independent event sequence or mutable data relation beyond contracts enforced at its owning seam. |
94
95
 
95
96
  </details>
96
97
 
@@ -126,7 +127,7 @@ No direct invalidation; the named consumer owns any request-prefix changes.
126
127
  These limits define what the seam cannot do; they are current package constraints, not a task backlog.
127
128
 
128
129
  - **`run()` is one-shot** — `logs` arrive only on the resolved `PtcRunResult`; the seam exposes no streaming-log or progress API for a live program's output.
129
- - **No state survives between runs** — every request runs against a fresh world; a persistent REPL-style kernel is deferred until a backend brings its own logging story.
130
+ - **Retained memory is disposable**: providers may keep state for an explicit owner; restart, release, and provider-specific failures discard it. Programs, binding calls and results remain logged by consumers; live objects are neither serialized nor replayed.
130
131
  - **Providers have different confinement capabilities** — the shipped Node provider enforces a resolved file policy, while the private experimental Python provider rejects an explicit policy. No container provider is supplied.
131
132
  - **No uniform binding byte cap applies across providers** — each provider owns its transport limits; a binding can still allocate memory before its result reaches those limits.
132
133
 
@@ -138,9 +139,9 @@ These limits define what the seam cannot do; they are current package constraint
138
139
 
139
140
  This Dev Note is working context for maintainers: undecided directions and open questions. It is explicitly non-authoritative — shipped behavior and limits live in the sections above and the package code.
140
141
 
141
- #### Future: persistent kernel backend
142
+ #### Retained state
142
143
 
143
- A REPL-style kernel that keeps state across `run_code` calls remains undecided; it would need its own logging story, because the no-state-between-runs contract is what keeps every request reconstructable from the session log alone.
144
+ Retained state has no disk checkpoint or restoration protocol. Consumers must tolerate its loss and retain only model-visible programs and outcomes in the Session log.
144
145
 
145
146
  #### Future: container backend
146
147
 
package/README.zh.md CHANGED
@@ -9,7 +9,7 @@ kind: "package-reference"
9
9
 
10
10
  ## 概述
11
11
 
12
- 使用 `dsh-ptc-runtime`,可通过已配置的后端,针对宿主提供的异步函数运行一段模型编写的程序。请求返回无损 JSON 值、通道内有序的日志或结构化错误;程序失败在结果中 resolve,而 Promise reject 表示调用方误用。每次运行都与先前运行隔离,且运行时不了解工具或会话。执行后端需另行选择;其语言与隔离描述符标明所需的源语言和执行基底,但这些描述符本身不承诺安全边界。
12
+ 使用 `dsh-ptc-runtime` 执行调用宿主异步函数的模型程序。请求返回无损 JSON、捕获日志或结构化失败;Promise 拒绝表示调用方误用。提供方隔离不同状态所有者,并声明源码是异步函数体还是 REPL 语句。提供方可以为显式所有者保留内存,直到释放,但不会从 Session 恢复这些内存。语言与隔离描述符标识语法和执行基底,不提供安全保证。
13
13
 
14
14
  ## 目录
15
15
 
@@ -29,7 +29,7 @@ kind: "package-reference"
29
29
 
30
30
  ### 运行一个程序
31
31
 
32
- 向运行时提供程序与绑定命名空间,然后依次调用 `resolve(request)` 和 `run(spec)`。解析根据提供方能力验证可选 cwd、timeout 与沙箱策略,并填入部署默认值。程序作为异步函数体运行,支持顶层 `await` 与 `return`;无损 JSON 完成值成为 `result.value`,捕获文本成为 `result.logs`,程序失败成为 `result.error`。每个输出通道保持自身顺序,跨通道交错由后端决定。
32
+ 传入程序和绑定命名空间,依次调用 `resolve(request)` 和 `run(spec)`。解析阶段验证 cwd、超时与沙盒选项,并应用提供方默认值。`programFormat` 选择支持顶层 `await`、`return` 的异步函数体,或支持顶层声明、`await` 和末尾表达式的 REPL 语句。无损 JSON 完成值进入 `result.value`,文本进入 `result.logs`,失败进入 `result.error`。
33
33
 
34
34
  ```text
35
35
  const spec = ctx.ptcRuntime.resolve({
@@ -44,6 +44,8 @@ const result = await ctx.ptcRuntime.run(spec)
44
44
 
45
45
  后端以 `language` 与 `isolation` 提供诊断描述符;两者都不授予权限或证明约束。[`dsh-ptc-runtime-node`](../ptc-runtime-node/README.zh.md) 在全新的受管 Node 进程中按已解析沙箱策略执行可擦除 TypeScript。私有的 [`dsh-experimental-ptc-runtime-python`](../../experimental/ptc-runtime-python/README.zh.md) 提供方在全新 CPython 子进程中执行 Python,不提供文件约束。`sandboxMode` 声明提供方的部署文件策略模式;不支持该能力时则缺省。
46
46
 
47
+ 使用可选的[Node 内存保留模式](../ptc-runtime-node/README.zh.md#persistent-repl)时,跨调用传入同一个 `stateOwner` 对象,并在所有者结束时等待 `release(owner)`。不同对象不会共享环境;省略所有者时使用临时环境。无状态提供方忽略所有权。同一保留环境的调用不能重叠。
48
+
47
49
  ### 可移植地命名绑定
48
50
 
49
51
  binding-global 与 error-class 名称是语言可移植的:必须匹配 `[A-Za-z_][A-Za-z0-9_]*`,避开每个可移植目标语言的保留字,并避开后端拥有的槽位,因此同一份命名空间列表对每个后端都有效。`$tools`、`lambda` 或 `console` 之类的名称会在运行开始前失败;确切的排除集是 seam 约定的一部分。
@@ -90,7 +92,6 @@ binding-global 与 error-class 名称是语言可移植的:必须匹配标识
90
92
  |---|---|
91
93
  | [`src/index.ts`](src/index.ts) | 插件入口:抽象 `PtcRuntime` 服务与可移植标识符排除集 |
92
94
  | [`src/types.ts`](src/types.ts) | 词汇:`PtcRunRequest`、`PtcRunSpec`、绑定、结果、失败与沙箱事实 |
93
- | — | 不发布运行时不变式伴生入口;本包不公开任何独立的事件序列或可变数据关系,相关约束仅由其所属 seam 的约定实施。 |
94
95
 
95
96
  </details>
96
97
 
@@ -126,7 +127,7 @@ binding-global 与 error-class 名称是语言可移植的:必须匹配标识
126
127
  这些限制说明 seam 不能做什么;它们是当前包约束,不是任务积压。
127
128
 
128
129
  - **`run()` 是一次性的**——`logs` 只有在 `PtcRunResult` resolve 后才能获得;seam 不提供正在运行的程序所产生输出的流式日志或进度接口。
129
- - **运行之间不保留状态**——每次请求都在全新环境中运行;持久 REPL 风格内核在某个后端带来自己的日志方案之前保持延期。
130
+ - **保留内存可以丢失**:提供方可以为显式所有者保留状态;重启、释放以及提供方指定的失败会清除状态。程序、绑定调用和结果仍由消费者记录;运行中的对象不会被序列化或回放。
130
131
  - **提供方的约束能力不同**——已发布 Node 提供方强制执行已解析文件策略,私有实验性 Python 提供方拒绝显式策略。不提供容器提供方。
131
132
  - **提供方之间没有统一的绑定字节上限**——各提供方负责自己的传输限制;绑定仍可能在结果到达这些限制前分配内存。
132
133
 
@@ -138,9 +139,9 @@ binding-global 与 error-class 名称是语言可移植的:必须匹配标识
138
139
 
139
140
  本开发备注是维护者的工作上下文:尚未决定的方向与开放问题。它明确不具权威性——已交付的行为与限制以上文和包代码为准。
140
141
 
141
- #### 未来:持久内核后端
142
+ #### 保留状态
142
143
 
143
- 跨 `run_code` 调用保留状态的 REPL 风格内核仍未决定;它需要自己的日志方案,因为「运行之间不保留状态」的约定正是让每次请求仅凭会话日志即可重建的原因。
144
+ 保留状态没有磁盘检查点或恢复协议。消费者必须容忍状态丢失,并在 Session 日志中记录模型可见的程序与结果。
144
145
 
145
146
  #### 未来:容器后端
146
147
 
package/lib/index.js CHANGED
@@ -141,10 +141,24 @@ const PORTABLE_RESERVED_WORDS = new Set([
141
141
  * Registers one `ctx.ptcRuntime` implementation. Program, budget, abort, and substrate
142
142
  * failures resolve in {@link PtcRunResult}; only Service Definition contract misuse rejects. Implementations bridge
143
143
  * structured-cloneable bindings, materialize each declared namespace rejection
144
- * class, treat programs as hostile peers, isolate runs from one another, and
144
+ * class, treat programs as hostile peers, isolate distinct state owners, and
145
145
  * terminate and await in-flight runs during disposal.
146
146
  */
147
147
  var PtcRuntime = class extends Service {
148
+ /** Source evaluation form, independent of whether the provider retains state for an owner. */
149
+ get programFormat() {
150
+ return "function-body";
151
+ }
152
+ /**
153
+ * Release an owner's retained environment and await its execution resources.
154
+ * Stateless providers have no retained resources to release.
155
+ * @param owner - The exact object supplied as the request's state owner.
156
+ * @returns Completion after all owned execution resources have been released.
157
+ * @throws When managed resource cleanup fails.
158
+ */
159
+ release(owner) {
160
+ return Promise.resolve();
161
+ }
148
162
  /** Provider-owned program usage guidance for consumers to present alongside the source language. */
149
163
  get executionInstructions() {
150
164
  return "";
@@ -63,7 +63,7 @@ declare module '@deepseek-ai/cordis' {
63
63
  * Registers one `ctx.ptcRuntime` implementation. Program, budget, abort, and substrate
64
64
  * failures resolve in {@link PtcRunResult}; only Service Definition contract misuse rejects. Implementations bridge
65
65
  * structured-cloneable bindings, materialize each declared namespace rejection
66
- * class, treat programs as hostile peers, isolate runs from one another, and
66
+ * class, treat programs as hostile peers, isolate distinct state owners, and
67
67
  * terminate and await in-flight runs during disposal.
68
68
  */
69
69
  export declare abstract class PtcRuntime extends Service {
@@ -84,6 +84,16 @@ export declare abstract class PtcRuntime extends Service {
84
84
  * `'process'`, `'container'`.
85
85
  */
86
86
  abstract readonly isolation: string;
87
+ /** Source evaluation form, independent of whether the provider retains state for an owner. */
88
+ get programFormat(): 'function-body' | 'repl';
89
+ /**
90
+ * Release an owner's retained environment and await its execution resources.
91
+ * Stateless providers have no retained resources to release.
92
+ * @param owner - The exact object supplied as the request's state owner.
93
+ * @returns Completion after all owned execution resources have been released.
94
+ * @throws When managed resource cleanup fails.
95
+ */
96
+ release(owner: object): Promise<void>;
87
97
  /** Provider-owned program usage guidance for consumers to present alongside the source language. */
88
98
  get executionInstructions(): string;
89
99
  /** Deployment file-policy mode, or undefined for a provider without confinement support. */
@@ -69,11 +69,18 @@ export interface PtcBindingNamespace {
69
69
  export interface PtcRunRequest {
70
70
  /**
71
71
  * The program source, in the runtime's {@link ../index.ts | language}. It
72
- * runs as the body of an async function: top-level `await` and `return`
73
- * are available, and the completion value becomes
72
+ * follows the provider's programFormat: an async function body supports
73
+ * top-level `await` and `return`; a REPL supports top-level declarations,
74
+ * `await`, and a final expression. The completion value becomes
74
75
  * {@link PtcRunResult.value}.
75
76
  */
76
77
  program: string;
78
+ /**
79
+ * Object-identity owner for optional in-memory state. Omission requests a fresh
80
+ * environment. Consumers must await runtime.release(owner) when the owner ends.
81
+ * Stateless providers ignore this field; retained state is never durable.
82
+ */
83
+ stateOwner?: object;
77
84
  /** Host functions exposed to the program, one global object per namespace. */
78
85
  bindings: PtcBindingNamespace[];
79
86
  /** Working directory in the mounted filesystem and subprocess execution world. */
@@ -110,7 +117,7 @@ export interface PtcRunSandbox {
110
117
  }
111
118
  /**
112
119
  * Why a run failed. The kinds are orthogonal outcomes reported independently
113
- * (per docs/defensive-patterns.md): a budget expiry is not an exception, an
120
+ * (per docs/defensive-patterns/general.md): a budget expiry is not an exception, an
114
121
  * abort is not a timeout, and a substrate death is neither.
115
122
  *
116
123
  * - `'exception'` — the program threw or failed to parse/transform.
@@ -137,7 +144,7 @@ export interface PtcRunResult {
137
144
  /** Applied file policy and observed denial, when the provider enforces file policy. */
138
145
  sandbox?: PtcRunSandbox;
139
146
  /**
140
- * The program's completion value (its top-level `return`), when it ran to
147
+ * The program's completion value (a return or final REPL expression), when it ran to
141
148
  * completion and the value crossed the runtime's lossless-JSON boundary.
142
149
  * Invalid or over-limit completions fail the run instead of substituting a
143
150
  * rendered string; a failed or value-less run leaves this absent.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@x1a0f3n9/dsh-ptc-runtime",
3
3
  "description": "Abstract PTC execution seam (ctx.ptcRuntime) for the DeepSeek Harness",
4
- "version": "0.1.7-rc.4",
4
+ "version": "0.2.1-rc.3",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -27,11 +27,11 @@
27
27
  ],
28
28
  "license": "MIT",
29
29
  "peerDependencies": {
30
- "@deepseek-ai/cordis": "~4.0.4",
31
- "@x1a0f3n9/dsh-sandbox": "0.1.7-rc.4"
30
+ "@deepseek-ai/cordis": "~4.0.5",
31
+ "@x1a0f3n9/dsh-sandbox": "0.2.1-rc.3"
32
32
  },
33
33
  "devDependencies": {
34
- "@deepseek-ai/cordis": "~4.0.4",
35
- "@x1a0f3n9/dsh-sandbox": "0.1.7-rc.4"
34
+ "@deepseek-ai/cordis": "~4.0.5",
35
+ "@x1a0f3n9/dsh-sandbox": "0.2.1-rc.3"
36
36
  }
37
37
  }