@galaxy-stack/ai-coder-core 0.3.0 → 0.3.2

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 (37) hide show
  1. package/CHANGELOG.d/2026-09-29-advisory-doc-source-node-modules-bang-shell.md +24 -0
  2. package/CHANGELOG.d/2026-09-29-retry-khi-model-dung-vi-output-length.md +21 -0
  3. package/CHANGELOG.d/2026-09-30-baseline-review-bo-qua-thay-doi-generated.md +23 -0
  4. package/CHANGELOG.d/2026-09-30-shell-persistent-giong-dsh.md +25 -0
  5. package/CHANGELOG.d/2026-09-30-timeout-do-agent-tu-quyet.md +23 -0
  6. package/CHANGELOG.d/2026-09-30-timeout-giong-dsh.md +26 -0
  7. package/CHANGELOG.d/README.md +3 -0
  8. package/CHANGELOG.md +16 -0
  9. package/dist/adapters/node/host/node-command-port.d.ts +16 -0
  10. package/dist/adapters/node/host/node-command-port.d.ts.map +1 -1
  11. package/dist/adapters/node/host/node-command-port.js +74 -3
  12. package/dist/adapters/node/host/node-command-port.js.map +1 -1
  13. package/dist/adapters/node/host/node-persistent-shell.d.ts +35 -0
  14. package/dist/adapters/node/host/node-persistent-shell.d.ts.map +1 -0
  15. package/dist/adapters/node/host/node-persistent-shell.js +182 -0
  16. package/dist/adapters/node/host/node-persistent-shell.js.map +1 -0
  17. package/dist/adapters/node/tools/tool-executor.d.ts.map +1 -1
  18. package/dist/adapters/node/tools/tool-executor.js +11 -2
  19. package/dist/adapters/node/tools/tool-executor.js.map +1 -1
  20. package/dist/adapters/node/tools/workspace-review.d.ts +11 -0
  21. package/dist/adapters/node/tools/workspace-review.d.ts.map +1 -1
  22. package/dist/adapters/node/tools/workspace-review.js +61 -12
  23. package/dist/adapters/node/tools/workspace-review.js.map +1 -1
  24. package/dist/runtime/run-controller.d.ts.map +1 -1
  25. package/dist/runtime/run-controller.js +14 -2
  26. package/dist/runtime/run-controller.js.map +1 -1
  27. package/dist/tools/command-shape.d.ts +7 -0
  28. package/dist/tools/command-shape.d.ts.map +1 -1
  29. package/dist/tools/command-shape.js +14 -0
  30. package/dist/tools/command-shape.js.map +1 -1
  31. package/dist/tools/tool-registry.js +2 -2
  32. package/dist/tools/tool-registry.js.map +1 -1
  33. package/dist/tools/tool-timeouts.d.ts +21 -0
  34. package/dist/tools/tool-timeouts.d.ts.map +1 -0
  35. package/dist/tools/tool-timeouts.js +26 -0
  36. package/dist/tools/tool-timeouts.js.map +1 -0
  37. package/package.json +1 -1
@@ -0,0 +1,24 @@
1
+ # 2026-09-29 — Advisory khi đọc source node_modules bằng shell
2
+
3
+ Vùng: tools/adapter
4
+
5
+ ## Trước
6
+ - Guard của host chặn `read_file`/`search_text` trong `node_modules`, nhưng **lệnh
7
+ shell thì không**: bước `s09-security` của E2E đã chạy
8
+ `cd backend/node_modules/@galaxy-stack/orbit-security/dist && cat …` để đọc source
9
+ thư viện — tốn context vào phần không phải tài liệu, đúng thứ guard sinh ra để tránh.
10
+
11
+ ## Sau
12
+ - `dependencyShellReadAdvisory(command)`: khi lệnh vừa có trình đọc
13
+ (`cat|bat|head|tail|less|more|sed|awk|grep|rg|strings`) vừa trỏ vào `node_modules/`,
14
+ `command.run` trả advisory nói rõ: đọc source thư viện qua shell cũng tốn như qua file
15
+ tools; hãy đọc một `package.json`/`README.md`/`*.d.ts` cụ thể (được phép) hoặc dùng
16
+ MCP knowledge + skill.
17
+ - Không chặn: đọc file workspace, `ls` thư mục dependency hay lệnh không có trình đọc
18
+ vẫn im lặng.
19
+
20
+ ## Test hồi quy
21
+ - `test/command-shape.test.ts`: "reading library source through the shell is called
22
+ out, a declaration read is not".
23
+ - Incident: galaxy-code/docs/TEST_FAILURE_ANALYSIS.md — mục "Quan sát chính sách" và
24
+ phần "Xác minh release".
@@ -0,0 +1,21 @@
1
+ # 2026-09-29 — Dừng vì trần output ('length') là lỗi tạm thời, không phải fail run
2
+
3
+ Vùng: runtime
4
+
5
+ ## Trước
6
+ - Khi model dừng với `stopReason: 'length'` (đốt hết ngân sách output, thường là cho
7
+ hidden thinking, trước khi gọi tool hay trả lời), runtime ném
8
+ `INVALID_MODEL_STREAM` **không retryable** ⇒ cả run fail. Đo được: bước
9
+ `s22-seed-50` của E2E chết ở trạng thái `planning` với
10
+ `Model stopped with non-final reason 'length'.`, 0 lần retry.
11
+
12
+ ## Sau
13
+ - `length` được phân loại là `CodingProviderError("MALFORMED_STREAM", …, retryable: true,
14
+ retryMode: "without_thinking")` ⇒ vòng retry có sẵn của runtime thử lại **đúng context
15
+ đã kiểm chứng** với hidden thinking tắt, trong ngân sách `maxModelRetries`; thông báo
16
+ ghi rõ số tool call và số ký tự content đã phát trước khi hết ngân sách.
17
+ - `unknown` vẫn fail như cũ (có thể là lỗi stream thật).
18
+
19
+ ## Test hồi quy
20
+ - `test/runtime.test.ts`: "an output-limit stop retries the verified context with
21
+ thinking disabled".
@@ -0,0 +1,23 @@
1
+ # 2026-09-30 — Baseline review chỉ tính file nguồn, không chết vì install/build chạy nền
2
+
3
+ Vùng: host (workspace review)
4
+
5
+ ## Trước
6
+ - `NodeWorkspaceReviewExecutor.create` so sánh `stateVersion` của hai lần capture, mà
7
+ `stateVersion` gộp **cả entry `derived`** (`node_modules`, `dist`, cache). Chỉ cần
8
+ `bun install` hoặc build đang chạy nền ghi vào các đường dẫn đó là baseline bị coi là
9
+ "đã đổi" ⇒ factory ném `Error` **ngoài mọi tool call** ⇒ cả run chết với
10
+ `Workspace changed while capturing review baseline. Retry when files are stable.`
11
+ Đo được: một run E2E 25 bước dừng ở bước 4 vì đúng lý do này.
12
+
13
+ ## Sau
14
+ - Baseline dùng `durableBaselineFingerprint`: chỉ băm các entry `evidenceClass === "durable"`
15
+ (đúng tập mà review được phép báo cáo), nên thay đổi ở đường dẫn generated **không** còn
16
+ làm hỏng baseline.
17
+ - Việc lấy baseline được **thử lại 3 lần** (chờ 250ms × lần) trước khi bỏ cuộc, và thông báo
18
+ lỗi nói rõ nguyên nhân (tiến trình nền còn ghi file nguồn) kèm fingerprint rút gọn để đối chiếu.
19
+
20
+ ## Test hồi quy
21
+ - `test/workspace-generated-state.test.ts`: "a background write to a generated path does not
22
+ invalidate the review baseline" — một writer ghi liên tục vào `node_modules/pkg/index.js`
23
+ trong lúc `create` chạy.
@@ -0,0 +1,25 @@
1
+ # 2026-09-30 — Shell persistent cho run_command, giống DeepSeek Harness
2
+
3
+ Vùng: host (command port), runtime
4
+
5
+ ## Trước
6
+ - Mỗi lệnh `run_command` spawn một tiến trình mới: `cd`/biến môi trường không giữ, tiến trình nền
7
+ (dev server, watcher) chết cùng lệnh, và không có gì dọn chúng khi bước kết thúc — đo được cảnh
8
+ `vite`/`bun run dev` còn sống sót qua nhiều run và tranh chấp với run sau.
9
+ - Interface `CommandSessionPort` (start/read/write/interrupt/kill/list) đã có trong core nhưng
10
+ **chưa có implementation** nào ở host; tool `manage_session` chỉ chạy được với contract double.
11
+
12
+ ## Sau
13
+ - Thêm `PersistentShell`: **một shell cho mỗi run**, đúng mô hình `@deepseek-ai/dsh-tool-bash-persistent`:
14
+ - lệnh chia sẻ `cwd`, biến đã `export`, và tiến trình nền; các lệnh **tuần tự hoá**;
15
+ - `timeoutMs` vẫn là **maximum**: xong sớm trả sớm; chạm trần thì **kill shell + trả partial**
16
+ và lần chạy sau bắt đầu shell mới (reset), đúng như harness;
17
+ - chỉ `cd` khi caller truyền `cwd` — không có `cwd` thì lệnh chạy ở nơi lệnh trước để lại;
18
+ - stdout/stderr **gộp một luồng** như tool bash của harness.
19
+ - `NodeCommandPort` dùng shell này khi command containment không bắt buộc (macOS/best-effort),
20
+ và có `dispose()`; CLI gọi `dispose()` khi run kết thúc nên **mọi thứ bước đó khởi động đều bị dừng**.
21
+ - Profile containment `required` giữ nguyên đường spawn một lần (không thể host shell dùng chung).
22
+
23
+ ## Test hồi quy
24
+ - `test/persistent-shell.test.ts`: cwd/biến/tiến trình nền giữ qua các lệnh; lệnh chạm trần bị kill
25
+ và trả partial rồi shell được reset.
@@ -0,0 +1,23 @@
1
+ # 2026-09-30 — Agent tự quyết timeout của lệnh, host chỉ giữ backstop suy ra từ lựa chọn đó
2
+
3
+ Vùng: tools (command.run, project.validate), runtime
4
+
5
+ ## Trước
6
+ - Schema của `run_command`/`project.validate` khoá `timeoutMs` ở `maximum: 600000`, và runtime
7
+ bọc mỗi lần dispatch bằng một hạn mức **cứng** đúng 600000ms. Model xin 600000ms cho một lệnh
8
+ scaffolder chạy lâu hơn ⇒ hai hạn mức bằng nhau ⇒ host luôn thắng ⇒ bước chết với
9
+ `Tool run_command did not return within 600000ms` thay vì nhận kết quả timeout để xử lý tiếp.
10
+ - Đo được: run E2E chết ở bước 1 vì đúng lý do này (`bunx orbit-cli new`).
11
+
12
+ ## Sau
13
+ - **Agent tự quyết**: schema không còn `maximum`, mô tả nói rõ phải chọn theo lệnh (scaffolder,
14
+ typecheck + verify, test dài cần vài phút), mặc định 120000ms; executor truyền thẳng giá trị
15
+ model chọn, không kẹp.
16
+ - **Host chỉ giữ backstop suy ra**: `dispatchGuardMs(requested) = requested + 60s` (mặc định
17
+ `120s + 60s`), nên timeout của chính tool luôn nổ trước và trả kết quả bình thường; hạn cứng
18
+ duy nhất còn lại là deadline của run (`--run-minutes`), và port lệnh vốn đã tự kẹp theo deadline.
19
+ - Thêm `description` (tuỳ chọn) vào schema `run_command` để lệnh có mô tả ngắn hiện trong transcript.
20
+
21
+ ## Test hồi quy
22
+ - `test/tool-timeouts.test.ts`: guard suy ra từ timeout agent chọn (600s → 660s, 900s → 960s), và
23
+ trường hợp không truyền timeout thì dùng mặc định + head-room.
@@ -0,0 +1,26 @@
1
+ # 2026-09-30 — Timeout của run_command theo đúng cơ chế DeepSeek Harness
2
+
3
+ Vùng: host (command port), tools
4
+
5
+ ## Bối cảnh
6
+ Đọc `@deepseek-ai/dsh-tool-bash-persistent` và `@deepseek-ai/dsh-tool-call-timeout-policy`:
7
+ - Tool `bash` có **một** tham số `command`; `timeoutMs` là **config của tool**, mặc định **300000ms (5 phút)**.
8
+ - Khi chạm trần: **kill và reset shell**, trả về partial output kèm câu
9
+ *"Your command timed out after N seconds or experienced an OOM error. Below is partial output:"*
10
+ và marker `[Command timed out or OOM]`.
11
+ - Policy của wrapper: *"A tool declares timeoutMs and promises to honor exec.signal; this wrapper
12
+ arms that deadline and maps its own expiry to TOOL_TIMEOUT **without racing or abandoning the tool
13
+ promise**"* — tức wrapper chỉ là backstop **cùng mốc**, không đua với tool.
14
+
15
+ ## Thay đổi
16
+ - `DEFAULT_TIMEOUT_MS` của command port: **120000 → 300000**, khớp DSH.
17
+ - Tóm tắt kết quả khi lệnh bị kill đổi thành đúng thông điệp DSH:
18
+ `Command timed out after <duration>s. Below is partial output:` (kèm stdout/stderr một phần,
19
+ `timedOut: true`), thay vì `Command timed_out with exit code -1.`.
20
+ - Guard của runtime giữ nguyên nguyên tắc DSH đã đối chiếu: **suy ra từ timeout của chính tool**
21
+ (requested + 60s) nên tool luôn trả kết quả trước; hạn cứng duy nhất là deadline của run.
22
+
23
+ ## Ghi chú
24
+ - Khác biệt còn lại so với DSH: DSH dùng **shell persistent** (một shell sống qua nhiều lệnh, có
25
+ session/queue theo agent); Galaxy hiện spawn tiến trình mới cho mỗi lệnh. Đây là hạng mục riêng,
26
+ cần thêm port + wiring + test nếu muốn parity đầy đủ.
@@ -14,3 +14,6 @@ live.
14
14
 
15
15
  CHANGELOG.md (file công khai trên npm/GitHub) viết tiếng Anh; fragment ở đây là
16
16
  ghi chú làm việc nội bộ, viết tiếng Việt cũng được.
17
+
18
+ Khi mục `[0.3.0]` được gom, các fragment **được giữ lại** thay vì xoá, vì mục
19
+ CHANGELOG trỏ link tới từng fragment; chỉ xoá khi mục tương ứng cũng bỏ link.
package/CHANGELOG.md CHANGED
@@ -7,6 +7,22 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
  Times are recorded in Asia/Ho_Chi_Minh (+07:00). Per-fix fragments are filed in
8
8
  [CHANGELOG.d](CHANGELOG.d/README.md) and compiled here at release time.
9
9
 
10
+ ## [0.3.2] - 2026-09-30 14:50 +0700
11
+
12
+ ### Changed
13
+
14
+ - Baseline review chỉ tính file nguồn, không chết vì install/build chạy nền.
15
+ - Shell persistent cho run_command, giống DeepSeek Harness.
16
+ - Agent tự quyết timeout của lệnh, host chỉ giữ backstop suy ra từ lựa chọn đó.
17
+ - Timeout của run_command theo đúng cơ chế DeepSeek Harness.
18
+
19
+ ## [0.3.1] - 2026-09-29 05:25 +07:00
20
+
21
+ ### Fixed
22
+
23
+ - Advisory khi đọc source node_modules bằng shell. See [CHANGELOG.d fragment](CHANGELOG.d/2026-09-29-advisory-doc-source-node-modules-bang-shell.md).
24
+ - Dừng vì trần output ('length') là lỗi tạm thời, không phải fail run. See [CHANGELOG.d fragment](CHANGELOG.d/2026-09-29-retry-khi-model-dung-vi-output-length.md).
25
+
10
26
  ## [0.3.0] - 2026-09-28 23:10 +07:00
11
27
 
12
28
  First verified stable line: the 25-prompt end-to-end flow completes with this
@@ -5,11 +5,27 @@ export declare class NodeCommandPort implements CommandRunnerPort {
5
5
  private readonly scope;
6
6
  readonly containmentStatus: CommandContainmentStatus;
7
7
  readonly hostEnvironment: ReturnType<typeof nodeCommandHostEnvironment>;
8
+ /**
9
+ * One shell per run, like @deepseek-ai/dsh-tool-bash-persistent: commands share cwd,
10
+ * exports and background jobs, calls are serialized, a command that hits its maximum is
11
+ * killed with its partial output returned, and disposing the port at the end of a run
12
+ * stops whatever the step left running. Used whenever command containment is not
13
+ * mandatory, because a contained one-shot spawn cannot host a shared shell.
14
+ */
15
+ private readonly shell;
8
16
  private constructor();
9
17
  static create(workspaceRoot: string, options?: Readonly<{
10
18
  containment?: CommandContainmentMode;
11
19
  }>): Promise<NodeCommandPort>;
12
20
  static probeContainment(): Promise<CommandContainmentProbeResult>;
21
+ /**
22
+ * Run through the shared shell: cwd, exports and background jobs persist between calls,
23
+ * calls are serialized, and the timeout is a maximum whose expiry kills the shell and
24
+ * returns the partial output (the harness behaves the same way).
25
+ */
26
+ private runInPersistentShell;
27
+ /** Stop the shared shell and anything it started; call this when a run ends. */
28
+ dispose(): Promise<void>;
13
29
  run(input: Readonly<{
14
30
  command: string;
15
31
  cwd?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"node-command-port.d.ts","sourceRoot":"","sources":["../../../../src/adapters/node/host/node-command-port.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,gBAAgB,EAGhB,UAAU,EACV,oBAAoB,EACrB,MAAM,yBAAyB,CAAC;AAIjC,OAAO,EAKL,KAAK,sBAAsB,EAC3B,KAAK,6BAA6B,EAClC,KAAK,wBAAwB,EAC9B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AAgHnE,qBAAa,eAAgB,YAAW,iBAAiB;IAErD,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,QAAQ,CAAC,iBAAiB,EAAE,wBAAwB;IACpD,QAAQ,CAAC,eAAe,EAAE,UAAU,CAAC,OAAO,0BAA0B,CAAC;IAHzE,OAAO;WAMM,MAAM,CACjB,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE,QAAQ,CAAC;QAAE,WAAW,CAAC,EAAE,sBAAsB,CAAA;KAAE,CAAM,GAC/D,OAAO,CAAC,eAAe,CAAC;WAYd,gBAAgB,IAAI,OAAO,CAAC,6BAA6B,CAAC;IAIjE,GAAG,CACP,KAAK,EAAE,QAAQ,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;QACvC,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC,EACF,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;CA2IzC"}
1
+ {"version":3,"file":"node-command-port.d.ts","sourceRoot":"","sources":["../../../../src/adapters/node/host/node-command-port.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,gBAAgB,EAGhB,UAAU,EACV,oBAAoB,EACrB,MAAM,yBAAyB,CAAC;AAIjC,OAAO,EAKL,KAAK,sBAAsB,EAC3B,KAAK,6BAA6B,EAClC,KAAK,wBAAwB,EAC9B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AAoHnE,qBAAa,eAAgB,YAAW,iBAAiB;IAErD,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,QAAQ,CAAC,iBAAiB,EAAE,wBAAwB;IACpD,QAAQ,CAAC,eAAe,EAAE,UAAU,CAAC,OAAO,0BAA0B,CAAC;IACvE;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ,CAAC,KAAK;IAXxB,OAAO;WAcM,MAAM,CACjB,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE,QAAQ,CAAC;QAAE,WAAW,CAAC,EAAE,sBAAsB,CAAA;KAAE,CAAM,GAC/D,OAAO,CAAC,eAAe,CAAC;WAiBd,gBAAgB,IAAI,OAAO,CAAC,6BAA6B,CAAC;IAIvE;;;;OAIG;YACW,oBAAoB;IAiDlC,gFAAgF;IAC1E,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAIxB,GAAG,CACP,KAAK,EAAE,QAAQ,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;QACvC,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC,EACF,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;CAgJzC"}
@@ -2,8 +2,12 @@ import { spawn } from "node:child_process";
2
2
  import { lstat } from "node:fs/promises";
3
3
  import { assertWorkspaceHasNoHardLinks, buildBubblewrapArguments, containmentStatus, probeCommandContainment, } from "./command-containment.js";
4
4
  import { nodeCommandHostEnvironment } from "./host-environment.js";
5
+ import { PersistentShell } from "./node-persistent-shell.js";
5
6
  import { WorkspaceScope } from "./path-scope.js";
6
- const DEFAULT_TIMEOUT_MS = 120_000;
7
+ // Matches the harness default this project mirrors (@deepseek-ai/dsh-tool-bash-persistent
8
+ // declares timeoutMs 300000): a command may run for five minutes unless the caller asks for
9
+ // more or less, and the timeout is a maximum, not a wait.
10
+ const DEFAULT_TIMEOUT_MS = 300_000;
7
11
  const DEFAULT_MAX_OUTPUT_BYTES = 256 * 1024;
8
12
  const MAX_OUTPUT_BYTES = 4 * 1024 * 1024;
9
13
  function failure(code, message, retryable = false) {
@@ -115,10 +119,20 @@ export class NodeCommandPort {
115
119
  scope;
116
120
  containmentStatus;
117
121
  hostEnvironment;
118
- constructor(scope, containmentStatus, hostEnvironment) {
122
+ shell;
123
+ constructor(scope, containmentStatus, hostEnvironment,
124
+ /**
125
+ * One shell per run, like @deepseek-ai/dsh-tool-bash-persistent: commands share cwd,
126
+ * exports and background jobs, calls are serialized, a command that hits its maximum is
127
+ * killed with its partial output returned, and disposing the port at the end of a run
128
+ * stops whatever the step left running. Used whenever command containment is not
129
+ * mandatory, because a contained one-shot spawn cannot host a shared shell.
130
+ */
131
+ shell) {
119
132
  this.scope = scope;
120
133
  this.containmentStatus = containmentStatus;
121
134
  this.hostEnvironment = hostEnvironment;
135
+ this.shell = shell;
122
136
  }
123
137
  static async create(workspaceRoot, options = {}) {
124
138
  const mode = options.containment ?? "best_effort";
@@ -129,11 +143,63 @@ export class NodeCommandPort {
129
143
  WorkspaceScope.create(workspaceRoot),
130
144
  probeCommandContainment(),
131
145
  ]);
132
- return new NodeCommandPort(scope, containmentStatus(mode, probe), nodeCommandHostEnvironment());
146
+ return new NodeCommandPort(scope, containmentStatus(mode, probe), nodeCommandHostEnvironment(), new PersistentShell({ root: workspaceRoot }));
133
147
  }
134
148
  static async probeContainment() {
135
149
  return await probeCommandContainment();
136
150
  }
151
+ /**
152
+ * Run through the shared shell: cwd, exports and background jobs persist between calls,
153
+ * calls are serialized, and the timeout is a maximum whose expiry kills the shell and
154
+ * returns the partial output (the harness behaves the same way).
155
+ */
156
+ async runInPersistentShell(input, context) {
157
+ try {
158
+ const cwd = await this.scope.resolveExisting(input.cwd ?? ".");
159
+ if (!(await lstat(cwd)).isDirectory()) {
160
+ return failure("INVALID_INPUT", "Command cwd must be a workspace directory.");
161
+ }
162
+ const requestedTimeout = input.timeoutMs ?? DEFAULT_TIMEOUT_MS;
163
+ if (!Number.isSafeInteger(requestedTimeout) || requestedTimeout < 1) {
164
+ return failure("INVALID_INPUT", "timeoutMs must be a positive integer.");
165
+ }
166
+ const remaining = context.deadline - Date.now();
167
+ if (remaining <= 0)
168
+ return failure("DEADLINE_EXCEEDED", "The run deadline elapsed.");
169
+ const result = await this.shell.run(input.command, {
170
+ // Only an explicit cwd moves the shell; without one the command runs where the
171
+ // previous command left the shell, which is what makes the session persistent.
172
+ ...(input.cwd === undefined ? {} : { cwd }),
173
+ ...(input.env === undefined ? {} : { env: input.env }),
174
+ ...(input.maxOutputBytes === undefined ? {} : { maxOutputBytes: input.maxOutputBytes }),
175
+ timeoutMs: Math.min(requestedTimeout, remaining),
176
+ }, context.signal);
177
+ if (result.status === "unavailable") {
178
+ return failure("UNAVAILABLE", "The persistent shell could not be started.");
179
+ }
180
+ return Object.freeze({
181
+ ok: true,
182
+ data: Object.freeze({
183
+ command: input.command,
184
+ durationMs: result.durationMs,
185
+ exitCode: result.exitCode,
186
+ // The shared shell merges both streams, like the harness tool does.
187
+ stderr: "",
188
+ stderrTruncated: false,
189
+ stdout: result.output,
190
+ stdoutTruncated: result.truncated,
191
+ status: result.status,
192
+ }),
193
+ });
194
+ }
195
+ catch (error) {
196
+ return exceptionFailure(error);
197
+ }
198
+ }
199
+ /** Stop the shared shell and anything it started; call this when a run ends. */
200
+ async dispose() {
201
+ await this.shell.dispose();
202
+ }
137
203
  async run(input, context) {
138
204
  if (context.signal.aborted)
139
205
  return failure("CANCELED", "The run was canceled.");
@@ -142,6 +208,11 @@ export class NodeCommandPort {
142
208
  if (typeof input.command !== "string" || input.command.trim().length === 0 || input.command.length > 32_768) {
143
209
  return failure("INVALID_INPUT", "Command must contain between 1 and 32768 characters.");
144
210
  }
211
+ // A mandatory confinement wraps each spawn, so only the best-effort profile can host the
212
+ // shared shell the harness uses; everything else keeps the one-shot path below.
213
+ if (this.containmentStatus.mode !== "required") {
214
+ return await this.runInPersistentShell(input, context);
215
+ }
145
216
  try {
146
217
  const cwd = await this.scope.resolveExisting(input.cwd ?? ".");
147
218
  if (!(await lstat(cwd)).isDirectory()) {
@@ -1 +1 @@
1
- {"version":3,"file":"node-command-port.js","sourceRoot":"","sources":["../../../../src/adapters/node/host/node-command-port.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"node-command-port.js","sourceRoot":"","sources":["../../../../src/adapters/node/host/node-command-port.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ export type PersistentShellStatus = "exited" | "timed_out" | "canceled" | "unavailable";
2
+ export type PersistentShellRun = Readonly<{
3
+ durationMs: number;
4
+ /** null when the command was killed at its maximum or the shell died. */
5
+ exitCode: number | null;
6
+ output: string;
7
+ status: PersistentShellStatus;
8
+ truncated: boolean;
9
+ }>;
10
+ export type PersistentShellRunOptions = Readonly<{
11
+ cwd?: string;
12
+ env?: Readonly<Record<string, string>>;
13
+ maxOutputBytes?: number;
14
+ timeoutMs: number;
15
+ }>;
16
+ export declare class PersistentShell {
17
+ private readonly options;
18
+ private child;
19
+ private pending;
20
+ private tail;
21
+ private disposed;
22
+ constructor(options: Readonly<{
23
+ maxOutputBytes?: number;
24
+ root: string;
25
+ }>);
26
+ get running(): boolean;
27
+ private startShell;
28
+ private absorb;
29
+ /** Kill the shell (a shell that hit its maximum is reset, like the harness does). */
30
+ private terminate;
31
+ private settle;
32
+ run(command: string, runOptions: PersistentShellRunOptions, signal: AbortSignal): Promise<PersistentShellRun>;
33
+ dispose(): Promise<void>;
34
+ }
35
+ //# sourceMappingURL=node-persistent-shell.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-persistent-shell.d.ts","sourceRoot":"","sources":["../../../../src/adapters/node/host/node-persistent-shell.ts"],"names":[],"mappings":"AAcA,MAAM,MAAM,qBAAqB,GAAG,QAAQ,GAAG,WAAW,GAAG,UAAU,GAAG,aAAa,CAAC;AAExF,MAAM,MAAM,kBAAkB,GAAG,QAAQ,CAAC;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,yEAAyE;IACzE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,qBAAqB,CAAC;IAC9B,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC,CAAC;AAEH,MAAM,MAAM,yBAAyB,GAAG,QAAQ,CAAC;IAC/C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACvC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC,CAAC;AAkCH,qBAAa,eAAe;IAMd,OAAO,CAAC,QAAQ,CAAC,OAAO;IALpC,OAAO,CAAC,KAAK,CAA2B;IACxC,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,IAAI,CAAuC;IACnD,OAAO,CAAC,QAAQ,CAAS;gBAEI,OAAO,EAAE,QAAQ,CAAC;QAAE,cAAc,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAEzF,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,OAAO,CAAC,UAAU;IAsBlB,OAAO,CAAC,MAAM;IAed,qFAAqF;IACrF,OAAO,CAAC,SAAS;IAUjB,OAAO,CAAC,MAAM;IAaR,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,yBAAyB,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA6D7G,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAM/B"}
@@ -0,0 +1,182 @@
1
+ /**
2
+ * A persistent shell for one workspace, mirroring the harness this project follows.
3
+ *
4
+ * @deepseek-ai/dsh-tool-bash-persistent keeps one shell per agent session: commands share
5
+ * cwd, exported variables and background jobs, calls are serialized, the timeout is a
6
+ * maximum (the result returns as soon as the command finishes), and reaching the maximum
7
+ * kills and resets the shell while returning the partial output. This class does the same
8
+ * for the node host: bash reads a command line followed by a sentinel line carrying the
9
+ * exit code, so `cd`, exports and `&` processes survive between calls, and disposing the
10
+ * shell when a run ends also stops whatever that run left behind.
11
+ */
12
+ import { spawn } from "node:child_process";
13
+ import { randomUUID } from "node:crypto";
14
+ const SENTINEL_PREFIX = "__GALAXY_SHELL_DONE__";
15
+ const MAX_BUFFERED_BYTES = 4 * 1024 * 1024;
16
+ function shellQuote(value) {
17
+ return "'" + value.split("'").join("'\\''") + "'";
18
+ }
19
+ /** Keep the tail of a stream, which is what a model needs, and remember truncation. */
20
+ class TailText {
21
+ maxBytes;
22
+ value = "";
23
+ truncatedFlag = false;
24
+ constructor(maxBytes) {
25
+ this.maxBytes = maxBytes;
26
+ }
27
+ append(chunk) {
28
+ this.value += chunk;
29
+ if (Buffer.byteLength(this.value, "utf8") <= this.maxBytes)
30
+ return;
31
+ this.truncatedFlag = true;
32
+ const buffer = Buffer.from(this.value, "utf8");
33
+ this.value = buffer.subarray(buffer.byteLength - this.maxBytes).toString("utf8");
34
+ }
35
+ get text() { return this.value; }
36
+ get truncated() { return this.truncatedFlag; }
37
+ }
38
+ export class PersistentShell {
39
+ options;
40
+ child;
41
+ pending;
42
+ tail = Promise.resolve();
43
+ disposed = false;
44
+ constructor(options) {
45
+ this.options = options;
46
+ }
47
+ get running() {
48
+ return this.child !== undefined && this.child.exitCode === null && !this.child.killed;
49
+ }
50
+ startShell() {
51
+ const child = spawn("/bin/bash", ["--noprofile", "--norc"], {
52
+ cwd: this.options.root,
53
+ detached: process.platform !== "win32",
54
+ env: { ...process.env, PS1: "", TERM: "dumb" },
55
+ stdio: ["pipe", "pipe", "pipe"],
56
+ });
57
+ child.stdout?.setEncoding("utf8");
58
+ child.stderr?.setEncoding("utf8");
59
+ child.stdout?.on("data", (chunk) => this.absorb(chunk));
60
+ child.stderr?.on("data", (chunk) => this.absorb(chunk));
61
+ child.once("exit", () => {
62
+ this.child = undefined;
63
+ this.settle(null, "exited");
64
+ });
65
+ child.once("error", () => {
66
+ this.child = undefined;
67
+ this.settle(null, "exited");
68
+ });
69
+ this.child = child;
70
+ }
71
+ absorb(chunk) {
72
+ const pending = this.pending;
73
+ if (pending === undefined)
74
+ return;
75
+ pending.output.append(chunk);
76
+ const needle = SENTINEL_PREFIX + pending.nonce;
77
+ const index = pending.output.text.indexOf(needle);
78
+ if (index === -1)
79
+ return;
80
+ const text = pending.output.text;
81
+ const lineEnd = text.indexOf("\n", index);
82
+ const codeText = text.slice(index + needle.length, lineEnd === -1 ? index + needle.length + 8 : lineEnd).trim();
83
+ const exitCode = Number.parseInt(codeText, 10);
84
+ const body = text.slice(0, index).replace(/\n$/, "");
85
+ this.settle(Number.isFinite(exitCode) ? exitCode : null, "exited", body);
86
+ }
87
+ /** Kill the shell (a shell that hit its maximum is reset, like the harness does). */
88
+ terminate(signal) {
89
+ const child = this.child;
90
+ this.child = undefined;
91
+ if (child === undefined)
92
+ return;
93
+ try {
94
+ if (process.platform !== "win32" && child.pid !== undefined)
95
+ process.kill(-child.pid, signal);
96
+ else
97
+ child.kill(signal);
98
+ }
99
+ catch { /* already gone */ }
100
+ }
101
+ settle(exitCode, status, body) {
102
+ const pending = this.pending;
103
+ if (pending === undefined)
104
+ return;
105
+ this.pending = undefined;
106
+ clearTimeout(pending.timer);
107
+ pending.signal.removeEventListener("abort", pending.onAbort);
108
+ pending.resolve(Object.freeze({ exitCode, status, ...(body === undefined ? {} : { output: body }) }));
109
+ }
110
+ async run(command, runOptions, signal) {
111
+ const execute = async () => {
112
+ const startedAt = Date.now();
113
+ const maxOutputBytes = runOptions.maxOutputBytes ?? this.options.maxOutputBytes ?? MAX_BUFFERED_BYTES;
114
+ const output = new TailText(maxOutputBytes);
115
+ if (this.disposed) {
116
+ return Object.freeze({ durationMs: 0, exitCode: null, output: "", status: "unavailable", truncated: false });
117
+ }
118
+ if (!this.running) {
119
+ try {
120
+ this.startShell();
121
+ }
122
+ catch {
123
+ return Object.freeze({ durationMs: Date.now() - startedAt, exitCode: null, output: "", status: "unavailable", truncated: false });
124
+ }
125
+ }
126
+ const prefix = [];
127
+ if (runOptions.cwd !== undefined && runOptions.cwd !== ".")
128
+ prefix.push("cd " + shellQuote(runOptions.cwd) + " || exit 200");
129
+ if (runOptions.env !== undefined) {
130
+ for (const [key, value] of Object.entries(runOptions.env))
131
+ prefix.push("export " + key + "=" + shellQuote(value));
132
+ }
133
+ const nonce = randomUUID().replace(/-/g, "");
134
+ const line = (prefix.length > 0 ? prefix.join("; ") + "; " : "")
135
+ + command + "\nprintf '" + SENTINEL_PREFIX + nonce + "%s\\n' \"$?\"\n";
136
+ const settled = await new Promise((resolve) => {
137
+ const onAbort = () => {
138
+ this.terminate("SIGTERM");
139
+ this.settle(null, "canceled");
140
+ };
141
+ const timer = setTimeout(() => {
142
+ this.terminate("SIGTERM");
143
+ this.settle(null, "timed_out");
144
+ }, runOptions.timeoutMs);
145
+ timer.unref?.();
146
+ this.pending = {
147
+ nonce,
148
+ output,
149
+ resolve: (value) => resolve(value),
150
+ timer,
151
+ onAbort,
152
+ signal,
153
+ };
154
+ signal.addEventListener("abort", onAbort, { once: true });
155
+ try {
156
+ this.child?.stdin?.write(line);
157
+ }
158
+ catch {
159
+ this.settle(null, "exited");
160
+ }
161
+ });
162
+ return Object.freeze({
163
+ durationMs: Date.now() - startedAt,
164
+ exitCode: settled.exitCode,
165
+ output: settled.output ?? output.text,
166
+ status: settled.status,
167
+ truncated: output.truncated,
168
+ });
169
+ };
170
+ const chained = this.tail.then(execute, execute);
171
+ this.tail = chained.then(() => undefined, () => undefined);
172
+ return await chained;
173
+ }
174
+ async dispose() {
175
+ if (this.disposed)
176
+ return;
177
+ this.disposed = true;
178
+ await this.tail.catch(() => undefined);
179
+ this.terminate("SIGTERM");
180
+ }
181
+ }
182
+ //# sourceMappingURL=node-persistent-shell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-persistent-shell.js","sourceRoot":"","sources":["../../../../src/adapters/node/host/node-persistent-shell.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,KAAK,EAAqB,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAoBzC,MAAM,eAAe,GAAG,uBAAuB,CAAC;AAChD,MAAM,kBAAkB,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;AAE3C,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC;AACpD,CAAC;AAED,uFAAuF;AACvF,MAAM,QAAQ;IAGiB;IAFrB,KAAK,GAAG,EAAE,CAAC;IACX,aAAa,GAAG,KAAK,CAAC;IAC9B,YAA6B,QAAgB;QAAhB,aAAQ,GAAR,QAAQ,CAAQ;IAAG,CAAC;IACjD,MAAM,CAAC,KAAa;QAClB,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC;QACpB,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QACnE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC/C,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACnF,CAAC;IACD,IAAI,IAAI,KAAa,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACzC,IAAI,SAAS,KAAc,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;CACxD;AAWD,MAAM,OAAO,eAAe;IAMG;IALrB,KAAK,CAA2B;IAChC,OAAO,CAAsB;IAC7B,IAAI,GAAqB,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3C,QAAQ,GAAG,KAAK,CAAC;IAEzB,YAA6B,OAA4D;QAA5D,YAAO,GAAP,OAAO,CAAqD;IAAG,CAAC;IAE7F,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IACxF,CAAC;IAEO,UAAU;QAChB,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,aAAa,EAAE,QAAQ,CAAC,EAAE;YAC1D,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;YACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO;YACtC,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;YAC9C,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAC;QACH,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;QAClC,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;QAClC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAChE,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAChE,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE;YACtB,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;YACvB,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;YACvB,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;YACvB,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAEO,MAAM,CAAC,KAAa;QAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,IAAI,OAAO,KAAK,SAAS;YAAE,OAAO;QAClC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7B,MAAM,MAAM,GAAG,eAAe,GAAG,OAAO,CAAC,KAAK,CAAC;QAC/C,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAClD,IAAI,KAAK,KAAK,CAAC,CAAC;YAAE,OAAO;QACzB,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;QACjC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QAChH,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACrD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC3E,CAAC;IAED,qFAAqF;IAC7E,SAAS,CAAC,MAAsB;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QACvB,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO;QAChC,IAAI,CAAC;YACH,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS;gBAAE,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;;gBACzF,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC;IAChC,CAAC;IAEO,MAAM,CACZ,QAAuB,EACvB,MAA2C,EAC3C,IAAa;QAEb,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,IAAI,OAAO,KAAK,SAAS;YAAE,OAAO;QAClC,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;QACzB,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC5B,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAC7D,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACxG,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,OAAe,EAAE,UAAqC,EAAE,MAAmB;QACnF,MAAM,OAAO,GAAG,KAAK,IAAiC,EAAE;YACtD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC7B,MAAM,cAAc,GAAG,UAAU,CAAC,cAAc,IAAI,IAAI,CAAC,OAAO,CAAC,cAAc,IAAI,kBAAkB,CAAC;YACtG,MAAM,MAAM,GAAG,IAAI,QAAQ,CAAC,cAAc,CAAC,CAAC;YAC5C,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClB,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,aAAsB,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;YACxH,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBAClB,IAAI,CAAC;oBAAC,IAAI,CAAC,UAAU,EAAE,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC;oBAChC,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,aAAsB,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;gBAC7I,CAAC;YACH,CAAC;YACD,MAAM,MAAM,GAAa,EAAE,CAAC;YAC5B,IAAI,UAAU,CAAC,GAAG,KAAK,SAAS,IAAI,UAAU,CAAC,GAAG,KAAK,GAAG;gBAAE,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,CAAC;YAC7H,IAAI,UAAU,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;gBACjC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;oBAAE,MAAM,CAAC,IAAI,CAAC,SAAS,GAAG,GAAG,GAAG,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;YACpH,CAAC;YACD,MAAM,KAAK,GAAG,UAAU,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC7C,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;kBAC5D,OAAO,GAAG,YAAY,GAAG,eAAe,GAAG,KAAK,GAAG,iBAAiB,CAAC;YAEzE,MAAM,OAAO,GAAG,MAAM,IAAI,OAAO,CAAsG,CAAC,OAAO,EAAE,EAAE;gBACjJ,MAAM,OAAO,GAAG,GAAS,EAAE;oBACzB,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;oBAC1B,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;gBAChC,CAAC,CAAC;gBACF,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;oBAC5B,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;oBAC1B,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;gBACjC,CAAC,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;gBACzB,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;gBAChB,IAAI,CAAC,OAAO,GAAG;oBACb,KAAK;oBACL,MAAM;oBACN,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;oBAClC,KAAK;oBACL,OAAO;oBACP,MAAM;iBACP,CAAC;gBACF,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC1D,IAAI,CAAC;oBACH,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gBACjC,CAAC;gBAAC,MAAM,CAAC;oBACP,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;gBAC9B,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,OAAO,MAAM,CAAC,MAAM,CAAC;gBACnB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;gBAClC,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI;gBACrC,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,SAAS,EAAE,MAAM,CAAC,SAAS;aAC5B,CAAC,CAAC;QACL,CAAC,CAAC;QACF,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACjD,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC3D,OAAO,MAAM,OAAO,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC1B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACvC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAC5B,CAAC;CACF"}