@tutti-os/workspace-issue-manager 0.0.14 → 0.0.16
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.
- package/dist/assets/workspace-dock-task.png +0 -0
- package/dist/{chunk-5A25XEF2.js → chunk-7O62INYA.js} +4 -4
- package/dist/{chunk-5A25XEF2.js.map → chunk-7O62INYA.js.map} +1 -1
- package/dist/{chunk-JOEMRSA4.js → chunk-BSI36JGO.js} +151 -37
- package/dist/chunk-BSI36JGO.js.map +1 -0
- package/dist/{chunk-MLBXKQLG.js → chunk-GLGNWTCD.js} +29 -5
- package/dist/chunk-GLGNWTCD.js.map +1 -0
- package/dist/{chunk-ABQR5VIJ.js → chunk-TER7RTXO.js} +143 -127
- package/dist/chunk-TER7RTXO.js.map +1 -0
- package/dist/core/index.js +2 -2
- package/dist/i18n/index.js +1 -1
- package/dist/index.js +3 -3
- package/dist/services/index.js +3 -3
- package/dist/ui/index.js +4 -4
- package/dist/workbench/index.js +4 -4
- package/openapi/issue-manager.v1.yaml +100 -0
- package/package.json +10 -10
- package/dist/chunk-ABQR5VIJ.js.map +0 -1
- package/dist/chunk-JOEMRSA4.js.map +0 -1
- package/dist/chunk-MLBXKQLG.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/ui/react/internal/shell/IssueManagerNodeState.ts","../src/ui/react/internal/reference/IssueManagerReferencePickerState.ts","../src/ui/react/internal/controller/useIssueManagerController.ts","../src/ui/react/internal/controller/IssueManagerControllerCapabilities.ts","../src/services/internal/controllerOutcomes.ts","../src/services/internal/reference/controllerReferenceCommands.ts","../src/services/internal/reference/controllerReferenceOutcomes.ts","../src/services/internal/controllerPlans.ts","../src/services/internal/reference/controllerReferencePlans.ts","../src/services/internal/run/controllerRunCommands.ts","../src/services/internal/save/controllerSaveCommands.ts","../src/services/internal/share/controllerShareCommands.ts","../src/services/internal/controllerAnalytics.ts","../src/services/internal/controllerActions.ts","../src/ui/react/internal/controller/createIssueManagerControllerActionsBridge.ts","../src/ui/react/internal/issue/createIssueManagerIssueBindings.ts","../src/ui/react/internal/task/createIssueManagerTaskBindings.ts","../src/ui/react/internal/controller/createIssueManagerControllerBindings.ts","../src/ui/react/internal/controller/useIssueManagerControllerRuntime.ts","../src/ui/react/internal/shell/IssueManagerNoticeState.ts","../src/ui/react/internal/shell/useIssueManagerNodeView.ts","../src/ui/react/index.ts","../src/ui/IssueManagerNode.tsx","../src/ui/internal/shell/IssueManagerShell.tsx","../src/ui/internal/shell/IssueManagerPanels.tsx","../src/ui/internal/status/IssueManagerStatusBadge.ts","../src/ui/internal/issue/IssueManagerIssueSections.tsx","../src/ui/internal/content/IssueManagerTitleTooltip.tsx","../src/ui/internal/panel/IssueManagerPanelText.ts","../src/ui/internal/panel/IssueManagerPanelSurface.tsx","../src/ui/internal/issue/IssueManagerIssueAcceptanceState.ts","../src/ui/internal/content/IssueManagerDescriptionSection.tsx","../src/ui/internal/content/IssueManagerRichTextTextarea.tsx","../src/ui/internal/task/IssueManagerTaskAcceptanceCard.tsx","../src/ui/internal/shell/IssueManagerDraftTitleInput.tsx","../src/ui/internal/shell/IssueManagerEditorMotion.ts","../src/ui/internal/shell/IssueManagerBottomBar.tsx","../src/ui/internal/task/IssueManagerRunSections.tsx","../src/ui/internal/shell/IssueManagerTaskDrawerState.ts","../src/ui/internal/shell/IssueManagerFloatingNotice.tsx","../src/ui/internal/shell/IssueManagerSidebar.tsx","../src/ui/internal/shell/IssueManagerSidebarSections.tsx","../src/ui/internal/shell/IssueManagerShellState.ts","../src/ui/internal/shell/IssueManagerSidebarState.ts","../src/ui/internal/shell/IssueManagerTaskComposerPane.tsx","../src/ui/internal/shell/IssueManagerTaskDrawer.tsx","../src/ui/internal/shell/IssueManagerTaskDrawerSections.tsx","../src/ui/internal/shell/useIssueManagerShellView.ts","../src/ui/internal/shell/IssueManagerTaskDrawerEcho.ts","../src/ui/internal/shell/IssueManagerTopicSelector.tsx"],"sourcesContent":["import { useEffect, useEffectEvent, useState } from \"react\";\nimport type {\n IssueManagerIssueSummary,\n IssueManagerTaskSummary,\n IssueManagerCreateTopicInput,\n IssueManagerTopic,\n IssueManagerUpdateTopicInput\n} from \"../../../../contracts/index.ts\";\nimport type { IssueManagerI18nRuntime } from \"../../../../i18n/issueManagerI18n.ts\";\n\ninterface IssueManagerTaskListCollapsedDetail {\n collapsed: boolean;\n nodeId: string;\n workspaceId: string;\n}\n\nconst issueManagerTaskListCollapsedEvent =\n \"tutti:issue-manager-task-list-collapsed\";\n\ntype IssueManagerTopicCreateEventInput = Omit<\n IssueManagerCreateTopicInput,\n \"workspaceId\"\n>;\n\ntype IssueManagerTopicUpdateEventInput = Omit<\n IssueManagerUpdateTopicInput,\n \"workspaceId\"\n>;\n\ninterface IssueManagerTopicHeaderStateDetail {\n activeTopicId: string | null;\n nodeId: string;\n topics: readonly IssueManagerTopic[];\n workspaceId: string;\n}\n\ninterface IssueManagerTopicSelectionDetail {\n nodeId: string;\n topicId: string;\n workspaceId: string;\n}\n\ninterface IssueManagerTopicCreateDetail {\n input: IssueManagerTopicCreateEventInput;\n nodeId: string;\n workspaceId: string;\n}\n\ninterface IssueManagerTopicDeleteDetail {\n nodeId: string;\n topicId: string;\n workspaceId: string;\n}\n\ninterface IssueManagerTopicUpdateDetail {\n input: IssueManagerTopicUpdateEventInput;\n nodeId: string;\n workspaceId: string;\n}\n\ntype IssueManagerEventHubListener<TDetail> = (detail: TDetail) => void;\n\nfunction createIssueManagerKeyedEventHub<TDetail>(input: {\n getKey: (detail: TDetail) => string;\n}) {\n const listenerSetByKey = new Map<\n string,\n Set<IssueManagerEventHubListener<TDetail>>\n >();\n\n return {\n publish(detail: TDetail): void {\n listenerSetByKey.get(input.getKey(detail))?.forEach((listener) => {\n listener(detail);\n });\n },\n subscribe(\n key: string,\n listener: IssueManagerEventHubListener<TDetail>\n ): () => void {\n let listenerSet = listenerSetByKey.get(key);\n if (!listenerSet) {\n listenerSet = new Set();\n listenerSetByKey.set(key, listenerSet);\n }\n listenerSet.add(listener);\n\n return () => {\n listenerSet?.delete(listener);\n if (listenerSet?.size === 0) {\n listenerSetByKey.delete(key);\n }\n };\n }\n };\n}\n\nfunction createIssueManagerKeyedReplayEventHub<TDetail>(input: {\n getKey: (detail: TDetail) => string;\n}) {\n const currentByKey = new Map<string, TDetail>();\n const eventHub = createIssueManagerKeyedEventHub<TDetail>(input);\n\n return {\n get(key: string): TDetail | null {\n return currentByKey.get(key) ?? null;\n },\n publish(detail: TDetail): void {\n currentByKey.set(input.getKey(detail), detail);\n eventHub.publish(detail);\n },\n subscribe(\n key: string,\n listener: IssueManagerEventHubListener<TDetail>\n ): () => void {\n const unsubscribe = eventHub.subscribe(key, listener);\n const current = currentByKey.get(key);\n if (current) {\n listener(current);\n }\n return unsubscribe;\n }\n };\n}\n\nconst issueManagerTopicHeaderStateHub =\n createIssueManagerKeyedReplayEventHub<IssueManagerTopicHeaderStateDetail>({\n getKey: issueManagerNodeScopeKey\n });\nconst issueManagerTopicSelectionHub =\n createIssueManagerKeyedEventHub<IssueManagerTopicSelectionDetail>({\n getKey: issueManagerNodeScopeKey\n });\nconst issueManagerTopicCreateHub =\n createIssueManagerKeyedEventHub<IssueManagerTopicCreateDetail>({\n getKey: issueManagerNodeScopeKey\n });\nconst issueManagerTopicDeleteHub =\n createIssueManagerKeyedEventHub<IssueManagerTopicDeleteDetail>({\n getKey: issueManagerNodeScopeKey\n });\nconst issueManagerTopicUpdateHub =\n createIssueManagerKeyedEventHub<IssueManagerTopicUpdateDetail>({\n getKey: issueManagerNodeScopeKey\n });\n\nexport function resolveIssueManagerTopicHeaderState(input: {\n activeTopicId: string | null;\n nodeId: string;\n workspaceId: string;\n}): IssueManagerTopicHeaderStateDetail {\n return (\n issueManagerTopicHeaderStateHub.get(issueManagerNodeScopeKey(input)) ?? {\n activeTopicId: input.activeTopicId,\n nodeId: input.nodeId,\n topics: [],\n workspaceId: input.workspaceId\n }\n );\n}\n\nexport function dispatchIssueManagerTaskListCollapsed(input: {\n collapsed: boolean;\n nodeId: string;\n workspaceId: string;\n}): void {\n if (typeof window === \"undefined\") {\n return;\n }\n\n window.dispatchEvent(\n new CustomEvent<IssueManagerTaskListCollapsedDetail>(\n issueManagerTaskListCollapsedEvent,\n {\n detail: input\n }\n )\n );\n}\n\nexport function dispatchIssueManagerTopicHeaderState(\n input: IssueManagerTopicHeaderStateDetail\n): void {\n issueManagerTopicHeaderStateHub.publish(input);\n}\n\nexport function dispatchIssueManagerTopicSelection(\n input: IssueManagerTopicSelectionDetail\n): void {\n issueManagerTopicSelectionHub.publish(input);\n}\n\nexport function dispatchIssueManagerTopicCreate(\n input: IssueManagerTopicCreateDetail\n): void {\n issueManagerTopicCreateHub.publish(input);\n}\n\nexport function dispatchIssueManagerTopicDelete(\n input: IssueManagerTopicDeleteDetail\n): void {\n issueManagerTopicDeleteHub.publish(input);\n}\n\nexport function dispatchIssueManagerTopicUpdate(\n input: IssueManagerTopicUpdateDetail\n): void {\n issueManagerTopicUpdateHub.publish(input);\n}\n\nexport function useIssueManagerTaskListCollapsedSync(input: {\n nodeId: string;\n onCollapsedChange: (collapsed: boolean) => void;\n workspaceId: string;\n}): void {\n const onCollapsedChange = useEffectEvent(input.onCollapsedChange);\n\n useEffect(() => {\n if (typeof window === \"undefined\") {\n return undefined;\n }\n\n const handleTaskListCollapsedChange = (event: Event) => {\n const detail = (event as CustomEvent<IssueManagerTaskListCollapsedDetail>)\n .detail;\n if (\n detail?.nodeId !== input.nodeId ||\n detail.workspaceId !== input.workspaceId\n ) {\n return;\n }\n onCollapsedChange(detail.collapsed);\n };\n\n window.addEventListener(\n issueManagerTaskListCollapsedEvent,\n handleTaskListCollapsedChange\n );\n return () => {\n window.removeEventListener(\n issueManagerTaskListCollapsedEvent,\n handleTaskListCollapsedChange\n );\n };\n }, [input.nodeId, input.workspaceId, onCollapsedChange]);\n}\n\nexport function useIssueManagerTopicHeaderStateSync(input: {\n activeTopicId: string | null;\n nodeId: string;\n workspaceId: string;\n}) {\n const [state, setState] = useState<IssueManagerTopicHeaderStateDetail>(() =>\n resolveIssueManagerTopicHeaderState(input)\n );\n\n useEffect(() => {\n setState((current) =>\n current.activeTopicId === input.activeTopicId &&\n current.nodeId === input.nodeId &&\n current.workspaceId === input.workspaceId &&\n current.topics === resolveIssueManagerTopicHeaderState(input).topics\n ? current\n : resolveIssueManagerTopicHeaderState(input)\n );\n }, [input.activeTopicId, input.nodeId, input.workspaceId]);\n\n useEffect(() => {\n const handleTopicHeaderStateChange = (\n detail: IssueManagerTopicHeaderStateDetail\n ) => {\n setState(detail);\n };\n\n return issueManagerTopicHeaderStateHub.subscribe(\n issueManagerNodeScopeKey(input),\n handleTopicHeaderStateChange\n );\n }, [input.nodeId, input.workspaceId]);\n\n return state;\n}\n\nexport function useIssueManagerTopicHeaderCommandSync(input: {\n nodeId: string;\n onCreateTopic: (topicInput: IssueManagerTopicCreateEventInput) => void;\n onDeleteTopic: (topicId: string) => void;\n onSelectTopic: (topicId: string) => void;\n onUpdateTopic: (topicInput: IssueManagerTopicUpdateEventInput) => void;\n workspaceId: string;\n}): void {\n const onCreateTopic = useEffectEvent(input.onCreateTopic);\n const onDeleteTopic = useEffectEvent(input.onDeleteTopic);\n const onSelectTopic = useEffectEvent(input.onSelectTopic);\n const onUpdateTopic = useEffectEvent(input.onUpdateTopic);\n\n useEffect(() => {\n const handleTopicSelection = (detail: IssueManagerTopicSelectionDetail) => {\n onSelectTopic(detail.topicId);\n };\n const handleTopicCreate = (detail: IssueManagerTopicCreateDetail) => {\n onCreateTopic(detail.input);\n };\n const handleTopicDelete = (detail: IssueManagerTopicDeleteDetail) => {\n onDeleteTopic(detail.topicId);\n };\n const handleTopicUpdate = (detail: IssueManagerTopicUpdateDetail) => {\n onUpdateTopic(detail.input);\n };\n\n const unsubscribeSelection = issueManagerTopicSelectionHub.subscribe(\n issueManagerNodeScopeKey(input),\n handleTopicSelection\n );\n const unsubscribeCreate = issueManagerTopicCreateHub.subscribe(\n issueManagerNodeScopeKey(input),\n handleTopicCreate\n );\n const unsubscribeDelete = issueManagerTopicDeleteHub.subscribe(\n issueManagerNodeScopeKey(input),\n handleTopicDelete\n );\n const unsubscribeUpdate = issueManagerTopicUpdateHub.subscribe(\n issueManagerNodeScopeKey(input),\n handleTopicUpdate\n );\n return () => {\n unsubscribeSelection();\n unsubscribeCreate();\n unsubscribeDelete();\n unsubscribeUpdate();\n };\n }, [\n input.nodeId,\n input.workspaceId,\n onCreateTopic,\n onDeleteTopic,\n onSelectTopic,\n onUpdateTopic\n ]);\n}\n\nexport function useIssueManagerNodeHeaderView(input: {\n copy: IssueManagerI18nRuntime;\n isSidebarAutoCollapsed: boolean;\n isSidebarCollapsed: boolean;\n nodeId: string;\n onToggleSidebar: (nextCollapsed: boolean) => void;\n workspaceId: string;\n}) {\n const [manualCollapsed, setManualCollapsed] = useState(\n input.isSidebarCollapsed\n );\n\n useEffect(() => {\n setManualCollapsed(input.isSidebarCollapsed);\n }, [input.isSidebarCollapsed]);\n\n useIssueManagerTaskListCollapsedSync({\n nodeId: input.nodeId,\n onCollapsedChange: setManualCollapsed,\n workspaceId: input.workspaceId\n });\n\n const effectiveCollapsed = input.isSidebarAutoCollapsed || manualCollapsed;\n\n return {\n effectiveCollapsed,\n toggleLabel: effectiveCollapsed\n ? input.copy.t(\"actions.expandIssueList\")\n : input.copy.t(\"actions.collapseIssueList\"),\n toggleSidebar: () => {\n input.onToggleSidebar(!effectiveCollapsed);\n }\n };\n}\n\nfunction issueManagerNodeScopeKey(input: {\n nodeId: string;\n workspaceId: string;\n}): string {\n return `${input.workspaceId}\\0${input.nodeId}`;\n}\n\nexport function resolveIssueManagerSelectedIssue(input: {\n issueDetail: IssueManagerIssueSummary | null;\n issues: readonly IssueManagerIssueSummary[];\n selectedIssueId: string | null;\n}): IssueManagerIssueSummary | null {\n if (!input.selectedIssueId) {\n return null;\n }\n\n return (\n input.issueDetail ??\n input.issues.find((issue) => issue.issueId === input.selectedIssueId) ??\n null\n );\n}\n\nexport function resolveIssueManagerSelectedTask(input: {\n selectedTaskId: string | null;\n taskDetail: IssueManagerTaskSummary | null;\n tasks: readonly IssueManagerTaskSummary[];\n}): IssueManagerTaskSummary | null {\n if (!input.selectedTaskId) {\n return null;\n }\n\n return (\n input.taskDetail ??\n input.tasks.find((task) => task.taskId === input.selectedTaskId) ??\n null\n );\n}\n","export {\n collectVisibleTreeEntries,\n createWorkspaceFileReferenceDirectoryStateFromSnapshot as createReferenceDirectoryStateFromSnapshot,\n mergeExpandedFolderPaths,\n mergePrefetchedDirectoryState,\n normalizeDirectoryPath,\n prefetchReferenceTree,\n workspaceFileReferenceDefaultExpandedDepth as issueManagerReferenceDefaultExpandedDepth,\n type WorkspaceFileReferenceDirectoryState as IssueManagerReferenceDirectoryState\n} from \"@tutti-os/workspace-file-reference/react\";\n","import { useEffect, useMemo, useState } from \"react\";\nimport type {\n RichTextMentionAttrs,\n RichTextTriggerProvider\n} from \"@tutti-os/ui-rich-text/types\";\nimport type { WorkspaceUserProjectService } from \"@tutti-os/workspace-user-project/contracts\";\nimport type { WorkspaceUserProjectI18nRuntime } from \"@tutti-os/workspace-user-project/i18n\";\nimport type {\n IssueManagerAgentProviderOption,\n IssueManagerContextRef,\n IssueManagerFileReference,\n IssueManagerIssueDetail,\n IssueManagerIssueSummary,\n IssueManagerNodeState,\n IssueManagerOpenSource,\n IssueManagerPriority,\n IssueManagerRun,\n IssueManagerTaskDetail,\n IssueManagerTopic,\n IssueManagerCreateTopicInput,\n IssueManagerUpdateTopicInput\n} from \"../../../../contracts/index.ts\";\nimport type { IssueManagerFeature } from \"../../../../core/index.ts\";\nimport type { IssueManagerI18nRuntime } from \"../../../../i18n/issueManagerI18n.ts\";\nimport type { IssueManagerControllerService } from \"../../../../services/issueManagerControllerService.interface.ts\";\nimport {\n resolveIssueManagerAgentProviderOptions,\n resolveIssueManagerControllerCapabilities\n} from \"./IssueManagerControllerCapabilities.ts\";\nimport type { IssueManagerFloatingNoticeViewState } from \"../shell/IssueManagerNoticeState.ts\";\nimport type {\n AsyncCollectionState,\n IssueDraft,\n IssueManagerNotificationState,\n TaskDraft\n} from \"../../../../services/controllerTypes.ts\";\nimport type {\n IssueManagerEditorMode,\n IssueManagerReferenceTarget\n} from \"../../../../services/controllerModel.ts\";\nimport { createIssueManagerControllerActionsBridge } from \"./createIssueManagerControllerActionsBridge.ts\";\nimport { createIssueManagerControllerBindings } from \"./createIssueManagerControllerBindings.ts\";\nimport { resolveIssueManagerTopicDeleteErrorMessage } from \"../../../../services/internal/controllerUtils.ts\";\nimport { useIssueManagerControllerRuntime } from \"./useIssueManagerControllerRuntime.ts\";\nimport type { IssueManagerDiagnostics } from \"../../../../internal/issueManagerDiagnostics.ts\";\n\nexport type IssueManagerRichTextSurface = \"issue\" | \"task\";\n\nexport interface UseIssueManagerControllerInput {\n diagnostics?: IssueManagerDiagnostics | null;\n feature: IssueManagerFeature;\n openSource?: IssueManagerOpenSource;\n onStateChange?: (state: IssueManagerNodeState) => void;\n resolveRichTextTriggerProviders?: (input: {\n surface: IssueManagerRichTextSurface;\n workspaceId: string;\n }) => readonly RichTextTriggerProvider[];\n service?: IssueManagerControllerService;\n state?: Partial<IssueManagerNodeState> | null;\n workspaceId: string;\n}\n\nexport interface IssueManagerController {\n attachReferences: (parentKind: \"issue\" | \"task\") => Promise<void>;\n canOpenAgentSessions: boolean;\n canSelectExecutionDirectory: boolean;\n canInviteCollaborators: boolean;\n canReferenceWorkspaceFiles: boolean;\n canUploadWorkspaceFiles: boolean;\n copy: IssueManagerI18nRuntime;\n diagnostics: IssueManagerDiagnostics | null;\n createTopic: (\n input: Omit<IssueManagerCreateTopicInput, \"workspaceId\">\n ) => Promise<void>;\n deleteTopic: (topicId: string) => Promise<void>;\n createTaskDraft: () => void;\n deleteIssue: (options?: { skipConfirmation?: boolean }) => Promise<void>;\n deleteTask: (options?: { skipConfirmation?: boolean }) => Promise<void>;\n dismissNotification: () => void;\n insertReferences: (parentKind: \"issue\" | \"task\") => Promise<void>;\n issueDetail: AsyncCollectionState<IssueManagerIssueDetail | null>;\n issueDraft: IssueDraft;\n issueEditorMode: IssueManagerEditorMode;\n floatingNotice: IssueManagerFloatingNoticeViewState | null;\n issues: AsyncCollectionState<IssueManagerIssueSummary[]>;\n isRunningTask: boolean;\n nodeState: IssueManagerNodeState;\n notification: IssueManagerNotificationState | null;\n openAgentSession: (run: IssueManagerRun) => Promise<void>;\n openMention: (mention: RichTextMentionAttrs) => Promise<void>;\n openReference: (reference: IssueManagerFileReference) => Promise<void>;\n providerOptions: readonly IssueManagerAgentProviderOption[];\n executionDirectoryProjectService: WorkspaceUserProjectService | null;\n reportIssueSearchUsage: (query: string) => void;\n refreshAll: () => void;\n referenceTarget: IssueManagerReferenceTarget | null;\n removeContextRef: (ref: IssueManagerContextRef) => Promise<void>;\n runTask: (providerOverride?: string) => Promise<void>;\n saveIssue: () => Promise<void>;\n saveTask: () => Promise<void>;\n setTaskStatus: (\n taskId: string,\n status: \"completed\" | \"not_started\"\n ) => Promise<void>;\n setSelectedTaskStatus: (status: \"completed\" | \"not_started\") => Promise<void>;\n resolveRichTextTriggerProviders: (\n surface: IssueManagerRichTextSurface\n ) => readonly RichTextTriggerProvider[];\n selectIssue: (issueId: string | null) => void;\n selectTask: (taskId: string | null) => void;\n selectTopic: (topicId: string) => void;\n setIssueContent: (content: string) => void;\n setIssueDraft: (patch: Partial<IssueDraft>) => void;\n setIssueEditorMode: (mode: IssueManagerEditorMode) => void;\n setIssueSearchQuery: (query: string) => void;\n setIssueStatusFilter: (\n value: IssueManagerNodeState[\"issueStatusFilter\"]\n ) => void;\n setIssueTitle: (title: string) => void;\n setReferenceTarget: (target: IssueManagerReferenceTarget | null) => void;\n setSelectedAgentProvider: (provider: string) => void;\n useExecutionDirectory: (path: string | null) => Promise<void>;\n setTaskContent: (content: string) => void;\n setTaskDraft: (patch: Partial<TaskDraft>) => void;\n setTaskEditorMode: (mode: IssueManagerEditorMode) => void;\n setTaskListCollapsed: (collapsed: boolean) => void;\n setTaskPriority: (priority: IssueManagerPriority) => void;\n setTaskTitle: (title: string) => void;\n shareSelection: () => Promise<void>;\n startTaskBreakdown: (providerOverride?: string) => Promise<void>;\n submitReferenceSelection: (\n refs: IssueManagerFileReference[]\n ) => Promise<void>;\n taskDetail: AsyncCollectionState<IssueManagerTaskDetail | null>;\n taskDraft: TaskDraft;\n taskEditorMode: IssueManagerEditorMode;\n topics: AsyncCollectionState<IssueManagerTopic[]>;\n updateTopic: (\n input: Omit<IssueManagerUpdateTopicInput, \"workspaceId\">\n ) => Promise<void>;\n uploadReferences: (\n parentKind: \"issue\" | \"task\",\n mode: \"files\" | \"folder\"\n ) => Promise<void>;\n workspaceUserProjectI18n: WorkspaceUserProjectI18nRuntime;\n workspaceId: string;\n}\n\nexport function useIssueManagerController({\n diagnostics,\n feature,\n openSource,\n onStateChange,\n resolveRichTextTriggerProviders,\n service,\n state,\n workspaceId\n}: UseIssueManagerControllerInput): IssueManagerController {\n const copy = feature.i18n;\n const { controllerSession, floatingNotice, snapshot } =\n useIssueManagerControllerRuntime({\n diagnostics,\n feature,\n openSource,\n onStateChange,\n service,\n state,\n workspaceId\n });\n const {\n issueDetail,\n issueDraft,\n issueEditorMode,\n issues,\n isRunningTask,\n nodeState,\n notification,\n referenceTarget,\n taskDetail,\n taskDraft,\n taskEditorMode,\n topics\n } = snapshot;\n const {\n canOpenAgentSessions,\n canInviteCollaborators,\n canReferenceWorkspaceFiles,\n canSelectExecutionDirectory,\n canUploadWorkspaceFiles\n } = useMemo(\n () => resolveIssueManagerControllerCapabilities(feature),\n [feature]\n );\n const [providerOptions, setProviderOptions] = useState(() =>\n resolveIssueManagerAgentProviderOptions(feature)\n );\n\n useEffect(() => {\n setProviderOptions(resolveIssueManagerAgentProviderOptions(feature));\n return feature.agentProviderOptions?.subscribe?.(() => {\n setProviderOptions(resolveIssueManagerAgentProviderOptions(feature));\n });\n }, [feature]);\n\n const actions = createIssueManagerControllerActionsBridge({\n controllerSession,\n copy,\n diagnostics,\n feature,\n issueDetail,\n issueDraft,\n issueEditorMode,\n nodeState,\n referenceTarget,\n taskDetail,\n taskDraft,\n taskEditorMode,\n workspaceId\n });\n const bindings = createIssueManagerControllerBindings({\n controllerSession,\n diagnostics,\n feature,\n issueEditorMode,\n nodeState,\n onResolveRichTextTriggerProviders: resolveRichTextTriggerProviders,\n taskEditorMode,\n workspaceId\n });\n const notifyTopicOperationFailure = (message: string) => {\n feature.notifications?.tips(message);\n controllerSession.setNotification((current) => ({\n id: (current?.id ?? 0) + 1,\n title: message,\n tone: \"destructive\"\n }));\n };\n\n return {\n ...actions,\n ...bindings,\n canOpenAgentSessions,\n canInviteCollaborators,\n canReferenceWorkspaceFiles,\n canSelectExecutionDirectory,\n canUploadWorkspaceFiles,\n copy,\n diagnostics: diagnostics ?? null,\n async createTopic(topicInput) {\n try {\n const topic = await feature.backend.createTopic({\n ...topicInput,\n workspaceId\n });\n controllerSession.updateNodeState((current) => ({\n ...current,\n activeTopicId: topic.topicId\n }));\n controllerSession.refreshAll();\n } catch {\n notifyTopicOperationFailure(copy.t(\"messages.topicCreateFailed\"));\n }\n },\n async deleteTopic(topicId) {\n const trimmedTopicId = topicId.trim();\n if (!trimmedTopicId) {\n return;\n }\n try {\n await feature.backend.deleteTopic({\n topicId: trimmedTopicId,\n workspaceId\n });\n if (nodeState.activeTopicId === trimmedTopicId) {\n controllerSession.updateNodeState((current) => ({\n ...current,\n activeTopicId: null,\n selectedIssueId: null,\n selectedTaskId: null\n }));\n }\n controllerSession.refreshAll();\n } catch (error) {\n notifyTopicOperationFailure(\n resolveIssueManagerTopicDeleteErrorMessage(error, copy)\n );\n }\n },\n issueDetail,\n issueDraft,\n issueEditorMode,\n floatingNotice,\n issues,\n isRunningTask,\n nodeState,\n notification,\n async openMention(mention) {\n await feature.mentionActionHandler?.openMention({\n mention,\n workspaceId\n });\n },\n providerOptions,\n executionDirectoryProjectService:\n feature.executionDirectoryPicker?.service ?? null,\n workspaceUserProjectI18n: feature.workspaceUserProjectI18n,\n referenceTarget,\n selectTopic(topicId: string) {\n const trimmedTopicId = topicId.trim();\n if (!trimmedTopicId) {\n return;\n }\n if (nodeState.activeTopicId !== trimmedTopicId) {\n void Promise.resolve(\n feature.analytics?.track({\n name: \"issue_manager.topic_changed\",\n params: {}\n })\n ).catch(() => undefined);\n }\n controllerSession.updateNodeState((current) => ({\n ...current,\n activeTopicId: trimmedTopicId\n }));\n },\n taskDetail,\n taskDraft,\n taskEditorMode,\n topics,\n async updateTopic(topicInput) {\n try {\n await feature.backend.updateTopic({\n ...topicInput,\n workspaceId\n });\n controllerSession.refreshAll();\n } catch {\n notifyTopicOperationFailure(copy.t(\"messages.topicUpdateFailed\"));\n }\n },\n workspaceId\n };\n}\n","import type {\n IssueManagerAgentProviderOption,\n IssueManagerFileAdapter\n} from \"../../../../contracts/index.ts\";\nimport type { IssueManagerFeature } from \"../../../../core/index.ts\";\n\nexport const defaultIssueManagerAgentProviderOptions = [\n {\n label: \"Codex\",\n provider: \"codex\"\n }\n] as const satisfies readonly IssueManagerAgentProviderOption[];\n\nexport function resolveIssueManagerAgentProviderOptions(\n feature: IssueManagerFeature\n): readonly IssueManagerAgentProviderOption[] {\n if (!feature.agentProviderOptions) {\n return defaultIssueManagerAgentProviderOptions;\n }\n\n const configuredOptions = feature.agentProviderOptions.getOptions();\n const normalizedOptions = configuredOptions\n .map((option) => {\n const disabledReason = option.disabledReason?.trim();\n return {\n ...(option.disabled === true ? { disabled: true } : {}),\n ...(disabledReason ? { disabledReason } : {}),\n ...(option.iconUrl?.trim() ? { iconUrl: option.iconUrl.trim() } : {}),\n label: option.label.trim() || option.provider.trim(),\n provider: option.provider.trim()\n };\n })\n .filter((option) => option.provider && option.label);\n\n return normalizedOptions;\n}\n\nexport interface IssueManagerControllerCapabilities {\n canOpenAgentSessions: boolean;\n canSelectExecutionDirectory: boolean;\n canInviteCollaborators: boolean;\n canReferenceWorkspaceFiles: boolean;\n canUploadWorkspaceFiles: boolean;\n}\n\nexport function resolveIssueManagerControllerCapabilities(\n feature: IssueManagerFeature\n): IssueManagerControllerCapabilities {\n return {\n canOpenAgentSessions:\n typeof feature.agentSessionOpener?.openSession === \"function\",\n canSelectExecutionDirectory: Boolean(\n feature.executionDirectoryPicker?.service\n ),\n canInviteCollaborators:\n feature.ui.showInviteCollaborator === true &&\n typeof feature.shareAdapter?.createIssueLink === \"function\",\n canReferenceWorkspaceFiles:\n hasFileAdapterMethod(feature.fileAdapter, \"requestReferences\") ||\n hasFileAdapterMethod(feature.fileAdapter, \"loadReferenceTree\") ||\n hasFileAdapterMethod(feature.fileAdapter, \"listDirectory\") ||\n hasFileAdapterMethod(feature.fileAdapter, \"searchReferences\"),\n canUploadWorkspaceFiles: hasFileAdapterMethod(\n feature.fileAdapter,\n \"requestUpload\"\n )\n };\n}\n\nfunction hasFileAdapterMethod(\n fileAdapter: IssueManagerFileAdapter | undefined,\n methodName:\n | \"listDirectory\"\n | \"loadReferenceTree\"\n | \"requestReferences\"\n | \"requestUpload\"\n | \"searchReferences\"\n): boolean {\n return typeof Reflect.get(fileAdapter ?? {}, methodName) === \"function\";\n}\n","import type { IssueManagerNodeState } from \"../../contracts/index.ts\";\nimport type {\n IssueManagerEditorMode,\n IssueManagerReferenceTarget\n} from \"./model.ts\";\nimport type {\n IssueDraft,\n IssueManagerNotificationTone,\n TaskDraft\n} from \"./controllerTypes.ts\";\nimport {\n applyIssueManagerIssueSaved,\n applyIssueManagerTaskSaved\n} from \"./controllerState.ts\";\n\nexport interface IssueManagerControllerOutcome {\n issueDraft?: (current: IssueDraft) => IssueDraft;\n issueEditorMode?: IssueManagerEditorMode;\n nodeState?: (current: IssueManagerNodeState) => IssueManagerNodeState;\n notificationKey?: string;\n referenceTarget?: IssueManagerReferenceTarget | null;\n refreshAll?: boolean;\n refreshDetails?: boolean;\n taskDraft?: (current: TaskDraft) => TaskDraft;\n taskEditorMode?: IssueManagerEditorMode;\n}\n\nexport interface ApplyIssueManagerControllerOutcomeInput {\n notify: (title: string, tone?: IssueManagerNotificationTone) => void;\n outcome: IssueManagerControllerOutcome;\n refreshAll: () => void;\n refreshDetails: () => void;\n setIssueDraftInternal: (updater: (current: IssueDraft) => IssueDraft) => void;\n setIssueEditorModeState: (mode: IssueManagerEditorMode) => void;\n setReferenceTarget: (target: IssueManagerReferenceTarget | null) => void;\n setTaskDraftInternal: (updater: (current: TaskDraft) => TaskDraft) => void;\n setTaskEditorModeState: (mode: IssueManagerEditorMode) => void;\n translate: (key: string) => string;\n updateNodeState: (\n updater: (current: IssueManagerNodeState) => IssueManagerNodeState\n ) => void;\n}\n\nexport function applyIssueManagerControllerOutcome(\n input: ApplyIssueManagerControllerOutcomeInput\n): void {\n if (input.outcome.notificationKey) {\n input.notify(input.translate(input.outcome.notificationKey));\n }\n if (input.outcome.issueDraft) {\n input.setIssueDraftInternal(input.outcome.issueDraft);\n }\n if (input.outcome.issueEditorMode) {\n input.setIssueEditorModeState(input.outcome.issueEditorMode);\n }\n if (\"referenceTarget\" in input.outcome) {\n input.setReferenceTarget(input.outcome.referenceTarget ?? null);\n }\n if (input.outcome.taskDraft) {\n input.setTaskDraftInternal(input.outcome.taskDraft);\n }\n if (input.outcome.taskEditorMode) {\n input.setTaskEditorModeState(input.outcome.taskEditorMode);\n }\n if (input.outcome.nodeState) {\n input.updateNodeState(input.outcome.nodeState);\n }\n if (input.outcome.refreshAll) {\n input.refreshAll();\n }\n if (input.outcome.refreshDetails) {\n input.refreshDetails();\n }\n}\n\nexport function createIssueManagerRunTaskSuccessOutcome(input: {\n status: string;\n}): IssueManagerControllerOutcome {\n return {\n notificationKey:\n input.status === \"completed\" || input.status === \"opened\"\n ? undefined\n : \"messages.runFailed\"\n };\n}\n\nexport function createIssueManagerSaveIssueSuccessOutcome(\n issueId: string\n): IssueManagerControllerOutcome {\n return {\n issueEditorMode: \"read\",\n nodeState: (current) => applyIssueManagerIssueSaved(current, issueId),\n refreshAll: true\n };\n}\n\nexport function createIssueManagerSaveTaskSuccessOutcome(\n taskId: string\n): IssueManagerControllerOutcome {\n return {\n nodeState: (current) => applyIssueManagerTaskSaved(current, taskId),\n refreshAll: true,\n taskEditorMode: \"read\"\n };\n}\n","import type {\n IssueManagerContextRef,\n IssueManagerFileReference\n} from \"../../../contracts/index.ts\";\nimport {\n appendIssueManagerWorkspaceFileLinksToContent,\n type IssueManagerFeature\n} from \"../../../core/index.ts\";\nimport type { IssueManagerReferenceTarget } from \"../model.ts\";\nimport {\n toContextRefInput,\n toIssueManagerWorkspaceFileLinkInput\n} from \"../controllerUtils.ts\";\n\nexport function canIssueManagerRequestReferencesDirectly(\n fileAdapter: IssueManagerFeature[\"fileAdapter\"]\n): fileAdapter is NonNullable<IssueManagerFeature[\"fileAdapter\"]> & {\n requestReferences: NonNullable<\n NonNullable<IssueManagerFeature[\"fileAdapter\"]>[\"requestReferences\"]\n >;\n} {\n return Boolean(\n fileAdapter?.requestReferences &&\n !fileAdapter.loadReferenceTree &&\n !fileAdapter.listDirectory &&\n !fileAdapter.searchReferences\n );\n}\n\nexport async function executeIssueManagerRequestReferences(input: {\n fileAdapter: NonNullable<IssueManagerFeature[\"fileAdapter\"]> & {\n requestReferences: NonNullable<\n NonNullable<IssueManagerFeature[\"fileAdapter\"]>[\"requestReferences\"]\n >;\n };\n workspaceId: string;\n}): Promise<IssueManagerFileReference[]> {\n return input.fileAdapter.requestReferences({\n workspaceId: input.workspaceId\n });\n}\n\nexport function canIssueManagerUploadReferences(\n fileAdapter: IssueManagerFeature[\"fileAdapter\"]\n): fileAdapter is NonNullable<IssueManagerFeature[\"fileAdapter\"]> & {\n requestUpload: NonNullable<\n NonNullable<IssueManagerFeature[\"fileAdapter\"]>[\"requestUpload\"]\n >;\n} {\n return typeof fileAdapter?.requestUpload === \"function\";\n}\n\nexport function canIssueManagerOpenReferences(\n fileAdapter: IssueManagerFeature[\"fileAdapter\"]\n): fileAdapter is NonNullable<IssueManagerFeature[\"fileAdapter\"]> & {\n openReference: NonNullable<\n NonNullable<IssueManagerFeature[\"fileAdapter\"]>[\"openReference\"]\n >;\n} {\n return typeof fileAdapter?.openReference === \"function\";\n}\n\nexport async function executeIssueManagerUploadReferences(input: {\n fileAdapter: NonNullable<IssueManagerFeature[\"fileAdapter\"]> & {\n requestUpload: NonNullable<\n NonNullable<IssueManagerFeature[\"fileAdapter\"]>[\"requestUpload\"]\n >;\n };\n mode: \"files\" | \"folder\";\n workspaceId: string;\n}): Promise<IssueManagerFileReference[]> {\n const refs = await input.fileAdapter.requestUpload({\n mode: input.mode,\n targetDirectoryPath: \"/\",\n workspaceId: input.workspaceId\n });\n\n if (refs.length === 0) {\n return refs;\n }\n\n await input.fileAdapter.refreshTree?.({\n depth: 1,\n paths: refs.map((ref) => ref.path),\n workspaceId: input.workspaceId\n });\n\n return refs;\n}\n\nexport function resolveIssueManagerReferenceInsertionContent(input: {\n content: string;\n refs: IssueManagerFileReference[];\n}): string {\n const preparedRefs = prepareIssueManagerReferences(input.refs);\n if (preparedRefs.length === 0) {\n return input.content;\n }\n\n return appendIssueManagerWorkspaceFileLinksToContent(\n input.content,\n preparedRefs.map(toIssueManagerWorkspaceFileLinkInput)\n );\n}\n\nexport async function executeIssueManagerAttachReferences(input: {\n backend: IssueManagerFeature[\"backend\"];\n refs: IssueManagerFileReference[];\n selectedIssueId: string | null;\n target: Exclude<IssueManagerReferenceTarget, { mode: \"insert\" }> | null;\n workspaceId: string;\n}): Promise<boolean> {\n const preparedRefs = prepareIssueManagerReferences(input.refs);\n if (!input.target || preparedRefs.length === 0 || !input.selectedIssueId) {\n return false;\n }\n\n await input.backend.addContextRefs(\n input.target.parentKind === \"task\"\n ? {\n issueId: input.selectedIssueId,\n parentKind: \"task\",\n refs: preparedRefs.map(toContextRefInput),\n taskId: input.target.taskId,\n workspaceId: input.workspaceId\n }\n : {\n issueId: input.selectedIssueId,\n parentKind: \"issue\",\n refs: preparedRefs.map(toContextRefInput),\n workspaceId: input.workspaceId\n }\n );\n\n return true;\n}\n\nexport async function executeIssueManagerOpenReference(input: {\n fileAdapter: NonNullable<IssueManagerFeature[\"fileAdapter\"]> & {\n openReference: NonNullable<\n NonNullable<IssueManagerFeature[\"fileAdapter\"]>[\"openReference\"]\n >;\n };\n reference: IssueManagerFileReference;\n}): Promise<void> {\n await input.fileAdapter.openReference(input.reference);\n}\n\nexport async function executeIssueManagerRemoveContextRef(input: {\n backend: IssueManagerFeature[\"backend\"];\n ref: IssueManagerContextRef;\n workspaceId: string;\n}): Promise<void> {\n await input.backend.removeContextRef(\n input.ref.parentKind === \"task\"\n ? {\n contextRefId: input.ref.contextRefId,\n issueId: input.ref.issueId,\n parentKind: \"task\",\n taskId: input.ref.taskId,\n workspaceId: input.workspaceId\n }\n : {\n contextRefId: input.ref.contextRefId,\n issueId: input.ref.issueId,\n parentKind: \"issue\",\n workspaceId: input.workspaceId\n }\n );\n}\n\nfunction prepareIssueManagerReferences(\n refs: IssueManagerFileReference[]\n): IssueManagerFileReference[] {\n return refs.filter((ref) => ref.path.trim().length > 0);\n}\n","import type {\n IssueManagerFileReference,\n IssueManagerNodeState\n} from \"../../../contracts/index.ts\";\nimport type { IssueManagerReferenceTarget } from \"../model.ts\";\nimport type { IssueDraft, TaskDraft } from \"../controllerTypes.ts\";\nimport { resolveIssueManagerReferenceInsertionContent } from \"./controllerReferenceCommands.ts\";\n\nexport interface IssueManagerReferenceOutcome {\n issueDraft?: (current: IssueDraft) => IssueDraft;\n nodeState?: (current: IssueManagerNodeState) => IssueManagerNodeState;\n referenceTarget?: IssueManagerReferenceTarget | null;\n refreshAll?: boolean;\n refreshDetails?: boolean;\n taskDraft?: (current: TaskDraft) => TaskDraft;\n}\n\nexport function createIssueManagerOpenReferencePickerOutcome(\n target: IssueManagerReferenceTarget\n): IssueManagerReferenceOutcome {\n return {\n referenceTarget: target\n };\n}\n\nexport function createIssueManagerAttachReferencesOutcome(\n attached: boolean\n): IssueManagerReferenceOutcome {\n return {\n referenceTarget: null,\n refreshDetails: attached\n };\n}\n\nexport function createIssueManagerInsertReferencesOutcome(input: {\n refs: IssueManagerFileReference[];\n target: Extract<IssueManagerReferenceTarget, { mode: \"insert\" }>;\n}): IssueManagerReferenceOutcome {\n return input.target.parentKind === \"issue\"\n ? {\n issueDraft: (current) => ({\n ...current,\n content: resolveIssueManagerReferenceInsertionContent({\n content: current.content,\n refs: input.refs\n })\n }),\n referenceTarget: null\n }\n : {\n referenceTarget: null,\n taskDraft: (current) => ({\n ...current,\n content: resolveIssueManagerReferenceInsertionContent({\n content: current.content,\n refs: input.refs\n })\n })\n };\n}\n","import type {\n IssueManagerIssueDetail,\n IssueManagerTaskDetail\n} from \"../../contracts/index.ts\";\nimport type { IssueDraft, TaskDraft } from \"./controllerTypes.ts\";\n\nexport type IssueManagerSavePlan<TResult> =\n | {\n kind: \"blocked\";\n notificationKey: \"messages.titleRequired\" | \"messages.topicListEmpty\";\n }\n | ({ kind: \"ready\" } & TResult);\n\nexport function createIssueManagerRunTaskPlan(input: {\n issueDetail: IssueManagerIssueDetail | null;\n providerOverride?: string;\n selectedAgentProvider: string;\n taskDetail: IssueManagerTaskDetail | null;\n}):\n | {\n kind: \"ready\";\n provider: string;\n shouldUpdateSelectedAgentProvider: boolean;\n }\n | { kind: \"skip\" } {\n if (!input.issueDetail) {\n return { kind: \"skip\" };\n }\n\n const provider =\n input.providerOverride?.trim() || input.selectedAgentProvider.trim();\n if (!provider) {\n return { kind: \"skip\" };\n }\n\n return {\n kind: \"ready\",\n provider,\n shouldUpdateSelectedAgentProvider: provider !== input.selectedAgentProvider\n };\n}\n\nexport function createIssueManagerSaveIssuePlan(input: {\n activeTopicId: string | null;\n issueDraft: IssueDraft;\n}): IssueManagerSavePlan<{ activeTopicId: string }> {\n if (!input.activeTopicId) {\n return {\n kind: \"blocked\",\n notificationKey: \"messages.topicListEmpty\"\n };\n }\n\n const title = input.issueDraft.title.trim();\n if (!title) {\n return {\n kind: \"blocked\",\n notificationKey: \"messages.titleRequired\"\n };\n }\n\n return { kind: \"ready\", activeTopicId: input.activeTopicId };\n}\n\nexport function createIssueManagerSaveTaskPlan(input: {\n selectedIssueId: string | null;\n taskDraft: TaskDraft;\n}): IssueManagerSavePlan<{ selectedIssueId: string }> | { kind: \"skip\" } {\n if (!input.selectedIssueId) {\n return { kind: \"skip\" };\n }\n\n const title = input.taskDraft.title.trim();\n if (!title) {\n return {\n kind: \"blocked\",\n notificationKey: \"messages.titleRequired\"\n };\n }\n\n return {\n kind: \"ready\",\n selectedIssueId: input.selectedIssueId\n };\n}\n\nexport function shouldIssueManagerNotifyRunFailure(status: string): boolean {\n return status !== \"completed\";\n}\n","import type {\n IssueManagerEditorMode,\n IssueManagerReferenceTarget\n} from \"../model.ts\";\n\nexport function createIssueManagerAttachReferenceTarget(\n parentKind: \"issue\" | \"task\",\n selectedTaskId: string | null\n): Extract<IssueManagerReferenceTarget, { mode: \"attach\" }> {\n return parentKind === \"task\"\n ? {\n mode: \"attach\",\n parentKind: \"task\",\n taskId: selectedTaskId ?? \"\"\n }\n : {\n mode: \"attach\",\n parentKind: \"issue\"\n };\n}\n\nexport function createIssueManagerInsertReferenceTarget(\n parentKind: \"issue\" | \"task\",\n selectedTaskId: string | null\n): Extract<IssueManagerReferenceTarget, { mode: \"insert\" }> {\n return parentKind === \"task\"\n ? {\n mode: \"insert\",\n parentKind: \"task\",\n taskId: selectedTaskId ?? \"\"\n }\n : {\n mode: \"insert\",\n parentKind: \"issue\"\n };\n}\n\nexport function createIssueManagerAttachReferencesPlan(input: {\n hasFileAdapter: boolean;\n parentKind: \"issue\" | \"task\";\n requestReferencesDirectly: boolean;\n selectedTaskId: string | null;\n}):\n | {\n kind: \"open_picker\";\n target: Extract<IssueManagerReferenceTarget, { mode: \"attach\" }>;\n }\n | {\n kind: \"request_directly\";\n target: Extract<IssueManagerReferenceTarget, { mode: \"attach\" }>;\n }\n | { kind: \"skip\" } {\n if (!input.hasFileAdapter) {\n return { kind: \"skip\" };\n }\n if (input.parentKind === \"task\" && !input.selectedTaskId) {\n return { kind: \"skip\" };\n }\n\n const target = createIssueManagerAttachReferenceTarget(\n input.parentKind,\n input.selectedTaskId\n );\n return input.requestReferencesDirectly\n ? { kind: \"request_directly\", target }\n : { kind: \"open_picker\", target };\n}\n\nexport function createIssueManagerInsertReferencesPlan(input: {\n hasFileAdapter: boolean;\n parentKind: \"issue\" | \"task\";\n requestReferencesDirectly: boolean;\n selectedTaskId: string | null;\n taskEditorMode: IssueManagerEditorMode;\n}):\n | {\n kind: \"open_picker\";\n target: Extract<IssueManagerReferenceTarget, { mode: \"insert\" }>;\n }\n | {\n kind: \"request_directly\";\n target: Extract<IssueManagerReferenceTarget, { mode: \"insert\" }>;\n }\n | { kind: \"skip\" } {\n if (!input.hasFileAdapter) {\n return { kind: \"skip\" };\n }\n if (\n input.parentKind === \"task\" &&\n !input.selectedTaskId &&\n input.taskEditorMode !== \"create\"\n ) {\n return { kind: \"skip\" };\n }\n\n const target = createIssueManagerInsertReferenceTarget(\n input.parentKind,\n input.selectedTaskId\n );\n return input.requestReferencesDirectly\n ? { kind: \"request_directly\", target }\n : { kind: \"open_picker\", target };\n}\n","import type {\n IssueManagerIssueDetail,\n IssueManagerTaskDetail\n} from \"../../../contracts/index.ts\";\nimport type { IssueManagerFeature } from \"../../../core/index.ts\";\n\nexport async function executeIssueManagerRunTask(input: {\n executionDirectory?: string | null;\n feature: IssueManagerFeature;\n issue: IssueManagerIssueDetail[\"issue\"];\n provider: string;\n task?: IssueManagerTaskDetail[\"task\"];\n workspaceId: string;\n}): Promise<{ errorMessage?: string; status: string }> {\n const agentSessionId = createIssueManagerAgentSessionId();\n const result = await input.feature.agentRunner.runTask({\n agentSessionId,\n ...(input.executionDirectory?.trim()\n ? { executionDirectory: input.executionDirectory.trim() }\n : {}),\n issue: input.issue,\n provider: input.provider,\n ...(input.task ? { task: input.task } : {}),\n workspaceId: input.workspaceId\n });\n\n return {\n ...(result.errorMessage?.trim()\n ? { errorMessage: result.errorMessage.trim() }\n : {}),\n status: result.status\n };\n}\n\nfunction createIssueManagerAgentSessionId(): string {\n const randomUUID = globalThis.crypto?.randomUUID?.();\n if (randomUUID) {\n return randomUUID;\n }\n const bytes = new Uint8Array(16);\n const crypto = globalThis.crypto;\n if (crypto?.getRandomValues) {\n crypto.getRandomValues(bytes);\n } else {\n for (let index = 0; index < bytes.length; index += 1) {\n bytes[index] = Math.floor(Math.random() * 256);\n }\n }\n bytes[6] = ((bytes[6] ?? 0) & 0x0f) | 0x40;\n bytes[8] = ((bytes[8] ?? 0) & 0x3f) | 0x80;\n const hex = Array.from(bytes, (byte) =>\n byte.toString(16).padStart(2, \"0\")\n ).join(\"\");\n return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;\n}\n","import type {\n IssueManagerContextRef,\n IssueManagerFileReference,\n IssueManagerIssueDetail,\n IssueManagerIssueSummary,\n IssueManagerTaskDetail,\n IssueManagerTaskSummary\n} from \"../../../contracts/index.ts\";\nimport {\n extractIssueManagerWorkspaceFileLinksFromContent,\n normalizeIssueManagerContent,\n type IssueManagerFeature\n} from \"../../../core/index.ts\";\nimport type { IssueManagerEditorMode } from \"../model.ts\";\nimport type { IssueDraft, TaskDraft } from \"../controllerTypes.ts\";\n\nexport async function executeIssueManagerSaveIssue(input: {\n activeTopicId: string;\n feature: IssueManagerFeature;\n issueDetail: IssueManagerIssueDetail | null;\n issueDraft: IssueDraft;\n issueEditorMode: IssueManagerEditorMode;\n selectedIssueId: string | null;\n workspaceId: string;\n}): Promise<{\n addedContextRefs: IssueManagerFileReference[];\n content: string;\n removedContextRefs: IssueManagerContextRef[];\n savedIssue: IssueManagerIssueSummary;\n}> {\n const content = normalizeIssueManagerContent(input.issueDraft.content);\n const savedIssue =\n input.issueEditorMode === \"create\"\n ? await input.feature.backend.createIssue({\n content,\n title: input.issueDraft.title.trim(),\n topicId: input.activeTopicId,\n workspaceId: input.workspaceId\n })\n : await input.feature.backend.updateIssue({\n content,\n issueId: input.selectedIssueId ?? \"\",\n title: input.issueDraft.title.trim(),\n workspaceId: input.workspaceId\n });\n\n const { addedContextRefs, removedContextRefs } =\n await syncIssueManagerContentReferences({\n backend: input.feature.backend,\n content,\n existingRefs:\n input.issueEditorMode === \"create\"\n ? []\n : (input.issueDetail?.contextRefs.filter(\n (ref) => ref.parentKind === \"issue\"\n ) ?? []),\n issueId: savedIssue.issueId,\n parentKind: \"issue\",\n previousContent:\n input.issueEditorMode === \"create\"\n ? \"\"\n : (input.issueDetail?.issue.content ?? \"\"),\n workspaceId: input.workspaceId\n });\n\n return {\n addedContextRefs,\n content,\n removedContextRefs,\n savedIssue\n };\n}\n\nexport async function executeIssueManagerSaveTask(input: {\n feature: IssueManagerFeature;\n selectedIssueId: string;\n selectedTaskId: string | null;\n taskDetail: IssueManagerTaskDetail | null;\n taskDraft: TaskDraft;\n taskEditorMode: IssueManagerEditorMode;\n workspaceId: string;\n}): Promise<{\n addedContextRefs: IssueManagerFileReference[];\n content: string;\n removedContextRefs: IssueManagerContextRef[];\n savedTask: IssueManagerTaskSummary;\n}> {\n const content = normalizeIssueManagerContent(input.taskDraft.content);\n const savedTask =\n input.taskEditorMode === \"create\"\n ? await input.feature.backend.createTask({\n content,\n issueId: input.selectedIssueId,\n priority: input.taskDraft.priority,\n title: input.taskDraft.title.trim(),\n workspaceId: input.workspaceId\n })\n : await input.feature.backend.updateTask({\n content,\n issueId: input.selectedIssueId,\n priority: input.taskDraft.priority,\n taskId: input.selectedTaskId ?? \"\",\n title: input.taskDraft.title.trim(),\n workspaceId: input.workspaceId\n });\n\n const { addedContextRefs, removedContextRefs } =\n await syncIssueManagerContentReferences({\n backend: input.feature.backend,\n content,\n existingRefs:\n input.taskEditorMode === \"create\"\n ? []\n : (input.taskDetail?.contextRefs.filter(\n (ref) => ref.parentKind === \"task\"\n ) ?? []),\n issueId: input.selectedIssueId,\n parentKind: \"task\",\n previousContent:\n input.taskEditorMode === \"create\"\n ? \"\"\n : (input.taskDetail?.task.content ?? \"\"),\n taskId: savedTask.taskId,\n workspaceId: input.workspaceId\n });\n\n return {\n addedContextRefs,\n content,\n removedContextRefs,\n savedTask\n };\n}\n\ninterface IssueManagerContentReferenceSyncResult {\n addedContextRefs: IssueManagerFileReference[];\n removedContextRefs: IssueManagerContextRef[];\n}\n\nasync function syncIssueManagerContentReferences(input: {\n backend: IssueManagerFeature[\"backend\"];\n content: string;\n existingRefs: IssueManagerContextRef[];\n issueId: string;\n parentKind: \"issue\" | \"task\";\n previousContent: string;\n taskId?: string;\n workspaceId: string;\n}): Promise<IssueManagerContentReferenceSyncResult> {\n const existingPaths = new Set(\n input.existingRefs\n .map((ref) => ref.path.trim())\n .filter((path) => path.length > 0)\n );\n const contentRefs = extractIssueManagerWorkspaceFileLinksFromContent(\n input.content\n );\n const contentPaths = new Set(\n contentRefs.map((ref) => ref.path.trim()).filter((path) => path.length > 0)\n );\n const previousContentPaths = new Set(\n extractIssueManagerWorkspaceFileLinksFromContent(input.previousContent)\n .map((ref) => ref.path.trim())\n .filter((path) => path.length > 0)\n );\n const addedContextRefs = contentRefs.filter((ref) => {\n const path = ref.path.trim();\n return path.length > 0 && !existingPaths.has(path);\n });\n const removedContextRefs = input.existingRefs.filter((ref) => {\n const path = ref.path.trim();\n return previousContentPaths.has(path) && !contentPaths.has(path);\n });\n const missingRefs = addedContextRefs.map((ref) => ({\n displayName: ref.name,\n path: ref.path,\n refType: ref.kind\n }));\n\n if (missingRefs.length > 0) {\n await input.backend.addContextRefs(\n input.parentKind === \"task\"\n ? {\n issueId: input.issueId,\n parentKind: \"task\",\n refs: missingRefs,\n taskId: input.taskId ?? \"\",\n workspaceId: input.workspaceId\n }\n : {\n issueId: input.issueId,\n parentKind: \"issue\",\n refs: missingRefs,\n workspaceId: input.workspaceId\n }\n );\n }\n\n for (const ref of removedContextRefs) {\n await input.backend.removeContextRef(\n ref.parentKind === \"task\"\n ? {\n contextRefId: ref.contextRefId,\n issueId: ref.issueId,\n parentKind: \"task\",\n taskId: ref.taskId,\n workspaceId: input.workspaceId\n }\n : {\n contextRefId: ref.contextRefId,\n issueId: ref.issueId,\n parentKind: \"issue\",\n workspaceId: input.workspaceId\n }\n );\n }\n\n return {\n addedContextRefs: addedContextRefs.map((ref) => ({\n displayName: ref.name,\n kind: ref.kind,\n path: ref.path\n })),\n removedContextRefs\n };\n}\n","import type { IssueManagerFeature } from \"../../../core/index.ts\";\n\nexport function canIssueManagerCreateShareLink(\n shareAdapter: IssueManagerFeature[\"shareAdapter\"]\n): shareAdapter is NonNullable<IssueManagerFeature[\"shareAdapter\"]> & {\n createIssueLink: NonNullable<\n NonNullable<IssueManagerFeature[\"shareAdapter\"]>[\"createIssueLink\"]\n >;\n} {\n return typeof shareAdapter?.createIssueLink === \"function\";\n}\n\nexport async function executeIssueManagerShareSelection(input: {\n issueId: string;\n shareAdapter: NonNullable<IssueManagerFeature[\"shareAdapter\"]> & {\n createIssueLink: NonNullable<\n NonNullable<IssueManagerFeature[\"shareAdapter\"]>[\"createIssueLink\"]\n >;\n };\n taskId: string | null;\n workspaceId: string;\n}): Promise<void> {\n const link = await input.shareAdapter.createIssueLink({\n issueId: input.issueId,\n taskId: input.taskId ?? undefined,\n workspaceId: input.workspaceId\n });\n if (typeof navigator === \"undefined\" || !navigator.clipboard?.writeText) {\n throw new Error(\"issue_manager.clipboard_unavailable\");\n }\n await navigator.clipboard.writeText(link);\n}\n","import type { IssueManagerFileReference } from \"../../contracts/index.ts\";\nimport {\n extractIssueManagerWorkspaceFileLinksFromContent,\n type IssueManagerFeature\n} from \"../../core/index.ts\";\n\nexport function trackIssueManagerAnalytics(\n feature: IssueManagerFeature,\n event: Parameters<NonNullable<IssueManagerFeature[\"analytics\"]>[\"track\"]>[0]\n): void {\n void Promise.resolve(feature.analytics?.track(event)).catch(() => undefined);\n}\n\nexport function trackIssueManagerContextRefsAdded(input: {\n feature: IssueManagerFeature;\n refs: readonly IssueManagerFileReference[];\n targetType: \"issue\" | \"task\";\n}): void {\n const seen = new Set<string>();\n for (const ref of input.refs) {\n const path = ref.path.trim();\n if (!path || seen.has(path)) {\n continue;\n }\n seen.add(path);\n trackIssueManagerAnalytics(input.feature, {\n name: \"issue_manager.context_ref_added\",\n params: {\n refType: issueManagerAnalyticsRefType(ref.kind),\n targetType: input.targetType\n }\n });\n }\n}\n\nexport function trackIssueManagerContentReferenceChanges(input: {\n feature: IssueManagerFeature;\n nextContent: string;\n previousContent: string;\n targetType: \"issue\" | \"task\";\n}): void {\n const previousRefs = extractIssueManagerWorkspaceFileLinksFromContent(\n input.previousContent\n );\n const nextRefs = extractIssueManagerWorkspaceFileLinksFromContent(\n input.nextContent\n );\n const previousPaths = new Set(\n previousRefs.map((ref) => ref.path.trim()).filter(Boolean)\n );\n const nextPaths = new Set(\n nextRefs.map((ref) => ref.path.trim()).filter(Boolean)\n );\n\n trackIssueManagerContextRefsAdded({\n feature: input.feature,\n refs: nextRefs.filter((ref) => !previousPaths.has(ref.path.trim())),\n targetType: input.targetType\n });\n\n for (const path of previousPaths) {\n if (nextPaths.has(path)) {\n continue;\n }\n trackIssueManagerAnalytics(input.feature, {\n name: \"issue_manager.context_ref_removed\",\n params: {\n targetType: input.targetType\n }\n });\n }\n}\n\nfunction issueManagerAnalyticsRefType(\n kind: IssueManagerFileReference[\"kind\"]\n): \"directory\" | \"file\" | \"upload\" {\n return kind === \"folder\" ? \"directory\" : \"file\";\n}\n","import type { Dispatch, SetStateAction } from \"react\";\nimport type {\n IssueManagerContextRef,\n IssueManagerFileReference,\n IssueManagerIssueDetail,\n IssueManagerRun,\n IssueManagerNodeState,\n IssueManagerTaskDetail\n} from \"../../contracts/index.ts\";\nimport {\n extractIssueManagerWorkspaceFileLinksFromContent,\n type IssueManagerFeature\n} from \"../../core/index.ts\";\nimport type { IssueManagerI18nRuntime } from \"../../i18n/issueManagerI18n.ts\";\nimport type {\n IssueManagerEditorMode,\n IssueManagerReferenceTarget\n} from \"./model.ts\";\nimport {\n applyIssueManagerControllerOutcome,\n createIssueManagerRunTaskSuccessOutcome,\n createIssueManagerSaveIssueSuccessOutcome,\n createIssueManagerSaveTaskSuccessOutcome,\n type IssueManagerControllerOutcome\n} from \"./controllerOutcomes.ts\";\nimport {\n createIssueManagerAttachReferencesOutcome,\n createIssueManagerInsertReferencesOutcome,\n createIssueManagerOpenReferencePickerOutcome\n} from \"./reference/controllerReferenceOutcomes.ts\";\nimport {\n createIssueManagerRunTaskPlan,\n createIssueManagerSaveIssuePlan,\n createIssueManagerSaveTaskPlan\n} from \"./controllerPlans.ts\";\nimport {\n createIssueManagerAttachReferencesPlan,\n createIssueManagerInsertReferenceTarget,\n createIssueManagerInsertReferencesPlan\n} from \"./reference/controllerReferencePlans.ts\";\nimport {\n canIssueManagerOpenReferences,\n canIssueManagerRequestReferencesDirectly,\n canIssueManagerUploadReferences,\n executeIssueManagerAttachReferences,\n executeIssueManagerOpenReference,\n executeIssueManagerRequestReferences,\n executeIssueManagerRemoveContextRef,\n executeIssueManagerUploadReferences\n} from \"./reference/controllerReferenceCommands.ts\";\nimport { executeIssueManagerRunTask } from \"./run/controllerRunCommands.ts\";\nimport {\n executeIssueManagerSaveIssue,\n executeIssueManagerSaveTask\n} from \"./save/controllerSaveCommands.ts\";\nimport {\n canIssueManagerCreateShareLink,\n executeIssueManagerShareSelection\n} from \"./share/controllerShareCommands.ts\";\nimport type {\n IssueDraft,\n IssueManagerNotificationTone,\n TaskDraft\n} from \"./controllerTypes.ts\";\nimport {\n confirmIssueManagerMessage,\n defaultTaskPriority,\n resolveIssueManagerErrorMessage\n} from \"./controllerUtils.ts\";\nimport {\n applyIssueManagerIssueDeleted,\n applyIssueManagerSelectedAgentProvider,\n applyIssueManagerSelectedExecutionDirectory,\n applyIssueManagerTaskDeleted\n} from \"./controllerState.ts\";\nimport {\n trackIssueManagerAnalytics,\n trackIssueManagerContextRefsAdded\n} from \"./controllerAnalytics.ts\";\n\ninterface CreateIssueManagerControllerActionsInput {\n copy: IssueManagerI18nRuntime;\n feature: IssueManagerFeature;\n issueDetail: {\n value: IssueManagerIssueDetail | null;\n };\n issueDraft: IssueDraft;\n issueEditorMode: IssueManagerEditorMode;\n nodeState: IssueManagerNodeState;\n referenceTarget: IssueManagerReferenceTarget | null;\n refreshAll: () => void;\n refreshDetails: () => void;\n setNotification: (input: {\n title: string;\n tone?: IssueManagerNotificationTone;\n }) => void;\n setIsRunningTask: Dispatch<SetStateAction<boolean>>;\n setIssueDraftInternal: Dispatch<SetStateAction<IssueDraft>>;\n setIssueEditorModeState: Dispatch<SetStateAction<IssueManagerEditorMode>>;\n setReferenceTarget: Dispatch<\n SetStateAction<IssueManagerReferenceTarget | null>\n >;\n setTaskDraftInternal: Dispatch<SetStateAction<TaskDraft>>;\n setTaskEditorModeState: Dispatch<SetStateAction<IssueManagerEditorMode>>;\n taskDetail: {\n value: IssueManagerTaskDetail | null;\n };\n taskDraft: TaskDraft;\n taskEditorMode: IssueManagerEditorMode;\n updateNodeState: (\n updater:\n | Partial<IssueManagerNodeState>\n | ((current: IssueManagerNodeState) => IssueManagerNodeState)\n ) => void;\n workspaceId: string;\n}\n\ninterface IssueManagerDeleteOptions {\n skipConfirmation?: boolean;\n}\n\nexport type { IssueManagerDeleteOptions };\n\nexport function createIssueManagerControllerActions(\n input: CreateIssueManagerControllerActionsInput\n) {\n const {\n copy,\n feature,\n issueDetail,\n issueDraft,\n issueEditorMode,\n nodeState,\n referenceTarget,\n refreshAll,\n refreshDetails,\n setNotification,\n setIsRunningTask,\n setIssueDraftInternal,\n setIssueEditorModeState,\n setReferenceTarget,\n setTaskDraftInternal,\n setTaskEditorModeState,\n taskDetail,\n taskDraft,\n taskEditorMode,\n updateNodeState,\n workspaceId\n } = input;\n\n const notifyTip = (\n message: string,\n tone: IssueManagerNotificationTone = \"destructive\"\n ) => {\n setNotification({\n title: message,\n tone\n });\n };\n\n const notifyError = (error: unknown, fallbackKey: string) => {\n setNotification({\n title: resolveIssueManagerErrorMessage(error, copy, fallbackKey),\n tone: \"destructive\"\n });\n };\n\n const applyOutcome = (outcome: IssueManagerControllerOutcome) => {\n applyIssueManagerControllerOutcome({\n notify: notifyTip,\n outcome,\n refreshAll,\n refreshDetails,\n setIssueDraftInternal,\n setIssueEditorModeState,\n setReferenceTarget: (target) => setReferenceTarget(target),\n setTaskDraftInternal,\n setTaskEditorModeState,\n translate: (key) => copy.t(key),\n updateNodeState\n });\n };\n\n const submitReferences = async (\n refs: IssueManagerFileReference[],\n target: IssueManagerReferenceTarget | null = referenceTarget\n ) => {\n if (!target) {\n applyOutcome({\n referenceTarget: null\n });\n return;\n }\n\n if (target.mode === \"insert\") {\n applyOutcome(\n createIssueManagerInsertReferencesOutcome({\n refs,\n target\n })\n );\n trackIssueManagerContextRefsAdded({\n feature,\n refs,\n targetType: target.parentKind\n });\n return;\n }\n\n const attached = await executeIssueManagerAttachReferences({\n backend: feature.backend,\n refs,\n selectedIssueId: nodeState.selectedIssueId,\n target,\n workspaceId\n });\n if (attached) {\n trackIssueManagerContextRefsAdded({\n feature,\n refs,\n targetType: target.parentKind\n });\n }\n applyOutcome(createIssueManagerAttachReferencesOutcome(attached));\n };\n\n const updateTaskStatus = async (\n taskId: string | null | undefined,\n status: \"completed\" | \"not_started\",\n options: { selectTaskOnSuccess: boolean }\n ) => {\n const selectedIssueId = nodeState.selectedIssueId;\n const normalizedTaskId = taskId?.trim() ?? \"\";\n if (!selectedIssueId || !normalizedTaskId) {\n return;\n }\n\n try {\n const task = await feature.backend.updateTask({\n issueId: selectedIssueId,\n status,\n taskId: normalizedTaskId,\n workspaceId\n });\n applyOutcome(\n options.selectTaskOnSuccess\n ? createIssueManagerSaveTaskSuccessOutcome(task.taskId)\n : {\n refreshAll: true\n }\n );\n } catch (error) {\n notifyError(error, \"messages.taskSaveFailed\");\n }\n };\n\n return {\n async attachReferences(parentKind: \"issue\" | \"task\") {\n const fileAdapter = feature.fileAdapter;\n const attachPlan = createIssueManagerAttachReferencesPlan({\n hasFileAdapter: Boolean(fileAdapter),\n parentKind,\n requestReferencesDirectly:\n canIssueManagerRequestReferencesDirectly(fileAdapter),\n selectedTaskId: nodeState.selectedTaskId\n });\n if (attachPlan.kind === \"skip\") {\n return;\n }\n if (attachPlan.kind === \"request_directly\") {\n if (!canIssueManagerRequestReferencesDirectly(fileAdapter)) {\n return;\n }\n const refs = await executeIssueManagerRequestReferences({\n fileAdapter,\n workspaceId\n });\n await submitReferences(refs, attachPlan.target);\n return;\n }\n\n applyOutcome(\n createIssueManagerOpenReferencePickerOutcome(attachPlan.target)\n );\n },\n\n createTaskDraft() {\n setTaskEditorModeState(\"create\");\n setTaskDraftInternal({\n content: nodeState.taskDraftContent ?? \"\",\n priority: defaultTaskPriority,\n title: nodeState.taskDraftTitle ?? \"\"\n });\n updateNodeState((current) => ({\n ...current,\n selectedTaskId: null\n }));\n },\n\n async deleteIssue(options?: IssueManagerDeleteOptions) {\n const selectedIssueId = nodeState.selectedIssueId;\n if (\n !selectedIssueId ||\n (options?.skipConfirmation !== true &&\n !confirmIssueManagerMessage(copy.t(\"confirmations.deleteIssue\")))\n ) {\n return;\n }\n try {\n await feature.backend.deleteIssue({\n issueId: selectedIssueId,\n workspaceId\n });\n trackIssueManagerAnalytics(feature, {\n name: \"issue_manager.issue_deleted\",\n params: { issueId: selectedIssueId }\n });\n setIssueEditorModeState(\"read\");\n setTaskEditorModeState(\"read\");\n updateNodeState((current) => applyIssueManagerIssueDeleted(current));\n refreshAll();\n } catch (error) {\n notifyError(error, \"messages.issueDeleteFailed\");\n }\n },\n\n async deleteTask(options?: IssueManagerDeleteOptions) {\n const selectedIssueId = nodeState.selectedIssueId;\n const selectedTaskId = nodeState.selectedTaskId;\n if (\n !selectedIssueId ||\n !selectedTaskId ||\n (options?.skipConfirmation !== true &&\n !confirmIssueManagerMessage(copy.t(\"confirmations.deleteTask\")))\n ) {\n return;\n }\n\n try {\n await feature.backend.deleteTask({\n issueId: selectedIssueId,\n taskId: selectedTaskId,\n workspaceId\n });\n trackIssueManagerAnalytics(feature, {\n name: \"issue_manager.task_deleted\",\n params: { issueId: selectedIssueId, taskId: selectedTaskId }\n });\n setTaskEditorModeState(\"read\");\n updateNodeState((current) => applyIssueManagerTaskDeleted(current));\n refreshAll();\n } catch (error) {\n notifyError(error, \"messages.taskDeleteFailed\");\n }\n },\n\n async insertReferences(parentKind: \"issue\" | \"task\") {\n const fileAdapter = feature.fileAdapter;\n const insertPlan = createIssueManagerInsertReferencesPlan({\n hasFileAdapter: Boolean(fileAdapter),\n parentKind,\n requestReferencesDirectly:\n canIssueManagerRequestReferencesDirectly(fileAdapter),\n selectedTaskId: nodeState.selectedTaskId,\n taskEditorMode\n });\n if (insertPlan.kind === \"skip\") {\n return;\n }\n if (insertPlan.kind === \"request_directly\") {\n if (!canIssueManagerRequestReferencesDirectly(fileAdapter)) {\n return;\n }\n const refs = await executeIssueManagerRequestReferences({\n fileAdapter,\n workspaceId\n });\n await submitReferences(refs, insertPlan.target);\n return;\n }\n\n applyOutcome(\n createIssueManagerOpenReferencePickerOutcome(insertPlan.target)\n );\n },\n\n async uploadReferences(\n parentKind: \"issue\" | \"task\",\n mode: \"files\" | \"folder\"\n ) {\n const fileAdapter = feature.fileAdapter;\n if (!canIssueManagerUploadReferences(fileAdapter)) {\n return;\n }\n\n const refs = await executeIssueManagerUploadReferences({\n fileAdapter,\n mode,\n workspaceId\n });\n if (refs.length === 0) {\n return;\n }\n await submitReferences(\n refs,\n createIssueManagerInsertReferenceTarget(\n parentKind,\n nodeState.selectedTaskId\n )\n );\n },\n\n async openReference(reference: IssueManagerFileReference) {\n const fileAdapter = feature.fileAdapter;\n if (!canIssueManagerOpenReferences(fileAdapter)) {\n return;\n }\n\n await executeIssueManagerOpenReference({\n fileAdapter,\n reference\n });\n },\n\n async openAgentSession(run: IssueManagerRun) {\n const agentSessionId = run.agentSessionId?.trim() ?? \"\";\n if (!agentSessionId || !feature.agentSessionOpener?.openSession) {\n return;\n }\n\n try {\n await feature.agentSessionOpener.openSession({\n agentSessionId,\n provider: run.agentProvider,\n workspaceId\n });\n } catch (error) {\n notifyTip(\n resolveIssueManagerErrorMessage(\n error,\n copy,\n \"messages.agentSessionOpenFailed\"\n )\n );\n }\n },\n\n async removeContextRef(ref: IssueManagerContextRef) {\n try {\n await executeIssueManagerRemoveContextRef({\n backend: feature.backend,\n ref,\n workspaceId\n });\n trackIssueManagerAnalytics(feature, {\n name: \"issue_manager.context_ref_removed\",\n params: {\n targetType: ref.parentKind\n }\n });\n refreshDetails();\n } catch (error) {\n notifyError(error, \"messages.referenceRemoveFailed\");\n }\n },\n\n async useExecutionDirectory(path: string | null) {\n const executionDirectory = path?.trim() || null;\n updateNodeState((current) =>\n applyIssueManagerSelectedExecutionDirectory(current, executionDirectory)\n );\n if (!executionDirectory) {\n return;\n }\n\n try {\n await feature.executionDirectoryPicker?.use?.({\n path: executionDirectory\n });\n } catch {\n // The selected directory is still valid even if recency tracking fails.\n }\n },\n\n async runTask(providerOverride?: string) {\n const runPlan = createIssueManagerRunTaskPlan({\n issueDetail: issueDetail.value,\n providerOverride,\n selectedAgentProvider: nodeState.selectedAgentProvider,\n taskDetail: taskDetail.value\n });\n if (runPlan.kind !== \"ready\") {\n return;\n }\n const currentIssueDetail = issueDetail.value;\n const currentTaskDetail = taskDetail.value;\n if (!currentIssueDetail) {\n return;\n }\n if (runPlan.shouldUpdateSelectedAgentProvider) {\n updateNodeState((current) =>\n applyIssueManagerSelectedAgentProvider(current, runPlan.provider)\n );\n }\n\n setIsRunningTask(true);\n try {\n trackIssueManagerAnalytics(feature, {\n name: \"issue_manager.task_run_initiated\",\n params: {\n hasExecutionDirectory: Boolean(\n nodeState.selectedExecutionDirectory?.trim()\n ),\n issueId: currentIssueDetail.issue.issueId,\n provider: runPlan.provider,\n taskId: currentTaskDetail?.task.taskId ?? null\n }\n });\n const result = await executeIssueManagerRunTask({\n feature,\n issue: currentIssueDetail.issue,\n provider: runPlan.provider,\n executionDirectory: nodeState.selectedExecutionDirectory,\n task: currentTaskDetail?.task,\n workspaceId\n });\n const outcome = createIssueManagerRunTaskSuccessOutcome({\n status: result.status\n });\n if (outcome.notificationKey && result.errorMessage?.trim()) {\n notifyTip(result.errorMessage.trim());\n } else {\n applyOutcome(outcome);\n }\n } catch (error) {\n notifyTip(\n resolveIssueManagerErrorMessage(error, copy, \"messages.runFailed\")\n );\n } finally {\n setIsRunningTask(false);\n refreshDetails();\n }\n },\n\n async startTaskBreakdown(providerOverride?: string) {\n const breakdownPlan = createIssueManagerRunTaskPlan({\n issueDetail: issueDetail.value,\n providerOverride,\n selectedAgentProvider: nodeState.selectedAgentProvider,\n taskDetail: taskDetail.value\n });\n if (breakdownPlan.kind !== \"ready\") {\n return;\n }\n const currentIssueDetail = issueDetail.value;\n if (!currentIssueDetail) {\n return;\n }\n const breakdownLauncher = feature.agentBreakdownLauncher;\n if (!breakdownLauncher) {\n notifyTip(copy.t(\"messages.breakdownUnavailable\"));\n return;\n }\n if (breakdownPlan.shouldUpdateSelectedAgentProvider) {\n updateNodeState((current) =>\n applyIssueManagerSelectedAgentProvider(\n current,\n breakdownPlan.provider\n )\n );\n }\n\n setIsRunningTask(true);\n try {\n trackIssueManagerAnalytics(feature, {\n name: \"issue_manager.issue_breakdown_initiated\",\n params: {\n issueId: currentIssueDetail.issue.issueId,\n provider: breakdownPlan.provider\n }\n });\n const result = await breakdownLauncher.startBreakdown({\n ...(nodeState.selectedExecutionDirectory?.trim()\n ? {\n executionDirectory: nodeState.selectedExecutionDirectory.trim()\n }\n : {}),\n issueDetail: currentIssueDetail,\n provider: breakdownPlan.provider,\n workspaceId\n });\n if (result.status === \"failed\") {\n notifyTip(\n result.errorMessage || copy.t(\"messages.breakdownOpenFailed\")\n );\n }\n } catch (error) {\n notifyTip(\n resolveIssueManagerErrorMessage(\n error,\n copy,\n \"messages.breakdownOpenFailed\"\n )\n );\n } finally {\n setIsRunningTask(false);\n }\n },\n\n async saveIssue() {\n const savePlan = createIssueManagerSaveIssuePlan({\n activeTopicId: nodeState.activeTopicId ?? null,\n issueDraft\n });\n if (savePlan.kind === \"blocked\") {\n notifyTip(copy.t(savePlan.notificationKey));\n return;\n }\n\n try {\n const wasCreate = issueEditorMode === \"create\";\n const { content, removedContextRefs, savedIssue } =\n await executeIssueManagerSaveIssue({\n activeTopicId: savePlan.activeTopicId,\n feature,\n issueDetail: issueDetail.value,\n issueDraft,\n issueEditorMode,\n selectedIssueId: nodeState.selectedIssueId,\n workspaceId\n });\n if (wasCreate) {\n trackIssueManagerAnalytics(feature, {\n name: \"issue_manager.issue_created\",\n params: { issueId: savedIssue.issueId }\n });\n } else {\n trackIssueManagerAnalytics(feature, {\n name: \"issue_manager.issue_saved\",\n params: {\n contextRefCount: countIssueManagerContextRefs({\n content,\n refs: removeIssueManagerContextRefsFromCount(\n issueDetail.value?.contextRefs.filter(\n (ref) => ref.parentKind === \"issue\"\n ),\n removedContextRefs\n )\n }),\n hasDescription: hasIssueManagerDescription(content),\n issueId: savedIssue.issueId,\n taskCount: issueDetail.value?.tasks.length ?? 0\n }\n });\n }\n const outcome = createIssueManagerSaveIssueSuccessOutcome(\n savedIssue.issueId\n );\n applyOutcome(outcome);\n } catch (error) {\n notifyError(error, \"messages.issueSaveFailed\");\n }\n },\n\n async saveTask() {\n const savePlan = createIssueManagerSaveTaskPlan({\n selectedIssueId: nodeState.selectedIssueId,\n taskDraft\n });\n if (savePlan.kind === \"skip\") {\n return;\n }\n if (savePlan.kind === \"blocked\") {\n notifyTip(copy.t(savePlan.notificationKey));\n return;\n }\n\n try {\n const wasCreate = taskEditorMode === \"create\";\n const { content, removedContextRefs, savedTask } =\n await executeIssueManagerSaveTask({\n feature,\n selectedIssueId: savePlan.selectedIssueId,\n selectedTaskId: nodeState.selectedTaskId,\n taskDetail: taskDetail.value,\n taskDraft,\n taskEditorMode,\n workspaceId\n });\n if (wasCreate) {\n trackIssueManagerAnalytics(feature, {\n name: \"issue_manager.task_created\",\n params: {\n issueId: savePlan.selectedIssueId,\n taskId: savedTask.taskId\n }\n });\n } else {\n trackIssueManagerAnalytics(feature, {\n name: \"issue_manager.task_saved\",\n params: {\n contextRefCount: countIssueManagerContextRefs({\n content,\n refs: removeIssueManagerContextRefsFromCount(\n taskDetail.value?.contextRefs.filter(\n (ref) => ref.parentKind === \"task\"\n ),\n removedContextRefs\n )\n }),\n hasDescription: hasIssueManagerDescription(content),\n issueId: savePlan.selectedIssueId,\n taskId: savedTask.taskId\n }\n });\n }\n const outcome = createIssueManagerSaveTaskSuccessOutcome(\n savedTask.taskId\n );\n applyOutcome(outcome);\n } catch (error) {\n notifyError(error, \"messages.taskSaveFailed\");\n }\n },\n\n async setTaskStatus(taskId: string, status: \"completed\" | \"not_started\") {\n await updateTaskStatus(taskId, status, { selectTaskOnSuccess: false });\n },\n\n async setSelectedTaskStatus(status: \"completed\" | \"not_started\") {\n await updateTaskStatus(nodeState.selectedTaskId, status, {\n selectTaskOnSuccess: true\n });\n },\n\n async shareSelection() {\n const selectedIssueId = nodeState.selectedIssueId;\n const shareAdapter = feature.shareAdapter;\n if (!canIssueManagerCreateShareLink(shareAdapter) || !selectedIssueId) {\n return;\n }\n\n try {\n await executeIssueManagerShareSelection({\n issueId: selectedIssueId,\n shareAdapter,\n taskId: nodeState.selectedTaskId,\n workspaceId\n });\n } catch (error) {\n notifyError(error, \"messages.copyShareLinkFailed\");\n }\n },\n\n async submitReferenceSelection(refs: IssueManagerFileReference[]) {\n await submitReferences(refs);\n }\n };\n}\n\nfunction hasIssueManagerDescription(content: string): boolean {\n return content.trim().length > 0;\n}\n\nfunction countIssueManagerContextRefs(input: {\n content: string;\n refs?: readonly { path: string }[];\n}): number {\n const paths = new Set<string>();\n for (const ref of input.refs ?? []) {\n const path = ref.path.trim();\n if (path) {\n paths.add(path);\n }\n }\n for (const ref of extractIssueManagerWorkspaceFileLinksFromContent(\n input.content\n )) {\n const path = ref.path.trim();\n if (path) {\n paths.add(path);\n }\n }\n return paths.size;\n}\n\nfunction removeIssueManagerContextRefsFromCount<\n T extends { contextRefId: string }\n>(\n refs: readonly T[] | undefined,\n removedRefs: readonly { contextRefId: string }[]\n): T[] {\n if (!refs?.length || removedRefs.length === 0) {\n return [...(refs ?? [])];\n }\n const removedIDs = new Set(removedRefs.map((ref) => ref.contextRefId));\n return refs.filter((ref) => !removedIDs.has(ref.contextRefId));\n}\n","import type { IssueManagerFeature } from \"../../../../core/index.ts\";\nimport type { IssueManagerI18nRuntime } from \"../../../../i18n/issueManagerI18n.ts\";\nimport type { IssueManagerControllerSession } from \"../../../../services/issueManagerControllerService.interface.ts\";\nimport { createIssueManagerControllerActions } from \"../../../../services/internal/controllerActions.ts\";\nimport type {\n IssueDraft,\n IssueManagerNotificationState,\n TaskDraft\n} from \"../../../../services/controllerTypes.ts\";\nimport type {\n IssueManagerEditorMode,\n IssueManagerReferenceTarget\n} from \"../../../../services/controllerModel.ts\";\nimport type {\n IssueManagerIssueDetail,\n IssueManagerNodeState,\n IssueManagerTaskDetail\n} from \"../../../../contracts/index.ts\";\nimport {\n logIssueManagerDiagnostic,\n type IssueManagerDiagnostics\n} from \"../../../../internal/issueManagerDiagnostics.ts\";\n\nexport function createIssueManagerControllerActionsBridge(input: {\n controllerSession: IssueManagerControllerSession;\n copy: IssueManagerI18nRuntime;\n diagnostics?: IssueManagerDiagnostics | null;\n feature: IssueManagerFeature;\n issueDetail: {\n value: IssueManagerIssueDetail | null;\n };\n issueDraft: IssueDraft;\n issueEditorMode: IssueManagerEditorMode;\n nodeState: IssueManagerNodeState;\n referenceTarget: IssueManagerReferenceTarget | null;\n taskDetail: {\n value: IssueManagerTaskDetail | null;\n };\n taskDraft: TaskDraft;\n taskEditorMode: IssueManagerEditorMode;\n workspaceId: string;\n}) {\n const {\n controllerSession,\n copy,\n diagnostics,\n feature,\n issueDetail,\n issueDraft,\n issueEditorMode,\n nodeState,\n referenceTarget,\n taskDetail,\n taskDraft,\n taskEditorMode,\n workspaceId\n } = input;\n\n return createIssueManagerControllerActions({\n copy,\n feature,\n issueDetail,\n issueDraft,\n issueEditorMode,\n nodeState,\n referenceTarget,\n refreshAll: () => controllerSession.refreshAll(),\n refreshDetails: () => controllerSession.refreshDetails(),\n setNotification: (update) =>\n controllerSession.setNotification((current) =>\n createIssueManagerControllerNotificationState(current, update)\n ),\n setIsRunningTask: (update) => controllerSession.setIsRunningTask(update),\n setIssueDraftInternal: (update) =>\n controllerSession.setIssueDraftInternal(update),\n setIssueEditorModeState: (update) => {\n const nextMode =\n typeof update === \"function\" ? update(issueEditorMode) : update;\n logIssueManagerDiagnostic(\n diagnostics,\n \"issue_editor_mode.action_requested\",\n {\n nextIssueEditorMode: nextMode,\n previousIssueEditorMode: issueEditorMode,\n selectedIssueId: nodeState.selectedIssueId,\n selectedTaskId: nodeState.selectedTaskId\n },\n { includeStack: true }\n );\n controllerSession.setIssueEditorModeState(nextMode);\n },\n setReferenceTarget: (update) =>\n controllerSession.setReferenceTarget(update),\n setTaskDraftInternal: (update) =>\n controllerSession.setTaskDraftInternal(update),\n setTaskEditorModeState: (update) => {\n const nextMode =\n typeof update === \"function\" ? update(taskEditorMode) : update;\n logIssueManagerDiagnostic(\n diagnostics,\n \"task_editor_mode.action_requested\",\n {\n nextTaskEditorMode: nextMode,\n previousSelectedTaskId: nodeState.selectedTaskId,\n previousTaskEditorMode: taskEditorMode\n },\n { includeStack: true }\n );\n controllerSession.setTaskEditorModeState(nextMode);\n },\n taskDetail,\n taskDraft,\n taskEditorMode,\n updateNodeState: (updater) => controllerSession.updateNodeState(updater),\n workspaceId\n });\n}\n\nfunction createIssueManagerControllerNotificationState(\n current: IssueManagerNotificationState | null,\n input: {\n title: string;\n tone?: IssueManagerNotificationState[\"tone\"];\n }\n): IssueManagerNotificationState {\n return {\n id: (current?.id ?? 0) + 1,\n title: input.title,\n tone: input.tone ?? \"default\"\n };\n}\n","import type { IssueManagerNodeState } from \"../../../../contracts/index.ts\";\nimport type { IssueManagerFeature } from \"../../../../core/index.ts\";\nimport type {\n IssueDraft,\n IssueManagerControllerSession,\n IssueManagerEditorMode\n} from \"../../../../services/issueManagerControllerService.interface.ts\";\nimport {\n applyIssueManagerIssueEditorModeToNodeState,\n createIssueManagerIssueDraftFromNodeState,\n persistIssueManagerIssueDraftContent\n} from \"../../../../services/internal/controllerState.ts\";\nimport { trackIssueManagerContentReferenceChanges } from \"../../../../services/internal/controllerAnalytics.ts\";\nimport {\n logIssueManagerDiagnostic,\n type IssueManagerDiagnostics\n} from \"../../../../internal/issueManagerDiagnostics.ts\";\n\nexport function createIssueManagerIssueBindings(input: {\n controllerSession: IssueManagerControllerSession;\n diagnostics?: IssueManagerDiagnostics | null;\n feature: IssueManagerFeature;\n issueEditorMode: IssueManagerEditorMode;\n nodeState: IssueManagerNodeState;\n}) {\n const {\n controllerSession,\n diagnostics,\n feature,\n issueEditorMode,\n nodeState\n } = input;\n\n return {\n setIssueContent(content: string) {\n controllerSession.setIssueDraftInternal((current) => {\n trackIssueManagerContentReferenceChanges({\n feature,\n nextContent: content,\n previousContent: current.content,\n targetType: \"issue\"\n });\n return {\n ...current,\n content\n };\n });\n controllerSession.updateNodeState((current) =>\n persistIssueManagerIssueDraftContent(current, issueEditorMode, content)\n );\n },\n setIssueDraft(patch: Partial<IssueDraft>) {\n controllerSession.setIssueDraftInternal((current) => ({\n ...current,\n ...patch\n }));\n },\n setIssueEditorMode(mode: IssueManagerEditorMode) {\n logIssueManagerDiagnostic(\n diagnostics,\n \"issue_editor_mode.requested\",\n {\n nextIssueEditorMode: mode,\n previousIssueEditorMode: issueEditorMode,\n selectedIssueId: nodeState.selectedIssueId,\n selectedTaskId: nodeState.selectedTaskId\n },\n { includeStack: true }\n );\n controllerSession.setIssueEditorModeState(mode);\n if (mode === \"create\") {\n controllerSession.setIssueDraftInternal(\n createIssueManagerIssueDraftFromNodeState(nodeState)\n );\n }\n controllerSession.updateNodeState((current) =>\n applyIssueManagerIssueEditorModeToNodeState(current, mode)\n );\n },\n setIssueSearchQuery(query: string) {\n controllerSession.updateNodeState((current) => ({\n ...current,\n issueSearchQuery: query\n }));\n },\n setIssueStatusFilter(value: IssueManagerNodeState[\"issueStatusFilter\"]) {\n controllerSession.updateNodeState((current) => ({\n ...current,\n issueStatusFilter: value\n }));\n },\n setIssueTitle(title: string) {\n controllerSession.setIssueDraftInternal((current) => ({\n ...current,\n title\n }));\n }\n };\n}\n","import type {\n IssueManagerNodeState,\n IssueManagerPriority\n} from \"../../../../contracts/index.ts\";\nimport type { IssueManagerFeature } from \"../../../../core/index.ts\";\nimport type {\n IssueManagerControllerSession,\n IssueManagerEditorMode,\n TaskDraft\n} from \"../../../../services/issueManagerControllerService.interface.ts\";\nimport {\n applyIssueManagerTaskEditorModeToNodeState,\n applyIssueManagerTaskSelection,\n createIssueManagerTaskDraftFromNodeState,\n persistIssueManagerTaskDraftContent\n} from \"../../../../services/internal/controllerState.ts\";\nimport { trackIssueManagerContentReferenceChanges } from \"../../../../services/internal/controllerAnalytics.ts\";\nimport {\n logIssueManagerDiagnostic,\n type IssueManagerDiagnostics\n} from \"../../../../internal/issueManagerDiagnostics.ts\";\n\nexport function createIssueManagerTaskBindings(input: {\n controllerSession: IssueManagerControllerSession;\n diagnostics?: IssueManagerDiagnostics | null;\n feature: IssueManagerFeature;\n nodeState: IssueManagerNodeState;\n taskEditorMode: IssueManagerEditorMode;\n}) {\n const { controllerSession, diagnostics, feature, nodeState, taskEditorMode } =\n input;\n\n return {\n selectTask(taskId: string | null) {\n controllerSession.updateNodeState((current) => {\n logIssueManagerDiagnostic(\n diagnostics,\n \"task_selection.requested\",\n {\n activeTopicId: current.activeTopicId ?? null,\n nextSelectedTaskId: taskId,\n previousSelectedIssueId: current.selectedIssueId,\n previousSelectedTaskId: current.selectedTaskId,\n taskEditorMode\n },\n { includeStack: true }\n );\n return applyIssueManagerTaskSelection(current, taskId);\n });\n controllerSession.setTaskEditorModeState(\"read\");\n },\n setTaskContent(content: string) {\n controllerSession.setTaskDraftInternal((current) => {\n trackIssueManagerContentReferenceChanges({\n feature,\n nextContent: content,\n previousContent: current.content,\n targetType: \"task\"\n });\n return {\n ...current,\n content\n };\n });\n controllerSession.updateNodeState((current) =>\n persistIssueManagerTaskDraftContent(current, taskEditorMode, content)\n );\n },\n setTaskDraft(patch: Partial<TaskDraft>) {\n controllerSession.setTaskDraftInternal((current) => ({\n ...current,\n ...patch\n }));\n },\n setTaskEditorMode(mode: IssueManagerEditorMode) {\n logIssueManagerDiagnostic(\n diagnostics,\n \"task_editor_mode.requested\",\n {\n nextTaskEditorMode: mode,\n previousSelectedTaskId: nodeState.selectedTaskId,\n previousTaskEditorMode: taskEditorMode\n },\n { includeStack: true }\n );\n controllerSession.setTaskEditorModeState(mode);\n if (mode === \"create\") {\n controllerSession.setTaskDraftInternal(\n createIssueManagerTaskDraftFromNodeState(nodeState)\n );\n }\n controllerSession.updateNodeState((current) =>\n applyIssueManagerTaskEditorModeToNodeState(current, mode)\n );\n },\n setTaskListCollapsed(collapsed: boolean) {\n controllerSession.updateNodeState((current) => ({\n ...current,\n taskListCollapsed: collapsed\n }));\n },\n setTaskPriority(priority: IssueManagerPriority) {\n controllerSession.setTaskDraftInternal((current) => ({\n ...current,\n priority\n }));\n },\n setTaskTitle(title: string) {\n controllerSession.setTaskDraftInternal((current) => ({\n ...current,\n title\n }));\n }\n };\n}\n","import type { RichTextTriggerProvider } from \"@tutti-os/ui-rich-text/types\";\nimport type { IssueManagerNodeState } from \"../../../../contracts/index.ts\";\nimport type { IssueManagerFeature } from \"../../../../core/index.ts\";\nimport type {\n IssueManagerControllerSession,\n IssueManagerEditorMode,\n IssueManagerReferenceTarget\n} from \"../../../../services/issueManagerControllerService.interface.ts\";\nimport { applyIssueManagerIssueSelection } from \"../../../../services/internal/controllerState.ts\";\nimport { createIssueManagerIssueBindings } from \"../issue/createIssueManagerIssueBindings.ts\";\nimport { createIssueManagerTaskBindings } from \"../task/createIssueManagerTaskBindings.ts\";\nimport {\n logIssueManagerDiagnostic,\n type IssueManagerDiagnostics\n} from \"../../../../internal/issueManagerDiagnostics.ts\";\n\nexport function createIssueManagerControllerBindings(input: {\n controllerSession: IssueManagerControllerSession;\n diagnostics?: IssueManagerDiagnostics | null;\n feature: IssueManagerFeature;\n issueEditorMode: IssueManagerEditorMode;\n nodeState: IssueManagerNodeState;\n onResolveRichTextTriggerProviders?: (input: {\n surface: \"issue\" | \"task\";\n workspaceId: string;\n }) => readonly RichTextTriggerProvider[];\n taskEditorMode: IssueManagerEditorMode;\n workspaceId: string;\n}) {\n const {\n controllerSession,\n diagnostics,\n feature,\n issueEditorMode,\n nodeState,\n onResolveRichTextTriggerProviders,\n taskEditorMode,\n workspaceId\n } = input;\n\n const issueBindings = createIssueManagerIssueBindings({\n controllerSession,\n diagnostics,\n feature,\n issueEditorMode,\n nodeState\n });\n const taskBindings = createIssueManagerTaskBindings({\n controllerSession,\n diagnostics,\n feature,\n nodeState,\n taskEditorMode\n });\n\n return {\n ...issueBindings,\n ...taskBindings,\n dismissNotification() {\n controllerSession.setNotification(null);\n },\n refreshAll() {\n controllerSession.refreshAll();\n },\n reportIssueSearchUsage(query: string) {\n controllerSession.reportIssueSearchUsage(query);\n },\n resolveRichTextTriggerProviders(surface: \"issue\" | \"task\") {\n return (\n onResolveRichTextTriggerProviders?.({\n surface,\n workspaceId\n }) ?? []\n );\n },\n selectIssue(issueId: string | null) {\n controllerSession.updateNodeState((current) => {\n logIssueManagerDiagnostic(\n diagnostics,\n \"issue_selection.requested\",\n {\n nextSelectedIssueId: issueId,\n previousSelectedIssueId: current.selectedIssueId,\n previousSelectedTaskId: current.selectedTaskId\n },\n { includeStack: true }\n );\n return applyIssueManagerIssueSelection(current, issueId);\n });\n controllerSession.setIssueEditorModeState(\"read\");\n controllerSession.setTaskEditorModeState(\"read\");\n },\n setReferenceTarget(target: IssueManagerReferenceTarget | null) {\n controllerSession.setReferenceTarget(target);\n },\n setSelectedAgentProvider(provider: string) {\n controllerSession.updateNodeState((current) => ({\n ...current,\n selectedAgentProvider: provider\n }));\n }\n };\n}\n","import { useDeferredValue, useEffect, useMemo } from \"react\";\nimport { useSnapshot } from \"valtio\";\nimport type {\n IssueManagerNodeState,\n IssueManagerOpenSource\n} from \"../../../../contracts/index.ts\";\nimport type { IssueManagerFeature } from \"../../../../core/index.ts\";\nimport { createIssueManagerControllerService } from \"../../../../services/createIssueManagerControllerService.ts\";\nimport type {\n IssueManagerControllerService,\n IssueManagerControllerSession\n} from \"../../../../services/issueManagerControllerService.interface.ts\";\nimport {\n resolveIssueManagerFloatingNoticeViewState,\n type IssueManagerFloatingNoticeViewState\n} from \"../shell/IssueManagerNoticeState.ts\";\nimport type { IssueManagerDiagnostics } from \"../../../../internal/issueManagerDiagnostics.ts\";\n\nexport function useIssueManagerControllerRuntime(input: {\n diagnostics?: IssueManagerDiagnostics | null;\n feature: IssueManagerFeature;\n openSource?: IssueManagerOpenSource;\n onStateChange?: (state: IssueManagerNodeState) => void;\n service?: IssueManagerControllerService;\n state?: Partial<IssueManagerNodeState> | null;\n workspaceId: string;\n}): {\n controllerSession: IssueManagerControllerSession;\n deferredIssueSearch: string;\n floatingNotice: IssueManagerFloatingNoticeViewState | null;\n snapshot: IssueManagerControllerSession[\"store\"];\n} {\n const {\n diagnostics,\n feature,\n openSource,\n onStateChange,\n service,\n state,\n workspaceId\n } = input;\n const controllerService = useMemo(\n () => service ?? createIssueManagerControllerService(),\n [service]\n );\n const controllerSession = useMemo(\n () =>\n controllerService.createSession({\n diagnostics,\n feature,\n openSource,\n state,\n workspaceId\n }),\n [controllerService, diagnostics, feature, openSource, workspaceId]\n );\n const snapshot = useSnapshot(\n controllerSession.store\n ) as IssueManagerControllerSession[\"store\"];\n const deferredIssueSearch = useDeferredValue(\n snapshot.nodeState.issueSearchQuery\n );\n const floatingNotice = resolveIssueManagerFloatingNoticeViewState({\n notification: snapshot.notification\n });\n\n useEffect(() => {\n controllerSession.retain();\n return () => {\n controllerSession.release();\n };\n }, [controllerSession]);\n\n useEffect(() => {\n controllerSession.syncInput({\n deferredIssueSearch,\n onStateChange,\n taskListCollapsed: state?.taskListCollapsed === true\n });\n }, [\n controllerSession,\n deferredIssueSearch,\n onStateChange,\n state?.taskListCollapsed\n ]);\n\n return {\n controllerSession,\n deferredIssueSearch,\n floatingNotice,\n snapshot\n };\n}\n","import type {\n IssueManagerNotificationState,\n IssueManagerNotificationTone\n} from \"../../../../services/controllerTypes.ts\";\n\nconst issueManagerNoticeDurationMs = 3000;\n\nexport interface IssueManagerFloatingNoticeViewState {\n durationMs: number;\n id: number;\n isLoading: boolean;\n title: string;\n tone: IssueManagerNotificationTone;\n}\n\nexport function resolveIssueManagerFloatingNoticeViewState(input: {\n notification: IssueManagerNotificationState | null;\n}): IssueManagerFloatingNoticeViewState | null {\n if (!input.notification) {\n return null;\n }\n\n return {\n durationMs: issueManagerNoticeDurationMs,\n id: input.notification.id,\n isLoading: false,\n title: input.notification.title,\n tone: input.notification.tone\n };\n}\n","import type { RichTextTriggerProvider } from \"@tutti-os/ui-rich-text/types\";\nimport type { ReactNode } from \"react\";\nimport type {\n IssueManagerFileReference,\n IssueManagerNodeState,\n IssueManagerOpenSource\n} from \"../../../../contracts/index.ts\";\nimport type { IssueManagerFeature } from \"../../../../core/index.ts\";\nimport type { IssueManagerControllerService } from \"../../../../services/issueManagerControllerService.interface.ts\";\nimport {\n resolveIssueManagerSelectedIssue,\n resolveIssueManagerSelectedTask,\n useIssueManagerTaskListCollapsedSync\n} from \"./IssueManagerNodeState.ts\";\nimport {\n useIssueManagerController,\n type IssueManagerController,\n type IssueManagerRichTextSurface\n} from \"../controller/useIssueManagerController.ts\";\nimport {\n logIssueManagerDiagnostic,\n type IssueManagerDiagnostics\n} from \"../../../../internal/issueManagerDiagnostics.ts\";\n\nexport interface UseIssueManagerNodeViewInput {\n diagnostics?: IssueManagerDiagnostics | null;\n emptyIllustration?: ReactNode;\n feature: IssueManagerFeature;\n nodeId: string;\n openSource?: IssueManagerOpenSource;\n onStateChange?: (state: IssueManagerNodeState) => void;\n resolveRichTextTriggerProviders?: (input: {\n surface: IssueManagerRichTextSurface;\n workspaceId: string;\n }) => readonly RichTextTriggerProvider[];\n service?: IssueManagerControllerService;\n state?: Partial<IssueManagerNodeState> | null;\n workspaceId: string;\n}\n\nexport function useIssueManagerNodeView({\n diagnostics,\n feature,\n nodeId,\n openSource,\n onStateChange,\n resolveRichTextTriggerProviders,\n service,\n state,\n workspaceId\n}: UseIssueManagerNodeViewInput) {\n const controller = useIssueManagerController({\n diagnostics,\n feature,\n openSource,\n onStateChange,\n resolveRichTextTriggerProviders,\n service,\n state,\n workspaceId\n });\n\n useIssueManagerTaskListCollapsedSync({\n nodeId,\n onCollapsedChange: (collapsed) => {\n controller.setTaskListCollapsed(collapsed);\n },\n workspaceId\n });\n\n const selectedIssue = resolveIssueManagerSelectedIssue({\n issueDetail: controller.issueDetail.value?.issue ?? null,\n issues: controller.issues.value,\n selectedIssueId: controller.nodeState.selectedIssueId\n });\n const selectedTask = resolveIssueManagerSelectedTask({\n selectedTaskId: controller.nodeState.selectedTaskId,\n taskDetail: controller.taskDetail.value?.task ?? null,\n tasks: controller.issueDetail.value?.tasks ?? []\n });\n\n return {\n controller,\n referencePicker: {\n onClose: () => {\n controller.setReferenceTarget(null);\n },\n onConfirm: (refs: IssueManagerFileReference[]) => {\n void controller.submitReferenceSelection(refs);\n },\n open: controller.referenceTarget !== null\n },\n selectedIssue,\n selectedTask,\n shell: {\n onCloseTaskDrawer: () => {\n logIssueManagerDiagnostic(\n controller.diagnostics,\n \"task_drawer.close_requested\",\n {\n selectedIssueId: controller.nodeState.selectedIssueId,\n selectedTaskId: controller.nodeState.selectedTaskId\n }\n );\n controller.selectTask(null);\n },\n onDismissIssueCreate: () => {\n controller.setIssueEditorMode(\"read\");\n }\n }\n };\n}\n\nexport type IssueManagerNodeView = ReturnType<typeof useIssueManagerNodeView>;\nexport type IssueManagerNodeViewController = IssueManagerController;\n","export {\n dispatchIssueManagerTaskListCollapsed,\n dispatchIssueManagerTopicCreate,\n dispatchIssueManagerTopicDelete,\n dispatchIssueManagerTopicHeaderState,\n dispatchIssueManagerTopicSelection,\n dispatchIssueManagerTopicUpdate,\n resolveIssueManagerSelectedIssue,\n resolveIssueManagerSelectedTask,\n useIssueManagerNodeHeaderView,\n useIssueManagerTopicHeaderCommandSync,\n useIssueManagerTopicHeaderStateSync,\n useIssueManagerTaskListCollapsedSync\n} from \"./internal/shell/IssueManagerNodeState.ts\";\nexport {\n createReferenceDirectoryStateFromSnapshot,\n collectVisibleTreeEntries,\n issueManagerReferenceDefaultExpandedDepth,\n mergeExpandedFolderPaths,\n mergePrefetchedDirectoryState,\n normalizeDirectoryPath,\n prefetchReferenceTree,\n type IssueManagerReferenceDirectoryState\n} from \"./internal/reference/IssueManagerReferencePickerState.ts\";\nexport {\n useIssueManagerController,\n type IssueManagerController,\n type IssueManagerRichTextSurface\n} from \"./internal/controller/useIssueManagerController.ts\";\nexport {\n useIssueManagerNodeView,\n type IssueManagerNodeView,\n type IssueManagerNodeViewController,\n type UseIssueManagerNodeViewInput\n} from \"./internal/shell/useIssueManagerNodeView.ts\";\nexport {\n useWorkspaceFileReferencePickerView as useIssueManagerReferencePickerView,\n type UseWorkspaceFileReferencePickerViewInput as UseIssueManagerReferencePickerViewInput,\n type WorkspaceFileReferencePreviewState as IssueManagerReferencePreviewState\n} from \"@tutti-os/workspace-file-reference/react\";\n","import {\n useEffect,\n useRef,\n type HTMLAttributes,\n type JSX,\n type ReactNode\n} from \"react\";\nimport { Button, PanelIcon, cn } from \"@tutti-os/ui-system\";\nimport { WorkspaceFileReferencePicker } from \"@tutti-os/workspace-file-reference/ui\";\nimport type { IssueManagerI18nRuntime } from \"../i18n/issueManagerI18n.ts\";\nimport type { IssueManagerOpenSource } from \"../contracts/index.ts\";\nimport { logIssueManagerDiagnostic } from \"../internal/issueManagerDiagnostics.ts\";\nimport type { IssueManagerLatestRunStatusRenderer } from \"./latestRunStatusRenderer.ts\";\nimport { IssueManagerShell } from \"./internal/shell/IssueManagerShell.tsx\";\nimport { IssueManagerTopicSelector } from \"./internal/shell/IssueManagerTopicSelector.tsx\";\nimport {\n dispatchIssueManagerTopicCreate,\n dispatchIssueManagerTopicDelete,\n dispatchIssueManagerTopicHeaderState,\n dispatchIssueManagerTopicSelection,\n dispatchIssueManagerTopicUpdate,\n useIssueManagerTopicHeaderCommandSync,\n useIssueManagerTopicHeaderStateSync,\n useIssueManagerNodeHeaderView,\n useIssueManagerNodeView,\n type UseIssueManagerNodeViewInput\n} from \"./react/index.ts\";\n\nexport { dispatchIssueManagerTaskListCollapsed } from \"./react/index.ts\";\nexport type { IssueManagerLatestRunStatusRenderer } from \"./latestRunStatusRenderer.ts\";\n\nexport interface IssueManagerNodeOpenRequest {\n issueId: string;\n mode?: \"breakdown\" | \"execute\";\n outputDir?: string;\n requestId: string;\n runId?: string;\n taskId?: string;\n topicId?: string;\n}\n\nexport type IssueManagerNodeProps = UseIssueManagerNodeViewInput & {\n openRequest?: IssueManagerNodeOpenRequest | null;\n openSource?: IssueManagerOpenSource;\n renderLatestRunStatus?: IssueManagerLatestRunStatusRenderer;\n};\n\nexport function IssueManagerNode({\n diagnostics,\n emptyIllustration,\n feature,\n nodeId,\n openSource,\n openRequest,\n onStateChange,\n renderLatestRunStatus,\n resolveRichTextTriggerProviders,\n service,\n state,\n workspaceId\n}: IssueManagerNodeProps): JSX.Element {\n const { controller, referencePicker, selectedIssue, selectedTask, shell } =\n useIssueManagerNodeView({\n diagnostics,\n feature,\n nodeId,\n openSource,\n onStateChange,\n resolveRichTextTriggerProviders,\n service,\n state,\n workspaceId\n });\n const lastHandledOpenRequestIdRef = useRef<string | null>(null);\n\n useEffect(() => {\n if (!openRequest?.requestId) {\n return;\n }\n if (lastHandledOpenRequestIdRef.current === openRequest.requestId) {\n logIssueManagerDiagnostic(\n controller.diagnostics,\n \"open_request.skipped_duplicate\",\n {\n issueId: openRequest.issueId,\n requestId: openRequest.requestId,\n taskId: openRequest.taskId?.trim() || null,\n topicId: openRequest.topicId?.trim() || null\n }\n );\n return;\n }\n lastHandledOpenRequestIdRef.current = openRequest.requestId;\n\n logIssueManagerDiagnostic(\n controller.diagnostics,\n \"open_request.consumed\",\n {\n issueId: openRequest.issueId,\n mode: openRequest.mode ?? null,\n requestId: openRequest.requestId,\n taskId: openRequest.taskId?.trim() || null,\n topicId: openRequest.topicId?.trim() || null\n },\n { includeStack: true }\n );\n\n if (openRequest.topicId?.trim()) {\n controller.selectTopic(openRequest.topicId);\n }\n controller.selectIssue(openRequest.issueId);\n controller.selectTask(openRequest.taskId?.trim() || null);\n }, [controller, openRequest]);\n\n useEffect(() => {\n dispatchIssueManagerTopicHeaderState({\n activeTopicId: controller.nodeState.activeTopicId ?? null,\n nodeId,\n topics: controller.topics.value,\n workspaceId\n });\n }, [\n controller.nodeState.activeTopicId,\n controller.topics.value,\n nodeId,\n workspaceId\n ]);\n\n useIssueManagerTopicHeaderCommandSync({\n nodeId,\n onCreateTopic: (topicInput) => {\n void controller.createTopic(topicInput);\n },\n onDeleteTopic: (topicId) => {\n void controller.deleteTopic(topicId);\n },\n onSelectTopic: controller.selectTopic,\n onUpdateTopic: (topicInput) => {\n void controller.updateTopic(topicInput);\n },\n workspaceId\n });\n\n return (\n <section\n aria-label={controller.copy.t(\"title\")}\n className=\"flex h-full min-h-0 w-full min-w-0 flex-col overflow-hidden text-[var(--text-primary)]\"\n data-issue-manager-node-id={nodeId}\n data-issue-manager-workspace-id={workspaceId}\n >\n <IssueManagerShell\n controller={controller}\n emptyIllustration={emptyIllustration}\n onCloseTaskDrawer={shell.onCloseTaskDrawer}\n onDismissIssueCreate={shell.onDismissIssueCreate}\n renderLatestRunStatus={renderLatestRunStatus}\n selectedIssue={selectedIssue}\n selectedTask={selectedTask}\n />\n\n <WorkspaceFileReferencePicker\n copy={controller.copy}\n fileAdapter={feature.fileAdapter}\n open={referencePicker.open}\n workspaceId={workspaceId}\n onClose={referencePicker.onClose}\n onConfirm={referencePicker.onConfirm}\n />\n </section>\n );\n}\n\nexport interface IssueManagerNodeHeaderProps extends HTMLAttributes<HTMLElement> {\n activeTopicId?: string | null;\n copy: IssueManagerI18nRuntime;\n defaultActions?: ReactNode;\n isSidebarAutoCollapsed: boolean;\n isSidebarCollapsed: boolean;\n nodeId: string;\n onToggleSidebar: (nextCollapsed: boolean) => void;\n title?: string;\n workspaceId: string;\n}\n\nconst issueManagerWorkbenchDragHandleAttribute = \"data-workbench-drag-handle\";\n\ntype IssueManagerNodeHeaderDragHandleAttributes = {\n [issueManagerWorkbenchDragHandleAttribute]?: \"true\";\n};\n\nexport function IssueManagerNodeHeader({\n activeTopicId = null,\n className,\n copy,\n defaultActions,\n isSidebarAutoCollapsed,\n isSidebarCollapsed,\n nodeId,\n onToggleSidebar,\n title,\n workspaceId,\n ...headerProps\n}: IssueManagerNodeHeaderProps): JSX.Element {\n const {\n [issueManagerWorkbenchDragHandleAttribute]: dragHandleData,\n onDoubleClick,\n onPointerDown,\n ...restHeaderProps\n } = headerProps as typeof headerProps &\n IssueManagerNodeHeaderDragHandleAttributes;\n const dragHandleProps = {\n \"data-workbench-drag-handle\": dragHandleData,\n onDoubleClick,\n onPointerDown\n };\n const { effectiveCollapsed, toggleLabel, toggleSidebar } =\n useIssueManagerNodeHeaderView({\n copy,\n isSidebarAutoCollapsed,\n isSidebarCollapsed,\n nodeId,\n onToggleSidebar,\n workspaceId\n });\n const topicState = useIssueManagerTopicHeaderStateSync({\n activeTopicId,\n nodeId,\n workspaceId\n });\n\n return (\n <header\n {...restHeaderProps}\n className={cn(\n \"relative flex h-full min-h-0 items-center justify-between gap-3 bg-[var(--background-panel)] px-2 pl-3\",\n className\n )}\n >\n <div\n {...dragHandleProps}\n aria-hidden=\"true\"\n className=\"absolute inset-0 cursor-grab active:cursor-grabbing\"\n />\n <div\n {...dragHandleProps}\n className=\"z-10 flex min-w-0 cursor-grab items-center gap-2 active:cursor-grabbing\"\n >\n <span className=\"min-w-0 truncate text-[13px] font-semibold leading-5 text-[var(--text-primary)]\">\n {title?.trim() || copy.t(\"title\")}\n </span>\n <Button\n aria-label={toggleLabel}\n className=\"cursor-pointer rounded-md\"\n data-issue-manager-sidebar-auto-collapsed={\n isSidebarAutoCollapsed ? \"true\" : undefined\n }\n data-issue-manager-sidebar-collapsed={\n effectiveCollapsed ? \"true\" : undefined\n }\n size=\"icon-sm\"\n title={toggleLabel}\n type=\"button\"\n variant=\"ghost\"\n onClick={(event) => {\n event.stopPropagation();\n toggleSidebar();\n }}\n onDoubleClick={(event) => event.stopPropagation()}\n onPointerDown={(event) => event.stopPropagation()}\n >\n <PanelIcon className=\"size-[18px]\" />\n </Button>\n </div>\n <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\">\n <div\n className=\"pointer-events-auto flex min-w-0 flex-none\"\n onDoubleClick={(event) => event.stopPropagation()}\n onPointerDown={(event) => event.stopPropagation()}\n >\n <IssueManagerTopicSelector\n activeTopicId={topicState.activeTopicId}\n className=\"flex-none\"\n copy={copy}\n topics={topicState.topics}\n onCreateTopic={(input) => {\n dispatchIssueManagerTopicCreate({\n input,\n nodeId,\n workspaceId\n });\n }}\n onDeleteTopic={(topicId) => {\n dispatchIssueManagerTopicDelete({\n nodeId,\n topicId,\n workspaceId\n });\n }}\n onSelectTopic={(topicId) => {\n dispatchIssueManagerTopicSelection({\n nodeId,\n topicId,\n workspaceId\n });\n }}\n onUpdateTopic={(input) => {\n dispatchIssueManagerTopicUpdate({\n input,\n nodeId,\n workspaceId\n });\n }}\n />\n </div>\n </div>\n <div\n className=\"z-10 flex flex-none items-center gap-1\"\n onDoubleClick={(event) => event.stopPropagation()}\n onPointerDown={(event) => event.stopPropagation()}\n >\n {defaultActions}\n </div>\n </header>\n );\n}\n","import {\n useEffect,\n useRef,\n useState,\n type JSX,\n type PointerEvent,\n type ReactNode\n} from \"react\";\nimport { Button, FileCreateIcon, cn } from \"@tutti-os/ui-system\";\nimport type {\n IssueManagerIssueSummary,\n IssueManagerTaskSummary\n} from \"../../../contracts/index.ts\";\nimport { IssueManagerIssuePane } from \"./IssueManagerPanels.tsx\";\nimport { IssueManagerBottomBar } from \"./IssueManagerBottomBar.tsx\";\nimport { IssueManagerFloatingNotice } from \"./IssueManagerFloatingNotice.tsx\";\nimport { IssueManagerSidebar } from \"./IssueManagerSidebar.tsx\";\nimport { IssueManagerTaskComposerPane } from \"./IssueManagerTaskComposerPane.tsx\";\nimport {\n IssueManagerTaskDrawer,\n type IssueManagerTaskDrawerCloseSource\n} from \"./IssueManagerTaskDrawer.tsx\";\nimport type { IssueManagerController } from \"../../react/index.ts\";\nimport { useIssueManagerShellView } from \"./useIssueManagerShellView.ts\";\nimport type { IssueManagerLatestRunStatusRenderer } from \"../../latestRunStatusRenderer.ts\";\nimport { logIssueManagerDiagnostic } from \"../../../internal/issueManagerDiagnostics.ts\";\nimport {\n shouldIgnoreIssueManagerTaskDrawerBackdropEcho,\n type IssueManagerPointerSnapshot\n} from \"./IssueManagerTaskDrawerEcho.ts\";\n\nexport { shouldAutoCollapseIssueManagerSidebar } from \"./useIssueManagerShellView.ts\";\n\nconst issueManagerTaskDrawerExitDurationMs = 180;\nconst issueManagerTaskDrawerCloseBlockerMs = 500;\n\nlet issueManagerTaskDrawerCloseBlockerUntilMs = 0;\n\nexport interface IssueManagerShellProps {\n controller: IssueManagerController;\n emptyIllustration?: ReactNode;\n onCloseTaskDrawer: () => void;\n onDismissIssueCreate: () => void;\n renderLatestRunStatus?: IssueManagerLatestRunStatusRenderer;\n selectedIssue: IssueManagerIssueSummary | null;\n selectedTask: IssueManagerTaskSummary | null;\n}\n\nexport function IssueManagerShell({\n controller,\n emptyIllustration,\n onCloseTaskDrawer,\n onDismissIssueCreate,\n renderLatestRunStatus,\n selectedIssue,\n selectedTask\n}: IssueManagerShellProps): JSX.Element {\n const shellView = useIssueManagerShellView({\n controller,\n selectedIssue,\n selectedTask\n });\n const [renderedTaskDrawerTask, setRenderedTaskDrawerTask] =\n useState<IssueManagerTaskSummary | null>(selectedTask);\n const [taskDrawerCloseBlockerUntilMs, setTaskDrawerCloseBlockerUntilMs] =\n useState(issueManagerTaskDrawerCloseBlockerUntilMs);\n const lastContentPointerDownRef = useRef<IssueManagerPointerSnapshot | null>(\n null\n );\n const taskDrawerOpenPointerRef = useRef<IssueManagerPointerSnapshot | null>(\n null\n );\n const pendingTaskDrawerCloseRef = useRef(false);\n const taskDrawerCloseBlockerTimeoutRef = useRef<number | null>(null);\n const previousTaskDrawerOpenRef = useRef<{\n isOpen: boolean;\n taskId: string | null;\n }>({\n isOpen: shellView.content.isTaskDrawerOpen,\n taskId: selectedTask?.taskId ?? null\n });\n\n const clearTaskDrawerCloseBlocker = () => {\n if (taskDrawerCloseBlockerTimeoutRef.current !== null) {\n window.clearTimeout(taskDrawerCloseBlockerTimeoutRef.current);\n taskDrawerCloseBlockerTimeoutRef.current = null;\n }\n issueManagerTaskDrawerCloseBlockerUntilMs = 0;\n setTaskDrawerCloseBlockerUntilMs(0);\n };\n\n const startTaskDrawerCloseBlocker = () => {\n issueManagerTaskDrawerCloseBlockerUntilMs =\n performance.now() + issueManagerTaskDrawerCloseBlockerMs;\n setTaskDrawerCloseBlockerUntilMs(issueManagerTaskDrawerCloseBlockerUntilMs);\n };\n\n useEffect(() => {\n if (taskDrawerCloseBlockerTimeoutRef.current !== null) {\n window.clearTimeout(taskDrawerCloseBlockerTimeoutRef.current);\n taskDrawerCloseBlockerTimeoutRef.current = null;\n }\n\n if (taskDrawerCloseBlockerUntilMs <= performance.now()) {\n return undefined;\n }\n\n taskDrawerCloseBlockerTimeoutRef.current = window.setTimeout(() => {\n if (issueManagerTaskDrawerCloseBlockerUntilMs <= performance.now()) {\n issueManagerTaskDrawerCloseBlockerUntilMs = 0;\n }\n taskDrawerCloseBlockerTimeoutRef.current = null;\n setTaskDrawerCloseBlockerUntilMs(\n issueManagerTaskDrawerCloseBlockerUntilMs\n );\n }, taskDrawerCloseBlockerUntilMs - performance.now());\n\n return () => {\n if (taskDrawerCloseBlockerTimeoutRef.current !== null) {\n window.clearTimeout(taskDrawerCloseBlockerTimeoutRef.current);\n taskDrawerCloseBlockerTimeoutRef.current = null;\n }\n };\n }, [taskDrawerCloseBlockerUntilMs]);\n\n const handleCloseTaskDrawer = (source: IssueManagerTaskDrawerCloseSource) => {\n logIssueManagerDiagnostic(\n controller.diagnostics,\n \"task_drawer.close_source_requested\",\n {\n isTaskDrawerOpen: shellView.content.isTaskDrawerOpen,\n renderedTaskId: renderedTaskDrawerTask?.taskId ?? null,\n selectedIssueId: selectedIssue?.issueId ?? null,\n selectedTaskId: selectedTask?.taskId ?? null,\n source\n }\n );\n pendingTaskDrawerCloseRef.current = true;\n setRenderedTaskDrawerTask(null);\n if (source === \"backdrop\") {\n startTaskDrawerCloseBlocker();\n } else {\n clearTaskDrawerCloseBlocker();\n }\n onCloseTaskDrawer();\n };\n\n const handleContentPointerDownCapture = (\n event: PointerEvent<HTMLDivElement>\n ) => {\n if (shellView.content.isTaskDrawerOpen || event.button !== 0) {\n return;\n }\n lastContentPointerDownRef.current = {\n clientX: event.clientX,\n clientY: event.clientY,\n timeMs: performance.now()\n };\n };\n\n const shouldIgnoreTaskDrawerBackdropClick = (event: {\n clientX: number;\n clientY: number;\n }) => {\n const openPointer = taskDrawerOpenPointerRef.current;\n if (!openPointer) {\n return false;\n }\n const echo = shouldIgnoreIssueManagerTaskDrawerBackdropEcho({\n clickClientX: event.clientX,\n clickClientY: event.clientY,\n nowMs: performance.now(),\n openPointer\n });\n if (echo.ignore) {\n logIssueManagerDiagnostic(\n controller.diagnostics,\n \"task_drawer.backdrop_click_ignored_as_open_echo\",\n {\n clickClientX: event.clientX,\n clickClientY: event.clientY,\n distancePx: echo.distancePx,\n elapsedMs: echo.elapsedMs,\n openClientX: openPointer.clientX,\n openClientY: openPointer.clientY,\n selectedIssueId: selectedIssue?.issueId ?? null,\n selectedTaskId: selectedTask?.taskId ?? null\n }\n );\n }\n return echo.ignore;\n };\n\n useEffect(() => {\n const selectedTaskId = selectedTask?.taskId ?? null;\n const previousOpen = previousTaskDrawerOpenRef.current;\n\n if (shellView.content.isTaskDrawerOpen) {\n if (pendingTaskDrawerCloseRef.current) {\n return undefined;\n }\n if (!previousOpen.isOpen || previousOpen.taskId !== selectedTaskId) {\n taskDrawerOpenPointerRef.current = lastContentPointerDownRef.current;\n logIssueManagerDiagnostic(\n controller.diagnostics,\n \"task_drawer.open_state\",\n {\n isOpen: true,\n openClientX: taskDrawerOpenPointerRef.current?.clientX ?? null,\n openClientY: taskDrawerOpenPointerRef.current?.clientY ?? null,\n selectedIssueId: selectedIssue?.issueId ?? null,\n selectedTaskId,\n selectedTaskTitle: selectedTask?.title ?? null\n }\n );\n }\n previousTaskDrawerOpenRef.current = {\n isOpen: true,\n taskId: selectedTaskId\n };\n if (renderedTaskDrawerTask?.taskId !== selectedTaskId) {\n setRenderedTaskDrawerTask(selectedTask);\n }\n return undefined;\n }\n\n previousTaskDrawerOpenRef.current = {\n isOpen: false,\n taskId: null\n };\n taskDrawerOpenPointerRef.current = null;\n pendingTaskDrawerCloseRef.current = false;\n\n if (!renderedTaskDrawerTask) {\n return undefined;\n }\n\n logIssueManagerDiagnostic(\n controller.diagnostics,\n \"task_drawer.exit_started\",\n {\n renderedTaskId: renderedTaskDrawerTask.taskId,\n renderedTaskTitle: renderedTaskDrawerTask.title,\n selectedIssueId: selectedIssue?.issueId ?? null,\n selectedTaskId: selectedTask?.taskId ?? null\n }\n );\n const timeout = window.setTimeout(() => {\n logIssueManagerDiagnostic(\n controller.diagnostics,\n \"task_drawer.exit_finished\",\n {\n renderedTaskId: renderedTaskDrawerTask.taskId,\n renderedTaskTitle: renderedTaskDrawerTask.title\n }\n );\n setRenderedTaskDrawerTask(null);\n }, issueManagerTaskDrawerExitDurationMs);\n\n return () => {\n window.clearTimeout(timeout);\n };\n }, [\n controller.diagnostics,\n renderedTaskDrawerTask,\n renderedTaskDrawerTask?.taskId,\n selectedIssue?.issueId,\n selectedTask,\n selectedTask?.taskId,\n selectedTask?.title,\n shellView.content.isTaskDrawerOpen\n ]);\n const isTaskDrawerOpenForRender =\n shellView.content.isTaskDrawerOpen && !pendingTaskDrawerCloseRef.current;\n const taskDrawerTask = isTaskDrawerOpenForRender\n ? selectedTask\n : renderedTaskDrawerTask;\n const isTaskDrawerClosing =\n !isTaskDrawerOpenForRender && renderedTaskDrawerTask !== null;\n const isTaskDrawerCloseBlockerVisible =\n !taskDrawerTask && taskDrawerCloseBlockerUntilMs > performance.now();\n\n return (\n <div\n 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\"\n data-issue-manager-sidebar-auto-collapsed={\n shellView.sidebar.isAutoCollapsed ? \"true\" : undefined\n }\n data-issue-manager-sidebar-collapsed={\n shellView.sidebar.isCollapsed ? \"true\" : undefined\n }\n ref={shellView.layoutRef}\n style={shellView.layoutStyle}\n >\n {shellView.floatingNotice ? (\n <IssueManagerFloatingNotice notice={shellView.floatingNotice} />\n ) : null}\n\n <IssueManagerSidebar\n controller={controller}\n isCollapsed={shellView.sidebar.isCollapsed}\n isNarrowLayout={shellView.isNarrowLayout}\n showStandaloneState={shellView.sidebar.showStandaloneState}\n sidebarViewState={shellView.sidebar.viewState}\n statusCounts={shellView.sidebar.statusCounts}\n />\n\n {shellView.sidebar.isAutoCollapsed ? null : (\n <div\n aria-label={controller.copy.t(\"labels.resizeIssueList\")}\n aria-orientation=\"vertical\"\n aria-valuemax={shellView.resizeHandle.ariaValueMax}\n aria-valuemin={shellView.resizeHandle.ariaValueMin}\n aria-valuenow={shellView.resizeHandle.ariaValueNow}\n className={cn(\n \"group absolute top-0 bottom-0 left-[calc(var(--issue-manager-sidebar-width)-6px)] z-20 w-3 cursor-col-resize touch-none opacity-100 transition-[left,opacity] duration-[180ms,120ms] ease-[cubic-bezier(0.4,0,0.2,1),ease] motion-reduce:transition-none\",\n shellView.sidebar.isCollapsed &&\n \"pointer-events-none left-[-6px] opacity-0\"\n )}\n role=\"separator\"\n tabIndex={0}\n onKeyDown={shellView.resizeHandle.onKeyDown}\n onPointerCancel={shellView.resizeHandle.onPointerCancel}\n onPointerDown={shellView.resizeHandle.onPointerDown}\n onPointerMove={shellView.resizeHandle.onPointerMove}\n onPointerUp={shellView.resizeHandle.onPointerUp}\n >\n <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)]\" />\n </div>\n )}\n\n <div\n className=\"relative h-full min-h-0 overflow-hidden bg-transparent @container/issue-manager-content\"\n onPointerDownCapture={handleContentPointerDownCapture}\n >\n <div className=\"flex h-full min-h-0 flex-col\">\n <div className=\"min-h-0 flex-1 overflow-hidden\">\n {shellView.content.isIssueEditing ? (\n <IssueManagerIssuePane\n controller={controller}\n renderLatestRunStatus={renderLatestRunStatus}\n selectedIssue={selectedIssue}\n onDismissCreate={onDismissIssueCreate}\n />\n ) : shellView.content.isTaskCreating ? (\n <IssueManagerTaskComposerPane\n controller={controller}\n selectedIssue={selectedIssue}\n onCancel={() => controller.setTaskEditorMode(\"read\")}\n />\n ) : selectedIssue ? (\n <IssueManagerIssuePane\n controller={controller}\n renderLatestRunStatus={renderLatestRunStatus}\n selectedIssue={selectedIssue}\n onDismissCreate={onDismissIssueCreate}\n />\n ) : (\n <IssueManagerShellEmptyState\n controller={controller}\n emptyIllustration={emptyIllustration}\n />\n )}\n </div>\n\n <IssueManagerBottomBar\n controller={controller}\n isNarrowLayout={shellView.isNarrowLayout}\n selectedIssue={selectedIssue}\n visible={shellView.content.showBottomBar}\n />\n </div>\n\n {taskDrawerTask ? (\n <IssueManagerTaskDrawer\n controller={controller}\n isClosing={isTaskDrawerClosing}\n renderLatestRunStatus={renderLatestRunStatus}\n selectedIssue={selectedIssue}\n selectedTask={taskDrawerTask}\n onClose={handleCloseTaskDrawer}\n shouldIgnoreBackdropClick={shouldIgnoreTaskDrawerBackdropClick}\n />\n ) : null}\n\n {isTaskDrawerCloseBlockerVisible ? (\n <div\n aria-hidden=\"true\"\n className=\"absolute inset-0 z-20 bg-transparent\"\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n }}\n onDoubleClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n }}\n onPointerDown={(event) => {\n event.preventDefault();\n event.stopPropagation();\n }}\n onPointerUp={(event) => {\n event.preventDefault();\n event.stopPropagation();\n }}\n />\n ) : null}\n </div>\n </div>\n );\n}\n\nfunction IssueManagerShellEmptyState({\n controller,\n emptyIllustration\n}: {\n controller: IssueManagerController;\n emptyIllustration?: ReactNode;\n}): JSX.Element {\n return (\n <div className=\"flex h-full min-h-[320px] items-center justify-center px-10 py-10\">\n <div className=\"grid max-w-[420px] justify-items-center gap-2 text-center\">\n {emptyIllustration ? (\n <div className=\"mb-4\">{emptyIllustration}</div>\n ) : null}\n <h2 className=\"text-[13px] font-semibold leading-5 text-[var(--text-primary)]\">\n {controller.copy.t(\"messages.noIssues\")}\n </h2>\n <p className=\"max-w-[420px] text-[13px] leading-5 text-[var(--text-secondary)]\">\n {controller.copy.t(\"emptyState\")}\n </p>\n <Button\n className=\"mt-2 gap-2\"\n type=\"button\"\n onClick={() => controller.setIssueEditorMode(\"create\")}\n >\n <FileCreateIcon size={16} />\n {controller.copy.t(\"actions.createIssue\")}\n </Button>\n </div>\n </div>\n );\n}\n","import { useState, type JSX } from \"react\";\nimport {\n Badge,\n Button,\n ConfirmationDialog,\n ScrollArea\n} from \"@tutti-os/ui-system\";\nimport type { IssueManagerIssueSummary } from \"../../../contracts/index.ts\";\nimport {\n formatIssueManagerTimestamp,\n resolveIssueManagerStatusLabel\n} from \"../../../services/controllerModel.ts\";\nimport { issueManagerStatusBadgeVariant } from \"../status/IssueManagerStatusBadge.ts\";\nimport {\n IssueManagerLatestRunStatusSection,\n IssueManagerOutputSection,\n IssueManagerSubtaskSection\n} from \"../issue/IssueManagerIssueSections.tsx\";\nimport {\n resolveIssueManagerIssueAcceptanceTaskId,\n resolveIssueManagerIssueRunTaskId,\n resolveIssueManagerVisibleSubtasks\n} from \"../issue/IssueManagerIssueAcceptanceState.ts\";\nimport type { IssueManagerLatestRunStatusRenderer } from \"../../latestRunStatusRenderer.ts\";\nimport { IssueManagerDescriptionSection } from \"../content/IssueManagerDescriptionSection.tsx\";\nimport { IssueManagerTitleTooltip } from \"../content/IssueManagerTitleTooltip.tsx\";\nimport { IssueManagerPaneLoadingState } from \"../panel/IssueManagerPanelSurface.tsx\";\nimport { resolveIssueManagerCreatorLabel } from \"../panel/IssueManagerPanelText.ts\";\nimport { IssueManagerRichTextTextarea } from \"../content/IssueManagerRichTextTextarea.tsx\";\nimport { IssueManagerTaskAcceptanceCard } from \"../task/IssueManagerTaskAcceptanceCard.tsx\";\nimport type { IssueManagerController } from \"../../react/index.ts\";\nimport { IssueManagerDraftTitleInput } from \"./IssueManagerDraftTitleInput.tsx\";\nimport {\n issueManagerEditorFooterFadeInClassName,\n issueManagerEditorRiseInClassName,\n issueManagerEditorRiseInDelay0ClassName,\n issueManagerEditorRiseInDelay1ClassName,\n issueManagerEditorRiseInDelay2ClassName\n} from \"./IssueManagerEditorMotion.ts\";\n\nexport { IssueManagerEmptyIllustration } from \"../panel/IssueManagerPanelSurface.tsx\";\n\nexport function IssueManagerIssuePane({\n controller,\n renderLatestRunStatus,\n selectedIssue,\n onDismissCreate\n}: {\n controller: IssueManagerController;\n renderLatestRunStatus?: IssueManagerLatestRunStatusRenderer;\n selectedIssue: IssueManagerIssueSummary | null;\n onDismissCreate: () => void;\n}): JSX.Element {\n const copy = controller.copy;\n const isIssueTitleMissing = controller.issueDraft.title.trim().length === 0;\n const isCreatingIssue = controller.issueEditorMode === \"create\";\n const isEditingIssue = controller.issueEditorMode === \"edit\";\n const issueContent = selectedIssue?.content ?? \"\";\n const tasks = controller.issueDetail.value?.tasks ?? [];\n const selectedTaskId = controller.nodeState.selectedTaskId;\n const selectedTask = selectedTaskId\n ? ((controller.taskDetail.value?.task?.taskId === selectedTaskId\n ? controller.taskDetail.value.task\n : tasks.find((task) => task.taskId === selectedTaskId)) ?? null)\n : null;\n const issueLatestRun =\n controller.issueDetail.value?.latestRun ??\n controller.issueDetail.value?.recentRuns[0] ??\n null;\n const latestRun = selectedTask\n ? (controller.taskDetail.value?.latestRun ??\n controller.taskDetail.value?.recentRuns[0] ??\n null)\n : issueLatestRun;\n const latestOutputs = selectedTask\n ? (controller.taskDetail.value?.latestOutputs ?? [])\n : (controller.issueDetail.value?.latestOutputs ?? []);\n const issueAcceptanceTaskId = resolveIssueManagerIssueAcceptanceTaskId({\n latestRun,\n selectedIssue,\n selectedTaskId,\n tasks\n });\n const issueRunTaskId = resolveIssueManagerIssueRunTaskId({\n latestRun: issueLatestRun,\n selectedIssue,\n tasks\n });\n const visibleTasks = resolveIssueManagerVisibleSubtasks({\n hiddenIssueRunTaskId: issueRunTaskId,\n tasks\n });\n const [deleteDialogOpen, setDeleteDialogOpen] = useState(false);\n const [deleteBusy, setDeleteBusy] = useState(false);\n\n if (isCreatingIssue || isEditingIssue) {\n return (\n <div className=\"flex h-full min-h-0 flex-col overflow-hidden\">\n <ScrollArea\n scrollbarMode=\"native\"\n className=\"min-h-0 flex-1 [&_[data-orientation=vertical][data-slot=scroll-area-scrollbar]]:opacity-100 [&_[data-slot=scroll-area-viewport]]:overscroll-contain\"\n >\n <div className=\"flex min-h-full flex-col gap-[14px] px-7 py-8\">\n <div className=\"flex w-full min-w-0 flex-col gap-3\">\n <div\n className={`${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay0ClassName}`}\n >\n <h2 className=\"m-0 text-[15px] font-semibold leading-[1.35] text-[var(--text-primary)]\">\n {isCreatingIssue\n ? copy.t(\"actions.createIssue\")\n : copy.t(\"actions.editIssue\")}\n </h2>\n </div>\n <div className=\"flex w-full min-w-0 flex-col gap-6\">\n <label\n className={`flex w-full min-w-0 flex-col gap-2 text-[13px] font-semibold text-[var(--text-secondary)] ${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay1ClassName}`}\n >\n <span className=\"leading-5\">{copy.t(\"labels.title\")}</span>\n <IssueManagerDraftTitleInput\n placeholder={copy.t(\"composer.issueTitlePlaceholder\")}\n value={controller.issueDraft.title}\n onChange={controller.setIssueTitle}\n />\n </label>\n <div\n className={`flex min-h-0 w-full min-w-0 flex-col gap-2 text-[13px] font-semibold text-[var(--text-secondary)] ${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay2ClassName}`}\n >\n <span className=\"leading-5\">{copy.t(\"labels.content\")}</span>\n <IssueManagerRichTextTextarea\n controller={controller}\n surface=\"issue\"\n textareaClassName=\"min-h-[180px] resize-none\"\n placeholder={copy.t(\"composer.issueContentPlaceholder\")}\n value={controller.issueDraft.content}\n onChange={controller.setIssueContent}\n />\n </div>\n </div>\n </div>\n </div>\n </ScrollArea>\n <div\n className={`shrink-0 border-t border-border-1 px-7 py-4 ${issueManagerEditorFooterFadeInClassName}`}\n >\n <div className=\"flex items-center justify-end gap-3\">\n <Button\n size=\"dialog\"\n type=\"button\"\n variant=\"secondary\"\n onClick={onDismissCreate}\n >\n {copy.t(\"actions.cancel\")}\n </Button>\n <Button\n disabled={isIssueTitleMissing}\n size=\"dialog\"\n type=\"button\"\n onClick={() => void controller.saveIssue()}\n >\n {copy.t(\"actions.saveIssue\")}\n </Button>\n </div>\n </div>\n </div>\n );\n }\n\n if (!selectedIssue) {\n return <div className=\"h-full min-h-0\" />;\n }\n\n return (\n <div className=\"flex h-full min-h-0 flex-col overflow-hidden\">\n <ScrollArea\n scrollbarMode=\"native\"\n className=\"min-h-0 flex-1 [&_[data-orientation=vertical][data-slot=scroll-area-scrollbar]]:opacity-100 [&_[data-slot=scroll-area-viewport]]:overscroll-contain\"\n >\n <div className=\"px-8 py-7\">\n {controller.issueDetail.isLoading &&\n controller.issueDetail.value === null ? (\n <IssueManagerPaneLoadingState />\n ) : (\n <div className=\"flex w-full min-w-0 flex-col gap-9\">\n <header className=\"grid gap-3\">\n <div className=\"flex items-center justify-between gap-6\">\n <IssueManagerTitleTooltip title={selectedIssue.title}>\n <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]\">\n {selectedIssue.title}\n </h2>\n </IssueManagerTitleTooltip>\n <div className=\"flex shrink-0 items-center gap-2\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n onClick={() => controller.setIssueEditorMode(\"edit\")}\n >\n {copy.t(\"actions.edit\")}\n </Button>\n <Button\n className=\"text-[var(--state-danger)] hover:bg-[var(--on-danger)] hover:text-[var(--state-danger)]\"\n type=\"button\"\n variant=\"ghost\"\n onClick={() => setDeleteDialogOpen(true)}\n >\n {copy.t(\"actions.delete\")}\n </Button>\n </div>\n </div>\n <div className=\"flex flex-wrap items-center gap-x-2 gap-y-2 text-[11px] font-normal leading-[1.3] text-[var(--text-secondary)]\">\n <Badge\n variant={issueManagerStatusBadgeVariant(\n selectedIssue.status\n )}\n >\n {resolveIssueManagerStatusLabel(copy, selectedIssue.status)}\n </Badge>\n <span\n aria-hidden=\"true\"\n className=\"h-4 w-px shrink-0 bg-[var(--line-2)]\"\n />\n <span className=\"text-[11px] font-normal leading-[1.3]\">\n {copy.t(\"labels.creator\")}{\" \"}\n {resolveIssueManagerCreatorLabel(selectedIssue)}\n </span>\n <span\n aria-hidden=\"true\"\n className=\"h-4 w-px shrink-0 bg-[var(--line-2)]\"\n />\n <span className=\"text-[11px] font-normal leading-[1.3]\">\n {copy.t(\"labels.createdAt\")}{\" \"}\n {formatIssueManagerTimestamp(selectedIssue.createdAtUnix) ||\n \"-\"}\n </span>\n </div>\n {issueAcceptanceTaskId ? (\n <IssueManagerTaskAcceptanceCard\n controller={controller}\n taskId={issueAcceptanceTaskId}\n />\n ) : null}\n </header>\n <ConfirmationDialog\n cancelLabel={copy.t(\"actions.cancel\")}\n confirmBusy={deleteBusy}\n confirmLabel={copy.t(\"actions.delete\")}\n description={selectedIssue.title}\n open={deleteDialogOpen}\n title={copy.t(\"confirmations.deleteIssue\")}\n tone=\"destructive\"\n onConfirm={() => {\n setDeleteBusy(true);\n void controller\n .deleteIssue({ skipConfirmation: true })\n .finally(() => {\n setDeleteBusy(false);\n setDeleteDialogOpen(false);\n });\n }}\n onOpenChange={setDeleteDialogOpen}\n />\n <IssueManagerDescriptionSection\n content={issueContent}\n emptyLabel={copy.t(\"messages.issueContentEmpty\")}\n label={copy.t(\"labels.description\")}\n onMentionAction={controller.openMention}\n onOpen={controller.openReference}\n variant=\"plain\"\n />\n <IssueManagerLatestRunStatusSection\n copy={copy}\n latestRun={latestRun}\n onOpenAgentSession={\n controller.canOpenAgentSessions\n ? controller.openAgentSession\n : undefined\n }\n renderLatestRunStatus={renderLatestRunStatus}\n title={selectedTask?.title ?? selectedIssue.title}\n />\n <IssueManagerOutputSection\n copy={copy}\n outputs={latestOutputs}\n onOpen={controller.openReference}\n />\n <IssueManagerSubtaskSection\n copy={copy}\n diagnostics={controller.diagnostics}\n onCreate={controller.createTaskDraft}\n onSelectTask={controller.selectTask}\n selectedTaskId={selectedTask?.taskId ?? null}\n tasks={visibleTasks}\n />\n </div>\n )}\n </div>\n </ScrollArea>\n </div>\n );\n}\n","import type { IssueManagerStatus } from \"../../../contracts/index.ts\";\n\nexport type IssueManagerStatusBadgeVariant =\n | \"accent\"\n | \"default\"\n | \"destructive\"\n | \"muted\"\n | \"pending\"\n | \"success\"\n | \"warning\";\n\nexport function issueManagerStatusBadgeVariant(\n status: IssueManagerStatus\n): IssueManagerStatusBadgeVariant {\n switch (status) {\n case \"running\":\n case \"in_progress\":\n return \"accent\";\n case \"pending_acceptance\":\n return \"pending\";\n case \"completed\":\n return \"success\";\n case \"failed\":\n return \"destructive\";\n case \"canceled\":\n return \"muted\";\n default:\n return \"default\";\n }\n}\n","import type { JSX, MouseEvent } from \"react\";\nimport {\n AgentSessionsIcon,\n ArrowRightIcon,\n Badge,\n Button,\n FileCreateIcon,\n FileIcon,\n ScrollArea,\n cn\n} from \"@tutti-os/ui-system\";\nimport type {\n IssueManagerFileReference,\n IssueManagerIssueSummary,\n IssueManagerRun,\n IssueManagerRunOutput,\n IssueManagerTaskSummary\n} from \"../../../contracts/index.ts\";\nimport {\n formatIssueManagerTimestamp,\n resolveIssueManagerStatusLabel\n} from \"../../../services/controllerModel.ts\";\nimport { IssueManagerTitleTooltip } from \"../content/IssueManagerTitleTooltip.tsx\";\nimport {\n stripIssueManagerDescriptionTerminalPunctuation,\n summarizeIssueManagerContent\n} from \"../panel/IssueManagerPanelText.ts\";\nimport { IssueManagerTaskListLoadingState } from \"../panel/IssueManagerPanelSurface.tsx\";\nimport { issueManagerStatusBadgeVariant } from \"../status/IssueManagerStatusBadge.ts\";\nimport type { IssueManagerLatestRunStatusRenderer } from \"../../latestRunStatusRenderer.ts\";\nimport type { IssueManagerController } from \"../../react/index.ts\";\nimport type { IssueManagerI18nRuntime } from \"../../../i18n/issueManagerI18n.ts\";\nimport { logIssueManagerDiagnostic } from \"../../../internal/issueManagerDiagnostics.ts\";\n\nexport function IssueManagerDetailTextSection({\n body,\n isPlaceholder = false,\n label,\n meta,\n tone = \"muted\"\n}: {\n body: string;\n isPlaceholder?: boolean;\n label: string;\n meta?: string;\n tone?: \"destructive\" | \"muted\";\n}): JSX.Element {\n const bodyText = stripIssueManagerDescriptionTerminalPunctuation(body);\n const metaText = meta\n ? stripIssueManagerDescriptionTerminalPunctuation(meta)\n : null;\n const bodyClassName = cn(\n \"max-w-full whitespace-normal break-words text-[13px] leading-5 [overflow-wrap:anywhere]\",\n isPlaceholder\n ? \"font-normal text-[var(--text-secondary)]\"\n : tone === \"destructive\"\n ? \"font-semibold text-[var(--state-danger)]\"\n : \"font-semibold text-[var(--text-primary)]\"\n );\n\n if (isPlaceholder) {\n return (\n <section className=\"grid gap-2.5\">\n <h3 className=\"text-[13px] font-semibold text-[var(--text-primary)]\">\n {label}\n </h3>\n <p className={bodyClassName}>{bodyText}</p>\n </section>\n );\n }\n\n return (\n <section className=\"grid gap-2.5\">\n <h3 className=\"text-[13px] font-semibold text-[var(--text-primary)]\">\n {label}\n </h3>\n <div className=\"min-w-0 rounded-[12px] border border-[var(--line-2)] px-4 py-3\">\n <p className={bodyClassName}>{bodyText}</p>\n {metaText ? (\n <p className=\"mt-1 truncate text-[11px] font-normal text-[var(--text-secondary)]\">\n {metaText}\n </p>\n ) : null}\n </div>\n </section>\n );\n}\n\nexport function IssueManagerLatestRunStatusSection({\n copy,\n latestRun,\n onOpenAgentSession,\n renderLatestRunStatus,\n title\n}: {\n copy: IssueManagerI18nRuntime;\n latestRun: IssueManagerRun | null;\n onOpenAgentSession?: (run: IssueManagerRun) => Promise<void>;\n renderLatestRunStatus?: IssueManagerLatestRunStatusRenderer;\n title?: string | null;\n}): JSX.Element {\n if (!latestRun) {\n return (\n <IssueManagerDetailTextSection\n body={copy.t(\"messages.noExecutionStatus\")}\n isPlaceholder\n label={copy.t(\"labels.latestRunStatus\")}\n />\n );\n }\n\n const agentSessionId = latestRun.agentSessionId?.trim() ?? \"\";\n const statusLabel = resolveIssueManagerStatusLabel(copy, latestRun.status);\n const summary = latestRun.summary?.trim() ?? \"\";\n const timestamp =\n formatIssueManagerTimestamp(\n latestRun.updatedAtUnix ??\n latestRun.completedAtUnix ??\n latestRun.startedAtUnix ??\n latestRun.createdAtUnix\n ) || \"\";\n const errorMessage = latestRun.errorMessage?.trim() ?? \"\";\n const canOpenAgentSession = Boolean(agentSessionId && onOpenAgentSession);\n const renderedLatestRunStatus =\n agentSessionId && renderLatestRunStatus\n ? renderLatestRunStatus({\n canOpenAgentSession,\n copy,\n latestRun,\n title: title?.trim() || \"\",\n onOpenAgentSession\n })\n : null;\n if (\n renderedLatestRunStatus !== null &&\n renderedLatestRunStatus !== undefined\n ) {\n return (\n <section className=\"grid gap-2.5\">\n <h3 className=\"text-[13px] font-semibold text-[var(--text-primary)]\">\n {copy.t(\"labels.latestRunStatus\")}\n </h3>\n {renderedLatestRunStatus}\n </section>\n );\n }\n\n const primaryText =\n agentSessionId || summary || latestRun.runId || statusLabel;\n const content = (\n <div className=\"flex min-w-0 items-start gap-3\">\n <span\n aria-hidden=\"true\"\n className={cn(\n \"mt-0.5 flex h-7 w-7 shrink-0 items-center justify-center rounded-md border border-[var(--line-2)]\",\n canOpenAgentSession\n ? \"bg-transparency-actived text-primary\"\n : \"bg-transparent text-[var(--text-secondary)]\"\n )}\n >\n <AgentSessionsIcon size={16} />\n </span>\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex min-w-0 flex-wrap items-center gap-2\">\n <p\n className={cn(\n \"min-w-0 flex-1 text-[13px] font-semibold leading-5 text-[var(--text-primary)] [overflow-wrap:anywhere]\",\n agentSessionId ? \"font-mono\" : \"\"\n )}\n >\n {primaryText}\n </p>\n <Badge variant={issueManagerStatusBadgeVariant(latestRun.status)}>\n {statusLabel}\n </Badge>\n </div>\n {summary && agentSessionId ? (\n <p className=\"mt-1 text-[11px] font-normal leading-5 text-[var(--text-secondary)] [overflow-wrap:anywhere]\">\n {summary}\n </p>\n ) : null}\n {timestamp ? (\n <p className=\"mt-1 truncate text-[11px] font-normal text-[var(--text-secondary)]\">\n {timestamp}\n </p>\n ) : null}\n {errorMessage ? (\n <p className=\"mt-2 text-[11px] font-medium leading-5 text-[var(--state-danger)] [overflow-wrap:anywhere]\">\n {errorMessage}\n </p>\n ) : null}\n </div>\n </div>\n );\n const cardClassName = cn(\n \"min-w-0 rounded-[12px] border border-[var(--line-2)] px-4 py-3\",\n canOpenAgentSession\n ? \"w-full bg-transparent text-left transition-colors hover:bg-transparency-hover focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/25 focus-visible:ring-inset\"\n : \"bg-transparent\"\n );\n\n return (\n <section className=\"grid gap-2.5\">\n <h3 className=\"text-[13px] font-semibold text-[var(--text-primary)]\">\n {copy.t(\"labels.latestRunStatus\")}\n </h3>\n {canOpenAgentSession ? (\n <button\n aria-label={copy.t(\"actions.openAgentSession\")}\n className={cardClassName}\n title={copy.t(\"actions.openAgentSession\")}\n type=\"button\"\n onClick={() => {\n void onOpenAgentSession?.(latestRun);\n }}\n >\n {content}\n </button>\n ) : (\n <div className={cardClassName}>{content}</div>\n )}\n </section>\n );\n}\n\nexport function IssueManagerOutputSection({\n copy,\n onOpen,\n outputs\n}: {\n copy: IssueManagerI18nRuntime;\n onOpen: (reference: IssueManagerFileReference) => Promise<void>;\n outputs: readonly IssueManagerRunOutput[];\n}): JSX.Element {\n return (\n <section className=\"grid gap-2.5\">\n <h3 className=\"text-[13px] font-semibold text-[var(--text-primary)]\">\n {copy.t(\"labels.executionOutputs\")}\n </h3>\n {outputs.length === 0 ? (\n <p className=\"text-[13px] font-normal leading-6 text-[var(--text-secondary)]\">\n {copy.t(\"messages.noExecutionOutputs\")}\n </p>\n ) : (\n <div className=\"overflow-hidden rounded-[12px] border border-[var(--line-2)] bg-transparent\">\n {outputs.map((output) => (\n <button\n aria-label={copy.t(\"actions.openReference\")}\n 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\"\n key={output.outputId}\n title={copy.t(\"actions.openReference\")}\n type=\"button\"\n onClick={() => {\n void onOpen({\n displayName: output.displayName,\n kind: \"file\",\n path: output.path\n });\n }}\n >\n <span className=\"flex min-w-0 flex-1 items-center gap-3\">\n <span\n aria-hidden=\"true\"\n className=\"flex h-8 w-8 shrink-0 items-center justify-center rounded-md border border-[var(--line-2)] bg-transparency-actived text-primary\"\n >\n <FileIcon size={16} />\n </span>\n <span className=\"min-w-0 flex-1\">\n <span className=\"block truncate text-[13px] font-semibold text-[var(--text-primary)]\">\n {output.displayName}\n </span>\n <span className=\"mt-1 block truncate text-[11px] font-normal text-[var(--text-secondary)]\">\n {output.path}\n </span>\n </span>\n </span>\n <span className=\"flex shrink-0 items-center gap-2\">\n <span className=\"text-[11px] font-normal text-[var(--text-secondary)]\">\n {formatIssueManagerTimestamp(output.createdAtUnix) || \"\"}\n </span>\n <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\">\n {copy.t(\"actions.openReference\")}\n <ArrowRightIcon size={13} />\n </span>\n </span>\n </button>\n ))}\n </div>\n )}\n </section>\n );\n}\n\nexport function IssueManagerSubtaskSection({\n copy,\n diagnostics,\n onCreate,\n onSelectTask,\n selectedTaskId,\n tasks\n}: {\n copy: IssueManagerI18nRuntime;\n diagnostics?: IssueManagerController[\"diagnostics\"];\n onCreate: () => void;\n onSelectTask: (taskId: string | null) => void;\n selectedTaskId: string | null;\n tasks: readonly IssueManagerTaskSummary[];\n}): JSX.Element {\n return (\n <section className=\"grid gap-2.5\">\n <div className=\"flex items-center justify-between gap-3\">\n <h3 className=\"text-[13px] font-semibold text-[var(--text-primary)]\">\n {copy.t(\"labels.subtasks\")}\n </h3>\n <Button size=\"dialog\" type=\"button\" variant=\"ghost\" onClick={onCreate}>\n <FileCreateIcon size={14} />\n {copy.t(\"actions.add\")}\n </Button>\n </div>\n {tasks.length === 0 ? (\n <p className=\"text-[13px] font-normal leading-6 text-[var(--text-secondary)]\">\n {copy.t(\"messages.noSubtasksForIssue\")}\n </p>\n ) : (\n <div className=\"overflow-hidden rounded-lg border border-[var(--line-2)] bg-transparent\">\n {tasks.map((task) => (\n <button\n className={cn(\n \"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 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/25 focus-visible:ring-inset\",\n selectedTaskId === task.taskId\n ? \"bg-transparency-actived\"\n : \"bg-transparent hover:bg-transparency-hover\"\n )}\n key={task.taskId}\n type=\"button\"\n onClick={(event: MouseEvent<HTMLButtonElement>) => {\n logIssueManagerDiagnostic(diagnostics, \"task_row.click\", {\n clientX: event.clientX,\n clientY: event.clientY,\n selectedTaskId,\n surface: \"detail_subtasks\",\n taskId: task.taskId,\n taskTitle: task.title\n });\n onSelectTask(task.taskId);\n }}\n >\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex min-w-0 items-center gap-2.5\">\n <IssueManagerTitleTooltip title={task.title}>\n <span className=\"truncate text-[13px] font-semibold text-[var(--text-primary)]\">\n {task.title}\n </span>\n </IssueManagerTitleTooltip>\n <Badge variant={issueManagerStatusBadgeVariant(task.status)}>\n {resolveIssueManagerStatusLabel(copy, task.status)}\n </Badge>\n </div>\n <p className=\"mt-2 line-clamp-2 text-[11px] font-normal leading-[1.5] text-[var(--text-secondary)]\">\n {summarizeIssueManagerContent(\n task.content,\n copy.t(\"messages.taskContentEmpty\")\n )}\n </p>\n </div>\n <span className=\"shrink-0 text-[11px] font-normal text-[var(--text-secondary)]\">\n {formatIssueManagerTimestamp(\n task.createdAtUnix ?? task.updatedAtUnix\n ) || \"\"}\n </span>\n </button>\n ))}\n </div>\n )}\n </section>\n );\n}\n\nexport function IssueManagerTaskSection({\n controller,\n selectedIssue,\n selectedTaskId\n}: {\n controller: IssueManagerController;\n selectedIssue: IssueManagerIssueSummary | null;\n selectedTaskId: string | null;\n}): JSX.Element {\n const copy = controller.copy;\n const tasks = controller.issueDetail.value?.tasks ?? [];\n\n return (\n <section className=\"border-t border-[var(--line-2)] bg-transparent\">\n <div className=\"flex items-center justify-between gap-4 border-b border-[var(--line-2)] px-8 py-4\">\n <div>\n <h3 className=\"text-[15px] font-semibold text-[var(--text-primary)]\">\n {copy.t(\"labels.taskList\")}\n </h3>\n </div>\n <Button\n className=\"px-3\"\n disabled={!selectedIssue}\n size=\"dialog\"\n type=\"button\"\n variant=\"secondary\"\n onClick={controller.createTaskDraft}\n >\n <FileCreateIcon size={14} />\n {copy.t(\"actions.createTask\")}\n </Button>\n </div>\n\n <ScrollArea scrollbarMode=\"native\" className=\"h-[16rem]\">\n <div className=\"px-8 py-5\">\n {controller.issueDetail.isLoading &&\n controller.issueDetail.value === null ? (\n <IssueManagerTaskListLoadingState />\n ) : tasks.length === 0 ? (\n <div className=\"overflow-hidden rounded-lg border border-[var(--line-2)] bg-transparent\">\n <div className=\"px-4 py-10 text-center\">\n <p className=\"text-[13px] font-semibold leading-5 text-[var(--text-primary)]\">\n {copy.t(\"messages.noTasks\")}\n </p>\n <p className=\"mt-2 text-[13px] font-normal leading-5 text-[var(--text-secondary)]\">\n {copy.t(\"messages.noTasksForIssueBody\")}\n </p>\n </div>\n </div>\n ) : (\n <div className=\"overflow-hidden rounded-lg border border-[var(--line-2)] bg-transparent\">\n {tasks.map((task) => (\n <button\n className={cn(\n \"block w-full border-b border-[var(--line-2)] px-3.5 py-3.5 text-left transition-colors last:border-b-0 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/25 focus-visible:ring-inset\",\n selectedTaskId === task.taskId\n ? \"bg-transparency-actived\"\n : \"bg-transparent hover:bg-transparency-hover\"\n )}\n key={task.taskId}\n type=\"button\"\n onClick={(event: MouseEvent<HTMLButtonElement>) => {\n logIssueManagerDiagnostic(\n controller.diagnostics,\n \"task_row.click\",\n {\n clientX: event.clientX,\n clientY: event.clientY,\n selectedTaskId,\n surface: \"task_section\",\n taskId: task.taskId,\n taskTitle: task.title\n }\n );\n controller.selectTask(task.taskId);\n }}\n >\n <div className=\"flex min-w-0 flex-col gap-2\">\n <div className=\"flex min-w-0 items-center justify-between gap-3\">\n <div className=\"flex min-w-0 flex-wrap items-center gap-2.5\">\n <IssueManagerTitleTooltip title={task.title}>\n <span className=\"line-clamp-1 text-[13px] font-semibold leading-[1.3] text-[var(--text-primary)]\">\n {task.title}\n </span>\n </IssueManagerTitleTooltip>\n <Badge\n variant={issueManagerStatusBadgeVariant(task.status)}\n >\n {resolveIssueManagerStatusLabel(copy, task.status)}\n </Badge>\n </div>\n <p className=\"text-[11px] font-normal leading-[18px] text-[var(--text-secondary)]\">\n {formatIssueManagerTimestamp(\n task.createdAtUnix ?? task.updatedAtUnix\n )}\n </p>\n </div>\n <p className=\"line-clamp-2 text-[11px] font-normal leading-[1.5] text-[var(--text-secondary)]\">\n {summarizeIssueManagerContent(\n task.content,\n copy.t(\"messages.taskContentEmpty\")\n )}\n </p>\n </div>\n </button>\n ))}\n </div>\n )}\n </div>\n </ScrollArea>\n </section>\n );\n}\n","import { type ReactElement } from \"react\";\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"@tutti-os/ui-system\";\n\nconst TRUNCATED_TITLE_TOOLTIP_DELAY_MS = 300;\n\nexport function IssueManagerTitleTooltip({\n children,\n title\n}: {\n children: ReactElement;\n title: string;\n}): ReactElement {\n return (\n <Tooltip delayDuration={TRUNCATED_TITLE_TOOLTIP_DELAY_MS}>\n <TooltipTrigger asChild>{children}</TooltipTrigger>\n <TooltipContent\n className=\"max-w-[min(420px,calc(100vw-32px))] whitespace-normal text-left [overflow-wrap:anywhere]\"\n side=\"top\"\n >\n {title}\n </TooltipContent>\n </Tooltip>\n );\n}\n","import { extractIssueManagerPlainTextFromContent } from \"../../../core/index.ts\";\nimport type {\n IssueManagerIssueSummary,\n IssueManagerTaskSummary\n} from \"../../../contracts/index.ts\";\n\nexport function summarizeIssueManagerContent(\n content: string | null | undefined,\n fallback: string\n): string {\n const plainText = stripIssueManagerDescriptionTerminalPunctuation(\n extractIssueManagerPlainTextFromContent(content ?? \"\")\n );\n if (!plainText) {\n return stripIssueManagerDescriptionTerminalPunctuation(fallback);\n }\n if (plainText.length <= 120) {\n return plainText;\n }\n return `${plainText.slice(0, 117)}...`;\n}\n\nexport function stripIssueManagerDescriptionTerminalPunctuation(\n value: string\n): string {\n const trimmed = value.trim();\n if (!trimmed || trimmed.endsWith(\"...\") || trimmed.endsWith(\"…\")) {\n return trimmed;\n }\n return trimmed.replace(/[。..]+$/u, \"\");\n}\n\nexport function resolveTaskCreatorLabel(task: IssueManagerTaskSummary): string {\n return resolveIssueManagerCreatorLabel(task);\n}\n\nexport function resolveIssueManagerCreatorLabel(\n entity:\n | Pick<IssueManagerIssueSummary, \"creatorDisplayName\" | \"creatorUserId\">\n | Pick<IssueManagerTaskSummary, \"creatorDisplayName\" | \"creatorUserId\">\n): string {\n return entity.creatorDisplayName?.trim() || entity.creatorUserId;\n}\n","import { type JSX, type ReactNode } from \"react\";\nimport { Button, FileCreateIcon } from \"@tutti-os/ui-system\";\n\nexport function IssueManagerEmptyIllustration({\n src\n}: {\n src: string;\n}): JSX.Element {\n return (\n <img\n alt=\"\"\n aria-hidden=\"true\"\n className=\"h-[84px] w-[84px] object-contain\"\n decoding=\"async\"\n draggable={false}\n src={src}\n />\n );\n}\n\nexport function IssueManagerTaskEmptyState({\n body,\n ctaLabel,\n illustration,\n onCreate,\n title\n}: {\n body: string;\n ctaLabel: string;\n illustration?: ReactNode;\n onCreate: () => void;\n title: string;\n}): JSX.Element {\n return (\n <div className=\"flex min-h-[320px] items-center justify-center px-6 py-10 text-center\">\n <div className=\"grid max-w-[420px] justify-items-center gap-2\">\n {illustration ?? null}\n <p className=\"text-[15px] font-semibold leading-[1.35] text-[var(--text-primary)]\">\n {title}\n </p>\n <p className=\"max-w-[420px] text-[15px] leading-[1.3] text-[var(--text-secondary)]\">\n {body}\n </p>\n <Button\n className=\"mt-2 gap-2 px-[18px]\"\n size=\"dialog\"\n type=\"button\"\n onClick={onCreate}\n >\n <FileCreateIcon size={16} />\n {ctaLabel}\n </Button>\n </div>\n </div>\n );\n}\n\nexport function IssueManagerPaneLoadingState(): JSX.Element {\n return (\n <div\n aria-hidden=\"true\"\n className=\"mx-auto flex w-full max-w-4xl flex-col gap-6\"\n >\n <div className=\"h-6 w-28 rounded-full bg-muted\" />\n <div className=\"h-12 w-2/3 rounded-full bg-muted\" />\n <div className=\"rounded-[28px] border border-border/70 bg-transparent px-5 py-5\">\n <div className=\"h-4 w-24 rounded-full bg-muted\" />\n <div className=\"mt-5 h-4 w-full rounded-full bg-muted\" />\n <div className=\"mt-3 h-4 w-11/12 rounded-full bg-muted\" />\n <div className=\"mt-3 h-4 w-10/12 rounded-full bg-muted\" />\n </div>\n <div className=\"rounded-[24px] border border-border/70 bg-transparent px-5 py-5\">\n <div className=\"h-4 w-32 rounded-full bg-muted\" />\n <div className=\"mt-5 h-4 w-full rounded-full bg-muted\" />\n <div className=\"mt-3 h-4 w-9/12 rounded-full bg-muted\" />\n </div>\n </div>\n );\n}\n\nexport function IssueManagerTaskListLoadingState(): JSX.Element {\n return (\n <div\n aria-hidden=\"true\"\n className=\"overflow-hidden rounded-lg border border-border/70 bg-transparent\"\n >\n {Array.from({ length: 3 }, (_, index) => (\n <div\n className=\"border-b border-border/70 px-3.5 py-3.5 last:border-b-0\"\n key={index}\n >\n <div className=\"flex items-center justify-between gap-3\">\n <div className=\"h-4 w-2/5 rounded-full bg-muted\" />\n <div className=\"h-3.5 w-20 rounded-full bg-muted\" />\n </div>\n <div className=\"mt-3 h-3.5 w-full rounded-full bg-muted\" />\n <div className=\"mt-2 h-3.5 w-4/5 rounded-full bg-muted\" />\n </div>\n ))}\n </div>\n );\n}\n\nexport function IssueManagerTaskDrawerLoadingState(): JSX.Element {\n return (\n <div aria-hidden=\"true\" className=\"grid gap-5\">\n <div className=\"h-12 w-full rounded-2xl bg-muted\" />\n <div className=\"grid grid-cols-2 gap-3\">\n <div className=\"h-10 rounded-xl bg-muted\" />\n <div className=\"h-10 rounded-xl bg-muted\" />\n </div>\n <div className=\"rounded-[24px] border border-border/70 bg-transparent px-4 py-4\">\n <div className=\"h-4 w-24 rounded-full bg-muted\" />\n <div className=\"mt-4 h-4 w-full rounded-full bg-muted\" />\n <div className=\"mt-3 h-4 w-11/12 rounded-full bg-muted\" />\n <div className=\"mt-3 h-4 w-9/12 rounded-full bg-muted\" />\n </div>\n </div>\n );\n}\n","import type {\n IssueManagerIssueSummary,\n IssueManagerRun,\n IssueManagerTaskSummary\n} from \"../../../contracts/index.ts\";\n\nexport function resolveIssueManagerIssueAcceptanceTaskId(input: {\n latestRun: IssueManagerRun | null;\n selectedIssue: IssueManagerIssueSummary | null;\n selectedTaskId: string | null;\n tasks: readonly IssueManagerTaskSummary[];\n}): string | null {\n if (\n input.selectedIssue?.status !== \"pending_acceptance\" ||\n input.latestRun?.status !== \"completed\" ||\n input.selectedTaskId\n ) {\n return null;\n }\n\n return resolveIssueManagerIssueRunTaskId({\n latestRun: input.latestRun,\n selectedIssue: input.selectedIssue,\n tasks: input.tasks\n });\n}\n\nexport function resolveIssueManagerIssueRunTaskId(input: {\n latestRun: IssueManagerRun | null;\n selectedIssue: IssueManagerIssueSummary | null;\n tasks: readonly IssueManagerTaskSummary[];\n}): string | null {\n if (!input.selectedIssue) {\n return null;\n }\n\n const taskId = input.latestRun?.taskId?.trim() ?? \"\";\n if (!taskId) {\n return null;\n }\n\n const visibleTask = input.tasks.find((task) => task.taskId === taskId);\n const issueTitle = input.selectedIssue.title.trim();\n const taskTitle = visibleTask?.title.trim() ?? \"\";\n if (visibleTask && taskTitle !== \"\" && taskTitle !== issueTitle) {\n return null;\n }\n\n return taskId;\n}\n\nexport function resolveIssueManagerVisibleSubtasks(input: {\n hiddenIssueRunTaskId: string | null;\n tasks: readonly IssueManagerTaskSummary[];\n}): IssueManagerTaskSummary[] {\n const hiddenTaskId = input.hiddenIssueRunTaskId?.trim() ?? \"\";\n if (!hiddenTaskId) {\n return [...input.tasks];\n }\n\n return input.tasks.filter((task) => {\n return task.taskId !== hiddenTaskId;\n });\n}\n","import { useEffect, useRef, useState, type JSX } from \"react\";\nimport { RichTextReadonlyContent } from \"@tutti-os/ui-rich-text/editor\";\nimport type { RichTextMentionAttrs } from \"@tutti-os/ui-rich-text/types\";\nimport { cn } from \"@tutti-os/ui-system\";\nimport { normalizeIssueManagerContent } from \"../../../core/index.ts\";\nimport type { IssueManagerFileReference } from \"../../../contracts/index.ts\";\nimport { stripIssueManagerDescriptionTerminalPunctuation } from \"../panel/IssueManagerPanelText.ts\";\n\nexport function IssueManagerDescriptionSection({\n content,\n emptyLabel,\n label,\n minHeightClass = \"min-h-[14rem]\",\n onMentionAction,\n onOpen,\n variant = \"card\"\n}: {\n content: string;\n emptyLabel: string;\n label: string;\n minHeightClass?: string;\n onMentionAction?: (mention: RichTextMentionAttrs) => Promise<void>;\n onOpen?: (reference: IssueManagerFileReference) => Promise<void>;\n variant?: \"card\" | \"plain\";\n}): JSX.Element {\n const contentRef = useRef<HTMLDivElement | null>(null);\n const [isOverflowing, setIsOverflowing] = useState(false);\n const normalizedContent = normalizeIssueManagerContent(content).trim();\n const displayContent =\n stripIssueManagerDescriptionTerminalPunctuation(normalizedContent);\n\n useEffect(() => {\n if (variant === \"plain\") {\n setIsOverflowing(false);\n return;\n }\n if (!displayContent) {\n setIsOverflowing(false);\n return;\n }\n\n const contentElement = contentRef.current;\n if (!contentElement) {\n return;\n }\n\n const measure = () => {\n setIsOverflowing(\n contentElement.scrollHeight > contentElement.clientHeight + 1\n );\n };\n\n measure();\n if (typeof ResizeObserver === \"undefined\") {\n return;\n }\n\n const observer = new ResizeObserver(() => {\n measure();\n });\n observer.observe(contentElement);\n return () => {\n observer.disconnect();\n };\n }, [displayContent, variant]);\n\n if (variant === \"plain\") {\n return (\n <section className=\"grid gap-2\">\n <span className=\"text-[13px] font-semibold leading-5 text-[var(--text-primary)]\">\n {label}\n </span>\n {displayContent ? (\n <div className=\"min-w-0 max-w-full text-[13px] font-normal leading-5 text-[var(--text-secondary)] sm:max-w-3xl\">\n <IssueManagerDescriptionContent\n content={displayContent}\n onMentionAction={onMentionAction}\n onOpen={onOpen}\n />\n </div>\n ) : (\n <p className=\"text-[13px] font-normal leading-5 text-[var(--text-secondary)]\">\n {emptyLabel}\n </p>\n )}\n </section>\n );\n }\n\n return (\n <section className=\"grid gap-2\">\n <span className=\"text-[13px] font-semibold leading-5 text-[var(--text-primary)]\">\n {label}\n </span>\n <div\n className={cn(\n \"relative min-w-0 rounded-lg border border-border-1 bg-transparent px-4 py-3\",\n minHeightClass\n )}\n >\n <div\n className={cn(\n \"min-w-0 max-w-full overflow-x-hidden max-h-[18rem] overflow-y-auto pr-2 text-[13px] font-normal leading-5 text-[var(--text-secondary)]\",\n isOverflowing && \"pb-8\"\n )}\n ref={contentRef}\n >\n {displayContent ? (\n <IssueManagerDescriptionContent\n content={displayContent}\n onMentionAction={onMentionAction}\n onOpen={onOpen}\n />\n ) : (\n <p className=\"font-normal text-[var(--text-secondary)]\">\n {emptyLabel}\n </p>\n )}\n </div>\n {isOverflowing ? (\n <div\n className=\"pointer-events-none absolute right-0 bottom-1 left-0 h-10\"\n style={{\n background:\n \"linear-gradient(to top, var(--background-panel), color-mix(in srgb, var(--background-panel) 80%, transparent), transparent)\"\n }}\n />\n ) : null}\n </div>\n </section>\n );\n}\n\nfunction IssueManagerDescriptionContent({\n content,\n onMentionAction,\n onOpen\n}: {\n content: string;\n onMentionAction?: (mention: RichTextMentionAttrs) => Promise<void>;\n onOpen?: (reference: IssueManagerFileReference) => Promise<void>;\n}): JSX.Element {\n return (\n <RichTextReadonlyContent\n className=\"min-w-0 max-w-full [overflow-wrap:anywhere]\"\n paragraphClassName=\"break-words [overflow-wrap:anywhere]\"\n value={content}\n onMentionAction={onMentionAction}\n onOpenWorkspaceReference={\n onOpen\n ? (reference) =>\n onOpen({\n displayName: reference.label,\n kind: reference.kind,\n path: reference.path\n })\n : undefined\n }\n />\n );\n}\n","import { useEffect, useMemo, useRef, useState, type JSX } from \"react\";\nimport { RichTextTriggerEditor } from \"@tutti-os/ui-rich-text/editor\";\nimport { Button, LinkIcon, cn } from \"@tutti-os/ui-system\";\nimport type {\n IssueManagerController,\n IssueManagerRichTextSurface\n} from \"../../react/index.ts\";\n\nconst issueManagerRichTextTextareaBaseClassName =\n \"min-h-20 w-full rounded-[8px] border border-transparent bg-[var(--transparency-block)] p-3 text-[13px] font-normal leading-[1.3] text-[var(--text-primary)] transition-[background-color,border-color,color] outline-none shadow-none placeholder:text-[var(--text-placeholder)] hover:bg-[var(--transparency-hover)] focus:bg-[var(--transparency-hover)] focus-visible:border-transparent focus-visible:bg-[var(--transparency-hover)] focus-visible:ring-0 disabled:cursor-not-allowed disabled:bg-[var(--transparency-block)] disabled:text-[var(--text-disabled)] disabled:opacity-100 aria-invalid:border-[var(--state-danger)] aria-invalid:bg-[var(--transparency-block)] aria-invalid:hover:bg-[var(--transparency-hover)] aria-invalid:focus:bg-[var(--transparency-hover)] aria-invalid:focus-visible:bg-[var(--transparency-hover)] aria-invalid:ring-0 aria-invalid:shadow-none\";\n\nconst issueManagerRichTextPlaceholderBaseClassName =\n \"min-h-20 w-full p-3 text-[13px] font-normal leading-[1.3] text-[var(--text-placeholder)]\";\n\nexport function IssueManagerRichTextTextarea({\n controller,\n onChange,\n placeholder,\n surface,\n textareaClassName,\n value\n}: {\n controller: IssueManagerController;\n onChange: (value: string) => void;\n placeholder?: string;\n surface: IssueManagerRichTextSurface;\n textareaClassName?: string;\n value: string;\n}): JSX.Element {\n const providers = useMemo(\n () => controller.resolveRichTextTriggerProviders(surface),\n [controller, surface]\n );\n const showReferenceAction = controller.canReferenceWorkspaceFiles;\n const [focusSignal, setFocusSignal] = useState(0);\n const previousValueRef = useRef(value);\n const wasAddingReferenceRef = useRef(false);\n\n useEffect(() => {\n const isAddingReference =\n controller.referenceTarget?.mode === \"insert\" &&\n controller.referenceTarget.parentKind === surface;\n if (\n wasAddingReferenceRef.current &&\n !isAddingReference &&\n value !== previousValueRef.current\n ) {\n setFocusSignal((current) => current + 1);\n }\n wasAddingReferenceRef.current = isAddingReference;\n previousValueRef.current = value;\n }, [controller.referenceTarget, surface, value]);\n\n return (\n <RichTextTriggerEditor\n focusSignal={focusSignal}\n maxResults={8}\n minQueryLength={1}\n triggerProviders={providers}\n textOverrides={{\n loadingLabel: controller.copy.t(\"richTextAt.loading\"),\n noMatchesLabel: controller.copy.t(\"richTextAt.noMatches\"),\n removeReferenceActionLabel: controller.copy.t(\"actions.removeReference\")\n }}\n textareaClassName={cn(\n issueManagerRichTextTextareaBaseClassName,\n textareaClassName,\n showReferenceAction && \"pb-11\"\n )}\n placeholderClassName={cn(\n issueManagerRichTextPlaceholderBaseClassName,\n textareaClassName,\n showReferenceAction && \"pb-11\"\n )}\n placeholder={placeholder}\n value={value}\n onChange={onChange}\n overlay={\n showReferenceAction ? (\n <div className=\"pointer-events-none absolute inset-x-3 bottom-3 z-10 flex\">\n <Button\n className=\"pointer-events-auto\"\n size=\"default\"\n type=\"button\"\n variant=\"secondary\"\n onClick={() => {\n void controller.insertReferences(surface);\n }}\n >\n <LinkIcon size={14} />\n {controller.copy.t(\"actions.referenceWorkspaceFiles\")}\n </Button>\n </div>\n ) : null\n }\n />\n );\n}\n","import { type JSX } from \"react\";\nimport { Button } from \"@tutti-os/ui-system\";\nimport type { IssueManagerController } from \"../../react/index.ts\";\n\nexport function IssueManagerTaskAcceptanceCard({\n controller,\n taskId\n}: {\n controller: IssueManagerController;\n taskId?: string | null;\n}): JSX.Element {\n const copy = controller.copy;\n const updateStatus = (status: \"completed\" | \"not_started\") => {\n if (taskId) {\n void controller.setTaskStatus(taskId, status);\n return;\n }\n void controller.setSelectedTaskStatus(status);\n };\n\n return (\n <div className=\"grid gap-2 rounded-md bg-[var(--transparency-block)] px-3 py-2\">\n <div className=\"min-w-0 text-[11px] font-normal leading-[1.45] text-[var(--text-secondary)] [overflow-wrap:anywhere]\">\n <span className=\"font-semibold text-[var(--text-primary)]\">\n {copy.t(\"labels.taskAcceptance\")}\n </span>\n <span className=\"mx-1 text-[var(--text-tertiary)]\">·</span>\n <span>{copy.t(\"messages.taskAcceptanceHint\")}</span>\n </div>\n <div className=\"flex items-center justify-end gap-2\">\n <Button\n className=\"h-7 px-2 text-[11px] text-[var(--state-danger)] hover:bg-[var(--on-danger)] hover:text-[var(--state-danger)]\"\n type=\"button\"\n variant=\"ghost\"\n onClick={() => updateStatus(\"not_started\")}\n >\n {copy.t(\"actions.rejectTask\")}\n </Button>\n <Button\n className=\"h-7 px-2.5 text-[11px]\"\n type=\"button\"\n variant=\"secondary\"\n onClick={() => updateStatus(\"completed\")}\n >\n {copy.t(\"actions.acceptTask\")}\n </Button>\n </div>\n </div>\n );\n}\n","import { useComposedInputValue } from \"@tutti-os/ui-react-hooks\";\nimport { useLayoutEffect, useRef, type JSX } from \"react\";\nimport { Input } from \"@tutti-os/ui-system\";\n\nexport function IssueManagerDraftTitleInput({\n onChange,\n placeholder,\n value\n}: {\n onChange: (value: string) => void;\n placeholder: string;\n value: string;\n}): JSX.Element {\n const inputRef = useRef<HTMLInputElement | null>(null);\n const pendingSelectionRef = useRef<{\n direction: \"backward\" | \"forward\" | \"none\";\n end: number;\n start: number;\n } | null>(null);\n const titleInput = useComposedInputValue({ onCommit: onChange, value });\n\n useLayoutEffect(() => {\n const input = inputRef.current;\n const selection = pendingSelectionRef.current;\n if (!input || !selection || document.activeElement !== input) {\n return;\n }\n pendingSelectionRef.current = null;\n const maxPosition = input.value.length;\n input.setSelectionRange(\n Math.min(selection.start, maxPosition),\n Math.min(selection.end, maxPosition),\n selection.direction\n );\n }, [titleInput.value, value]);\n\n const rememberSelection = (input: HTMLInputElement) => {\n const start = input.selectionStart;\n const end = input.selectionEnd;\n if (start === null || end === null) {\n return;\n }\n pendingSelectionRef.current = {\n direction: input.selectionDirection ?? \"none\",\n end,\n start\n };\n };\n\n return (\n <Input\n ref={inputRef}\n placeholder={placeholder}\n variant=\"md\"\n value={titleInput.value}\n onBlur={titleInput.onBlur}\n onChange={(event) => {\n rememberSelection(event.currentTarget);\n titleInput.onChange(event);\n }}\n onCompositionEnd={(event) => {\n rememberSelection(event.currentTarget);\n titleInput.onCompositionEnd(event);\n }}\n onCompositionStart={titleInput.onCompositionStart}\n />\n );\n}\n","export const issueManagerEditorRiseInClassName =\n \"motion-safe:animate-in motion-safe:fade-in-0 motion-safe:slide-in-from-bottom-3 motion-safe:duration-[240ms] motion-safe:ease-[cubic-bezier(0.22,1,0.36,1)] motion-safe:[animation-fill-mode:both] motion-reduce:animate-none\";\n\nexport const issueManagerEditorRiseInDelay0ClassName =\n \"motion-safe:[animation-delay:0ms]\";\n\nexport const issueManagerEditorRiseInDelay1ClassName =\n \"motion-safe:[animation-delay:55ms]\";\n\nexport const issueManagerEditorRiseInDelay2ClassName =\n \"motion-safe:[animation-delay:110ms]\";\n\nexport const issueManagerEditorRiseInDelay3ClassName =\n \"motion-safe:[animation-delay:165ms]\";\n\nexport const issueManagerEditorFooterFadeInClassName =\n \"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\";\n","import { type JSX } from \"react\";\nimport { Button, cn } from \"@tutti-os/ui-system\";\nimport type { IssueManagerIssueSummary } from \"../../../contracts/index.ts\";\nimport {\n IssueManagerBreakdownActionTrigger,\n IssueManagerExecutionDirectoryTrigger,\n IssueManagerRunActionTrigger\n} from \"../task/IssueManagerRunSections.tsx\";\nimport type { IssueManagerController } from \"../../react/index.ts\";\nimport { isIssueManagerRunControlDisabled } from \"./IssueManagerTaskDrawerState.ts\";\n\nexport interface IssueManagerBottomBarProps {\n controller: IssueManagerController;\n isNarrowLayout: boolean;\n selectedIssue: IssueManagerIssueSummary | null;\n visible: boolean;\n}\n\nexport function IssueManagerBottomBar({\n controller,\n isNarrowLayout,\n selectedIssue,\n visible\n}: IssueManagerBottomBarProps): JSX.Element | null {\n const copy = controller.copy;\n if (!visible || !selectedIssue) {\n return null;\n }\n const runControlsDisabled = isIssueManagerRunControlDisabled({\n selectedIssueStatus: selectedIssue.status,\n selectedTaskStatus: null\n });\n\n return (\n <div className=\"border-t border-[var(--border-1)] bg-transparent px-6 py-4 backdrop-blur\">\n <div\n className={cn(\n \"flex gap-3\",\n isNarrowLayout\n ? \"flex-wrap items-center justify-end\"\n : \"items-center justify-end\"\n )}\n >\n <IssueManagerExecutionDirectoryTrigger\n className=\"mr-auto min-w-0 max-w-[240px] justify-start overflow-hidden\"\n controller={controller}\n disabled={runControlsDisabled}\n />\n <div className=\"flex shrink-0 flex-nowrap items-center justify-end gap-3\">\n <IssueManagerBreakdownActionTrigger\n controller={controller}\n disabled={!selectedIssue}\n triggerVariant=\"button\"\n />\n <IssueManagerRunActionTrigger\n controller={controller}\n disabled={!selectedIssue || runControlsDisabled}\n triggerVariant=\"button\"\n />\n {controller.canInviteCollaborators ? (\n <Button\n className=\"px-4\"\n disabled={!selectedIssue}\n size=\"dialog\"\n type=\"button\"\n onClick={() => {\n void controller.shareSelection();\n }}\n >\n {copy.t(\"actions.inviteCollaborator\")}\n </Button>\n ) : null}\n </div>\n </div>\n </div>\n );\n}\n","import { type JSX, type ReactNode } from \"react\";\nimport {\n Badge,\n AgentSessionsIcon,\n Button,\n CheckIcon,\n ChevronDownIcon,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n IssueIcon,\n cn\n} from \"@tutti-os/ui-system\";\nimport { WorkspaceUserProjectSelect } from \"@tutti-os/workspace-user-project/ui\";\nimport type {\n IssueManagerFileReference,\n IssueManagerRun,\n IssueManagerRunOutput\n} from \"../../../contracts/index.ts\";\nimport type { IssueManagerI18nRuntime } from \"../../../i18n/issueManagerI18n.ts\";\nimport {\n formatIssueManagerTimestamp,\n resolveIssueManagerStatusLabel\n} from \"../../../services/controllerModel.ts\";\nimport type { IssueManagerController } from \"../../react/index.ts\";\nimport { issueManagerStatusBadgeVariant } from \"../status/IssueManagerStatusBadge.ts\";\n\nconst providerMenuItemClassName =\n \"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)]\";\nconst providerMenuItemCheckClassName =\n \"pointer-events-none absolute right-2 top-1/2 shrink-0 -translate-y-1/2\";\nconst providerActionTriggerClassName = \"font-[var(--font-weight-emphasis-cjk)]\";\n\nexport function IssueManagerRunActionTrigger({\n controller,\n disabled = false,\n triggerClassName,\n triggerVariant = \"default\"\n}: {\n controller: IssueManagerController;\n disabled?: boolean;\n triggerClassName?: string;\n triggerVariant?: IssueManagerProviderActionTriggerVariant;\n}): JSX.Element {\n return (\n <IssueManagerProviderActionMenu\n controller={controller}\n disabled={disabled}\n icon={<AgentSessionsIcon size={16} />}\n label={controller.copy.t(\"actions.askAgentToRun\")}\n triggerClassName={triggerClassName}\n triggerVariant={triggerVariant}\n onSelectProvider={(provider) => controller.runTask(provider)}\n />\n );\n}\n\nexport function IssueManagerBreakdownActionTrigger({\n controller,\n disabled = false,\n triggerClassName,\n triggerVariant = \"default\"\n}: {\n controller: IssueManagerController;\n disabled?: boolean;\n triggerClassName?: string;\n triggerVariant?: IssueManagerProviderActionTriggerVariant;\n}): JSX.Element {\n return (\n <IssueManagerProviderActionMenu\n controller={controller}\n disabled={disabled}\n icon={<IssueIcon size={16} />}\n label={controller.copy.t(\"actions.askAgentToBreakdown\")}\n triggerClassName={triggerClassName}\n triggerVariant={triggerVariant}\n triggerButtonVariant=\"secondary\"\n onSelectProvider={(provider) => controller.startTaskBreakdown(provider)}\n />\n );\n}\n\ntype IssueManagerProviderActionTriggerVariant = \"button\" | \"default\";\n\nfunction IssueManagerProviderActionMenu({\n controller,\n disabled,\n icon,\n label,\n onSelectProvider,\n triggerButtonVariant,\n triggerClassName,\n triggerVariant\n}: {\n controller: IssueManagerController;\n disabled: boolean;\n icon: ReactNode;\n label: string;\n onSelectProvider: (provider: string) => Promise<void>;\n triggerButtonVariant?: \"secondary\";\n triggerClassName?: string;\n triggerVariant: IssueManagerProviderActionTriggerVariant;\n}): JSX.Element {\n const providerOptions = controller.providerOptions;\n const selectedProvider = controller.nodeState.selectedAgentProvider.trim();\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild disabled={disabled}>\n <Button\n className={cn(\n \"min-w-0\",\n \"[&[data-state=open]_[data-issue-manager-provider-chevron=true]]:rotate-180\",\n providerActionTriggerClassName,\n triggerClassName\n )}\n disabled={disabled}\n size={triggerVariant === \"button\" ? \"dialog\" : \"default\"}\n type=\"button\"\n variant={triggerButtonVariant}\n >\n {icon}\n <span className=\"truncate\">{label}</span>\n <ChevronDownIcon\n className=\"shrink-0 transition-transform duration-200\"\n data-issue-manager-provider-chevron=\"true\"\n size={14}\n />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n align=\"end\"\n className=\"w-[220px] min-w-[220px]\"\n style={{ zIndex: \"var(--z-panel-popover)\" }}\n >\n {providerOptions.length === 0 ? (\n <DropdownMenuItem className={providerMenuItemClassName} disabled>\n {controller.copy.t(\"messages.noAgentProviders\")}\n </DropdownMenuItem>\n ) : (\n providerOptions.map((option) => (\n <DropdownMenuItem\n className={providerMenuItemClassName}\n disabled={option.disabled === true}\n key={option.provider}\n title={option.disabledReason}\n onSelect={() => {\n void onSelectProvider(option.provider);\n }}\n >\n <span className=\"flex min-w-0 flex-1 items-center gap-2 pr-1\">\n <IssueManagerAgentProviderIcon\n fallbackIcon={<AgentSessionsIcon aria-hidden size={15} />}\n iconUrl={option.iconUrl}\n />\n <span className=\"min-w-0 flex-1 truncate\">{option.label}</span>\n {option.provider === selectedProvider ? (\n <CheckIcon\n className={providerMenuItemCheckClassName}\n size={15}\n />\n ) : null}\n </span>\n </DropdownMenuItem>\n ))\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n\nfunction IssueManagerAgentProviderIcon({\n fallbackIcon,\n iconUrl\n}: {\n fallbackIcon: ReactNode;\n iconUrl?: string | null;\n}): JSX.Element {\n const normalizedIconUrl = iconUrl?.trim();\n\n if (!normalizedIconUrl) {\n return <>{fallbackIcon}</>;\n }\n\n return (\n <img\n alt=\"\"\n aria-hidden=\"true\"\n className=\"size-4 shrink-0 rounded-[4px] object-contain\"\n decoding=\"async\"\n draggable={false}\n src={normalizedIconUrl}\n />\n );\n}\n\nexport function IssueManagerExecutionDirectoryTrigger({\n className,\n controller,\n disabled = false\n}: {\n className?: string;\n controller: IssueManagerController;\n disabled?: boolean;\n}): JSX.Element | null {\n if (!controller.canSelectExecutionDirectory) {\n return null;\n }\n\n return (\n <WorkspaceUserProjectSelect\n classNames={{\n content: \"w-[240px] min-w-[240px]\",\n item: \"min-h-7 overflow-hidden rounded-md py-1 pr-7 pl-2.5 text-[13px] font-normal leading-[1.2] text-[var(--text-primary)]\",\n trigger: cn(\n \"group inline-flex min-h-7 max-w-[240px] min-w-0 items-center gap-1.5 overflow-hidden rounded-md border-0 bg-transparent px-0.5 py-0 text-[13px] font-normal leading-[1.2] text-[var(--text-secondary)] shadow-none outline-none hover:bg-transparent hover:text-[var(--text-primary)] focus:bg-transparent focus:text-[var(--text-primary)] focus-visible:bg-transparent focus-visible:ring-0 disabled:bg-transparent disabled:text-[var(--text-disabled)]\",\n className\n )\n }}\n contentAlign=\"end\"\n disabled={disabled}\n i18n={controller.workspaceUserProjectI18n}\n service={controller.executionDirectoryProjectService}\n selectedProjectPath={controller.nodeState.selectedExecutionDirectory}\n unlistedProjectLabel={controller.copy.t(\n \"labels.customExecutionDirectory\"\n )}\n onProjectPathChange={(path: string | null) => {\n void controller.useExecutionDirectory(path);\n }}\n />\n );\n}\n\nexport function IssueManagerRunPanels({\n copy,\n onOpen,\n outputs,\n recentRuns\n}: {\n copy: IssueManagerI18nRuntime;\n onOpen: (reference: IssueManagerFileReference) => Promise<void>;\n outputs: readonly IssueManagerRunOutput[];\n recentRuns: readonly IssueManagerRun[];\n}): JSX.Element {\n return (\n <div className=\"grid gap-4\">\n <section className=\"rounded-lg border border-border-1 bg-transparent px-4 py-4\">\n <h4 className=\"mb-3 text-[13px] font-semibold leading-5 text-[var(--text-primary)]\">\n {copy.t(\"labels.recentRuns\")}\n </h4>\n {recentRuns.length === 0 ? (\n <p className=\"text-[13px] leading-5 text-[var(--text-secondary)]\">\n {copy.t(\"messages.noRecentRuns\")}\n </p>\n ) : (\n <div className=\"grid gap-2.5\">\n {recentRuns.map((run) => (\n <div\n className=\"rounded-lg border border-[var(--border-2)] bg-transparent px-3.5 py-3\"\n key={run.runId}\n >\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n <p className=\"truncate text-[13px] font-semibold leading-5 text-[var(--text-primary)]\">\n {run.summary || run.runId}\n </p>\n <p className=\"mt-1 text-[11px] leading-[1.55] text-[var(--text-secondary)]\">\n {formatIssueManagerTimestamp(\n run.updatedAtUnix ?? run.createdAtUnix\n )}\n </p>\n </div>\n <Badge variant={issueManagerStatusBadgeVariant(run.status)}>\n {resolveIssueManagerStatusLabel(copy, run.status)}\n </Badge>\n </div>\n {run.errorMessage ? (\n <p className=\"mt-2 text-[11px] text-[var(--state-danger)]\">\n {run.errorMessage}\n </p>\n ) : null}\n </div>\n ))}\n </div>\n )}\n </section>\n\n <section className=\"rounded-lg border border-border-1 bg-transparent px-4 py-4\">\n <h4 className=\"mb-3 text-[13px] font-semibold leading-5 text-[var(--text-primary)]\">\n {copy.t(\"labels.outputs\")}\n </h4>\n {outputs.length === 0 ? (\n <p className=\"text-[13px] leading-5 text-[var(--text-secondary)]\">\n {copy.t(\"messages.noOutputs\")}\n </p>\n ) : (\n <div className=\"grid gap-2.5\">\n {outputs.map((output) => (\n <button\n className=\"rounded-lg border border-[var(--border-2)] bg-transparent px-3.5 py-3 text-left transition-colors hover:bg-transparency-hover\"\n key={output.outputId}\n type=\"button\"\n onClick={() => {\n void onOpen({\n displayName: output.displayName,\n kind: \"file\",\n path: output.path\n });\n }}\n >\n <p className=\"truncate text-[13px] font-semibold leading-5 text-[var(--text-primary)]\">\n {output.displayName}\n </p>\n <p className=\"mt-1 truncate text-[11px] leading-[1.55] text-[var(--text-secondary)]\">\n {output.path}\n </p>\n </button>\n ))}\n </div>\n )}\n </section>\n </div>\n );\n}\n","import type {\n IssueManagerIssueSummary,\n IssueManagerStatus,\n IssueManagerTaskSummary\n} from \"../../../contracts/index.ts\";\nimport type { IssueManagerController } from \"../../react/index.ts\";\n\nexport interface IssueManagerTaskDrawerViewState {\n bodyKind: \"edit\" | \"loading\" | \"read\";\n isCreate: boolean;\n isEdit: boolean;\n isRead: boolean;\n isTaskTitleMissing: boolean;\n showEditFooter: boolean;\n showReadFooter: boolean;\n showTaskActions: boolean;\n showTaskMetadata: boolean;\n title: string;\n}\n\nexport function resolveIssueManagerTaskDrawerViewState(input: {\n controller: Pick<\n IssueManagerController,\n \"copy\" | \"taskDetail\" | \"taskDraft\" | \"taskEditorMode\"\n >;\n selectedTask: IssueManagerTaskSummary | null;\n}): IssueManagerTaskDrawerViewState {\n const { controller, selectedTask } = input;\n const isCreate = controller.taskEditorMode === \"create\";\n const isEdit = controller.taskEditorMode === \"edit\";\n const isRead = !isCreate && !isEdit;\n const showTaskMetadata = isRead && selectedTask !== null;\n const bodyKind =\n controller.taskDetail.isLoading &&\n isCreate === false &&\n controller.taskDetail.value === null\n ? \"loading\"\n : isCreate || isEdit\n ? \"edit\"\n : \"read\";\n\n return {\n bodyKind,\n isCreate,\n isEdit,\n isRead,\n isTaskTitleMissing: controller.taskDraft.title.trim().length === 0,\n showEditFooter: isCreate || isEdit,\n showReadFooter: showTaskMetadata,\n showTaskActions: showTaskMetadata,\n showTaskMetadata,\n title:\n isCreate || isEdit\n ? isCreate\n ? controller.copy.t(\"actions.createTask\")\n : controller.copy.t(\"actions.editTask\")\n : selectedTask?.title || controller.copy.t(\"labels.taskDetails\")\n };\n}\n\nexport function resolveIssueManagerTaskRefs(input: {\n controller: Pick<IssueManagerController, \"taskDetail\">;\n}) {\n return (\n input.controller.taskDetail.value?.contextRefs.filter(\n (ref) => ref.parentKind === \"task\"\n ) ?? []\n );\n}\n\nexport function canIssueManagerSaveTask(input: {\n selectedIssue: IssueManagerIssueSummary | null;\n view: Pick<IssueManagerTaskDrawerViewState, \"isTaskTitleMissing\">;\n}): boolean {\n return (\n input.selectedIssue !== null && input.view.isTaskTitleMissing === false\n );\n}\n\nexport function isIssueManagerRunControlDisabled(input: {\n disabled?: boolean;\n selectedIssueStatus: IssueManagerStatus | null | undefined;\n selectedTaskStatus: IssueManagerStatus | null | undefined;\n}): boolean {\n if (input.disabled === true) {\n return true;\n }\n return (input.selectedTaskStatus ?? input.selectedIssueStatus) === \"running\";\n}\n","import { type JSX } from \"react\";\nimport { ToastProvider, ToastRoot, ToastTitle } from \"@tutti-os/ui-system\";\nimport type { IssueManagerController } from \"../../react/index.ts\";\n\nexport function IssueManagerFloatingNotice({\n notice\n}: {\n notice: NonNullable<IssueManagerController[\"floatingNotice\"]>;\n}): JSX.Element {\n const variant = notice.tone === \"destructive\" ? \"destructive\" : \"default\";\n\n return (\n <ToastProvider>\n <ToastRoot\n key={notice.id}\n open\n anchor=\"node\"\n busy={notice.isLoading}\n className=\"z-30 w-fit max-w-[min(72vw,40rem)] px-4 py-3 shadow-lg\"\n nodeInsetTopPx={16}\n variant={variant}\n >\n <ToastTitle className=\"whitespace-normal [overflow-wrap:anywhere]\">\n {notice.title}\n </ToastTitle>\n </ToastRoot>\n </ToastProvider>\n );\n}\n","import { type JSX } from \"react\";\nimport { cn } from \"@tutti-os/ui-system\";\nimport {\n IssueManagerSidebarBody,\n IssueManagerSidebarHeader,\n IssueManagerSidebarStandalonePane,\n IssueManagerSidebarStatusTabs\n} from \"./IssueManagerSidebarSections.tsx\";\nimport { resolveIssueManagerSidebarPresentationState } from \"./IssueManagerSidebarState.ts\";\nimport type { IssueManagerController } from \"../../react/index.ts\";\nimport { resolveIssueManagerSubtaskProgressByIssueId } from \"./IssueManagerShellState.ts\";\nimport type {\n issueManagerStatusFilters,\n IssueManagerSidebarViewState\n} from \"./IssueManagerShellState.ts\";\nimport {\n resolveIssueManagerIssueRunTaskId,\n resolveIssueManagerVisibleSubtasks\n} from \"../issue/IssueManagerIssueAcceptanceState.ts\";\n\nexport interface IssueManagerSidebarProps {\n controller: IssueManagerController;\n isCollapsed: boolean;\n isNarrowLayout: boolean;\n showStandaloneState: boolean;\n sidebarViewState: IssueManagerSidebarViewState;\n statusCounts: Record<(typeof issueManagerStatusFilters)[number], number>;\n}\n\nexport function IssueManagerSidebar({\n controller,\n isCollapsed,\n isNarrowLayout,\n showStandaloneState,\n sidebarViewState,\n statusCounts\n}: IssueManagerSidebarProps): JSX.Element {\n const copy = controller.copy;\n const presentation = resolveIssueManagerSidebarPresentationState({\n showStandaloneState,\n sidebarViewState\n });\n const currentIssueDetail =\n controller.issueDetail.value?.issue.issueId ===\n controller.nodeState.selectedIssueId\n ? controller.issueDetail.value\n : null;\n const issueRunTaskId = currentIssueDetail\n ? resolveIssueManagerIssueRunTaskId({\n latestRun:\n currentIssueDetail.latestRun ??\n currentIssueDetail.recentRuns[0] ??\n null,\n selectedIssue: currentIssueDetail.issue,\n tasks: currentIssueDetail.tasks\n })\n : null;\n const visibleTasks = currentIssueDetail\n ? resolveIssueManagerVisibleSubtasks({\n hiddenIssueRunTaskId: issueRunTaskId,\n tasks: currentIssueDetail.tasks\n })\n : [];\n const subtaskProgressByIssueId = resolveIssueManagerSubtaskProgressByIssueId({\n issueId: currentIssueDetail?.issue.issueId ?? null,\n visibleTasks: currentIssueDetail ? visibleTasks : null\n });\n\n return (\n <aside\n aria-hidden={isCollapsed ? \"true\" : undefined}\n className={cn(\n \"relative isolate flex h-full min-h-0 min-w-0 flex-col overflow-hidden bg-transparent opacity-100 transition-[border-color] duration-[140ms] ease-in-out after:pointer-events-none after:absolute after:inset-0 after:z-[1] after:bg-[color-mix(in_srgb,var(--background-panel)_88%,transparent)] after:opacity-0 after:transition-opacity after:duration-[160ms] after:delay-[70ms] motion-reduce:transition-none motion-reduce:after:transition-none [&>*]:transition-[opacity,filter] [&>*]:duration-[160ms] [&>*]:delay-[70ms] [&>*]:ease-in-out motion-reduce:[&>*]:transition-none\",\n isNarrowLayout\n ? \"border-b border-[var(--border-1)]\"\n : \"border-r border-[var(--border-1)]\",\n isCollapsed &&\n \"pointer-events-none border-r-transparent after:opacity-100 after:delay-0 [&>*]:opacity-0 [&>*]:blur-[1px] [&>*]:delay-0 motion-reduce:[&>*]:blur-none\"\n )}\n inert={isCollapsed ? true : undefined}\n >\n <IssueManagerSidebarHeader\n copy={copy}\n issueSearchQuery={controller.nodeState.issueSearchQuery}\n onCreateIssue={() => controller.setIssueEditorMode(\"create\")}\n onIssueSearchUsage={controller.reportIssueSearchUsage}\n onIssueSearchQueryChange={controller.setIssueSearchQuery}\n />\n\n <IssueManagerSidebarStatusTabs\n copy={copy}\n issueStatusFilter={controller.nodeState.issueStatusFilter}\n statusCounts={statusCounts}\n onIssueStatusFilterChange={controller.setIssueStatusFilter}\n />\n\n <div aria-hidden=\"true\" className=\"h-2.5 flex-none\" />\n\n <div\n className={cn(\n \"relative flex min-h-0 flex-col\",\n isNarrowLayout ? \"flex-none\" : \"flex-1\"\n )}\n >\n {presentation.kind !== \"none\" ? (\n <div className=\"flex h-full min-h-0 items-center justify-center px-4 pt-1.5 pb-4\">\n <IssueManagerSidebarStandalonePane\n body={\n presentation.kind === \"empty\" ? presentation.body : undefined\n }\n isNarrowLayout={false}\n kind={presentation.kind}\n retryLabel={\n presentation.kind === \"error\"\n ? presentation.retryLabel\n : undefined\n }\n title={presentation.title}\n onRetry={() => controller.refreshAll()}\n />\n </div>\n ) : (\n <IssueManagerSidebarBody\n copy={copy}\n isNarrowLayout={isNarrowLayout}\n selectedIssueId={controller.nodeState.selectedIssueId}\n sidebarViewState={sidebarViewState}\n subtaskProgressByIssueId={subtaskProgressByIssueId}\n onRetry={() => controller.refreshAll()}\n onSelectIssue={controller.selectIssue}\n />\n )}\n </div>\n </aside>\n );\n}\n","import { type JSX } from \"react\";\nimport { useComposedInputValue } from \"@tutti-os/ui-react-hooks\";\nimport {\n Badge,\n Button,\n CloseIcon,\n FileCreateIcon,\n Input,\n ScrollArea,\n UnderlineTabs,\n cn\n} from \"@tutti-os/ui-system\";\nimport type {\n IssueManagerIssueSummary,\n IssueManagerNodeState\n} from \"../../../contracts/index.ts\";\nimport type { IssueManagerI18nRuntime } from \"../../../i18n/issueManagerI18n.ts\";\nimport {\n formatIssueManagerDate,\n resolveIssueManagerStatusLabel\n} from \"../../../services/controllerModel.ts\";\nimport {\n issueManagerStatusFilters,\n resolveIssueManagerSubtaskProgress,\n type IssueManagerSubtaskProgressViewState,\n type IssueManagerSidebarViewState\n} from \"./IssueManagerShellState.ts\";\nimport { issueManagerStatusBadgeVariant } from \"../status/IssueManagerStatusBadge.ts\";\n\nexport function IssueManagerSidebarHeader({\n copy,\n issueSearchQuery,\n onCreateIssue,\n onIssueSearchUsage,\n onIssueSearchQueryChange\n}: {\n copy: IssueManagerI18nRuntime;\n issueSearchQuery: string;\n onCreateIssue: () => void;\n onIssueSearchUsage: (value: string) => void;\n onIssueSearchQueryChange: (value: string) => void;\n}): JSX.Element {\n return (\n <div className=\"px-4 py-4\">\n <div className=\"flex items-center gap-2.5\">\n <IssueManagerSearchField\n clearLabel={copy.t(\"actions.clearSearch\")}\n placeholder={copy.t(\"labels.searchIssues\")}\n value={issueSearchQuery}\n onChange={onIssueSearchQueryChange}\n onSearchUsage={onIssueSearchUsage}\n />\n <Button\n className=\"gap-2 px-3\"\n size=\"dialog\"\n type=\"button\"\n variant=\"secondary\"\n onClick={onCreateIssue}\n >\n <FileCreateIcon size={16} />\n {copy.t(\"actions.createIssue\")}\n </Button>\n </div>\n </div>\n );\n}\n\nexport function IssueManagerSidebarStatusTabs({\n copy,\n issueStatusFilter,\n statusCounts,\n onIssueStatusFilterChange\n}: {\n copy: IssueManagerI18nRuntime;\n issueStatusFilter: IssueManagerNodeState[\"issueStatusFilter\"];\n statusCounts: Record<(typeof issueManagerStatusFilters)[number], number>;\n onIssueStatusFilterChange: (\n value: IssueManagerNodeState[\"issueStatusFilter\"]\n ) => void;\n}): JSX.Element {\n return (\n <UnderlineTabs\n ariaLabel={copy.t(\"labels.status\")}\n className=\"px-4\"\n scrollLeftLabel={copy.t(\"labels.scrollStatusTabsLeft\")}\n scrollRightLabel={copy.t(\"labels.scrollStatusTabsRight\")}\n tabs={issueManagerStatusFilters.map((status) => ({\n count: statusCounts[status] ?? 0,\n label:\n status === \"all\"\n ? copy.t(\"labels.allStatus\")\n : resolveIssueManagerStatusLabel(copy, status),\n value: status\n }))}\n value={issueStatusFilter}\n onValueChange={onIssueStatusFilterChange}\n />\n );\n}\n\nexport function IssueManagerSidebarBody({\n copy,\n isNarrowLayout,\n selectedIssueId,\n sidebarViewState,\n subtaskProgressByIssueId,\n onRetry,\n onSelectIssue\n}: {\n copy: IssueManagerI18nRuntime;\n isNarrowLayout: boolean;\n selectedIssueId: string | null;\n sidebarViewState: IssueManagerSidebarViewState;\n subtaskProgressByIssueId: Record<\n string,\n IssueManagerSubtaskProgressViewState | null\n >;\n onRetry: () => void;\n onSelectIssue: (issueId: string | null) => void;\n}): JSX.Element {\n return (\n <ScrollArea\n scrollbarMode=\"native\"\n className={cn(\"min-h-0\", isNarrowLayout ? \"flex-none\" : \"h-full flex-1\")}\n >\n <div\n className={cn(\n \"flex min-h-full flex-col gap-2.5 px-4 pt-1.5 pb-4\",\n isNarrowLayout ? \"min-h-0\" : \"h-full\"\n )}\n >\n {sidebarViewState.kind === \"loading\" ? (\n <IssueManagerSidebarLoadingState isNarrowLayout={isNarrowLayout} />\n ) : sidebarViewState.kind === \"error\" ? (\n <IssueManagerSidebarErrorState\n isNarrowLayout={isNarrowLayout}\n retryLabel={sidebarViewState.retryLabel}\n title={sidebarViewState.title}\n onRetry={onRetry}\n />\n ) : sidebarViewState.kind === \"empty\" ? (\n <IssueManagerSidebarEmptyState\n body={sidebarViewState.body}\n isNarrowLayout={isNarrowLayout}\n title={sidebarViewState.title}\n />\n ) : (\n <IssueManagerSidebarIssueList\n copy={copy}\n isNarrowLayout={isNarrowLayout}\n issues={sidebarViewState.issues}\n selectedIssueId={selectedIssueId}\n subtaskProgressByIssueId={subtaskProgressByIssueId}\n onSelectIssue={onSelectIssue}\n />\n )}\n </div>\n </ScrollArea>\n );\n}\n\nexport function IssueManagerSidebarStandalonePane({\n body,\n isNarrowLayout,\n kind,\n retryLabel,\n title,\n onRetry\n}: {\n body?: string;\n isNarrowLayout: boolean;\n kind: \"empty\" | \"error\";\n retryLabel?: string;\n title: string;\n onRetry: () => void;\n}): JSX.Element {\n if (kind === \"error\" && retryLabel) {\n return (\n <IssueManagerSidebarErrorState\n isNarrowLayout={isNarrowLayout}\n retryLabel={retryLabel}\n title={title}\n onRetry={onRetry}\n />\n );\n }\n\n return (\n <IssueManagerSidebarEmptyState\n body={body ?? \"\"}\n isNarrowLayout={isNarrowLayout}\n title={title}\n />\n );\n}\n\nfunction IssueManagerSearchField({\n clearLabel,\n onChange,\n onSearchUsage,\n placeholder,\n value\n}: {\n clearLabel: string;\n onChange: (value: string) => void;\n onSearchUsage: (value: string) => void;\n placeholder: string;\n value: string;\n}): JSX.Element {\n const searchInput = useComposedInputValue({ onCommit: onChange, value });\n\n return (\n <div\n className=\"relative min-w-0 flex-1\"\n data-has-value={searchInput.value ? \"true\" : \"false\"}\n >\n <Input\n aria-label={placeholder}\n className={cn(\n \"box-border h-8 min-h-8 rounded-md border-0 bg-[var(--transparency-block)] px-3 text-[13px] font-normal leading-normal text-[var(--text-primary)] shadow-none outline-none ring-0 transition-colors placeholder:text-[var(--text-placeholder)] hover:bg-[var(--transparency-hover)] focus:border-0 focus:bg-[var(--transparency-hover)] focus-visible:border-0 focus-visible:bg-[var(--transparency-hover)] focus-visible:ring-0 focus-visible:ring-offset-0 disabled:bg-[var(--transparency-block)] disabled:text-[var(--text-disabled)] disabled:opacity-100\",\n \"[&::-webkit-search-cancel-button]:appearance-none [&::-webkit-search-decoration]:appearance-none\",\n searchInput.value ? \"pr-9\" : \"pr-3\"\n )}\n placeholder={placeholder}\n type=\"search\"\n value={searchInput.value}\n onBlur={(event) => {\n searchInput.onBlur(event);\n onSearchUsage(event.currentTarget.value);\n }}\n onChange={searchInput.onChange}\n onCompositionEnd={searchInput.onCompositionEnd}\n onCompositionStart={searchInput.onCompositionStart}\n />\n {searchInput.value ? (\n <button\n aria-label={clearLabel}\n className=\"absolute top-1/2 right-1 inline-flex size-6 -translate-y-1/2 items-center justify-center rounded-md border-0 bg-transparent p-0 text-[var(--text-tertiary)] transition-colors hover:bg-[var(--transparency-hover)] hover:text-[var(--text-secondary)] focus-visible:bg-[var(--transparency-hover)] focus-visible:text-[var(--text-secondary)] focus-visible:outline-none\"\n type=\"button\"\n onClick={searchInput.clearValue}\n onMouseDown={(event) => event.preventDefault()}\n >\n <CloseIcon className=\"size-3.5\" />\n </button>\n ) : null}\n </div>\n );\n}\n\nfunction IssueManagerSidebarIssueList({\n copy,\n isNarrowLayout,\n issues,\n selectedIssueId,\n subtaskProgressByIssueId,\n onSelectIssue\n}: {\n copy: IssueManagerI18nRuntime;\n isNarrowLayout: boolean;\n issues: readonly IssueManagerIssueSummary[];\n selectedIssueId: string | null;\n subtaskProgressByIssueId: Record<\n string,\n IssueManagerSubtaskProgressViewState | null\n >;\n onSelectIssue: (issueId: string | null) => void;\n}): JSX.Element {\n return (\n <div\n className={cn(\n \"flex gap-2.5\",\n isNarrowLayout\n ? \"flex-row flex-nowrap items-start overflow-x-auto overflow-y-hidden [scrollbar-width:none] [&::-webkit-scrollbar]:hidden\"\n : \"flex-col\"\n )}\n >\n {issues.map((issue) => (\n <IssueManagerSidebarItem\n copy={copy}\n isNarrowLayout={isNarrowLayout}\n issue={issue}\n key={issue.issueId}\n selected={selectedIssueId === issue.issueId}\n subtaskProgress={\n issue.issueId in subtaskProgressByIssueId\n ? subtaskProgressByIssueId[issue.issueId]\n : undefined\n }\n onSelect={onSelectIssue}\n />\n ))}\n </div>\n );\n}\n\nfunction IssueManagerSidebarItem({\n copy,\n isNarrowLayout,\n issue,\n onSelect,\n selected,\n subtaskProgress: subtaskProgressOverride\n}: {\n copy: IssueManagerI18nRuntime;\n isNarrowLayout: boolean;\n issue: IssueManagerIssueSummary;\n onSelect: (issueId: string | null) => void;\n selected: boolean;\n subtaskProgress?: IssueManagerSubtaskProgressViewState | null;\n}): JSX.Element {\n const subtaskProgress =\n subtaskProgressOverride === undefined\n ? resolveIssueManagerSubtaskProgress(issue)\n : subtaskProgressOverride;\n\n return (\n <button\n className={cn(\n \"relative rounded-lg border px-3.5 py-3.5 text-left transition-colors\",\n isNarrowLayout\n ? \"h-24 max-h-24 min-h-24 w-[clamp(220px,58vw,320px)] flex-[0_0_clamp(220px,58vw,320px)] overflow-hidden\"\n : \"w-full\",\n selected\n ? \"border-[var(--border-1)] bg-[var(--background-fronted)]\"\n : \"border-[var(--border-1)] bg-transparent hover:bg-[var(--transparency-block)]\"\n )}\n type=\"button\"\n onClick={() => onSelect(issue.issueId)}\n >\n <Badge\n className=\"absolute top-3.5 right-3.5\"\n variant={issueManagerStatusBadgeVariant(issue.status)}\n >\n {resolveIssueManagerStatusLabel(copy, issue.status)}\n </Badge>\n <div className=\"min-w-0 space-y-2\">\n <p className=\"pr-28 text-[11px] leading-[1.55] text-[var(--text-secondary)]\">\n {formatIssueManagerDate(issue.updatedAtUnix ?? issue.createdAtUnix)}\n </p>\n <p className=\"line-clamp-4 text-[13px] font-medium leading-[1.35rem] text-[var(--text-primary)]\">\n {issue.title}\n </p>\n </div>\n {subtaskProgress ? (\n <div\n aria-label={`${copy.t(\"labels.taskCount\", {\n count: subtaskProgress.total\n })}, ${subtaskProgress.completed}/${subtaskProgress.total}`}\n className=\"mt-3 flex min-w-0 items-center gap-2 text-[11px] font-semibold leading-none text-[var(--text-secondary)]\"\n >\n <span className=\"shrink-0\">\n {copy.t(\"labels.taskCount\", { count: subtaskProgress.total })}\n </span>\n <span\n aria-hidden=\"true\"\n className=\"h-0.5 w-14 shrink-0 overflow-hidden rounded-full bg-[var(--transparency-block)]\"\n >\n <span\n className=\"block h-full rounded-full bg-[var(--status-running)]\"\n style={{ width: `${subtaskProgress.percent}%` }}\n />\n </span>\n <span className=\"shrink-0 text-[var(--text-primary)]\">\n {subtaskProgress.completed}/{subtaskProgress.total}\n </span>\n </div>\n ) : null}\n </button>\n );\n}\n\nfunction IssueManagerSidebarLoadingState({\n isNarrowLayout\n}: {\n isNarrowLayout: boolean;\n}): JSX.Element {\n return (\n <div\n aria-hidden=\"true\"\n className={cn(\n \"gap-2.5\",\n isNarrowLayout ? \"flex flex-row flex-nowrap overflow-x-hidden\" : \"grid\"\n )}\n >\n {Array.from({ length: 4 }, (_, index) => (\n <div\n className={cn(\n \"rounded-lg bg-transparent px-3.5 py-3.5\",\n isNarrowLayout &&\n \"h-24 max-h-24 min-h-24 w-[clamp(220px,58vw,320px)] flex-[0_0_clamp(220px,58vw,320px)]\"\n )}\n key={index}\n >\n <div className=\"h-3.5 w-20 rounded-full bg-[var(--transparency-block)]\" />\n <div className=\"mt-3 h-4 w-4/5 rounded-full bg-[var(--transparency-block)]\" />\n <div className=\"mt-4 h-3.5 w-24 rounded-full bg-[var(--transparency-block)]\" />\n </div>\n ))}\n </div>\n );\n}\n\nfunction IssueManagerSidebarEmptyState({\n isNarrowLayout,\n title,\n tone = \"default\"\n}: {\n body: string;\n isNarrowLayout: boolean;\n title: string;\n tone?: \"default\" | \"destructive\";\n}): JSX.Element {\n return (\n <div\n className={cn(\n \"relative flex flex-1 flex-col items-center justify-center self-stretch overflow-hidden p-0 text-center\",\n isNarrowLayout\n ? \"h-24 max-h-24 min-h-24 w-full flex-[0_0_100%]\"\n : \"min-h-full\"\n )}\n >\n <p\n className={cn(\n \"max-w-sm text-[13px] leading-5 text-[var(--text-secondary)]\",\n tone === \"destructive\"\n ? \"text-[var(--state-danger)]\"\n : \"text-[var(--text-secondary)]\"\n )}\n >\n {title}\n </p>\n </div>\n );\n}\n\nfunction IssueManagerSidebarErrorState({\n isNarrowLayout,\n retryLabel,\n title,\n onRetry\n}: {\n isNarrowLayout: boolean;\n retryLabel: string;\n title: string;\n onRetry: () => void;\n}): JSX.Element {\n return (\n <div\n className={cn(\n \"relative flex flex-1 flex-col items-center justify-center self-stretch overflow-hidden px-4 py-6 text-center\",\n isNarrowLayout\n ? \"h-24 max-h-24 min-h-24 w-full flex-[0_0_100%]\"\n : \"min-h-full\"\n )}\n >\n <p className=\"text-[13px] font-semibold leading-5 text-[var(--state-danger)]\">\n {title}\n </p>\n <Button\n className=\"mt-3\"\n size=\"sm\"\n type=\"button\"\n variant=\"secondary\"\n onClick={onRetry}\n >\n {retryLabel}\n </Button>\n </div>\n );\n}\n","import type {\n IssueManagerIssueSummary,\n IssueManagerStatusCounts,\n IssueManagerTaskSummary\n} from \"../../../contracts/index.ts\";\nimport type { IssueManagerI18nRuntime } from \"../../../i18n/issueManagerI18n.ts\";\nimport type { AsyncCollectionState } from \"../../../services/controllerTypes.ts\";\nimport type { IssueManagerEditorMode } from \"../../../services/controllerModel.ts\";\n\nexport const issueManagerStatusFilters = [\n \"all\",\n \"not_started\",\n \"running\",\n \"pending_acceptance\",\n \"completed\",\n \"failed\",\n \"canceled\"\n] as const;\n\nexport type IssueManagerSidebarViewState =\n | {\n kind: \"loading\";\n }\n | {\n kind: \"error\";\n retryLabel: string;\n title: string;\n }\n | {\n body: string;\n kind: \"empty\";\n title: string;\n }\n | {\n issues: readonly IssueManagerIssueSummary[];\n kind: \"list\";\n };\n\nexport function resolveIssueManagerSidebarViewState(input: {\n copy: IssueManagerI18nRuntime;\n issues: AsyncCollectionState<IssueManagerIssueSummary[]>;\n}): IssueManagerSidebarViewState {\n if (\n input.issues.isLoading &&\n input.issues.value.length === 0 &&\n input.issues.hasResolved !== true\n ) {\n return {\n kind: \"loading\"\n };\n }\n\n if (input.issues.error) {\n return {\n kind: \"error\",\n retryLabel: input.copy.t(\"actions.refresh\"),\n title: input.copy.t(\"messages.issueRefreshFailed\")\n };\n }\n\n if (input.issues.value.length === 0) {\n return {\n body: input.copy.t(\"messages.noIssuesForFilterBody\"),\n kind: \"empty\",\n title: input.copy.t(\"messages.noIssuesForFilterTitle\")\n };\n }\n\n return {\n issues: input.issues.value,\n kind: \"list\"\n };\n}\n\nexport function buildIssueManagerStatusCounts(\n issues: readonly IssueManagerIssueSummary[]\n): Record<(typeof issueManagerStatusFilters)[number], number> {\n const counts: Record<(typeof issueManagerStatusFilters)[number], number> = {\n all: issues.length,\n canceled: 0,\n completed: 0,\n failed: 0,\n not_started: 0,\n pending_acceptance: 0,\n running: 0\n };\n\n for (const issue of issues) {\n const status = issue.status === \"in_progress\" ? \"running\" : issue.status;\n if (status in counts) {\n counts[status as keyof typeof counts] += 1;\n }\n }\n\n return counts;\n}\n\nexport function resolveIssueManagerStatusCounts(\n input: AsyncCollectionState<IssueManagerIssueSummary[]>\n): Record<(typeof issueManagerStatusFilters)[number], number> {\n return input.statusCounts\n ? mapIssueManagerStatusCounts(input.statusCounts)\n : buildIssueManagerStatusCounts(input.value);\n}\n\nfunction mapIssueManagerStatusCounts(\n counts: IssueManagerStatusCounts\n): Record<(typeof issueManagerStatusFilters)[number], number> {\n return {\n all: counts.all,\n canceled: counts.canceled,\n completed: counts.completed,\n failed: counts.failed,\n not_started: counts.notStarted,\n pending_acceptance: counts.pendingAcceptance,\n running: counts.running + counts.inProgress\n };\n}\n\nexport interface IssueManagerSubtaskProgressViewState {\n completed: number;\n percent: number;\n total: number;\n}\n\nexport function resolveIssueManagerSubtaskProgress(\n issue: Pick<IssueManagerIssueSummary, \"completedCount\" | \"taskCount\">\n): IssueManagerSubtaskProgressViewState | null {\n const total = Math.max(0, Math.trunc(issue.taskCount ?? 0));\n if (total <= 0) {\n return null;\n }\n\n const completed = Math.min(\n total,\n Math.max(0, Math.trunc(issue.completedCount ?? 0))\n );\n\n return {\n completed,\n percent: (completed / total) * 100,\n total\n };\n}\n\nexport function resolveIssueManagerSubtaskProgressFromTasks(\n tasks: readonly Pick<IssueManagerTaskSummary, \"status\">[]\n): IssueManagerSubtaskProgressViewState | null {\n const total = tasks.length;\n if (total <= 0) {\n return null;\n }\n\n const completed = tasks.filter(\n (task) =>\n task.status === \"completed\" || task.status === \"pending_acceptance\"\n ).length;\n\n return {\n completed,\n percent: (completed / total) * 100,\n total\n };\n}\n\nexport function resolveIssueManagerSubtaskProgressByIssueId(input: {\n issueId: string | null;\n visibleTasks: readonly Pick<IssueManagerTaskSummary, \"status\">[] | null;\n}): Record<string, IssueManagerSubtaskProgressViewState | null> {\n if (!input.issueId || !input.visibleTasks) {\n return {};\n }\n\n return {\n [input.issueId]: resolveIssueManagerSubtaskProgressFromTasks(\n input.visibleTasks\n )\n };\n}\n\nexport interface IssueManagerShellContentViewState {\n isIssueEditing: boolean;\n isTaskCreating: boolean;\n isTaskDrawerOpen: boolean;\n showBottomBar: boolean;\n}\n\nexport function resolveIssueManagerShellContentViewState(input: {\n issueEditorMode: IssueManagerEditorMode;\n selectedIssue: IssueManagerIssueSummary | null;\n selectedTaskPresent: boolean;\n taskEditorMode: IssueManagerEditorMode;\n}): IssueManagerShellContentViewState {\n const isIssueEditing = input.issueEditorMode !== \"read\";\n const isTaskCreating = !isIssueEditing && input.taskEditorMode === \"create\";\n const isTaskDrawerOpen =\n !isIssueEditing &&\n !isTaskCreating &&\n (input.taskEditorMode === \"edit\" || input.selectedTaskPresent);\n\n return {\n isIssueEditing,\n isTaskCreating,\n isTaskDrawerOpen,\n showBottomBar:\n input.selectedIssue !== null &&\n input.issueEditorMode === \"read\" &&\n input.taskEditorMode !== \"create\"\n };\n}\n","import type { IssueManagerSidebarViewState } from \"./IssueManagerShellState.ts\";\n\nexport type IssueManagerSidebarPresentationState =\n | {\n body: string;\n kind: \"empty\";\n title: string;\n }\n | {\n kind: \"error\";\n retryLabel: string;\n title: string;\n }\n | {\n kind: \"none\";\n };\n\nexport function resolveIssueManagerSidebarPresentationState(input: {\n showStandaloneState: boolean;\n sidebarViewState: IssueManagerSidebarViewState;\n}): IssueManagerSidebarPresentationState {\n const { showStandaloneState, sidebarViewState } = input;\n\n if (!showStandaloneState) {\n return { kind: \"none\" };\n }\n\n if (sidebarViewState.kind === \"error\") {\n return {\n kind: \"error\",\n retryLabel: sidebarViewState.retryLabel,\n title: sidebarViewState.title\n };\n }\n\n if (sidebarViewState.kind === \"empty\") {\n return {\n body: sidebarViewState.body,\n kind: \"empty\",\n title: sidebarViewState.title\n };\n }\n\n return { kind: \"none\" };\n}\n","import type { JSX } from \"react\";\nimport { Button } from \"@tutti-os/ui-system\";\nimport type { IssueManagerIssueSummary } from \"../../../contracts/index.ts\";\nimport { IssueManagerRichTextTextarea } from \"../content/IssueManagerRichTextTextarea.tsx\";\nimport type { IssueManagerController } from \"../../react/index.ts\";\nimport { IssueManagerDraftTitleInput } from \"./IssueManagerDraftTitleInput.tsx\";\nimport {\n issueManagerEditorFooterFadeInClassName,\n issueManagerEditorRiseInClassName,\n issueManagerEditorRiseInDelay0ClassName,\n issueManagerEditorRiseInDelay1ClassName,\n issueManagerEditorRiseInDelay2ClassName\n} from \"./IssueManagerEditorMotion.ts\";\n\nexport function IssueManagerTaskComposerPane({\n controller,\n onCancel,\n selectedIssue\n}: {\n controller: IssueManagerController;\n onCancel: () => void;\n selectedIssue: IssueManagerIssueSummary | null;\n}): JSX.Element {\n const copy = controller.copy;\n const isTaskTitleMissing = controller.taskDraft.title.trim().length === 0;\n\n return (\n <div className=\"flex h-full min-h-0 flex-col overflow-hidden\">\n <div className=\"flex min-h-0 flex-1 flex-col gap-[14px] overflow-y-auto px-7 py-8\">\n <div className=\"flex w-full min-w-0 flex-col gap-3\">\n <div\n className={`${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay0ClassName}`}\n >\n <h2 className=\"m-0 text-[15px] font-semibold leading-[1.35] text-[var(--text-primary)]\">\n {copy.t(\"actions.addSubtask\")}\n </h2>\n </div>\n <div className=\"flex w-full min-w-0 flex-col gap-6\">\n <label\n className={`flex w-full min-w-0 flex-col gap-2 text-[13px] font-semibold text-[var(--text-secondary)] ${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay1ClassName}`}\n >\n <span className=\"leading-5\">{copy.t(\"labels.title\")}</span>\n <IssueManagerDraftTitleInput\n placeholder={copy.t(\"composer.subtaskTitlePlaceholder\")}\n value={controller.taskDraft.title}\n onChange={controller.setTaskTitle}\n />\n </label>\n <div\n className={`flex min-h-0 w-full min-w-0 flex-col gap-2 text-[13px] font-semibold text-[var(--text-secondary)] ${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay2ClassName}`}\n >\n <span className=\"leading-5\">\n {copy.t(\"labels.requirementDescription\")}\n </span>\n <IssueManagerRichTextTextarea\n controller={controller}\n surface=\"task\"\n textareaClassName=\"min-h-[180px] resize-none\"\n placeholder={copy.t(\"composer.subtaskContentPlaceholder\")}\n value={controller.taskDraft.content}\n onChange={controller.setTaskContent}\n />\n </div>\n </div>\n </div>\n </div>\n\n <div\n className={`shrink-0 border-t border-border-1 px-7 py-4 ${issueManagerEditorFooterFadeInClassName}`}\n >\n <div className=\"flex items-center justify-end gap-3\">\n <Button\n size=\"default\"\n type=\"button\"\n variant=\"secondary\"\n onClick={onCancel}\n >\n {copy.t(\"actions.cancel\")}\n </Button>\n <Button\n disabled={!selectedIssue || isTaskTitleMissing}\n size=\"default\"\n type=\"button\"\n onClick={() => void controller.saveTask()}\n >\n {copy.t(\"actions.saveSubtask\")}\n </Button>\n </div>\n </div>\n </div>\n );\n}\n","import { useRef, type JSX, type MouseEvent, type PointerEvent } from \"react\";\nimport { ScrollArea, cn } from \"@tutti-os/ui-system\";\nimport type {\n IssueManagerIssueSummary,\n IssueManagerTaskSummary\n} from \"../../../contracts/index.ts\";\nimport { logIssueManagerDiagnostic } from \"../../../internal/issueManagerDiagnostics.ts\";\nimport {\n IssueManagerTaskDrawerBody,\n IssueManagerTaskDrawerFooter,\n IssueManagerTaskDrawerHeader\n} from \"./IssueManagerTaskDrawerSections.tsx\";\nimport type { IssueManagerLatestRunStatusRenderer } from \"../../latestRunStatusRenderer.ts\";\nimport { resolveIssueManagerTaskDrawerViewState } from \"./IssueManagerTaskDrawerState.ts\";\nimport type { IssueManagerController } from \"../../react/index.ts\";\n\nexport type IssueManagerTaskDrawerCloseSource = \"backdrop\" | \"header_back\";\n\nexport function IssueManagerTaskDrawer({\n controller,\n isClosing,\n renderLatestRunStatus,\n selectedIssue,\n selectedTask,\n onClose,\n shouldIgnoreBackdropClick\n}: {\n controller: IssueManagerController;\n isClosing: boolean;\n renderLatestRunStatus?: IssueManagerLatestRunStatusRenderer;\n selectedIssue: IssueManagerIssueSummary | null;\n selectedTask: IssueManagerTaskSummary | null;\n onClose: (source: IssueManagerTaskDrawerCloseSource) => void;\n shouldIgnoreBackdropClick?: (event: {\n clientX: number;\n clientY: number;\n }) => boolean;\n}): JSX.Element {\n const view = resolveIssueManagerTaskDrawerViewState({\n controller,\n selectedTask\n });\n const taskContent = selectedTask?.content ?? \"\";\n const hasRequestedBackdropCloseRef = useRef(false);\n const requestBackdropClose = (\n event: MouseEvent<HTMLDivElement> | PointerEvent<HTMLDivElement>,\n phase: \"click\" | \"pointer_down\"\n ) => {\n const target = event.target;\n logIssueManagerDiagnostic(\n controller.diagnostics,\n \"task_drawer.backdrop_close_event\",\n {\n clientX: event.clientX,\n clientY: event.clientY,\n currentTargetTag: event.currentTarget.tagName,\n hasRequestedBackdropClose: hasRequestedBackdropCloseRef.current,\n isClosing,\n isDirectBackdropClick: event.target === event.currentTarget,\n phase,\n selectedIssueId: selectedIssue?.issueId ?? null,\n selectedTaskId: selectedTask?.taskId ?? null,\n selectedTaskTitle: selectedTask?.title ?? null,\n targetClassName:\n target instanceof HTMLElement ? target.className : null,\n targetTag: target instanceof HTMLElement ? target.tagName : null\n }\n );\n\n if (event.target !== event.currentTarget) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n if (hasRequestedBackdropCloseRef.current) {\n return;\n }\n\n if (shouldIgnoreBackdropClick?.(event)) {\n return;\n }\n\n hasRequestedBackdropCloseRef.current = true;\n onClose(\"backdrop\");\n };\n const handleBackdropPointerDown = (event: PointerEvent<HTMLDivElement>) => {\n if (event.pointerType === \"mouse\" && event.button !== 0) {\n return;\n }\n requestBackdropClose(event, \"pointer_down\");\n };\n const handleBackdropClick = (event: MouseEvent<HTMLDivElement>) => {\n if (hasRequestedBackdropCloseRef.current) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n requestBackdropClose(event, \"click\");\n };\n\n return (\n <div\n className={cn(\n \"absolute inset-0 z-20 flex justify-end overscroll-contain bg-[var(--backdrop)] backdrop-blur-[1px] motion-reduce:animate-none\",\n isClosing\n ? \"motion-safe:animate-out motion-safe:fade-out-0 motion-safe:duration-[180ms] motion-safe:ease-[cubic-bezier(0.4,0,0.2,1)]\"\n : \"motion-safe:animate-in motion-safe:fade-in-0 motion-safe:duration-[180ms] motion-safe:ease-[cubic-bezier(0.4,0,0.2,1)]\"\n )}\n onClick={handleBackdropClick}\n onPointerDown={handleBackdropPointerDown}\n onTouchMove={(event) => {\n event.preventDefault();\n }}\n onWheel={(event) => {\n event.preventDefault();\n }}\n >\n <aside\n className={cn(\n \"flex h-full w-[min(360px,92cqw)] flex-col overscroll-contain border-l border-border-1 bg-background-panel text-[var(--text-primary)] shadow-[-20px_0_60px_var(--shadow-elevated)] @min-[960px]/issue-manager-content:w-[480px] motion-reduce:animate-none\",\n isClosing\n ? \"motion-safe:animate-out motion-safe:slide-out-to-right-full motion-safe:duration-[180ms] motion-safe:ease-[cubic-bezier(0.4,0,0.2,1)]\"\n : \"motion-safe:animate-in motion-safe:slide-in-from-right-full motion-safe:duration-[220ms] motion-safe:ease-[cubic-bezier(0.22,1,0.36,1)]\"\n )}\n onClick={(event) => event.stopPropagation()}\n onTouchMove={(event) => event.stopPropagation()}\n onWheel={(event) => event.stopPropagation()}\n >\n {view.bodyKind === \"edit\" ? null : (\n <IssueManagerTaskDrawerHeader\n controller={controller}\n onClose={() => onClose(\"header_back\")}\n selectedTask={selectedTask}\n view={view}\n />\n )}\n\n <ScrollArea\n scrollbarMode=\"native\"\n className=\"min-h-0 flex-1 [&_[data-slot=scroll-area-viewport]]:overscroll-contain\"\n >\n <div\n className={cn(\n \"flex flex-col\",\n view.bodyKind === \"edit\"\n ? \"gap-[14px] px-6 py-8\"\n : \"gap-9 px-6 py-7\"\n )}\n >\n <IssueManagerTaskDrawerBody\n controller={controller}\n renderLatestRunStatus={renderLatestRunStatus}\n taskContent={taskContent}\n view={view}\n />\n </div>\n </ScrollArea>\n\n <IssueManagerTaskDrawerFooter\n controller={controller}\n selectedIssue={selectedIssue}\n selectedTask={selectedTask}\n view={view}\n />\n </aside>\n </div>\n );\n}\n","import { useState, type JSX } from \"react\";\nimport {\n ArrowLeftIcon,\n Badge,\n BareIconButton,\n Button,\n ConfirmationDialog\n} from \"@tutti-os/ui-system\";\nimport type {\n IssueManagerIssueSummary,\n IssueManagerTaskSummary\n} from \"../../../contracts/index.ts\";\nimport {\n formatIssueManagerTimestamp,\n resolveIssueManagerStatusLabel\n} from \"../../../services/controllerModel.ts\";\nimport { IssueManagerDescriptionSection } from \"../content/IssueManagerDescriptionSection.tsx\";\nimport { IssueManagerTitleTooltip } from \"../content/IssueManagerTitleTooltip.tsx\";\nimport {\n IssueManagerLatestRunStatusSection,\n IssueManagerOutputSection\n} from \"../issue/IssueManagerIssueSections.tsx\";\nimport type { IssueManagerLatestRunStatusRenderer } from \"../../latestRunStatusRenderer.ts\";\nimport { IssueManagerTaskDrawerLoadingState } from \"../panel/IssueManagerPanelSurface.tsx\";\nimport { resolveTaskCreatorLabel } from \"../panel/IssueManagerPanelText.ts\";\nimport { IssueManagerRichTextTextarea } from \"../content/IssueManagerRichTextTextarea.tsx\";\nimport {\n IssueManagerExecutionDirectoryTrigger,\n IssueManagerRunActionTrigger\n} from \"../task/IssueManagerRunSections.tsx\";\nimport { IssueManagerTaskAcceptanceCard } from \"../task/IssueManagerTaskAcceptanceCard.tsx\";\nimport { issueManagerStatusBadgeVariant } from \"../status/IssueManagerStatusBadge.ts\";\nimport { IssueManagerDraftTitleInput } from \"./IssueManagerDraftTitleInput.tsx\";\nimport {\n canIssueManagerSaveTask,\n isIssueManagerRunControlDisabled,\n type IssueManagerTaskDrawerViewState\n} from \"./IssueManagerTaskDrawerState.ts\";\nimport type { IssueManagerController } from \"../../react/index.ts\";\nimport {\n issueManagerEditorFooterFadeInClassName,\n issueManagerEditorRiseInClassName,\n issueManagerEditorRiseInDelay0ClassName,\n issueManagerEditorRiseInDelay1ClassName,\n issueManagerEditorRiseInDelay2ClassName\n} from \"./IssueManagerEditorMotion.ts\";\n\nexport function IssueManagerTaskDrawerHeader({\n controller,\n onClose,\n selectedTask,\n view\n}: {\n controller: IssueManagerController;\n onClose: () => void;\n selectedTask: IssueManagerTaskSummary | null;\n view: Pick<\n IssueManagerTaskDrawerViewState,\n \"showTaskActions\" | \"showTaskMetadata\" | \"title\"\n >;\n}): JSX.Element {\n const copy = controller.copy;\n const [deleteDialogOpen, setDeleteDialogOpen] = useState(false);\n const [deleteBusy, setDeleteBusy] = useState(false);\n\n return (\n <>\n <div className=\"grid gap-3 px-6 py-7\">\n <div className=\"flex items-center justify-between gap-6\">\n <div className=\"flex min-w-0 flex-1 items-center gap-2\">\n <BareIconButton\n aria-label={copy.t(\"actions.closeTaskDetails\")}\n size=\"md\"\n title={copy.t(\"actions.closeTaskDetails\")}\n onClick={onClose}\n >\n <ArrowLeftIcon className=\"size-4\" />\n </BareIconButton>\n {view.showTaskMetadata && selectedTask ? (\n <IssueManagerTitleTooltip title={view.title}>\n <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]\">\n {view.title}\n </h3>\n </IssueManagerTitleTooltip>\n ) : (\n <IssueManagerTitleTooltip title={view.title}>\n <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]\">\n {view.title}\n </h3>\n </IssueManagerTitleTooltip>\n )}\n </div>\n <div className=\"flex shrink-0 items-center gap-2\">\n {view.showTaskActions && selectedTask ? (\n <>\n <Button\n type=\"button\"\n variant=\"ghost\"\n onClick={() => controller.setTaskEditorMode(\"edit\")}\n >\n {copy.t(\"actions.edit\")}\n </Button>\n <Button\n className=\"text-[var(--state-danger)] hover:bg-[var(--on-danger)] hover:text-[var(--state-danger)]\"\n type=\"button\"\n variant=\"ghost\"\n onClick={() => setDeleteDialogOpen(true)}\n >\n {copy.t(\"actions.delete\")}\n </Button>\n </>\n ) : null}\n </div>\n </div>\n {view.showTaskMetadata && selectedTask ? (\n <div className=\"grid gap-2\">\n <IssueManagerTaskMetadataRow\n copy={copy}\n selectedTask={selectedTask}\n />\n {selectedTask.status === \"pending_acceptance\" ? (\n <IssueManagerTaskAcceptanceCard controller={controller} />\n ) : null}\n </div>\n ) : null}\n </div>\n {selectedTask ? (\n <ConfirmationDialog\n cancelLabel={copy.t(\"actions.cancel\")}\n confirmBusy={deleteBusy}\n confirmLabel={copy.t(\"actions.delete\")}\n description={\n <span className=\"block max-w-full whitespace-normal [overflow-wrap:anywhere]\">\n {selectedTask.title}\n </span>\n }\n open={deleteDialogOpen}\n title={copy.t(\"confirmations.deleteTask\")}\n tone=\"destructive\"\n onConfirm={() => {\n setDeleteBusy(true);\n void controller\n .deleteTask({ skipConfirmation: true })\n .finally(() => {\n setDeleteBusy(false);\n setDeleteDialogOpen(false);\n });\n }}\n onOpenChange={setDeleteDialogOpen}\n />\n ) : null}\n </>\n );\n}\n\nfunction IssueManagerTaskMetadataRow({\n copy,\n selectedTask\n}: {\n copy: IssueManagerController[\"copy\"];\n selectedTask: IssueManagerTaskSummary;\n}): JSX.Element {\n return (\n <div className=\"flex flex-wrap items-center gap-x-2 gap-y-2 text-[11px] font-normal leading-[1.3] text-[var(--text-secondary)]\">\n <Badge variant={issueManagerStatusBadgeVariant(selectedTask.status)}>\n {resolveIssueManagerStatusLabel(copy, selectedTask.status)}\n </Badge>\n <span\n aria-hidden=\"true\"\n className=\"h-4 w-px shrink-0 bg-[var(--line-2)]\"\n />\n <span className=\"text-[11px] font-normal leading-[1.3]\">\n {copy.t(\"labels.creator\")} {resolveTaskCreatorLabel(selectedTask)}\n </span>\n <span\n aria-hidden=\"true\"\n className=\"h-4 w-px shrink-0 bg-[var(--line-2)]\"\n />\n <span className=\"text-[11px] font-normal leading-[1.3]\">\n {copy.t(\"labels.createdAt\")}{\" \"}\n {formatIssueManagerTimestamp(selectedTask.createdAtUnix) || \"-\"}\n </span>\n </div>\n );\n}\n\nexport function IssueManagerTaskDrawerLoadingBody(): JSX.Element {\n return <IssueManagerTaskDrawerLoadingState />;\n}\n\nexport function IssueManagerTaskDrawerBody({\n controller,\n renderLatestRunStatus,\n taskContent,\n view\n}: {\n controller: IssueManagerController;\n renderLatestRunStatus?: IssueManagerLatestRunStatusRenderer;\n taskContent: string;\n view: Pick<\n IssueManagerTaskDrawerViewState,\n \"bodyKind\" | \"isCreate\" | \"title\"\n >;\n}): JSX.Element {\n if (view.bodyKind === \"loading\") {\n return <IssueManagerTaskDrawerLoadingBody />;\n }\n\n if (view.bodyKind === \"edit\") {\n return (\n <IssueManagerTaskDrawerEditBody\n controller={controller}\n title={view.title}\n />\n );\n }\n\n return (\n <IssueManagerTaskDrawerReadBody\n controller={controller}\n latestRunTitle={view.title}\n renderLatestRunStatus={renderLatestRunStatus}\n taskContent={taskContent}\n />\n );\n}\n\nexport function IssueManagerTaskDrawerEditBody({\n controller,\n title\n}: {\n controller: IssueManagerController;\n title: string;\n}): JSX.Element {\n const copy = controller.copy;\n\n return (\n <div className=\"flex w-full min-w-0 flex-col gap-3\">\n <div\n className={`${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay0ClassName}`}\n >\n <h2 className=\"m-0 text-[15px] font-semibold leading-[1.35] text-[var(--text-primary)]\">\n {title}\n </h2>\n </div>\n <div className=\"flex w-full min-w-0 flex-col gap-6\">\n <label\n className={`flex w-full min-w-0 flex-col gap-2 text-[13px] font-semibold text-[var(--text-secondary)] ${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay1ClassName}`}\n >\n <span className=\"leading-5\">{copy.t(\"labels.title\")}</span>\n <IssueManagerDraftTitleInput\n placeholder={copy.t(\"composer.taskTitlePlaceholder\")}\n value={controller.taskDraft.title}\n onChange={controller.setTaskTitle}\n />\n </label>\n <div\n className={`flex min-h-0 w-full min-w-0 flex-col gap-2 text-[13px] font-semibold text-[var(--text-secondary)] ${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay2ClassName}`}\n >\n <span className=\"leading-5\">{copy.t(\"labels.content\")}</span>\n <IssueManagerRichTextTextarea\n controller={controller}\n surface=\"task\"\n textareaClassName=\"min-h-[180px] resize-none\"\n placeholder={copy.t(\"composer.taskContentPlaceholder\")}\n value={controller.taskDraft.content}\n onChange={controller.setTaskContent}\n />\n </div>\n </div>\n </div>\n );\n}\n\nexport function IssueManagerTaskDrawerReadBody({\n controller,\n latestRunTitle,\n renderLatestRunStatus,\n taskContent\n}: {\n controller: IssueManagerController;\n latestRunTitle: string;\n renderLatestRunStatus?: IssueManagerLatestRunStatusRenderer;\n taskContent: string;\n}): JSX.Element {\n const copy = controller.copy;\n const latestRun =\n controller.taskDetail.value?.latestRun ??\n controller.taskDetail.value?.recentRuns[0] ??\n null;\n const latestOutputs = controller.taskDetail.value?.latestOutputs ?? [];\n\n return (\n <>\n <IssueManagerDescriptionSection\n content={taskContent}\n emptyLabel={copy.t(\"messages.taskContentEmpty\")}\n label={copy.t(\"labels.description\")}\n onMentionAction={controller.openMention}\n onOpen={controller.openReference}\n variant=\"plain\"\n />\n <IssueManagerLatestRunStatusSection\n copy={copy}\n latestRun={latestRun}\n onOpenAgentSession={\n controller.canOpenAgentSessions\n ? controller.openAgentSession\n : undefined\n }\n renderLatestRunStatus={renderLatestRunStatus}\n title={latestRunTitle}\n />\n <IssueManagerOutputSection\n copy={copy}\n outputs={latestOutputs}\n onOpen={controller.openReference}\n />\n </>\n );\n}\n\nexport function IssueManagerTaskDrawerFooter({\n controller,\n selectedIssue,\n selectedTask,\n view\n}: {\n controller: IssueManagerController;\n selectedIssue: IssueManagerIssueSummary | null;\n selectedTask: IssueManagerTaskSummary | null;\n view: Pick<\n IssueManagerTaskDrawerViewState,\n | \"isCreate\"\n | \"isEdit\"\n | \"showEditFooter\"\n | \"showReadFooter\"\n | \"isTaskTitleMissing\"\n >;\n}): JSX.Element | null {\n const copy = controller.copy;\n const runControlsDisabled = isIssueManagerRunControlDisabled({\n selectedIssueStatus: selectedIssue?.status,\n selectedTaskStatus: selectedTask?.status\n });\n\n if (view.showReadFooter && selectedTask) {\n return (\n <div className=\"border-t border-[var(--border-1)] bg-transparent px-6 py-4 backdrop-blur\">\n <div className=\"flex items-center justify-end gap-3\">\n <IssueManagerExecutionDirectoryTrigger\n className=\"mr-auto\"\n controller={controller}\n disabled={runControlsDisabled}\n />\n <IssueManagerRunActionTrigger\n controller={controller}\n disabled={runControlsDisabled}\n triggerVariant=\"button\"\n />\n {controller.canInviteCollaborators ? (\n <Button\n disabled={!selectedIssue}\n size=\"dialog\"\n type=\"button\"\n onClick={() => {\n void controller.shareSelection();\n }}\n >\n {copy.t(\"actions.inviteCollaborator\")}\n </Button>\n ) : null}\n </div>\n </div>\n );\n }\n\n if (view.showEditFooter) {\n return (\n <div\n className={`border-t border-border-1 px-6 py-4 ${issueManagerEditorFooterFadeInClassName}`}\n >\n <div className=\"flex items-center justify-end gap-3\">\n <Button\n size=\"dialog\"\n type=\"button\"\n variant=\"secondary\"\n onClick={() => controller.setTaskEditorMode(\"read\")}\n >\n {copy.t(\"actions.cancel\")}\n </Button>\n <Button\n disabled={\n canIssueManagerSaveTask({\n selectedIssue,\n view\n }) === false\n }\n size=\"dialog\"\n type=\"button\"\n onClick={() => void controller.saveTask()}\n >\n {copy.t(\"actions.saveTask\")}\n </Button>\n </div>\n </div>\n );\n }\n\n return null;\n}\n","import {\n useEffect,\n useEffectEvent,\n useRef,\n useState,\n type CSSProperties,\n type KeyboardEvent,\n type PointerEvent\n} from \"react\";\nimport type {\n IssueManagerIssueSummary,\n IssueManagerTaskSummary\n} from \"../../../contracts/index.ts\";\nimport {\n clampIssueManagerSidebarWidth,\n issueManagerSidebarDefaultWidth,\n issueManagerSidebarMaxWidth,\n issueManagerSidebarMinWidth,\n shouldAutoCollapseIssueManagerSidebar\n} from \"../../../core/index.ts\";\nimport type { IssueManagerController } from \"../../react/index.ts\";\nimport {\n resolveIssueManagerShellContentViewState,\n resolveIssueManagerStatusCounts,\n resolveIssueManagerSidebarViewState\n} from \"./IssueManagerShellState.ts\";\nimport { logIssueManagerDiagnostic } from \"../../../internal/issueManagerDiagnostics.ts\";\n\ninterface SidebarResizeState {\n maxWidth: number;\n pointerId: number;\n startClientX: number;\n startWidth: number;\n}\n\ninterface ShellContentDiagnosticSnapshot {\n isIssueEditing: boolean;\n isTaskCreating: boolean;\n isTaskDrawerOpen: boolean;\n issueEditorMode: string;\n selectedIssueId: string | null;\n selectedTaskId: string | null;\n selectedTaskPresent: boolean;\n taskEditorMode: string;\n}\n\nexport interface UseIssueManagerShellViewInput {\n controller: IssueManagerController;\n selectedIssue: IssueManagerIssueSummary | null;\n selectedTask: IssueManagerTaskSummary | null;\n}\n\nexport function useIssueManagerShellView({\n controller,\n selectedIssue,\n selectedTask\n}: UseIssueManagerShellViewInput) {\n const layoutRef = useRef<HTMLDivElement | null>(null);\n const resizeRef = useRef<SidebarResizeState | null>(null);\n const [sidebarWidth, setSidebarWidth] = useState(\n issueManagerSidebarDefaultWidth\n );\n const [isNarrowLayout, setIsNarrowLayout] = useState(false);\n const dismissNotification = useEffectEvent(() => {\n controller.dismissNotification();\n });\n const floatingNotice = controller.floatingNotice;\n const lastContentDiagnosticRef =\n useRef<ShellContentDiagnosticSnapshot | null>(null);\n\n useEffect(() => {\n const publishLayout = () => {\n const width = layoutRef.current?.getBoundingClientRect().width ?? 0;\n if (!width) {\n return;\n }\n setSidebarWidth((current) =>\n clampIssueManagerSidebarWidth(current, width)\n );\n setIsNarrowLayout(shouldAutoCollapseIssueManagerSidebar(width));\n };\n\n const layout = layoutRef.current;\n const observer =\n layout && typeof ResizeObserver !== \"undefined\"\n ? new ResizeObserver(publishLayout)\n : null;\n publishLayout();\n if (observer && layout) {\n observer.observe(layout);\n }\n window.addEventListener(\"resize\", publishLayout);\n return () => {\n observer?.disconnect();\n window.removeEventListener(\"resize\", publishLayout);\n };\n }, []);\n\n useEffect(() => {\n if (!floatingNotice) {\n return undefined;\n }\n\n const timeout = window.setTimeout(() => {\n dismissNotification();\n }, floatingNotice.durationMs);\n\n return () => {\n window.clearTimeout(timeout);\n };\n }, [dismissNotification, floatingNotice]);\n\n const content = resolveIssueManagerShellContentViewState({\n issueEditorMode: controller.issueEditorMode,\n selectedIssue,\n selectedTaskPresent: selectedTask !== null,\n taskEditorMode: controller.taskEditorMode\n });\n useEffect(() => {\n const nextDiagnostic: ShellContentDiagnosticSnapshot = {\n isIssueEditing: content.isIssueEditing,\n isTaskCreating: content.isTaskCreating,\n isTaskDrawerOpen: content.isTaskDrawerOpen,\n issueEditorMode: controller.issueEditorMode,\n selectedIssueId: controller.nodeState.selectedIssueId,\n selectedTaskId: controller.nodeState.selectedTaskId,\n selectedTaskPresent: selectedTask !== null,\n taskEditorMode: controller.taskEditorMode\n };\n const previousDiagnostic = lastContentDiagnosticRef.current;\n if (\n previousDiagnostic &&\n previousDiagnostic.isIssueEditing === nextDiagnostic.isIssueEditing &&\n previousDiagnostic.isTaskCreating === nextDiagnostic.isTaskCreating &&\n previousDiagnostic.isTaskDrawerOpen === nextDiagnostic.isTaskDrawerOpen &&\n previousDiagnostic.issueEditorMode === nextDiagnostic.issueEditorMode &&\n previousDiagnostic.selectedIssueId === nextDiagnostic.selectedIssueId &&\n previousDiagnostic.selectedTaskId === nextDiagnostic.selectedTaskId &&\n previousDiagnostic.selectedTaskPresent ===\n nextDiagnostic.selectedTaskPresent &&\n previousDiagnostic.taskEditorMode === nextDiagnostic.taskEditorMode\n ) {\n return;\n }\n lastContentDiagnosticRef.current = nextDiagnostic;\n logIssueManagerDiagnostic(controller.diagnostics, \"shell_content.derived\", {\n isIssueEditing: content.isIssueEditing,\n isTaskCreating: content.isTaskCreating,\n isTaskDrawerOpen: content.isTaskDrawerOpen,\n issueEditorMode: controller.issueEditorMode,\n previousIsTaskDrawerOpen: previousDiagnostic?.isTaskDrawerOpen ?? null,\n previousSelectedTaskId: previousDiagnostic?.selectedTaskId ?? null,\n previousTaskEditorMode: previousDiagnostic?.taskEditorMode ?? null,\n selectedIssueId: controller.nodeState.selectedIssueId,\n selectedTaskId: controller.nodeState.selectedTaskId,\n selectedTaskPresent: selectedTask !== null,\n showBottomBar: content.showBottomBar,\n taskEditorMode: controller.taskEditorMode\n });\n }, [\n content.isIssueEditing,\n content.isTaskCreating,\n content.isTaskDrawerOpen,\n content.showBottomBar,\n controller.diagnostics,\n controller.issueEditorMode,\n controller.nodeState.selectedIssueId,\n controller.nodeState.selectedTaskId,\n controller.taskEditorMode,\n selectedTask\n ]);\n const sidebarViewState = resolveIssueManagerSidebarViewState({\n copy: controller.copy,\n issues: controller.issues\n });\n const statusCounts = resolveIssueManagerStatusCounts(controller.issues);\n const isSidebarAutoCollapsed = isNarrowLayout;\n const isSidebarCollapsed =\n controller.nodeState.taskListCollapsed === true || isSidebarAutoCollapsed;\n\n return {\n content,\n floatingNotice,\n isNarrowLayout,\n layoutRef,\n layoutStyle: {\n gridTemplateColumns: isSidebarCollapsed\n ? \"0 minmax(0, 1fr)\"\n : \"var(--issue-manager-sidebar-width) minmax(0, 1fr)\",\n \"--issue-manager-sidebar-width\": `${sidebarWidth}px`\n } as CSSProperties,\n resizeHandle: {\n ariaValueMax: issueManagerSidebarMaxWidth,\n ariaValueMin: issueManagerSidebarMinWidth,\n ariaValueNow: sidebarWidth,\n onKeyDown: (event: KeyboardEvent<HTMLDivElement>) => {\n if (event.key !== \"ArrowLeft\" && event.key !== \"ArrowRight\") {\n return;\n }\n const delta = event.key === \"ArrowRight\" ? 16 : -16;\n const layoutWidth =\n layoutRef.current?.getBoundingClientRect().width ?? 0;\n if (!layoutWidth) {\n return;\n }\n event.preventDefault();\n setSidebarWidth((current) =>\n clampIssueManagerSidebarWidth(current + delta, layoutWidth)\n );\n },\n onPointerCancel: (event: PointerEvent<HTMLDivElement>) => {\n resizeRef.current = null;\n event.currentTarget.releasePointerCapture?.(event.pointerId);\n },\n onPointerDown: (event: PointerEvent<HTMLDivElement>) => {\n if (event.button !== 0) {\n return;\n }\n const layoutWidth =\n layoutRef.current?.getBoundingClientRect().width ?? 0;\n if (!layoutWidth) {\n return;\n }\n const startWidth = clampIssueManagerSidebarWidth(\n sidebarWidth,\n layoutWidth\n );\n resizeRef.current = {\n maxWidth: clampIssueManagerSidebarWidth(\n issueManagerSidebarMaxWidth,\n layoutWidth\n ),\n pointerId: event.pointerId,\n startClientX: event.clientX,\n startWidth\n };\n setSidebarWidth(startWidth);\n event.currentTarget.setPointerCapture?.(event.pointerId);\n },\n onPointerMove: (event: PointerEvent<HTMLDivElement>) => {\n const state = resizeRef.current;\n if (!state || state.pointerId !== event.pointerId) {\n return;\n }\n setSidebarWidth(\n Math.min(\n Math.max(\n state.startWidth + event.clientX - state.startClientX,\n issueManagerSidebarMinWidth\n ),\n state.maxWidth\n )\n );\n },\n onPointerUp: (event: PointerEvent<HTMLDivElement>) => {\n resizeRef.current = null;\n event.currentTarget.releasePointerCapture?.(event.pointerId);\n }\n },\n sidebar: {\n isAutoCollapsed: isSidebarAutoCollapsed,\n isCollapsed: isSidebarCollapsed,\n showStandaloneState:\n !isNarrowLayout &&\n (sidebarViewState.kind === \"empty\" ||\n sidebarViewState.kind === \"error\"),\n statusCounts,\n viewState: sidebarViewState\n }\n };\n}\n\nexport { shouldAutoCollapseIssueManagerSidebar } from \"../../../core/index.ts\";\n","const issueManagerTaskDrawerBackdropEchoMs = 900;\nconst issueManagerTaskDrawerBackdropEchoDistancePx = 72;\n\nexport interface IssueManagerPointerSnapshot {\n clientX: number;\n clientY: number;\n timeMs: number;\n}\n\nexport function shouldIgnoreIssueManagerTaskDrawerBackdropEcho(input: {\n clickClientX: number;\n clickClientY: number;\n maxDistancePx?: number;\n maxElapsedMs?: number;\n nowMs: number;\n openPointer: IssueManagerPointerSnapshot | null;\n}): {\n distancePx: number | null;\n elapsedMs: number | null;\n ignore: boolean;\n} {\n if (!input.openPointer) {\n return {\n distancePx: null,\n elapsedMs: null,\n ignore: false\n };\n }\n\n const elapsedMs = input.nowMs - input.openPointer.timeMs;\n const distancePx = Math.hypot(\n input.clickClientX - input.openPointer.clientX,\n input.clickClientY - input.openPointer.clientY\n );\n return {\n distancePx,\n elapsedMs,\n ignore:\n elapsedMs <=\n (input.maxElapsedMs ?? issueManagerTaskDrawerBackdropEchoMs) &&\n distancePx <=\n (input.maxDistancePx ?? issueManagerTaskDrawerBackdropEchoDistancePx)\n };\n}\n","import { useEffect, useState, type FormEvent, type JSX } from \"react\";\nimport {\n BareIconButton,\n Button,\n CheckIcon,\n ChevronDownIcon,\n ConfirmationDialog,\n Dialog,\n DialogContent,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DeleteIcon,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n EditIcon,\n FileCreateIcon,\n Input,\n MoreHorizontalIcon,\n PinFilledIcon,\n PinIcon,\n Textarea,\n cn\n} from \"@tutti-os/ui-system\";\nimport type {\n IssueManagerCreateTopicInput,\n IssueManagerTopic,\n IssueManagerUpdateTopicInput\n} from \"../../../contracts/index.ts\";\nimport type { IssueManagerI18nRuntime } from \"../../../i18n/issueManagerI18n.ts\";\n\nconst topicSelectorMenuItemClassName =\n \"min-h-7 overflow-hidden rounded-md py-1 text-[13px] font-normal leading-[1.2] text-[var(--text-primary)]\";\nconst topicSelectorRowItemClassName =\n \"min-w-0 flex-1 bg-transparent pr-2 pl-1 hover:bg-transparent focus:bg-transparent data-[highlighted]:bg-transparent\";\n\ntype IssueManagerTopicDialogMode =\n | {\n kind: \"create\";\n topic: null;\n }\n | {\n kind: \"edit\";\n topic: IssueManagerTopic;\n };\n\nexport function IssueManagerTopicSelector({\n activeTopicId,\n className,\n copy,\n onCreateTopic,\n onDeleteTopic,\n onSelectTopic,\n onUpdateTopic,\n topics\n}: {\n activeTopicId: string | null;\n className?: string;\n copy: IssueManagerI18nRuntime;\n onCreateTopic: (\n input: Omit<IssueManagerCreateTopicInput, \"workspaceId\">\n ) => void;\n onDeleteTopic: (topicId: string) => void;\n onSelectTopic: (topicId: string) => void;\n onUpdateTopic: (\n input: Omit<IssueManagerUpdateTopicInput, \"workspaceId\">\n ) => void;\n topics: readonly IssueManagerTopic[];\n}): JSX.Element {\n const [dialogMode, setDialogMode] =\n useState<IssueManagerTopicDialogMode | null>(null);\n const [deleteTopic, setDeleteTopic] = useState<IssueManagerTopic | null>(\n null\n );\n const [menuOpen, setMenuOpen] = useState(false);\n const activeTopic = topics.find((topic) => topic.topicId === activeTopicId);\n const topicLabel = copy.t(\"labels.topic\");\n const triggerLabel = formatIssueManagerTopicSelectorTriggerLabel({\n title: activeTopic?.title,\n topicLabel\n });\n\n const openTopicDialog = (mode: IssueManagerTopicDialogMode) => {\n setMenuOpen(false);\n setDialogMode(mode);\n };\n\n return (\n <>\n <DropdownMenu open={menuOpen} onOpenChange={setMenuOpen}>\n <DropdownMenuTrigger asChild>\n <Button\n aria-label={topicLabel}\n className={cn(\n \"max-w-[220px] gap-1 rounded-md border-0 bg-transparent text-[13px] font-normal shadow-none hover:bg-transparent focus:bg-transparent focus-visible:border-0 focus-visible:bg-transparent focus-visible:ring-0 active:bg-transparent aria-expanded:bg-transparent [&[data-state=open]>svg]:rotate-180\",\n className\n )}\n size=\"sm\"\n type=\"button\"\n variant=\"ghost\"\n >\n <span className=\"min-w-0 truncate\">{triggerLabel}</span>\n <ChevronDownIcon className=\"size-4 shrink-0 text-[var(--text-tertiary)] transition-transform duration-200\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\" className=\"w-[200px] px-1\">\n {topics.map((topic) => {\n const isPinned = (topic.pinnedAtUnix ?? 0) > 0;\n const isActive = topic.topicId === activeTopicId;\n const pinLabel = isPinned\n ? copy.t(\"actions.unpinTopic\")\n : copy.t(\"actions.pinTopic\");\n\n return (\n <div key={topic.topicId} className=\"min-w-0\">\n <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)]\">\n <DropdownMenuItem\n className={cn(\n topicSelectorMenuItemClassName,\n topicSelectorRowItemClassName\n )}\n onSelect={() => {\n setMenuOpen(false);\n onSelectTopic(topic.topicId);\n }}\n >\n <span className=\"flex size-4 shrink-0 items-center justify-center text-[var(--accent)]\">\n {isActive ? <CheckIcon className=\"size-4\" /> : null}\n </span>\n <span className=\"flex min-w-0 flex-1 items-center gap-2\">\n <span className=\"truncate\">{topic.title}</span>\n {topic.isDefault ? (\n <span className=\"shrink-0 text-[11px] text-[var(--text-tertiary)]\">\n {copy.t(\"labels.topicDefault\")}\n </span>\n ) : null}\n </span>\n </DropdownMenuItem>\n <BareIconButton\n aria-label={pinLabel}\n className={cn(\n \"pointer-events-none shrink-0 opacity-0 text-[var(--text-tertiary)] transition-opacity duration-150 group-hover/topic-row:pointer-events-auto group-hover/topic-row:opacity-100 group-focus-within/topic-row:pointer-events-auto group-focus-within/topic-row:opacity-100 hover:text-[var(--text-primary)]\",\n isPinned && \"text-[var(--text-primary)]\"\n )}\n size=\"md\"\n title={pinLabel}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n onUpdateTopic({\n pinned: !isPinned,\n topicId: topic.topicId\n });\n }}\n >\n {isPinned ? (\n <PinFilledIcon className=\"size-3.5\" />\n ) : (\n <PinIcon className=\"size-3.5\" />\n )}\n </BareIconButton>\n <DropdownMenu modal={false}>\n <DropdownMenuTrigger asChild>\n <BareIconButton\n aria-label={copy.t(\"actions.moreActions\")}\n className=\"pointer-events-none shrink-0 opacity-0 text-[var(--text-tertiary)] transition-opacity duration-150 group-hover/topic-row:pointer-events-auto group-hover/topic-row:opacity-100 group-focus-within/topic-row:pointer-events-auto group-focus-within/topic-row:opacity-100 hover:text-[var(--text-primary)]\"\n size=\"md\"\n title={copy.t(\"actions.moreActions\")}\n onClick={(event) => {\n event.stopPropagation();\n }}\n >\n <MoreHorizontalIcon className=\"size-3.5\" />\n </BareIconButton>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n align=\"end\"\n className=\"w-32\"\n sideOffset={6}\n >\n <DropdownMenuItem\n onSelect={(event) => {\n event.preventDefault();\n openTopicDialog({\n kind: \"edit\",\n topic\n });\n }}\n >\n <EditIcon className=\"size-3.5\" />\n <span>{copy.t(\"actions.editTopic\")}</span>\n </DropdownMenuItem>\n {!topic.isDefault ? (\n <DropdownMenuItem\n variant=\"destructive\"\n onSelect={(event) => {\n event.preventDefault();\n setMenuOpen(false);\n setDeleteTopic(topic);\n }}\n >\n <DeleteIcon className=\"size-3.5\" />\n <span>{copy.t(\"actions.delete\")}</span>\n </DropdownMenuItem>\n ) : null}\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n </div>\n );\n })}\n {topics.length === 0 ? (\n <div className=\"px-3 py-2 text-[11px] leading-4 text-[var(--text-tertiary)]\">\n {copy.t(\"messages.topicListEmpty\")}\n </div>\n ) : null}\n <DropdownMenuSeparator />\n <DropdownMenuItem\n className={cn(\n topicSelectorMenuItemClassName,\n \"justify-start gap-2 px-2 text-left\"\n )}\n onSelect={(event) => {\n event.preventDefault();\n openTopicDialog({\n kind: \"create\",\n topic: null\n });\n }}\n >\n <FileCreateIcon className=\"size-3.5\" />\n <span className=\"truncate\">{copy.t(\"actions.createTopic\")}</span>\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n <IssueManagerTopicDialog\n copy={copy}\n mode={dialogMode}\n open={dialogMode !== null}\n onCreateTopic={onCreateTopic}\n onOpenChange={(open) => {\n if (!open) {\n setDialogMode(null);\n }\n }}\n onUpdateTopic={onUpdateTopic}\n />\n <ConfirmationDialog\n cancelLabel={copy.t(\"actions.cancel\")}\n confirmLabel={copy.t(\"actions.delete\")}\n description={deleteTopic?.title}\n open={deleteTopic !== null}\n title={copy.t(\"confirmations.deleteTopic\")}\n tone=\"destructive\"\n onConfirm={() => {\n const topicId = deleteTopic?.topicId;\n setDeleteTopic(null);\n if (topicId) {\n onDeleteTopic(topicId);\n }\n }}\n onOpenChange={(open) => {\n if (!open) {\n setDeleteTopic(null);\n }\n }}\n />\n </>\n );\n}\n\nexport function formatIssueManagerTopicSelectorTriggerLabel(input: {\n title?: string | null;\n topicLabel: string;\n}): string {\n const topicLabel = input.topicLabel.trim();\n const title = input.title?.trim();\n if (!title) {\n return topicLabel;\n }\n return `${topicLabel}-${title}`;\n}\n\nfunction IssueManagerTopicDialog({\n copy,\n mode,\n onCreateTopic,\n onOpenChange,\n onUpdateTopic,\n open\n}: {\n copy: IssueManagerI18nRuntime;\n mode: IssueManagerTopicDialogMode | null;\n onCreateTopic: (\n input: Omit<IssueManagerCreateTopicInput, \"workspaceId\">\n ) => void;\n onOpenChange: (open: boolean) => void;\n onUpdateTopic: (\n input: Omit<IssueManagerUpdateTopicInput, \"workspaceId\">\n ) => void;\n open: boolean;\n}): JSX.Element {\n const [summaryDraft, setSummaryDraft] = useState(\"\");\n const [titleDraft, setTitleDraft] = useState(\"\");\n\n useEffect(() => {\n setTitleDraft(mode?.topic?.title ?? \"\");\n setSummaryDraft(mode?.topic?.summary ?? \"\");\n }, [mode]);\n\n const title = titleDraft.trim();\n const dialogTitle =\n mode?.kind === \"edit\"\n ? copy.t(\"labels.editTopicDialogTitle\")\n : copy.t(\"labels.createTopicDialogTitle\");\n\n const submit = (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n if (!mode || !title) {\n return;\n }\n if (mode.kind === \"edit\") {\n onUpdateTopic({\n summary: summaryDraft,\n title,\n topicId: mode.topic.topicId\n });\n } else {\n onCreateTopic({\n summary: summaryDraft,\n title\n });\n }\n onOpenChange(false);\n };\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className=\"sm:max-w-[480px]\">\n <DialogHeader>\n <DialogTitle>{dialogTitle}</DialogTitle>\n </DialogHeader>\n <form className=\"grid gap-4\" onSubmit={submit}>\n <label className=\"grid gap-2\">\n <span className=\"text-[11px] font-medium leading-4 text-[var(--text-secondary)]\">\n {copy.t(\"labels.topicTitle\")}\n </span>\n <Input\n autoFocus\n placeholder={copy.t(\"labels.topicTitle\")}\n value={titleDraft}\n onChange={(event) => setTitleDraft(event.target.value)}\n />\n </label>\n <label className=\"grid gap-2\">\n <span className=\"text-[11px] font-medium leading-4 text-[var(--text-secondary)]\">\n {copy.t(\"labels.topicSummary\")}\n </span>\n <Textarea\n className=\"min-h-24 resize-none\"\n placeholder={copy.t(\"labels.topicSummary\")}\n value={summaryDraft}\n onChange={(event) => setSummaryDraft(event.target.value)}\n />\n </label>\n <DialogFooter className=\"pt-2\">\n <Button\n size=\"dialog\"\n type=\"button\"\n variant=\"ghost\"\n onClick={() => onOpenChange(false)}\n >\n {copy.t(\"actions.cancel\")}\n </Button>\n <Button disabled={!title} size=\"dialog\" type=\"submit\">\n {copy.t(\"actions.saveTopic\")}\n </Button>\n </DialogFooter>\n </form>\n </DialogContent>\n </Dialog>\n );\n}\n"],"mappings":"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","names":["useEffect","useMemo","useState","useEffect","useEffect","useMemo","useState","useEffect","useEffect","useRef","Button","cn","useEffect","useRef","useState","Button","FileCreateIcon","cn","useState","Badge","Button","ScrollArea","Button","FileCreateIcon","jsx","jsxs","jsxs","jsx","jsxs","jsx","jsx","jsxs","Button","FileCreateIcon","useEffect","useState","cn","jsx","jsxs","useState","useEffect","cn","useEffect","useMemo","useRef","useState","Button","cn","jsx","jsxs","Button","jsx","jsxs","useRef","jsx","jsx","jsxs","useState","ScrollArea","Button","Badge","Button","cn","Badge","AgentSessionsIcon","Button","cn","jsx","jsxs","AgentSessionsIcon","Button","cn","jsx","jsxs","cn","Button","jsx","cn","useComposedInputValue","Badge","Button","FileCreateIcon","Input","ScrollArea","cn","jsx","jsxs","Button","FileCreateIcon","ScrollArea","cn","useComposedInputValue","Input","Badge","jsx","jsxs","cn","Button","jsx","jsxs","Button","useRef","ScrollArea","cn","useState","Badge","Button","ConfirmationDialog","Fragment","jsx","jsxs","useState","Button","ConfirmationDialog","Badge","jsx","jsxs","useRef","cn","ScrollArea","useEffect","useEffectEvent","useRef","useState","useRef","useState","useEffectEvent","useEffect","jsx","jsxs","useState","useRef","useEffect","cn","Button","FileCreateIcon","useEffect","useState","BareIconButton","Button","CheckIcon","ChevronDownIcon","ConfirmationDialog","DropdownMenu","DropdownMenuContent","DropdownMenuItem","DropdownMenuTrigger","FileCreateIcon","Input","cn","Fragment","jsx","jsxs","jsx","jsxs","useRef","useEffect","cn","Button"]}
|