@deepseek-ai/dsh-subprocess-e2b 0.0.1-rc.1
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/LICENSE +28 -0
- package/README.i18n.yaml +6 -0
- package/README.md +43 -0
- package/README.zh.md +43 -0
- package/lib/index.js +1444 -0
- package/lib/invariant.js +23 -0
- package/lib/types/environment.d.ts +29 -0
- package/lib/types/index.d.ts +34 -0
- package/lib/types/invariant.d.ts +16 -0
- package/lib/types/output.d.ts +50 -0
- package/lib/types/process.d.ts +71 -0
- package/lib/types/remote.d.ts +55 -0
- package/lib/types/terminal.d.ts +49 -0
- package/package.json +51 -0
package/lib/invariant.js
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
//#region lib/types/invariant.js
|
|
2
|
+
/**
|
|
3
|
+
* Package-owned invariant companion for `@deepseek-ai/dsh-subprocess-e2b`.
|
|
4
|
+
* @module @deepseek-ai/dsh-subprocess-e2b/invariant
|
|
5
|
+
*/
|
|
6
|
+
const PACKAGE_NAME = "@deepseek-ai/dsh-subprocess-e2b";
|
|
7
|
+
/** Cordis companion plugin name. */
|
|
8
|
+
const name = "subprocess-e2b-invariant";
|
|
9
|
+
/** Service required before reserving package ownership. */
|
|
10
|
+
const inject = ["invariants"];
|
|
11
|
+
/**
|
|
12
|
+
* No runtime invariant: live remote handles are private teardown ownership,
|
|
13
|
+
* and the E2B command event stream is the sole outcome authority.
|
|
14
|
+
*/
|
|
15
|
+
const install = () => {};
|
|
16
|
+
/**
|
|
17
|
+
* Register this package's invariant companion.
|
|
18
|
+
* @param ctx - Cordis context carrying the invariant service.
|
|
19
|
+
* @returns the installed registration's disposer after setup succeeds.
|
|
20
|
+
*/
|
|
21
|
+
const apply = (ctx) => Promise.resolve(ctx.invariants.register(PACKAGE_NAME, install));
|
|
22
|
+
//#endregion
|
|
23
|
+
export { apply, inject, name };
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/** Shared remote-environment scrubbing for E2B process and terminal launchers. */
|
|
2
|
+
import type { Sandbox } from '@deepseek-ai/dsh-e2b';
|
|
3
|
+
/**
|
|
4
|
+
* Read the remote environment through ASCII base64 so SDK callback chunking cannot corrupt UTF-8.
|
|
5
|
+
* @param sandbox - shared E2B execution world.
|
|
6
|
+
* @param signal - optional cancellation for the control-plane request.
|
|
7
|
+
* @returns the complete NUL-delimited UTF-8 environment.
|
|
8
|
+
*/
|
|
9
|
+
export declare function readRemoteEnvironment(sandbox: Sandbox, signal?: AbortSignal): Promise<string>;
|
|
10
|
+
/**
|
|
11
|
+
* Parse an E2B NUL-delimited environment while removing harness-private and credential-shaped names.
|
|
12
|
+
* @param raw - The complete NUL-delimited remote environment.
|
|
13
|
+
* @returns Mutable retained entries for the caller to overlay and serialize.
|
|
14
|
+
*/
|
|
15
|
+
export declare function scrubRemoteEnvironment(raw: string): Map<string, string>;
|
|
16
|
+
/**
|
|
17
|
+
* Isolate E2B's fixed login-shell bootstrap from user profiles and ambient credentials.
|
|
18
|
+
* @param raw - The complete NUL-delimited remote environment.
|
|
19
|
+
* @returns Explicit E2B command or PTY overrides for bootstrap-shell startup.
|
|
20
|
+
*/
|
|
21
|
+
export declare function bootstrapEnvironment(raw: string): Record<string, string>;
|
|
22
|
+
/**
|
|
23
|
+
* Overlay explicit entries and serialize one validated E2B environment.
|
|
24
|
+
* @param raw - The complete NUL-delimited remote environment.
|
|
25
|
+
* @param explicit - Deliberate caller overrides applied after ambient scrubbing; an `undefined` tombstone removes an ambient entry.
|
|
26
|
+
* @returns NUL-delimited `name=value` entries accepted by `env -i`.
|
|
27
|
+
*/
|
|
28
|
+
export declare function serializeRemoteEnvironment(raw: string, explicit: Readonly<NodeJS.ProcessEnv> | undefined): string;
|
|
29
|
+
//# sourceMappingURL=environment.d.ts.map
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* E2B Service provider for the subprocess capability seam. Each handle starts through the
|
|
3
|
+
* shared sandbox and retains command output/status paths in that remote world.
|
|
4
|
+
* @module @deepseek-ai/dsh-subprocess-e2b
|
|
5
|
+
*/
|
|
6
|
+
import { Context } from '@deepseek-ai/cordis';
|
|
7
|
+
import z from '@deepseek-ai/schemastery';
|
|
8
|
+
import { SubprocessService } from '@deepseek-ai/dsh-subprocess';
|
|
9
|
+
import type { SubprocessHandle, SubprocessSpawnSpec, SubprocessTerminalHandle, SubprocessTerminalSpawnSpec } from '@deepseek-ai/dsh-subprocess';
|
|
10
|
+
/** Configuration for the E2B subprocess adapter. */
|
|
11
|
+
export interface Config {
|
|
12
|
+
/** Remote status/liveness poll cadence in milliseconds; each tick is one control-plane request. */
|
|
13
|
+
pollMs?: number;
|
|
14
|
+
}
|
|
15
|
+
/** E2B command manager registered as `ctx.subprocess`. */
|
|
16
|
+
export declare class E2BSubprocessService extends SubprocessService {
|
|
17
|
+
static inject: string[];
|
|
18
|
+
static Config: z<Config>;
|
|
19
|
+
private readonly live;
|
|
20
|
+
private readonly terminals;
|
|
21
|
+
private readonly terminalSetups;
|
|
22
|
+
private readonly pollMs;
|
|
23
|
+
private disposing;
|
|
24
|
+
/** Create the E2B subprocess service and bind its disposal policy. */
|
|
25
|
+
constructor(ctx: Context, config: Config);
|
|
26
|
+
/** @inheritdoc */
|
|
27
|
+
resolveExecutable(command: string, env?: Readonly<Record<string, string>>, signal?: AbortSignal): Promise<string>;
|
|
28
|
+
/** @inheritdoc */
|
|
29
|
+
spawn(spec: SubprocessSpawnSpec): SubprocessHandle;
|
|
30
|
+
/** @inheritdoc */
|
|
31
|
+
spawnTerminal(spec: SubprocessTerminalSpawnSpec): Promise<SubprocessTerminalHandle>;
|
|
32
|
+
}
|
|
33
|
+
export default E2BSubprocessService;
|
|
34
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Package-owned invariant companion for `@deepseek-ai/dsh-subprocess-e2b`.
|
|
3
|
+
* @module @deepseek-ai/dsh-subprocess-e2b/invariant
|
|
4
|
+
*/
|
|
5
|
+
import type { Context } from '@deepseek-ai/cordis';
|
|
6
|
+
/** Cordis companion plugin name. */
|
|
7
|
+
export declare const name = "subprocess-e2b-invariant";
|
|
8
|
+
/** Service required before reserving package ownership. */
|
|
9
|
+
export declare const inject: string[];
|
|
10
|
+
/**
|
|
11
|
+
* Register this package's invariant companion.
|
|
12
|
+
* @param ctx - Cordis context carrying the invariant service.
|
|
13
|
+
* @returns the installed registration's disposer after setup succeeds.
|
|
14
|
+
*/
|
|
15
|
+
export declare const apply: (ctx: Context) => Promise<() => void>;
|
|
16
|
+
//# sourceMappingURL=invariant.d.ts.map
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/** Bounded host-side projection of a complete output file retained in E2B. */
|
|
2
|
+
import { Buffer } from 'node:buffer';
|
|
3
|
+
import type { SubprocessOutputRead, SubprocessOutputReader } from '@deepseek-ai/dsh-subprocess';
|
|
4
|
+
/** Reserved non-base64 frame proving that one remote encoder reached clean EOF. */
|
|
5
|
+
export declare const E2B_OUTPUT_COMPLETE_FRAME = "!dsh-e2b-output-complete!";
|
|
6
|
+
/** Incrementally decode newline-delimited base64 frames emitted by one remote encoder. */
|
|
7
|
+
export declare class E2BBase64Decoder {
|
|
8
|
+
private pending;
|
|
9
|
+
private complete;
|
|
10
|
+
/**
|
|
11
|
+
* Decode every complete newline-delimited frame in one arbitrarily split SDK callback.
|
|
12
|
+
* @param text - ASCII base64 frames from E2B's decoded callback.
|
|
13
|
+
* @returns the complete raw bytes made available by this callback.
|
|
14
|
+
*/
|
|
15
|
+
push(text: string): Buffer;
|
|
16
|
+
/**
|
|
17
|
+
* Validate clean encoder completion, or discard an interrupted trailing frame after requested termination.
|
|
18
|
+
* @param requireComplete - Whether natural completion requires the reserved EOF frame.
|
|
19
|
+
*/
|
|
20
|
+
finish(requireComplete?: boolean): void;
|
|
21
|
+
}
|
|
22
|
+
/** Offset reader used for one collect-mode E2B stream. */
|
|
23
|
+
export declare class E2BOutputReader implements SubprocessOutputReader {
|
|
24
|
+
private readonly maxBytes;
|
|
25
|
+
private readonly maxSpillBytes;
|
|
26
|
+
private readonly spillPath;
|
|
27
|
+
private chunks;
|
|
28
|
+
private retainedBytes;
|
|
29
|
+
private totalBytes;
|
|
30
|
+
private spillValid;
|
|
31
|
+
/**
|
|
32
|
+
* Create a bounded reader over one remote spill path.
|
|
33
|
+
* @param maxBytes - In-memory tail cap.
|
|
34
|
+
* @param maxSpillBytes - Maximum complete remote file size the caller accepts.
|
|
35
|
+
* @param spillPath - Remote full-output path.
|
|
36
|
+
*/
|
|
37
|
+
constructor(maxBytes: number, maxSpillBytes: number | undefined, spillPath: string);
|
|
38
|
+
/** Total bytes observed from the SDK stream. */
|
|
39
|
+
get size(): number;
|
|
40
|
+
/** Stop advertising a remote spill whose writer did not reach clean EOF. */
|
|
41
|
+
invalidateSpill(): void;
|
|
42
|
+
/**
|
|
43
|
+
* Append one byte-faithful decoded transport event.
|
|
44
|
+
* @param bytes - Raw command bytes recovered from the ASCII SDK transport.
|
|
45
|
+
*/
|
|
46
|
+
push(bytes: Uint8Array): void;
|
|
47
|
+
/** @inheritdoc */
|
|
48
|
+
readFrom(fromByte: number): SubprocessOutputRead;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=output.d.ts.map
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/** One asynchronously-started E2B command projected onto the subprocess seam. */
|
|
2
|
+
import { PassThrough, Writable } from 'node:stream';
|
|
3
|
+
import type { SubprocessHandle, SubprocessOutcome, SubprocessSpawnSpec } from '@deepseek-ai/dsh-subprocess';
|
|
4
|
+
import type E2BSandboxService from '@deepseek-ai/dsh-e2b';
|
|
5
|
+
/** E2B-backed subprocess handle with deferred remote PID acquisition. */
|
|
6
|
+
export declare class E2BSubprocessHandle implements SubprocessHandle {
|
|
7
|
+
private readonly runtime;
|
|
8
|
+
private readonly spec;
|
|
9
|
+
readonly stateDir: string;
|
|
10
|
+
private readonly pollMs;
|
|
11
|
+
readonly stdin: Writable | undefined;
|
|
12
|
+
readonly stdout: PassThrough | undefined;
|
|
13
|
+
readonly stderr: PassThrough | undefined;
|
|
14
|
+
readonly collected: SubprocessHandle['collected'];
|
|
15
|
+
readonly done: Promise<SubprocessOutcome>;
|
|
16
|
+
private readonly commandState;
|
|
17
|
+
private readonly readyState;
|
|
18
|
+
private readonly stdoutDecoder;
|
|
19
|
+
private readonly stderrDecoder;
|
|
20
|
+
private readonly terminationController;
|
|
21
|
+
/** Releases output waits that survive the command outcome, so blocked SDK callbacks settle. */
|
|
22
|
+
private readonly outputReleased;
|
|
23
|
+
private readonly stdoutReader;
|
|
24
|
+
private readonly stderrReader;
|
|
25
|
+
private readonly paths;
|
|
26
|
+
private controlEnvs;
|
|
27
|
+
private remotePid;
|
|
28
|
+
private outputTransportError;
|
|
29
|
+
private outputDrainExpired;
|
|
30
|
+
private stateDirectoryCreated;
|
|
31
|
+
private quiescenceProven;
|
|
32
|
+
private terminationAttempt;
|
|
33
|
+
private terminationFailure;
|
|
34
|
+
private terminationSignal;
|
|
35
|
+
/**
|
|
36
|
+
* Begin an E2B command without blocking the synchronous subprocess spawn call.
|
|
37
|
+
* @param runtime - Shared E2B sandbox owner.
|
|
38
|
+
* @param spec - Fully resolved subprocess request.
|
|
39
|
+
* @param stateDir - Remote directory retaining process identity, status, and valid spills.
|
|
40
|
+
* @param pollMs - Remote status/liveness poll cadence.
|
|
41
|
+
*/
|
|
42
|
+
constructor(runtime: E2BSandboxService, spec: SubprocessSpawnSpec, stateDir: string, pollMs: number);
|
|
43
|
+
/** Remote process id after start; `-1` while E2B startup is pending or after it fails. */
|
|
44
|
+
get pid(): number;
|
|
45
|
+
/** @inheritdoc */
|
|
46
|
+
terminate(): void;
|
|
47
|
+
/** @inheritdoc */
|
|
48
|
+
waitForExit(signal?: AbortSignal): Promise<boolean>;
|
|
49
|
+
private readonly onAbort;
|
|
50
|
+
private markQuiescent;
|
|
51
|
+
private run;
|
|
52
|
+
private prepareState;
|
|
53
|
+
private writeBatchStdin;
|
|
54
|
+
private dispatchOutput;
|
|
55
|
+
private writeOutput;
|
|
56
|
+
private waitForProcessGroupId;
|
|
57
|
+
private waitForCommand;
|
|
58
|
+
private commandOutcome;
|
|
59
|
+
private rollbackPublishedFailure;
|
|
60
|
+
private rollbackUnpublishedGroup;
|
|
61
|
+
private terminateRemote;
|
|
62
|
+
private terminateRemoteInSandbox;
|
|
63
|
+
private terminateGroup;
|
|
64
|
+
private forceKillGroup;
|
|
65
|
+
private waitForGroupExit;
|
|
66
|
+
private throwTerminationFailure;
|
|
67
|
+
private groupAlive;
|
|
68
|
+
private finalizeSpills;
|
|
69
|
+
private removeFailedState;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=process.d.ts.map
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared remote-control helpers for the E2B subprocess adapter: SDK option
|
|
3
|
+
* shaping, poll ticks, and the one tolerant process-group signal used by both
|
|
4
|
+
* the ordinary-process and terminal teardown ladders.
|
|
5
|
+
*/
|
|
6
|
+
import type { Sandbox } from '@deepseek-ai/dsh-e2b';
|
|
7
|
+
/**
|
|
8
|
+
* Normalize an unknown rejection into an Error.
|
|
9
|
+
* @param error - Any thrown or rejected value.
|
|
10
|
+
* @returns The value itself when already an Error, else a stringified wrapper.
|
|
11
|
+
*/
|
|
12
|
+
export declare function asError(error: unknown): Error;
|
|
13
|
+
/**
|
|
14
|
+
* Shape the optional-signal SDK options object.
|
|
15
|
+
* @param signal - Optional cancellation for one SDK request.
|
|
16
|
+
* @returns An options fragment that omits an undefined signal.
|
|
17
|
+
*/
|
|
18
|
+
export declare function signalOpts(signal: AbortSignal | undefined): {
|
|
19
|
+
signal?: AbortSignal;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Shape control-shell command options with the isolated HOME override.
|
|
23
|
+
* @param envs - Explicit environment entries for the control command.
|
|
24
|
+
* @param signal - Optional cancellation for the SDK request.
|
|
25
|
+
* @returns Options for `sandbox.commands.run` control invocations.
|
|
26
|
+
*/
|
|
27
|
+
export declare function commandOpts(envs: Record<string, string>, signal?: AbortSignal): {
|
|
28
|
+
envs: Record<string, string>;
|
|
29
|
+
signal?: AbortSignal;
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Resolve after one duration.
|
|
33
|
+
* @param ms - Milliseconds to wait.
|
|
34
|
+
* @returns Settles after the timeout.
|
|
35
|
+
*/
|
|
36
|
+
export declare function delay(ms: number): Promise<void>;
|
|
37
|
+
/**
|
|
38
|
+
* Wait one poll interval or until the signal aborts.
|
|
39
|
+
* @param pollMs - Poll cadence in milliseconds.
|
|
40
|
+
* @param signal - Optional abort that ends the wait early.
|
|
41
|
+
* @returns `true` after a full tick, `false` when aborted first.
|
|
42
|
+
*/
|
|
43
|
+
export declare function waitTick(pollMs: number, signal?: AbortSignal): Promise<boolean>;
|
|
44
|
+
/**
|
|
45
|
+
* Signal remote process groups, tolerating the shared teardown outcomes: a
|
|
46
|
+
* nonzero `kill` (groups already gone) and a disappeared sandbox. Both the
|
|
47
|
+
* pgid-keyed process ladder and the sid-keyed terminal ladder deliver signals
|
|
48
|
+
* through this single tolerance so they cannot drift apart.
|
|
49
|
+
* @param sandbox - Live SDK handle.
|
|
50
|
+
* @param envs - Control-shell environment entries.
|
|
51
|
+
* @param groups - Positive process-group ids to signal.
|
|
52
|
+
* @param signal - `TERM` or `KILL`.
|
|
53
|
+
*/
|
|
54
|
+
export declare function signalRemoteGroups(sandbox: Sandbox, envs: Record<string, string>, groups: readonly number[], signal: 'TERM' | 'KILL'): Promise<void>;
|
|
55
|
+
//# sourceMappingURL=remote.d.ts.map
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/** E2B PTY allocation and process-session ownership for the subprocess seam. */
|
|
2
|
+
import { PassThrough } from 'node:stream';
|
|
3
|
+
import type { CommandHandle, CommandResult, Sandbox } from '@deepseek-ai/dsh-e2b';
|
|
4
|
+
import type { SubprocessOutcome, SubprocessTerminalForeground, SubprocessTerminalHandle, SubprocessTerminalSignal, SubprocessTerminalSpawnSpec } from '@deepseek-ai/dsh-subprocess';
|
|
5
|
+
import type E2BSandboxService from '@deepseek-ai/dsh-e2b';
|
|
6
|
+
/** One E2B PTY and all process groups in its remote process session. */
|
|
7
|
+
export declare class E2BTerminalHandle implements SubprocessTerminalHandle {
|
|
8
|
+
private readonly sandbox;
|
|
9
|
+
private readonly handle;
|
|
10
|
+
readonly output: PassThrough;
|
|
11
|
+
private readonly completion;
|
|
12
|
+
private readonly sessionId;
|
|
13
|
+
private readonly controlEnvs;
|
|
14
|
+
private readonly stateDir;
|
|
15
|
+
private readonly graceMs;
|
|
16
|
+
private readonly pollMs;
|
|
17
|
+
readonly pid: number;
|
|
18
|
+
readonly done: Promise<SubprocessOutcome>;
|
|
19
|
+
private topLevelExited;
|
|
20
|
+
private cleanup;
|
|
21
|
+
private readonly operationController;
|
|
22
|
+
private readonly operations;
|
|
23
|
+
private terminationSignal;
|
|
24
|
+
constructor(sandbox: Sandbox, handle: CommandHandle, output: PassThrough, completion: Promise<CommandResult>, sessionId: number, controlEnvs: Record<string, string>, stateDir: string, graceMs: number, pollMs: number);
|
|
25
|
+
/** @inheritdoc */
|
|
26
|
+
write(data: string): Promise<void>;
|
|
27
|
+
/** @inheritdoc */
|
|
28
|
+
inspectForeground(): Promise<SubprocessTerminalForeground | undefined>;
|
|
29
|
+
/** @inheritdoc */
|
|
30
|
+
signalForeground(signal: SubprocessTerminalSignal): Promise<number>;
|
|
31
|
+
/** @inheritdoc */
|
|
32
|
+
terminate(): Promise<void>;
|
|
33
|
+
private inspectForegroundOnce;
|
|
34
|
+
private trackOperation;
|
|
35
|
+
private closeAfterOperations;
|
|
36
|
+
private waitForCommand;
|
|
37
|
+
private closeOnce;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Allocate an E2B PTY, replace its bootstrap shell with the requested argv,
|
|
41
|
+
* and return only after the private runner has published readiness.
|
|
42
|
+
* @param runtime - Shared E2B sandbox owner.
|
|
43
|
+
* @param spec - Fully specified terminal-process request.
|
|
44
|
+
* @param stateDir - Private remote directory for one startup transaction.
|
|
45
|
+
* @param pollMs - Remote session liveness poll cadence.
|
|
46
|
+
* @returns The live subprocess terminal handle.
|
|
47
|
+
*/
|
|
48
|
+
export declare function spawnE2BTerminal(runtime: E2BSandboxService, spec: SubprocessTerminalSpawnSpec, stateDir: string, pollMs: number): Promise<E2BTerminalHandle>;
|
|
49
|
+
//# sourceMappingURL=terminal.d.ts.map
|
package/package.json
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@deepseek-ai/dsh-subprocess-e2b",
|
|
3
|
+
"description": "E2B subprocess implementation for DeepSeek Harness",
|
|
4
|
+
"version": "0.0.1-rc.1",
|
|
5
|
+
"publishConfig": {
|
|
6
|
+
"access": "restricted"
|
|
7
|
+
},
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "git+https://github.com/deepseek-ai/deepseek-harness.git",
|
|
11
|
+
"directory": "packages/e2b/subprocess-e2b"
|
|
12
|
+
},
|
|
13
|
+
"type": "module",
|
|
14
|
+
"main": "lib/index.js",
|
|
15
|
+
"types": "lib/types/index.d.ts",
|
|
16
|
+
"exports": {
|
|
17
|
+
".": {
|
|
18
|
+
"types": "./lib/types/index.d.ts",
|
|
19
|
+
"default": "./lib/index.js"
|
|
20
|
+
},
|
|
21
|
+
"./invariant": {
|
|
22
|
+
"types": "./lib/types/invariant.d.ts",
|
|
23
|
+
"default": "./lib/invariant.js"
|
|
24
|
+
},
|
|
25
|
+
"./src/*": "./src/*",
|
|
26
|
+
"./package.json": "./package.json"
|
|
27
|
+
},
|
|
28
|
+
"files": [
|
|
29
|
+
"lib/index.js",
|
|
30
|
+
"lib/invariant.js",
|
|
31
|
+
"lib/types/**/*.d.ts"
|
|
32
|
+
],
|
|
33
|
+
"license": "BSD-3-Clause",
|
|
34
|
+
"peerDependencies": {
|
|
35
|
+
"@deepseek-ai/dsh-invariants": "^0.0.1-rc.1",
|
|
36
|
+
"@deepseek-ai/dsh-subprocess": "^0.0.1-rc.1",
|
|
37
|
+
"@deepseek-ai/dsh-e2b": "^0.0.1-rc.1",
|
|
38
|
+
"@deepseek-ai/cordis": "^4.0.1-rc.1",
|
|
39
|
+
"@deepseek-ai/dsh-timeout": "^0.0.1-rc.1"
|
|
40
|
+
},
|
|
41
|
+
"dependencies": {
|
|
42
|
+
"@deepseek-ai/schemastery": "^3.18.1-rc.1"
|
|
43
|
+
},
|
|
44
|
+
"devDependencies": {
|
|
45
|
+
"@deepseek-ai/dsh-e2b": "^0.0.1-rc.1",
|
|
46
|
+
"@deepseek-ai/dsh-invariants": "^0.0.1-rc.1",
|
|
47
|
+
"@deepseek-ai/dsh-subprocess": "^0.0.1-rc.1",
|
|
48
|
+
"@deepseek-ai/dsh-timeout": "^0.0.1-rc.1",
|
|
49
|
+
"@deepseek-ai/cordis": "^4.0.1-rc.1"
|
|
50
|
+
}
|
|
51
|
+
}
|