@struktoai/mirage-dsh 0.0.7-alpha.2 → 0.0.7

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.
Files changed (41) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +28 -29
  3. package/cordis.patch.yml +38 -6
  4. package/dist/{chunk-M4JOF35U.js → chunk-FRF6WPLN.js} +133 -44
  5. package/dist/chunk-FRF6WPLN.js.map +1 -0
  6. package/dist/chunk-G2GHA2F6.js +211 -0
  7. package/dist/chunk-G2GHA2F6.js.map +1 -0
  8. package/dist/{chunk-QTBMLMKT.js → chunk-KUIV2Z3M.js} +243 -326
  9. package/dist/chunk-KUIV2Z3M.js.map +1 -0
  10. package/dist/{chunk-4CZV24HW.js → chunk-OHZACFWO.js} +36 -14
  11. package/dist/chunk-OHZACFWO.js.map +1 -0
  12. package/dist/{chunk-2F2PJ7D7.js → chunk-OZ2F4R6T.js} +74 -17
  13. package/dist/chunk-OZ2F4R6T.js.map +1 -0
  14. package/dist/chunk-QH5H3VND.js +110 -0
  15. package/dist/chunk-QH5H3VND.js.map +1 -0
  16. package/dist/chunk-T4BSJAGN.js +64 -0
  17. package/dist/chunk-T4BSJAGN.js.map +1 -0
  18. package/dist/{fs-B3Zi9oo6.d.ts → fs-BNOIFi9o.d.ts} +48 -4
  19. package/dist/index.d.ts +8 -3
  20. package/dist/index.js +15 -6
  21. package/dist/plugin/fs.d.ts +1 -1
  22. package/dist/plugin/fs.js +2 -2
  23. package/dist/plugin/service.d.ts +2 -1
  24. package/dist/plugin/service.js +1 -1
  25. package/dist/plugin/shell.d.ts +1 -1
  26. package/dist/plugin/shell.js +3 -2
  27. package/dist/plugin/spill-store.d.ts +3 -0
  28. package/dist/plugin/spill-store.js +8 -0
  29. package/dist/plugin/spill-store.js.map +1 -0
  30. package/dist/plugin/subprocess.d.ts +8 -0
  31. package/dist/plugin/subprocess.js +9 -0
  32. package/dist/plugin/subprocess.js.map +1 -0
  33. package/dist/{service-BK6NR_RX.d.ts → service-vCjLPYMI.d.ts} +29 -17
  34. package/dist/{shell-BTf2wsDy.d.ts → shell-BAyBocjm.d.ts} +25 -35
  35. package/dist/spill-store-BfljgRi0.d.ts +38 -0
  36. package/dist/subprocess-CInesMpR.d.ts +23 -0
  37. package/package.json +24 -12
  38. package/dist/chunk-2F2PJ7D7.js.map +0 -1
  39. package/dist/chunk-4CZV24HW.js.map +0 -1
  40. package/dist/chunk-M4JOF35U.js.map +0 -1
  41. package/dist/chunk-QTBMLMKT.js.map +0 -1
@@ -0,0 +1,211 @@
1
+ import {
2
+ StreamTail
3
+ } from "./chunk-OZ2F4R6T.js";
4
+
5
+ // src/subprocess.ts
6
+ import {
7
+ SubprocessRuntime
8
+ } from "@deepseek-ai/dsh-subprocess";
9
+ import { PassThrough } from "stream";
10
+ import { pipeline } from "stream/promises";
11
+ import { PathSpec } from "@struktoai/mirage-core/types";
12
+ function validateOutput(mode) {
13
+ if (mode === "pipe" || mode === "inherit") return;
14
+ if (!Number.isSafeInteger(mode.maxBytes) || mode.maxBytes < 0)
15
+ throw new Error("invalid output budget");
16
+ if (mode.spill !== void 0)
17
+ throw new Error("subprocess spill is unsupported; use ctx.spill for recovery");
18
+ }
19
+ function waitBounded(done, signal) {
20
+ if (signal?.aborted) return Promise.resolve(false);
21
+ return new Promise((resolve, reject) => {
22
+ const aborted = () => {
23
+ resolve(false);
24
+ };
25
+ signal?.addEventListener("abort", aborted, { once: true });
26
+ void done.then(() => {
27
+ resolve(true);
28
+ }, reject).finally(() => signal?.removeEventListener("abort", aborted));
29
+ });
30
+ }
31
+ var MirageSubprocess = class extends SubprocessRuntime {
32
+ constructor(ctx, config = {}) {
33
+ super(ctx);
34
+ this.config = config;
35
+ ctx.effect(() => async () => {
36
+ this.closed = true;
37
+ const handles = [...this.handles];
38
+ for (const handle of handles) handle.terminate();
39
+ await Promise.all(handles.map((handle) => handle.waitForExit()));
40
+ });
41
+ }
42
+ config;
43
+ static inject = ["mirage"];
44
+ handles = /* @__PURE__ */ new Set();
45
+ closed = false;
46
+ async resolveExecutable(command, env, signal) {
47
+ if (command.includes("/") && !command.startsWith("/"))
48
+ throw new Error("relative executable paths are unsupported");
49
+ signal?.throwIfAborted();
50
+ const ws = await this.ctx.mirage.ready;
51
+ this.checkWorld();
52
+ const child = ws.spawn(
53
+ { argv: ["which", command], ...env === void 0 ? {} : { env } },
54
+ this.config.sessionId
55
+ );
56
+ const abort = () => {
57
+ child.terminate();
58
+ };
59
+ signal?.addEventListener("abort", abort, { once: true });
60
+ try {
61
+ if (signal?.aborted) abort();
62
+ const result = await child.communicate();
63
+ signal?.throwIfAborted();
64
+ if (result.exitCode !== 0) throw new Error(`executable not found: ${command}`);
65
+ return new TextDecoder().decode(result.stdout).trim();
66
+ } finally {
67
+ signal?.removeEventListener("abort", abort);
68
+ }
69
+ }
70
+ spawn(spec) {
71
+ spec.signal?.throwIfAborted();
72
+ this.checkWorld();
73
+ if (this.closed) throw new Error("subprocess service is closed");
74
+ if (spec.argv.length === 0 || !spec.argv[0] || spec.argv.some((arg) => typeof arg !== "string" || arg.includes("\0")))
75
+ throw new Error("invalid argv");
76
+ if (!spec.cwd.startsWith("/") || spec.cwd.includes("\0"))
77
+ throw new Error("cwd must be an absolute workspace path");
78
+ if (!Number.isFinite(spec.graceMs) || spec.graceMs <= 0 || spec.graceMs > 2147483647)
79
+ throw new Error("invalid graceMs");
80
+ validateOutput(spec.stdio.stdout);
81
+ validateOutput(spec.stdio.stderr);
82
+ if (spec.stdio.control !== void 0)
83
+ throw new Error(
84
+ "a control channel is unsupported: a workspace process inherits no descriptors"
85
+ );
86
+ const env = {};
87
+ for (const [name, value] of Object.entries(spec.env ?? {})) {
88
+ if (value === void 0) throw new Error("environment tombstones are unsupported");
89
+ if (name.includes("=") || name.includes("\0") || value.includes("\0"))
90
+ throw new Error("invalid environment");
91
+ env[name] = value;
92
+ }
93
+ const stdin = spec.stdio.stdin === "pipe" ? new PassThrough() : void 0;
94
+ const stdout = spec.stdio.stdout === "pipe" ? new PassThrough() : void 0;
95
+ const stderr = spec.stdio.stderr === "pipe" ? new PassThrough() : void 0;
96
+ const outTail = typeof spec.stdio.stdout === "object" ? new StreamTail(spec.stdio.stdout.maxBytes) : void 0;
97
+ const errTail = typeof spec.stdio.stderr === "object" ? new StreamTail(spec.stdio.stderr.maxBytes) : void 0;
98
+ let child;
99
+ let workspace;
100
+ let cancelled = false;
101
+ const terminate = () => {
102
+ cancelled = true;
103
+ child?.terminate();
104
+ stdin?.destroy();
105
+ stdout?.destroy();
106
+ stderr?.destroy();
107
+ };
108
+ spec.signal?.addEventListener("abort", terminate, { once: true });
109
+ const drain = async (source, pipe, tail, inherited) => {
110
+ if (pipe !== void 0) {
111
+ await pipeline(source, pipe);
112
+ return;
113
+ }
114
+ for await (const chunk of source) {
115
+ if (tail !== void 0) tail.append(chunk);
116
+ else if (!inherited.write(chunk))
117
+ await new Promise((resolve) => inherited.once("drain", resolve));
118
+ }
119
+ tail?.end();
120
+ };
121
+ const done = this.ctx.mirage.ready.then(async (ws) => {
122
+ workspace = ws;
123
+ this.checkWorld();
124
+ if (cancelled || spec.signal?.aborted || this.closed)
125
+ throw new Error("subprocess cancelled before start");
126
+ child = ws.spawn(
127
+ { argv: spec.argv, cwd: PathSpec.fromStrPath(spec.cwd), env },
128
+ this.config.sessionId
129
+ );
130
+ const launched = child;
131
+ let finished = false;
132
+ void launched.wait().then(() => {
133
+ finished = true;
134
+ stdin?.end();
135
+ });
136
+ const feed = async () => {
137
+ try {
138
+ if (stdin !== void 0)
139
+ for await (const chunk of stdin)
140
+ await launched.stdin.write(new Uint8Array(chunk));
141
+ else if (typeof spec.stdio.stdin === "object")
142
+ await launched.stdin.write(new TextEncoder().encode(spec.stdio.stdin.data));
143
+ } catch (error) {
144
+ if (!finished && !cancelled) throw error;
145
+ } finally {
146
+ launched.stdin.close();
147
+ }
148
+ };
149
+ const [info] = await Promise.all([
150
+ launched.wait(),
151
+ feed(),
152
+ drain(launched.stdout, stdout, outTail, process.stdout),
153
+ drain(launched.stderr, stderr, errTail, process.stderr)
154
+ ]);
155
+ if (info.failure !== null) throw new Error(info.failure);
156
+ return { exitCode: info.exitCode, signal: null };
157
+ }).catch((error) => {
158
+ terminate();
159
+ throw error;
160
+ }).finally(() => spec.signal?.removeEventListener("abort", terminate));
161
+ const range = async () => {
162
+ try {
163
+ await done;
164
+ } catch {
165
+ }
166
+ if (workspace !== void 0 && child !== void 0) {
167
+ const pid = child.pid;
168
+ for (; ; ) {
169
+ const active = workspace.processes.live().filter((process2) => process2.info.groupId === pid);
170
+ if (active.length === 0) break;
171
+ await Promise.all(active.map((process2) => process2.join()));
172
+ }
173
+ }
174
+ };
175
+ const exited = range();
176
+ const handle = {
177
+ stdin,
178
+ stdout,
179
+ stderr,
180
+ collected: {
181
+ ...outTail === void 0 ? {} : { stdout: outTail },
182
+ ...errTail === void 0 ? {} : { stderr: errTail }
183
+ },
184
+ control: void 0,
185
+ done,
186
+ terminate,
187
+ waitForExit: (signal) => waitBounded(exited, signal)
188
+ };
189
+ this.handles.add(handle);
190
+ void exited.then(() => this.handles.delete(handle));
191
+ return handle;
192
+ }
193
+ terminalEnvironment(signal) {
194
+ signal?.throwIfAborted();
195
+ return Promise.resolve({ platform: "posix" });
196
+ }
197
+ spawnTerminal(_spec) {
198
+ return Promise.reject(new Error("Mirage has no terminal allocation capability"));
199
+ }
200
+ checkWorld() {
201
+ if (!this.ctx.mirage.vfsOnly)
202
+ throw new Error(
203
+ "Mirage subprocess requires workspace runtimes; native descendant tracking is unavailable"
204
+ );
205
+ }
206
+ };
207
+
208
+ export {
209
+ MirageSubprocess
210
+ };
211
+ //# sourceMappingURL=chunk-G2GHA2F6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/subprocess.ts"],"sourcesContent":["import type { Context } from '@deepseek-ai/cordis'\nimport {\n SubprocessRuntime,\n type SubprocessSpawnSpec,\n type SubprocessHandle,\n type SubprocessOutputMode,\n type SubprocessTerminalSpawnSpec,\n type SubprocessTerminalHandle,\n type SubprocessTerminalEnvironment,\n} from '@deepseek-ai/dsh-subprocess'\nimport { PassThrough } from 'node:stream'\nimport { pipeline } from 'node:stream/promises'\nimport { PathSpec } from '@struktoai/mirage-core/types'\nimport type { ChildProcess } from '@struktoai/mirage-core/process/child'\nimport type { Workspace } from '@struktoai/mirage-node'\nimport './service.ts'\nimport { StreamTail } from './text.ts'\n\nfunction validateOutput(mode: SubprocessOutputMode): void {\n if (mode === 'pipe' || mode === 'inherit') return\n if (!Number.isSafeInteger(mode.maxBytes) || mode.maxBytes < 0)\n throw new Error('invalid output budget')\n if (mode.spill !== undefined)\n throw new Error('subprocess spill is unsupported; use ctx.spill for recovery')\n}\n\nfunction waitBounded(done: Promise<unknown>, signal?: AbortSignal): Promise<boolean> {\n if (signal?.aborted) return Promise.resolve(false)\n return new Promise((resolve, reject) => {\n const aborted = () => {\n resolve(false)\n }\n signal?.addEventListener('abort', aborted, { once: true })\n void done\n .then(() => {\n resolve(true)\n }, reject)\n .finally(() => signal?.removeEventListener('abort', aborted))\n })\n}\n\nexport interface MirageSubprocessConfig {\n /** Existing workspace session; omitted selects the default session. */\n sessionId?: string\n}\n\n/** One workspace execution world. No host PATH, native descendants, or PTY claims. */\nexport class MirageSubprocess extends SubprocessRuntime {\n static readonly inject = ['mirage']\n private readonly handles = new Set<SubprocessHandle>()\n private closed = false\n constructor(\n ctx: Context,\n private readonly config: MirageSubprocessConfig = {},\n ) {\n super(ctx)\n ctx.effect(() => async () => {\n this.closed = true\n const handles = [...this.handles]\n for (const handle of handles) handle.terminate()\n await Promise.all(handles.map((handle) => handle.waitForExit()))\n })\n }\n\n async resolveExecutable(\n command: string,\n env?: Readonly<Record<string, string>>,\n signal?: AbortSignal,\n ): Promise<string> {\n if (command.includes('/') && !command.startsWith('/'))\n throw new Error('relative executable paths are unsupported')\n signal?.throwIfAborted()\n const ws = await this.ctx.mirage.ready\n this.checkWorld()\n const child = ws.spawn(\n { argv: ['which', command], ...(env === undefined ? {} : { env }) },\n this.config.sessionId,\n )\n const abort = () => {\n child.terminate()\n }\n signal?.addEventListener('abort', abort, { once: true })\n try {\n if (signal?.aborted) abort()\n const result = await child.communicate()\n signal?.throwIfAborted()\n if (result.exitCode !== 0) throw new Error(`executable not found: ${command}`)\n return new TextDecoder().decode(result.stdout).trim()\n } finally {\n signal?.removeEventListener('abort', abort)\n }\n }\n\n spawn(spec: SubprocessSpawnSpec): SubprocessHandle {\n spec.signal?.throwIfAborted()\n this.checkWorld()\n if (this.closed) throw new Error('subprocess service is closed')\n if (\n spec.argv.length === 0 ||\n !spec.argv[0] ||\n spec.argv.some((arg) => typeof arg !== 'string' || arg.includes('\\0'))\n )\n throw new Error('invalid argv')\n if (!spec.cwd.startsWith('/') || spec.cwd.includes('\\0'))\n throw new Error('cwd must be an absolute workspace path')\n if (!Number.isFinite(spec.graceMs) || spec.graceMs <= 0 || spec.graceMs > 2147483647)\n throw new Error('invalid graceMs')\n validateOutput(spec.stdio.stdout)\n validateOutput(spec.stdio.stderr)\n if (spec.stdio.control !== undefined)\n throw new Error(\n 'a control channel is unsupported: a workspace process inherits no descriptors',\n )\n const env: Record<string, string> = {}\n for (const [name, value] of Object.entries(spec.env ?? {})) {\n if (value === undefined) throw new Error('environment tombstones are unsupported')\n if (name.includes('=') || name.includes('\\0') || value.includes('\\0'))\n throw new Error('invalid environment')\n env[name] = value\n }\n const stdin = spec.stdio.stdin === 'pipe' ? new PassThrough() : undefined\n const stdout = spec.stdio.stdout === 'pipe' ? new PassThrough() : undefined\n const stderr = spec.stdio.stderr === 'pipe' ? new PassThrough() : undefined\n const outTail =\n typeof spec.stdio.stdout === 'object' ? new StreamTail(spec.stdio.stdout.maxBytes) : undefined\n const errTail =\n typeof spec.stdio.stderr === 'object' ? new StreamTail(spec.stdio.stderr.maxBytes) : undefined\n let child: ChildProcess | undefined\n let workspace: Workspace | undefined\n let cancelled = false\n const terminate = () => {\n cancelled = true\n child?.terminate()\n stdin?.destroy()\n stdout?.destroy()\n stderr?.destroy()\n }\n spec.signal?.addEventListener('abort', terminate, { once: true })\n const drain = async (\n source: AsyncIterable<Uint8Array>,\n pipe: PassThrough | undefined,\n tail: StreamTail | undefined,\n inherited: NodeJS.WriteStream,\n ) => {\n if (pipe !== undefined) {\n await pipeline(source, pipe)\n return\n }\n for await (const chunk of source) {\n if (tail !== undefined) tail.append(chunk)\n else if (!inherited.write(chunk))\n await new Promise<void>((resolve) => inherited.once('drain', resolve))\n }\n tail?.end()\n }\n const done = this.ctx.mirage.ready\n .then(async (ws) => {\n workspace = ws\n this.checkWorld()\n if (cancelled || spec.signal?.aborted || this.closed)\n throw new Error('subprocess cancelled before start')\n child = ws.spawn(\n { argv: spec.argv, cwd: PathSpec.fromStrPath(spec.cwd), env },\n this.config.sessionId,\n )\n const launched = child\n let finished = false\n void launched.wait().then(() => {\n finished = true\n stdin?.end()\n })\n const feed = async () => {\n try {\n if (stdin !== undefined)\n for await (const chunk of stdin)\n await launched.stdin.write(new Uint8Array(chunk as Buffer))\n else if (typeof spec.stdio.stdin === 'object')\n await launched.stdin.write(new TextEncoder().encode(spec.stdio.stdin.data))\n } catch (error) {\n if (!finished && !cancelled) throw error\n } finally {\n launched.stdin.close()\n }\n }\n const [info] = await Promise.all([\n launched.wait(),\n feed(),\n drain(launched.stdout, stdout, outTail, process.stdout),\n drain(launched.stderr, stderr, errTail, process.stderr),\n ])\n if (info.failure !== null) throw new Error(info.failure)\n return { exitCode: info.exitCode, signal: null }\n })\n .catch((error: unknown) => {\n terminate()\n throw error\n })\n .finally(() => spec.signal?.removeEventListener('abort', terminate))\n const range = async () => {\n try {\n await done\n } catch {\n /* done reports failures; cleanup still observes the range. */\n }\n if (workspace !== undefined && child !== undefined) {\n const pid = child.pid\n for (;;) {\n const active = workspace.processes\n .live()\n .filter((process) => process.info.groupId === pid)\n if (active.length === 0) break\n await Promise.all(active.map((process) => process.join()))\n }\n }\n }\n const exited = range()\n const handle: SubprocessHandle = {\n stdin,\n stdout,\n stderr,\n collected: {\n ...(outTail === undefined ? {} : { stdout: outTail }),\n ...(errTail === undefined ? {} : { stderr: errTail }),\n },\n control: undefined,\n done,\n terminate,\n waitForExit: (signal) => waitBounded(exited, signal),\n }\n this.handles.add(handle)\n void exited.then(() => this.handles.delete(handle))\n return handle\n }\n\n terminalEnvironment(signal?: AbortSignal): Promise<SubprocessTerminalEnvironment> {\n signal?.throwIfAborted()\n return Promise.resolve({ platform: 'posix' })\n }\n\n spawnTerminal(_spec: SubprocessTerminalSpawnSpec): Promise<SubprocessTerminalHandle> {\n return Promise.reject(new Error('Mirage has no terminal allocation capability'))\n }\n private checkWorld(): void {\n if (!this.ctx.mirage.vfsOnly)\n throw new Error(\n 'Mirage subprocess requires workspace runtimes; native descendant tracking is unavailable',\n )\n }\n}\n"],"mappings":";;;;;AACA;AAAA,EACE;AAAA,OAOK;AACP,SAAS,mBAAmB;AAC5B,SAAS,gBAAgB;AACzB,SAAS,gBAAgB;AAMzB,SAAS,eAAe,MAAkC;AACxD,MAAI,SAAS,UAAU,SAAS,UAAW;AAC3C,MAAI,CAAC,OAAO,cAAc,KAAK,QAAQ,KAAK,KAAK,WAAW;AAC1D,UAAM,IAAI,MAAM,uBAAuB;AACzC,MAAI,KAAK,UAAU;AACjB,UAAM,IAAI,MAAM,6DAA6D;AACjF;AAEA,SAAS,YAAY,MAAwB,QAAwC;AACnF,MAAI,QAAQ,QAAS,QAAO,QAAQ,QAAQ,KAAK;AACjD,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,UAAM,UAAU,MAAM;AACpB,cAAQ,KAAK;AAAA,IACf;AACA,YAAQ,iBAAiB,SAAS,SAAS,EAAE,MAAM,KAAK,CAAC;AACzD,SAAK,KACF,KAAK,MAAM;AACV,cAAQ,IAAI;AAAA,IACd,GAAG,MAAM,EACR,QAAQ,MAAM,QAAQ,oBAAoB,SAAS,OAAO,CAAC;AAAA,EAChE,CAAC;AACH;AAQO,IAAM,mBAAN,cAA+B,kBAAkB;AAAA,EAItD,YACE,KACiB,SAAiC,CAAC,GACnD;AACA,UAAM,GAAG;AAFQ;AAGjB,QAAI,OAAO,MAAM,YAAY;AAC3B,WAAK,SAAS;AACd,YAAM,UAAU,CAAC,GAAG,KAAK,OAAO;AAChC,iBAAW,UAAU,QAAS,QAAO,UAAU;AAC/C,YAAM,QAAQ,IAAI,QAAQ,IAAI,CAAC,WAAW,OAAO,YAAY,CAAC,CAAC;AAAA,IACjE,CAAC;AAAA,EACH;AAAA,EATmB;AAAA,EALnB,OAAgB,SAAS,CAAC,QAAQ;AAAA,EACjB,UAAU,oBAAI,IAAsB;AAAA,EAC7C,SAAS;AAAA,EAcjB,MAAM,kBACJ,SACA,KACA,QACiB;AACjB,QAAI,QAAQ,SAAS,GAAG,KAAK,CAAC,QAAQ,WAAW,GAAG;AAClD,YAAM,IAAI,MAAM,2CAA2C;AAC7D,YAAQ,eAAe;AACvB,UAAM,KAAK,MAAM,KAAK,IAAI,OAAO;AACjC,SAAK,WAAW;AAChB,UAAM,QAAQ,GAAG;AAAA,MACf,EAAE,MAAM,CAAC,SAAS,OAAO,GAAG,GAAI,QAAQ,SAAY,CAAC,IAAI,EAAE,IAAI,EAAG;AAAA,MAClE,KAAK,OAAO;AAAA,IACd;AACA,UAAM,QAAQ,MAAM;AAClB,YAAM,UAAU;AAAA,IAClB;AACA,YAAQ,iBAAiB,SAAS,OAAO,EAAE,MAAM,KAAK,CAAC;AACvD,QAAI;AACF,UAAI,QAAQ,QAAS,OAAM;AAC3B,YAAM,SAAS,MAAM,MAAM,YAAY;AACvC,cAAQ,eAAe;AACvB,UAAI,OAAO,aAAa,EAAG,OAAM,IAAI,MAAM,yBAAyB,OAAO,EAAE;AAC7E,aAAO,IAAI,YAAY,EAAE,OAAO,OAAO,MAAM,EAAE,KAAK;AAAA,IACtD,UAAE;AACA,cAAQ,oBAAoB,SAAS,KAAK;AAAA,IAC5C;AAAA,EACF;AAAA,EAEA,MAAM,MAA6C;AACjD,SAAK,QAAQ,eAAe;AAC5B,SAAK,WAAW;AAChB,QAAI,KAAK,OAAQ,OAAM,IAAI,MAAM,8BAA8B;AAC/D,QACE,KAAK,KAAK,WAAW,KACrB,CAAC,KAAK,KAAK,CAAC,KACZ,KAAK,KAAK,KAAK,CAAC,QAAQ,OAAO,QAAQ,YAAY,IAAI,SAAS,IAAI,CAAC;AAErE,YAAM,IAAI,MAAM,cAAc;AAChC,QAAI,CAAC,KAAK,IAAI,WAAW,GAAG,KAAK,KAAK,IAAI,SAAS,IAAI;AACrD,YAAM,IAAI,MAAM,wCAAwC;AAC1D,QAAI,CAAC,OAAO,SAAS,KAAK,OAAO,KAAK,KAAK,WAAW,KAAK,KAAK,UAAU;AACxE,YAAM,IAAI,MAAM,iBAAiB;AACnC,mBAAe,KAAK,MAAM,MAAM;AAChC,mBAAe,KAAK,MAAM,MAAM;AAChC,QAAI,KAAK,MAAM,YAAY;AACzB,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AACF,UAAM,MAA8B,CAAC;AACrC,eAAW,CAAC,MAAM,KAAK,KAAK,OAAO,QAAQ,KAAK,OAAO,CAAC,CAAC,GAAG;AAC1D,UAAI,UAAU,OAAW,OAAM,IAAI,MAAM,wCAAwC;AACjF,UAAI,KAAK,SAAS,GAAG,KAAK,KAAK,SAAS,IAAI,KAAK,MAAM,SAAS,IAAI;AAClE,cAAM,IAAI,MAAM,qBAAqB;AACvC,UAAI,IAAI,IAAI;AAAA,IACd;AACA,UAAM,QAAQ,KAAK,MAAM,UAAU,SAAS,IAAI,YAAY,IAAI;AAChE,UAAM,SAAS,KAAK,MAAM,WAAW,SAAS,IAAI,YAAY,IAAI;AAClE,UAAM,SAAS,KAAK,MAAM,WAAW,SAAS,IAAI,YAAY,IAAI;AAClE,UAAM,UACJ,OAAO,KAAK,MAAM,WAAW,WAAW,IAAI,WAAW,KAAK,MAAM,OAAO,QAAQ,IAAI;AACvF,UAAM,UACJ,OAAO,KAAK,MAAM,WAAW,WAAW,IAAI,WAAW,KAAK,MAAM,OAAO,QAAQ,IAAI;AACvF,QAAI;AACJ,QAAI;AACJ,QAAI,YAAY;AAChB,UAAM,YAAY,MAAM;AACtB,kBAAY;AACZ,aAAO,UAAU;AACjB,aAAO,QAAQ;AACf,cAAQ,QAAQ;AAChB,cAAQ,QAAQ;AAAA,IAClB;AACA,SAAK,QAAQ,iBAAiB,SAAS,WAAW,EAAE,MAAM,KAAK,CAAC;AAChE,UAAM,QAAQ,OACZ,QACA,MACA,MACA,cACG;AACH,UAAI,SAAS,QAAW;AACtB,cAAM,SAAS,QAAQ,IAAI;AAC3B;AAAA,MACF;AACA,uBAAiB,SAAS,QAAQ;AAChC,YAAI,SAAS,OAAW,MAAK,OAAO,KAAK;AAAA,iBAChC,CAAC,UAAU,MAAM,KAAK;AAC7B,gBAAM,IAAI,QAAc,CAAC,YAAY,UAAU,KAAK,SAAS,OAAO,CAAC;AAAA,MACzE;AACA,YAAM,IAAI;AAAA,IACZ;AACA,UAAM,OAAO,KAAK,IAAI,OAAO,MAC1B,KAAK,OAAO,OAAO;AAClB,kBAAY;AACZ,WAAK,WAAW;AAChB,UAAI,aAAa,KAAK,QAAQ,WAAW,KAAK;AAC5C,cAAM,IAAI,MAAM,mCAAmC;AACrD,cAAQ,GAAG;AAAA,QACT,EAAE,MAAM,KAAK,MAAM,KAAK,SAAS,YAAY,KAAK,GAAG,GAAG,IAAI;AAAA,QAC5D,KAAK,OAAO;AAAA,MACd;AACA,YAAM,WAAW;AACjB,UAAI,WAAW;AACf,WAAK,SAAS,KAAK,EAAE,KAAK,MAAM;AAC9B,mBAAW;AACX,eAAO,IAAI;AAAA,MACb,CAAC;AACD,YAAM,OAAO,YAAY;AACvB,YAAI;AACF,cAAI,UAAU;AACZ,6BAAiB,SAAS;AACxB,oBAAM,SAAS,MAAM,MAAM,IAAI,WAAW,KAAe,CAAC;AAAA,mBACrD,OAAO,KAAK,MAAM,UAAU;AACnC,kBAAM,SAAS,MAAM,MAAM,IAAI,YAAY,EAAE,OAAO,KAAK,MAAM,MAAM,IAAI,CAAC;AAAA,QAC9E,SAAS,OAAO;AACd,cAAI,CAAC,YAAY,CAAC,UAAW,OAAM;AAAA,QACrC,UAAE;AACA,mBAAS,MAAM,MAAM;AAAA,QACvB;AAAA,MACF;AACA,YAAM,CAAC,IAAI,IAAI,MAAM,QAAQ,IAAI;AAAA,QAC/B,SAAS,KAAK;AAAA,QACd,KAAK;AAAA,QACL,MAAM,SAAS,QAAQ,QAAQ,SAAS,QAAQ,MAAM;AAAA,QACtD,MAAM,SAAS,QAAQ,QAAQ,SAAS,QAAQ,MAAM;AAAA,MACxD,CAAC;AACD,UAAI,KAAK,YAAY,KAAM,OAAM,IAAI,MAAM,KAAK,OAAO;AACvD,aAAO,EAAE,UAAU,KAAK,UAAU,QAAQ,KAAK;AAAA,IACjD,CAAC,EACA,MAAM,CAAC,UAAmB;AACzB,gBAAU;AACV,YAAM;AAAA,IACR,CAAC,EACA,QAAQ,MAAM,KAAK,QAAQ,oBAAoB,SAAS,SAAS,CAAC;AACrE,UAAM,QAAQ,YAAY;AACxB,UAAI;AACF,cAAM;AAAA,MACR,QAAQ;AAAA,MAER;AACA,UAAI,cAAc,UAAa,UAAU,QAAW;AAClD,cAAM,MAAM,MAAM;AAClB,mBAAS;AACP,gBAAM,SAAS,UAAU,UACtB,KAAK,EACL,OAAO,CAACA,aAAYA,SAAQ,KAAK,YAAY,GAAG;AACnD,cAAI,OAAO,WAAW,EAAG;AACzB,gBAAM,QAAQ,IAAI,OAAO,IAAI,CAACA,aAAYA,SAAQ,KAAK,CAAC,CAAC;AAAA,QAC3D;AAAA,MACF;AAAA,IACF;AACA,UAAM,SAAS,MAAM;AACrB,UAAM,SAA2B;AAAA,MAC/B;AAAA,MACA;AAAA,MACA;AAAA,MACA,WAAW;AAAA,QACT,GAAI,YAAY,SAAY,CAAC,IAAI,EAAE,QAAQ,QAAQ;AAAA,QACnD,GAAI,YAAY,SAAY,CAAC,IAAI,EAAE,QAAQ,QAAQ;AAAA,MACrD;AAAA,MACA,SAAS;AAAA,MACT;AAAA,MACA;AAAA,MACA,aAAa,CAAC,WAAW,YAAY,QAAQ,MAAM;AAAA,IACrD;AACA,SAAK,QAAQ,IAAI,MAAM;AACvB,SAAK,OAAO,KAAK,MAAM,KAAK,QAAQ,OAAO,MAAM,CAAC;AAClD,WAAO;AAAA,EACT;AAAA,EAEA,oBAAoB,QAA8D;AAChF,YAAQ,eAAe;AACvB,WAAO,QAAQ,QAAQ,EAAE,UAAU,QAAQ,CAAC;AAAA,EAC9C;AAAA,EAEA,cAAc,OAAuE;AACnF,WAAO,QAAQ,OAAO,IAAI,MAAM,8CAA8C,CAAC;AAAA,EACjF;AAAA,EACQ,aAAmB;AACzB,QAAI,CAAC,KAAK,IAAI,OAAO;AACnB,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,EACJ;AACF;","names":["process"]}