Skip to content

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.action for a compact branded launcher and sidebar.right.pane.tab for 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-login command 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 browzwork preset. 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.stop applies 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.