Skip to content

v0.2.0

Choose a tag to compare

@johnford2002 johnford2002 released this 12 Jul 00:33
· 37 commits to main since this release
71552d6

Kubernetes high-availability, a reworked dashboard, and a full QA sweep. A
second QA pass over the real prospero/caliband stack filed 23 findings; all
are fixed here, alongside first-class leader election for the k8s fleet backend
and a new agent-timeline dashboard.

Added

  • Leader election + attach lifecycle for the K8sFleet backend. The
    session-plane attach — the one path that writes an agent's events to the shared
    store/bus — is now gated on a per-agent ownership lease, so with 2+ prosperod
    replicas exactly one replica owns, attaches to, and emits each agent (no more
    duplicate SSE events or racing per-stream seq allocation). Standalone is
    unchanged (SelfOwnsAll); a clustered deploy builds a LeasedOwnership lease
    plus heartbeat. Attach tasks are now promptly torn down on stop/remove/restart,
    and any agent observed Running — including operator- or peer-created ones —
    is streamed by the lease owner
    (#108,
    #112,
    #113)
    (#138).
  • Dashboard agent timeline, tool-call inspector, and run header — a folded
    event timeline with expandable tool-call segments and a per-run turns/outcome
    header (#5)
    (#96).
  • prospero-types crate — the normalized FleetEvent/model DTOs extracted
    into a small, wasm-compatible serde-only crate the WASM dashboard can share
    (#98)
    (#100).

Changed

  • Under PROSPERO_FLEET=k8s, prosperod no longer builds a local
    FleetManager/poll loop; the k8s backend serves directly over the shared
    store/bus (#83)
    (#92).
  • /readyz now reports workspaces_total/workspaces_healthy/
    workspaces_unreachable (was repos_*), and user-facing error wording says
    "workspace" not "repo", matching the vocabulary used everywhere else
    (#116,
    #117)
    (#135).

Fixed

  • Dashboard. Terminal-agent SSE streams no longer reconnect-storm into an
    unbounded, duplicated timeline with runaway memory
    (#105)
    (#128); tool calls resolve
    ok/fail instead of showing "running" forever (paired by tool_use_id)
    (#106)
    (#131); the fleet summary
    shows the workspace count, the misleading $0.0000 cost is gone, and a favicon
    is served (#115,
    #109,
    #119)
    (#134).
  • API. Duplicate workspace registration returns 409 Conflict, not a
    misleading 503 (#111)
    (#139); an unknown agent's
    events endpoint returns 404 instead of 200 []
    (#118)
    (#135); api_key_from_env
    on a keyless provider is rejected at config-set time, and rm no longer races
    a just-spawned agent or lags the fleet view
    (#120,
    #122,
    #123)
    (#137).
  • k8s hardening. The session-plane bearer token is never sent over plaintext
    (#107)
    (#133); unrecognized
    CalibanTask phases map to a terminal state, calibandEndpoint is validated,
    lock poisoning can't wedge the fleet view, the token compare is constant-time,
    and --fleet-backend k8s on a non-k8s build fails before any side effects
    (#114,
    #121,
    #125,
    #126,
    #127)
    (#136).
  • Tests. De-flaked the distributed_bus PG suite under parallel shared-DB
    load (#110)
    (#129) and
    cli_drives_the_full_stack (#85)
    (#94).