A profile manifest and a bundle manifest are different kinds and shared one flat `dsh` section: `dsh.plugins` listed bundles (not plugins) and `dsh.patch` declared a bundle's layer. Each kind now names its role — a bundle declares `dsh.bundle.patch`, a profile declares `dsh.profile.bundles` — so a package.json states which role it plays and the list name matches its contents. `DEFAULT_PROFILE_PLUGINS` becomes `DEFAULT_PROFILE_BUNDLES`, and `DshManifestSection` splits into `DshBundleManifest`/`DshProfileManifest`. Pre-release: no compatibility shim; turtle-ui moved with it (bd5ff10).
ui/ — human and SDK-client integration surfaces
English | 中文
Human-facing channels and the out-of-process SDK server. These are product packages: real interfaces that a person or SDK client drives.
| Package | Role | ctx key |
|---|---|---|
commands/ |
Registers and dispatches human commands for interactive adapters. | ctx.commands |
user-approval/ |
Coordinates one-shot approval decisions. | ctx.approval |
permission/ |
Presents and persists user-facing permission presets. | ctx.permission |
user-interaction/ |
Defines the provider-neutral human question/answer seam. | ctx.userInteraction |
tool-ask-user/ |
Exposes human questions to the model. | (registers on ctx.tools) |
jsonrpc/ |
Serves out-of-process SDK clients over stdio JSON-RPC. | (drives ctx.agents) |
app-boot/ |
Provides shared boot support for application launchers. | (library for the bins) |
These packages integrate through existing agent and session contracts rather than changing the loop. Interactive applications provide the concrete command, approval, and question adapters; automation uses acp/, and runnable demo bundles live under examples/. The product dsh CLI composes these packages directly.