Releases: antsticky/graphviagent
Releases · antsticky/graphviagent
Release list
1.5.0-dev
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/statsacceptsstatus,nodes,pipeline, andlast
1.4.4-dev
1.4.4-dev
Changed
/api/pipelinesreads 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.pyadded 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/pythonorScripts/python.exepluslib/Lib
Fixed
- File-watch skip no longer
resolve()s paths (junction / symlink targets outside the workspace, and a.venvabove the serve root, no longer invert skip)
1.4.3-dev
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/scanand/api/changesreturn 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_morefollows 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 (
pendingCancelis perrunId) - Fast history clicks keep the last selection; a slower
GET /api/runs/{id}does not replace Trace
1.4.2-dev
1.4.2-dev
Fixed
- Continue / Step keep per-node visit ids (
agent#2afteragent#1); Replay no longer hits the earlier loop visit - A second start of the same
run_idno longer deletes the in-flight stub of the request that won the slot graphviagent runrecords HITL / breakpoint pauses as paused (exit 1), not a successful truncated run- Step runs every paused
nextnode (parallelSend), not only the first; other branches are not left oninterrupt_before - Token maps keep a billed
0(input_tokens: 0is not replaced byprompt)
1.4.1-dev
1.4.1-dev
Changed
- Missing
thread_idon nodeinvoke/ainvokeuses the already-bound TLS capture or the only live run (1.4.0 left that uninferred) - Graph workers are daemon threads.
serveshutdown joins them for 2s so Ctrl+C does not wait out the current LLM /sleep; leftoverrunningstubs are canceled on the nextserve - File watch still skips hashing when size is unchanged (cloud-sync
mtimejitter). 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/rerunreturns one JSON run when the replay finishes (same asPOST /api/run). Live Replay in the UI usesPOST /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
ainvokeas well asstream/invoke. Replay asks before an outdated graph; Continue / Step do not
Fixed
- Loopback
Hostchecks acceptlocalhost,::1, and127.0.0.0/8addresses — not hostnames that merely start with127.(127.attacker.example) - File watch schedules pipeline directories added to
graphviagent.tomlafterservestarted, not only those present atstart() - 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
invokefinished no longer records that visit ascanceled: true; only an in-flight node that raisedRunCancelledis 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.ainvokeis patched too - Node
memory_mb/ peak no longer stop process-widetracemallocwhen another node is still running - Parallel
Sendvisits record that node’s ownstate_out(not the merged superstep) - Replay no longer falls back to
merge_statewhen a checkpoint fork fails — that error is stored as a failed replay. Approximate replay is only when the graph has no checkpointer - Empty-
endsSendbranches 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
httpsOrigin / Referer (andHoston port 80 / 443) is allowed - UI run ids stay 32 hex chars when
crypto.randomUUIDis 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
1.4.0-dev
Added
- Run-slot limit is
--concurrent/concurrentingraphviagent.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_idis set to that same id so a sharedMemorySaver/ 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.sleeppatches resolve the current run through TLS /thread_id, so queued and running workers do not leak logs or cancel save_runwrites to a temp file andos.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/runningstubs from a crashed process are canceled on the nextserveso 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_idis 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
mtimejitter does not re-read them
1.3.0-dev
1.3.0-dev
Fixed
- Parallel
Sendnodes keep probe timing, print/log capture, token attribution, and cancellabletime.sleepwhen LangGraph runs them on a worker thread; multiple visits of the same node in one superstep are recorded separately graphviagent.tomlcontextis passed intostream/ replay / CLI runs as LangGraph runtime context (legacy graphs still see it onconfig["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_cancelledmatchesRunCancelledonly, 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
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_cancelledmatchesRunCancelledonly, 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
1.1.4-dev
1.1.4-dev
Added
- Origin /
Hostcheck on the local UI so other websites cannot trigger runs;--host 0.0.0.0requires--exposeand prints a warning schema_version(currently1) andgva_versionon saved runs; older files still load, newer schemas are refused
Fixed
load_runreturnsNonefor 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;#/pipelinesstill opens it) - Duration and memory labels scale (µs/ms/s, B/KB/MB/GB); Gantt hover Start/End use clock time