Skip to content

0.1.5-rc4 (harness 0.1.5-rc.2)

Pre-release
Pre-release

Choose a tag to compare

@kuun993 kuun993 released this 24 Sep 02:56

Targets harness 0.1.5-rc.2 — every harness peer is pinned to exactly that release.

What changed since 0.1.5-rc3

  • The loop engine is a per-session choice. One router factory owns the process's single agent-factory slot and dispatches each session to the engine its agent preset names: the built-in in-process loop, or one of claude-code, codex, pi, kimi. Sessions on different engines run concurrently — one chat can be on Codex while another is on Kimi.
  • Any open, idle session can move to another engine. Between two hosted engines the move is an in-place handover: the same Session object, its store entry and its write handle pass to the successor, so the session never leaves the registry and the page never disconnects. A move involving in-process cannot be handed over in place (the harness loop neither yields a live session nor adopts one it did not create): the host releases that session's agent and the page reloads, after asking first. The dsh web process is never restarted. A move is refused while a turn is running, and subagent sessions cannot move.
  • One shared model route. Every hosted engine logs the same provider label, external, which advertises exactly one entry, default. The model menu no longer shows one identical group per engine (the browser catalog is built without a session and shared across the whole host generation, so it cannot be filtered per session).
  • The model selection is handed to the engine — endpoint and credential included. A session that selects a real dsh model has that model's endpoint, protocol and credential resolved from dsh's own configuration (provider directory → settings namespace → the credentials service; never process.env) and passed through the engine's own surface: Claude Code's ANTHROPIC_BASE_URL/ANTHROPIC_AUTH_TOKEN, Kimi's KIMI_MODEL_* environment, a plugin-owned Pi agent directory plus --provider/--api-key, and Codex's -c model_providers… plus its credential environment. Whether an engine can speak a given protocol is the engine's business — a refusal is reported, not swallowed. default, no selection, or an unresolvable endpoint injects nothing.
  • A session's model seat now follows its engine, written where the host reads it, and picking the deployment default is contained: session.selectModel also saves the pick as the deployment default, which the router now rewrites for sessions built on the harness loop. The Codex driver's parsed-but-unused config.env is consumed as of this release.
  • Both READMEs were slimmed (English 471 → 75 lines) with their runnable procedure moved into docs/source-checkout.md.

Known open items

docs/optimization-backlog.md carries them, numbered for incremental work. The four P0 items all need a real machine: Codex's -c parsing and wire_api compatibility, Kimi's environment-defined model appearing in session/new's configOptions, Claude Code's acceptance of the endpoint's request path, and Pi's tolerance of a minimal models.json.

Install

dsh plugin --profile web add dsh-loop-engine

See the README for requirements, usage, and the known limitations, and docs/ for the details.