The storage hub, json backend, and domain form are general infrastructure, and the projection cache is a session-layer service that depends on them — both belong in the shared base, not in the web overlay. Base now provides storage / storage-json / storage-domain / session-projection-cache; the web-app overlay keeps its surface consumers (workspace, message-feedback), which inherit storageDomain from base (a child layer sees parent services). This reverts the storage stack's historical web-app-only placement and the file-root design's base mount of the cache. |
||
|---|---|---|
| .. | ||
| base | ||
| headless | ||
| web-app | ||
| README.i18n.yaml | ||
| README.md | ||
| README.zh.md | ||
bundle/ — profile plugin bundles
English | 中文
Profile bundles: npm packages whose manifest declares "dsh": { "bundle": { "patch": "./cordis.patch.yml" } }, making them installable patch layers for dsh --profile compositions (profile contract). A bundle's substance is its patch list; some also ship runtime glue plugins their patch mounts.
The manifest declaration, not this directory, defines Bundle identity. Domain packages can carry their own optional Profile layer; the Codex and Claude Code subagent packages are directly installable examples.
| Package | Role | ctx key |
|---|---|---|
base/ |
The shared dsh core every profile applies first | — (patch only) |
web-app/ |
Browser surface: web patch layer + runtime glue plugin | mounts rows |
headless/ |
Direct one-shot task mode over base, with no Host or Web layer | mounts headless-runner |
In-box bundles resolve from the dsh installation; out-of-tree bundles install into a profile through dsh plugin --profile <name> add <package>.