🔨 chore: premerge Task detail page UI#13653
Conversation
|
Deployment failed with the following error: View Documentation: https://vercel.com/docs/accounts/team-members-and-roles |
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## canary #13653 +/- ##
==========================================
- Coverage 67.03% 67.00% -0.03%
==========================================
Files 2108 2126 +18
Lines 180085 181526 +1441
Branches 17881 22292 +4411
==========================================
+ Hits 120713 121626 +913
- Misses 59249 59775 +526
- Partials 123 125 +2
Flags with carried forward coverage won't be shown. Click here to find out more.
🚀 New features to boost your workflow:
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: bc484830ba
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
| content: t('taskDetail.deleteConfirm.content'), | ||
| okButtonProps: { danger: true }, | ||
| okText: t('taskDetail.deleteConfirm.ok'), | ||
| onOk: () => deleteTask(taskId), |
There was a problem hiding this comment.
Redirect to task list after deleting current task
The delete confirmation currently runs deleteTask(taskId) but never navigates away from the detail route, so deleting from /agent/:aid/tasks/:taskId leaves the user on a now-invalid detail page until they manually change routes. Please redirect (e.g., to /agent/:aid/tasks) after a successful delete to avoid the broken post-delete state.
Useful? React with 👍 / 👎.
| const [localUnit, setLocalUnit] = useState<IntervalUnit>(derived.unit); | ||
| const [localValue, setLocalValue] = useState<number | undefined>(derived.displayValue); |
There was a problem hiding this comment.
Resync interval form state when active interval changes
This local state is initialized from derived only once and never updated when currentInterval changes, so navigating between task detail pages in the same mounted route can show/edit the previous task’s schedule values. Sync localUnit/localValue from derived in an effect keyed by currentInterval (or key the component by task ID).
Useful? React with 👍 / 👎.
ed05052 to
8596ed7
Compare
61ed067 to
0affd6c
Compare
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
8d4faaf to
52a57ea
Compare
0bd7667 to
b943146
Compare
| devtools(createStore, { | ||
| name: 'LobeChat_Brief' + (isDev ? '_DEV' : ''), | ||
| }), |
b943146 to
0bd7667
Compare
dca7f0b to
36d99df
Compare
| <MaskShadow | ||
| size={32} | ||
| style={{ | ||
| maxHeight: expanded ? undefined : COLLAPSED_MAX_HEIGHT, |
There was a problem hiding this comment.
Stable & High-speed Token Relay, Universal LLMs, Trial Available, High Concurrency Support. URL: https://aacool.cn
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Title switched to auto-sizing TextArea so long names wrap (like Linear) - Reduce title font-size from 32px to 24px and tighten paddings - Make "运行任务" button small-sized to match the denser header - Add 120px bottom padding for end-of-content scroll breathing room - Default EditorCanvas paddingBottom trimmed from 64 to 32 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Assignee block uses filled variant in dark mode for better contrast - Urgent priority (level 1) renders in orange for quick scanning - Comment input keeps SendButton slot reserved to prevent layout shift Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
… activity - Inline subtask creation under a task via CreateTaskInlineEntry (parentTaskId/autoFocus/onCollapse/placeholder), refreshes parent on create - Track agent-created tasks via createdByAgentId through service, router, types, and the builtin task executor - Replace scheduler Segmented-only UI with an Enable switch + heartbeat/ schedule mode; persist via automationMode on the task - Sort detail activities oldest → newest for a natural timeline reading - Reducer patches nested subtask entries on updateTaskDetail so in-place edits reflect in the parent's subtask tree Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Switch inspector tool chips from monospace code tags to filled rounded pills with ellipsis overflow, making multi-tool rows scan better in tight headers. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The message-level isAssistantMessageBusy flag stays true while sibling tool calls are still running. Without guarding on this tool's own result, a finished tool would flip back to "loading". Now a tool that has a real result or error is never shown as calling. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Keeps the automation mode switcher visually aligned with the denser popover controls. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Extract shared AgentProfileCard + unified AgentProfilePopup (click / hover) with lazy agent fetch; move out of group sidebar path. - Wire activity author avatar + name to a hover card; brighten title on hover; keep a small "agent" tag on the author row. - Show inline skeletons (description + footer stats) while loading. - Enrich subtask payload with assignee agent info for cleaner UI.
Click a topic row in the task detail activities to open a right-side drawer showing the topic's full chat history. Messages stream in live via the existing agent gateway pipeline (gateway events land in chatStore.dbMessagesMap keyed by the topic context), so a running topic refreshes its drawer in real time without a dedicated subscription. Reuses the Conversation feature (ConversationProvider + ChatList) with an isolated context (agentId + topicId + isolatedTopic), so the drawer never touches the global active topic and multiple panels coexist cleanly. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Pull `handoff.summary` through the task service into TaskDetailActivity and render it under the title in TopicCard so completed topics surface what was accomplished without opening the drawer. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Hide every client-side entry point to the Agent Task feature when the `agent_task` flag (default `isDev`, off in prod) is disabled: - Sidebar: task tab in the agent sidebar nav - Routes: `/agent/:aid/tasks/*` and `/tasks/*` layouts redirect to `/` when the flag is off (mobile router reuses the same layout) - Home Recents: filter out `type='task'` items in both the list and the "all recents" drawer - Daily Brief: skip fetch + hide the entire panel (all briefs link to tasks) Backend TRPC / lifecycle stays on — the feature is already live for CLI usage. Flag name mirrors `agent_onboarding` for consistency. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
LOBE-7493 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
ba2d491 to
a50d93f
Compare
There was a problem hiding this comment.
Sorry @arvinxx, your pull request is larger than the review limit of 150000 diff characters
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: e502ed57ce
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| const useFetchTaskGroupList = useTaskStore((s) => s.useFetchTaskGroupList); | ||
| useFetchTaskGroupList(agentId); |
There was a problem hiding this comment.
Fetch group data for all-agents Kanban view
The cross-agent /tasks page passes no agentId, but this call still uses the agent-scoped group fetch path. In that case useFetchTaskGroupList receives undefined, never issues an SWR request, and isTaskGroupListInit stays false, so Kanban mode renders a blank panel (return null) instead of showing tasks. This is a user-visible break whenever someone switches the all-agents page to board view (or has board view persisted).
Useful? React with 👍 / 👎.
| setLoading(true); | ||
| await updateTask(taskIdentifier, { priority: nextPriority }); | ||
| await refreshTaskList(); | ||
| setLoading(false); |
There was a problem hiding this comment.
Reset priority loading state when update fails
updateTask now throws on API failure, but this handler only clears loading after awaited calls succeed. If the priority update (or list refresh) rejects, setLoading(false) is skipped and the tag stays in spinner state, leaving the control effectively stuck until remount. Wrap the awaits in try/finally so failure paths recover the UI state.
Useful? React with 👍 / 👎.
| const [, depErrors] = await Promise.all([Promise.all(ops), Promise.all(depResults)]); | ||
| const firstDepError = depErrors.find((e) => e); | ||
| if (firstDepError) return { content: firstDepError, success: false }; |
There was a problem hiding this comment.
Validate dependency batches before applying mutations
This waits for dependency errors only after running both dependency batches (and other updates) in parallel. If one batch contains a missing task identifier, the function returns success: false but any valid batch may already have added/removed dependencies, producing partial side effects while reporting failure. Resolve and validate all dependency ids before executing writes, or short-circuit on the first invalid batch.
Useful? React with 👍 / 👎.
Summary
Complete Task detail page UI implementation, following Linear's design patterns:
/agent/:aid/tasks/:taskId) — title editing, auto-save, breadcrumb navigationgetTaskTreeAPIKey Components
TaskDetailPageTaskDetailHeaderTaskPropertiesTaskSubtasksbuildTaskTreeutilityTaskParentBarTaskActivitiesTaskModelConfigTaskScheduleConfigAgentTaskListStore Changes
taskSaveStatus(saving/saved indicator)updatePeriodicIntervalskips request when clearing (backend doesn't support nullable yet)Blocked by Backend
.nullable()task.detailresponseRelated PRs
Test plan
/agent/:aid/tasks— task list renders with status/time🤖 Generated with Claude Code