feat(conversations): show a Deploying… chip on cards mid-deploy #3
Reference in New Issue
Block a user
Delete Branch "deploying-loader"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Conversation cards had no indication when a running conversation was in the
middle of deploying — the CI/CD-style stage checks (
StatusChecks) only turn"Deployed" on after the fact, once the deploy has already finished, and
ConversationListElement(the shared card in the home rail / drawer / listpage) didn't render deploy state at all. This adds a
[loader] Deploying…chip, shown while a deploy command is in flight.
Key changes
backend/conversations.py— track a deploy call (aBashcommand matchingthe existing deploy regex, or the
deploy-htmlskill) as open from itstool_useto itstool_result, exposed asdeploying: boolon the parsedsummary (
ParserState.deploying_since/_is_deploy_call).backend/main.py—_is_deploying()gates that raw signal the same way_running_agents()already gatesrunningAgents: only true while theconversation's own state is
"running", so a dangling open call from aninterrupted/dead run never shows as deploying. Wired into all three summary
call sites (
_conversation_cards,conversation_summary,conversation_detail).backend/schemas.py—deploying: Optional[bool]onConversationSummary.frontend/openapi.json+src/generated/model/*— regenerated (orval) topick up the new field.
ConvMetaBits.tsx— newDeployingBadgecomponent: an amber pill with aspinning
Loader2+ "Deploying…", styled to match the existingRunningAgentTagschip.ConversationListElement.tsxandConversations.tsx(the two places thecard/tag row is rendered) — render
DeployingBadgenext toRunningAgentTags, gated onrunning && c.deploying.Key decisions
(mirroring the existing
agent_calls/runningAgentspattern), rather thanadding a new
conv-meta.sh deployingstamp fired from the deploy skillscripts. This keeps the whole feature inside this repo (no homelab-repo
skill changes needed) and needs no new sidecar field — it's derived from the
transcript exactly like the existing "deployed" auto-detection.
(
_DEPLOY_CMD_RE, factored out of_LIFECYCLE_PATTERNS) for real deploycommands, but deliberately excluded the
conv-meta ... deployedstamppattern from triggering "in flight" — that command only records a deploy
that already finished, so treating it as "deploying" would flicker the chip
on for a moment right after the real deploy is already done.
Changelog
command they issued is still running.
Test notes
npx tsc --noEmitinfrontend/— clean.frontend/openapi.jsonfromapp.openapi()via thehomelab-ai-agentimage and regenerated types withnpm run gen:api;imported
backend/main.pyinside the same image to confirm it still loads.npm run build:mock+vite preview, drove the mock DB(
window.__mock.db()) to flip a running seeded conversation'sdeployingto
trueand published ametaevent, then screenshotted the home page'sRunning rail — see below.
Screenshots