Skip to content

Repository files navigation

dsh-operator-ui

An operator console for the RCOS capability loop, side-loaded into DeepSeek Harness (DSH)'s existing web UI. It adds a first-run receipt gate, a Work surface that follows a task from request to verdict, an Intelligence inventory of what the installation can actually execute, and a System panel — and it keeps the older panel tabs (Runs, Summary, Git, Browser, Files, Workflows, Capabilities) and a ⌘K command palette. Nothing is a fork; every surface reads authoritative state and none replaces shipped UI.

The Work surface: a task followed from request through route, execution, evidence and verdict

Also in this repository: FlowRouter — a sealed federation layer for capability artifacts that transports evidence of trust, never trust itself. Repositories, mirrors, discovery indexes and sync schedulers are all assumed untrusted. Start with FLOWROUTER.md; the evidence is fourteen raw receipts in eval/receipts/ and node eval/lib/flowrouter-show.mjs prints the end-to-end trace in five minutes.

It is a side-loaded DSH plugin (a Cordis bundle patch), not a fork:

  • No upstream changes. One package, installed into a profile; removing it restores stock DSH exactly.
  • No duplicate state. Every rendered fact is authoritative Host state, read through the services the web profile already mounts (ctx.sessions list + projections + jobs) plus the Archon API and the capability registry. Nothing is polled from the renderer, nothing is inferred from chat text, and the plugin persists nothing of its own.
  • Additive seats. It registers into the conversation.view list beside Conversation and Trajectory and into the shell's overlay slot. It never replaces shipped UI, and an installation that prefers the old tabs can stay on them.

The RCOS control surface

On an installation that has not yet earned its receipt, the whole UI is the gate:

First run: the receipt gate with its nine-item component checklist

The gate checks nine components (DSH, operator-ui, Node, Archon, RCOS, git, Chrome, tools, providers) and offers Verify RCOS — which executes a real capability through your registry and your Archon, then seals the result into <home>/operator-ui/receipt.json. The green state is earned, not asserted: the receipt is re-read and re-checked on every load (VALID / STALE / TAMPERED / NONE), so a stale or tampered receipt puts the gate back. Work › unlocks only behind a valid receipt; Use legacy tabs (debug) is the escape hatch.

Work is the operator loop. Type an objective, hand it to RCOS, and the task is routed through the configured registry, executed on the configured Archon, and verified against the capability's declared expectation:

The Work list: every dispatched task with its verdict

Select a task and you get its spine — REQUEST → ROUTE → EXECUTION → EVIDENCE → VERDICT — with the dots (Observed / Executed / Validated / Objective satisfied) as the at-a-glance state, the authority line ("Ask before acting"), and the next step spelled out. From there, evidence → opens the drawer a reviewer would ask for:

The evidence drawer: the claim, what supports it, and the observed outputs

Nothing is dressed up. A goal the installation cannot route is refused before execution — no Archon run, no fabricated evidence, spine columns reading "— (refused before execution)", verdict FAILED · no-route — and the surface offers bounded acquisition instead of pretending:

A refused goal: no capability matched, so nothing ran

Intelligence answers "what can this installation actually execute?" Lifecycle is what a capability is; routing is what the router may use right now, with reasons:

Intelligence: installed capabilities with lifecycle, routing eligibility and operating history

System is the receipt and the machine: verification state and age, the receipt hash, the component inventory with versions, Verify again, and the switch to the legacy tabs.

System: verified state, receipt hash, component inventory

Every screenshot above comes from a sanitized demo home — one promoted capability (word-count 1.0.0 → workflow word-count-v1) executing over a scratch workspace. No real workspace data, paths or session titles.

The legacy tabs

The older panel set is still registered and unchanged; System → Legacy tabs (or the gate's debug button) is the way back to it:

Tab What it shows
Runs one row per session: status dot (running / needs-attention / done / idle / blank), title + preset + cwd, last update, context-pressure meter (warns ≥80%, critical ≥95%), session token total, badges for live background jobs and pending inbox input. Click a row for the detail pane — session facts, the live inbox (queued vs steering placements), running tool calls, background jobs, Open and Cancel turn.
Summary the one-screen answer to "what is this run doing": state, last output, turns/steps/LLM time, context pressure, in-flight work, branch + changes
Git read-only workspace status / diff / log with staged-unstaged-untracked chips
Browser a supervised on-screen browser the agent drives while you watch every action live
Files workspace tree with git M/A/D badges and inline text-file preview
Workflows Archon runs — status, step, ship/fix/blocked
Capabilities registry view — promoted/candidate/retired, gate progress, reuse counts, eval history
Work, Intelligence, System the same three RCOS control-plane surfaces the gate opens, rendered in-session

The ⌘K / Ctrl+K command palette works from anywhere, including inside the composer (jump to any session, new session, toggle sidebar, switch views). Point DSH_OPERATOR_UI_ARCHON at the Archon API and DSH_OPERATOR_UI_REGISTRY at your capability-registry.json (schema: capability-registry.schema.json) — see DEPLOY.md.

Install

Requires DSH 0.1.0-rc.6 (the version this was built and verified against — see COMPAT.md for the full tested pin: DSH + peers + Archon API shape).

Requirements

  • Platform: macOS or Linux. Windows is explicitly unsupported (the plugin uses POSIX path rules and pkill/pgrep for the supervised browser).
  • Node: ≥ 22 (engines enforced; the Browser tab uses Node's native WebSocket).
  • git on PATH (read-only usage, Git/Files tabs).
  • DSH 0.1.0-rc.6 with the web profile in use.
  • Optional: Chrome/Chromium on the host (Browser tab human-driving works without it only if a binary is found; override with DSH_OPERATOR_UI_CHROME).
  • Optional: Python 3 (only for RCOS registry schema checks, later slices).
  • Optional: @deepseek-ai/dsh-tools peer — enables the four browser_* agent tools. Without it the plugin still boots and serves every tab; the Browser tab says honestly that agent driving is disabled (human driving still works). Real installs resolve peers automatically; the link: dev setup needs the peer installed beside DSH (see AGENTS.md).

From a clone of this repository:

git clone https://github.com/Foshowithit/dsh-operator-ui.git
cd dsh-operator-ui
node scripts/check.js                 # must PASS before proceeding
dsh plugin --profile web add "$PWD"

No manual cordis.patch.yml edit is needed — the plugin's bundle patch self-inserts its row (- insert: form). Restart (or live-reload) the web profile and open the UI. On a machine with no valid receipt you land on the gate; verify once and you get the RCOS surfaces above, with the legacy tabs one click away.

Uninstall / disable

dsh plugin --profile web remove dsh-operator-ui

Slot entries, the style tag, and the host-half service are all fiber-owned effects — removing the plugin reverts everything. Sessions, settings and the receipt are untouched (the plugin never writes sessions or settings).

Compatibility notes

  • Verified against DSH 0.1.0-rc.6 (Cordis 4.x, web profile). The client half targets the conversation.view slot contract as served by that version.
  • COMPAT.md is the tested pin — RCOS owns the exact known-good DSH + plugin + Archon combination; upgrades move through verification before the pin changes. The peerDependencies range in package.json stays truthful but is not the support claim.
  • Styling is scoped under .opui-* classes and keyed off DSH design tokens (--dsw-*) with fallbacks — it does not depend on build-specific CSS-module hashes.
  • Unknown projection fields degrade to blanks, never crashes: the surfaces guard every field they read.

Layout

lib/index.js    host half  — status route, config, verification, registry + Archon reads
lib/client.js   client half — gate, Work, Intelligence, System, legacy tabs, palette
cordis.patch.yml bundle patch — one self-insert row

License

MIT

About

RCOS operator control plane for DeepSeek Harness — GoalRunner, authority gates with explicit approval, three-truth verification (execution / capability / objective satisfaction), trust ladder and next-action, task identity rebuilt from Archon runs. Side-loaded, no fork.

Topics

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages