The web host now composes the sandboxed product path (sandbox-local + sandbox-policy behind bash-sandbox/fs-sandbox, with user-approval and permission on top); BootHostOptions.sandbox carries the deployment defaults (workspace-write + ask). createApiProxy owns the approval pending registry: a ctx.approval ask becomes an answerable approval/requested mux frame with a stable rpcId, replayed verbatim on every mux open until settled; respond routes by the echoed rpcId, validates the ApprovalResponsePayload audit correlation, and broadcasts approval/resolved; the ask's abort signal withdraws the question as cancelled. session.permissions / session.setPermission project ctx.permission into a protocol-owned PermissionOption select; idle switches are held last-write-wins and flushed into the next prompted turn (the ACP bridge's anchoring pattern). The shared hasOpenTurn fold moved to dsh-session, deduplicating the private copies in user-approval, the ACP bridge, and the proxy. Client, per the designer draft: a pending approval takes over the composer (ApprovalPanel replaces the InputBar — amber strip, justification headline, paired command, one-shot refuse/allow, keyed by rpcId so a queued second approval remounts live; the resolved frame restores the composer); the sidebar session row shows an amber waiting-approval dot that outranks the running ring (manager-tracked approvalId set, idempotent under mux-open replays, cleared per connection generation, lit for uninstantiated sessions too); the permission selector is a composer bottom-row chip over an invisible native select, with a presentation-only title-case transform (workspace-write renders as Workspace Write; wire names untouched). Question placeholders stay in the message flow. The connection fixture mirrors the host behavior for keyless browser acceptance.
84 lines
3.2 KiB
JSON
84 lines
3.2 KiB
JSON
{
|
|
"name": "@deepseek-ai/dsh-host-runtime",
|
|
"description": "Host runtime assembly for dsh: bootHost composes the core spine, createApiProxy implements the contract, startHost is the one-step shell seam",
|
|
"version": "0.0.1",
|
|
"private": true,
|
|
"type": "module",
|
|
"main": "lib/index.js",
|
|
"types": "lib/types/index.d.ts",
|
|
"exports": {
|
|
".": {
|
|
"types": "./lib/types/index.d.ts",
|
|
"default": "./lib/index.js"
|
|
},
|
|
"./invariant": {
|
|
"types": "./lib/types/invariant.d.ts",
|
|
"default": "./lib/invariant.js"
|
|
},
|
|
"./src/*": "./src/*",
|
|
"./package.json": "./package.json"
|
|
},
|
|
"files": [
|
|
"lib/index.js",
|
|
"lib/invariant.js",
|
|
"lib/types/**/*.d.ts",
|
|
"lib/types/**/*.d.ts.map",
|
|
"src"
|
|
],
|
|
"license": "BSD-3-Clause",
|
|
"dependencies": {
|
|
"@cordisjs/plugin-loader": "workspace:^",
|
|
"@cordisjs/plugin-timer": "workspace:^",
|
|
"@deepseek-ai/dsh-agent": "workspace:^",
|
|
"@deepseek-ai/dsh-agent-loop": "workspace:^",
|
|
"@deepseek-ai/dsh-bash-sandbox": "workspace:^",
|
|
"@deepseek-ai/dsh-compact-basic": "workspace:^",
|
|
"@deepseek-ai/dsh-fs-policy": "workspace:^",
|
|
"@deepseek-ai/dsh-fs-sandbox": "workspace:^",
|
|
"@deepseek-ai/dsh-host-apiproxy": "workspace:^",
|
|
"@deepseek-ai/dsh-llm": "workspace:^",
|
|
"@deepseek-ai/dsh-llm-deepseek": "workspace:^",
|
|
"@deepseek-ai/dsh-permission": "workspace:^",
|
|
"@deepseek-ai/dsh-sandbox": "workspace:^",
|
|
"@deepseek-ai/dsh-sandbox-local": "workspace:^",
|
|
"@deepseek-ai/dsh-sandbox-policy": "workspace:^",
|
|
"@deepseek-ai/dsh-session": "workspace:^",
|
|
"@deepseek-ai/dsh-session-persistence": "workspace:^",
|
|
"@deepseek-ai/dsh-session-persistence-jsonl": "workspace:^",
|
|
"@deepseek-ai/dsh-session-title": "workspace:^",
|
|
"@deepseek-ai/dsh-session-title-first-message-llm": "workspace:^",
|
|
"@deepseek-ai/dsh-skill": "workspace:^",
|
|
"@deepseek-ai/dsh-skill-local": "workspace:^",
|
|
"@deepseek-ai/dsh-spill-local": "workspace:^",
|
|
"@deepseek-ai/dsh-spill-policy": "workspace:^",
|
|
"@deepseek-ai/dsh-subagent": "workspace:^",
|
|
"@deepseek-ai/dsh-subagent-fork": "workspace:^",
|
|
"@deepseek-ai/dsh-subagent-spawn": "workspace:^",
|
|
"@deepseek-ai/dsh-system-prompt": "workspace:^",
|
|
"@deepseek-ai/dsh-tasks": "workspace:^",
|
|
"@deepseek-ai/dsh-timeout-policy": "workspace:^",
|
|
"@deepseek-ai/dsh-token-meter": "workspace:^",
|
|
"@deepseek-ai/dsh-tool-bash": "workspace:^",
|
|
"@deepseek-ai/dsh-tool-fs": "workspace:^",
|
|
"@deepseek-ai/dsh-tool-fs-search": "workspace:^",
|
|
"@deepseek-ai/dsh-tool-skill": "workspace:^",
|
|
"@deepseek-ai/dsh-tool-subagent": "workspace:^",
|
|
"@deepseek-ai/dsh-tool-tasks": "workspace:^",
|
|
"@deepseek-ai/dsh-tool-todo": "workspace:^",
|
|
"@deepseek-ai/dsh-tool-workflow": "workspace:^",
|
|
"@deepseek-ai/dsh-tools": "workspace:^",
|
|
"@deepseek-ai/dsh-user-approval": "workspace:^",
|
|
"@deepseek-ai/dsh-user-interaction": "workspace:^",
|
|
"@deepseek-ai/dsh-workflow-workerthread": "workspace:^",
|
|
"@deepseek-ai/dsh-workspace-context": "workspace:^"
|
|
},
|
|
"peerDependencies": {
|
|
"cordis": "^4.0.0-rc.7",
|
|
"@deepseek-ai/dsh-invariants": "^0.0.1"
|
|
},
|
|
"devDependencies": {
|
|
"cordis": "^4.0.0-rc.7",
|
|
"@deepseek-ai/dsh-invariants": "workspace:^"
|
|
}
|
|
}
|