@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.
- package/CHANGELOG.d/2026-09-29-advisory-doc-source-node-modules-bang-shell.md +24 -0
- package/CHANGELOG.d/2026-09-29-retry-khi-model-dung-vi-output-length.md +21 -0
- package/CHANGELOG.d/2026-09-30-baseline-review-bo-qua-thay-doi-generated.md +23 -0
- package/CHANGELOG.d/2026-09-30-shell-persistent-giong-dsh.md +25 -0
- package/CHANGELOG.d/2026-09-30-timeout-do-agent-tu-quyet.md +23 -0
- package/CHANGELOG.d/2026-09-30-timeout-giong-dsh.md +26 -0
- package/CHANGELOG.d/README.md +3 -0
- package/CHANGELOG.md +16 -0
- package/dist/adapters/node/host/node-command-port.d.ts +16 -0
- package/dist/adapters/node/host/node-command-port.d.ts.map +1 -1
- package/dist/adapters/node/host/node-command-port.js +74 -3
- package/dist/adapters/node/host/node-command-port.js.map +1 -1
- package/dist/adapters/node/host/node-persistent-shell.d.ts +35 -0
- package/dist/adapters/node/host/node-persistent-shell.d.ts.map +1 -0
- package/dist/adapters/node/host/node-persistent-shell.js +182 -0
- package/dist/adapters/node/host/node-persistent-shell.js.map +1 -0
- package/dist/adapters/node/tools/tool-executor.d.ts.map +1 -1
- package/dist/adapters/node/tools/tool-executor.js +11 -2
- package/dist/adapters/node/tools/tool-executor.js.map +1 -1
- package/dist/adapters/node/tools/workspace-review.d.ts +11 -0
- package/dist/adapters/node/tools/workspace-review.d.ts.map +1 -1
- package/dist/adapters/node/tools/workspace-review.js +61 -12
- package/dist/adapters/node/tools/workspace-review.js.map +1 -1
- package/dist/runtime/run-controller.d.ts.map +1 -1
- package/dist/runtime/run-controller.js +14 -2
- package/dist/runtime/run-controller.js.map +1 -1
- package/dist/tools/command-shape.d.ts +7 -0
- package/dist/tools/command-shape.d.ts.map +1 -1
- package/dist/tools/command-shape.js +14 -0
- package/dist/tools/command-shape.js.map +1 -1
- package/dist/tools/tool-registry.js +2 -2
- package/dist/tools/tool-registry.js.map +1 -1
- package/dist/tools/tool-timeouts.d.ts +21 -0
- package/dist/tools/tool-timeouts.d.ts.map +1 -0
- package/dist/tools/tool-timeouts.js +26 -0
- package/dist/tools/tool-timeouts.js.map +1 -0
- 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 đủ.
|
package/CHANGELOG.d/README.md
CHANGED
|
@@ -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;
|
|
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
|
-
|
|
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
|
-
|
|
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":"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"}
|