refactor(process): split the process manager out of the bash executor

New process/ capability family: @deepseek-ai/dsh-process owns ctx.processes —
abstract ProcessManager.spawn(spec) over a fully-explicit ProcessSpawnSpec —
plus the shared DSH_* managed-environment and CollectedOutput vocabulary;
@deepseek-ai/dsh-process-local carries the former bash-local run.ts plumbing
(detached groups, tail-keep spill-backed output, credential scrub, kill
escalation, kill-and-join disposal) with no config of its own.

dsh-bash-local becomes a consumer: it keeps command defaulting, the fused
deadline timedOut/aborted classification, the model-friendly terminal env
(now merged through the ordinary env channel), and the [stderr]-marked
background read merge, and spawns through ctx.processes. Background-process
lifetime moves to the manager, so an executor reload no longer kills live
background work; a background spawn failure is injected once into the read
path instead of being buffered as fake stderr. dsh-bash re-exports the moved
vocabulary so bash consumers keep one import root; dsh-bash-sandbox only
redeclares the inherited inject.

Every composition loading a bash executor now loads dsh-process-local (CLI,
examples, python bundled runtime, create-sdk bash feature, inline test
configs).
This commit is contained in:
Tianyi Cui
2026-07-26 06:59:01 +08:00
parent 71c564d801
commit 0d6bfd8856
89 changed files with 1331 additions and 365 deletions

60
pnpm-lock.yaml generated
View File

@@ -182,6 +182,9 @@ importers:
'@deepseek-ai/dsh-paths':
specifier: workspace:^
version: link:../../packages/util/paths
'@deepseek-ai/dsh-process-local':
specifier: workspace:^
version: link:../../packages/process/process-local
'@deepseek-ai/dsh-session':
specifier: workspace:^
version: link:../../packages/core/session
@@ -424,6 +427,9 @@ importers:
'@deepseek-ai/dsh-plan-mode':
specifier: workspace:*
version: link:../packages/plan/plan-mode
'@deepseek-ai/dsh-process-local':
specifier: workspace:*
version: link:../packages/process/process-local
'@deepseek-ai/dsh-pty':
specifier: workspace:*
version: link:../packages/pty/pty
@@ -585,6 +591,9 @@ importers:
'@deepseek-ai/dsh-invariants':
specifier: workspace:^
version: link:../../support/invariants
'@deepseek-ai/dsh-process':
specifier: workspace:^
version: link:../../process/process
'@deepseek-ai/dsh-sandbox':
specifier: workspace:^
version: link:../../sandbox/sandbox
@@ -604,6 +613,12 @@ importers:
'@deepseek-ai/dsh-invariants':
specifier: workspace:^
version: link:../../support/invariants
'@deepseek-ai/dsh-process':
specifier: workspace:^
version: link:../../process/process
'@deepseek-ai/dsh-process-local':
specifier: workspace:^
version: link:../../process/process-local
'@deepseek-ai/dsh-timeout':
specifier: workspace:^
version: link:../../util/timeout
@@ -622,6 +637,9 @@ importers:
'@deepseek-ai/dsh-invariants':
specifier: workspace:^
version: link:../../support/invariants
'@deepseek-ai/dsh-process-local':
specifier: workspace:^
version: link:../../process/process-local
'@deepseek-ai/dsh-sandbox':
specifier: workspace:^
version: link:../../sandbox/sandbox
@@ -668,6 +686,9 @@ importers:
'@deepseek-ai/dsh-paths':
specifier: workspace:^
version: link:../../util/paths
'@deepseek-ai/dsh-process-local':
specifier: workspace:^
version: link:../../process/process-local
'@deepseek-ai/dsh-sandbox':
specifier: workspace:^
version: link:../../sandbox/sandbox
@@ -1980,6 +2001,9 @@ importers:
'@deepseek-ai/dsh-llm':
specifier: workspace:^
version: link:../../llm/llm
'@deepseek-ai/dsh-process-local':
specifier: workspace:^
version: link:../../process/process-local
'@deepseek-ai/dsh-retention':
specifier: workspace:^
version: link:../../util/retention
@@ -2200,6 +2224,9 @@ importers:
'@deepseek-ai/dsh-llm':
specifier: workspace:^
version: link:../../llm/llm
'@deepseek-ai/dsh-process-local':
specifier: workspace:^
version: link:../../process/process-local
'@deepseek-ai/dsh-session':
specifier: workspace:^
version: link:../../core/session
@@ -2249,6 +2276,9 @@ importers:
'@deepseek-ai/dsh-llm':
specifier: workspace:^
version: link:../../llm/llm
'@deepseek-ai/dsh-process-local':
specifier: workspace:^
version: link:../../process/process-local
'@deepseek-ai/dsh-session':
specifier: workspace:^
version: link:../../core/session
@@ -2613,6 +2643,27 @@ importers:
specifier: ^4.0.0-rc.7
version: 4.0.0-rc.7(@cordisjs/plugin-include@1.0.4)(@cordisjs/plugin-loader@1.0.0-rc.5)
packages/process/process:
devDependencies:
'@deepseek-ai/dsh-invariants':
specifier: workspace:^
version: link:../../support/invariants
cordis:
specifier: ^4.0.0-rc.7
version: 4.0.0-rc.7(@cordisjs/plugin-include@1.0.4)(@cordisjs/plugin-loader@1.0.0-rc.5)
packages/process/process-local:
devDependencies:
'@deepseek-ai/dsh-invariants':
specifier: workspace:^
version: link:../../support/invariants
'@deepseek-ai/dsh-process':
specifier: workspace:^
version: link:../process
cordis:
specifier: ^4.0.0-rc.7
version: 4.0.0-rc.7(@cordisjs/plugin-include@1.0.4)(@cordisjs/plugin-loader@1.0.0-rc.5)
packages/pty/pty:
devDependencies:
'@deepseek-ai/dsh-agent':
@@ -3569,6 +3620,9 @@ importers:
'@deepseek-ai/dsh-llm-deepseek':
specifier: workspace:^
version: link:../../llm/llm-deepseek
'@deepseek-ai/dsh-process-local':
specifier: workspace:^
version: link:../../process/process-local
'@deepseek-ai/dsh-session':
specifier: workspace:^
version: link:../../core/session
@@ -4582,6 +4636,12 @@ importers:
'@deepseek-ai/dsh-plan-mode':
specifier: workspace:^
version: link:../../packages/plan/plan-mode
'@deepseek-ai/dsh-process':
specifier: workspace:^
version: link:../../packages/process/process
'@deepseek-ai/dsh-process-local':
specifier: workspace:^
version: link:../../packages/process/process-local
'@deepseek-ai/dsh-repeat-tool-guard':
specifier: workspace:^
version: link:../../packages/guard/repeat-tool-guard