diff --git a/ui/src/components/ActiveAgentsPanel.tsx b/ui/src/components/ActiveAgentsPanel.tsx
index 2c2b0fcf295..4ff1c2cedba 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 task to act.`}
+ title={`${tone.label} — open the source issue 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 bd3dd22adb0..591bcc4e89c 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 tasks
;
+ if (!hasData) return
No issues
;
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 tasks
;
+ if (!hasData) return
No issues
;
return (
diff --git a/ui/src/components/AgentConfigForm.tsx b/ui/src/components/AgentConfigForm.tsx
index 9532ba5d2da..e07e97349f5 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 a04bb30e99b..f5f2fa5fbfa 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 task matches. Press{" "}
+ No quick issue matches. Press{" "}
↵{" "}
to search all or keep typing to refine.
@@ -174,7 +174,7 @@ export function CommandPalette() {
}}
>
- Create new task
+ Create new issue
C go("/issues")}>
- Tasks
+ Issues
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 task history, but removes it from active workspace views.
+ artifacts. Paperclip keeps the workspace record and issue 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 1011a38c9d4..27f93a0b8ed 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 task still needs a next step.");
+ expect(node.textContent).toContain("This issue 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 task is blocked until");
+ expect(node.textContent).not.toContain("Work on this issue 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 4f6c76ef9b4..0ec0eb4fea1 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 task to act.`}
+ title={`${tone.label} — open the source issue 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 task" : "the linked tasks";
+ const blockerLabel = blockers.length === 1 ? "the linked issue" : "the linked issues";
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 task still needs a next step.
+
This issue still needs a next step.
- A run finished successfully, but this task is still open in{" "}
+ A run finished successfully, but this issue is still open in{" "}
in_progress
{" "}
@@ -258,10 +258,10 @@ export function IssueBlockedNotice({
{blockers.length > 0
? isStalled
? stalledLeafBlockers.length > 1
- ? <>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.>}
+ ? <>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.>}
{blockers.length > 0 ? (
diff --git a/ui/src/components/IssueChatThread.test.tsx b/ui/src/components/IssueChatThread.test.tsx
index 1acd95666f0..5f55fcf8ba9 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 task is blocked by the linked task");
+ expect(container.textContent).toContain("Work on this issue is blocked by the linked issue");
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 task");
+ expect(container.textContent).toContain("Other files are added to this issue");
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 task");
+ expect(container.textContent).toContain("Attached to issue");
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 task");
+ expect(container.textContent).toContain("Attached to issue");
await act(async () => {
root.unmount();
diff --git a/ui/src/components/IssueChatThread.tsx b/ui/src/components/IssueChatThread.tsx
index 8031f0f9318..a7642d91a39 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 tasks page.
+ Showing a safe fallback transcript instead of crashing the issues page.
{renderActivityEvent
- ? "Runs and activity will appear here once this task has history."
- : "Historical runs without liveness metadata will appear here once linked to this task."}
+ ? "Runs and activity will appear here once this issue has history."
+ : "Historical runs without liveness metadata will appear here once linked to this issue."}
- Control whether this task runs in the shared workspace, a new isolated workspace, or an existing one.
+ Control whether this issue 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 task only.
+
Override the model and effort for this issue only.
diff --git a/ui/src/components/OnboardingWizard.tsx b/ui/src/components/OnboardingWizard.tsx
index 0f9c23789b8..4860dccf05c 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 task.
+ starter task, wake the agent, and open the issue.
- Applied to all runs for tasks in this project. Project values override agent env on key conflicts.
+ Applied to all runs for issues 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 task checkouts and execution workspace behavior.
+ Project-owned defaults for isolated issue checkouts and execution workspace behavior.
@@ -933,11 +933,11 @@ export function ProjectProperties({ project, onUpdate, onFieldUpdate, getFieldSa
- Let tasks choose between the project's primary checkout and an isolated execution workspace.
+ Let issues choose between the project's primary checkout and an isolated execution workspace.
- New tasks default to isolated checkout
+ New issues default to isolated checkout
- If disabled, new tasks stay on the project's primary checkout unless someone opts in.
+ If disabled, new issues stay on the project's primary checkout unless someone opts in.
-
+
@@ -1613,7 +1613,7 @@ export function DesignGuide() {
- When a task has produced no artifact work products, the Output section renders nothing
+ When an issue has produced no artifact work products, the Output section renders nothing
at all (no placeholder card).
- Show accepted-plan decomposition history on task detail pages. Intended for debugging and validating
+ Show accepted-plan decomposition history on issue detail pages. Intended for debugging and validating
subtask creation behavior while the presentation is still being refined.
@@ -342,7 +342,7 @@ export function InstanceExperimentalSettings() {
})
}
disabled={toggleMutation.isPending}
- aria-label="Toggle task plan decomposition panel experimental setting"
+ aria-label="Toggle issue plan decomposition panel experimental setting"
/>
@@ -387,9 +387,9 @@ export function InstanceExperimentalSettings() {
-
Auto-Create Recovery Tasks
+
Auto-Create Issue Recovery Tasks
- Let the heartbeat scheduler create recovery tasks for task dependency chains found inside the
+ Let the heartbeat scheduler create recovery issues for issue dependency chains found inside the
configured lookback window.
diff --git a/ui/src/pages/InstanceGeneralSettings.tsx b/ui/src/pages/InstanceGeneralSettings.tsx
index 69d61b50567..aa0b1783f62 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 tasks or
+ Enable app keyboard shortcuts, including inbox navigation and global shortcuts like creating issues 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 ee18c1d86ef..362d1254efb 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 tasks created");
+ expect(container.textContent).toContain("2 of 2 child issues 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-task: PAP-1 - Previous sibling"]')).toBeTruthy();
- expect(container.querySelector('a[aria-label="Next sub-task: PAP-3 - Next sibling"]')).toBeTruthy();
+ 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.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-task: PAP-11 - First child"]')).toBeTruthy();
+ expect(container.querySelector('a[aria-label="Next sub-issue: 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 task actions"]') as HTMLButtonElement | null;
+ const moreButton = container.querySelector('button[aria-label="More issue 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 task actions"]') as HTMLButtonElement | null;
+ const moreButton = container.querySelector('button[aria-label="More issue 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 task actions"]') as HTMLButtonElement | null;
+ const moreButton = container.querySelector('button[aria-label="More issue 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 tasks cancelled by this subtree operation so work can resume.");
+ expect(container.textContent).toContain("Restore issues 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 tasks");
+ .find((button) => button.textContent?.trim() === "Restore 1 issues");
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 tasks") as HTMLButtonElement | undefined;
+ .find((button) => button.textContent?.trim() === "Cancel 24 issues") 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 a730479b48b..a337a385164 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 task subtree until an explicit resume.",
+ pause: "Pause active execution in this issue subtree until an explicit resume.",
resume: "Release the active subtree pause hold so held work can continue.",
- 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.",
+ 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.",
};
const LEAF_WORK_CONTROL_MODE_HELP_TEXT: Partial> = {
- pause: "Pause active execution on this task until an explicit resume.",
- resume: "Release the active pause hold so this task can continue.",
+ pause: "Pause active execution on this issue until an explicit resume.",
+ resume: "Release the active pause hold so this issue 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 tasks.";
+ if (error.status === 422) return "This subtree action is currently invalid for the selected issues.";
}
return error instanceof Error ? error.message : "Unable to load preview.";
}
@@ -602,7 +602,7 @@ function InboxMobileToolbar({
onClick={() => { onHide(); setMenuOpen(false); }}
>
- Hide this task
+ Hide this issue
)}
@@ -1117,7 +1117,7 @@ function IssueDetailActivityTab({
) : (
- This task
+ This issue
{issueCostSummary.hasCost ? (
${issueCostSummary.cost.toFixed(4)}
@@ -1144,7 +1144,7 @@ function IssueDetailActivityTab({
{hasIssueTreeCost && issueTreeCostSummary ? (
)}
{activePauseHold && (
@@ -3365,13 +3365,13 @@ export function IssueDetail() {
{childIssues.length === 0
- ? "Task execution is held until resume. Human comments can still wake the assignee for triage."
+ ? "Issue 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."}
@@ -3417,7 +3417,7 @@ export function IssueDetail() {
) : (
- This task is paused by ancestor{" "}
+ This issue is paused by ancestor{" "}
{activePauseHoldRoot?.identifier ? (
{activePauseHoldRoot.identifier}
@@ -3425,7 +3425,7 @@ export function IssueDetail() {
) : (
activePauseHold.rootIssueId.slice(0, 8)
)}
- . Resume from the root task to deliver deferred work.
+ . Resume from the root issue to deliver deferred work.
)}
@@ -4052,7 +4052,7 @@ export function IssueDetail() {
{treeControlMode === "cancel" ? (
- Cancelling a subtree is destructive. Non-terminal tasks will be marked cancelled, and running or queued work will be interrupted where possible.
+ Cancelling a subtree is destructive. Non-terminal issues will be marked cancelled, and running or queued work will be interrupted where possible.
- Routine secrets apply to every task this routine creates. They override matching keys in
+ Routine secrets apply to every issue this routine creates. They override matching keys in
project and agent env. PAPERCLIP_* variables are reserved.
- Recurring work definitions that materialize into auditable execution tasks.
+ Recurring work definitions that materialize into auditable execution issues.
- Tasks, comments, plan documents, agents, projects — same surface, ranked by relevance.
+ Issues, comments, plan documents, agents, projects — same surface, ranked by relevance.
Identifier lookup: type{" "}
- PAP-123 to jump straight to a task.
+ PAP-123 to jump straight to an issue.
Quoted phrases: wrap a phrase in quotes to match the
@@ -506,14 +506,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 Tasks filter.
+ you can retry or fall back to the Issues filter.
Retry
- Open Tasks filter view
+ Open Issues filter view
@@ -561,10 +561,10 @@ function SearchTabContent({
) : null}
- Create task from this query
+ Create issue from this query
- Open Tasks filter view
+ Open Issues filter view
diff --git a/ui/src/pages/Secrets.tsx b/ui/src/pages/Secrets.tsx
index 0050a8bbd3d..985df8ce111 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 task in the project and overrides agent env on matching keys.
+ applies to every issue 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 1140f81431e..3bb5a6f4820 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: "Task-linked usage",
+ sublabel: "Issue-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 3865475d034..c208df8319d 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 tasks.");
+ return createElement("div", { className: "text-sm text-muted-foreground" }, "Select a company to view issues.");
}
return createElement(HostIssuesList, {