@tutti-os/workspace-issue-manager 0.0.3 → 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -599,6 +599,7 @@ async function executeIssueManagerRunTask(input) {
599
599
  workspaceId: input.workspaceId
600
600
  });
601
601
  return {
602
+ ...result.errorMessage?.trim() ? { errorMessage: result.errorMessage.trim() } : {},
602
603
  status: result.status
603
604
  };
604
605
  }
@@ -920,6 +921,28 @@ function createIssueManagerControllerActions(input) {
920
921
  }
921
922
  applyOutcome(createIssueManagerAttachReferencesOutcome(attached));
922
923
  };
924
+ const updateTaskStatus = async (taskId, status, options) => {
925
+ const selectedIssueId = nodeState.selectedIssueId;
926
+ const normalizedTaskId = taskId?.trim() ?? "";
927
+ if (!selectedIssueId || !normalizedTaskId) {
928
+ return;
929
+ }
930
+ try {
931
+ const task = await feature.backend.updateTask({
932
+ issueId: selectedIssueId,
933
+ status,
934
+ taskId: normalizedTaskId,
935
+ workspaceId
936
+ });
937
+ applyOutcome(
938
+ options.selectTaskOnSuccess ? createIssueManagerSaveTaskSuccessOutcome(task.taskId) : {
939
+ refreshAll: true
940
+ }
941
+ );
942
+ } catch (error) {
943
+ notifyError(error, "messages.taskSaveFailed");
944
+ }
945
+ };
923
946
  return {
924
947
  async attachReferences(parentKind) {
925
948
  const fileAdapter = feature.fileAdapter;
@@ -1160,7 +1183,11 @@ function createIssueManagerControllerActions(input) {
1160
1183
  const outcome = createIssueManagerRunTaskSuccessOutcome({
1161
1184
  status: result.status
1162
1185
  });
1163
- applyOutcome(outcome);
1186
+ if (outcome.notificationKey && result.errorMessage?.trim()) {
1187
+ notifyTip(result.errorMessage.trim());
1188
+ } else {
1189
+ applyOutcome(outcome);
1190
+ }
1164
1191
  } catch (error) {
1165
1192
  notifyTip(
1166
1193
  resolveIssueManagerErrorMessage(error, copy, "messages.runFailed")
@@ -1197,6 +1224,7 @@ function createIssueManagerControllerActions(input) {
1197
1224
  )
1198
1225
  );
1199
1226
  }
1227
+ setIsRunningTask(true);
1200
1228
  try {
1201
1229
  trackIssueManagerAnalytics(feature, {
1202
1230
  name: "issue_manager.issue_breakdown_initiated",
@@ -1206,6 +1234,9 @@ function createIssueManagerControllerActions(input) {
1206
1234
  }
1207
1235
  });
1208
1236
  const result = await breakdownLauncher.startBreakdown({
1237
+ ...nodeState.selectedExecutionDirectory?.trim() ? {
1238
+ executionDirectory: nodeState.selectedExecutionDirectory.trim()
1239
+ } : {},
1209
1240
  issueDetail: currentIssueDetail,
1210
1241
  provider: breakdownPlan.provider,
1211
1242
  workspaceId
@@ -1223,6 +1254,8 @@ function createIssueManagerControllerActions(input) {
1223
1254
  "messages.breakdownOpenFailed"
1224
1255
  )
1225
1256
  );
1257
+ } finally {
1258
+ setIsRunningTask(false);
1226
1259
  }
1227
1260
  },
1228
1261
  async saveIssue() {
@@ -1335,23 +1368,13 @@ function createIssueManagerControllerActions(input) {
1335
1368
  notifyError(error, "messages.taskSaveFailed");
1336
1369
  }
1337
1370
  },
1371
+ async setTaskStatus(taskId, status) {
1372
+ await updateTaskStatus(taskId, status, { selectTaskOnSuccess: false });
1373
+ },
1338
1374
  async setSelectedTaskStatus(status) {
1339
- const selectedIssueId = nodeState.selectedIssueId;
1340
- const selectedTaskId = nodeState.selectedTaskId;
1341
- if (!selectedIssueId || !selectedTaskId) {
1342
- return;
1343
- }
1344
- try {
1345
- const task = await feature.backend.updateTask({
1346
- issueId: selectedIssueId,
1347
- status,
1348
- taskId: selectedTaskId,
1349
- workspaceId
1350
- });
1351
- applyOutcome(createIssueManagerSaveTaskSuccessOutcome(task.taskId));
1352
- } catch (error) {
1353
- notifyError(error, "messages.taskSaveFailed");
1354
- }
1375
+ await updateTaskStatus(nodeState.selectedTaskId, status, {
1376
+ selectTaskOnSuccess: true
1377
+ });
1355
1378
  },
1356
1379
  async shareSelection() {
1357
1380
  const selectedIssueId = nodeState.selectedIssueId;
@@ -1942,7 +1965,6 @@ function useIssueManagerNodeView({
1942
1965
  selectedTask,
1943
1966
  shell: {
1944
1967
  onCloseTaskDrawer: () => {
1945
- controller.setTaskEditorMode("read");
1946
1968
  controller.selectTask(null);
1947
1969
  },
1948
1970
  onDismissIssueCreate: () => {
@@ -1962,18 +1984,18 @@ import {
1962
1984
  useEffect as useEffect9,
1963
1985
  useRef as useRef5
1964
1986
  } from "react";
1965
- import { Button as Button12, PanelIcon, cn as cn11 } from "@tutti-os/ui-system";
1987
+ import { Button as Button13, PanelIcon, cn as cn11 } from "@tutti-os/ui-system";
1966
1988
  import { WorkspaceFileReferencePicker } from "@tutti-os/workspace-file-reference/ui";
1967
1989
 
1968
1990
  // src/ui/internal/shell/IssueManagerShell.tsx
1969
1991
  import { useEffect as useEffect7, useState as useState8 } from "react";
1970
- import { Button as Button10, FileCreateIcon as FileCreateIcon4, cn as cn9 } from "@tutti-os/ui-system";
1992
+ import { Button as Button11, FileCreateIcon as FileCreateIcon4, cn as cn9 } from "@tutti-os/ui-system";
1971
1993
 
1972
1994
  // src/ui/internal/shell/IssueManagerPanels.tsx
1973
1995
  import { useState as useState5 } from "react";
1974
1996
  import {
1975
1997
  Badge as Badge2,
1976
- Button as Button4,
1998
+ Button as Button5,
1977
1999
  ConfirmationDialog,
1978
2000
  ScrollArea as ScrollArea2
1979
2001
  } from "@tutti-os/ui-system";
@@ -2001,9 +2023,11 @@ function issueManagerStatusBadgeVariant(status) {
2001
2023
  // src/ui/internal/issue/IssueManagerIssueSections.tsx
2002
2024
  import {
2003
2025
  AgentSessionsIcon,
2026
+ ArrowRightIcon,
2004
2027
  Badge,
2005
2028
  Button as Button2,
2006
2029
  FileCreateIcon as FileCreateIcon2,
2030
+ FileIcon,
2007
2031
  ScrollArea,
2008
2032
  cn
2009
2033
  } from "@tutti-os/ui-system";
@@ -2229,7 +2253,9 @@ function IssueManagerOutputSection({
2229
2253
  outputs.length === 0 ? /* @__PURE__ */ jsx3("p", { className: "text-[13px] font-normal leading-6 text-[var(--text-secondary)]", children: copy.t("messages.noExecutionOutputs") }) : /* @__PURE__ */ jsx3("div", { className: "overflow-hidden rounded-[12px] border border-[var(--line-2)] bg-transparent", children: outputs.map((output) => /* @__PURE__ */ jsxs3(
2230
2254
  "button",
2231
2255
  {
2232
- className: "flex w-full items-start justify-between gap-4 border-b border-[var(--line-2)] px-4 py-3 text-left transition-colors last:border-b-0 hover:bg-transparency-hover focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/25 focus-visible:ring-inset",
2256
+ "aria-label": copy.t("actions.openReference"),
2257
+ className: "flex w-full items-center justify-between gap-4 border-b border-[var(--line-2)] px-4 py-3 text-left transition-colors last:border-b-0 hover:bg-transparency-hover focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/25 focus-visible:ring-inset",
2258
+ title: copy.t("actions.openReference"),
2233
2259
  type: "button",
2234
2260
  onClick: () => {
2235
2261
  void onOpen({
@@ -2239,11 +2265,27 @@ function IssueManagerOutputSection({
2239
2265
  });
2240
2266
  },
2241
2267
  children: [
2242
- /* @__PURE__ */ jsxs3("span", { className: "min-w-0 flex-1", children: [
2243
- /* @__PURE__ */ jsx3("span", { className: "block truncate text-[13px] font-semibold text-[var(--text-primary)]", children: output.displayName }),
2244
- /* @__PURE__ */ jsx3("span", { className: "mt-1 block truncate text-[11px] font-normal text-[var(--text-secondary)]", children: output.path })
2268
+ /* @__PURE__ */ jsxs3("span", { className: "flex min-w-0 flex-1 items-center gap-3", children: [
2269
+ /* @__PURE__ */ jsx3(
2270
+ "span",
2271
+ {
2272
+ "aria-hidden": "true",
2273
+ className: "flex h-8 w-8 shrink-0 items-center justify-center rounded-md border border-[var(--line-2)] bg-transparency-actived text-primary",
2274
+ children: /* @__PURE__ */ jsx3(FileIcon, { size: 16 })
2275
+ }
2276
+ ),
2277
+ /* @__PURE__ */ jsxs3("span", { className: "min-w-0 flex-1", children: [
2278
+ /* @__PURE__ */ jsx3("span", { className: "block truncate text-[13px] font-semibold text-[var(--text-primary)]", children: output.displayName }),
2279
+ /* @__PURE__ */ jsx3("span", { className: "mt-1 block truncate text-[11px] font-normal text-[var(--text-secondary)]", children: output.path })
2280
+ ] })
2245
2281
  ] }),
2246
- /* @__PURE__ */ jsx3("span", { className: "shrink-0 text-[11px] font-normal text-[var(--text-secondary)]", children: formatIssueManagerTimestamp(output.createdAtUnix) || "" })
2282
+ /* @__PURE__ */ jsxs3("span", { className: "flex shrink-0 items-center gap-2", children: [
2283
+ /* @__PURE__ */ jsx3("span", { className: "text-[11px] font-normal text-[var(--text-secondary)]", children: formatIssueManagerTimestamp(output.createdAtUnix) || "" }),
2284
+ /* @__PURE__ */ jsxs3("span", { className: "inline-flex h-7 items-center gap-1 rounded-md border border-primary/20 bg-transparency-actived px-2 text-[11px] font-semibold text-primary", children: [
2285
+ copy.t("actions.openReference"),
2286
+ /* @__PURE__ */ jsx3(ArrowRightIcon, { size: 13 })
2287
+ ] })
2288
+ ] })
2247
2289
  ]
2248
2290
  },
2249
2291
  output.outputId
@@ -2295,6 +2337,33 @@ function IssueManagerSubtaskSection({
2295
2337
  ] });
2296
2338
  }
2297
2339
 
2340
+ // src/ui/internal/issue/IssueManagerIssueAcceptanceState.ts
2341
+ function resolveIssueManagerIssueAcceptanceTaskId(input) {
2342
+ if (input.selectedIssue?.status !== "pending_acceptance" || input.selectedTaskId || input.latestRun?.status !== "completed") {
2343
+ return null;
2344
+ }
2345
+ const taskId = input.latestRun.taskId?.trim() ?? "";
2346
+ if (!taskId) {
2347
+ return null;
2348
+ }
2349
+ const visibleTask = input.tasks.find((task) => task.taskId === taskId);
2350
+ const issueTitle = input.selectedIssue.title.trim();
2351
+ const taskTitle = visibleTask?.title.trim() ?? "";
2352
+ if (visibleTask && taskTitle !== "" && taskTitle !== issueTitle) {
2353
+ return null;
2354
+ }
2355
+ return taskId;
2356
+ }
2357
+ function resolveIssueManagerVisibleSubtasks(input) {
2358
+ const hiddenTaskId = input.hiddenAcceptanceTaskId?.trim() ?? "";
2359
+ if (!hiddenTaskId) {
2360
+ return [...input.tasks];
2361
+ }
2362
+ return input.tasks.filter((task) => {
2363
+ return task.taskId !== hiddenTaskId;
2364
+ });
2365
+ }
2366
+
2298
2367
  // src/ui/internal/content/IssueManagerDescriptionSection.tsx
2299
2368
  import { useEffect as useEffect4, useRef, useState as useState3 } from "react";
2300
2369
  import { RichTextReadonlyContent } from "@tutti-os/ui-rich-text/editor";
@@ -2488,11 +2557,57 @@ function IssueManagerRichTextTextarea({
2488
2557
  );
2489
2558
  }
2490
2559
 
2560
+ // src/ui/internal/task/IssueManagerTaskAcceptanceCard.tsx
2561
+ import { Button as Button4 } from "@tutti-os/ui-system";
2562
+ import { jsx as jsx6, jsxs as jsxs6 } from "react/jsx-runtime";
2563
+ function IssueManagerTaskAcceptanceCard({
2564
+ controller,
2565
+ taskId
2566
+ }) {
2567
+ const copy = controller.copy;
2568
+ const updateStatus = (status) => {
2569
+ if (taskId) {
2570
+ void controller.setTaskStatus(taskId, status);
2571
+ return;
2572
+ }
2573
+ void controller.setSelectedTaskStatus(status);
2574
+ };
2575
+ return /* @__PURE__ */ jsxs6("div", { className: "grid gap-2 rounded-md bg-[var(--transparency-block)] px-3 py-2", children: [
2576
+ /* @__PURE__ */ jsxs6("div", { className: "min-w-0 text-[11px] font-normal leading-[1.45] text-[var(--text-secondary)] [overflow-wrap:anywhere]", children: [
2577
+ /* @__PURE__ */ jsx6("span", { className: "font-semibold text-[var(--text-primary)]", children: copy.t("labels.taskAcceptance") }),
2578
+ /* @__PURE__ */ jsx6("span", { className: "mx-1 text-[var(--text-tertiary)]", children: "\xB7" }),
2579
+ /* @__PURE__ */ jsx6("span", { children: copy.t("messages.taskAcceptanceHint") })
2580
+ ] }),
2581
+ /* @__PURE__ */ jsxs6("div", { className: "flex items-center justify-end gap-2", children: [
2582
+ /* @__PURE__ */ jsx6(
2583
+ Button4,
2584
+ {
2585
+ className: "h-7 px-2 text-[11px] text-[var(--state-danger)] hover:bg-[var(--on-danger)] hover:text-[var(--state-danger)]",
2586
+ type: "button",
2587
+ variant: "ghost",
2588
+ onClick: () => updateStatus("not_started"),
2589
+ children: copy.t("actions.rejectTask")
2590
+ }
2591
+ ),
2592
+ /* @__PURE__ */ jsx6(
2593
+ Button4,
2594
+ {
2595
+ className: "h-7 px-2.5 text-[11px]",
2596
+ type: "button",
2597
+ variant: "secondary",
2598
+ onClick: () => updateStatus("completed"),
2599
+ children: copy.t("actions.acceptTask")
2600
+ }
2601
+ )
2602
+ ] })
2603
+ ] });
2604
+ }
2605
+
2491
2606
  // src/ui/internal/shell/IssueManagerDraftTitleInput.tsx
2492
2607
  import { useComposedInputValue } from "@tutti-os/ui-react-hooks";
2493
2608
  import { useLayoutEffect, useRef as useRef3 } from "react";
2494
2609
  import { Input } from "@tutti-os/ui-system";
2495
- import { jsx as jsx6 } from "react/jsx-runtime";
2610
+ import { jsx as jsx7 } from "react/jsx-runtime";
2496
2611
  function IssueManagerDraftTitleInput({
2497
2612
  onChange,
2498
2613
  placeholder,
@@ -2527,7 +2642,7 @@ function IssueManagerDraftTitleInput({
2527
2642
  start
2528
2643
  };
2529
2644
  };
2530
- return /* @__PURE__ */ jsx6(
2645
+ return /* @__PURE__ */ jsx7(
2531
2646
  Input,
2532
2647
  {
2533
2648
  ref: inputRef,
@@ -2556,7 +2671,7 @@ var issueManagerEditorRiseInDelay2ClassName = "motion-safe:[animation-delay:110m
2556
2671
  var issueManagerEditorFooterFadeInClassName = "motion-safe:animate-in motion-safe:fade-in-0 motion-safe:duration-[180ms] motion-safe:ease-[cubic-bezier(0.22,1,0.36,1)] motion-safe:[animation-delay:180ms] motion-safe:[animation-fill-mode:both] motion-reduce:animate-none";
2557
2672
 
2558
2673
  // src/ui/internal/shell/IssueManagerPanels.tsx
2559
- import { jsx as jsx7, jsxs as jsxs6 } from "react/jsx-runtime";
2674
+ import { jsx as jsx8, jsxs as jsxs7 } from "react/jsx-runtime";
2560
2675
  function IssueManagerIssuePane({
2561
2676
  controller,
2562
2677
  renderLatestRunStatus,
@@ -2573,65 +2688,82 @@ function IssueManagerIssuePane({
2573
2688
  const selectedTask = selectedTaskId ? (controller.taskDetail.value?.task?.taskId === selectedTaskId ? controller.taskDetail.value.task : tasks.find((task) => task.taskId === selectedTaskId)) ?? null : null;
2574
2689
  const latestRun = selectedTask ? controller.taskDetail.value?.latestRun ?? controller.taskDetail.value?.recentRuns[0] ?? null : controller.issueDetail.value?.latestRun ?? controller.issueDetail.value?.recentRuns[0] ?? null;
2575
2690
  const latestOutputs = selectedTask ? controller.taskDetail.value?.latestOutputs ?? [] : controller.issueDetail.value?.latestOutputs ?? [];
2691
+ const issueAcceptanceTaskId = resolveIssueManagerIssueAcceptanceTaskId({
2692
+ latestRun,
2693
+ selectedIssue,
2694
+ selectedTaskId,
2695
+ tasks
2696
+ });
2697
+ const visibleTasks = resolveIssueManagerVisibleSubtasks({
2698
+ hiddenAcceptanceTaskId: issueAcceptanceTaskId,
2699
+ tasks
2700
+ });
2576
2701
  const [deleteDialogOpen, setDeleteDialogOpen] = useState5(false);
2577
2702
  const [deleteBusy, setDeleteBusy] = useState5(false);
2578
2703
  if (isCreatingIssue || isEditingIssue) {
2579
- return /* @__PURE__ */ jsxs6("div", { className: "flex h-full min-h-0 flex-col overflow-hidden", children: [
2580
- /* @__PURE__ */ jsx7(ScrollArea2, { className: "min-h-0 flex-1 [&_[data-orientation=vertical][data-slot=scroll-area-scrollbar]]:opacity-100 [&_[data-slot=scroll-area-viewport]]:overscroll-contain", children: /* @__PURE__ */ jsx7("div", { className: "flex min-h-full flex-col gap-[14px] px-7 py-8", children: /* @__PURE__ */ jsxs6("div", { className: "flex w-full min-w-0 flex-col gap-3", children: [
2581
- /* @__PURE__ */ jsx7(
2582
- "div",
2583
- {
2584
- className: `${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay0ClassName}`,
2585
- children: /* @__PURE__ */ jsx7("h2", { className: "m-0 text-[15px] font-semibold leading-[1.35] text-[var(--text-primary)]", children: isCreatingIssue ? copy.t("actions.createIssue") : copy.t("actions.editIssue") })
2586
- }
2587
- ),
2588
- /* @__PURE__ */ jsxs6("div", { className: "flex w-full min-w-0 flex-col gap-6", children: [
2589
- /* @__PURE__ */ jsxs6(
2590
- "label",
2591
- {
2592
- className: `flex w-full min-w-0 flex-col gap-2 text-[13px] font-semibold text-[var(--text-secondary)] ${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay1ClassName}`,
2593
- children: [
2594
- /* @__PURE__ */ jsx7("span", { className: "leading-5", children: copy.t("labels.title") }),
2595
- /* @__PURE__ */ jsx7(
2596
- IssueManagerDraftTitleInput,
2597
- {
2598
- placeholder: copy.t("composer.issueTitlePlaceholder"),
2599
- value: controller.issueDraft.title,
2600
- onChange: controller.setIssueTitle
2601
- }
2602
- )
2603
- ]
2604
- }
2605
- ),
2606
- /* @__PURE__ */ jsxs6(
2607
- "div",
2608
- {
2609
- className: `flex min-h-0 w-full min-w-0 flex-col gap-2 text-[13px] font-semibold text-[var(--text-secondary)] ${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay2ClassName}`,
2610
- children: [
2611
- /* @__PURE__ */ jsx7("span", { className: "leading-5", children: copy.t("labels.content") }),
2612
- /* @__PURE__ */ jsx7(
2613
- IssueManagerRichTextTextarea,
2614
- {
2615
- controller,
2616
- surface: "issue",
2617
- textareaClassName: "min-h-[180px] resize-none",
2618
- placeholder: copy.t("composer.issueContentPlaceholder"),
2619
- value: controller.issueDraft.content,
2620
- onChange: controller.setIssueContent
2621
- }
2622
- )
2623
- ]
2624
- }
2625
- )
2626
- ] })
2627
- ] }) }) }),
2628
- /* @__PURE__ */ jsx7(
2704
+ return /* @__PURE__ */ jsxs7("div", { className: "flex h-full min-h-0 flex-col overflow-hidden", children: [
2705
+ /* @__PURE__ */ jsx8(
2706
+ ScrollArea2,
2707
+ {
2708
+ scrollbarMode: "native",
2709
+ className: "min-h-0 flex-1 [&_[data-orientation=vertical][data-slot=scroll-area-scrollbar]]:opacity-100 [&_[data-slot=scroll-area-viewport]]:overscroll-contain",
2710
+ children: /* @__PURE__ */ jsx8("div", { className: "flex min-h-full flex-col gap-[14px] px-7 py-8", children: /* @__PURE__ */ jsxs7("div", { className: "flex w-full min-w-0 flex-col gap-3", children: [
2711
+ /* @__PURE__ */ jsx8(
2712
+ "div",
2713
+ {
2714
+ className: `${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay0ClassName}`,
2715
+ children: /* @__PURE__ */ jsx8("h2", { className: "m-0 text-[15px] font-semibold leading-[1.35] text-[var(--text-primary)]", children: isCreatingIssue ? copy.t("actions.createIssue") : copy.t("actions.editIssue") })
2716
+ }
2717
+ ),
2718
+ /* @__PURE__ */ jsxs7("div", { className: "flex w-full min-w-0 flex-col gap-6", children: [
2719
+ /* @__PURE__ */ jsxs7(
2720
+ "label",
2721
+ {
2722
+ className: `flex w-full min-w-0 flex-col gap-2 text-[13px] font-semibold text-[var(--text-secondary)] ${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay1ClassName}`,
2723
+ children: [
2724
+ /* @__PURE__ */ jsx8("span", { className: "leading-5", children: copy.t("labels.title") }),
2725
+ /* @__PURE__ */ jsx8(
2726
+ IssueManagerDraftTitleInput,
2727
+ {
2728
+ placeholder: copy.t("composer.issueTitlePlaceholder"),
2729
+ value: controller.issueDraft.title,
2730
+ onChange: controller.setIssueTitle
2731
+ }
2732
+ )
2733
+ ]
2734
+ }
2735
+ ),
2736
+ /* @__PURE__ */ jsxs7(
2737
+ "div",
2738
+ {
2739
+ className: `flex min-h-0 w-full min-w-0 flex-col gap-2 text-[13px] font-semibold text-[var(--text-secondary)] ${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay2ClassName}`,
2740
+ children: [
2741
+ /* @__PURE__ */ jsx8("span", { className: "leading-5", children: copy.t("labels.content") }),
2742
+ /* @__PURE__ */ jsx8(
2743
+ IssueManagerRichTextTextarea,
2744
+ {
2745
+ controller,
2746
+ surface: "issue",
2747
+ textareaClassName: "min-h-[180px] resize-none",
2748
+ placeholder: copy.t("composer.issueContentPlaceholder"),
2749
+ value: controller.issueDraft.content,
2750
+ onChange: controller.setIssueContent
2751
+ }
2752
+ )
2753
+ ]
2754
+ }
2755
+ )
2756
+ ] })
2757
+ ] }) })
2758
+ }
2759
+ ),
2760
+ /* @__PURE__ */ jsx8(
2629
2761
  "div",
2630
2762
  {
2631
2763
  className: `shrink-0 border-t border-border-1 px-7 py-4 ${issueManagerEditorFooterFadeInClassName}`,
2632
- children: /* @__PURE__ */ jsxs6("div", { className: "flex items-center justify-end gap-3", children: [
2633
- /* @__PURE__ */ jsx7(
2634
- Button4,
2764
+ children: /* @__PURE__ */ jsxs7("div", { className: "flex items-center justify-end gap-3", children: [
2765
+ /* @__PURE__ */ jsx8(
2766
+ Button5,
2635
2767
  {
2636
2768
  size: "dialog",
2637
2769
  type: "button",
@@ -2640,8 +2772,8 @@ function IssueManagerIssuePane({
2640
2772
  children: copy.t("actions.cancel")
2641
2773
  }
2642
2774
  ),
2643
- /* @__PURE__ */ jsx7(
2644
- Button4,
2775
+ /* @__PURE__ */ jsx8(
2776
+ Button5,
2645
2777
  {
2646
2778
  disabled: isIssueTitleMissing,
2647
2779
  size: "dialog",
@@ -2656,139 +2788,153 @@ function IssueManagerIssuePane({
2656
2788
  ] });
2657
2789
  }
2658
2790
  if (!selectedIssue) {
2659
- return /* @__PURE__ */ jsx7("div", { className: "h-full min-h-0" });
2791
+ return /* @__PURE__ */ jsx8("div", { className: "h-full min-h-0" });
2660
2792
  }
2661
- return /* @__PURE__ */ jsx7("div", { className: "flex h-full min-h-0 flex-col overflow-hidden", children: /* @__PURE__ */ jsx7(ScrollArea2, { className: "min-h-0 flex-1 [&_[data-orientation=vertical][data-slot=scroll-area-scrollbar]]:opacity-100 [&_[data-slot=scroll-area-viewport]]:overscroll-contain", children: /* @__PURE__ */ jsx7("div", { className: "px-8 py-7", children: controller.issueDetail.isLoading && controller.issueDetail.value === null ? /* @__PURE__ */ jsx7(IssueManagerPaneLoadingState, {}) : /* @__PURE__ */ jsxs6("div", { className: "flex w-full min-w-0 flex-col gap-9", children: [
2662
- /* @__PURE__ */ jsxs6("header", { className: "grid gap-3", children: [
2663
- /* @__PURE__ */ jsxs6("div", { className: "flex items-center justify-between gap-6", children: [
2664
- /* @__PURE__ */ jsx7(IssueManagerTitleTooltip, { title: selectedIssue.title, children: /* @__PURE__ */ jsx7("h2", { className: "line-clamp-2 min-w-0 flex-1 whitespace-normal text-[15px] font-semibold leading-6 text-[var(--text-primary)] [overflow-wrap:anywhere]", children: selectedIssue.title }) }),
2665
- /* @__PURE__ */ jsxs6("div", { className: "flex shrink-0 items-center gap-2", children: [
2666
- /* @__PURE__ */ jsx7(
2667
- Button4,
2668
- {
2669
- type: "button",
2670
- variant: "ghost",
2671
- onClick: () => controller.setIssueEditorMode("edit"),
2672
- children: copy.t("actions.edit")
2673
- }
2674
- ),
2675
- /* @__PURE__ */ jsx7(
2676
- Button4,
2793
+ return /* @__PURE__ */ jsx8("div", { className: "flex h-full min-h-0 flex-col overflow-hidden", children: /* @__PURE__ */ jsx8(
2794
+ ScrollArea2,
2795
+ {
2796
+ scrollbarMode: "native",
2797
+ className: "min-h-0 flex-1 [&_[data-orientation=vertical][data-slot=scroll-area-scrollbar]]:opacity-100 [&_[data-slot=scroll-area-viewport]]:overscroll-contain",
2798
+ children: /* @__PURE__ */ jsx8("div", { className: "px-8 py-7", children: controller.issueDetail.isLoading && controller.issueDetail.value === null ? /* @__PURE__ */ jsx8(IssueManagerPaneLoadingState, {}) : /* @__PURE__ */ jsxs7("div", { className: "flex w-full min-w-0 flex-col gap-9", children: [
2799
+ /* @__PURE__ */ jsxs7("header", { className: "grid gap-3", children: [
2800
+ /* @__PURE__ */ jsxs7("div", { className: "flex items-center justify-between gap-6", children: [
2801
+ /* @__PURE__ */ jsx8(IssueManagerTitleTooltip, { title: selectedIssue.title, children: /* @__PURE__ */ jsx8("h2", { className: "line-clamp-2 min-w-0 flex-1 whitespace-normal text-[15px] font-semibold leading-6 text-[var(--text-primary)] [overflow-wrap:anywhere]", children: selectedIssue.title }) }),
2802
+ /* @__PURE__ */ jsxs7("div", { className: "flex shrink-0 items-center gap-2", children: [
2803
+ /* @__PURE__ */ jsx8(
2804
+ Button5,
2805
+ {
2806
+ type: "button",
2807
+ variant: "ghost",
2808
+ onClick: () => controller.setIssueEditorMode("edit"),
2809
+ children: copy.t("actions.edit")
2810
+ }
2811
+ ),
2812
+ /* @__PURE__ */ jsx8(
2813
+ Button5,
2814
+ {
2815
+ className: "text-[var(--state-danger)] hover:bg-[var(--on-danger)] hover:text-[var(--state-danger)]",
2816
+ type: "button",
2817
+ variant: "ghost",
2818
+ onClick: () => setDeleteDialogOpen(true),
2819
+ children: copy.t("actions.delete")
2820
+ }
2821
+ )
2822
+ ] })
2823
+ ] }),
2824
+ /* @__PURE__ */ jsxs7("div", { className: "flex flex-wrap items-center gap-x-2 gap-y-2 text-[11px] font-normal leading-[1.3] text-[var(--text-secondary)]", children: [
2825
+ /* @__PURE__ */ jsx8(
2826
+ Badge2,
2827
+ {
2828
+ variant: issueManagerStatusBadgeVariant(
2829
+ selectedIssue.status
2830
+ ),
2831
+ children: resolveIssueManagerStatusLabel(copy, selectedIssue.status)
2832
+ }
2833
+ ),
2834
+ /* @__PURE__ */ jsx8(
2835
+ "span",
2836
+ {
2837
+ "aria-hidden": "true",
2838
+ className: "h-4 w-px shrink-0 bg-[var(--line-2)]"
2839
+ }
2840
+ ),
2841
+ /* @__PURE__ */ jsxs7("span", { className: "text-[11px] font-normal leading-[1.3]", children: [
2842
+ copy.t("labels.creator"),
2843
+ " ",
2844
+ resolveIssueManagerCreatorLabel(selectedIssue)
2845
+ ] }),
2846
+ /* @__PURE__ */ jsx8(
2847
+ "span",
2848
+ {
2849
+ "aria-hidden": "true",
2850
+ className: "h-4 w-px shrink-0 bg-[var(--line-2)]"
2851
+ }
2852
+ ),
2853
+ /* @__PURE__ */ jsxs7("span", { className: "text-[11px] font-normal leading-[1.3]", children: [
2854
+ copy.t("labels.createdAt"),
2855
+ " ",
2856
+ formatIssueManagerTimestamp(selectedIssue.createdAtUnix) || "-"
2857
+ ] })
2858
+ ] }),
2859
+ issueAcceptanceTaskId ? /* @__PURE__ */ jsx8(
2860
+ IssueManagerTaskAcceptanceCard,
2677
2861
  {
2678
- className: "text-[var(--state-danger)] hover:bg-[var(--on-danger)] hover:text-[var(--state-danger)]",
2679
- type: "button",
2680
- variant: "ghost",
2681
- onClick: () => setDeleteDialogOpen(true),
2682
- children: copy.t("actions.delete")
2862
+ controller,
2863
+ taskId: issueAcceptanceTaskId
2683
2864
  }
2684
- )
2685
- ] })
2686
- ] }),
2687
- /* @__PURE__ */ jsxs6("div", { className: "flex flex-wrap items-center gap-x-2 gap-y-2 text-[11px] font-normal leading-[1.3] text-[var(--text-secondary)]", children: [
2688
- /* @__PURE__ */ jsx7(
2689
- Badge2,
2865
+ ) : null
2866
+ ] }),
2867
+ /* @__PURE__ */ jsx8(
2868
+ ConfirmationDialog,
2690
2869
  {
2691
- variant: issueManagerStatusBadgeVariant(
2692
- selectedIssue.status
2693
- ),
2694
- children: resolveIssueManagerStatusLabel(copy, selectedIssue.status)
2870
+ cancelLabel: copy.t("actions.cancel"),
2871
+ confirmBusy: deleteBusy,
2872
+ confirmLabel: copy.t("actions.delete"),
2873
+ description: selectedIssue.title,
2874
+ open: deleteDialogOpen,
2875
+ title: copy.t("confirmations.deleteIssue"),
2876
+ tone: "destructive",
2877
+ onConfirm: () => {
2878
+ setDeleteBusy(true);
2879
+ void controller.deleteIssue({ skipConfirmation: true }).finally(() => {
2880
+ setDeleteBusy(false);
2881
+ setDeleteDialogOpen(false);
2882
+ });
2883
+ },
2884
+ onOpenChange: setDeleteDialogOpen
2695
2885
  }
2696
2886
  ),
2697
- /* @__PURE__ */ jsx7(
2698
- "span",
2887
+ /* @__PURE__ */ jsx8(
2888
+ IssueManagerDescriptionSection,
2699
2889
  {
2700
- "aria-hidden": "true",
2701
- className: "h-4 w-px shrink-0 bg-[var(--line-2)]"
2890
+ content: issueContent,
2891
+ emptyLabel: copy.t("messages.issueContentEmpty"),
2892
+ label: copy.t("labels.description"),
2893
+ onOpen: controller.openReference,
2894
+ variant: "plain"
2702
2895
  }
2703
2896
  ),
2704
- /* @__PURE__ */ jsxs6("span", { className: "text-[11px] font-normal leading-[1.3]", children: [
2705
- copy.t("labels.creator"),
2706
- " ",
2707
- resolveIssueManagerCreatorLabel(selectedIssue)
2708
- ] }),
2709
- /* @__PURE__ */ jsx7(
2710
- "span",
2897
+ /* @__PURE__ */ jsx8(
2898
+ IssueManagerLatestRunStatusSection,
2711
2899
  {
2712
- "aria-hidden": "true",
2713
- className: "h-4 w-px shrink-0 bg-[var(--line-2)]"
2900
+ copy,
2901
+ latestRun,
2902
+ onOpenAgentSession: controller.canOpenAgentSessions ? controller.openAgentSession : void 0,
2903
+ renderLatestRunStatus,
2904
+ title: selectedTask?.title ?? selectedIssue.title
2714
2905
  }
2715
2906
  ),
2716
- /* @__PURE__ */ jsxs6("span", { className: "text-[11px] font-normal leading-[1.3]", children: [
2717
- copy.t("labels.createdAt"),
2718
- " ",
2719
- formatIssueManagerTimestamp(selectedIssue.createdAtUnix) || "-"
2720
- ] })
2721
- ] })
2722
- ] }),
2723
- /* @__PURE__ */ jsx7(
2724
- ConfirmationDialog,
2725
- {
2726
- cancelLabel: copy.t("actions.cancel"),
2727
- confirmBusy: deleteBusy,
2728
- confirmLabel: copy.t("actions.delete"),
2729
- description: selectedIssue.title,
2730
- open: deleteDialogOpen,
2731
- title: copy.t("confirmations.deleteIssue"),
2732
- tone: "destructive",
2733
- onConfirm: () => {
2734
- setDeleteBusy(true);
2735
- void controller.deleteIssue({ skipConfirmation: true }).finally(() => {
2736
- setDeleteBusy(false);
2737
- setDeleteDialogOpen(false);
2738
- });
2739
- },
2740
- onOpenChange: setDeleteDialogOpen
2741
- }
2742
- ),
2743
- /* @__PURE__ */ jsx7(
2744
- IssueManagerDescriptionSection,
2745
- {
2746
- content: issueContent,
2747
- emptyLabel: copy.t("messages.issueContentEmpty"),
2748
- label: copy.t("labels.description"),
2749
- onOpen: controller.openReference,
2750
- variant: "plain"
2751
- }
2752
- ),
2753
- /* @__PURE__ */ jsx7(
2754
- IssueManagerLatestRunStatusSection,
2755
- {
2756
- copy,
2757
- latestRun,
2758
- onOpenAgentSession: controller.canOpenAgentSessions ? controller.openAgentSession : void 0,
2759
- renderLatestRunStatus,
2760
- title: selectedTask?.title ?? selectedIssue.title
2761
- }
2762
- ),
2763
- /* @__PURE__ */ jsx7(
2764
- IssueManagerOutputSection,
2765
- {
2766
- copy,
2767
- outputs: latestOutputs,
2768
- onOpen: controller.openReference
2769
- }
2770
- ),
2771
- /* @__PURE__ */ jsx7(
2772
- IssueManagerSubtaskSection,
2773
- {
2774
- copy,
2775
- onCreate: controller.createTaskDraft,
2776
- onSelectTask: controller.selectTask,
2777
- selectedTaskId: selectedTask?.taskId ?? null,
2778
- tasks
2779
- }
2780
- )
2781
- ] }) }) }) });
2907
+ /* @__PURE__ */ jsx8(
2908
+ IssueManagerOutputSection,
2909
+ {
2910
+ copy,
2911
+ outputs: latestOutputs,
2912
+ onOpen: controller.openReference
2913
+ }
2914
+ ),
2915
+ /* @__PURE__ */ jsx8(
2916
+ IssueManagerSubtaskSection,
2917
+ {
2918
+ copy,
2919
+ onCreate: controller.createTaskDraft,
2920
+ onSelectTask: controller.selectTask,
2921
+ selectedTaskId: selectedTask?.taskId ?? null,
2922
+ tasks: visibleTasks
2923
+ }
2924
+ )
2925
+ ] }) })
2926
+ }
2927
+ ) });
2782
2928
  }
2783
2929
 
2784
2930
  // src/ui/internal/shell/IssueManagerBottomBar.tsx
2785
- import { Button as Button6, cn as cn5 } from "@tutti-os/ui-system";
2931
+ import { Button as Button7, cn as cn5 } from "@tutti-os/ui-system";
2786
2932
 
2787
2933
  // src/ui/internal/task/IssueManagerRunSections.tsx
2788
2934
  import {
2789
2935
  Badge as Badge3,
2790
2936
  AgentSessionsIcon as AgentSessionsIcon2,
2791
- Button as Button5,
2937
+ Button as Button6,
2792
2938
  CheckIcon,
2793
2939
  ChevronDownIcon,
2794
2940
  DropdownMenu,
@@ -2799,7 +2945,7 @@ import {
2799
2945
  cn as cn4
2800
2946
  } from "@tutti-os/ui-system";
2801
2947
  import { WorkspaceUserProjectSelect } from "@tutti-os/workspace-user-project/ui";
2802
- import { Fragment, jsx as jsx8, jsxs as jsxs7 } from "react/jsx-runtime";
2948
+ import { Fragment, jsx as jsx9, jsxs as jsxs8 } from "react/jsx-runtime";
2803
2949
  var providerMenuItemClassName = "min-h-8 overflow-hidden rounded-md py-1.5 pr-7 pl-2.5 text-[13px] font-normal leading-[1.2] text-[var(--text-primary)]";
2804
2950
  var providerMenuItemCheckClassName = "pointer-events-none absolute right-2 top-1/2 shrink-0 -translate-y-1/2";
2805
2951
  var providerActionTriggerClassName = "font-[var(--font-weight-emphasis-cjk)]";
@@ -2809,12 +2955,12 @@ function IssueManagerRunActionTrigger({
2809
2955
  triggerClassName,
2810
2956
  triggerVariant = "default"
2811
2957
  }) {
2812
- return /* @__PURE__ */ jsx8(
2958
+ return /* @__PURE__ */ jsx9(
2813
2959
  IssueManagerProviderActionMenu,
2814
2960
  {
2815
2961
  controller,
2816
2962
  disabled,
2817
- icon: /* @__PURE__ */ jsx8(AgentSessionsIcon2, { size: 16 }),
2963
+ icon: /* @__PURE__ */ jsx9(AgentSessionsIcon2, { size: 16 }),
2818
2964
  label: controller.copy.t("actions.askAgentToRun"),
2819
2965
  triggerClassName,
2820
2966
  triggerVariant,
@@ -2828,12 +2974,12 @@ function IssueManagerBreakdownActionTrigger({
2828
2974
  triggerClassName,
2829
2975
  triggerVariant = "default"
2830
2976
  }) {
2831
- return /* @__PURE__ */ jsx8(
2977
+ return /* @__PURE__ */ jsx9(
2832
2978
  IssueManagerProviderActionMenu,
2833
2979
  {
2834
2980
  controller,
2835
2981
  disabled,
2836
- icon: /* @__PURE__ */ jsx8(IssueIcon, { size: 16 }),
2982
+ icon: /* @__PURE__ */ jsx9(IssueIcon, { size: 16 }),
2837
2983
  label: controller.copy.t("actions.askAgentToBreakdown"),
2838
2984
  triggerClassName,
2839
2985
  triggerVariant,
@@ -2854,9 +3000,9 @@ function IssueManagerProviderActionMenu({
2854
3000
  }) {
2855
3001
  const providerOptions = controller.providerOptions;
2856
3002
  const selectedProvider = controller.nodeState.selectedAgentProvider.trim();
2857
- return /* @__PURE__ */ jsxs7(DropdownMenu, { children: [
2858
- /* @__PURE__ */ jsx8(DropdownMenuTrigger, { asChild: true, disabled, children: /* @__PURE__ */ jsxs7(
2859
- Button5,
3003
+ return /* @__PURE__ */ jsxs8(DropdownMenu, { children: [
3004
+ /* @__PURE__ */ jsx9(DropdownMenuTrigger, { asChild: true, disabled, children: /* @__PURE__ */ jsxs8(
3005
+ Button6,
2860
3006
  {
2861
3007
  className: cn4(
2862
3008
  "min-w-0",
@@ -2870,8 +3016,8 @@ function IssueManagerProviderActionMenu({
2870
3016
  variant: triggerButtonVariant,
2871
3017
  children: [
2872
3018
  icon,
2873
- /* @__PURE__ */ jsx8("span", { className: "truncate", children: label }),
2874
- /* @__PURE__ */ jsx8(
3019
+ /* @__PURE__ */ jsx9("span", { className: "truncate", children: label }),
3020
+ /* @__PURE__ */ jsx9(
2875
3021
  ChevronDownIcon,
2876
3022
  {
2877
3023
  className: "shrink-0 transition-transform duration-200",
@@ -2882,13 +3028,13 @@ function IssueManagerProviderActionMenu({
2882
3028
  ]
2883
3029
  }
2884
3030
  ) }),
2885
- /* @__PURE__ */ jsx8(
3031
+ /* @__PURE__ */ jsx9(
2886
3032
  DropdownMenuContent,
2887
3033
  {
2888
3034
  align: "end",
2889
3035
  className: "w-[220px] min-w-[220px]",
2890
3036
  style: { zIndex: "var(--z-panel-popover)" },
2891
- children: providerOptions.length === 0 ? /* @__PURE__ */ jsx8(DropdownMenuItem, { className: providerMenuItemClassName, disabled: true, children: controller.copy.t("messages.noAgentProviders") }) : providerOptions.map((option) => /* @__PURE__ */ jsx8(
3037
+ children: providerOptions.length === 0 ? /* @__PURE__ */ jsx9(DropdownMenuItem, { className: providerMenuItemClassName, disabled: true, children: controller.copy.t("messages.noAgentProviders") }) : providerOptions.map((option) => /* @__PURE__ */ jsx9(
2892
3038
  DropdownMenuItem,
2893
3039
  {
2894
3040
  className: providerMenuItemClassName,
@@ -2897,16 +3043,16 @@ function IssueManagerProviderActionMenu({
2897
3043
  onSelect: () => {
2898
3044
  void onSelectProvider(option.provider);
2899
3045
  },
2900
- children: /* @__PURE__ */ jsxs7("span", { className: "flex min-w-0 flex-1 items-center gap-2 pr-1", children: [
2901
- /* @__PURE__ */ jsx8(
3046
+ children: /* @__PURE__ */ jsxs8("span", { className: "flex min-w-0 flex-1 items-center gap-2 pr-1", children: [
3047
+ /* @__PURE__ */ jsx9(
2902
3048
  IssueManagerAgentProviderIcon,
2903
3049
  {
2904
- fallbackIcon: /* @__PURE__ */ jsx8(AgentSessionsIcon2, { "aria-hidden": true, size: 15 }),
3050
+ fallbackIcon: /* @__PURE__ */ jsx9(AgentSessionsIcon2, { "aria-hidden": true, size: 15 }),
2905
3051
  iconUrl: option.iconUrl
2906
3052
  }
2907
3053
  ),
2908
- /* @__PURE__ */ jsx8("span", { className: "min-w-0 flex-1 truncate", children: option.label }),
2909
- option.provider === selectedProvider ? /* @__PURE__ */ jsx8(
3054
+ /* @__PURE__ */ jsx9("span", { className: "min-w-0 flex-1 truncate", children: option.label }),
3055
+ option.provider === selectedProvider ? /* @__PURE__ */ jsx9(
2910
3056
  CheckIcon,
2911
3057
  {
2912
3058
  className: providerMenuItemCheckClassName,
@@ -2927,9 +3073,9 @@ function IssueManagerAgentProviderIcon({
2927
3073
  }) {
2928
3074
  const normalizedIconUrl = iconUrl?.trim();
2929
3075
  if (!normalizedIconUrl) {
2930
- return /* @__PURE__ */ jsx8(Fragment, { children: fallbackIcon });
3076
+ return /* @__PURE__ */ jsx9(Fragment, { children: fallbackIcon });
2931
3077
  }
2932
- return /* @__PURE__ */ jsx8(
3078
+ return /* @__PURE__ */ jsx9(
2933
3079
  "img",
2934
3080
  {
2935
3081
  alt: "",
@@ -2949,7 +3095,7 @@ function IssueManagerExecutionDirectoryTrigger({
2949
3095
  if (!controller.canSelectExecutionDirectory) {
2950
3096
  return null;
2951
3097
  }
2952
- return /* @__PURE__ */ jsx8(
3098
+ return /* @__PURE__ */ jsx9(
2953
3099
  WorkspaceUserProjectSelect,
2954
3100
  {
2955
3101
  classNames: {
@@ -3007,7 +3153,7 @@ function isIssueManagerRunControlDisabled(input) {
3007
3153
  }
3008
3154
 
3009
3155
  // src/ui/internal/shell/IssueManagerBottomBar.tsx
3010
- import { jsx as jsx9, jsxs as jsxs8 } from "react/jsx-runtime";
3156
+ import { jsx as jsx10, jsxs as jsxs9 } from "react/jsx-runtime";
3011
3157
  function IssueManagerBottomBar({
3012
3158
  controller,
3013
3159
  isNarrowLayout,
@@ -3022,7 +3168,7 @@ function IssueManagerBottomBar({
3022
3168
  selectedIssueStatus: selectedIssue.status,
3023
3169
  selectedTaskStatus: null
3024
3170
  });
3025
- return /* @__PURE__ */ jsx9("div", { className: "border-t border-[var(--border-1)] bg-transparent px-6 py-4 backdrop-blur", children: /* @__PURE__ */ jsxs8(
3171
+ return /* @__PURE__ */ jsx10("div", { className: "border-t border-[var(--border-1)] bg-transparent px-6 py-4 backdrop-blur", children: /* @__PURE__ */ jsxs9(
3026
3172
  "div",
3027
3173
  {
3028
3174
  className: cn5(
@@ -3030,7 +3176,7 @@ function IssueManagerBottomBar({
3030
3176
  isNarrowLayout ? "flex-wrap items-center justify-end" : "items-center justify-end"
3031
3177
  ),
3032
3178
  children: [
3033
- /* @__PURE__ */ jsx9(
3179
+ /* @__PURE__ */ jsx10(
3034
3180
  IssueManagerExecutionDirectoryTrigger,
3035
3181
  {
3036
3182
  className: "mr-auto min-w-0 max-w-[240px] justify-start overflow-hidden",
@@ -3038,8 +3184,8 @@ function IssueManagerBottomBar({
3038
3184
  disabled: runControlsDisabled
3039
3185
  }
3040
3186
  ),
3041
- /* @__PURE__ */ jsxs8("div", { className: "flex shrink-0 flex-nowrap items-center justify-end gap-3", children: [
3042
- /* @__PURE__ */ jsx9(
3187
+ /* @__PURE__ */ jsxs9("div", { className: "flex shrink-0 flex-nowrap items-center justify-end gap-3", children: [
3188
+ /* @__PURE__ */ jsx10(
3043
3189
  IssueManagerBreakdownActionTrigger,
3044
3190
  {
3045
3191
  controller,
@@ -3047,7 +3193,7 @@ function IssueManagerBottomBar({
3047
3193
  triggerVariant: "button"
3048
3194
  }
3049
3195
  ),
3050
- /* @__PURE__ */ jsx9(
3196
+ /* @__PURE__ */ jsx10(
3051
3197
  IssueManagerRunActionTrigger,
3052
3198
  {
3053
3199
  controller,
@@ -3055,8 +3201,8 @@ function IssueManagerBottomBar({
3055
3201
  triggerVariant: "button"
3056
3202
  }
3057
3203
  ),
3058
- controller.canInviteCollaborators ? /* @__PURE__ */ jsx9(
3059
- Button6,
3204
+ controller.canInviteCollaborators ? /* @__PURE__ */ jsx10(
3205
+ Button7,
3060
3206
  {
3061
3207
  className: "px-4",
3062
3208
  disabled: !selectedIssue,
@@ -3076,12 +3222,12 @@ function IssueManagerBottomBar({
3076
3222
 
3077
3223
  // src/ui/internal/shell/IssueManagerFloatingNotice.tsx
3078
3224
  import { ToastProvider, ToastRoot, ToastTitle } from "@tutti-os/ui-system";
3079
- import { jsx as jsx10 } from "react/jsx-runtime";
3225
+ import { jsx as jsx11 } from "react/jsx-runtime";
3080
3226
  function IssueManagerFloatingNotice({
3081
3227
  notice
3082
3228
  }) {
3083
3229
  const variant = notice.tone === "destructive" ? "destructive" : "default";
3084
- return /* @__PURE__ */ jsx10(ToastProvider, { children: /* @__PURE__ */ jsx10(
3230
+ return /* @__PURE__ */ jsx11(ToastProvider, { children: /* @__PURE__ */ jsx11(
3085
3231
  ToastRoot,
3086
3232
  {
3087
3233
  open: true,
@@ -3090,7 +3236,7 @@ function IssueManagerFloatingNotice({
3090
3236
  className: "z-30 w-fit max-w-[min(72vw,40rem)] px-4 py-3 shadow-lg",
3091
3237
  nodeInsetTopPx: 16,
3092
3238
  variant,
3093
- children: /* @__PURE__ */ jsx10(ToastTitle, { className: "whitespace-normal [overflow-wrap:anywhere]", children: notice.title })
3239
+ children: /* @__PURE__ */ jsx11(ToastTitle, { className: "whitespace-normal [overflow-wrap:anywhere]", children: notice.title })
3094
3240
  },
3095
3241
  notice.id
3096
3242
  ) });
@@ -3103,7 +3249,7 @@ import { cn as cn7 } from "@tutti-os/ui-system";
3103
3249
  import { useComposedInputValue as useComposedInputValue2 } from "@tutti-os/ui-react-hooks";
3104
3250
  import {
3105
3251
  Badge as Badge4,
3106
- Button as Button7,
3252
+ Button as Button8,
3107
3253
  CloseIcon,
3108
3254
  FileCreateIcon as FileCreateIcon3,
3109
3255
  Input as Input2,
@@ -3175,7 +3321,7 @@ function mapIssueManagerStatusCounts(counts) {
3175
3321
  canceled: counts.canceled,
3176
3322
  completed: counts.completed,
3177
3323
  failed: counts.failed,
3178
- in_progress: 0,
3324
+ in_progress: counts.inProgress,
3179
3325
  not_started: counts.notStarted,
3180
3326
  pending_acceptance: counts.pendingAcceptance,
3181
3327
  running: counts.running
@@ -3194,7 +3340,7 @@ function resolveIssueManagerShellContentViewState(input) {
3194
3340
  }
3195
3341
 
3196
3342
  // src/ui/internal/shell/IssueManagerSidebarSections.tsx
3197
- import { jsx as jsx11, jsxs as jsxs9 } from "react/jsx-runtime";
3343
+ import { jsx as jsx12, jsxs as jsxs10 } from "react/jsx-runtime";
3198
3344
  function IssueManagerSidebarHeader({
3199
3345
  copy,
3200
3346
  issueSearchQuery,
@@ -3202,8 +3348,8 @@ function IssueManagerSidebarHeader({
3202
3348
  onIssueSearchUsage,
3203
3349
  onIssueSearchQueryChange
3204
3350
  }) {
3205
- return /* @__PURE__ */ jsx11("div", { className: "px-4 py-4", children: /* @__PURE__ */ jsxs9("div", { className: "flex items-center gap-2.5", children: [
3206
- /* @__PURE__ */ jsx11(
3351
+ return /* @__PURE__ */ jsx12("div", { className: "px-4 py-4", children: /* @__PURE__ */ jsxs10("div", { className: "flex items-center gap-2.5", children: [
3352
+ /* @__PURE__ */ jsx12(
3207
3353
  IssueManagerSearchField,
3208
3354
  {
3209
3355
  clearLabel: copy.t("actions.clearSearch"),
@@ -3213,8 +3359,8 @@ function IssueManagerSidebarHeader({
3213
3359
  onSearchUsage: onIssueSearchUsage
3214
3360
  }
3215
3361
  ),
3216
- /* @__PURE__ */ jsxs9(
3217
- Button7,
3362
+ /* @__PURE__ */ jsxs10(
3363
+ Button8,
3218
3364
  {
3219
3365
  className: "gap-2 px-3",
3220
3366
  size: "dialog",
@@ -3222,7 +3368,7 @@ function IssueManagerSidebarHeader({
3222
3368
  variant: "secondary",
3223
3369
  onClick: onCreateIssue,
3224
3370
  children: [
3225
- /* @__PURE__ */ jsx11(FileCreateIcon3, { size: 16 }),
3371
+ /* @__PURE__ */ jsx12(FileCreateIcon3, { size: 16 }),
3226
3372
  copy.t("actions.createIssue")
3227
3373
  ]
3228
3374
  }
@@ -3235,7 +3381,7 @@ function IssueManagerSidebarStatusTabs({
3235
3381
  statusCounts,
3236
3382
  onIssueStatusFilterChange
3237
3383
  }) {
3238
- return /* @__PURE__ */ jsx11(
3384
+ return /* @__PURE__ */ jsx12(
3239
3385
  UnderlineTabs,
3240
3386
  {
3241
3387
  ariaLabel: copy.t("labels.status"),
@@ -3260,18 +3406,19 @@ function IssueManagerSidebarBody({
3260
3406
  onRetry,
3261
3407
  onSelectIssue
3262
3408
  }) {
3263
- return /* @__PURE__ */ jsx11(
3409
+ return /* @__PURE__ */ jsx12(
3264
3410
  ScrollArea3,
3265
3411
  {
3412
+ scrollbarMode: "native",
3266
3413
  className: cn6("min-h-0", isNarrowLayout ? "flex-none" : "h-full flex-1"),
3267
- children: /* @__PURE__ */ jsx11(
3414
+ children: /* @__PURE__ */ jsx12(
3268
3415
  "div",
3269
3416
  {
3270
3417
  className: cn6(
3271
3418
  "flex min-h-full flex-col gap-2.5 px-4 pt-1.5 pb-4",
3272
3419
  isNarrowLayout ? "min-h-0" : "h-full"
3273
3420
  ),
3274
- children: sidebarViewState.kind === "loading" ? /* @__PURE__ */ jsx11(IssueManagerSidebarLoadingState, { isNarrowLayout }) : sidebarViewState.kind === "error" ? /* @__PURE__ */ jsx11(
3421
+ children: sidebarViewState.kind === "loading" ? /* @__PURE__ */ jsx12(IssueManagerSidebarLoadingState, { isNarrowLayout }) : sidebarViewState.kind === "error" ? /* @__PURE__ */ jsx12(
3275
3422
  IssueManagerSidebarErrorState,
3276
3423
  {
3277
3424
  isNarrowLayout,
@@ -3279,14 +3426,14 @@ function IssueManagerSidebarBody({
3279
3426
  title: sidebarViewState.title,
3280
3427
  onRetry
3281
3428
  }
3282
- ) : sidebarViewState.kind === "empty" ? /* @__PURE__ */ jsx11(
3429
+ ) : sidebarViewState.kind === "empty" ? /* @__PURE__ */ jsx12(
3283
3430
  IssueManagerSidebarEmptyState,
3284
3431
  {
3285
3432
  body: sidebarViewState.body,
3286
3433
  isNarrowLayout,
3287
3434
  title: sidebarViewState.title
3288
3435
  }
3289
- ) : /* @__PURE__ */ jsx11(
3436
+ ) : /* @__PURE__ */ jsx12(
3290
3437
  IssueManagerSidebarIssueList,
3291
3438
  {
3292
3439
  copy,
@@ -3310,7 +3457,7 @@ function IssueManagerSidebarStandalonePane({
3310
3457
  onRetry
3311
3458
  }) {
3312
3459
  if (kind === "error" && retryLabel) {
3313
- return /* @__PURE__ */ jsx11(
3460
+ return /* @__PURE__ */ jsx12(
3314
3461
  IssueManagerSidebarErrorState,
3315
3462
  {
3316
3463
  isNarrowLayout,
@@ -3320,7 +3467,7 @@ function IssueManagerSidebarStandalonePane({
3320
3467
  }
3321
3468
  );
3322
3469
  }
3323
- return /* @__PURE__ */ jsx11(
3470
+ return /* @__PURE__ */ jsx12(
3324
3471
  IssueManagerSidebarEmptyState,
3325
3472
  {
3326
3473
  body: body ?? "",
@@ -3337,13 +3484,13 @@ function IssueManagerSearchField({
3337
3484
  value
3338
3485
  }) {
3339
3486
  const searchInput = useComposedInputValue2({ onCommit: onChange, value });
3340
- return /* @__PURE__ */ jsxs9(
3487
+ return /* @__PURE__ */ jsxs10(
3341
3488
  "div",
3342
3489
  {
3343
3490
  className: "relative min-w-0 flex-1",
3344
3491
  "data-has-value": searchInput.value ? "true" : "false",
3345
3492
  children: [
3346
- /* @__PURE__ */ jsx11(
3493
+ /* @__PURE__ */ jsx12(
3347
3494
  Input2,
3348
3495
  {
3349
3496
  "aria-label": placeholder,
@@ -3364,7 +3511,7 @@ function IssueManagerSearchField({
3364
3511
  onCompositionStart: searchInput.onCompositionStart
3365
3512
  }
3366
3513
  ),
3367
- searchInput.value ? /* @__PURE__ */ jsx11(
3514
+ searchInput.value ? /* @__PURE__ */ jsx12(
3368
3515
  "button",
3369
3516
  {
3370
3517
  "aria-label": clearLabel,
@@ -3372,7 +3519,7 @@ function IssueManagerSearchField({
3372
3519
  type: "button",
3373
3520
  onClick: searchInput.clearValue,
3374
3521
  onMouseDown: (event) => event.preventDefault(),
3375
- children: /* @__PURE__ */ jsx11(CloseIcon, { className: "size-3.5" })
3522
+ children: /* @__PURE__ */ jsx12(CloseIcon, { className: "size-3.5" })
3376
3523
  }
3377
3524
  ) : null
3378
3525
  ]
@@ -3386,14 +3533,14 @@ function IssueManagerSidebarIssueList({
3386
3533
  selectedIssueId,
3387
3534
  onSelectIssue
3388
3535
  }) {
3389
- return /* @__PURE__ */ jsx11(
3536
+ return /* @__PURE__ */ jsx12(
3390
3537
  "div",
3391
3538
  {
3392
3539
  className: cn6(
3393
3540
  "flex gap-2.5",
3394
3541
  isNarrowLayout ? "flex-row flex-nowrap items-start overflow-x-auto overflow-y-hidden [scrollbar-width:none] [&::-webkit-scrollbar]:hidden" : "flex-col"
3395
3542
  ),
3396
- children: issues.map((issue) => /* @__PURE__ */ jsx11(
3543
+ children: issues.map((issue) => /* @__PURE__ */ jsx12(
3397
3544
  IssueManagerSidebarItem,
3398
3545
  {
3399
3546
  copy,
@@ -3414,7 +3561,7 @@ function IssueManagerSidebarItem({
3414
3561
  onSelect,
3415
3562
  selected
3416
3563
  }) {
3417
- return /* @__PURE__ */ jsxs9(
3564
+ return /* @__PURE__ */ jsxs10(
3418
3565
  "button",
3419
3566
  {
3420
3567
  className: cn6(
@@ -3425,7 +3572,7 @@ function IssueManagerSidebarItem({
3425
3572
  type: "button",
3426
3573
  onClick: () => onSelect(issue.issueId),
3427
3574
  children: [
3428
- /* @__PURE__ */ jsx11(
3575
+ /* @__PURE__ */ jsx12(
3429
3576
  Badge4,
3430
3577
  {
3431
3578
  className: "absolute top-3.5 right-3.5",
@@ -3433,11 +3580,11 @@ function IssueManagerSidebarItem({
3433
3580
  children: resolveIssueManagerStatusLabel(copy, issue.status)
3434
3581
  }
3435
3582
  ),
3436
- /* @__PURE__ */ jsxs9("div", { className: "min-w-0 space-y-2", children: [
3437
- /* @__PURE__ */ jsx11("p", { className: "pr-28 text-[11px] leading-[1.55] text-[var(--text-secondary)]", children: formatIssueManagerDate(issue.updatedAtUnix ?? issue.createdAtUnix) }),
3438
- /* @__PURE__ */ jsx11("p", { className: "line-clamp-4 text-[13px] font-medium leading-[1.35rem] text-[var(--text-primary)]", children: issue.title })
3583
+ /* @__PURE__ */ jsxs10("div", { className: "min-w-0 space-y-2", children: [
3584
+ /* @__PURE__ */ jsx12("p", { className: "pr-28 text-[11px] leading-[1.55] text-[var(--text-secondary)]", children: formatIssueManagerDate(issue.updatedAtUnix ?? issue.createdAtUnix) }),
3585
+ /* @__PURE__ */ jsx12("p", { className: "line-clamp-4 text-[13px] font-medium leading-[1.35rem] text-[var(--text-primary)]", children: issue.title })
3439
3586
  ] }),
3440
- /* @__PURE__ */ jsx11("div", { className: "mt-2 text-[11px] leading-[1.55] text-[var(--text-secondary)]", children: copy.t("labels.taskCount", { count: issue.taskCount ?? 0 }) })
3587
+ /* @__PURE__ */ jsx12("div", { className: "mt-2 text-[11px] leading-[1.55] text-[var(--text-secondary)]", children: copy.t("labels.taskCount", { count: issue.taskCount ?? 0 }) })
3441
3588
  ]
3442
3589
  }
3443
3590
  );
@@ -3445,7 +3592,7 @@ function IssueManagerSidebarItem({
3445
3592
  function IssueManagerSidebarLoadingState({
3446
3593
  isNarrowLayout
3447
3594
  }) {
3448
- return /* @__PURE__ */ jsx11(
3595
+ return /* @__PURE__ */ jsx12(
3449
3596
  "div",
3450
3597
  {
3451
3598
  "aria-hidden": "true",
@@ -3453,7 +3600,7 @@ function IssueManagerSidebarLoadingState({
3453
3600
  "gap-2.5",
3454
3601
  isNarrowLayout ? "flex flex-row flex-nowrap overflow-x-hidden" : "grid"
3455
3602
  ),
3456
- children: Array.from({ length: 4 }, (_, index) => /* @__PURE__ */ jsxs9(
3603
+ children: Array.from({ length: 4 }, (_, index) => /* @__PURE__ */ jsxs10(
3457
3604
  "div",
3458
3605
  {
3459
3606
  className: cn6(
@@ -3461,9 +3608,9 @@ function IssueManagerSidebarLoadingState({
3461
3608
  isNarrowLayout && "h-24 max-h-24 min-h-24 w-[clamp(220px,58vw,320px)] flex-[0_0_clamp(220px,58vw,320px)]"
3462
3609
  ),
3463
3610
  children: [
3464
- /* @__PURE__ */ jsx11("div", { className: "h-3.5 w-20 rounded-full bg-[var(--transparency-block)]" }),
3465
- /* @__PURE__ */ jsx11("div", { className: "mt-3 h-4 w-4/5 rounded-full bg-[var(--transparency-block)]" }),
3466
- /* @__PURE__ */ jsx11("div", { className: "mt-4 h-3.5 w-24 rounded-full bg-[var(--transparency-block)]" })
3611
+ /* @__PURE__ */ jsx12("div", { className: "h-3.5 w-20 rounded-full bg-[var(--transparency-block)]" }),
3612
+ /* @__PURE__ */ jsx12("div", { className: "mt-3 h-4 w-4/5 rounded-full bg-[var(--transparency-block)]" }),
3613
+ /* @__PURE__ */ jsx12("div", { className: "mt-4 h-3.5 w-24 rounded-full bg-[var(--transparency-block)]" })
3467
3614
  ]
3468
3615
  },
3469
3616
  index
@@ -3476,14 +3623,14 @@ function IssueManagerSidebarEmptyState({
3476
3623
  title,
3477
3624
  tone = "default"
3478
3625
  }) {
3479
- return /* @__PURE__ */ jsx11(
3626
+ return /* @__PURE__ */ jsx12(
3480
3627
  "div",
3481
3628
  {
3482
3629
  className: cn6(
3483
3630
  "relative flex flex-1 flex-col items-center justify-center self-stretch overflow-hidden p-0 text-center",
3484
3631
  isNarrowLayout ? "h-24 max-h-24 min-h-24 w-full flex-[0_0_100%]" : "min-h-full"
3485
3632
  ),
3486
- children: /* @__PURE__ */ jsx11(
3633
+ children: /* @__PURE__ */ jsx12(
3487
3634
  "p",
3488
3635
  {
3489
3636
  className: cn6(
@@ -3502,7 +3649,7 @@ function IssueManagerSidebarErrorState({
3502
3649
  title,
3503
3650
  onRetry
3504
3651
  }) {
3505
- return /* @__PURE__ */ jsxs9(
3652
+ return /* @__PURE__ */ jsxs10(
3506
3653
  "div",
3507
3654
  {
3508
3655
  className: cn6(
@@ -3510,9 +3657,9 @@ function IssueManagerSidebarErrorState({
3510
3657
  isNarrowLayout ? "h-24 max-h-24 min-h-24 w-full flex-[0_0_100%]" : "min-h-full"
3511
3658
  ),
3512
3659
  children: [
3513
- /* @__PURE__ */ jsx11("p", { className: "text-[13px] font-semibold leading-5 text-[var(--state-danger)]", children: title }),
3514
- /* @__PURE__ */ jsx11(
3515
- Button7,
3660
+ /* @__PURE__ */ jsx12("p", { className: "text-[13px] font-semibold leading-5 text-[var(--state-danger)]", children: title }),
3661
+ /* @__PURE__ */ jsx12(
3662
+ Button8,
3516
3663
  {
3517
3664
  className: "mt-3",
3518
3665
  size: "sm",
@@ -3551,7 +3698,7 @@ function resolveIssueManagerSidebarPresentationState(input) {
3551
3698
  }
3552
3699
 
3553
3700
  // src/ui/internal/shell/IssueManagerSidebar.tsx
3554
- import { jsx as jsx12, jsxs as jsxs10 } from "react/jsx-runtime";
3701
+ import { jsx as jsx13, jsxs as jsxs11 } from "react/jsx-runtime";
3555
3702
  function IssueManagerSidebar({
3556
3703
  controller,
3557
3704
  isCollapsed,
@@ -3565,7 +3712,7 @@ function IssueManagerSidebar({
3565
3712
  showStandaloneState,
3566
3713
  sidebarViewState
3567
3714
  });
3568
- return /* @__PURE__ */ jsxs10(
3715
+ return /* @__PURE__ */ jsxs11(
3569
3716
  "aside",
3570
3717
  {
3571
3718
  "aria-hidden": isCollapsed ? "true" : void 0,
@@ -3576,7 +3723,7 @@ function IssueManagerSidebar({
3576
3723
  ),
3577
3724
  inert: isCollapsed ? true : void 0,
3578
3725
  children: [
3579
- /* @__PURE__ */ jsx12(
3726
+ /* @__PURE__ */ jsx13(
3580
3727
  IssueManagerSidebarHeader,
3581
3728
  {
3582
3729
  copy,
@@ -3586,7 +3733,7 @@ function IssueManagerSidebar({
3586
3733
  onIssueSearchQueryChange: controller.setIssueSearchQuery
3587
3734
  }
3588
3735
  ),
3589
- /* @__PURE__ */ jsx12(
3736
+ /* @__PURE__ */ jsx13(
3590
3737
  IssueManagerSidebarStatusTabs,
3591
3738
  {
3592
3739
  copy,
@@ -3595,15 +3742,15 @@ function IssueManagerSidebar({
3595
3742
  onIssueStatusFilterChange: controller.setIssueStatusFilter
3596
3743
  }
3597
3744
  ),
3598
- /* @__PURE__ */ jsx12("div", { "aria-hidden": "true", className: "h-2.5 flex-none" }),
3599
- /* @__PURE__ */ jsx12(
3745
+ /* @__PURE__ */ jsx13("div", { "aria-hidden": "true", className: "h-2.5 flex-none" }),
3746
+ /* @__PURE__ */ jsx13(
3600
3747
  "div",
3601
3748
  {
3602
3749
  className: cn7(
3603
3750
  "relative flex min-h-0 flex-col",
3604
3751
  isNarrowLayout ? "flex-none" : "flex-1"
3605
3752
  ),
3606
- children: presentation.kind !== "none" ? /* @__PURE__ */ jsx12("div", { className: "flex h-full min-h-0 items-center justify-center px-4 pt-1.5 pb-4", children: /* @__PURE__ */ jsx12(
3753
+ children: presentation.kind !== "none" ? /* @__PURE__ */ jsx13("div", { className: "flex h-full min-h-0 items-center justify-center px-4 pt-1.5 pb-4", children: /* @__PURE__ */ jsx13(
3607
3754
  IssueManagerSidebarStandalonePane,
3608
3755
  {
3609
3756
  body: presentation.kind === "empty" ? presentation.body : void 0,
@@ -3613,7 +3760,7 @@ function IssueManagerSidebar({
3613
3760
  title: presentation.title,
3614
3761
  onRetry: () => controller.refreshAll()
3615
3762
  }
3616
- ) }) : /* @__PURE__ */ jsx12(
3763
+ ) }) : /* @__PURE__ */ jsx13(
3617
3764
  IssueManagerSidebarBody,
3618
3765
  {
3619
3766
  copy,
@@ -3632,8 +3779,8 @@ function IssueManagerSidebar({
3632
3779
  }
3633
3780
 
3634
3781
  // src/ui/internal/shell/IssueManagerTaskComposerPane.tsx
3635
- import { Button as Button8 } from "@tutti-os/ui-system";
3636
- import { jsx as jsx13, jsxs as jsxs11 } from "react/jsx-runtime";
3782
+ import { Button as Button9 } from "@tutti-os/ui-system";
3783
+ import { jsx as jsx14, jsxs as jsxs12 } from "react/jsx-runtime";
3637
3784
  function IssueManagerTaskComposerPane({
3638
3785
  controller,
3639
3786
  onCancel,
@@ -3641,23 +3788,23 @@ function IssueManagerTaskComposerPane({
3641
3788
  }) {
3642
3789
  const copy = controller.copy;
3643
3790
  const isTaskTitleMissing = controller.taskDraft.title.trim().length === 0;
3644
- return /* @__PURE__ */ jsxs11("div", { className: "flex h-full min-h-0 flex-col overflow-hidden", children: [
3645
- /* @__PURE__ */ jsx13("div", { className: "flex min-h-0 flex-1 flex-col gap-[14px] overflow-y-auto px-7 py-8", children: /* @__PURE__ */ jsxs11("div", { className: "flex w-full min-w-0 flex-col gap-3", children: [
3646
- /* @__PURE__ */ jsx13(
3791
+ return /* @__PURE__ */ jsxs12("div", { className: "flex h-full min-h-0 flex-col overflow-hidden", children: [
3792
+ /* @__PURE__ */ jsx14("div", { className: "flex min-h-0 flex-1 flex-col gap-[14px] overflow-y-auto px-7 py-8", children: /* @__PURE__ */ jsxs12("div", { className: "flex w-full min-w-0 flex-col gap-3", children: [
3793
+ /* @__PURE__ */ jsx14(
3647
3794
  "div",
3648
3795
  {
3649
3796
  className: `${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay0ClassName}`,
3650
- children: /* @__PURE__ */ jsx13("h2", { className: "m-0 text-[15px] font-semibold leading-[1.35] text-[var(--text-primary)]", children: copy.t("actions.addSubtask") })
3797
+ children: /* @__PURE__ */ jsx14("h2", { className: "m-0 text-[15px] font-semibold leading-[1.35] text-[var(--text-primary)]", children: copy.t("actions.addSubtask") })
3651
3798
  }
3652
3799
  ),
3653
- /* @__PURE__ */ jsxs11("div", { className: "flex w-full min-w-0 flex-col gap-6", children: [
3654
- /* @__PURE__ */ jsxs11(
3800
+ /* @__PURE__ */ jsxs12("div", { className: "flex w-full min-w-0 flex-col gap-6", children: [
3801
+ /* @__PURE__ */ jsxs12(
3655
3802
  "label",
3656
3803
  {
3657
3804
  className: `flex w-full min-w-0 flex-col gap-2 text-[13px] font-semibold text-[var(--text-secondary)] ${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay1ClassName}`,
3658
3805
  children: [
3659
- /* @__PURE__ */ jsx13("span", { className: "leading-5", children: copy.t("labels.title") }),
3660
- /* @__PURE__ */ jsx13(
3806
+ /* @__PURE__ */ jsx14("span", { className: "leading-5", children: copy.t("labels.title") }),
3807
+ /* @__PURE__ */ jsx14(
3661
3808
  IssueManagerDraftTitleInput,
3662
3809
  {
3663
3810
  placeholder: copy.t("composer.subtaskTitlePlaceholder"),
@@ -3668,13 +3815,13 @@ function IssueManagerTaskComposerPane({
3668
3815
  ]
3669
3816
  }
3670
3817
  ),
3671
- /* @__PURE__ */ jsxs11(
3818
+ /* @__PURE__ */ jsxs12(
3672
3819
  "div",
3673
3820
  {
3674
3821
  className: `flex min-h-0 w-full min-w-0 flex-col gap-2 text-[13px] font-semibold text-[var(--text-secondary)] ${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay2ClassName}`,
3675
3822
  children: [
3676
- /* @__PURE__ */ jsx13("span", { className: "leading-5", children: copy.t("labels.requirementDescription") }),
3677
- /* @__PURE__ */ jsx13(
3823
+ /* @__PURE__ */ jsx14("span", { className: "leading-5", children: copy.t("labels.requirementDescription") }),
3824
+ /* @__PURE__ */ jsx14(
3678
3825
  IssueManagerRichTextTextarea,
3679
3826
  {
3680
3827
  controller,
@@ -3690,13 +3837,13 @@ function IssueManagerTaskComposerPane({
3690
3837
  )
3691
3838
  ] })
3692
3839
  ] }) }),
3693
- /* @__PURE__ */ jsx13(
3840
+ /* @__PURE__ */ jsx14(
3694
3841
  "div",
3695
3842
  {
3696
3843
  className: `shrink-0 border-t border-border-1 px-7 py-4 ${issueManagerEditorFooterFadeInClassName}`,
3697
- children: /* @__PURE__ */ jsxs11("div", { className: "flex items-center justify-end gap-3", children: [
3698
- /* @__PURE__ */ jsx13(
3699
- Button8,
3844
+ children: /* @__PURE__ */ jsxs12("div", { className: "flex items-center justify-end gap-3", children: [
3845
+ /* @__PURE__ */ jsx14(
3846
+ Button9,
3700
3847
  {
3701
3848
  size: "default",
3702
3849
  type: "button",
@@ -3705,8 +3852,8 @@ function IssueManagerTaskComposerPane({
3705
3852
  children: copy.t("actions.cancel")
3706
3853
  }
3707
3854
  ),
3708
- /* @__PURE__ */ jsx13(
3709
- Button8,
3855
+ /* @__PURE__ */ jsx14(
3856
+ Button9,
3710
3857
  {
3711
3858
  disabled: !selectedIssue || isTaskTitleMissing,
3712
3859
  size: "default",
@@ -3726,8 +3873,8 @@ import { ScrollArea as ScrollArea4, cn as cn8 } from "@tutti-os/ui-system";
3726
3873
 
3727
3874
  // src/ui/internal/shell/IssueManagerTaskDrawerSections.tsx
3728
3875
  import { useState as useState6 } from "react";
3729
- import { Badge as Badge5, Button as Button9, ConfirmationDialog as ConfirmationDialog2 } from "@tutti-os/ui-system";
3730
- import { Fragment as Fragment2, jsx as jsx14, jsxs as jsxs12 } from "react/jsx-runtime";
3876
+ import { Badge as Badge5, Button as Button10, ConfirmationDialog as ConfirmationDialog2 } from "@tutti-os/ui-system";
3877
+ import { Fragment as Fragment2, jsx as jsx15, jsxs as jsxs13 } from "react/jsx-runtime";
3731
3878
  function IssueManagerTaskDrawerHeader({
3732
3879
  controller,
3733
3880
  selectedTask,
@@ -3736,13 +3883,13 @@ function IssueManagerTaskDrawerHeader({
3736
3883
  const copy = controller.copy;
3737
3884
  const [deleteDialogOpen, setDeleteDialogOpen] = useState6(false);
3738
3885
  const [deleteBusy, setDeleteBusy] = useState6(false);
3739
- return /* @__PURE__ */ jsxs12(Fragment2, { children: [
3740
- /* @__PURE__ */ jsxs12("div", { className: "grid gap-3 px-6 py-7", children: [
3741
- /* @__PURE__ */ jsxs12("div", { className: "flex items-center justify-between gap-6", children: [
3742
- view.showTaskMetadata && selectedTask ? /* @__PURE__ */ jsx14(IssueManagerTitleTooltip, { title: view.title, children: /* @__PURE__ */ jsx14("h3", { className: "line-clamp-2 min-w-0 flex-1 whitespace-normal text-[15px] font-semibold leading-6 text-[var(--text-primary)] [overflow-wrap:anywhere]", children: view.title }) }) : /* @__PURE__ */ jsx14(IssueManagerTitleTooltip, { title: view.title, children: /* @__PURE__ */ jsx14("h3", { className: "line-clamp-2 min-w-0 flex-1 whitespace-normal text-[15px] font-semibold leading-[1.35] text-[var(--text-primary)] [overflow-wrap:anywhere]", children: view.title }) }),
3743
- /* @__PURE__ */ jsx14("div", { className: "flex shrink-0 items-center gap-2", children: view.showTaskActions && selectedTask ? /* @__PURE__ */ jsxs12(Fragment2, { children: [
3744
- /* @__PURE__ */ jsx14(
3745
- Button9,
3886
+ return /* @__PURE__ */ jsxs13(Fragment2, { children: [
3887
+ /* @__PURE__ */ jsxs13("div", { className: "grid gap-3 px-6 py-7", children: [
3888
+ /* @__PURE__ */ jsxs13("div", { className: "flex items-center justify-between gap-6", children: [
3889
+ view.showTaskMetadata && selectedTask ? /* @__PURE__ */ jsx15(IssueManagerTitleTooltip, { title: view.title, children: /* @__PURE__ */ jsx15("h3", { className: "line-clamp-2 min-w-0 flex-1 whitespace-normal text-[15px] font-semibold leading-6 text-[var(--text-primary)] [overflow-wrap:anywhere]", children: view.title }) }) : /* @__PURE__ */ jsx15(IssueManagerTitleTooltip, { title: view.title, children: /* @__PURE__ */ jsx15("h3", { className: "line-clamp-2 min-w-0 flex-1 whitespace-normal text-[15px] font-semibold leading-[1.35] text-[var(--text-primary)] [overflow-wrap:anywhere]", children: view.title }) }),
3890
+ /* @__PURE__ */ jsx15("div", { className: "flex shrink-0 items-center gap-2", children: view.showTaskActions && selectedTask ? /* @__PURE__ */ jsxs13(Fragment2, { children: [
3891
+ /* @__PURE__ */ jsx15(
3892
+ Button10,
3746
3893
  {
3747
3894
  type: "button",
3748
3895
  variant: "ghost",
@@ -3750,8 +3897,8 @@ function IssueManagerTaskDrawerHeader({
3750
3897
  children: copy.t("actions.edit")
3751
3898
  }
3752
3899
  ),
3753
- /* @__PURE__ */ jsx14(
3754
- Button9,
3900
+ /* @__PURE__ */ jsx15(
3901
+ Button10,
3755
3902
  {
3756
3903
  className: "text-[var(--state-danger)] hover:bg-[var(--on-danger)] hover:text-[var(--state-danger)]",
3757
3904
  type: "button",
@@ -3762,24 +3909,24 @@ function IssueManagerTaskDrawerHeader({
3762
3909
  )
3763
3910
  ] }) : null })
3764
3911
  ] }),
3765
- view.showTaskMetadata && selectedTask ? /* @__PURE__ */ jsxs12("div", { className: "grid gap-2", children: [
3766
- /* @__PURE__ */ jsx14(
3912
+ view.showTaskMetadata && selectedTask ? /* @__PURE__ */ jsxs13("div", { className: "grid gap-2", children: [
3913
+ /* @__PURE__ */ jsx15(
3767
3914
  IssueManagerTaskMetadataRow,
3768
3915
  {
3769
3916
  copy,
3770
3917
  selectedTask
3771
3918
  }
3772
3919
  ),
3773
- selectedTask.status === "pending_acceptance" ? /* @__PURE__ */ jsx14(IssueManagerTaskAcceptanceCard, { controller }) : null
3920
+ selectedTask.status === "pending_acceptance" ? /* @__PURE__ */ jsx15(IssueManagerTaskAcceptanceCard, { controller }) : null
3774
3921
  ] }) : null
3775
3922
  ] }),
3776
- selectedTask ? /* @__PURE__ */ jsx14(
3923
+ selectedTask ? /* @__PURE__ */ jsx15(
3777
3924
  ConfirmationDialog2,
3778
3925
  {
3779
3926
  cancelLabel: copy.t("actions.cancel"),
3780
3927
  confirmBusy: deleteBusy,
3781
3928
  confirmLabel: copy.t("actions.delete"),
3782
- description: /* @__PURE__ */ jsx14("span", { className: "block max-w-full whitespace-normal [overflow-wrap:anywhere]", children: selectedTask.title }),
3929
+ description: /* @__PURE__ */ jsx15("span", { className: "block max-w-full whitespace-normal [overflow-wrap:anywhere]", children: selectedTask.title }),
3783
3930
  open: deleteDialogOpen,
3784
3931
  title: copy.t("confirmations.deleteTask"),
3785
3932
  tone: "destructive",
@@ -3799,70 +3946,36 @@ function IssueManagerTaskMetadataRow({
3799
3946
  copy,
3800
3947
  selectedTask
3801
3948
  }) {
3802
- return /* @__PURE__ */ jsxs12("div", { className: "flex flex-wrap items-center gap-x-2 gap-y-2 text-[11px] font-normal leading-[1.3] text-[var(--text-secondary)]", children: [
3803
- /* @__PURE__ */ jsx14(Badge5, { variant: issueManagerStatusBadgeVariant(selectedTask.status), children: resolveIssueManagerStatusLabel(copy, selectedTask.status) }),
3804
- /* @__PURE__ */ jsx14(
3949
+ return /* @__PURE__ */ jsxs13("div", { className: "flex flex-wrap items-center gap-x-2 gap-y-2 text-[11px] font-normal leading-[1.3] text-[var(--text-secondary)]", children: [
3950
+ /* @__PURE__ */ jsx15(Badge5, { variant: issueManagerStatusBadgeVariant(selectedTask.status), children: resolveIssueManagerStatusLabel(copy, selectedTask.status) }),
3951
+ /* @__PURE__ */ jsx15(
3805
3952
  "span",
3806
3953
  {
3807
3954
  "aria-hidden": "true",
3808
3955
  className: "h-4 w-px shrink-0 bg-[var(--line-2)]"
3809
3956
  }
3810
3957
  ),
3811
- /* @__PURE__ */ jsxs12("span", { className: "text-[11px] font-normal leading-[1.3]", children: [
3958
+ /* @__PURE__ */ jsxs13("span", { className: "text-[11px] font-normal leading-[1.3]", children: [
3812
3959
  copy.t("labels.creator"),
3813
3960
  " ",
3814
3961
  resolveTaskCreatorLabel(selectedTask)
3815
3962
  ] }),
3816
- /* @__PURE__ */ jsx14(
3963
+ /* @__PURE__ */ jsx15(
3817
3964
  "span",
3818
3965
  {
3819
3966
  "aria-hidden": "true",
3820
3967
  className: "h-4 w-px shrink-0 bg-[var(--line-2)]"
3821
3968
  }
3822
3969
  ),
3823
- /* @__PURE__ */ jsxs12("span", { className: "text-[11px] font-normal leading-[1.3]", children: [
3970
+ /* @__PURE__ */ jsxs13("span", { className: "text-[11px] font-normal leading-[1.3]", children: [
3824
3971
  copy.t("labels.createdAt"),
3825
3972
  " ",
3826
3973
  formatIssueManagerTimestamp(selectedTask.createdAtUnix) || "-"
3827
3974
  ] })
3828
3975
  ] });
3829
3976
  }
3830
- function IssueManagerTaskAcceptanceCard({
3831
- controller
3832
- }) {
3833
- const copy = controller.copy;
3834
- return /* @__PURE__ */ jsxs12("div", { className: "grid gap-2 rounded-md bg-[var(--transparency-block)] px-3 py-2", children: [
3835
- /* @__PURE__ */ jsxs12("div", { className: "min-w-0 text-[11px] font-normal leading-[1.45] text-[var(--text-secondary)] [overflow-wrap:anywhere]", children: [
3836
- /* @__PURE__ */ jsx14("span", { className: "font-semibold text-[var(--text-primary)]", children: copy.t("labels.taskAcceptance") }),
3837
- /* @__PURE__ */ jsx14("span", { className: "mx-1 text-[var(--text-tertiary)]", children: "\xB7" }),
3838
- /* @__PURE__ */ jsx14("span", { children: copy.t("messages.taskAcceptanceHint") })
3839
- ] }),
3840
- /* @__PURE__ */ jsxs12("div", { className: "flex items-center justify-end gap-2", children: [
3841
- /* @__PURE__ */ jsx14(
3842
- Button9,
3843
- {
3844
- className: "h-7 px-2 text-[11px] text-[var(--state-danger)] hover:bg-[var(--on-danger)] hover:text-[var(--state-danger)]",
3845
- type: "button",
3846
- variant: "ghost",
3847
- onClick: () => void controller.setSelectedTaskStatus("not_started"),
3848
- children: copy.t("actions.rejectTask")
3849
- }
3850
- ),
3851
- /* @__PURE__ */ jsx14(
3852
- Button9,
3853
- {
3854
- className: "h-7 px-2.5 text-[11px]",
3855
- type: "button",
3856
- variant: "secondary",
3857
- onClick: () => void controller.setSelectedTaskStatus("completed"),
3858
- children: copy.t("actions.acceptTask")
3859
- }
3860
- )
3861
- ] })
3862
- ] });
3863
- }
3864
3977
  function IssueManagerTaskDrawerLoadingBody() {
3865
- return /* @__PURE__ */ jsx14(IssueManagerTaskDrawerLoadingState, {});
3978
+ return /* @__PURE__ */ jsx15(IssueManagerTaskDrawerLoadingState, {});
3866
3979
  }
3867
3980
  function IssueManagerTaskDrawerBody({
3868
3981
  controller,
@@ -3871,10 +3984,10 @@ function IssueManagerTaskDrawerBody({
3871
3984
  view
3872
3985
  }) {
3873
3986
  if (view.bodyKind === "loading") {
3874
- return /* @__PURE__ */ jsx14(IssueManagerTaskDrawerLoadingBody, {});
3987
+ return /* @__PURE__ */ jsx15(IssueManagerTaskDrawerLoadingBody, {});
3875
3988
  }
3876
3989
  if (view.bodyKind === "edit") {
3877
- return /* @__PURE__ */ jsx14(
3990
+ return /* @__PURE__ */ jsx15(
3878
3991
  IssueManagerTaskDrawerEditBody,
3879
3992
  {
3880
3993
  controller,
@@ -3882,7 +3995,7 @@ function IssueManagerTaskDrawerBody({
3882
3995
  }
3883
3996
  );
3884
3997
  }
3885
- return /* @__PURE__ */ jsx14(
3998
+ return /* @__PURE__ */ jsx15(
3886
3999
  IssueManagerTaskDrawerReadBody,
3887
4000
  {
3888
4001
  controller,
@@ -3897,22 +4010,22 @@ function IssueManagerTaskDrawerEditBody({
3897
4010
  title
3898
4011
  }) {
3899
4012
  const copy = controller.copy;
3900
- return /* @__PURE__ */ jsxs12("div", { className: "flex w-full min-w-0 flex-col gap-3", children: [
3901
- /* @__PURE__ */ jsx14(
4013
+ return /* @__PURE__ */ jsxs13("div", { className: "flex w-full min-w-0 flex-col gap-3", children: [
4014
+ /* @__PURE__ */ jsx15(
3902
4015
  "div",
3903
4016
  {
3904
4017
  className: `${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay0ClassName}`,
3905
- children: /* @__PURE__ */ jsx14("h2", { className: "m-0 text-[15px] font-semibold leading-[1.35] text-[var(--text-primary)]", children: title })
4018
+ children: /* @__PURE__ */ jsx15("h2", { className: "m-0 text-[15px] font-semibold leading-[1.35] text-[var(--text-primary)]", children: title })
3906
4019
  }
3907
4020
  ),
3908
- /* @__PURE__ */ jsxs12("div", { className: "flex w-full min-w-0 flex-col gap-6", children: [
3909
- /* @__PURE__ */ jsxs12(
4021
+ /* @__PURE__ */ jsxs13("div", { className: "flex w-full min-w-0 flex-col gap-6", children: [
4022
+ /* @__PURE__ */ jsxs13(
3910
4023
  "label",
3911
4024
  {
3912
4025
  className: `flex w-full min-w-0 flex-col gap-2 text-[13px] font-semibold text-[var(--text-secondary)] ${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay1ClassName}`,
3913
4026
  children: [
3914
- /* @__PURE__ */ jsx14("span", { className: "leading-5", children: copy.t("labels.title") }),
3915
- /* @__PURE__ */ jsx14(
4027
+ /* @__PURE__ */ jsx15("span", { className: "leading-5", children: copy.t("labels.title") }),
4028
+ /* @__PURE__ */ jsx15(
3916
4029
  IssueManagerDraftTitleInput,
3917
4030
  {
3918
4031
  placeholder: copy.t("composer.taskTitlePlaceholder"),
@@ -3923,13 +4036,13 @@ function IssueManagerTaskDrawerEditBody({
3923
4036
  ]
3924
4037
  }
3925
4038
  ),
3926
- /* @__PURE__ */ jsxs12(
4039
+ /* @__PURE__ */ jsxs13(
3927
4040
  "div",
3928
4041
  {
3929
4042
  className: `flex min-h-0 w-full min-w-0 flex-col gap-2 text-[13px] font-semibold text-[var(--text-secondary)] ${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay2ClassName}`,
3930
4043
  children: [
3931
- /* @__PURE__ */ jsx14("span", { className: "leading-5", children: copy.t("labels.content") }),
3932
- /* @__PURE__ */ jsx14(
4044
+ /* @__PURE__ */ jsx15("span", { className: "leading-5", children: copy.t("labels.content") }),
4045
+ /* @__PURE__ */ jsx15(
3933
4046
  IssueManagerRichTextTextarea,
3934
4047
  {
3935
4048
  controller,
@@ -3955,8 +4068,8 @@ function IssueManagerTaskDrawerReadBody({
3955
4068
  const copy = controller.copy;
3956
4069
  const latestRun = controller.taskDetail.value?.latestRun ?? controller.taskDetail.value?.recentRuns[0] ?? null;
3957
4070
  const latestOutputs = controller.taskDetail.value?.latestOutputs ?? [];
3958
- return /* @__PURE__ */ jsxs12(Fragment2, { children: [
3959
- /* @__PURE__ */ jsx14(
4071
+ return /* @__PURE__ */ jsxs13(Fragment2, { children: [
4072
+ /* @__PURE__ */ jsx15(
3960
4073
  IssueManagerDescriptionSection,
3961
4074
  {
3962
4075
  content: taskContent,
@@ -3966,7 +4079,7 @@ function IssueManagerTaskDrawerReadBody({
3966
4079
  variant: "plain"
3967
4080
  }
3968
4081
  ),
3969
- /* @__PURE__ */ jsx14(
4082
+ /* @__PURE__ */ jsx15(
3970
4083
  IssueManagerLatestRunStatusSection,
3971
4084
  {
3972
4085
  copy,
@@ -3976,7 +4089,7 @@ function IssueManagerTaskDrawerReadBody({
3976
4089
  title: latestRunTitle
3977
4090
  }
3978
4091
  ),
3979
- /* @__PURE__ */ jsx14(
4092
+ /* @__PURE__ */ jsx15(
3980
4093
  IssueManagerOutputSection,
3981
4094
  {
3982
4095
  copy,
@@ -3998,8 +4111,8 @@ function IssueManagerTaskDrawerFooter({
3998
4111
  selectedTaskStatus: selectedTask?.status
3999
4112
  });
4000
4113
  if (view.showReadFooter && selectedTask) {
4001
- return /* @__PURE__ */ jsx14("div", { className: "border-t border-[var(--border-1)] bg-transparent px-6 py-4 backdrop-blur", children: /* @__PURE__ */ jsxs12("div", { className: "flex items-center justify-end gap-3", children: [
4002
- /* @__PURE__ */ jsx14(
4114
+ return /* @__PURE__ */ jsx15("div", { className: "border-t border-[var(--border-1)] bg-transparent px-6 py-4 backdrop-blur", children: /* @__PURE__ */ jsxs13("div", { className: "flex items-center justify-end gap-3", children: [
4115
+ /* @__PURE__ */ jsx15(
4003
4116
  IssueManagerExecutionDirectoryTrigger,
4004
4117
  {
4005
4118
  className: "mr-auto",
@@ -4007,7 +4120,7 @@ function IssueManagerTaskDrawerFooter({
4007
4120
  disabled: runControlsDisabled
4008
4121
  }
4009
4122
  ),
4010
- /* @__PURE__ */ jsx14(
4123
+ /* @__PURE__ */ jsx15(
4011
4124
  IssueManagerRunActionTrigger,
4012
4125
  {
4013
4126
  controller,
@@ -4015,8 +4128,8 @@ function IssueManagerTaskDrawerFooter({
4015
4128
  triggerVariant: "button"
4016
4129
  }
4017
4130
  ),
4018
- controller.canInviteCollaborators ? /* @__PURE__ */ jsx14(
4019
- Button9,
4131
+ controller.canInviteCollaborators ? /* @__PURE__ */ jsx15(
4132
+ Button10,
4020
4133
  {
4021
4134
  disabled: !selectedIssue,
4022
4135
  size: "dialog",
@@ -4030,13 +4143,13 @@ function IssueManagerTaskDrawerFooter({
4030
4143
  ] }) });
4031
4144
  }
4032
4145
  if (view.showEditFooter) {
4033
- return /* @__PURE__ */ jsx14(
4146
+ return /* @__PURE__ */ jsx15(
4034
4147
  "div",
4035
4148
  {
4036
4149
  className: `border-t border-border-1 px-6 py-4 ${issueManagerEditorFooterFadeInClassName}`,
4037
- children: /* @__PURE__ */ jsxs12("div", { className: "flex items-center justify-end gap-3", children: [
4038
- /* @__PURE__ */ jsx14(
4039
- Button9,
4150
+ children: /* @__PURE__ */ jsxs13("div", { className: "flex items-center justify-end gap-3", children: [
4151
+ /* @__PURE__ */ jsx15(
4152
+ Button10,
4040
4153
  {
4041
4154
  size: "dialog",
4042
4155
  type: "button",
@@ -4045,8 +4158,8 @@ function IssueManagerTaskDrawerFooter({
4045
4158
  children: copy.t("actions.cancel")
4046
4159
  }
4047
4160
  ),
4048
- /* @__PURE__ */ jsx14(
4049
- Button9,
4161
+ /* @__PURE__ */ jsx15(
4162
+ Button10,
4050
4163
  {
4051
4164
  disabled: canIssueManagerSaveTask({
4052
4165
  selectedIssue,
@@ -4066,7 +4179,7 @@ function IssueManagerTaskDrawerFooter({
4066
4179
  }
4067
4180
 
4068
4181
  // src/ui/internal/shell/IssueManagerTaskDrawer.tsx
4069
- import { jsx as jsx15, jsxs as jsxs13 } from "react/jsx-runtime";
4182
+ import { jsx as jsx16, jsxs as jsxs14 } from "react/jsx-runtime";
4070
4183
  function IssueManagerTaskDrawer({
4071
4184
  controller,
4072
4185
  isClosing,
@@ -4080,7 +4193,7 @@ function IssueManagerTaskDrawer({
4080
4193
  selectedTask
4081
4194
  });
4082
4195
  const taskContent = selectedTask?.content ?? "";
4083
- return /* @__PURE__ */ jsx15(
4196
+ return /* @__PURE__ */ jsx16(
4084
4197
  "div",
4085
4198
  {
4086
4199
  className: cn8(
@@ -4094,7 +4207,7 @@ function IssueManagerTaskDrawer({
4094
4207
  onWheel: (event) => {
4095
4208
  event.preventDefault();
4096
4209
  },
4097
- children: /* @__PURE__ */ jsxs13(
4210
+ children: /* @__PURE__ */ jsxs14(
4098
4211
  "aside",
4099
4212
  {
4100
4213
  className: cn8(
@@ -4105,7 +4218,7 @@ function IssueManagerTaskDrawer({
4105
4218
  onTouchMove: (event) => event.stopPropagation(),
4106
4219
  onWheel: (event) => event.stopPropagation(),
4107
4220
  children: [
4108
- view.bodyKind === "edit" ? null : /* @__PURE__ */ jsx15(
4221
+ view.bodyKind === "edit" ? null : /* @__PURE__ */ jsx16(
4109
4222
  IssueManagerTaskDrawerHeader,
4110
4223
  {
4111
4224
  controller,
@@ -4113,25 +4226,32 @@ function IssueManagerTaskDrawer({
4113
4226
  view
4114
4227
  }
4115
4228
  ),
4116
- /* @__PURE__ */ jsx15(ScrollArea4, { className: "min-h-0 flex-1 [&_[data-slot=scroll-area-viewport]]:overscroll-contain", children: /* @__PURE__ */ jsx15(
4117
- "div",
4229
+ /* @__PURE__ */ jsx16(
4230
+ ScrollArea4,
4118
4231
  {
4119
- className: cn8(
4120
- "flex flex-col",
4121
- view.bodyKind === "edit" ? "gap-[14px] px-6 py-8" : "gap-9 px-6 py-7"
4122
- ),
4123
- children: /* @__PURE__ */ jsx15(
4124
- IssueManagerTaskDrawerBody,
4232
+ scrollbarMode: "native",
4233
+ className: "min-h-0 flex-1 [&_[data-slot=scroll-area-viewport]]:overscroll-contain",
4234
+ children: /* @__PURE__ */ jsx16(
4235
+ "div",
4125
4236
  {
4126
- controller,
4127
- renderLatestRunStatus,
4128
- taskContent,
4129
- view
4237
+ className: cn8(
4238
+ "flex flex-col",
4239
+ view.bodyKind === "edit" ? "gap-[14px] px-6 py-8" : "gap-9 px-6 py-7"
4240
+ ),
4241
+ children: /* @__PURE__ */ jsx16(
4242
+ IssueManagerTaskDrawerBody,
4243
+ {
4244
+ controller,
4245
+ renderLatestRunStatus,
4246
+ taskContent,
4247
+ view
4248
+ }
4249
+ )
4130
4250
  }
4131
4251
  )
4132
4252
  }
4133
- ) }),
4134
- /* @__PURE__ */ jsx15(
4253
+ ),
4254
+ /* @__PURE__ */ jsx16(
4135
4255
  IssueManagerTaskDrawerFooter,
4136
4256
  {
4137
4257
  controller,
@@ -4302,7 +4422,7 @@ function useIssueManagerShellView({
4302
4422
  }
4303
4423
 
4304
4424
  // src/ui/internal/shell/IssueManagerShell.tsx
4305
- import { jsx as jsx16, jsxs as jsxs14 } from "react/jsx-runtime";
4425
+ import { jsx as jsx17, jsxs as jsxs15 } from "react/jsx-runtime";
4306
4426
  var issueManagerTaskDrawerExitDurationMs = 180;
4307
4427
  function IssueManagerShell({
4308
4428
  controller,
@@ -4343,7 +4463,7 @@ function IssueManagerShell({
4343
4463
  shellView.content.isTaskDrawerOpen
4344
4464
  ]);
4345
4465
  const taskDrawerTask = shellView.content.isTaskDrawerOpen ? selectedTask : renderedTaskDrawerTask;
4346
- return /* @__PURE__ */ jsxs14(
4466
+ return /* @__PURE__ */ jsxs15(
4347
4467
  "div",
4348
4468
  {
4349
4469
  className: "relative grid min-h-0 flex-1 grid-rows-[minmax(0,1fr)] overflow-hidden bg-transparent transition-[grid-template-columns] duration-[180ms] ease-[cubic-bezier(0.4,0,0.2,1)] motion-reduce:transition-none",
@@ -4352,8 +4472,8 @@ function IssueManagerShell({
4352
4472
  ref: shellView.layoutRef,
4353
4473
  style: shellView.layoutStyle,
4354
4474
  children: [
4355
- shellView.floatingNotice ? /* @__PURE__ */ jsx16(IssueManagerFloatingNotice, { notice: shellView.floatingNotice }) : null,
4356
- /* @__PURE__ */ jsx16(
4475
+ shellView.floatingNotice ? /* @__PURE__ */ jsx17(IssueManagerFloatingNotice, { notice: shellView.floatingNotice }) : null,
4476
+ /* @__PURE__ */ jsx17(
4357
4477
  IssueManagerSidebar,
4358
4478
  {
4359
4479
  controller,
@@ -4364,7 +4484,7 @@ function IssueManagerShell({
4364
4484
  statusCounts: shellView.sidebar.statusCounts
4365
4485
  }
4366
4486
  ),
4367
- shellView.sidebar.isAutoCollapsed ? null : /* @__PURE__ */ jsx16(
4487
+ shellView.sidebar.isAutoCollapsed ? null : /* @__PURE__ */ jsx17(
4368
4488
  "div",
4369
4489
  {
4370
4490
  "aria-label": controller.copy.t("labels.resizeIssueList"),
@@ -4383,12 +4503,12 @@ function IssueManagerShell({
4383
4503
  onPointerDown: shellView.resizeHandle.onPointerDown,
4384
4504
  onPointerMove: shellView.resizeHandle.onPointerMove,
4385
4505
  onPointerUp: shellView.resizeHandle.onPointerUp,
4386
- children: /* @__PURE__ */ jsx16("span", { className: "absolute top-0 bottom-0 left-1/2 w-px -translate-x-1/2 bg-transparent transition-[background-color,width] duration-150 group-hover:w-0.5 group-hover:bg-[color-mix(in_srgb,var(--border-focus)_40%,transparent)] group-focus-visible:w-0.5 group-focus-visible:bg-[color-mix(in_srgb,var(--border-focus)_40%,transparent)]" })
4506
+ children: /* @__PURE__ */ jsx17("span", { className: "absolute top-0 bottom-0 left-1/2 w-px -translate-x-1/2 bg-transparent transition-[background-color,width] duration-150 group-hover:w-0.5 group-hover:bg-[color-mix(in_srgb,var(--border-focus)_40%,transparent)] group-focus-visible:w-0.5 group-focus-visible:bg-[color-mix(in_srgb,var(--border-focus)_40%,transparent)]" })
4387
4507
  }
4388
4508
  ),
4389
- /* @__PURE__ */ jsxs14("div", { className: "relative h-full min-h-0 overflow-hidden bg-transparent @container/issue-manager-content", children: [
4390
- /* @__PURE__ */ jsxs14("div", { className: "flex h-full min-h-0 flex-col", children: [
4391
- /* @__PURE__ */ jsx16("div", { className: "min-h-0 flex-1 overflow-hidden", children: shellView.content.isIssueEditing ? /* @__PURE__ */ jsx16(
4509
+ /* @__PURE__ */ jsxs15("div", { className: "relative h-full min-h-0 overflow-hidden bg-transparent @container/issue-manager-content", children: [
4510
+ /* @__PURE__ */ jsxs15("div", { className: "flex h-full min-h-0 flex-col", children: [
4511
+ /* @__PURE__ */ jsx17("div", { className: "min-h-0 flex-1 overflow-hidden", children: shellView.content.isIssueEditing ? /* @__PURE__ */ jsx17(
4392
4512
  IssueManagerIssuePane,
4393
4513
  {
4394
4514
  controller,
@@ -4396,14 +4516,14 @@ function IssueManagerShell({
4396
4516
  selectedIssue,
4397
4517
  onDismissCreate: onDismissIssueCreate
4398
4518
  }
4399
- ) : shellView.content.isTaskCreating ? /* @__PURE__ */ jsx16(
4519
+ ) : shellView.content.isTaskCreating ? /* @__PURE__ */ jsx17(
4400
4520
  IssueManagerTaskComposerPane,
4401
4521
  {
4402
4522
  controller,
4403
4523
  selectedIssue,
4404
4524
  onCancel: () => controller.setTaskEditorMode("read")
4405
4525
  }
4406
- ) : selectedIssue ? /* @__PURE__ */ jsx16(
4526
+ ) : selectedIssue ? /* @__PURE__ */ jsx17(
4407
4527
  IssueManagerIssuePane,
4408
4528
  {
4409
4529
  controller,
@@ -4411,14 +4531,14 @@ function IssueManagerShell({
4411
4531
  selectedIssue,
4412
4532
  onDismissCreate: onDismissIssueCreate
4413
4533
  }
4414
- ) : /* @__PURE__ */ jsx16(
4534
+ ) : /* @__PURE__ */ jsx17(
4415
4535
  IssueManagerShellEmptyState,
4416
4536
  {
4417
4537
  controller,
4418
4538
  emptyIllustration
4419
4539
  }
4420
4540
  ) }),
4421
- /* @__PURE__ */ jsx16(
4541
+ /* @__PURE__ */ jsx17(
4422
4542
  IssueManagerBottomBar,
4423
4543
  {
4424
4544
  controller,
@@ -4428,7 +4548,7 @@ function IssueManagerShell({
4428
4548
  }
4429
4549
  )
4430
4550
  ] }),
4431
- taskDrawerTask ? /* @__PURE__ */ jsx16(
4551
+ taskDrawerTask ? /* @__PURE__ */ jsx17(
4432
4552
  IssueManagerTaskDrawer,
4433
4553
  {
4434
4554
  controller,
@@ -4448,18 +4568,18 @@ function IssueManagerShellEmptyState({
4448
4568
  controller,
4449
4569
  emptyIllustration
4450
4570
  }) {
4451
- return /* @__PURE__ */ jsx16("div", { className: "flex h-full min-h-[320px] items-center justify-center px-10 py-10", children: /* @__PURE__ */ jsxs14("div", { className: "grid max-w-[420px] justify-items-center gap-2 text-center", children: [
4452
- emptyIllustration ? /* @__PURE__ */ jsx16("div", { className: "mb-4", children: emptyIllustration }) : null,
4453
- /* @__PURE__ */ jsx16("h2", { className: "text-[13px] font-semibold leading-5 text-[var(--text-primary)]", children: controller.copy.t("messages.noIssues") }),
4454
- /* @__PURE__ */ jsx16("p", { className: "max-w-[420px] text-[13px] leading-5 text-[var(--text-secondary)]", children: controller.copy.t("emptyState") }),
4455
- /* @__PURE__ */ jsxs14(
4456
- Button10,
4571
+ return /* @__PURE__ */ jsx17("div", { className: "flex h-full min-h-[320px] items-center justify-center px-10 py-10", children: /* @__PURE__ */ jsxs15("div", { className: "grid max-w-[420px] justify-items-center gap-2 text-center", children: [
4572
+ emptyIllustration ? /* @__PURE__ */ jsx17("div", { className: "mb-4", children: emptyIllustration }) : null,
4573
+ /* @__PURE__ */ jsx17("h2", { className: "text-[13px] font-semibold leading-5 text-[var(--text-primary)]", children: controller.copy.t("messages.noIssues") }),
4574
+ /* @__PURE__ */ jsx17("p", { className: "max-w-[420px] text-[13px] leading-5 text-[var(--text-secondary)]", children: controller.copy.t("emptyState") }),
4575
+ /* @__PURE__ */ jsxs15(
4576
+ Button11,
4457
4577
  {
4458
4578
  className: "mt-2 gap-2",
4459
4579
  type: "button",
4460
4580
  onClick: () => controller.setIssueEditorMode("create"),
4461
4581
  children: [
4462
- /* @__PURE__ */ jsx16(FileCreateIcon4, { size: 16 }),
4582
+ /* @__PURE__ */ jsx17(FileCreateIcon4, { size: 16 }),
4463
4583
  controller.copy.t("actions.createIssue")
4464
4584
  ]
4465
4585
  }
@@ -4471,7 +4591,7 @@ function IssueManagerShellEmptyState({
4471
4591
  import { useEffect as useEffect8, useState as useState9 } from "react";
4472
4592
  import {
4473
4593
  BareIconButton,
4474
- Button as Button11,
4594
+ Button as Button12,
4475
4595
  CheckIcon as CheckIcon2,
4476
4596
  ChevronDownIcon as ChevronDownIcon2,
4477
4597
  ConfirmationDialog as ConfirmationDialog3,
@@ -4495,7 +4615,7 @@ import {
4495
4615
  Textarea,
4496
4616
  cn as cn10
4497
4617
  } from "@tutti-os/ui-system";
4498
- import { Fragment as Fragment3, jsx as jsx17, jsxs as jsxs15 } from "react/jsx-runtime";
4618
+ import { Fragment as Fragment3, jsx as jsx18, jsxs as jsxs16 } from "react/jsx-runtime";
4499
4619
  var topicSelectorMenuItemClassName = "min-h-7 overflow-hidden rounded-md py-1 text-[13px] font-normal leading-[1.2] text-[var(--text-primary)]";
4500
4620
  var topicSelectorRowItemClassName = "min-w-0 flex-1 bg-transparent pr-2 pl-1 hover:bg-transparent focus:bg-transparent data-[highlighted]:bg-transparent";
4501
4621
  function IssueManagerTopicSelector({
@@ -4523,10 +4643,10 @@ function IssueManagerTopicSelector({
4523
4643
  setMenuOpen(false);
4524
4644
  setDialogMode(mode);
4525
4645
  };
4526
- return /* @__PURE__ */ jsxs15(Fragment3, { children: [
4527
- /* @__PURE__ */ jsxs15(DropdownMenu2, { open: menuOpen, onOpenChange: setMenuOpen, children: [
4528
- /* @__PURE__ */ jsx17(DropdownMenuTrigger2, { asChild: true, children: /* @__PURE__ */ jsxs15(
4529
- Button11,
4646
+ return /* @__PURE__ */ jsxs16(Fragment3, { children: [
4647
+ /* @__PURE__ */ jsxs16(DropdownMenu2, { open: menuOpen, onOpenChange: setMenuOpen, children: [
4648
+ /* @__PURE__ */ jsx18(DropdownMenuTrigger2, { asChild: true, children: /* @__PURE__ */ jsxs16(
4649
+ Button12,
4530
4650
  {
4531
4651
  "aria-label": topicLabel,
4532
4652
  className: cn10(
@@ -4537,18 +4657,18 @@ function IssueManagerTopicSelector({
4537
4657
  type: "button",
4538
4658
  variant: "ghost",
4539
4659
  children: [
4540
- /* @__PURE__ */ jsx17("span", { className: "min-w-0 truncate", children: triggerLabel }),
4541
- /* @__PURE__ */ jsx17(ChevronDownIcon2, { className: "size-4 shrink-0 text-[var(--text-tertiary)] transition-transform duration-200" })
4660
+ /* @__PURE__ */ jsx18("span", { className: "min-w-0 truncate", children: triggerLabel }),
4661
+ /* @__PURE__ */ jsx18(ChevronDownIcon2, { className: "size-4 shrink-0 text-[var(--text-tertiary)] transition-transform duration-200" })
4542
4662
  ]
4543
4663
  }
4544
4664
  ) }),
4545
- /* @__PURE__ */ jsxs15(DropdownMenuContent2, { align: "start", className: "w-[200px] px-1", children: [
4665
+ /* @__PURE__ */ jsxs16(DropdownMenuContent2, { align: "start", className: "w-[200px] px-1", children: [
4546
4666
  topics.map((topic) => {
4547
4667
  const isPinned = (topic.pinnedAtUnix ?? 0) > 0;
4548
4668
  const isActive = topic.topicId === activeTopicId;
4549
4669
  const pinLabel = isPinned ? copy.t("actions.unpinTopic") : copy.t("actions.pinTopic");
4550
- return /* @__PURE__ */ jsx17("div", { className: "min-w-0", children: /* @__PURE__ */ jsxs15("div", { className: "group/topic-row relative flex min-h-7 min-w-0 items-center gap-0.5 rounded-md pr-0.5 pl-0.5 hover:bg-[var(--transparency-block)] focus-within:bg-[var(--transparency-block)]", children: [
4551
- /* @__PURE__ */ jsxs15(
4670
+ return /* @__PURE__ */ jsx18("div", { className: "min-w-0", children: /* @__PURE__ */ jsxs16("div", { className: "group/topic-row relative flex min-h-7 min-w-0 items-center gap-0.5 rounded-md pr-0.5 pl-0.5 hover:bg-[var(--transparency-block)] focus-within:bg-[var(--transparency-block)]", children: [
4671
+ /* @__PURE__ */ jsxs16(
4552
4672
  DropdownMenuItem2,
4553
4673
  {
4554
4674
  className: cn10(
@@ -4560,15 +4680,15 @@ function IssueManagerTopicSelector({
4560
4680
  onSelectTopic(topic.topicId);
4561
4681
  },
4562
4682
  children: [
4563
- /* @__PURE__ */ jsx17("span", { className: "flex size-4 shrink-0 items-center justify-center text-[var(--accent)]", children: isActive ? /* @__PURE__ */ jsx17(CheckIcon2, { className: "size-4" }) : null }),
4564
- /* @__PURE__ */ jsxs15("span", { className: "flex min-w-0 flex-1 items-center gap-2", children: [
4565
- /* @__PURE__ */ jsx17("span", { className: "truncate", children: topic.title }),
4566
- topic.isDefault ? /* @__PURE__ */ jsx17("span", { className: "shrink-0 text-[11px] text-[var(--text-tertiary)]", children: copy.t("labels.topicDefault") }) : null
4683
+ /* @__PURE__ */ jsx18("span", { className: "flex size-4 shrink-0 items-center justify-center text-[var(--accent)]", children: isActive ? /* @__PURE__ */ jsx18(CheckIcon2, { className: "size-4" }) : null }),
4684
+ /* @__PURE__ */ jsxs16("span", { className: "flex min-w-0 flex-1 items-center gap-2", children: [
4685
+ /* @__PURE__ */ jsx18("span", { className: "truncate", children: topic.title }),
4686
+ topic.isDefault ? /* @__PURE__ */ jsx18("span", { className: "shrink-0 text-[11px] text-[var(--text-tertiary)]", children: copy.t("labels.topicDefault") }) : null
4567
4687
  ] })
4568
4688
  ]
4569
4689
  }
4570
4690
  ),
4571
- /* @__PURE__ */ jsx17(
4691
+ /* @__PURE__ */ jsx18(
4572
4692
  BareIconButton,
4573
4693
  {
4574
4694
  "aria-label": pinLabel,
@@ -4586,11 +4706,11 @@ function IssueManagerTopicSelector({
4586
4706
  topicId: topic.topicId
4587
4707
  });
4588
4708
  },
4589
- children: isPinned ? /* @__PURE__ */ jsx17(PinFilledIcon, { className: "size-3.5" }) : /* @__PURE__ */ jsx17(PinIcon, { className: "size-3.5" })
4709
+ children: isPinned ? /* @__PURE__ */ jsx18(PinFilledIcon, { className: "size-3.5" }) : /* @__PURE__ */ jsx18(PinIcon, { className: "size-3.5" })
4590
4710
  }
4591
4711
  ),
4592
- /* @__PURE__ */ jsxs15(DropdownMenu2, { modal: false, children: [
4593
- /* @__PURE__ */ jsx17(DropdownMenuTrigger2, { asChild: true, children: /* @__PURE__ */ jsx17(
4712
+ /* @__PURE__ */ jsxs16(DropdownMenu2, { modal: false, children: [
4713
+ /* @__PURE__ */ jsx18(DropdownMenuTrigger2, { asChild: true, children: /* @__PURE__ */ jsx18(
4594
4714
  BareIconButton,
4595
4715
  {
4596
4716
  "aria-label": copy.t("actions.moreActions"),
@@ -4600,17 +4720,17 @@ function IssueManagerTopicSelector({
4600
4720
  onClick: (event) => {
4601
4721
  event.stopPropagation();
4602
4722
  },
4603
- children: /* @__PURE__ */ jsx17(MoreHorizontalIcon, { className: "size-3.5" })
4723
+ children: /* @__PURE__ */ jsx18(MoreHorizontalIcon, { className: "size-3.5" })
4604
4724
  }
4605
4725
  ) }),
4606
- /* @__PURE__ */ jsxs15(
4726
+ /* @__PURE__ */ jsxs16(
4607
4727
  DropdownMenuContent2,
4608
4728
  {
4609
4729
  align: "end",
4610
4730
  className: "w-32",
4611
4731
  sideOffset: 6,
4612
4732
  children: [
4613
- /* @__PURE__ */ jsxs15(
4733
+ /* @__PURE__ */ jsxs16(
4614
4734
  DropdownMenuItem2,
4615
4735
  {
4616
4736
  onSelect: (event) => {
@@ -4621,12 +4741,12 @@ function IssueManagerTopicSelector({
4621
4741
  });
4622
4742
  },
4623
4743
  children: [
4624
- /* @__PURE__ */ jsx17(EditIcon, { className: "size-3.5" }),
4625
- /* @__PURE__ */ jsx17("span", { children: copy.t("actions.editTopic") })
4744
+ /* @__PURE__ */ jsx18(EditIcon, { className: "size-3.5" }),
4745
+ /* @__PURE__ */ jsx18("span", { children: copy.t("actions.editTopic") })
4626
4746
  ]
4627
4747
  }
4628
4748
  ),
4629
- !topic.isDefault ? /* @__PURE__ */ jsxs15(
4749
+ !topic.isDefault ? /* @__PURE__ */ jsxs16(
4630
4750
  DropdownMenuItem2,
4631
4751
  {
4632
4752
  variant: "destructive",
@@ -4636,8 +4756,8 @@ function IssueManagerTopicSelector({
4636
4756
  setDeleteTopic(topic);
4637
4757
  },
4638
4758
  children: [
4639
- /* @__PURE__ */ jsx17(DeleteIcon, { className: "size-3.5" }),
4640
- /* @__PURE__ */ jsx17("span", { children: copy.t("actions.delete") })
4759
+ /* @__PURE__ */ jsx18(DeleteIcon, { className: "size-3.5" }),
4760
+ /* @__PURE__ */ jsx18("span", { children: copy.t("actions.delete") })
4641
4761
  ]
4642
4762
  }
4643
4763
  ) : null
@@ -4647,9 +4767,9 @@ function IssueManagerTopicSelector({
4647
4767
  ] })
4648
4768
  ] }) }, topic.topicId);
4649
4769
  }),
4650
- topics.length === 0 ? /* @__PURE__ */ jsx17("div", { className: "px-3 py-2 text-[11px] leading-4 text-[var(--text-tertiary)]", children: copy.t("messages.topicListEmpty") }) : null,
4651
- /* @__PURE__ */ jsx17(DropdownMenuSeparator, {}),
4652
- /* @__PURE__ */ jsxs15(
4770
+ topics.length === 0 ? /* @__PURE__ */ jsx18("div", { className: "px-3 py-2 text-[11px] leading-4 text-[var(--text-tertiary)]", children: copy.t("messages.topicListEmpty") }) : null,
4771
+ /* @__PURE__ */ jsx18(DropdownMenuSeparator, {}),
4772
+ /* @__PURE__ */ jsxs16(
4653
4773
  DropdownMenuItem2,
4654
4774
  {
4655
4775
  className: cn10(
@@ -4664,14 +4784,14 @@ function IssueManagerTopicSelector({
4664
4784
  });
4665
4785
  },
4666
4786
  children: [
4667
- /* @__PURE__ */ jsx17(FileCreateIcon5, { className: "size-3.5" }),
4668
- /* @__PURE__ */ jsx17("span", { className: "truncate", children: copy.t("actions.createTopic") })
4787
+ /* @__PURE__ */ jsx18(FileCreateIcon5, { className: "size-3.5" }),
4788
+ /* @__PURE__ */ jsx18("span", { className: "truncate", children: copy.t("actions.createTopic") })
4669
4789
  ]
4670
4790
  }
4671
4791
  )
4672
4792
  ] })
4673
4793
  ] }),
4674
- /* @__PURE__ */ jsx17(
4794
+ /* @__PURE__ */ jsx18(
4675
4795
  IssueManagerTopicDialog,
4676
4796
  {
4677
4797
  copy,
@@ -4686,7 +4806,7 @@ function IssueManagerTopicSelector({
4686
4806
  onUpdateTopic
4687
4807
  }
4688
4808
  ),
4689
- /* @__PURE__ */ jsx17(
4809
+ /* @__PURE__ */ jsx18(
4690
4810
  ConfirmationDialog3,
4691
4811
  {
4692
4812
  cancelLabel: copy.t("actions.cancel"),
@@ -4754,12 +4874,12 @@ function IssueManagerTopicDialog({
4754
4874
  }
4755
4875
  onOpenChange(false);
4756
4876
  };
4757
- return /* @__PURE__ */ jsx17(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs15(DialogContent, { className: "sm:max-w-[480px]", children: [
4758
- /* @__PURE__ */ jsx17(DialogHeader, { children: /* @__PURE__ */ jsx17(DialogTitle, { children: dialogTitle }) }),
4759
- /* @__PURE__ */ jsxs15("form", { className: "grid gap-4", onSubmit: submit, children: [
4760
- /* @__PURE__ */ jsxs15("label", { className: "grid gap-2", children: [
4761
- /* @__PURE__ */ jsx17("span", { className: "text-[11px] font-medium leading-4 text-[var(--text-secondary)]", children: copy.t("labels.topicTitle") }),
4762
- /* @__PURE__ */ jsx17(
4877
+ return /* @__PURE__ */ jsx18(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs16(DialogContent, { className: "sm:max-w-[480px]", children: [
4878
+ /* @__PURE__ */ jsx18(DialogHeader, { children: /* @__PURE__ */ jsx18(DialogTitle, { children: dialogTitle }) }),
4879
+ /* @__PURE__ */ jsxs16("form", { className: "grid gap-4", onSubmit: submit, children: [
4880
+ /* @__PURE__ */ jsxs16("label", { className: "grid gap-2", children: [
4881
+ /* @__PURE__ */ jsx18("span", { className: "text-[11px] font-medium leading-4 text-[var(--text-secondary)]", children: copy.t("labels.topicTitle") }),
4882
+ /* @__PURE__ */ jsx18(
4763
4883
  Input3,
4764
4884
  {
4765
4885
  autoFocus: true,
@@ -4769,9 +4889,9 @@ function IssueManagerTopicDialog({
4769
4889
  }
4770
4890
  )
4771
4891
  ] }),
4772
- /* @__PURE__ */ jsxs15("label", { className: "grid gap-2", children: [
4773
- /* @__PURE__ */ jsx17("span", { className: "text-[11px] font-medium leading-4 text-[var(--text-secondary)]", children: copy.t("labels.topicSummary") }),
4774
- /* @__PURE__ */ jsx17(
4892
+ /* @__PURE__ */ jsxs16("label", { className: "grid gap-2", children: [
4893
+ /* @__PURE__ */ jsx18("span", { className: "text-[11px] font-medium leading-4 text-[var(--text-secondary)]", children: copy.t("labels.topicSummary") }),
4894
+ /* @__PURE__ */ jsx18(
4775
4895
  Textarea,
4776
4896
  {
4777
4897
  className: "min-h-24 resize-none",
@@ -4781,9 +4901,9 @@ function IssueManagerTopicDialog({
4781
4901
  }
4782
4902
  )
4783
4903
  ] }),
4784
- /* @__PURE__ */ jsxs15(DialogFooter, { className: "pt-2", children: [
4785
- /* @__PURE__ */ jsx17(
4786
- Button11,
4904
+ /* @__PURE__ */ jsxs16(DialogFooter, { className: "pt-2", children: [
4905
+ /* @__PURE__ */ jsx18(
4906
+ Button12,
4787
4907
  {
4788
4908
  size: "dialog",
4789
4909
  type: "button",
@@ -4792,14 +4912,14 @@ function IssueManagerTopicDialog({
4792
4912
  children: copy.t("actions.cancel")
4793
4913
  }
4794
4914
  ),
4795
- /* @__PURE__ */ jsx17(Button11, { disabled: !title, size: "dialog", type: "submit", children: copy.t("actions.saveTopic") })
4915
+ /* @__PURE__ */ jsx18(Button12, { disabled: !title, size: "dialog", type: "submit", children: copy.t("actions.saveTopic") })
4796
4916
  ] })
4797
4917
  ] })
4798
4918
  ] }) });
4799
4919
  }
4800
4920
 
4801
4921
  // src/ui/IssueManagerNode.tsx
4802
- import { jsx as jsx18, jsxs as jsxs16 } from "react/jsx-runtime";
4922
+ import { jsx as jsx19, jsxs as jsxs17 } from "react/jsx-runtime";
4803
4923
  function IssueManagerNode({
4804
4924
  emptyIllustration,
4805
4925
  feature,
@@ -4865,7 +4985,7 @@ function IssueManagerNode({
4865
4985
  },
4866
4986
  workspaceId
4867
4987
  });
4868
- return /* @__PURE__ */ jsxs16(
4988
+ return /* @__PURE__ */ jsxs17(
4869
4989
  "section",
4870
4990
  {
4871
4991
  "aria-label": controller.copy.t("title"),
@@ -4873,7 +4993,7 @@ function IssueManagerNode({
4873
4993
  "data-issue-manager-node-id": nodeId,
4874
4994
  "data-issue-manager-workspace-id": workspaceId,
4875
4995
  children: [
4876
- /* @__PURE__ */ jsx18(
4996
+ /* @__PURE__ */ jsx19(
4877
4997
  IssueManagerShell,
4878
4998
  {
4879
4999
  controller,
@@ -4885,7 +5005,7 @@ function IssueManagerNode({
4885
5005
  selectedTask
4886
5006
  }
4887
5007
  ),
4888
- /* @__PURE__ */ jsx18(
5008
+ /* @__PURE__ */ jsx19(
4889
5009
  WorkspaceFileReferencePicker,
4890
5010
  {
4891
5011
  copy: controller.copy,
@@ -4926,7 +5046,7 @@ function IssueManagerNodeHeader({
4926
5046
  nodeId,
4927
5047
  workspaceId
4928
5048
  });
4929
- return /* @__PURE__ */ jsxs16(
5049
+ return /* @__PURE__ */ jsxs17(
4930
5050
  "header",
4931
5051
  {
4932
5052
  ...headerProps,
@@ -4935,10 +5055,10 @@ function IssueManagerNodeHeader({
4935
5055
  className
4936
5056
  ),
4937
5057
  children: [
4938
- /* @__PURE__ */ jsxs16("div", { className: "z-10 flex min-w-0 items-center gap-2", children: [
4939
- /* @__PURE__ */ jsx18("span", { className: "min-w-0 truncate text-[13px] font-semibold leading-5 text-[var(--text-primary)]", children: title?.trim() || copy.t("title") }),
4940
- /* @__PURE__ */ jsx18(
4941
- Button12,
5058
+ /* @__PURE__ */ jsxs17("div", { className: "z-10 flex min-w-0 items-center gap-2", children: [
5059
+ /* @__PURE__ */ jsx19("span", { className: "min-w-0 truncate text-[13px] font-semibold leading-5 text-[var(--text-primary)]", children: title?.trim() || copy.t("title") }),
5060
+ /* @__PURE__ */ jsx19(
5061
+ Button13,
4942
5062
  {
4943
5063
  "aria-label": toggleLabel,
4944
5064
  className: "cursor-pointer rounded-md",
@@ -4954,17 +5074,17 @@ function IssueManagerNodeHeader({
4954
5074
  },
4955
5075
  onDoubleClick: (event) => event.stopPropagation(),
4956
5076
  onPointerDown: (event) => event.stopPropagation(),
4957
- children: /* @__PURE__ */ jsx18(PanelIcon, { className: "size-[18px]" })
5077
+ children: /* @__PURE__ */ jsx19(PanelIcon, { className: "size-[18px]" })
4958
5078
  }
4959
5079
  )
4960
5080
  ] }),
4961
- /* @__PURE__ */ jsx18("div", { className: "pointer-events-none absolute top-1/2 left-1/2 z-20 flex max-w-[220px] -translate-x-1/2 -translate-y-1/2 items-center justify-center", children: /* @__PURE__ */ jsx18(
5081
+ /* @__PURE__ */ jsx19("div", { className: "pointer-events-none absolute top-1/2 left-1/2 z-20 flex max-w-[220px] -translate-x-1/2 -translate-y-1/2 items-center justify-center", children: /* @__PURE__ */ jsx19(
4962
5082
  "div",
4963
5083
  {
4964
5084
  className: "pointer-events-auto flex min-w-0 flex-none",
4965
5085
  onDoubleClick: (event) => event.stopPropagation(),
4966
5086
  onPointerDown: (event) => event.stopPropagation(),
4967
- children: /* @__PURE__ */ jsx18(
5087
+ children: /* @__PURE__ */ jsx19(
4968
5088
  IssueManagerTopicSelector,
4969
5089
  {
4970
5090
  activeTopicId: topicState.activeTopicId,
@@ -5003,7 +5123,7 @@ function IssueManagerNodeHeader({
5003
5123
  )
5004
5124
  }
5005
5125
  ) }),
5006
- /* @__PURE__ */ jsx18(
5126
+ /* @__PURE__ */ jsx19(
5007
5127
  "div",
5008
5128
  {
5009
5129
  className: "z-10 flex flex-none items-center gap-1",
@@ -5022,4 +5142,4 @@ export {
5022
5142
  IssueManagerNode,
5023
5143
  IssueManagerNodeHeader
5024
5144
  };
5025
- //# sourceMappingURL=chunk-CHQTHPRL.js.map
5145
+ //# sourceMappingURL=chunk-UXVTGSOH.js.map