• v1.17.0 5bfd745590

    v1.17.0
    All checks were successful
    Checks / Functional checks (push) Successful in 14s
    Stable

    ClaudiuSchuster released this 2026-09-25 12:41:41 +00:00 | 104 commits to main since this release

    Steer-console geometry round O. The vertical Send tower now spans UPWARD into the target line's free right side (right of the expand control, never into the status/response row below), so the console geometry is state-invariant: identical button position and width whether the last-steer answer block is open, minimized to its chip, or absent (CDP-verified: constant 24x138 px, x10 toggle loop 0.00 px delta, at 1920/950/500 px widths). The label is the single word Send; the accessible context (Send to - queues as the next sequential turn) lives on aria-label/tooltip. The response modal is bottom-anchored flush-ish ~14 px above the favorites dock and horizontally centered in every console state. Family edges follow a declared precedence (native parent_id > bell-ledger/live-spawn > delivered doorbell; children derived from parent_of - a conflicting edge never counts toward both parents), covered by the new unit-test suite that also joins CI.

    Downloads
  • v1.16.0 cda8c64e7b

    v1.16.0
    All checks were successful
    Checks / Functional checks (push) Successful in 14s
    Stable

    ClaudiuSchuster released this 2026-09-25 11:24:10 +00:00 | 106 commits to main since this release

    Trust package: running children resolve their parent from the live dispatcher spawn (--notify-parent on the command line — the bell ledger only records the link at completion), running first turns show an honest mint "live" instead of 0/0 tokens, and an open response modal never freezes again (the parked poll resumes on any new activity, typed drafts/focus/scroll position untouched).

    Downloads
  • v1.15.0 f13b646f27

    v1.15.0
    All checks were successful
    Checks / Functional checks (push) Successful in 15s
    Stable

    ClaudiuSchuster released this 2026-09-25 10:40:11 +00:00 | 108 commits to main since this release

    Trust package: turn-end triggered steer fast lane (delivery ~3-5 s after turn end instead of ~45 s), echo honesty (confirmation only on real transcript/delivery visibility), dismiss/edit chips (text recall into the prompt), presumed-dead session hints, ESC contract (minimize only — never unfavorite).

    Downloads
  • v1.14.0 9fe4078eec

    v1.14.0
    All checks were successful
    Checks / Functional checks (push) Successful in 14s
    Stable

    ClaudiuSchuster released this 2026-09-25 09:44:45 +00:00 | 109 commits to main since this release

    Round L of the pinky series: the repo finally tells its true story, and the steer target line learns to read the session's context.

    README rewrite (content, not words) — the observatory is what it always was: an interactive cockpit for ALL ZCode sessions, not a read-only dispatcher dashboard. Steering with queue semantics and optimistic echo, question answering, native archive/pin/hide, favorites dock, lineage colors, hydration prediction, bell visibility — plus an honest-limits section. Cross-leverage: powered by zcode-dispatch, independently useful without it, together the dreamteam (the mirror section ships in zcode-dispatch's README).

    Orchestration graphic — a Mermaid diagram with five lanes (Brains / Pinkies / Bells+MQTT / Cockpit / Release-return): dispatch, doorbell digests, sweeper and watchdog safety nets, the MQTT broker with its zcode/session/<id>/turn-* topics and stream.py listen, the cockpit's steer/answer paths, and releases installing back onto the station. Every arrow is a real, verifiable mechanism.

    Glamour shots — three fixture-data screenshots embedded (dashboard with lineage colors and all row hints, steer console, question modal); social preview tagline and chips refreshed (still ≤ 1 MiB, still reproducible via make social-preview).

    Steer target line: context % + cache hit rate — ⟶ steer target: … · GLM-5.3 · max · 64% ctx · cache ~96% · …, mirroring the desktop client's own math: the latest model request's tokens.total (step-finish parts; input there includes cached tokens) over the provider-config context window (modelConfigRules cascade — live file, embedded z.ai snapshot fallback, ZDO_PROVIDER_CONFIG override), and the session-average cache hit rate (Σ cache.read ÷ Σ input). The per-turn sums in turn_usage are deliberately not used — they overstate multi-request turns. Raw numbers in the tooltips; formula documented in the README.

    Owner UI findings fixed (all verified by DOM geometry against a fixture DB, at full and short viewport heights):

    • the response modal's title no longer clips above the viewport when the dock reserves bottom padding;
    • the vertical send button's word columns read left→right ("Send to" LEFT, "session" right);
    • the send strip row-spans the prompt AND the status line — one tall column, zero dead air.
    Downloads
  • v1.13.0 6523ab931b

    v1.13.0
    All checks were successful
    Checks / Functional checks (push) Successful in 15s
    Stable

    ClaudiuSchuster released this 2026-09-25 08:12:05 +00:00 | 110 commits to main since this release

    Round K of the pinky series: twelve owner morning-coffee refinements that make the cockpit shine — subtle-but-visible, dark-native, no dead controls.

    Header & timing — the residency line is renamed to what it is (⏳ ZCode chat residency cycle: 10 min · next sweep ≤ 60 s) and lives in the header's right cluster beneath the notification controls; the update stamp grows a live relative age (· 12s ago) ticking every second off the poll clock; the RUNNING section's top gap is halved (42px → 18px).

    Rows — hovering a row GLOWS in its root-lineage family color (tint plus radiance from the left accent bar; default cyan for family-less sessions); column widths are redistributed so the Turns header no longer merges into Tokens and the action column is tight at max window; at 390px every row keeps a one-line icon-only action cluster (👁 show, 📥 archive, 🙈 hide — labels in the tooltips; hidden header slivers stop phantom columns from stealing the name column).

    Steer console — completed steers render a green ✅ whatever carried the news (exit 0 or a restart-era status file; red ❌ is reserved for genuine failures); the prompt-expand button sits flush with the textarea's right edge; Send to session renders vertically (upright stacked letters, two slim columns) as a strip stretching the prompt's full height — the reclaimed dead air becomes prompt space (min-height 112px); Enter still sends.

    Follow output — default ON, the checkbox moved next to “hide harness noise” on both surfaces (drawer meta line, modal footer), one shared switch persisted across browser sessions (localStorage zdo-follow) with both checkboxes mirroring each other.

    Parent column — shows the parent session's TITLE in the family hue with a 📋 copy-id button (full parent id), falling back to the short id when unresolvable.

    Dock — clicking anywhere in the bar (not only a card) minimizes the currently expanded panel, beside the card-toggle and backdrop paths.

    Round-J validation findings — F1: queueDepth.inFlight and the row steerQueue now count superseded in-flight steers (every live spawned dispatcher, not just the newest record — “2 in flight” no longer reads as “1 queued”); F2: the README describes the bg-active hint as the breathing mint CSS dot it is.

    Validated by a 21-check fixture + headless-Chrome CDP gate (per-item checks incl. a 390px and a max-width pass, screenshots per item; superseded-steer API proof 2 → 0), super-linter pylint 10.00/10, forge functional checks green.

    Downloads
  • v1.12.0 69659fc6ae

    v1.12.0
    All checks were successful
    Checks / Functional checks (push) Successful in 14s
    Stable

    ClaudiuSchuster released this 2026-09-25 00:12:10 +00:00 | 111 commits to main since this release

    Round J of the pinky series: the busy verdict becomes transparent, the send button keeps the queue promise, and the owner never loses his words.

    Busy-state transparency — desktop invisibility ≠ idleness: bg active · Ns row hints for background turns (pulsing dot, never on running rows), a state-aware busy line in the steer dialog (idle / bg active with live age), and a queued steer explains WHY it waits and WHEN it lands: queued · waiting for idle — background turn active — last transcript activity Ns ago · delivers ~≤45 s after it goes idle (30 s grace + sweeper cadence).

    Send-button queue semantics — the button stays ENABLED while earlier steers are queued or in flight; each send becomes the next sequential turn (dispatcher self-queue, never interleaving). Live queue depth (1 in flight · 2 queued) in dialog and row, soft cap of 3 waiting steers per session (friendly inline note, drafted text kept — never a dead button), and the ⤢ prompt-expand control moved onto the target line above the input row.

    Optimistic echo — Enter shows the message instantly as a pending entry (dashed accent, ⏳ chip); the DB poll reconciles it seamlessly (content+timestamp, no duplicate); a failed delivery (dispatcher error, drop/dead-letter, POST failure) flips it to ⚠ not delivered with the full text preserved plus Retry and copy. The buffer survives panel close/reopen for the page session.

    Poll resilience — shared-DB reads run behind a 5 s busy timeout with one retry-on-busy; a failed poll never blanks an open panel (last good content kept under a reconnecting… hint, hard error + Retry only after 3 consecutive failures, automatic recovery); running→completed section moves never invalidate an open panel; dock items toggle (expanded favorite minimizes on click).

    Hidden section — deliberate view-state hiding (observatory-state.json) between History and Archived, collapsed by default, full row toolkit plus Unhide and Archive — distinct from the native ZCode archive (view concern vs ZCode concern, README documents both).

    Bell ledger (dispatcher v0.3.1+) — parent/family edges also derive from stream-bells.json spawn records, so lineage survives bells stuck in flight; 🔔 pending · Nm / 🔔 stuck row hints; tolerant parser, graceful degradation on older dispatchers.

    Expandable tool parts — ▸ ⚙ name affordances unfold pretty-printed input/output (monospace, capped height, … N more lines + copy full); expansion state survives re-polls.

    Polish — row-leading title removed (the spanning line is THE title), section-header helper texts stripped and moved into the README.

    Validated by a 57-check API+CDP gate (fixture DB + stub dispatcher: real steer round-trips incl. queue/fail paths, live DB-lock resilience with content preservation and automatic recovery) — all green; super-linter pylint 10.00/10.

    Downloads
  • v1.11.0 45a706b299

    v1.11.0
    All checks were successful
    Checks / Functional checks (push) Successful in 13s
    Stable

    ClaudiuSchuster released this 2026-09-24 21:50:49 +00:00 | 112 commits to main since this release

    Owner redefinition shipped: root-lineage family colors replace the v1.9.0 project colors.

    Every session's ROOT — resolved transitively over both parent-edge sources (native session.parent_id + doorbell edges), cycle-guarded (canonical smallest-member break, entry-point independent), 16-hop emergency cap, memoized linear build — is hashed into the fixed 12-hue palette. The root and ALL its descendants wear that one color on the left accent bar, row tint and spanning line: work/mission trees read as coherent blocks.

    • Legend, clickable project filter and the v1.7.0 family dot removed — no legend by design (the color IS the family identity; one clear signal beats two mushy ones).
    • Parent column: family tooltip ("family of ⟨root title⟩ · N sessions"), clickable parent ids and ◉ root glyphs pin a whole-family highlight across sections.
    • Gates: 24-assertion fixture gate (transitive inheritance over doorbell AND native chains, cycle determinism, restart-stable hues, read-only DB proof), headless-Chrome DOM evidence, Super-Linter v8.7.0 slim all lanes green, forge CI green.
    Downloads
  • v1.10.0 a163f266ea

    v1.10.0
    All checks were successful
    Checks / Functional checks (push) Successful in 15s
    Stable

    ClaudiuSchuster released this 2026-09-24 21:23:47 +00:00 | 113 commits to main since this release

    Steer dialog round H — UX refinement from owner findings after live steering.

    Response tail: unread-driven

    • Full scrollable block only while unread (own scroll area, explicit truncation hint via the new tailTruncated flag)
    • Auto-collapses to a slim one-line summary chip once seen (~1.5 s in-view dwell or collapse click)
    • Manual expand toggle on the chip; new content re-expands with a '● new' badge
    • Read state shared between the drawer and modal surfaces

    Exit codes: reference, not status

    • Status lines explain only the steer's current state (friendly meaning first, 'exit N' in parens)
    • Full exit-code table behind a '?' popover explicitly labeled static reference — not the live status of this steer, built from the same STEER_EXIT map as the status line

    Also: README updated; pre-existing MD013 line-length violation repaired.

    Downloads
  • v1.9.0 d3f16c7a35

    v1.9.0
    All checks were successful
    Checks / Functional checks (push) Successful in 14s
    Stable

    ClaudiuSchuster released this 2026-09-24 20:36:54 +00:00 | 115 commits to main since this release

    Owner review round G — all 13 items, plus the native-archive rework.

    The mechanism change: native task-index archive

    The Archived section and the archive/unarchive buttons now drive the desktop's OWN store — tasks.archived in ~/.zcode/v2/tasks-index.sqlite, byte-for-byte the store the ZCode sidebar's archive reads and writes (verified against the installed desktop bundle: the manual archive patches only the flag, no updated_at bump; the auto-archive runs the same single-column UPDATE mirrored here). The old session.time_archived mechanism is gone; a one-shot startup migration clears leftover values. Refresh honesty: a running ZCode reflects observatory archives after its sidebar re-queries; the observatory picks up desktop archives live.

    Project identity

    Colors now key on the PROJECT (repository identity) derived from the session directory (worktree .git pointer → main repo; path fallbacks) — one repository, one color, across every worktree. Legend chips are clickable and filter the tables to a project for the page session.

    The 13 review items

    1. Prompt expand control (⤢/⤡) for the steer textarea
    2. Dock foreground above panels; one-click session switch from the dock
    3. Session title right-aligned on the spanning line
    4. ID column slimmed to the Parent width
    5. Models column dark bar removed (single-line cell, muted overflow)
    6. Reasoning level next to the model chip (· max/low/…)
    7. "Last activity" → "Activity" (slimmer column)
    8. Primary button calibrated (Archive height, narrower, mint kept)
    9. Project colors by derived repository identity
    10. Clickable legend filter (persisted per page session)
    11. History collapsible, default open
    12. Archived = native task-index membership
    13. Archive confirm ask (Enter/Esc)

    Gates: pinned Super-Linter slim v8.7.0 (project lane scope) EXIT 0, py_compile, forge functional checks green; 21/21 CDP e2e checks over a fixture (session DB + task index + worktree pointers).

    Downloads
  • v1.8.0 0b1650fed1

    v1.8.0
    All checks were successful
    Checks / Functional checks (push) Successful in 13s
    Stable

    ClaudiuSchuster released this 2026-09-24 19:27:35 +00:00 | 116 commits to main since this release

    Favorites dock at the page bottom: every response modal and transcript panel minimizes (–) into a live task bar — status dot, unread badge counting messages since minimizing, doorbell glow, expand ⤢, remove ✕. Favorited sessions (row ★ + in-panel ★, observatory-local state like pinning) stay docked across closes and reloads: X/Esc on a favorite minimizes it back instead of closing, X on anything else closes fully and removes its dock-only item. Dock items reopen the last-shown view (response vs full transcript), are keyboard-focusable (Enter/Space), and the bar hides itself when empty and scrolls horizontally at narrow widths. API: /api/favorite + /api/unfavorite (same local-state pattern as pin/unpin), "favorite" per row in /api/sessions; README documents pinned (table ordering) vs favorited (dock presence) as two independent flags. Validation: 17/17 CDP checks on a fixture DB (minimize/expand, favorite persistence across reload, unread badge, doorbell glow, keyboard, narrow widths), pinned Super-Linter slim-v8.7.0 EXIT 0, py_compile.

    Downloads