fix(ui): reliable session running indicator + swarm retry + version (#156, supersedes #159)#160
Merged
Merged
Conversation
Scoped extraction of the UI running-status indicator from #159 (the remaining commits there overlapped with #157/#158 or touched the protected providers/ module). - useSSE: add attempt.created/started, message.received, session.created, tool_heartbeat, llm_usage to knownTypes so a mid-stream reconnect/replay still surfaces the working state - agent store: track streamingSessionId, preserved across switchSession so the sidebar spinner persists when navigating away from a running session - Agent.tsx: handle attempt.created/started (re-affirm streaming on reconnect and page reload), keep streaming alive on tool_heartbeat, add a persistent pulse bar, reword "Thinking…" to "Agent is working…" - Layout: replace the dead-code (status === "failed") dot with a spinning Loader2 for the actively streaming session - index.css: pulse-slide keyframe for the running bar Co-authored-by: ai7eam-dev <ai.7eam@gmail.com>
Completes the swarm-retry capability extracted from #159 and makes it usable end-to-end instead of dead API surface. - api_server: POST /swarm/runs/{id}/retry — reconciles a stale "running" run first, refuses a genuinely active run (409), else re-launches a new run with the original preset + user_vars - mcp_server: retry_run(run_id) tool so the list_runs -> spot-failure -> retry loop works from OpenClaw/Claude Desktop (the frontend has no swarm dashboard; MCP + HTTP are the real consumers) - api.ts: retrySwarmRun client method (parity with cancelSwarmRun) - tests: missing-run / running-refused / happy-path relaunch, MCP well-known tool name, and HTTP traversal rejection for the new endpoint - docs: bump current MCP tool count 35 -> 36 across the 5 READMEs (ar/ko prose still carries a stale 22-tool list — tracked separately) Co-authored-by: ai7eam-dev <ai.7eam@gmail.com>
The shipped 0.1.8 wheel reported 0.1.7 because a hardcoded constant was not bumped on release. The metadata path already fixed installed packages; this removes the remaining hardcoded fallback so an un-installed checkout reads the version straight from pyproject.toml — making pyproject the one and only place the version is written, with no constant left to drift. - _version: tomllib-based pyproject fallback (>=3.11 guaranteed), "unknown" sentinel only if the tree is moved away from its pyproject.toml - tests: pyproject fallback matches declared version, resolved-not-unknown, and a guard against reintroducing any hardcoded version literal
warren618
added a commit
that referenced
this pull request
Jun 1, 2026
Refresh the Contributors section in all 5 READMEs from the v0.1.8 cycle list to the v0.1.9 cycle (PRs #124–#160): @toanalien, @ai7eam-dev, @shadowinlife, @DoubleSky123, @ArthurXi, @omcdecor-cyber, @Soli22de, @ruok808, @faizack, @fightZy, @lcwSeven, @Teerapat-Vatpitak.
10 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Lands the session running-status indicator scoped out of #159, completes the swarm-retry capability into something actually usable, and fixes the #156 version drift. Credit for the UI indicator and the swarm-retry origin goes to @ai7eam-dev (
Co-authored-byon both commits).1. Session running-status indicator (from #159, scoped)
The indicator flickered or vanished on reconnect / page reload / sidebar.
useSSE: addattempt.created/started,message.received,session.created,tool_heartbeat,llm_usagetoknownTypesso a mid-stream replay still surfaces the working statestores/agent: trackstreamingSessionId, preserved acrossswitchSessionso the sidebar spinner persists when navigating away from a running sessionAgent.tsx: handleattempt.created/started(re-affirm streaming on reconnect/reload), keep streaming alive ontool_heartbeat, persistent pulse bar, reword "Thinking…" → "Agent is working…"Layout: replace the dead-codestatus === "failed"dot with a spinningLoader2for the streaming sessionindex.css:pulse-slidekeyframe2. Swarm retry (HTTP + MCP)
#159 added a retry endpoint + an unused
api.tsmethod but no usable trigger. Completed end-to-end:api_server:POST /swarm/runs/{id}/retry— reconciles a stale "running" run first, refuses a genuinely active run (409), else re-launches a new run with the original preset +user_varsmcp_server:retry_run(run_id)tool, so thelist_runs→ spot-failure → retry loop works from OpenClaw / Claude Desktop (the frontend has no swarm dashboard; MCP + HTTP are the real consumers)api.ts:retrySwarmRunclient method (parity withcancelSwarmRun)3. Version drift (#156)
The shipped 0.1.8 wheel reported
0.1.7from a hardcoded constant.cli/_version.pynow derives the version from package metadata, falling back to readingpyproject.tomldirectly —pyproject.tomlis the single source of truth, no constant left to drift.Tests
test_swarm_retry.py(new): missing-run / running-refused / happy-path relaunchtest_cli_version.py(new): pyproject fallback matches declared version, resolved-not-unknown, guard against reintroducing a hardcoded version literaltest_mcp_regression.py: lockretry_runas a well-known tooltest_security_auth_api.py: traversal rejection for the new endpointtsc --noEmitclean +vite buildpassesNotes
src/agent/,src/session/,src/providers/untouched)Supersedes #159.