Skip to content

Releases: tmarkovski/dbos-argus

v0.0.28

09 Jun 20:35
v0.0.28

Choose a tag to compare

Tested against DBOS 2.23.0 — see tested_dbos_version in GET /version and dbos-argus --version. Argus tracks the latest DBOS schema and does not aim for backward compatibility; the dependency floor is now dbos>=2.23.0. Pointing Argus at an older DBOS database whose dbos.workflow_status lacks completed_at will error on the workflow list / detail reads.

Added

  • Workflow completion time. DBOS 2.23.0 added dbos.workflow_status.completed_at,
    the canonical wall-clock timestamp for when a workflow reached a terminal
    state. Argus now reads it: it appears as completed_at on the workflow
    list and detail API/realtime payloads, and the workflow detail pane shows
    a Completed row and computes the workflow Duration from
    started_at → completed_at (falling back to updated_at while still
    running). Null for workflows that haven't finished.

Changed

  • Schema snapshot regenerated against DBOS 2.23.0 (closes the dbos-watch
    drift issue). workflow_status.completed_at is now argus-tracked.
  • Bumped the dbos dependency floor to >=2.23.0 to align Argus with the
    DBOS release that introduced completed_at.

v0.0.27

09 May 15:25
v0.0.27

Choose a tag to compare

Tested against DBOS 2.21.0 — see tested_dbos_version in GET /version and dbos-argus --version. Other DBOS versions may still work; the in-app connection indicator surfaces any schema mismatches.

Added

  • New top-level Queues page surfacing the persisted DBOS queue registry
    (dbos.queues, added in DBOS 2.21). Shows each queue's concurrency,
    worker concurrency, rate limit, priority/partition flags, and last-updated
    timestamp. Empty / never-used queues now appear here even before any
    workflow has been enqueued onto them. Each row links to the existing
    workflows view filtered by queue name.
  • Queues page now shows live Enqueued and Running counts per queue,
    joined from workflow_status against the queue name in a single
    aggregate query. Each non-zero count links straight to the workflows
    list filtered by queue + status.
  • New GET /api/queues REST endpoint and matching queues realtime
    channel — same payload shape on both transports.
  • Sidebar connection footer now reports the actual backend (PostgreSQL or
    SQLite) plus its server version, replacing the previous hard-coded
    "Read-only DBOS Postgres" label. /healthz and the health realtime
    channel both expose the new database_dialect and database_version
    fields.
  • Dashboard top-queues card replaces the old "DBOS queue registry"
    tile: shows the top three queues by enqueued + running as horizontal
    bars (chart-3 / chart-2 / chart-1 fills against a track that adapts to
    the active theme), each linking to the workflows list filtered by that
    queue plus the ENQUEUED + PENDING statuses. Inactive queues stay in
    the list with zero-width fills so the card doesn't collapse on quiet
    databases. The registered-queue total moved to the layers badge in
    the top-right corner.

Changed

  • Schema snapshot regenerated against DBOS 2.21.0. dbos.queues is now
    argus-tracked across all 11 columns; workflow_status.rate_limited is
    recorded as untracked (it's DBOS-internal accounting, not a user-facing
    signal — every workflow run from a rate-limited queue gets the flag set,
    not just throttled ones).
  • Dashboard KPI cards are now click-through: an absolutely-positioned
    anchor stretches over each card so the entire surface routes to the
    relevant page (/workflows/, /notifications/, /schedules/,
    /queues/), with internal anchors (per-status badges, the
    failed-recent link, per-queue bars) lifted above via relative z-10
    so deep links still reach the right filtered view. Cursor is
    pointer over the whole card and a hover shadow + ring strengthens
    the affordance.
  • Sidebar wrapper now darker than the inset surface in both themes
    — the preset's --sidebar token sat at ~white in light mode and was
    lighter than the inset in dark mode, so the rounded inset panel had
    no visible frame in either theme. Override pulls light-mode sidebar
    to oklch(0.94) (vs 1.0 background) and dark-mode sidebar to
    oklch(0.10) (vs 0.145 background) so the inset reads as a lifted
    panel against a darker frame.

v0.0.26

06 May 12:45
v0.0.26

Choose a tag to compare

Tested against DBOS 2.19.0 — see tested_dbos_version in GET /version and dbos-argus --version. Other DBOS versions may still work; the in-app connection indicator surfaces any schema mismatches.

Added

  • Result pane: lightweight, dependency-free JSON syntax highlighter
    (JsonView). Tries JSON.parse first; on success, tokenizes via the
    classic Crockford regex and colors keys / strings / numbers / booleans /
    null using existing theme tokens (keys use --workflow-accent so they
    brighten against dark muted surfaces, the same treatment workflow-graph
    child names already use). Falls back to escaped plain text when the
    payload isn't parseable JSON (raw base64, malformed strings) so the
    box still renders the value.

Changed

  • Result pane (output dialog): the bordered code box itself is now the
    scroll container instead of the wrapper around it. Wrapper switched
    to a flex flex-col slot and the box gets min-h-0 flex-1 overflow-auto, so the border stays pinned at the dialog's bounds
    while long JSON scrolls inside.
  • Result pane (side panel): output box capped at max-h-[70vh] with
    min-h-64. Long JSON now scrolls within the box up to ~70% of the
    viewport instead of stretching the side pane down to match the
    payload, while keeping a sensible minimum so the box stays usable
    when metadata above it grows or the window shrinks.

v0.0.25

06 May 12:08
v0.0.25

Choose a tag to compare

Tested against DBOS 2.19.0 — see tested_dbos_version in GET /version and dbos-argus --version. Other DBOS versions may still work; the in-app connection indicator surfaces any schema mismatches.

Fixed

  • Pickle decoder now survives REDUCE-path calls to unknown classes
    (e.g. a timezone-aware datetime whose tzinfo reduces to
    datetime.timezone(timedelta(0))). Previously the opaque proxy
    rejected positional args from REDUCE and aborted the entire decode
    with TypeError: ...timedelta() takes no arguments, leaving real
    step outputs as a raw base64 blob in the UI.
  • Allowlisted common stdlib value types — datetime.{datetime,date,time, timedelta,timezone}, decimal.Decimal, uuid.UUID — so they decode
    to native Python and the JSON encoder renders them as ISO 8601 strings
    / decimal strings instead of opaque dicts.

v0.0.24

06 May 11:50
v0.0.24

Choose a tag to compare

Tested against DBOS 2.19.0 — see tested_dbos_version in GET /version and dbos-argus --version. Other DBOS versions may still work; the in-app connection indicator surfaces any schema mismatches.

Changed

  • Pickle decoder now renders unknown classes (Pydantic BaseModel,
    dataclasses, plain Python objects) as {"__class__": "module.Name", ...fields} instead of falling back to the raw base64 blob. The
    unpickler swaps unknown classes for an inert _OpaqueObject proxy that
    captures BUILD state via __setstate__ — the user's module is never
    imported and no user code runs, so the existing safety guarantee
    holds (covered by a regression test that constructs a pickle stream
    resolving os.system and verifies it doesn't execute). Pydantic v2's
    envelope state (__pydantic_fields_set__ / __pydantic_extra__ /
    __pydantic_private__) is stripped so the UI sees just the model's
    real fields.
  • README: uvx dbos-argus examples now use dbos-argus@latest so each
    invocation re-resolves the version instead of reusing the wheel uvx
    cached the first time.

v0.0.23

06 May 11:24
v0.0.23

Choose a tag to compare

Tested against DBOS 2.19.0 — see tested_dbos_version in GET /version and dbos-argus --version. Other DBOS versions may still work; the in-app connection indicator surfaces any schema mismatches.

Fixed

  • Bundled console no longer hits a 403 Forbidden on the /ws upgrade.
    ARGUS_CORS_ORIGINS now defaults to * instead of the Vite dev port,
    so the SPA served by FastAPI works on any listen port (and any custom
    Vite dev port works without extra config). Argus is an unauthenticated
    read-only dev tool typically bound to localhost — operators who expose
    it more widely should narrow ARGUS_CORS_ORIGINS to their console
    origin(s).

Changed

  • README: documented SQLite as a first-class backend alongside Postgres,
    with uvx / pipx / Docker examples for both, the four-slash absolute
    path convention for sqlite:// URLs, and an updated architecture
    diagram showing the dual-backend store.

v0.0.22

05 May 11:29
v0.0.22

Choose a tag to compare

Tested against DBOS 2.19.0 — see tested_dbos_version in GET /version and dbos-argus --version. Other DBOS versions may still work; the in-app connection indicator surfaces any schema mismatches.

Changed

  • Default preset switched to b5TiUdXFtA (violet primary, neutral charts,
    Inter sans + Roboto Slab heading) via pnpm --filter console theme:sync.
    Favicon set (svg + 16/32 + apple-touch) recolored from the prior teal
    #00786f to violet #6d28d9 to match the new --primary.
  • Workflow detail flow: step pills lost their gray fill in favor of a
    transparent rounded-full border. Hover gets a faint bg-muted/40 tint;
    selected state swaps to a border-primary outline with a bg-primary/5
    inset. Workflow containers lost their drop shadows in all three states
    (selected / current / default) — the borders alone carry the structure
    now that the step layer is quieter.
  • Workflow detail flow, awaited and spawn rows: the directional arrow
    ( for DBOS.getResult, for child spawn) moved out of the step
    body and onto the duration line on the right, so it visually anchors
    at the same edge of the pill as the spawn / return xyflow handles.
    Awaited rows dropped the literal "result" prefix; both rows show the
    cross-workflow target name in the body slot, and child rows resolve
    the spawned workflow's display name via family lookup (paralleling
    the existing awaited-name resolution).
  • Workflow detail side pane: title bar now reads "Workflow details" /
    "Step #N details" (was "... result") since the pane carries metadata
    • events alongside the result. New collapse toggle in the eyebrow
      (PanelRightClose / PanelRightOpen via the same icon-sm ghost
      Button as the layout's sidebar trigger and theme switcher) hides the
      body and animates the pane width down to a 64px peek. The resize
      handle stays in place; grabbing it while collapsed pulls the pane
      out of the peek under the cursor instead of jumping to the saved
      expanded width, and releasing below the usable minimum snaps back
      to collapsed.

v0.0.21

05 May 00:35
v0.0.21

Choose a tag to compare

Tested against DBOS 2.19.0 — see tested_dbos_version in GET /version and dbos-argus --version. Other DBOS versions may still work; the in-app connection indicator surfaces any schema mismatches.

Added

  • SQLite backend support via the new ArgusDB adapter split. Point
    ARGUS_DATABASE_URL at sqlite+aiosqlite:///path/to/argus.db and
    the entire stack (REST + realtime) works against the DBOS app's
    SQLite store. CI matrix runs the test suite against both backends.
  • Realtime (WebSocket) layer at /ws replaces per-page polling. One
    multiplexed socket carries every page's subscriptions; server-side
    pollers gate heavier snapshots behind a cheap cursor query and shut
    down when the last subscriber disconnects. Channels: health,
    stats, stats.timeseries, workflows, workflow, schedules,
    notifications — each emits the same JSON shape as its REST
    counterpart, which remains authoritative for curl/debug. Cursor
    queries are implemented per-dialect on ArgusDB so the layer works
    unchanged on both Postgres and SQLite. Configurable via
    ARGUS_REALTIME_ENABLED, ARGUS_REALTIME_INTERVAL_MS,
    ARGUS_REALTIME_HEALTH_INTERVAL_MS, and
    ARGUS_REALTIME_MAX_SUBS_PER_CONN.
  • Live workflow detail page: subscribing to workflow with {id}
    re-snapshots every tick so steps appear as they complete.

Changed

  • Connection indicator now reflects WebSocket health (with a 1Hz
    poll surfacing disconnects as a sticky fetchError) instead of
    per-page setInterval(5000) /healthz fetches. While diagnostics
    report issues (e.g. dbos schema absent), the indicator re-polls
    /api/sql-diagnostics every 5s so it converges automatically once
    the DBOS app provisions its tables — no hard refresh needed.
  • Hub suppresses update broadcasts when a fresh snapshot is
    byte-identical to the cached one. Cursor-less channels (workflow,
    health) re-snapshot every tick; the dedupe keeps the wire quiet
    and prevents xyflow edge-dash animations on the workflow detail
    page from restarting on every poll.

Fixed

  • Workflow flow renders the container header (name + ID) for
    freshly-spawned workflows that have no steps yet — ELK was
    collapsing empty containers to ~0×0, leaving only the status
    badge visible until the first step landed.

v0.0.20

04 May 20:39

Choose a tag to compare

Tested against DBOS 2.19.0 — see tested_dbos_version in GET /version and dbos-argus --version. Other DBOS versions may still work; the in-app connection indicator surfaces any schema mismatches.

Note: v0.0.19 was published to PyPI but the docker/release jobs
in the release pipeline failed — pip install dbos-argus==0.0.19
inside the Dockerfile raced PyPI's CDN propagation on the arm64
runner and died with "No matching distribution found", which then
cancelled the rest of the matrix. v0.0.20 carries the same intended
changes plus the pipeline fix, so the Docker image and GitHub
Release exist for this tag.

Fixed

  • Release pipeline: each docker-build arch now polls PyPI's simple
    index for the freshly published version (via pip download --no-deps,
    60 attempts × 5s) before invoking buildx, so a wheel that hasn't yet
    propagated to every Fastly edge can no longer race the in-Dockerfile
    pip install.

v0.0.18

03 May 19:33
v0.0.18

Choose a tag to compare

Tested against DBOS 2.19.0 — see tested_dbos_version in GET /version and dbos-argus --version. Other DBOS versions may still work; the in-app connection indicator surfaces any schema mismatches.

Changed

  • Workflow detail flow: child-step Workflow icon, child step name,
    awaited-name in result ← <child>, and the spawn / default-return
    edges all moved off --chart-3 and onto a new
    --workflow-accent token. The token tracks --primary in light
    mode, and in dark mode lifts L to 0.82 and bumps chroma by
    +0.06 via relative-color syntax (oklch(from var(--primary) ...))
    so presets that pick a deep primary (current teal is L=0.437)
    still read as a clear accent against the dark card. Error /
    cancelled return edges keep their --status-error /
    --status-warning strokes.
  • Workflow detail flow: ambient gradient gained a third point at
    bottom-left (--color-chart-2, 12% mix), so the canvas reads as
    a balanced three-corner wash instead of a single diagonal sweep.