dsh-bash-terminal-ts 0.2.5

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.
@@ -0,0 +1,260 @@
1
+ /** The terminal backends this plugin exposes. */
2
+ export type ShellId = "powershell" | "gitbash" | "msys2" | "wsl";
3
+ /** Permissive node of the DSH JSON-schema dialect used in tool output declarations. */
4
+ export interface JsonSchemaNode {
5
+ type?: string;
6
+ required?: boolean;
7
+ const?: string;
8
+ enum?: readonly string[];
9
+ properties?: Record<string, JsonSchemaNode>;
10
+ items?: JsonSchemaNode;
11
+ oneOf?: JsonSchemaNode[];
12
+ additionalProperties?: boolean;
13
+ }
14
+ /** Model-facing content block (subset). */
15
+ export interface ContentBlock {
16
+ type: string;
17
+ text?: string;
18
+ }
19
+ /** One entry of a tool's `parameters` declaration. */
20
+ export interface ToolParameterProperty {
21
+ type: string;
22
+ required?: boolean;
23
+ description?: string;
24
+ enum?: readonly string[];
25
+ }
26
+ export interface ToolParameters {
27
+ type: "object";
28
+ properties: Record<string, ToolParameterProperty>;
29
+ }
30
+ /** Flat parameter map as accepted by defineTool (wrapped into `ToolParameters` by the runtime). */
31
+ export type ToolParameterMap = Record<string, ToolParameterProperty>;
32
+ /** The exec object every tool body receives. */
33
+ export interface ToolRunContext {
34
+ /** Caller cancellation; observe or forward it in async work. */
35
+ signal: AbortSignal;
36
+ callId?: string;
37
+ agent?: ExecAgent;
38
+ }
39
+ /** The agent slice of exec this plugin reads (session cwd) or passes on (owner). */
40
+ export interface ExecAgent {
41
+ session: {
42
+ header: {
43
+ cwd?: string;
44
+ };
45
+ };
46
+ }
47
+ export interface ToolResult {
48
+ content: ContentBlock[];
49
+ isError?: boolean;
50
+ }
51
+ /** Tool output view handed to presentResult. */
52
+ export interface CallView {
53
+ card: string;
54
+ [key: string]: unknown;
55
+ }
56
+ /** A fully specified tool: schema, canonical output, body, presentations. */
57
+ export interface ToolSpec<TValue> {
58
+ name: string;
59
+ description: string;
60
+ parameters: ToolParameterMap;
61
+ output: {
62
+ schema: JsonSchemaNode;
63
+ render: (args: unknown, value: TValue) => ContentBlock[];
64
+ };
65
+ execute: (args: Record<string, unknown>, exec: ToolRunContext) => Promise<TValue>;
66
+ presentCall?: (args: Record<string, unknown>) => CallView;
67
+ presentResult?: (args: Record<string, unknown>, result: ToolResult) => CallView | undefined;
68
+ }
69
+ /** Canonical output declaration, erased of the tool's value type (registry face). */
70
+ export interface ToolOutputDefinition {
71
+ schema: JsonSchemaNode;
72
+ render: (args: unknown, value: unknown) => ContentBlock[];
73
+ }
74
+ /** What defineTool hands back (opaque to the plugin; registered as-is). */
75
+ export interface ToolDefinition {
76
+ name: string;
77
+ description: string;
78
+ parameters: ToolParameters;
79
+ output: ToolOutputDefinition;
80
+ execute: (args: Record<string, unknown>, exec: ToolRunContext) => Promise<unknown>;
81
+ }
82
+ export interface LoggerSeam {
83
+ info?: (message: string) => void;
84
+ warn?: (message: string) => void;
85
+ error?: (message: string) => void;
86
+ }
87
+ export interface SystemPromptSection {
88
+ name: string;
89
+ order: number;
90
+ text: string;
91
+ }
92
+ export interface SystemPromptSeam {
93
+ section(spec: SystemPromptSection): unknown;
94
+ }
95
+ export interface ToolsSeam {
96
+ register(tool: ToolDefinition): unknown;
97
+ }
98
+ /** A tool entry seen during system-prompt assembly (description re-render). */
99
+ export interface AssembledToolRef {
100
+ name: string;
101
+ description?: string;
102
+ }
103
+ export interface PromptAssembly {
104
+ tools: AssembledToolRef[];
105
+ [key: string]: unknown;
106
+ }
107
+ /** Type of the system-prompt/assemble waterfall listener. */
108
+ export type AssembleHandler = (assembly: PromptAssembly, context: unknown, next: () => Promise<PromptAssembly>) => Promise<PromptAssembly>;
109
+ export interface ShellEnvSeam {
110
+ collect(exec: ToolRunContext): Record<string, string> | undefined;
111
+ }
112
+ export interface SettingsScope<T> {
113
+ get(): T;
114
+ }
115
+ export interface SettingsSeam {
116
+ register<T>(namespace: string, schema: unknown, options: {
117
+ base: T;
118
+ }): SettingsScope<T>;
119
+ }
120
+ export interface SandboxPolicy {
121
+ mode: string;
122
+ workspaceRoot?: string;
123
+ sessionId?: string;
124
+ }
125
+ export interface SandboxPolicySeam {
126
+ resolve(scope: {
127
+ session?: unknown;
128
+ }): SandboxPolicy;
129
+ }
130
+ export interface SandboxConfineResult {
131
+ argv: string[];
132
+ enforcement: string;
133
+ denialSignatures?: string[];
134
+ }
135
+ export interface SandboxSeam {
136
+ confine(argv: string[], policy: SandboxPolicy): SandboxConfineResult;
137
+ }
138
+ /** Sandbox facts embedded in a canonical result. */
139
+ export interface SandboxFacts {
140
+ mode: string;
141
+ enforcement: string;
142
+ denialSignatures?: string[];
143
+ denied?: boolean;
144
+ }
145
+ export interface EscalationRequest {
146
+ requestedMode: string;
147
+ justification: string;
148
+ effectiveMode: string;
149
+ subject: string;
150
+ }
151
+ export interface EscalationContext {
152
+ approver?: unknown;
153
+ agent?: unknown;
154
+ callId?: string;
155
+ toolName: string;
156
+ signal: AbortSignal;
157
+ }
158
+ export interface JobHooks {
159
+ cancel: () => void;
160
+ done: Promise<unknown>;
161
+ readOutput: () => string;
162
+ }
163
+ export interface JobSpec {
164
+ kind: string;
165
+ label: string;
166
+ owner?: unknown;
167
+ run: () => JobHooks;
168
+ }
169
+ export interface JobsRegistry {
170
+ start(spec: JobSpec): string;
171
+ }
172
+ /** Executable paths per backend; undefined when a backend is not installed. */
173
+ export interface ResolvedPaths {
174
+ pwsh?: string;
175
+ gitbash?: string;
176
+ msys2?: string;
177
+ wsl?: string;
178
+ }
179
+ export interface CollectSpec {
180
+ maxBytes: number;
181
+ spill: {
182
+ maxBytes: number;
183
+ };
184
+ }
185
+ export interface StdioSpec {
186
+ stdin: {
187
+ data: string;
188
+ } | "ignore";
189
+ stdout: CollectSpec;
190
+ stderr: CollectSpec;
191
+ }
192
+ export interface SubprocessSpawnSpec {
193
+ argv: string[];
194
+ cwd?: string;
195
+ stdio: StdioSpec;
196
+ graceMs: number;
197
+ signal?: AbortSignal;
198
+ env?: Record<string, string | undefined>;
199
+ }
200
+ export interface CollectedStream {
201
+ readFrom(offset: number): {
202
+ text: string;
203
+ lossy: boolean;
204
+ nextOffset: number;
205
+ spillPath?: string;
206
+ };
207
+ }
208
+ export interface SubprocessOutcome {
209
+ exitCode: number | null;
210
+ signal: string | null;
211
+ }
212
+ export interface SubprocessHandle {
213
+ collected: {
214
+ stdout: CollectedStream;
215
+ stderr: CollectedStream;
216
+ };
217
+ done: Promise<SubprocessOutcome>;
218
+ terminate: () => void | Promise<void>;
219
+ }
220
+ export interface TerminalSpawnSpec {
221
+ argv: string[];
222
+ cwd: string;
223
+ env: Record<string, string | undefined>;
224
+ rows: number;
225
+ cols: number;
226
+ graceMs?: number;
227
+ }
228
+ export interface TerminalHandle {
229
+ pid: number;
230
+ output: NodeJS.ReadableStream;
231
+ done: Promise<SubprocessOutcome>;
232
+ write(data: string): void | Promise<void>;
233
+ signalForeground(sig: string): void | Promise<unknown>;
234
+ terminate(): Promise<void>;
235
+ }
236
+ export interface SubprocessSeam {
237
+ spawn(spec: SubprocessSpawnSpec): SubprocessHandle;
238
+ spawnTerminal?(spec: TerminalSpawnSpec): Promise<TerminalHandle>;
239
+ }
240
+ export interface ApprovalSeam {
241
+ request(input: unknown): Promise<unknown>;
242
+ }
243
+ /**
244
+ * The structural context face dsh-bash-terminal-ts programs against: the union
245
+ * of every `ctx.*` member touched by src/index.ts and src/terminal.ts.
246
+ */
247
+ export interface BashTerminalContext {
248
+ logger?: LoggerSeam;
249
+ systemPrompt: SystemPromptSeam;
250
+ tools: ToolsSeam;
251
+ on(event: "system-prompt/assemble", handler: AssembleHandler): void;
252
+ shellEnv: ShellEnvSeam;
253
+ settings: SettingsSeam;
254
+ sandboxPolicy: SandboxPolicySeam;
255
+ sandbox: SandboxSeam;
256
+ get(key: string): unknown;
257
+ effect(fn: () => void | (() => void), name?: string): unknown;
258
+ /** Injected via `inject: ["subprocess"]`; tests may defer assignment. */
259
+ subprocess: SubprocessSeam | null;
260
+ }
@@ -0,0 +1,9 @@
1
+ // Hand-written boundary types for the DSH seams this plugin consumes.
2
+ //
3
+ // The @deepseek-ai/* packages ship their own .d.ts, but their full generic
4
+ // surface (cordis Context augmentation, agent/session graphs) is far wider
5
+ // than what a plugin touches. These structural types describe exactly the
6
+ // face this plugin programs against — call them the plugin's side of the
7
+ // contract. Value imports stay on the real packages (see ./dsh.ts); only
8
+ // the shapes live here, so peer version drift cannot ripple into this tree.
9
+ export {};
package/lib/dsh.d.ts ADDED
@@ -0,0 +1,33 @@
1
+ import { HarnessError } from "@deepseek-ai/dsh-llm";
2
+ import { parseExitStatus } from "@deepseek-ai/dsh-shell";
3
+ import { clampTimeout, deadline, timeoutOf } from "@deepseek-ai/dsh-timeout";
4
+ import type { EscalationContext, EscalationRequest, JsonSchemaNode, ToolDefinition, ToolSpec } from "./dsh-types.js";
5
+ export { HarnessError, parseExitStatus, clampTimeout, deadline, timeoutOf };
6
+ /** Wrap a fully specified tool spec into a registrable tool definition. */
7
+ export declare const defineTool: <TValue>(spec: ToolSpec<TValue>) => ToolDefinition;
8
+ /** Sentinel code stamped on aborted tool calls. */
9
+ export declare const TOOL_ABORTED: string;
10
+ /** Escalation modes advertised by the official sandbox seam. */
11
+ export declare const ESCALATION_TARGETS: readonly string[];
12
+ /** Official sandbox escalation (mirrors dsh-tool-bash / dsh-tool-pwsh). */
13
+ export declare const approveEscalation: (request: EscalationRequest, context: EscalationContext) => Promise<string>;
14
+ /** Fail-closed validation of the sandbox_permissions / justification pair. */
15
+ export declare const validateEscalationArgs: (permissions: unknown, justification: unknown) => void;
16
+ /** Marker appended to denied results so the UI can offer escalation. */
17
+ export declare const sandboxDenialMarker: (mode: string) => string;
18
+ /** Marker appended to denied results pointing at the escalation affordance. */
19
+ export declare const escalationHintMarker: (subject: string) => string;
20
+ /** Runtime config schema factory (schemastery fork). */
21
+ export interface SchemasterySchema {
22
+ default(value: unknown): SchemasterySchema;
23
+ }
24
+ export interface Schemastery {
25
+ object(fields: Record<string, SchemasterySchema>): SchemasterySchema;
26
+ string(): SchemasterySchema;
27
+ number(): SchemasterySchema;
28
+ const(value: string): SchemasterySchema;
29
+ union(schemas: SchemasterySchema[]): SchemasterySchema;
30
+ }
31
+ export declare const z: Schemastery;
32
+ /** Re-exported for consumers that want to validate output schemas. */
33
+ export type { JsonSchemaNode };
package/lib/dsh.js ADDED
@@ -0,0 +1,29 @@
1
+ // Value bridge to the @deepseek-ai/* peer packages.
2
+ //
3
+ // Peer packages ship their own .d.ts, but this plugin's contract with them is
4
+ // a narrow, stable face (see ./dsh-types.ts). Every import passes through one
5
+ // narrow cast here, so the plugin compiles against any 0.1.x peer whose
6
+ // runtime behavior matches the face — no deep generic coupling, no version
7
+ // drift leaking into the rewrite.
8
+ import * as toolsNs from "@deepseek-ai/dsh-tools";
9
+ import * as sandboxNs from "@deepseek-ai/dsh-sandbox";
10
+ import { HarnessError } from "@deepseek-ai/dsh-llm";
11
+ import { parseExitStatus } from "@deepseek-ai/dsh-shell";
12
+ import { clampTimeout, deadline, timeoutOf } from "@deepseek-ai/dsh-timeout";
13
+ import zDefault from "@deepseek-ai/schemastery";
14
+ export { HarnessError, parseExitStatus, clampTimeout, deadline, timeoutOf };
15
+ /** Wrap a fully specified tool spec into a registrable tool definition. */
16
+ export const defineTool = toolsNs.defineTool;
17
+ /** Sentinel code stamped on aborted tool calls. */
18
+ export const TOOL_ABORTED = toolsNs.TOOL_ABORTED;
19
+ /** Escalation modes advertised by the official sandbox seam. */
20
+ export const ESCALATION_TARGETS = sandboxNs.ESCALATION_TARGETS;
21
+ /** Official sandbox escalation (mirrors dsh-tool-bash / dsh-tool-pwsh). */
22
+ export const approveEscalation = sandboxNs.approveEscalation;
23
+ /** Fail-closed validation of the sandbox_permissions / justification pair. */
24
+ export const validateEscalationArgs = sandboxNs.validateEscalationArgs;
25
+ /** Marker appended to denied results so the UI can offer escalation. */
26
+ export const sandboxDenialMarker = sandboxNs.sandboxDenialMarker;
27
+ /** Marker appended to denied results pointing at the escalation affordance. */
28
+ export const escalationHintMarker = sandboxNs.escalationHintMarker;
29
+ export const z = zDefault;
package/lib/index.d.ts ADDED
@@ -0,0 +1,201 @@
1
+ import type { BashTerminalContext, ExecAgent, JobsRegistry, JsonSchemaNode, ResolvedPaths, SandboxFacts, SandboxPolicy, ShellId, ToolRunContext } from "./dsh-types.js";
2
+ /** Stable Cordis plugin name. */
3
+ export declare const name = "bash-terminal";
4
+ /** Services required before the tool can register. */
5
+ export declare const inject: string[];
6
+ /** The terminal backends this tool exposes, in catalog order. */
7
+ export declare const SHELLS: readonly ["powershell", "gitbash", "msys2", "wsl"];
8
+ /** The backend used when the caller does not name one. */
9
+ export declare const DEFAULT_SHELL: ShellId;
10
+ /** Settings namespace backing the user-chosen default terminal. */
11
+ export declare const SETTINGS_NAMESPACE = "bash-terminal";
12
+ /** Static shape of the runtime configuration schema. */
13
+ export interface ConfigValues {
14
+ defaultShell: string;
15
+ timeoutMs: number;
16
+ maxTimeoutMs: number;
17
+ pwshPath: string;
18
+ gitBashPath: string;
19
+ msys2Path: string;
20
+ wslPath: string;
21
+ }
22
+ /** Runtime configuration schema. */
23
+ export declare const Config: import("./dsh.js").SchemasterySchema;
24
+ declare function candidateExists(candidate: string): boolean;
25
+ /** Well-known PowerShell install locations plus PATH entries, newest first. */
26
+ export declare function candidatePwshPaths(env?: NodeJS.ProcessEnv): string[];
27
+ /**
28
+ * Git for Windows locations, then PATH bash.exe entries EXCLUDING the
29
+ * System32 launcher (c:\\windows\\system32\\bash.exe is the WSL
30
+ * forwarder, not a Git Bash shell).
31
+ */
32
+ export declare function candidateGitBashPaths(env?: NodeJS.ProcessEnv): string[];
33
+ /**
34
+ * MSYS2 locations, in preference order: the real `bash.exe` under usr\bin first,
35
+ * then bin\bash.exe, and `msys2.exe` dead last.
36
+ *
37
+ * msys2.exe is NOT a usable backend for piped execution: it is the console-
38
+ * allocating Cygwin launcher, so a spawn with piped stdio returns exit 0 with
39
+ * zero bytes on both stdout and stderr (measured on MSYS2 with bash 5.3.15).
40
+ * Keeping it in the list only as a last-resort fallback preserves the path the
41
+ * config docs reference, but a working bash.exe always wins.
42
+ *
43
+ * MSYS2 uses the same Cygwin/MSYS2 runtime as Git Bash, so it cannot run under
44
+ * the DSH Windows ACL restricted-token sandbox.
45
+ */
46
+ export declare function candidateMsys2Paths(env?: NodeJS.ProcessEnv): string[];
47
+ export declare function defaultWslPath(env?: NodeJS.ProcessEnv): string;
48
+ /** Executable paths, possibly undefined when a backend is not installed. */
49
+ export type { ResolvedPaths };
50
+ type PathConfig = Partial<Pick<ConfigValues, "pwshPath" | "gitBashPath" | "msys2Path" | "wslPath">>;
51
+ export declare function resolveAllPaths(config?: PathConfig, env?: NodeJS.ProcessEnv): ResolvedPaths;
52
+ export declare function buildArgv(shell: string, command: string, paths: ResolvedPaths, distro?: string): Array<string | undefined>;
53
+ /**
54
+ * Merge the DSH_* environment over the process environment. For WSL, only
55
+ * variables explicitly listed in WSLENV cross the boundary, so every DSH_* key is
56
+ * appended to it (WSLENV is a `:` separated VAR[/flag] list).
57
+ *
58
+ * WSLENV usually already exists for reasons unrelated to us -- Windows Terminal
59
+ * exports e.g. `WT_SESSION:WT_PROFILE_ID:` -- so the list is layered rather than
60
+ * rebuilt, or those entries would be silently dropped from every WSL call.
61
+ * Callers that spawn through a seam which replaces the parent environment
62
+ * wholesale (the PTY path) must pass the inherited value explicitly.
63
+ *
64
+ * @param inheritedWslenv - the WSLENV the child would otherwise inherit.
65
+ */
66
+ export declare function buildEnv(shell: string, dshEnv?: Record<string, string>, inheritedWslenv?: string | undefined): Record<string, string | undefined>;
67
+ export interface SpawnResolution {
68
+ command: string;
69
+ workdir: string;
70
+ timeoutMs: number;
71
+ stdoutMaxBytes: number;
72
+ stdin?: string;
73
+ }
74
+ declare function spawnSpec(resolved: SpawnResolution, argv: string[], env: Record<string, string | undefined>, signal: AbortSignal): {
75
+ readonly argv: string[];
76
+ readonly cwd: string;
77
+ readonly stdio: {
78
+ readonly stdin: "ignore" | {
79
+ data: string;
80
+ };
81
+ readonly stdout: {
82
+ maxBytes: number;
83
+ spill: {
84
+ maxBytes: number;
85
+ };
86
+ };
87
+ readonly stderr: {
88
+ maxBytes: number;
89
+ spill: {
90
+ maxBytes: number;
91
+ };
92
+ };
93
+ };
94
+ readonly graceMs: 3000;
95
+ readonly signal: AbortSignal;
96
+ readonly env: Record<string, string | undefined>;
97
+ };
98
+ interface StreamOutput {
99
+ text: string;
100
+ truncated: boolean;
101
+ spillPath?: string;
102
+ }
103
+ export interface ForegroundOutcome {
104
+ exitCode: number | null;
105
+ signal: string | null;
106
+ timedOut: boolean;
107
+ aborted: boolean;
108
+ timeoutMs: number;
109
+ stdout: StreamOutput;
110
+ stderr: StreamOutput;
111
+ }
112
+ declare function runForeground(ctx: BashTerminalContext, argv: string[], resolved: SpawnResolution, env: Record<string, string | undefined>, signal: AbortSignal, timeoutMs: number): Promise<ForegroundOutcome>;
113
+ export interface ProcessRead {
114
+ delta: string;
115
+ lossy: boolean;
116
+ stdoutSpillPath?: string;
117
+ stderrSpillPath?: string;
118
+ }
119
+ interface BackgroundProc {
120
+ status: "running" | "killed" | "completed";
121
+ exitCode: number | null;
122
+ signal: string | null;
123
+ done: Promise<void>;
124
+ readOutput(): ProcessRead;
125
+ kill(): boolean;
126
+ }
127
+ declare function startBackground(ctx: BashTerminalContext, argv: string[], resolved: SpawnResolution, env: Record<string, string | undefined>, signal: AbortSignal): BackgroundProc;
128
+ declare function processOutcome(proc: BackgroundProc): {
129
+ status: string;
130
+ detail: string;
131
+ };
132
+ export interface RenderedResult {
133
+ stdout: StreamOutput;
134
+ stderr: StreamOutput;
135
+ exitCode: number | null;
136
+ signal: string | null;
137
+ timedOut: boolean;
138
+ timeoutMs: number;
139
+ }
140
+ export declare function renderResult(result: RenderedResult): string;
141
+ /** Model-facing lead sentence for each backend. The user's default terminal is
142
+ * stated up front so the model never has to guess which syntax applies. */
143
+ export declare const SHELL_DESCRIPTIONS: Record<ShellId, string>;
144
+ /**
145
+ * Render the model-facing tool description for one backend. The backend is
146
+ * whatever the user chose in Settings -> General -> Default terminal; the
147
+ * description names it explicitly so the model writes the right syntax.
148
+ * @param backgroundEnabled - advertise `run_in_background` controls.
149
+ * @param shell - active backend; unknown values fall back to the default.
150
+ */
151
+ export declare function toolDescription(backgroundEnabled: boolean, shell?: string): string;
152
+ /** The shell tool's arguments after runtime validation. */
153
+ export type ValidatedShellArgs = {
154
+ command: string;
155
+ description: string;
156
+ timeoutMs?: number;
157
+ distro?: string;
158
+ sandbox_permissions?: string;
159
+ justification?: string;
160
+ workdir?: string;
161
+ run_in_background?: boolean;
162
+ stdin?: string;
163
+ };
164
+ export declare function validateArgs(args: Record<string, unknown>): ValidatedShellArgs;
165
+ declare function resolveWorkdir(modelWorkdir: string | undefined, exec: ToolRunContext): string | undefined;
166
+ export interface ForegroundResult {
167
+ kind: "foreground";
168
+ exitCode: number | null;
169
+ signal: string | null;
170
+ timedOut: boolean;
171
+ aborted: boolean;
172
+ timeoutMs: number;
173
+ stdout: StreamOutput;
174
+ stderr: StreamOutput;
175
+ sandbox?: SandboxFacts;
176
+ }
177
+ export interface BackgroundResult {
178
+ kind: "background";
179
+ jobId: string;
180
+ }
181
+ export type ShellToolResult = ForegroundResult | BackgroundResult;
182
+ export declare function apply(ctx: BashTerminalContext, config?: Partial<ConfigValues>): void;
183
+ export declare const internals: {
184
+ candidateExists: typeof candidateExists;
185
+ resolveAllPaths: typeof resolveAllPaths;
186
+ resolveWorkdir: typeof resolveWorkdir;
187
+ renderResult: typeof renderResult;
188
+ processOutcome: typeof processOutcome;
189
+ startBackground: typeof startBackground;
190
+ runForeground: typeof runForeground;
191
+ spawnSpec: typeof spawnSpec;
192
+ buildEnv: typeof buildEnv;
193
+ buildArgv: typeof buildArgv;
194
+ validateArgs: typeof validateArgs;
195
+ toolDescription: typeof toolDescription;
196
+ SHELL_DESCRIPTIONS: Record<ShellId, string>;
197
+ DEFAULT_TIMEOUT_MS: number;
198
+ MAX_TIMEOUT_MS: number;
199
+ DEFAULT_MAX_OUTPUT_BYTES: number;
200
+ };
201
+ export type { ExecAgent, JobsRegistry, JsonSchemaNode, SandboxFacts, SandboxPolicy, ShellId, ToolRunContext };