Merge remote-tracking branch 'origin/master' into feat/loader-entry-disabled-interpolation

# Conflicts:
#	.agents/notes/implemented/feature/2026-08-01-windows-pwsh-default.i18n.yaml
#	.agents/notes/implemented/feature/2026-08-01-windows-pwsh-default.md
#	.agents/notes/implemented/feature/2026-08-01-windows-pwsh-default.zh.md
This commit is contained in:
Huanqi Cao
2026-08-11 15:33:09 +08:00
325 changed files with 7030 additions and 1683 deletions

View File

@@ -170,18 +170,12 @@
mode: !!js process.env.DSH_PERMISSION_MODE ?? 'workspace-write'
workspaceRoot: !!js process.cwd()
# POSIX shell executor and its win32 twin: bash has no Windows runner, so
# each row gates itself on platform and exactly one shell stack mounts per
# host (both executors register the same 'bash' service).
- id: bash-sandbox
name: '@deepseek-ai/dsh-bash-sandbox'
disabled: !!js process.platform === 'win32'
config:
timeoutMs: 60000
# The confined PowerShell executor, mounted on win32 only. Its config keeps
# the schema defaults (a 120s timeout); the 60s pin above is the bash
# executor's own knob, not a shared shell policy.
- id: pwsh-sandbox
name: '@deepseek-ai/dsh-pwsh-sandbox'
disabled: !!js process.platform !== 'win32'
@@ -208,7 +202,6 @@
- id: bash-env
name: '@deepseek-ai/dsh-bash-env'
# The dialect tools gate with their executors: one shell tool per host.
- id: tool-bash
name: '@deepseek-ai/dsh-tool-bash'
disabled: !!js process.platform === 'win32'
@@ -328,12 +321,16 @@
toolName: subagent
backgroundMode: continuable
# Fork stays one-shot: a continuable child's `report` tool and prompt
# section precede the inherited history a fork exists to reuse; one-shot
# fork children install neither, keeping the parent's request prefix.
# See .agents/notes/implemented/architecture/2026-08-10-fork-children-stay-one-shot.md.
- id: tool-subagent-fork
name: '@deepseek-ai/dsh-tool-subagent'
config:
provider: fork
toolName: subagent_fork
backgroundMode: continuable
backgroundMode: one-shot
# Optional direct-child return channel; absent from roots and one-shot agents.
- id: tool-subagent-report

View File

@@ -106,6 +106,10 @@ async function run(ctx: Context, task: string, io: HeadlessIo): Promise<void> {
if (agents === undefined || defaultModel === undefined || sessions === undefined) return
const selection = defaultModel.currentSelection()
// This bundle composes no preset roster, so the model-facing rows sit in the
// host plane and the agent reads them from the global layer. A deployment
// that DOES configure one has to join it here first
// (@deepseek-ai/dsh-agent-presets README, "Composing a child agent").
const { agent } = await agents.create({
sessionId: SessionId(`session-${randomUUID()}`),
meta: { cwd: process.cwd() },

View File

@@ -309,8 +309,12 @@
- id: plan-mode
disabled: true
- id: token-meter
disabled: true
# The token METER stays on the host plane; only the compaction backend that
# reads it moves. It owns the context-meter projection units, and that table is
# process-wide, so preset ownership would make the meter a function of which
# presets happen to be mounted rather than a per-session fact. Same criterion as
# `tasks` and `goals`; the reasoning has one home in
# `.agents/notes/implemented/architecture/2026-08-10-host-plane-ownership-after-presets.md`.
- id: compact-basic
disabled: true