Skip to content

Releases: antsticky/graphviagent

1.5.0-dev

Choose a tag to compare

@github-actions github-actions released this 18 Sep 11:04

1.5.0-dev

Changed

  • Header Statistics uses the Trace-selected pipeline (same as the in-page jump); the hash is #/statistics/<stem>
  • Statistics filters status (success / failed / all, default success), nodes (default all), and last (10 / 20 / 50 / 100 / all, default 10). Routing, Runtime, and Cost recompute from that selection. GET /api/stats accepts status, nodes, pipeline, and last

1.4.4-dev

Choose a tag to compare

@github-actions github-actions released this 18 Sep 10:23

1.4.4-dev

Changed

  • /api/pipelines reads the watcher snapshot (no N+1 glob). SHA-256 of pipeline files is deferred until Run or a size change; listing compares file size only
  • Watchdog watches the workspace root and each pipeline parent with recursive=False. Skipped trees (.venv, node_modules, …) are never scheduled. A *_pipeline.py added in a new nested folder can take up to 45s to appear
  • Env skip: name set first; only env-like directory names are probed for pyvenv.cfg / conda-meta / bin/python or Scripts/python.exe plus lib/Lib

Fixed

  • File-watch skip no longer resolve()s paths (junction / symlink targets outside the workspace, and a .venv above the serve root, no longer invert skip)

1.4.3-dev

Choose a tag to compare

@github-actions github-actions released this 17 Sep 14:52

1.4.3-dev

Changed

  • Trace run list uses the same success label (green) as the status filter, instead of run
  • First UI open shows a scanning overlay until the initial pipeline list returns (OneDrive / slow disks)
  • /api/scan and /api/changes return the watcher's snapshot; they no longer re-walk the workspace on every UI poll. Watchdog still schedules refresh on file events. A walk still runs if the snapshot is older than 45s, so a missed inotify / ReadDirectoryChanges event is not silent forever
  • Trace history loads 40 runs, then the next page when you scroll (GET /api/runs?limit=&offset=, has_more)
  • Cancel keeps Canceling (red, spinner) and a red canceling pill until the run actually stops
  • Queued history pills are queued only (no #1 / #2); the toolbar still shows how many are waiting

Fixed

  • Canceling is only the in-flight job flag, so a Run / history click still opens the saved run
  • Trace history paging no longer dies when a live poll overlaps a scroll fetch (has_more follows the server; page-in has its own lock)
  • Replay seeds only when the original thread is gone; a failed checkpoint fork is stored as a failed replay
  • Cancel on a paused run no longer blocks Cancel on a different paused run (pendingCancel is per runId)
  • Fast history clicks keep the last selection; a slower GET /api/runs/{id} does not replace Trace

1.4.2-dev

Choose a tag to compare

@github-actions github-actions released this 17 Sep 13:26

1.4.2-dev

Fixed

  • Continue / Step keep per-node visit ids (agent#2 after agent#1); Replay no longer hits the earlier loop visit
  • A second start of the same run_id no longer deletes the in-flight stub of the request that won the slot
  • graphviagent run records HITL / breakpoint pauses as paused (exit 1), not a successful truncated run
  • Step runs every paused next node (parallel Send), not only the first; other branches are not left on interrupt_before
  • Token maps keep a billed 0 (input_tokens: 0 is not replaced by prompt)

1.4.1-dev

Choose a tag to compare

@github-actions github-actions released this 17 Sep 13:06

1.4.1-dev

Changed

  • Missing thread_id on node invoke / ainvoke uses the already-bound TLS capture or the only live run (1.4.0 left that uninferred)
  • Graph workers are daemon threads. serve shutdown joins them for 2s so Ctrl+C does not wait out the current LLM / sleep; leftover running stubs are canceled on the next serve
  • File watch still skips hashing when size is unchanged (cloud-sync mtime jitter). Same-size edits do not refresh the file-change panel or sidebar graph hash until you click Run, which always re-reads the file
  • POST /api/rerun returns one JSON run when the replay finishes (same as POST /api/run). Live Replay in the UI uses POST /api/rerun/stream (text/event-stream, same events as /api/run/stream)
  • Interned MemorySavers stay keyed by pipeline path so Continue / Step survive a reload, and are dropped when that file is no longer discovered
  • Pipeline contract documents ainvoke as well as stream / invoke. Replay asks before an outdated graph; Continue / Step do not

Fixed

  • Loopback Host checks accept localhost, ::1, and 127.0.0.0/8 addresses — not hostnames that merely start with 127. (127.attacker.example)
  • File watch schedules pipeline directories added to graphviagent.toml after serve started, not only those present at start()
  • Continue / Step after a pipeline file change, toml reload, or a failed import that was then fixed no longer lose in-memory checkpoints
  • Cancel on a queued Continue / Step stores canceled; closing the tab still dequeues that wait and leaves the paused run alone
  • Cancel after a node invoke finished no longer records that visit as canceled: true; only an in-flight node that raised RunCancelled is marked canceled
  • Import of a queued/running stub no longer blocks Clear / Delete; in-flight flags are dropped (queued Continue stays paused, other stubs are stored as canceled)
  • HITL resume-value box keeps what you type; it only refills when the pause (run / interrupt) changes, not on the 2s control poll
  • Clicking the selected pipeline no longer clears Trace; a live SSE run stays on screen and opens when it finishes. A scan miss of that file also keeps the open run
  • Replay step / Replay from can be canceled (or aborted by closing the tab) like a live Run
  • Node probes still record timing, prints, tokens, and cancel-during-sleep when LangGraph omits thread_id. ainvoke is patched too
  • Node memory_mb / peak no longer stop process-wide tracemalloc when another node is still running
  • Parallel Send visits record that node’s own state_out (not the merged superstep)
  • Replay no longer falls back to merge_state when a checkpoint fork fails — that error is stored as a failed replay. Approximate replay is only when the graph has no checkpointer
  • Empty-ends Send branches no longer fan out to every node without an incoming edge
  • Runtime node min / avg / max count only successful visits
  • GET / DELETE /api/runs/{id} require a hex run id and look up the file by name
  • Same-host https Origin / Referer (and Host on port 80 / 443) is allowed
  • UI run ids stay 32 hex chars when crypto.randomUUID is missing
  • Trace Fit scales the graph to the pane using both width and height
  • Runs board cells use step canceled / status: canceled, so a mid-node cancel is a gray dash instead of a green check

1.4.0-dev

Choose a tag to compare

@github-actions github-actions released this 17 Sep 09:57

1.4.0-dev

Added

  • Run-slot limit is --concurrent / concurrent in graphviagent.toml / GVA_CONCURRENT (default 3). Every graph execution takes a slot: live Run, Continue/Step, POST /api/run, and Replay / Replay from. Overflow waits in a server-side FIFO (--queue-limit / queue_limit / GVA_QUEUE_LIMIT, default 4× concurrent). Resume / HITL jumps ahead of new runs so a paused run is not stuck behind other live work. LangGraph node fan-out is separate (--node-concurrency / node_concurrency / GVA_NODE_CONCURRENCY; omitted = unlimited). Slots and the queue live on the server (GET /api/meta); two browser tabs share them.

Changed

  • Concurrent runs in one process are keyed only by LangGraph thread_id (a missing id is not inferred from “the only capture”). user_id is set to that same id so a shared MemorySaver / store cannot mix long-term memory across runs
  • Node probes stay installed for the compiled app (refcount), but each run has its own probe bucket, logs, and cancel via capture lookup
  • Process-global stdout/stderr and time.sleep patches resolve the current run through TLS / thread_id, so queued and running workers do not leak logs or cancel
  • save_run writes to a temp file and os.replaces it; list/load skip unreadable JSON and hidden temp files
  • Graph workers are non-daemon and joined after cancel, so disconnecting cannot free a slot while an LLM call is still running
  • Closing a tab dequeues a waiting run and still cancels a live one; a paused or finished run is left alone
  • Leftover queued / running stubs from a crashed process are canceled on the next serve so they do not look runnable
  • SSE queue waits send comment heartbeats (: ping) so proxies do not drop the connection

Fixed

  • Cancel shows Canceling on the button and pipeline until the run actually stops
  • A 4th Run is queued instead of rejected; a full queue returns HTTP 429 {busy, active, queued, limit, queue_limit}, not a generic 400
  • Closing the tab dequeues a queued wait without starting the graph
  • A second start of the same run_id is refused (HTTP 409 {active, run_id}), not HTTP 400
  • Trace graph edges no longer stretch into giant loops after opening Trace from a fresh start / another page (edges were drawn while the pane was display: none)
  • Trace follows the run you opened: finishing another job does not replace the view; History / Runs clicks keep the live SSE
  • Clear / Delete refuse while a pipeline or run is queued or running
  • Pipeline glob no longer descends into Python environments (.venv / venv, pyvenv.cfg, conda prefixes, tox / pixi / direnv)
  • File watch re-hashes pipeline files only when size changes, so cloud-sync mtime jitter does not re-read them

1.3.0-dev

Choose a tag to compare

@github-actions github-actions released this 17 Sep 05:18

1.3.0-dev

Fixed

  • Parallel Send nodes keep probe timing, print/log capture, token attribution, and cancellable time.sleep when LangGraph runs them on a worker thread; multiple visits of the same node in one superstep are recorded separately
  • graphviagent.toml context is passed into stream / replay / CLI runs as LangGraph runtime context (legacy graphs still see it on config["configurable"]; empty {} is omitted)
  • Routing color strip includes paused (amber) so it matches the grand total; caption and legend say success, not ok
  • Runtime average / max / grand total use successful runs only (canceled, failed, and paused are listed as “other”)
  • Runtime strip is the same single line as Cost / Routing, with average vs max (not max − avg)
  • A canceled run no longer records the last visited node as END; Routing shows a canceled outcome instead
  • Cancel mid-node writes that node as a timed step (canceled: true), so Runtime node times include the interrupted visit
  • _is_cancelled matches RunCancelled only, not any exception whose message is "cancelled"
  • Runs-board bar hover names canceled / failed / paused instead of a generic run
  • Runs board duration bars (and waiting cells) show paused in amber

1.2.1-dev

Choose a tag to compare

@github-actions github-actions released this 16 Sep 23:01

1.2.1-dev

Fixed

  • Routing color strip includes paused (amber) so it matches the grand total; caption and legend say success, not ok
  • Runtime average / max / grand total use successful runs only (canceled, failed, and paused are listed as “other”)
  • Runtime strip is the same single line as Cost / Routing, with average vs max (not max − avg)
  • A canceled run no longer records the last visited node as END; Routing shows a canceled outcome instead
  • Cancel mid-node writes that node as a timed step (canceled: true), so Runtime node times include the interrupted visit
  • _is_cancelled matches RunCancelled only, not any exception whose message is "cancelled"
  • Runs-board bar hover names canceled / failed / paused instead of a generic run
  • Runs board duration bars (and waiting cells) show paused in amber

1.2.0-dev

Choose a tag to compare

@github-actions github-actions released this 16 Sep 22:25

graphviagent 1.2.0-dev

1.1.4-dev

Choose a tag to compare

@github-actions github-actions released this 16 Sep 20:14

1.1.4-dev

Added

  • Origin / Host check on the local UI so other websites cannot trigger runs; --host 0.0.0.0 requires --expose and prints a warning
  • schema_version (currently 1) and gva_version on saved runs; older files still load, newer schemas are refused

Fixed

  • load_run returns None for truncated or invalid JSON instead of raising (open/compare 404, not 500)
  • Failed pipeline imports are not kept in the serve cache, so a fixed dependency reloads without a file-hash change
  • Cancel after Resume matches both the run id and the LangGraph thread_id
  • Delete, list, and import resolve toml pipeline ids (including files outside the serve root) instead of Path.stem
  • File watch covers toml-listed pipelines whose files live outside the workspace
  • Compare aligns every visit of a node (loops and branches) instead of only the first

Changed

  • Rename the Pipelines page to Runs (#/runs; #/pipelines still opens it)
  • Duration and memory labels scale (µs/ms/s, B/KB/MB/GB); Gantt hover Start/End use clock time