diff --git a/ui/src/components/ActiveAgentsPanel.tsx b/ui/src/components/ActiveAgentsPanel.tsx
index 4ff1c2cedba..2c2b0fcf295 100644
--- a/ui/src/components/ActiveAgentsPanel.tsx
+++ b/ui/src/components/ActiveAgentsPanel.tsx
@@ -27,7 +27,7 @@ function RunCardRecoveryChip({ action }: { action: IssueRecoveryAction }) {
data-recovery-state={state}
role="status"
aria-label={tone.label}
- title={`${tone.label} — open the source issue to act.`}
+ title={`${tone.label} — open the source task to act.`}
className={cn(
"inline-flex shrink-0 items-center gap-0.5 rounded-full border px-1.5 py-0.5 text-[10px] font-medium",
tone.className,
diff --git a/ui/src/components/ActivityCharts.tsx b/ui/src/components/ActivityCharts.tsx
index 591bcc4e89c..bd3dd22adb0 100644
--- a/ui/src/components/ActivityCharts.tsx
+++ b/ui/src/components/ActivityCharts.tsx
@@ -144,7 +144,7 @@ export function PriorityChart({ issues }: { issues: { priority: string; createdA
const maxValue = Math.max(...Array.from(grouped.values()).map(v => Object.values(v).reduce((a, b) => a + b, 0)), 1);
const hasData = Array.from(grouped.values()).some(v => Object.values(v).reduce((a, b) => a + b, 0) > 0);
- if (!hasData) return
No issues
;
+ if (!hasData) return
No tasks
;
return (
@@ -211,7 +211,7 @@ export function IssueStatusChart({ issues }: { issues: { status: string; created
const maxValue = Math.max(...Array.from(grouped.values()).map(v => Object.values(v).reduce((a, b) => a + b, 0)), 1);
const hasData = allStatuses.size > 0;
- if (!hasData) return
No issues
;
+ if (!hasData) return
No tasks
;
return (
diff --git a/ui/src/components/AgentConfigForm.tsx b/ui/src/components/AgentConfigForm.tsx
index e07e97349f5..9532ba5d2da 100644
--- a/ui/src/components/AgentConfigForm.tsx
+++ b/ui/src/components/AgentConfigForm.tsx
@@ -794,7 +794,7 @@ export function AgentConfigForm(props: AgentConfigFormProps) {
diff --git a/ui/src/components/CommandPalette.tsx b/ui/src/components/CommandPalette.tsx
index f5f2fa5fbfa..a04bb30e99b 100644
--- a/ui/src/components/CommandPalette.tsx
+++ b/ui/src/components/CommandPalette.tsx
@@ -121,7 +121,7 @@ export function CommandPalette() {
if (v && isMobile) setSidebarOpen(false);
}}>
{
@@ -135,7 +135,7 @@ export function CommandPalette() {
{showSearchAll ? (
- No quick issue matches. Press{" "}
+ No quick task matches. Press{" "}
↵{" "}
to search all or keep typing to refine.
@@ -174,7 +174,7 @@ export function CommandPalette() {
}}
>
- Create new issue
+ Create new task
C go("/issues")}>
- Issues
+ Tasks
go("/projects")}>
@@ -232,7 +232,7 @@ export function CommandPalette() {
{visibleIssues.length > 0 && (
<>
-
+
{visibleIssues.slice(0, 10).map((issue) => (
{actionLabel}
Archive {workspaceName} and clean up any owned workspace
- artifacts. Paperclip keeps the workspace record and issue history, but removes it from active workspace views.
+ artifacts. Paperclip keeps the workspace record and task history, but removes it from active workspace views.
@@ -129,7 +129,7 @@ export function ExecutionWorkspaceCloseDialog({
{blockingIssues.length > 0 ? (
-
diff --git a/ui/src/components/IssueBlockedNotice.test.tsx b/ui/src/components/IssueBlockedNotice.test.tsx
index 27f93a0b8ed..1011a38c9d4 100644
--- a/ui/src/components/IssueBlockedNotice.test.tsx
+++ b/ui/src/components/IssueBlockedNotice.test.tsx
@@ -124,11 +124,11 @@ describe("IssueBlockedNotice", () => {
/>,
);
- expect(node.textContent).toContain("This issue still needs a next step.");
+ expect(node.textContent).toContain("This task still needs a next step.");
expect(node.textContent).toContain("Corrective wake queued for CodexCoder");
expect(node.textContent).toContain("Detected progress: Updated the plan");
expect(node.textContent).not.toContain("Retry now");
- expect(node.textContent).not.toContain("Work on this issue is blocked until");
+ expect(node.textContent).not.toContain("Work on this task is blocked until");
expect(node.querySelector('[data-successful-run-handoff="required"]')).not.toBeNull();
});
diff --git a/ui/src/components/IssueBlockedNotice.tsx b/ui/src/components/IssueBlockedNotice.tsx
index 0ec0eb4fea1..4f6c76ef9b4 100644
--- a/ui/src/components/IssueBlockedNotice.tsx
+++ b/ui/src/components/IssueBlockedNotice.tsx
@@ -30,7 +30,7 @@ function BlockerRecoveryIndicator({ action }: { action: IssueRecoveryAction }) {
data-recovery-state={state}
role="status"
aria-label={tone.label}
- title={`${tone.label} — open the source issue to act.`}
+ title={`${tone.label} — open the source task to act.`}
className={`inline-flex shrink-0 items-center gap-0.5 rounded-full border px-1.5 py-0.5 text-[10px] font-medium ${tone.className}`}
>
@@ -130,7 +130,7 @@ export function IssueBlockedNotice({
? { issueId, scheduledRetry }
: null;
- const blockerLabel = blockers.length === 1 ? "the linked issue" : "the linked issues";
+ const blockerLabel = blockers.length === 1 ? "the linked task" : "the linked tasks";
const terminalBlockers = blockers
.flatMap((blocker) => blocker.terminalBlockers ?? [])
.filter((blocker, index, all) => all.findIndex((candidate) => candidate.id === blocker.id) === index);
@@ -205,9 +205,9 @@ export function IssueBlockedNotice({
{showSuccessfulRunHandoff ? (
<>
-
This issue still needs a next step.
+
This task still needs a next step.
- A run finished successfully, but this issue is still open in{" "}
+ A run finished successfully, but this task is still open in{" "}
in_progress
{" "}
@@ -258,10 +258,10 @@ export function IssueBlockedNotice({
{blockers.length > 0
? isStalled
? stalledLeafBlockers.length > 1
- ? <>Work on this issue is blocked by {blockerLabel}, but the chain is stalled in review without a clear next step. Resolve the stalled reviews below or remove them as blockers.>
- : <>Work on this issue is blocked by {blockerLabel}, but the chain is stalled in review without a clear next step. Resolve the stalled review below or remove it as a blocker.>
- : <>Work on this issue is blocked by {blockerLabel} until {blockers.length === 1 ? "it is" : "they are"} complete. Comments still wake the assignee for questions or triage.>
- : <>Work on this issue is blocked until it is moved back to todo. Comments still wake the assignee for questions or triage.>}
+ ? <>Work on this task is blocked by {blockerLabel}, but the chain is stalled in review without a clear next step. Resolve the stalled reviews below or remove them as blockers.>
+ : <>Work on this task is blocked by {blockerLabel}, but the chain is stalled in review without a clear next step. Resolve the stalled review below or remove it as a blocker.>
+ : <>Work on this task is blocked by {blockerLabel} until {blockers.length === 1 ? "it is" : "they are"} complete. Comments still wake the assignee for questions or triage.>
+ : <>Work on this task is blocked until it is moved back to todo. Comments still wake the assignee for questions or triage.>}
{blockers.length > 0 ? (
diff --git a/ui/src/components/IssueChatThread.test.tsx b/ui/src/components/IssueChatThread.test.tsx
index 5f55fcf8ba9..1acd95666f0 100644
--- a/ui/src/components/IssueChatThread.test.tsx
+++ b/ui/src/components/IssueChatThread.test.tsx
@@ -1506,7 +1506,7 @@ describe("IssueChatThread", () => {
);
});
- expect(container.textContent).toContain("Work on this issue is blocked by the linked issue");
+ expect(container.textContent).toContain("Work on this task is blocked by the linked task");
expect(container.textContent).toContain("Comments still wake the assignee for questions or triage");
expect(container.textContent).toContain("PAP-1723");
expect(container.textContent).toContain("QA the install flow");
@@ -2204,7 +2204,7 @@ describe("IssueChatThread", () => {
expect(container.querySelector('[data-testid="issue-chat-composer-drop-overlay"]')).not.toBeNull();
expect(container.textContent).toContain("Drop to upload");
expect(container.textContent).toContain("Images insert into the reply");
- expect(container.textContent).toContain("Other files are added to this issue");
+ expect(container.textContent).toContain("Other files are added to this task");
expect(composer?.className).toContain("border-primary/45");
act(() => {
@@ -2260,7 +2260,7 @@ describe("IssueChatThread", () => {
const attachmentList = container.querySelector('[data-testid="issue-chat-composer-attachments"]');
expect(attachmentList).not.toBeNull();
expect(container.textContent).toContain("report.pdf");
- expect(container.textContent).toContain("Attached to issue");
+ expect(container.textContent).toContain("Attached to task");
await act(async () => {
root.unmount();
@@ -2360,7 +2360,7 @@ describe("IssueChatThread", () => {
expect(attachmentList).not.toBeNull();
expect(attachmentList?.className).toContain("mb-3");
expect(container.textContent).toContain("report.pdf");
- expect(container.textContent).toContain("Attached to issue");
+ expect(container.textContent).toContain("Attached to task");
await act(async () => {
root.unmount();
diff --git a/ui/src/components/IssueChatThread.tsx b/ui/src/components/IssueChatThread.tsx
index a7642d91a39..8031f0f9318 100644
--- a/ui/src/components/IssueChatThread.tsx
+++ b/ui/src/components/IssueChatThread.tsx
@@ -501,7 +501,7 @@ function IssueChatFallbackThread({
Chat renderer hit an internal state error.
- Showing a safe fallback transcript instead of crashing the issues page.
+ Showing a safe fallback transcript instead of crashing the tasks page.
{renderActivityEvent
- ? "Runs and activity will appear here once this issue has history."
- : "Historical runs without liveness metadata will appear here once linked to this issue."}
+ ? "Runs and activity will appear here once this task has history."
+ : "Historical runs without liveness metadata will appear here once linked to this task."}
- Control whether this issue runs in the shared workspace, a new isolated workspace, or an existing one.
+ Control whether this task runs in the shared workspace, a new isolated workspace, or an existing one.
) : null}
@@ -1694,7 +1694,7 @@ export function NewIssueDialog() {
Runs on the agent's primary model.
)}
{assigneeModelLane === "custom" && (
-
Override the model and effort for this issue only.
diff --git a/ui/src/components/OnboardingWizard.tsx b/ui/src/components/OnboardingWizard.tsx
index 4860dccf05c..0f9c23789b8 100644
--- a/ui/src/components/OnboardingWizard.tsx
+++ b/ui/src/components/OnboardingWizard.tsx
@@ -1134,7 +1134,7 @@ export function OnboardingWizard() {
Ready to launch
Everything is set up. Launching now will create the
- starter task, wake the agent, and open the issue.
+ starter task, wake the agent, and open the task.
- Applied to all runs for issues in this project. Project values override agent env on key conflicts.
+ Applied to all runs for tasks in this project. Project values override agent env on key conflicts.
@@ -925,7 +925,7 @@ export function ProjectProperties({ project, onUpdate, onFieldUpdate, getFieldSa
- Project-owned defaults for isolated issue checkouts and execution workspace behavior.
+ Project-owned defaults for isolated task checkouts and execution workspace behavior.
@@ -933,11 +933,11 @@ export function ProjectProperties({ project, onUpdate, onFieldUpdate, getFieldSa
- Let issues choose between the project's primary checkout and an isolated execution workspace.
+ Let tasks choose between the project's primary checkout and an isolated execution workspace.
- New issues default to isolated checkout
+ New tasks default to isolated checkout
- If disabled, new issues stay on the project's primary checkout unless someone opts in.
+ If disabled, new tasks stay on the project's primary checkout unless someone opts in.
- Requesting agent was notified to review this approval and linked issues.
+ Requesting agent was notified to review this approval and linked tasks.
@@ -240,7 +240,7 @@ export function ApprovalDetail() {
{error &&
{error}
}
{linkedIssues && linkedIssues.length > 0 && (
-
Linked Issues
+
Linked Tasks
{linkedIssues.map((issue) => (
- Linked issues remain open until the requesting agent follows up and closes them.
+ Linked tasks remain open until the requesting agent follows up and closes them.
)}
diff --git a/ui/src/pages/Companies.tsx b/ui/src/pages/Companies.tsx
index 58590d66cfa..a5046bbda83 100644
--- a/ui/src/pages/Companies.tsx
+++ b/ui/src/pages/Companies.tsx
@@ -241,7 +241,7 @@ export function Companies() {
-
+
@@ -1610,7 +1610,7 @@ export function DesignGuide() {
- When an issue has produced no artifact work products, the Output section renders nothing
+ When a task has produced no artifact work products, the Output section renders nothing
at all (no placeholder card).
- Show accepted-plan decomposition history on issue detail pages. Intended for debugging and validating
+ Show accepted-plan decomposition history on task detail pages. Intended for debugging and validating
subtask creation behavior while the presentation is still being refined.
@@ -318,7 +318,7 @@ export function InstanceExperimentalSettings() {
})
}
disabled={toggleMutation.isPending}
- aria-label="Toggle issue plan decomposition panel experimental setting"
+ aria-label="Toggle task plan decomposition panel experimental setting"
/>
@@ -363,9 +363,9 @@ export function InstanceExperimentalSettings() {
-
Auto-Create Issue Recovery Tasks
+
Auto-Create Recovery Tasks
- Let the heartbeat scheduler create recovery issues for issue dependency chains found inside the
+ Let the heartbeat scheduler create recovery tasks for task dependency chains found inside the
configured lookback window.
diff --git a/ui/src/pages/InstanceGeneralSettings.tsx b/ui/src/pages/InstanceGeneralSettings.tsx
index aa0b1783f62..69d61b50567 100644
--- a/ui/src/pages/InstanceGeneralSettings.tsx
+++ b/ui/src/pages/InstanceGeneralSettings.tsx
@@ -158,7 +158,7 @@ export function InstanceGeneralSettings() {
Keyboard shortcuts
- Enable app keyboard shortcuts, including inbox navigation and global shortcuts like creating issues or
+ Enable app keyboard shortcuts, including inbox navigation and global shortcuts like creating tasks or
toggling panels. This is off by default.
diff --git a/ui/src/pages/IssueDetail.test.tsx b/ui/src/pages/IssueDetail.test.tsx
index fb92ea33bb4..19ddca56790 100644
--- a/ui/src/pages/IssueDetail.test.tsx
+++ b/ui/src/pages/IssueDetail.test.tsx
@@ -1028,7 +1028,7 @@ describe("IssueDetail", () => {
expect(container.textContent).toContain("Plan decomposition");
expect(container.textContent).toContain("Plan revision 2");
- expect(container.textContent).toContain("2 of 2 child issues created");
+ expect(container.textContent).toContain("2 of 2 child tasks created");
expect(container.textContent).toContain("First child issue");
expect(mockIssuesApi.listAcceptedPlanDecompositions).toHaveBeenCalledWith("issue-1");
});
@@ -1081,8 +1081,8 @@ describe("IssueDetail", () => {
parentId: "parent-1",
includeBlockedBy: true,
});
- expect(container.querySelector('a[aria-label="Previous sub-issue: PAP-1 - Previous sibling"]')).toBeTruthy();
- expect(container.querySelector('a[aria-label="Next sub-issue: PAP-3 - Next sibling"]')).toBeTruthy();
+ expect(container.querySelector('a[aria-label="Previous sub-task: PAP-1 - Previous sibling"]')).toBeTruthy();
+ expect(container.querySelector('a[aria-label="Next sub-task: PAP-3 - Next sibling"]')).toBeTruthy();
expect(container.textContent).toContain("Previous");
expect(container.textContent).toContain("Previous sibling");
expect(container.textContent).toContain("Next");
@@ -1137,7 +1137,7 @@ describe("IssueDetail", () => {
descendantOf: "issue-parent",
includeBlockedBy: true,
});
- expect(container.querySelector('a[aria-label="Next sub-issue: PAP-11 - First child"]')).toBeTruthy();
+ expect(container.querySelector('a[aria-label="Next sub-task: PAP-11 - First child"]')).toBeTruthy();
expect(container.textContent).toContain("Next");
expect(container.textContent).toContain("First child");
expect(mockIssueChatThreadRender.mock.calls.at(-1)?.[0].footer).toBeTruthy();
@@ -1314,7 +1314,7 @@ describe("IssueDetail", () => {
await flushReact();
await flushReact();
- const moreButton = container.querySelector('button[aria-label="More issue actions"]') as HTMLButtonElement | null;
+ const moreButton = container.querySelector('button[aria-label="More task actions"]') as HTMLButtonElement | null;
expect(moreButton).toBeTruthy();
await act(async () => {
@@ -1424,7 +1424,7 @@ describe("IssueDetail", () => {
metadata: { source: "issue_active_run_control", runId: "run-active-1" },
});
- const moreButton = container.querySelector('button[aria-label="More issue actions"]') as HTMLButtonElement | null;
+ const moreButton = container.querySelector('button[aria-label="More task actions"]') as HTMLButtonElement | null;
expect(moreButton).toBeTruthy();
await act(async () => {
moreButton!.dispatchEvent(new KeyboardEvent("keydown", { key: "Enter", bubbles: true }));
@@ -1690,7 +1690,7 @@ describe("IssueDetail", () => {
await flushReact();
await flushReact();
- const moreButton = container.querySelector('button[aria-label="More issue actions"]') as HTMLButtonElement | null;
+ const moreButton = container.querySelector('button[aria-label="More task actions"]') as HTMLButtonElement | null;
expect(moreButton).toBeTruthy();
await act(async () => {
@@ -1712,11 +1712,11 @@ describe("IssueDetail", () => {
mode: "restore",
releasePolicy: { strategy: "manual" },
});
- expect(container.textContent).toContain("Restore issues cancelled by this subtree operation so work can resume.");
+ expect(container.textContent).toContain("Restore tasks cancelled by this subtree operation so work can resume.");
expect(container.textContent).toContain("Cancelled child");
const restoreApplyButton = Array.from(container.querySelectorAll("button"))
- .find((button) => button.textContent?.trim() === "Restore 1 issues");
+ .find((button) => button.textContent?.trim() === "Restore 1 tasks");
expect(restoreApplyButton).toBeTruthy();
await act(async () => {
@@ -1792,7 +1792,7 @@ describe("IssueDetail", () => {
expect(bodyScrollRegion?.className).toContain("overscroll-contain");
const cancelApplyButton = Array.from(dialogContent!.querySelectorAll("button"))
- .find((button) => button.textContent?.trim() === "Cancel 24 issues") as HTMLButtonElement | undefined;
+ .find((button) => button.textContent?.trim() === "Cancel 24 tasks") as HTMLButtonElement | undefined;
expect(cancelApplyButton).toBeTruthy();
expect(cancelApplyButton!.disabled).toBe(true);
diff --git a/ui/src/pages/IssueDetail.tsx b/ui/src/pages/IssueDetail.tsx
index e729497360b..c8ecf74fac2 100644
--- a/ui/src/pages/IssueDetail.tsx
+++ b/ui/src/pages/IssueDetail.tsx
@@ -188,14 +188,14 @@ const LEAF_WORK_CONTROL_MODE_LABEL: Partial
resume: "Resume work",
};
const TREE_CONTROL_MODE_HELP_TEXT: Record = {
- pause: "Pause active execution in this issue subtree until an explicit resume.",
+ pause: "Pause active execution in this task subtree until an explicit resume.",
resume: "Release the active subtree pause hold so held work can continue.",
- cancel: "Cancel non-terminal issues in this subtree and stop queued/running work where possible.",
- restore: "Restore issues cancelled by this subtree operation so work can resume.",
+ cancel: "Cancel non-terminal tasks in this subtree and stop queued/running work where possible.",
+ restore: "Restore tasks cancelled by this subtree operation so work can resume.",
};
const LEAF_WORK_CONTROL_MODE_HELP_TEXT: Partial> = {
- pause: "Pause active execution on this issue until an explicit resume.",
- resume: "Release the active pause hold so this issue can continue.",
+ pause: "Pause active execution on this task until an explicit resume.",
+ resume: "Release the active pause hold so this task can continue.",
};
function issueTreeControlLabel(mode: IssueTreeControlMode, scope: "leaf" | "subtree") {
return scope === "leaf"
@@ -213,7 +213,7 @@ function treeControlPreviewErrorCopy(error: unknown): string {
if (error instanceof ApiError) {
if (error.status === 403) return "Only board users can preview subtree controls.";
if (error.status === 409) return "Preview is stale because subtree hold state changed. Retry to refresh.";
- if (error.status === 422) return "This subtree action is currently invalid for the selected issues.";
+ if (error.status === 422) return "This subtree action is currently invalid for the selected tasks.";
}
return error instanceof Error ? error.message : "Unable to load preview.";
}
@@ -602,7 +602,7 @@ function InboxMobileToolbar({
onClick={() => { onHide(); setMenuOpen(false); }}
>
- Hide this issue
+ Hide this task
)}
@@ -1117,7 +1117,7 @@ function IssueDetailActivityTab({
) : (
- This issue
+ This task
{issueCostSummary.hasCost ? (
${issueCostSummary.cost.toFixed(4)}
@@ -1144,7 +1144,7 @@ function IssueDetailActivityTab({
{hasIssueTreeCost && issueTreeCostSummary ? (
)}
{activePauseHold && (
@@ -3334,13 +3334,13 @@ export function IssueDetail() {
{childIssues.length === 0
- ? "Issue execution is held until resume. Human comments can still wake the assignee for triage."
+ ? "Task execution is held until resume. Human comments can still wake the assignee for triage."
: "Root and descendant execution is held until resume. Human comments can still wake assignees for triage."}
@@ -3386,7 +3386,7 @@ export function IssueDetail() {
) : (
- This issue is paused by ancestor{" "}
+ This task is paused by ancestor{" "}
{activePauseHoldRoot?.identifier ? (
{activePauseHoldRoot.identifier}
@@ -3394,7 +3394,7 @@ export function IssueDetail() {
) : (
activePauseHold.rootIssueId.slice(0, 8)
)}
- . Resume from the root issue to deliver deferred work.
+ . Resume from the root task to deliver deferred work.
)}
@@ -4021,7 +4021,7 @@ export function IssueDetail() {
{treeControlMode === "cancel" ? (
- Cancelling a subtree is destructive. Non-terminal issues will be marked cancelled, and running or queued work will be interrupted where possible.
+ Cancelling a subtree is destructive. Non-terminal tasks will be marked cancelled, and running or queued work will be interrupted where possible.
- Routine secrets apply to every issue this routine creates. They override matching keys in
+ Routine secrets apply to every task this routine creates. They override matching keys in
project and agent env. PAPERCLIP_* variables are reserved.
- Recurring work definitions that materialize into auditable execution issues.
+ Recurring work definitions that materialize into auditable execution tasks.
- Issues, comments, plan documents, agents, projects — same surface, ranked by relevance.
+ Tasks, comments, plan documents, agents, projects — same surface, ranked by relevance.
Identifier lookup: type{" "}
- PAP-123 to jump straight to an issue.
+ PAP-123 to jump straight to a task.
Quoted phrases: wrap a phrase in quotes to match the
@@ -502,14 +502,14 @@ function SearchTabContent({
Couldn’t run that search
{status ? `The server returned ${status}.` : "The request failed."} Your input and filters are still here, so
- you can retry or fall back to the Issues filter.
+ you can retry or fall back to the Tasks filter.
Retry
- Open Issues filter view
+ Open Tasks filter view
@@ -557,10 +557,10 @@ function SearchTabContent({
) : null}
- Create issue from this query
+ Create task from this query
- Open Issues filter view
+ Open Tasks filter view
diff --git a/ui/src/pages/Secrets.tsx b/ui/src/pages/Secrets.tsx
index 985df8ce111..0050a8bbd3d 100644
--- a/ui/src/pages/Secrets.tsx
+++ b/ui/src/pages/Secrets.tsx
@@ -1645,7 +1645,7 @@ function SecretsHowToUse() {
Paperclip resolves the value server-side when the run starts and injects it as that env var. Project env
- applies to every issue in the project and overrides agent env on matching keys.
+ applies to every task in the project and overrides agent env on matching keys.
diff --git a/ui/src/pages/UserProfile.tsx b/ui/src/pages/UserProfile.tsx
index 3bb5a6f4820..1140f81431e 100644
--- a/ui/src/pages/UserProfile.tsx
+++ b/ui/src/pages/UserProfile.tsx
@@ -219,7 +219,7 @@ export function UserProfile() {
(data?.topAgents ?? []).map((row) => ({
key: row.agentId ?? "unknown",
label: row.agentName ?? (row.agentId ? row.agentId.slice(0, 8) : "unknown"),
- sublabel: "Issue-linked usage",
+ sublabel: "Task-linked usage",
costCents: row.costCents,
inputTokens: row.inputTokens,
cachedInputTokens: row.cachedInputTokens,
diff --git a/ui/src/plugins/bridge-init.ts b/ui/src/plugins/bridge-init.ts
index c208df8319d..3865475d034 100644
--- a/ui/src/plugins/bridge-init.ts
+++ b/ui/src/plugins/bridge-init.ts
@@ -303,7 +303,7 @@ function PluginSdkIssuesList({
});
if (!companyId) {
- return createElement("div", { className: "text-sm text-muted-foreground" }, "Select a company to view issues.");
+ return createElement("div", { className: "text-sm text-muted-foreground" }, "Select a company to view tasks.");
}
return createElement(HostIssuesList, {