|
|
4 月之前 | |
|---|---|---|
| .. | ||
| src | 4 月之前 | |
| tests | 4 月之前 | |
| README.md | 4 月之前 | |
| package.json | 4 月之前 | |
| tsconfig.json | 4 月之前 | |
Local-subprocess implementation of the @deepseek-ai/dsh-bash executor seam:
LocalBashExecutor spawns bash -c <command> per call in its own process
group, collects bounded output with full-stream spill files, and escalates
kills SIGTERM→SIGKILL across the whole group.
- id: bash
name: '@deepseek-ai/dsh-bash-local'
config:
cwd: /path/to/workspace # default: process.cwd()
timeoutMs: 120000 # default foreground timeout
maxTimeoutMs: 600000 # cap for per-call overrides
maxOutputBytes: 64000 # per-stream in-memory cap; overflow spills to disk
Design surveyed against the bash tools of Claude Code, OpenCode, Codex, and pi; the notable choices:
bash -c (deterministic; no rc files). All four surveyed tools spawn per
call. TODO(stateful-shell) in src/run.ts records the two proven
stateful designs (Claude Code's cwd-only persistence; Codex's PTY exec
sessions) for when real workflows demand them.detached
(own process group); kills send SIGTERM to the group, then SIGKILL after a
3s grace (OpenCode's escalation; pipelines and subshells die with the
parent). ESRCH is tolerated; daemons that re-parent away from the group can
still survive — same caveat as the surveyed tools.maxOutputBytes
keeps the in-memory TAIL (errors/results cluster at the end — pi/OpenCode
rationale) while the FULL stream is appended to a temp file whose path is
reported. The model can grep/tail the spill file with bash itself.NO_COLOR=1 TERM=dumb PAGER=cat GIT_PAGER=cat
(Codex's hardcoded set) so pagers and ANSI color don't garble results.start() returns immediately, no timeout applies
(Claude Code detaches timeouts when backgrounding), readOutput() is
incremental with whole-stream byte offsets, and disposal kills everything.TODO(permissions/sandbox): execution policy does NOT belong in this
package. Wrap the tools/execute waterfall (veto/ask) or implement a
sandboxing BashExecutor — see docs/architecture.md § plugin checklist.
Reference points: Claude Code wraps commands in sandbox-exec/bubblewrap;
Codex applies seatbelt/landlock plus an execpolicy prefix-rule engine.