Skip to content

✨ feat(tasks/brief): subtask avatar polish, brief actions revamp & task drawer Gateway reconnect#14208

Merged
arvinxx merged 7 commits into
canaryfrom
feat/subtask-assignee-avatar
Apr 27, 2026
Merged

✨ feat(tasks/brief): subtask avatar polish, brief actions revamp & task drawer Gateway reconnect#14208
arvinxx merged 7 commits into
canaryfrom
feat/subtask-assignee-avatar

Conversation

@arvinxx

@arvinxx arvinxx commented Apr 26, 2026

Copy link
Copy Markdown
Member

Summary

Bundles three independent polish items on the task / daily-brief surface:

  • Task subtask row: right-align the assignee avatar and make it clickable.

  • Daily Brief actions: standardize the result brief on mark-as-done + edit, rename the primary action to Confirm complete, and align the decision brief icon with the kanban pending-review column.

  • Task topic drawer Gateway reconnect (the meatier one): the drawer rendered DB messages but never opened a Gateway WebSocket, so a running task showed only the initial prompt and an empty assistant placeholder. The server already writes runningOperation into topics.metadata via aiAgentService.execAgent; this PR

    • exposes it through taskTopicModel.findWithHandoff SELECT and propagates it onto TaskDetailActivity.runningOperation,
    • moves the previously main-agent-only useGatewayReconnect hook to src/hooks/ and refactors it to take (topicId, runningOperation) so callers source the running op from whichever store owns the topic data,
    • calls the hook from TopicChatDrawerBody against the active drawer topic activity, and updates the main-agent caller to the new signature.

    Net result: opening the drawer for a running task topic auto-opens the Gateway WS via reconnectToGatewayOperation, replays events, and streams live deltas. SWR keys on operationId so a single reconnect attempt fires per op.

Test plan

  • Type-check passes (bun run type-check)
  • src/server/services/task/index.test.ts β€” 21 tests pass
  • Start a task, open its detail page; the right-side topic drawer for the running topic should stream agent output live (text deltas, tool calls)
  • Reload the page mid-run and reopen the drawer β€” events should resume via the topic-metadata runningOperation
  • Verify the main agent path still reconnects after page reload (regression check on the refactored hook)
  • Subtask avatars right-align and click navigates to the assignee
  • Daily Brief result card shows the new actions / copy

πŸ€– Generated with Claude Code

@vercel

vercel Bot commented Apr 26, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
lobehub Ready Ready Preview, Comment Apr 27, 2026 5:45am

Request Review

@dosubot dosubot Bot added the size:L This PR changes 100-499 lines, ignoring generated files. label Apr 26, 2026

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry @arvinxx, you have reached your weekly rate limit of 500000 diff characters.

Please try again later or upgrade to continue using Sourcery

@codecov

codecov Bot commented Apr 26, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 90.90909% with 2 lines in your changes missing coverage. Please review.
βœ… Project coverage is 68.07%. Comparing base (f32fff1) to head (20d0e3f).
⚠️ Report is 1 commits behind head on canary.

Additional details and impacted files
@@             Coverage Diff             @@
##           canary   #14208       +/-   ##
===========================================
- Coverage   86.03%   68.07%   -17.97%     
===========================================
  Files         620     2262     +1642     
  Lines       51652   194172   +142520     
  Branches     8719    24256    +15537     
===========================================
+ Hits        44440   132178    +87738     
- Misses       7083    61865    +54782     
  Partials      129      129               
Flag Coverage Ξ”
app 61.56% <95.23%> (?)
database 92.03% <0.00%> (-0.01%) ⬇️
packages/agent-runtime 79.93% <ΓΈ> (ΓΈ)
packages/context-engine 83.25% <ΓΈ> (ΓΈ)
packages/conversation-flow 92.40% <ΓΈ> (ΓΈ)
packages/file-loaders 87.02% <ΓΈ> (ΓΈ)
packages/memory-user-memory 74.74% <ΓΈ> (ΓΈ)
packages/model-bank 99.89% <ΓΈ> (ΓΈ)
packages/model-runtime 84.28% <ΓΈ> (ΓΈ)
packages/prompts 68.17% <ΓΈ> (ΓΈ)
packages/python-interpreter 92.90% <ΓΈ> (ΓΈ)
packages/ssrf-safe-fetch 0.00% <ΓΈ> (ΓΈ)
packages/utils 88.41% <ΓΈ> (ΓΈ)
packages/web-crawler 88.66% <ΓΈ> (ΓΈ)

Flags with carried forward coverage won't be shown. Click here to find out more.

Components Coverage Ξ”
Store 67.20% <ΓΈ> (βˆ…)
Services 53.36% <ΓΈ> (βˆ…)
Server 68.44% <100.00%> (βˆ…)
Libs 53.30% <ΓΈ> (βˆ…)
Utils 80.04% <ΓΈ> (-13.43%) ⬇️
πŸš€ New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • πŸ“¦ JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

arvinxx and others added 7 commits April 27, 2026 13:29
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…column

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…rawer

The task topic drawer rendered messages from the DB but never connected
to the Gateway, so a running task showed only the initial prompt and the
empty assistant placeholder. Server already writes runningOperation into
topic metadata; expose it through TaskDetailActivity and reuse the main
agent reconnect hook so the drawer establishes the WebSocket on open.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The Recent SQL union pulled every topic regardless of trigger, so cron,
eval, task_manager, and task-runner topics leaked into the main "ζœ€θΏ‘"
list alongside ordinary chats. Filter them in the topics SELECT, and
align the long-stale `TopicTrigger.RunTask` constant with the literal
`'task'` that TaskRunnerService actually writes (the const was unused
so no DB migration is needed).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@arvinxx arvinxx force-pushed the feat/subtask-assignee-avatar branch from 2a7f0a2 to 20d0e3f Compare April 27, 2026 05:29
@arvinxx arvinxx merged commit 92a848c into canary Apr 27, 2026
33 of 35 checks passed
@arvinxx arvinxx deleted the feat/subtask-assignee-avatar branch April 27, 2026 05:54
mutoe pushed a commit to mutoe/lobehub that referenced this pull request May 1, 2026
…sk drawer Gateway reconnect (lobehub#14208)

* πŸ’„ style(task): right-align subtask assignee avatar and make it clickable

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* ✨ feat(brief): standardize result brief actions to mark-as-done + edit

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* πŸ’„ style(brief): align decision brief icon with kanban pending-review column

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* ✨ feat(brief): rename result brief primary action to "Confirm complete"

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* ✨ feat(tasks): wire passive Gateway WS reconnect for the task topic drawer

The task topic drawer rendered messages from the DB but never connected
to the Gateway, so a running task showed only the initial prompt and the
empty assistant placeholder. Server already writes runningOperation into
topic metadata; expose it through TaskDetailActivity and reuse the main
agent reconnect hook so the drawer establishes the WebSocket on open.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* πŸ’„ style(brief): mute Check icon on resolved success tag

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* πŸ› fix(recent): exclude system-trigger topics from the Recent sidebar

The Recent SQL union pulled every topic regardless of trigger, so cron,
eval, task_manager, and task-runner topics leaked into the main "ζœ€θΏ‘"
list alongside ordinary chats. Filter them in the topics SELECT, and
align the long-stale `TopicTrigger.RunTask` constant with the literal
`'task'` that TaskRunnerService actually writes (the const was unused
so no DB migration is needed).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

feature:thread subtopic / thread size:L This PR changes 100-499 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant