dsh-bundle
Verified@browzwork/dsh-bundle · v0.1.0-alpha.7 · UNLICENSED · Web UI
BrowzWork Managed Workspace integration for the official DSH Desktop
Install
dsh plugin add @browzwork/dsh-bundle Confirm the layer applied with dsh --profile default --dump-config — see the install guide.
Source
Published to npm without a public repository. Inspect the package contents before installing.
Tags
Readme
@browzwork/dsh-bundle
Harness MCP integration package for the official DSH Desktop. It keeps DSH as
the Harness host and routes identity, devices, Workspaces and execution through
the existing Gateway and Native Agent. DSH Desktop uses browzwork-dsh; it is
not a fifth Web MCP channel or a separate Runtime.
Development baseline 0.1.0-alpha.2 is pinned to DSH Desktop
0.2.0-rc.2, its 0.2.0-rc.2 service packages, Cordis 4.0.4, Node 24,
and MCP protocol 2025-11-25. A different DSH build must pass this package's
tests and the live managed-Workspace acceptance path before the pins move.
Current implementation slice
- Installable DSH bundle manifest and Cordis patch.
- Official DSH Web client module using
sidebar.footer.actionfor a compact branded launcher andsidebar.right.pane.tabfor the working panel. The launcher uses the canonical BrowzWork image, shows a green dot only while the Native Agent is running and Gateway-connected, and otherwise shows gray; its hover text carries the status. Clicking it opens the native right sidebar. - The right sidebar makes device and Workspace selection primary. Access Scope and MCP connection state stay visible. The footer links are Local Settings, MCP management, and Learn about BrowzWork. Diagnostics belong to Local Settings. Desktop Scope changes use human-only commands with real device identity and revision CAS checks, never model tools.
- The right sidebar’s More → Web AI Sites page lists official-site links: ChatGPT, Claude, Grok, and Cursor. Each click delegates to DSH's existing right-sidebar Browser with the fixed URL. Clicking BrowzWork returns to its control tab; the center remains DSH's native conversation. There is no Web AI mode, custom browser toolbar, provider settings, or provider-specific tab/session manager.
- Managed tool paths follow the Agent's selected Access Scope: Workspace uses paths relative to the selected authorized folder; OS Access also accepts absolute paths and arbitrary existing process working directories. DSH does not implement or widen this policy itself.
- BrowzWork OAuth Authorization Code + PKCE flow using a temporary loopback callback and DSH's credential/authorization seams.
- User-only
/browzwork-logincommand that starts the registered DSH authorization flow and returns its browser URL outside model history; it never writes the credential file directly. - Root bundle registers only human control commands/UI. BrowzWork execution tools are not globally added to Standard, PTC, Minimal or Creator.
- Desktop and Mobile share one
browzworkpreset. Managed-only policy and a per-Agent runtime exclude native tools, third-party execution paths and model login/target switching. Mobile adds an account-bound session overlay, not another preset.browzwork-service-...is only its internal namespace. - Credential-opaque Streamable HTTP MCP client for the existing Gateway.
- Managed model surface: device status and discovery; Workspace
discovery; bounded file read/read-many/stat/list/image-preview/create/write/patch/move/mkdir;
filename/content search lifecycle; Agent-owned process start/input/output/list/stop;
bounded system process list/info.
process.stopapplies only to the owning Agent session. Remote removal and system process kill are not exposed in 0.1.17. Ordinary authorized write/patch/move/start/stop must succeed on the first call without local operation approvals; sensitive and system-impact requests remain denied or unavailable under Native Agent policy. - Remote listing defaults to depth 2 and accepts depth 1–16. Search pages default to 50 and accept up to 200 results while one search session remains capped at 1000 results. Image preview accepts signature-validated PNG, JPEG, GIF, and WebP files up to 512 KiB; remote PDF preview is intentionally unavailable.
- Shell and Git work use the managed process tools. The Bundle does not call DSH's native shell for a BrowzWork Managed Workspace.
- Authoritative Workspace discovery through Gateway -> Agent. The Bundle exposes names and Access Scope to the model while keeping the opaque Workspace selector and selection handle inside the adapter. Model discovery of another device does not change the current device, Workspace, Access Scope or active execution session, including empty results.
- Model context stating that managed Workspace execution must use BrowzWork.
- The last explicitly selected visible device and Workspace names are retained in DSH local state. A new conversation or host reload silently validates that target chosen through the user control interface and rebuilds its short-lived Gateway selection/session. Selectors, selection handles, device IDs, and application session IDs are never persisted.
- The signed-out panel keeps a visible Refresh action so browser login can be completed and reconciled without closing or reopening the sidebar.
Workspace discovery, selection restoration, the complete managed tool surface,
bounded recovery, and the first UTF-8 read are implemented in source and
covered by isolated tests. The public browzwork-dsh OAuth client and existing
Gateway are configured, and the Bundle is linked into the active local DSH
Desktop Profile.
Agent install/update/restart calls @browzwork/agent's shared install/control
API. The Bundle contains no installer, Supervisor fork, Native binary, or
DSH-specific Agent. Closing or removing DSH does not stop the Supervisor or
Native Agent and does not change device identity, pairing, account state,
Access Scope, or the registered Workspace collection.
Personal devices use Device ownership and the Workspace collection. The Device Owner can use every added Workspace through DSH and the other standard clients. Agent 0.1.17 automatically reconciles internal Owner bindings at startup, Workspace discovery and session open, including legacy Workspace IDs. No separate Workspace grant is required. Local Settings provides Add/Remove; removing a Workspace does not delete its files. OS Access remains a separate explicit device scope choice.
Development check
npm test
Cloud and local Harness setup is documented in
../../docs/architecture/DSH_FOURTH_CHANNEL_CONFIGURATION.md (historical filename).
Windows/macOS real DSH Desktop installation, bookmark/menu/browser rendering, multi-device operation and 0.1.16 → 0.1.17 preservation/reconnect remain release gates, not claims established by isolated bundle tests. Enabling the plugin adds its UI directly; no first-start skin/Appearance selector is added.
Web AI bookmarks (DSH Desktop 0.2.0-rc.2)
| Bookmark | Fixed official entry |
|---|---|
| ChatGPT | https://chatgpt.com/ |
| Claude | https://claude.ai/ |
| Grok | https://grok.com/ |
| Cursor | https://cursor.com/agents |
Open More → Web AI Sites in the right sidebar for an explanation and recommended sites. ChatGPT, Claude and Grok are recommended; Cursor is an additional compatibility entry. Links open in the system default external browser through the stock Desktop external-link handler. No active execution session or built-in Browser module is required. Login and BrowzWork connection configuration belong to each site.
All four fixed links use locally embedded icons. There is no website probe, cookies/profile inspection, custom browser lifecycle, automatic sign-in or connection setup. Browser-opening failures remain visible in the sites page. The footer retains the BrowzWork launcher and current device/Workspace summary; its Web AI button has been removed.
The BrowzWork tab is a list-based Control Surface, grouped as device, Workspace,
Access Scope, Agent status, MCP connection, and More. Device/Workspace choices,
MCP sign-in/refresh/logout and Agent actions are secondary pages, not a permanent
dashboard or red error banner. MCP management shows the actual configured HTTPS
endpoint (not an assumed cloud URL); endpoint editing remains in DSH plugin
configuration. Connection errors appear in MCP management details, while local
Doctor/logs remain in Local Settings. Learn about BrowzWork opens
https://browz.work through the host's system-browser seam, with no internal About
page. Opening the control tab actively refreshes the selected device's real scope,
even when a presentation snapshot has been retained. A failed status query means
status unavailable, never Agent not installed. Local Supervisor and remote
discovery are independent, and footer/control-tab reads share presentation state.
Status is checked when entering a conversation, opening the panel, or explicitly
refreshing it. It is a last-checked snapshot: there is no periodic command poll,
because the official DSH command API records each invocation in chat history.
An explicit model device_list fetches fresh Gateway discovery rather than
reusing the selection cache; it does not switch the selected target.
The Access Scope secondary page switches the selected local device directly
between Managed Workspace and OS Access. It actively reads actual configuration
on reveal. Expansion requires a light confirmation showing the device; narrowing
applies directly. A user-only DSH command calls the same @browzwork/agent
control API, which uses the resident Native Agent's protected loopback settings
interface. Exact Origin, CSRF, device identity and atomic configuration-revision
checks remain enforced. The plugin checks the paired local identity against the
account-visible selected device, then persists and rereads before showing success.
Old selections/sessions are invalidated; identity, account, Workspaces and
bindings are preserved. Scope is device-wide, not a DSH-only permission.
This requires the matching updated Native Agent, shared bootstrap package and reloaded plugin; an old Agent cannot be made writable by refreshing UI alone. Other devices are read-only here: Gateway has no trusted remote-user Scope configuration route. No ordinary model MCP Scope setter, optimistic permission toggle, per-operation grant or DSH-host modification is introduced.
Control content fills the available right sidebar width without a plugin-imposed maximum width. It adapts to narrow and wide tracks; the native DSH drag handle controls the actual column width. The plugin does not reach into private stores, override host grid CSS, or mutate DSH DOM to resize it.
Desktop startup folds the column once after the host restores the session's surface. It does not delete saved tabs or geometry. Clicking the BrowzWork footer reveals its existing tab through the public Sidebar controller without supplying a default width; the host retains the user's resized track.
Agent lifecycle requests invoke the shared npm Supervisor control entry in a
short-lived child of the Desktop executable (ELECTRON_RUN_AS_NODE=1). The
helper exits after the control response: it is not an Agent runtime, installer,
or persistent service owner. No credentials or arbitrary exception details are
returned in lifecycle failures. Supervisor remains the only lifecycle owner.
When local state is redirected by the application environment, the panel keeps the Agent running state visible and explains the local control restriction. Lifecycle buttons are disabled while that guard applies; it is not bypassed.
Execution-context history is a display-only browzwork/context-switch Session
event (data.type = context_switch, from, to, and an ISO timestamp).
Only Gateway-confirmed session_open results establish it; a device picker
choice alone does not. Events are flushed to the normal Session persistence,
excluded from model messages, and deduplicated against that durable history.
Desktop controls and managed tools share the current Agent's authority; target
preferences are scoped to the conversation, with a one-time legacy fallback.
DSH 0.2.0-rc.2 needs the included SDK compatibility patch for execution-context history. Installing the plugin alone does not update the Desktop core SDK. Its public Session.append cannot emit the
ignorable envelope marker required for cold reads of external event types.
Run node scripts/patch-session-events.mjs <staged-sdk-root> on an extracted
candidate SDK, then package that candidate normally. This adds
Session.appendExternal, which marks plugin events ignorable without adding
them to the model surface. The integration gate applies it to a temporary SDK
copy and verifies real JSONL cold reloads; it never edits the installed app.
Unsupported runtimes fail closed rather than writing unreadable history.
The Web client renders the same event as a subdued system divider, and uses
context.changed notifications to refresh other open clients from Session
history. No event names, credentials, or targets are copied into notification
frames. Installing/deploying the new candidate and visual acceptance on the
actual Desktop/Web are separate release steps.
Explicit exclusions
No Harness Bridge, mobile relay, DSH background host, Desktop repackaging,
separate desktop product, GUI Agent installer, Codex adapter, IHarness, model
credential handling, Gateway fork, Agent fork, second Runtime, or local
filesystem/shell fallback is included.
Coordinated 0.1.17 release
This alpha.2 plugin requires the published @browzwork/[email protected] dependency. Release the four Native platform packages first, then the Agent launcher, and only then promote this plugin in the Portal. Do not overwrite alpha.1. On stock Desktop 0.2.0-rc.2, prepare a reviewed SDK candidate with node scripts/build-desktop-sdk-candidate.mjs <installed-app.asar> <candidate-app.asar>; back up the installed archive, close Desktop, apply the verified candidate, and restart before accepting context-history behavior. The builder verifies SDK integrity and preserves unrelated archive payload and resources. An already patched Desktop needs no second patch. No core changes are made by plugin installation.
Install the versioned tarball through dsh plugin --profile desktop add <downloaded .tgz> after the dependency is available. Keep the current Desktop theme and Web assets; this package does not ship either application shell.
Desktop status visibility (alpha.3)
Healthy sidebar status snapshots are hidden from chat while original events remain available for diagnostics. Errors, approvals and user actions remain visible. Desktop 0.2.0-rc.2 also requires the core SDK candidate built with the --control-visibility option; installing the plugin alone does not update the chat projection. Existing style assets are preserved. See release/DSH_DESKTOP_CONTROL_VISIBILITY.md in the source repository for compatibility and validation details.
Web AI Sites links use the host’s external-link handler (window.open with noopener,noreferrer). The page groups ChatGPT/Claude/Grok as recommended sites and Cursor as an additional compatibility entry. It neither changes the selected device/Workspace nor needs an active execution session to open a site.
Unified Web access
Install only @browzwork/dsh-bundle on Desktop. Its Cordis patch includes the
Bridge, managed service Workspace overlay and historical migration. The existing
BrowzWork panel now includes Allow Web Access to This DSH. Turning it off
closes the outbound Bridge without affecting ordinary Desktop conversations.
The browser and Relay are independently deployed in packages/dsh-web-relay.
Browser entry: https://chat.browz.work/. The existing dsh.browz.work WSS and
resource audiences remain unchanged. Both ends import one shared protocol.
To upgrade, back up the Desktop profile, remove @browzwork/dsh-mobile-phase1
from the bundle and dependency lists, keep BrowzWork once, then restart Desktop.
Keep all credentials, conversations and settings. Legacy import shims remain,
but the old Cordis patch and UI are inert. The settings key
browzwork/dsh-mobile-access, dsh-mobile-control command, service-session IDs
and component IDs are preserved. Configuration accepts allowWebAccess with
allowMobileAccess as a compatibility fallback. No model tools or permissions
are added by this merge.