@deepseek-ai/dsh-ptc-runtime-node 0.2.1-alpha.2 → 0.2.1-alpha.4

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/lib/process.js CHANGED
@@ -943,16 +943,16 @@ function wireReplies(port, pending) {
943
943
  * @param port - the port binding calls are posted to.
944
944
  * @param pending - the id-keyed map each posted call parks its handles in.
945
945
  * @param nextId - the shared mutable id counter (program-issued correlation ids).
946
- * @param errorClasses - per-namespace constructors shared with program globals.
946
+ * @param errorClasses - Namespace constructors shared with program globals, resolved for each invocation.
947
947
  * @returns one namespace object per declaration, in declaration order.
948
948
  */
949
949
  function makeNamespaces(data, port, pending, nextId, errorClasses = makeBindingErrorClasses(data)) {
950
950
  return data.namespaces.map(({ global, names }) => {
951
- const errorClass = errorClasses.get(global);
952
951
  const namespace = Object.create(null);
953
952
  for (const name of names) Object.defineProperty(namespace, name, {
954
953
  enumerable: true,
955
954
  value: (args) => {
955
+ const errorClass = errorClasses.get(global);
956
956
  let detached;
957
957
  try {
958
958
  detached = snapshotPtcJsonValue(args);
@@ -961,7 +961,7 @@ function makeNamespaces(data, port, pending, nextId, errorClasses = makeBindingE
961
961
  }
962
962
  if (detached === void 0) return Promise.reject(bindingFailure(errorClass, name, "binding arguments must be lossless JSON"));
963
963
  return new Promise((resolve, reject) => {
964
- const id = nextId.value++;
964
+ const id = nextId.value;
965
965
  pending.set(id, {
966
966
  resolve,
967
967
  reject: (error) => {
@@ -976,9 +976,10 @@ function makeNamespaces(data, port, pending, nextId, errorClasses = makeBindingE
976
976
  name,
977
977
  args: encodePtcJsonWire(detached)
978
978
  });
979
+ nextId.value += 1;
979
980
  } catch (error) {
980
981
  pending.delete(id);
981
- reject(bindingFailure(errorClass, name, `binding arguments must be structured-cloneable: ${error instanceof CapturedError ? error.message : String(error)}`));
982
+ reject(bindingFailure(errorClass, name, `binding call could not be sent: ${error instanceof CapturedError ? error.message : String(error)}`));
982
983
  }
983
984
  });
984
985
  }
@@ -1049,6 +1050,14 @@ const STARTUP_ENVIRONMENT_NAMES = new Set([
1049
1050
  "TEMP",
1050
1051
  "TMP"
1051
1052
  ]);
1053
+ /**
1054
+ * Clear inherited credentials while preserving native child-process startup paths.
1055
+ * @param state - Child process environment, replaced with an empty program-visible object.
1056
+ */
1057
+ function clearProgramEnvironment(state) {
1058
+ for (const key of Object.keys(state.env)) if (!STARTUP_ENVIRONMENT_NAMES.has(key.toUpperCase())) Reflect.deleteProperty(state.env, key);
1059
+ state.env = Object.create(null);
1060
+ }
1052
1061
  //#endregion
1053
1062
  //#region lib/types/process.js
1054
1063
  /**
@@ -1060,8 +1069,7 @@ const STARTUP_ENVIRONMENT_NAMES = new Set([
1060
1069
  */
1061
1070
  async function runNodeMain(stream, maxMessageBytes, processState) {
1062
1071
  if (!Number.isSafeInteger(maxMessageBytes) || maxMessageBytes <= 0 || maxMessageBytes > 4294967295) throw new Error("invalid control message limit");
1063
- for (const key of Object.keys(processState.env)) if (!STARTUP_ENVIRONMENT_NAMES.has(key.toUpperCase())) Reflect.deleteProperty(processState.env, key);
1064
- processState.env = Object.create(null);
1072
+ clearProgramEnvironment(processState);
1065
1073
  const boot = Promise.withResolvers();
1066
1074
  const listeners = [];
1067
1075
  let started = false;
@@ -1,8 +1,17 @@
1
- import type { PtcBindingNamespace, PtcRunRequest } from '@deepseek-ai/dsh-ptc-runtime';
1
+ import type { PtcBindingFunction, PtcBindingNamespace, PtcJsonValue, PtcRunRequest } from '@deepseek-ai/dsh-ptc-runtime';
2
+ import type { ReplyMessage } from './protocol.ts';
2
3
  /**
3
4
  * Reject unusable namespaces before starting a process.
4
5
  * @param request - Host-owned binding declarations.
5
6
  * @returns Namespaces keyed by their declared global.
6
7
  */
7
8
  export declare function validateBindings(request: PtcRunRequest): Map<string, PtcBindingNamespace>;
9
+ /**
10
+ * Invoke a host binding and encode its lossless result or bounded-channel rejection.
11
+ * @param id - Program-issued correlation identifier.
12
+ * @param binding - Current evaluation's declared function, absent if it was removed.
13
+ * @param args - Validated JSON arguments detached from the program.
14
+ * @returns A reply suitable for the runtime's bounded control channel.
15
+ */
16
+ export declare function replyToBinding(id: number, binding: PtcBindingFunction | undefined, args: PtcJsonValue): Promise<ReplyMessage>;
8
17
  //# sourceMappingURL=bindings.d.ts.map
@@ -52,7 +52,7 @@ declare const CONSOLE_LEVELS: readonly ["log", "info", "warn", "error", "debug"]
52
52
  * @param logs - the buffer every rendered line is pushed into.
53
53
  * @returns the five-method console object handed to the program.
54
54
  */
55
- export declare function makeConsoleShim(logs: LogBuffer): Record<(typeof CONSOLE_LEVELS)[number], (...args: unknown[]) => void>;
55
+ export declare function makeConsoleShim(logs: Pick<LogBuffer, 'push'>): Record<(typeof CONSOLE_LEVELS)[number], (...args: unknown[]) => void>;
56
56
  /**
57
57
  * Redirect a stream's `write` into the log buffer (the program-visible
58
58
  * `process.stdout`/`process.stderr` in the Node child), so raw writes land in emission order
@@ -65,7 +65,7 @@ export declare function makeConsoleShim(logs: LogBuffer): Record<(typeof CONSOLE
65
65
  * @returns the restore function (the in-process tests un-patch; the real
66
66
  * child never needs to).
67
67
  */
68
- export declare function captureStreamWrites(logs: LogBuffer, stream: PatchableStream): () => void;
68
+ export declare function captureStreamWrites(logs: Pick<LogBuffer, 'push'>, stream: PatchableStream): () => void;
69
69
  /**
70
70
  * Prepare the program's completion value for the done message. Only lossless
71
71
  * JSON crosses, and a value that does not fit the remaining combined outer
@@ -94,6 +94,15 @@ export interface PendingCall {
94
94
  }
95
95
  /** Constructor type for one program-visible binding rejection class. */
96
96
  export type BindingErrorConstructor = new (memberName: string, message: string) => Error;
97
+ /**
98
+ * Materialize the real error constructor declared by one namespace.
99
+ * @param descriptor - program-global class name and member-name property.
100
+ * @returns the constructor injected into the program and used for rejections.
101
+ */
102
+ export declare function makeBindingErrorClass(descriptor: {
103
+ name: string;
104
+ memberNameProperty: string;
105
+ }): BindingErrorConstructor;
97
106
  /**
98
107
  * Build each declared error class once so calls and `instanceof` share constructor identity.
99
108
  * @param data - binding namespace declarations from the boot payload.
@@ -121,12 +130,12 @@ export declare function wireReplies(port: BootstrapPort, pending: Map<number, Pe
121
130
  * @param port - the port binding calls are posted to.
122
131
  * @param pending - the id-keyed map each posted call parks its handles in.
123
132
  * @param nextId - the shared mutable id counter (program-issued correlation ids).
124
- * @param errorClasses - per-namespace constructors shared with program globals.
133
+ * @param errorClasses - Namespace constructors shared with program globals, resolved for each invocation.
125
134
  * @returns one namespace object per declaration, in declaration order.
126
135
  */
127
136
  export declare function makeNamespaces(data: Pick<ProgramBootData, 'namespaces'>, port: BootstrapPort, pending: Map<number, PendingCall>, nextId: {
128
137
  value: number;
129
- }, errorClasses?: Map<string, BindingErrorConstructor>): Record<string, unknown>[];
138
+ }, errorClasses?: Pick<ReadonlyMap<string, BindingErrorConstructor>, 'get'>): Record<string, unknown>[];
130
139
  /**
131
140
  * Run one strict async-function body, allowing top-level `await` and `return`, and post exactly
132
141
  * one terminal {@link DoneMessage}; a thrown program error becomes its `error` field.
@@ -0,0 +1,34 @@
1
+ /** Execution mode and resource limits for the Node PTC provider. */
2
+ import z from '@deepseek-ai/schemastery';
3
+ import type { LaunchConfig } from './launch.ts';
4
+ /** Deployment-varying runtime bounds and launch choices. */
5
+ export interface Config {
6
+ /** Worker invocation in the subprocess world; omitted selects the local carrier. */
7
+ launch?: LaunchConfig;
8
+ /** per-call starts fresh processes; persistent-in-memory retains a REPL per owner under the same file policy. */
9
+ executionMode?: 'per-call' | 'persistent-in-memory';
10
+ /** Default elapsed deadline, including nested tool and approval waits. */
11
+ timeoutMs?: number;
12
+ /** Maximum numeric elapsed budget accepted by resolve. */
13
+ maxTimeoutMs?: number;
14
+ /** Combined serialized logs, completion and diagnostic byte cap. */
15
+ maxOutputBytes?: number;
16
+ /** V8 old-generation heap limit in MiB; native allocations are excluded. */
17
+ maxOldGenerationSizeMb?: number;
18
+ /** Maximum control frame, outstanding argument and queued control-output bytes. */
19
+ maxMessageBytes?: number;
20
+ /** Maximum simultaneous host binding calls accepted from a program. */
21
+ maxPendingCalls?: number;
22
+ /** Managed process termination and output-drain grace in milliseconds. */
23
+ graceMs?: number;
24
+ }
25
+ /** Configuration after Loader defaults and executable selection. */
26
+ export type ResolvedConfig = Required<Config>;
27
+ /** Loader defaults for the Node PTC provider. */
28
+ export declare const NodeConfig: z<Config>;
29
+ /**
30
+ * Validate resolved Node limits and paths.
31
+ * @param config - Loader-defaulted fields with the selected executable.
32
+ */
33
+ export declare function validateConfig(config: ResolvedConfig): void;
34
+ //# sourceMappingURL=config.d.ts.map
@@ -1,4 +1,11 @@
1
1
  /** Startup variables required by native executables before model evaluation. */
2
2
  /** Native executable search, Windows system paths, and sandbox temporary paths retained in the OS environment. */
3
3
  export declare const STARTUP_ENVIRONMENT_NAMES: ReadonlySet<string>;
4
+ /**
5
+ * Clear inherited credentials while preserving native child-process startup paths.
6
+ * @param state - Child process environment, replaced with an empty program-visible object.
7
+ */
8
+ export declare function clearProgramEnvironment(state: {
9
+ env: NodeJS.ProcessEnv;
10
+ }): void;
4
11
  //# sourceMappingURL=environment.d.ts.map
@@ -1,55 +1,41 @@
1
1
  import { Context } from '@deepseek-ai/cordis';
2
- import z from '@deepseek-ai/schemastery';
3
2
  import { PtcRuntime } from '@deepseek-ai/dsh-ptc-runtime';
4
3
  import type { PtcRunRequest, PtcRunResult, PtcRunSpec } from '@deepseek-ai/dsh-ptc-runtime';
5
4
  import type { SandboxMode } from '@deepseek-ai/dsh-sandbox';
6
- import type { LaunchConfig } from './launch.ts';
5
+ import type { Config } from './config.ts';
6
+ export type { Config } from './config.ts';
7
7
  export type { LaunchConfig } from './launch.ts';
8
- /** Deployment-varying runtime bounds and launch choices. */
9
- export interface Config {
10
- /** Worker invocation in the subprocess world; omitted selects the local carrier. */
11
- launch?: LaunchConfig;
12
- /** Default elapsed deadline, including nested tool and approval waits. */
13
- timeoutMs?: number;
14
- /** Maximum numeric elapsed budget accepted by resolve. */
15
- maxTimeoutMs?: number;
16
- /** Combined serialized logs, completion and diagnostic byte cap. */
17
- maxOutputBytes?: number;
18
- /** V8 old-generation heap limit in MiB; native allocations are excluded. */
19
- maxOldGenerationSizeMb?: number;
20
- /** Maximum control frame, outstanding argument and queued control-output bytes. */
21
- maxMessageBytes?: number;
22
- /** Maximum simultaneous host binding calls accepted from a program. */
23
- maxPendingCalls?: number;
24
- /** Managed process termination and output-drain grace in milliseconds. */
25
- graceMs?: number;
26
- }
27
- /** Node provider; direct file effects use the same sandbox service as Bash. */
8
+ /** Node execution under file policy, with optional owner-scoped retained memory. */
28
9
  export declare class NodePtcRuntime extends PtcRuntime {
29
10
  static inject: string[];
30
- static Config: z<Config>;
11
+ static Config: import("@deepseek-ai/schemastery").default<Config>;
31
12
  readonly language = "typescript";
32
13
  readonly isolation = "process";
14
+ private readonly inMemory?;
15
+ private readonly processes;
16
+ get programFormat(): 'function-body' | 'repl';
33
17
  get executionInstructions(): string;
34
18
  private readonly config;
35
19
  private readonly live;
36
20
  private disposed;
37
21
  constructor(ctx: Context, config: Config);
38
- get sandboxMode(): SandboxMode;
22
+ get sandboxMode(): SandboxMode | undefined;
23
+ release(owner: object): Promise<void>;
39
24
  get timeout(): {
40
25
  defaultMs: number;
41
26
  maxMs: number;
42
27
  };
43
28
  /**
44
- * Resolve an execution under explicit or deployment policy.
29
+ * Resolve directory, deadline and file policy for the selected execution mode.
45
30
  * @param request - Program, bindings, optional cwd/deadline, and resolved authority.
46
31
  * @returns Complete execution inputs with a capped numeric budget or an explicit null deadline.
47
32
  */
48
33
  resolve(request: PtcRunRequest): PtcRunSpec;
49
34
  /**
50
- * Run a resolved program in a fresh managed and confined Node process.
51
- * @param spec - Inputs returned by resolve; missing authority is caller misuse.
52
- * @returns Output and file-confinement facts after managed cleanup.
35
+ * Run a resolved program under the configured execution mode.
36
+ * Session mode changes cancel admitted calls before process launch as well as active programs.
37
+ * @param spec - Inputs returned by resolve for the configured mode.
38
+ * @returns Logs, JSON completion or failure; retained processes remain until release or invalidation.
53
39
  */
54
40
  run(spec: PtcRunSpec): Promise<PtcRunResult>;
55
41
  private execute;
@@ -24,7 +24,8 @@ export declare function resolveLaunch(config?: LaunchConfig): LaunchConfig;
24
24
  * @param fs - Filesystem mapping host bootstrap assets into the process world.
25
25
  * @param config - resolved worker invocation.
26
26
  * @param maxMessageBytes - Validated frame and queued-write limit.
27
+ * @param persistent - Select the in-memory REPL bootstrap instead of the one-shot evaluator.
27
28
  * @returns Arguments following the resolved Node executable.
28
29
  */
29
- export declare function bootstrapArgs(fs: Pick<FileSystem, 'processPathFromHostPath'>, config: LaunchConfig, maxMessageBytes: number): string[];
30
+ export declare function bootstrapArgs(fs: Pick<FileSystem, 'processPathFromHostPath'>, config: LaunchConfig, maxMessageBytes: number, persistent?: boolean): string[];
30
31
  //# sourceMappingURL=launch.d.ts.map
@@ -3,9 +3,10 @@ import type { PtcJsonValue, PtcRunFailure, PtcRunResult } from '@deepseek-ai/dsh
3
3
  /** One run's combined outer-output ledger; binding values never enter it. */
4
4
  export declare class OutputLedger {
5
5
  private readonly maxBytes;
6
+ private readonly overflowMessage?;
6
7
  private bytes;
7
8
  private entries;
8
- constructor(maxBytes: number);
9
+ constructor(maxBytes: number, overflowMessage?: string | undefined);
9
10
  /** Admit one exact log entry, or report that the hard cap was crossed. */
10
11
  admit(text: string, sink: string[]): boolean;
11
12
  /** Finalize a successful absent-or-JSON completion against the combined cap. */
@@ -1,5 +1,6 @@
1
1
  /** Bounded drainage for raw process output after managed execution ends. */
2
2
  import type { Readable } from 'node:stream';
3
+ import type { SubprocessHandle } from '@deepseek-ai/dsh-subprocess';
3
4
  /**
4
5
  * Wait for queued bytes without letting an inherited descriptor retain a run forever.
5
6
  * @param stream - Caller-owned raw process output, when provided.
@@ -7,4 +8,11 @@ import type { Readable } from 'node:stream';
7
8
  * @returns Whether the complete stream ended without a transport error.
8
9
  */
9
10
  export declare function drainOutput(stream: Readable | undefined, graceMs: number): Promise<boolean>;
11
+ /**
12
+ * Terminate a managed process and drain its pipes, including failures before output listeners attach.
13
+ * @param handle - Process and streams owned by the runtime.
14
+ * @param graceMs - Maximum pipe-drain wait after managed exit.
15
+ * @returns Whether both output streams ended cleanly.
16
+ */
17
+ export declare function terminateProcess(handle: SubprocessHandle, graceMs: number): Promise<boolean>;
10
18
  //# sourceMappingURL=output-stream.d.ts.map
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=persistent-process-entry.d.ts.map
@@ -0,0 +1,18 @@
1
+ import { type Duplex } from 'node:stream';
2
+ import type { PatchableStream } from './bootstrap.ts';
3
+ /** Process state owned by the REPL child; tests supply instance-local streams and environment. */
4
+ export interface PersistentProcess {
5
+ env: NodeJS.ProcessEnv;
6
+ stdout: PatchableStream;
7
+ stderr: PatchableStream;
8
+ chdir(directory: string): void;
9
+ }
10
+ /**
11
+ * Serve sequential evaluations until the owning host closes the control channel.
12
+ * @param stream - Inherited private control endpoint.
13
+ * @param maxMessageBytes - Maximum control frame and queued output bytes.
14
+ * @param processState - Child environment, output and directory control, bound only in the REPL context.
15
+ * @returns After the channel closes and the REPL releases its streams.
16
+ */
17
+ export declare function runPersistentMain(stream: Duplex, maxMessageBytes: number, processState: PersistentProcess): Promise<void>;
18
+ //# sourceMappingURL=persistent-process.d.ts.map
@@ -0,0 +1,44 @@
1
+ import { Context } from '@deepseek-ai/cordis';
2
+ import type { PtcRunRequest, PtcRunSpec, PtcRunResult } from '@deepseek-ai/dsh-ptc-runtime';
3
+ import type { PolicyProcesses } from './policy-processes.ts';
4
+ import type { ResolvedConfig } from './config.ts';
5
+ /** Sandboxed, best-effort retained state; restart, disposal, and interrupted execution clear it. */
6
+ export declare class InMemoryExecution {
7
+ private readonly ctx;
8
+ private readonly config;
9
+ private readonly processes;
10
+ /**
11
+ * Model-facing rules for retained variables, authority, output, and recovery.
12
+ * @returns Usage guidance appended to the run_code schema.
13
+ */
14
+ get executionInstructions(): string;
15
+ private readonly owners;
16
+ private readonly kernels;
17
+ private disposed;
18
+ /**
19
+ * Own retained execution resources under the existing Node provider.
20
+ * @param ctx - Provider lifecycle and execution services.
21
+ * @param config - Validated limits and selected executable.
22
+ * @param processes - Provider-owned policy invalidation and cleanup.
23
+ */
24
+ constructor(ctx: Context, config: ResolvedConfig, processes: PolicyProcesses);
25
+ /**
26
+ * Resolve the file policy, directory and deadline for a retained REPL.
27
+ * @param request - Program, bindings, owner, directory and elapsed budget.
28
+ * @returns Resolved inputs with the selected file policy.
29
+ */
30
+ resolve(request: PtcRunRequest): PtcRunSpec;
31
+ /**
32
+ * Evaluate statements using this owner's process, or a temporary process without an owner.
33
+ * @param spec - Resolved request; concurrent calls for one owner are rejected.
34
+ * @returns Logs, a final JSON expression, or a structured execution failure.
35
+ */
36
+ run(spec: PtcRunSpec): Promise<PtcRunResult>;
37
+ /**
38
+ * Release retained state and await its process cleanup.
39
+ * @param owner - Exact object supplied to run.
40
+ * @returns Completion after the owned process and output streams stop.
41
+ */
42
+ release(owner: object): Promise<void>;
43
+ }
44
+ //# sourceMappingURL=persistent.d.ts.map
@@ -0,0 +1,30 @@
1
+ /** Node PTC process invalidation after a committed Session file-policy change. */
2
+ import type { Context } from '@deepseek-ai/cordis';
3
+ import type { SessionId } from '@deepseek-ai/dsh-session';
4
+ import type { SandboxExecutionPolicy } from '@deepseek-ai/dsh-sandbox';
5
+ /** Owns asynchronous process cleanup without delaying permission setters. */
6
+ export declare class PolicyProcesses {
7
+ private readonly ctx;
8
+ private readonly processes;
9
+ /**
10
+ * Begin cleanup on policy changes, even when no subsequent program runs.
11
+ * @param ctx - Node provider lifecycle and Session services.
12
+ */
13
+ constructor(ctx: Context);
14
+ /**
15
+ * Track an admitted call or retained process until its owner confirms cleanup.
16
+ * @param policy - Resolved process policy, including an optional Session identity.
17
+ * @param release - Idempotent cancellation and awaited cleanup.
18
+ * @returns Removal after successful process cleanup.
19
+ */
20
+ register(policy: SandboxExecutionPolicy, release: () => Promise<void>): () => void;
21
+ /**
22
+ * Wait for invalidated processes before admitting another program.
23
+ * @param sessionId - Session carried by the resolved policy.
24
+ * @returns Completion after prior cleanup; a failure rejects and remains retryable.
25
+ */
26
+ wait(sessionId: SessionId | undefined): Promise<void>;
27
+ private release;
28
+ private settle;
29
+ }
30
+ //# sourceMappingURL=policy-processes.d.ts.map
package/locale/en.json ADDED
@@ -0,0 +1,5 @@
1
+ {
2
+ "meta": {
3
+ "title": "ptc-runtime-node"
4
+ }
5
+ }
package/locale/zh.json ADDED
@@ -0,0 +1,6 @@
1
+ {
2
+ "meta": {
3
+ "title": "Node PTC 运行时",
4
+ "description": "在沙箱中的 Node 进程里执行用于调用工具的代码。"
5
+ }
6
+ }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@deepseek-ai/dsh-ptc-runtime-node",
3
- "description": "Sandboxed Node process implementation of the DeepSeek Harness PTC execution capability",
4
- "version": "0.2.1-alpha.2",
3
+ "description": "Node PTC execution with per-call sandboxed processes or in-memory REPL state",
4
+ "version": "0.2.1-alpha.4",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -22,40 +22,43 @@
22
22
  "./process": {
23
23
  "types": "./lib/types/process-entry.d.ts",
24
24
  "default": "./lib/process.js"
25
- }
25
+ },
26
+ "./locale/*.json": "./locale/*.json"
26
27
  },
27
28
  "files": [
29
+ "locale/*.json",
28
30
  "lib/index.js",
29
31
  "lib/process.js",
32
+ "lib/persistent-process.js",
30
33
  "lib/types/**/*.d.ts"
31
34
  ],
32
35
  "license": "MIT",
33
36
  "peerDependencies": {
34
- "@deepseek-ai/cordis": "~4.0.5-alpha.1",
35
- "@deepseek-ai/dsh-ptc-runtime": "0.2.1-alpha.2",
36
- "@deepseek-ai/dsh-session": "0.2.1-alpha.2",
37
- "@deepseek-ai/dsh-timeout": "0.2.1-alpha.2",
38
- "@deepseek-ai/dsh-fs": "0.2.1-alpha.2",
39
- "@deepseek-ai/dsh-subprocess": "0.2.1-alpha.2",
40
- "@deepseek-ai/dsh-sandbox": "0.2.1-alpha.2",
41
- "@deepseek-ai/dsh-sandbox-policy": "0.2.1-alpha.2"
37
+ "@deepseek-ai/cordis": "~4.0.5-alpha.2",
38
+ "@deepseek-ai/dsh-ptc-runtime": "0.2.1-alpha.4",
39
+ "@deepseek-ai/dsh-session": "0.2.1-alpha.4",
40
+ "@deepseek-ai/dsh-timeout": "0.2.1-alpha.4",
41
+ "@deepseek-ai/dsh-fs": "0.2.1-alpha.4",
42
+ "@deepseek-ai/dsh-subprocess": "0.2.1-alpha.4",
43
+ "@deepseek-ai/dsh-sandbox": "0.2.1-alpha.4",
44
+ "@deepseek-ai/dsh-sandbox-policy": "0.2.1-alpha.4"
42
45
  },
43
46
  "dependencies": {
44
- "@deepseek-ai/dsh-util-values": "0.2.1-alpha.2",
45
- "@deepseek-ai/schemastery": "~3.18.5-alpha.1"
47
+ "@deepseek-ai/dsh-util-values": "0.2.1-alpha.4",
48
+ "@deepseek-ai/schemastery": "~3.18.5-alpha.2"
46
49
  },
47
50
  "devDependencies": {
48
- "@deepseek-ai/cordis": "~4.0.5-alpha.1",
49
- "@deepseek-ai/dsh-ptc-runtime": "0.2.1-alpha.2",
50
- "@deepseek-ai/dsh-session": "0.2.1-alpha.2",
51
- "@deepseek-ai/dsh-timeout": "0.2.1-alpha.2",
52
- "@deepseek-ai/dsh-fs": "0.2.1-alpha.2",
53
- "@deepseek-ai/dsh-subprocess": "0.2.1-alpha.2",
54
- "@deepseek-ai/dsh-sandbox": "0.2.1-alpha.2",
55
- "@deepseek-ai/dsh-sandbox-policy": "0.2.1-alpha.2",
56
- "@deepseek-ai/dsh-fs-local": "0.2.1-alpha.2",
57
- "@deepseek-ai/dsh-subprocess-local": "0.2.1-alpha.2",
58
- "@deepseek-ai/dsh-session-projection": "0.2.1-alpha.2",
59
- "@deepseek-ai/dsh-sandbox-local": "0.2.1-alpha.2"
51
+ "@deepseek-ai/cordis": "~4.0.5-alpha.2",
52
+ "@deepseek-ai/dsh-ptc-runtime": "0.2.1-alpha.4",
53
+ "@deepseek-ai/dsh-session": "0.2.1-alpha.4",
54
+ "@deepseek-ai/dsh-timeout": "0.2.1-alpha.4",
55
+ "@deepseek-ai/dsh-fs": "0.2.1-alpha.4",
56
+ "@deepseek-ai/dsh-subprocess": "0.2.1-alpha.4",
57
+ "@deepseek-ai/dsh-sandbox": "0.2.1-alpha.4",
58
+ "@deepseek-ai/dsh-sandbox-policy": "0.2.1-alpha.4",
59
+ "@deepseek-ai/dsh-fs-local": "0.2.1-alpha.4",
60
+ "@deepseek-ai/dsh-subprocess-local": "0.2.1-alpha.4",
61
+ "@deepseek-ai/dsh-session-projection": "0.2.1-alpha.4",
62
+ "@deepseek-ai/dsh-sandbox-local": "0.2.1-alpha.4"
60
63
  }
61
64
  }