@nextop-os/workspace-issue-manager 0.0.26 → 0.0.28

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.
Files changed (34) hide show
  1. package/dist/{chunk-34KSO5F6.js → chunk-I7SVY3KV.js} +159 -25
  2. package/dist/chunk-I7SVY3KV.js.map +1 -0
  3. package/dist/{chunk-JOUBY4J6.js → chunk-MJXXZPDJ.js} +111 -35
  4. package/dist/chunk-MJXXZPDJ.js.map +1 -0
  5. package/dist/chunk-N6NGQ7DZ.js +14 -0
  6. package/dist/chunk-N6NGQ7DZ.js.map +1 -0
  7. package/dist/{chunk-RJ6HZRQU.js → chunk-SUCZIXKI.js} +66 -20
  8. package/dist/chunk-SUCZIXKI.js.map +1 -0
  9. package/dist/{chunk-K3F67IRA.js → chunk-UT34M3FS.js} +1636 -1679
  10. package/dist/chunk-UT34M3FS.js.map +1 -0
  11. package/dist/contracts/index.d.ts +100 -57
  12. package/dist/core/index.d.ts +14 -6
  13. package/dist/core/index.js +4 -2
  14. package/dist/{feature-2zhsUF_g.d.ts → feature-Daez355C.d.ts} +7 -1
  15. package/dist/i18n/index.js +1 -1
  16. package/dist/index.d.ts +4 -3
  17. package/dist/index.js +5 -3
  18. package/dist/{issueManagerControllerService.interface-BtvnnFla.d.ts → issueManagerControllerService.interface-SdcCRGnc.d.ts} +3 -2
  19. package/dist/services/index.d.ts +4 -3
  20. package/dist/services/index.js +3 -3
  21. package/dist/ui/index.d.ts +5 -3
  22. package/dist/ui/index.js +4 -4
  23. package/dist/workbench/constants.d.ts +6 -0
  24. package/dist/workbench/constants.js +9 -0
  25. package/dist/workbench/constants.js.map +1 -0
  26. package/dist/workbench/index.d.ts +5 -4
  27. package/dist/workbench/index.js +10 -11
  28. package/dist/workbench/index.js.map +1 -1
  29. package/openapi/issue-manager.v1.yaml +366 -2
  30. package/package.json +11 -5
  31. package/dist/chunk-34KSO5F6.js.map +0 -1
  32. package/dist/chunk-JOUBY4J6.js.map +0 -1
  33. package/dist/chunk-K3F67IRA.js.map +0 -1
  34. package/dist/chunk-RJ6HZRQU.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/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/panel/IssueManagerPanelText.ts","../src/ui/internal/panel/IssueManagerPanelSurface.tsx","../src/ui/internal/content/IssueManagerDescriptionSection.tsx","../src/ui/internal/content/IssueManagerRichTextTextarea.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/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/IssueManagerTaskDrawerState.ts","../src/ui/internal/shell/useIssueManagerShellView.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}\n\nconst issueManagerTaskListCollapsedEvent =\n \"nextop: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}\n\ninterface IssueManagerTopicSelectionDetail {\n nodeId: string;\n topicId: string;\n}\n\ninterface IssueManagerTopicCreateDetail {\n input: IssueManagerTopicCreateEventInput;\n nodeId: string;\n}\n\ninterface IssueManagerTopicDeleteDetail {\n nodeId: string;\n topicId: string;\n}\n\ninterface IssueManagerTopicUpdateDetail {\n input: IssueManagerTopicUpdateEventInput;\n nodeId: 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: (detail) => detail.nodeId\n });\nconst issueManagerTopicSelectionHub =\n createIssueManagerKeyedEventHub<IssueManagerTopicSelectionDetail>({\n getKey: (detail) => detail.nodeId\n });\nconst issueManagerTopicCreateHub =\n createIssueManagerKeyedEventHub<IssueManagerTopicCreateDetail>({\n getKey: (detail) => detail.nodeId\n });\nconst issueManagerTopicDeleteHub =\n createIssueManagerKeyedEventHub<IssueManagerTopicDeleteDetail>({\n getKey: (detail) => detail.nodeId\n });\nconst issueManagerTopicUpdateHub =\n createIssueManagerKeyedEventHub<IssueManagerTopicUpdateDetail>({\n getKey: (detail) => detail.nodeId\n });\n\nexport function resolveIssueManagerTopicHeaderState(input: {\n activeTopicId: string | null;\n nodeId: string;\n}): IssueManagerTopicHeaderStateDetail {\n return (\n issueManagerTopicHeaderStateHub.get(input.nodeId) ?? {\n activeTopicId: input.activeTopicId,\n nodeId: input.nodeId,\n topics: []\n }\n );\n}\n\nexport function dispatchIssueManagerTaskListCollapsed(input: {\n collapsed: boolean;\n nodeId: 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}): 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 (detail?.nodeId !== input.nodeId) {\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, onCollapsedChange]);\n}\n\nexport function useIssueManagerTopicHeaderStateSync(input: {\n activeTopicId: string | null;\n nodeId: 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.topics === resolveIssueManagerTopicHeaderState(input).topics\n ? current\n : resolveIssueManagerTopicHeaderState(input)\n );\n }, [input.activeTopicId, input.nodeId]);\n\n useEffect(() => {\n const handleTopicHeaderStateChange = (\n detail: IssueManagerTopicHeaderStateDetail\n ) => {\n setState(detail);\n };\n\n return issueManagerTopicHeaderStateHub.subscribe(\n input.nodeId,\n handleTopicHeaderStateChange\n );\n }, [input.nodeId]);\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}): 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 input.nodeId,\n handleTopicSelection\n );\n const unsubscribeCreate = issueManagerTopicCreateHub.subscribe(\n input.nodeId,\n handleTopicCreate\n );\n const unsubscribeDelete = issueManagerTopicDeleteHub.subscribe(\n input.nodeId,\n handleTopicDelete\n );\n const unsubscribeUpdate = issueManagerTopicUpdateHub.subscribe(\n input.nodeId,\n handleTopicUpdate\n );\n return () => {\n unsubscribeSelection();\n unsubscribeCreate();\n unsubscribeDelete();\n unsubscribeUpdate();\n };\n }, [\n input.nodeId,\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}) {\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 });\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\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 \"@nextop-os/workspace-file-reference/react\";\n","import { useMemo } from \"react\";\nimport type { RichTextAtProvider } from \"@nextop-os/ui-rich-text/types\";\nimport type {\n IssueManagerContextRef,\n IssueManagerFileReference,\n IssueManagerIssueDetail,\n IssueManagerIssueSummary,\n IssueManagerExecutionDirectoryProject,\n IssueManagerNodeState,\n IssueManagerPriority,\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 issueManagerProviderOptions,\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\";\n\nexport type IssueManagerRichTextSurface = \"issue\" | \"task\";\n\nexport interface UseIssueManagerControllerInput {\n feature: IssueManagerFeature;\n onStateChange?: (state: IssueManagerNodeState) => void;\n resolveRichTextAtProviders?: (input: {\n surface: IssueManagerRichTextSurface;\n workspaceId: string;\n }) => readonly RichTextAtProvider[];\n service?: IssueManagerControllerService;\n state?: Partial<IssueManagerNodeState> | null;\n workspaceId: string;\n}\n\nexport interface IssueManagerController {\n attachReferences: (parentKind: \"issue\" | \"task\") => Promise<void>;\n canSelectExecutionDirectory: boolean;\n canInviteCollaborators: boolean;\n canReferenceWorkspaceFiles: boolean;\n canUploadWorkspaceFiles: boolean;\n copy: IssueManagerI18nRuntime;\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 openReference: (reference: IssueManagerFileReference) => Promise<void>;\n providerOptions: readonly string[];\n listExecutionDirectoryProjects: () => Promise<{\n projects: IssueManagerExecutionDirectoryProject[];\n }>;\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 resolveRichTextAtProviders: (\n surface: IssueManagerRichTextSurface\n ) => readonly RichTextAtProvider[];\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 selectExecutionDirectory: () => Promise<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 workspaceId: string;\n}\n\nexport function useIssueManagerController({\n feature,\n onStateChange,\n resolveRichTextAtProviders,\n service,\n state,\n workspaceId\n}: UseIssueManagerControllerInput): IssueManagerController {\n const copy = feature.i18n;\n const { controllerSession, floatingNotice, snapshot } =\n useIssueManagerControllerRuntime({\n feature,\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 canInviteCollaborators,\n canReferenceWorkspaceFiles,\n canSelectExecutionDirectory,\n canUploadWorkspaceFiles\n } = useMemo(\n () => resolveIssueManagerControllerCapabilities(feature),\n [feature]\n );\n const actions = createIssueManagerControllerActionsBridge({\n controllerSession,\n copy,\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 issueEditorMode,\n nodeState,\n onResolveRichTextAtProviders: resolveRichTextAtProviders,\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 canInviteCollaborators,\n canReferenceWorkspaceFiles,\n canSelectExecutionDirectory,\n canUploadWorkspaceFiles,\n copy,\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 providerOptions: issueManagerProviderOptions,\n listExecutionDirectoryProjects: () =>\n feature.executionDirectoryPicker?.listUserProjects?.() ??\n Promise.resolve({ projects: [] }),\n referenceTarget,\n selectTopic(topicId: string) {\n const trimmedTopicId = topicId.trim();\n if (!trimmedTopicId) {\n return;\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 { IssueManagerFileAdapter } from \"../../../../contracts/index.ts\";\nimport type { IssueManagerFeature } from \"../../../../core/index.ts\";\n\nexport const issueManagerProviderOptions = [\"codex\"] as const;\n\nexport interface IssueManagerControllerCapabilities {\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 canSelectExecutionDirectory:\n typeof feature.executionDirectoryPicker?.selectDirectory === \"function\",\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\" ? undefined : \"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<{ status: string }> {\n const result = await input.feature.agentRunner.runTask({\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 status: result.status\n };\n}\n","import type {\n IssueManagerContextRef,\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<{ content: string; savedIssue: IssueManagerIssueSummary }> {\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 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 workspaceId: input.workspaceId\n });\n\n return {\n content,\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<{ content: string; savedTask: IssueManagerTaskSummary }> {\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 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 taskId: savedTask.taskId,\n workspaceId: input.workspaceId\n });\n\n return {\n content,\n savedTask\n };\n}\n\nasync function syncIssueManagerContentReferences(input: {\n backend: IssueManagerFeature[\"backend\"];\n content: string;\n existingRefs: IssueManagerContextRef[];\n issueId: string;\n parentKind: \"issue\" | \"task\";\n taskId?: string;\n workspaceId: string;\n}): Promise<void> {\n const existingPaths = new Set(input.existingRefs.map((ref) => ref.path));\n const missingRefs = extractIssueManagerWorkspaceFileLinksFromContent(\n input.content\n )\n .filter((ref) => !existingPaths.has(ref.path))\n .map((ref) => ({\n displayName: ref.name,\n path: ref.path,\n refType: ref.kind\n }));\n\n if (missingRefs.length === 0) {\n return;\n }\n\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","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 { Dispatch, SetStateAction } from \"react\";\nimport type {\n IssueManagerContextRef,\n IssueManagerFileReference,\n IssueManagerIssueDetail,\n IssueManagerNodeState,\n IssueManagerTaskDetail\n} from \"../../contracts/index.ts\";\nimport { type IssueManagerFeature } 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\";\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 return;\n }\n\n const attached = await executeIssueManagerAttachReferences({\n backend: feature.backend,\n refs,\n selectedIssueId: nodeState.selectedIssueId,\n target,\n workspaceId\n });\n applyOutcome(createIssueManagerAttachReferencesOutcome(attached));\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 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 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 removeContextRef(ref: IssueManagerContextRef) {\n try {\n await executeIssueManagerRemoveContextRef({\n backend: feature.backend,\n ref,\n workspaceId\n });\n refreshDetails();\n } catch (error) {\n notifyError(error, \"messages.referenceRemoveFailed\");\n }\n },\n\n async selectExecutionDirectory() {\n const picker = feature.executionDirectoryPicker;\n if (!picker) {\n return;\n }\n try {\n const selected = await picker.selectDirectory();\n const executionDirectory = selected?.trim() || null;\n if (!executionDirectory) {\n return;\n }\n try {\n await picker.useUserProject?.({ path: executionDirectory });\n } catch {\n // The selected directory is still valid even if recency tracking fails.\n }\n updateNodeState((current) =>\n applyIssueManagerSelectedExecutionDirectory(\n current,\n executionDirectory\n )\n );\n } catch (error) {\n notifyTip(\n resolveIssueManagerErrorMessage(\n error,\n copy,\n \"messages.executionDirectorySelectFailed\"\n )\n );\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?.useUserProject?.({\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 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 applyOutcome(outcome);\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 try {\n const result = await breakdownLauncher.startBreakdown({\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 }\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 { savedIssue } = await executeIssueManagerSaveIssue({\n activeTopicId: savePlan.activeTopicId,\n feature,\n issueDetail: issueDetail.value,\n issueDraft,\n issueEditorMode,\n selectedIssueId: nodeState.selectedIssueId,\n workspaceId\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 { savedTask } = await executeIssueManagerSaveTask({\n feature,\n selectedIssueId: savePlan.selectedIssueId,\n selectedTaskId: nodeState.selectedTaskId,\n taskDetail: taskDetail.value,\n taskDraft,\n taskEditorMode,\n workspaceId\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 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","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\";\n\nexport function createIssueManagerControllerActionsBridge(input: {\n controllerSession: IssueManagerControllerSession;\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 taskDetail: {\n value: IssueManagerTaskDetail | null;\n };\n taskDraft: TaskDraft;\n taskEditorMode: IssueManagerEditorMode;\n workspaceId: string;\n}) {\n const {\n controllerSession,\n copy,\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 controllerSession.setIssueEditorModeState(update),\n setReferenceTarget: (update) =>\n controllerSession.setReferenceTarget(update),\n setTaskDraftInternal: (update) =>\n controllerSession.setTaskDraftInternal(update),\n setTaskEditorModeState: (update) =>\n controllerSession.setTaskEditorModeState(update),\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 {\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\";\n\nexport function createIssueManagerIssueBindings(input: {\n controllerSession: IssueManagerControllerSession;\n issueEditorMode: IssueManagerEditorMode;\n nodeState: IssueManagerNodeState;\n}) {\n const { controllerSession, issueEditorMode, nodeState } = input;\n\n return {\n setIssueContent(content: string) {\n controllerSession.setIssueDraftInternal((current) => ({\n ...current,\n content\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 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 {\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\";\n\nexport function createIssueManagerTaskBindings(input: {\n controllerSession: IssueManagerControllerSession;\n nodeState: IssueManagerNodeState;\n taskEditorMode: IssueManagerEditorMode;\n}) {\n const { controllerSession, nodeState, taskEditorMode } = input;\n\n return {\n selectTask(taskId: string | null) {\n controllerSession.updateNodeState((current) =>\n applyIssueManagerTaskSelection(current, taskId)\n );\n controllerSession.setTaskEditorModeState(\"read\");\n },\n setTaskContent(content: string) {\n controllerSession.setTaskDraftInternal((current) => ({\n ...current,\n content\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 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 { RichTextAtProvider } from \"@nextop-os/ui-rich-text/types\";\nimport type { IssueManagerNodeState } from \"../../../../contracts/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\";\n\nexport function createIssueManagerControllerBindings(input: {\n controllerSession: IssueManagerControllerSession;\n issueEditorMode: IssueManagerEditorMode;\n nodeState: IssueManagerNodeState;\n onResolveRichTextAtProviders?: (input: {\n surface: \"issue\" | \"task\";\n workspaceId: string;\n }) => readonly RichTextAtProvider[];\n taskEditorMode: IssueManagerEditorMode;\n workspaceId: string;\n}) {\n const {\n controllerSession,\n issueEditorMode,\n nodeState,\n onResolveRichTextAtProviders,\n taskEditorMode,\n workspaceId\n } = input;\n\n const issueBindings = createIssueManagerIssueBindings({\n controllerSession,\n issueEditorMode,\n nodeState\n });\n const taskBindings = createIssueManagerTaskBindings({\n controllerSession,\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 resolveRichTextAtProviders(surface: \"issue\" | \"task\") {\n return (\n onResolveRichTextAtProviders?.({\n surface,\n workspaceId\n }) ?? []\n );\n },\n selectIssue(issueId: string | null) {\n controllerSession.updateNodeState((current) =>\n 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 { IssueManagerNodeState } 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\";\n\nexport function useIssueManagerControllerRuntime(input: {\n feature: IssueManagerFeature;\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 { feature, onStateChange, service, state, workspaceId } = input;\n const controllerService = useMemo(\n () => service ?? createIssueManagerControllerService(),\n [service]\n );\n const controllerSession = useMemo(\n () =>\n controllerService.createSession({\n feature,\n state,\n workspaceId\n }),\n [controllerService, feature, 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 { RichTextAtProvider } from \"@nextop-os/ui-rich-text/types\";\nimport type { ReactNode } from \"react\";\nimport type {\n IssueManagerFileReference,\n IssueManagerNodeState\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\";\n\nexport interface UseIssueManagerNodeViewInput {\n emptyIllustration?: ReactNode;\n feature: IssueManagerFeature;\n nodeId: string;\n onStateChange?: (state: IssueManagerNodeState) => void;\n resolveRichTextAtProviders?: (input: {\n surface: IssueManagerRichTextSurface;\n workspaceId: string;\n }) => readonly RichTextAtProvider[];\n service?: IssueManagerControllerService;\n state?: Partial<IssueManagerNodeState> | null;\n workspaceId: string;\n}\n\nexport function useIssueManagerNodeView({\n feature,\n nodeId,\n onStateChange,\n resolveRichTextAtProviders,\n service,\n state,\n workspaceId\n}: UseIssueManagerNodeViewInput) {\n const controller = useIssueManagerController({\n feature,\n onStateChange,\n resolveRichTextAtProviders,\n service,\n state,\n workspaceId\n });\n\n useIssueManagerTaskListCollapsedSync({\n nodeId,\n onCollapsedChange: (collapsed) => {\n controller.setTaskListCollapsed(collapsed);\n }\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 controller.setTaskEditorMode(\"read\");\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 \"@nextop-os/workspace-file-reference/react\";\n","import {\n useEffect,\n type HTMLAttributes,\n type JSX,\n type ReactNode\n} from \"react\";\nimport { Button, PanelIcon, cn } from \"@nextop-os/ui-system\";\nimport { WorkspaceFileReferencePicker } from \"@nextop-os/workspace-file-reference/ui\";\nimport type { IssueManagerI18nRuntime } from \"../i18n/issueManagerI18n.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\";\n\nexport type IssueManagerNodeProps = UseIssueManagerNodeViewInput;\n\nexport function IssueManagerNode({\n emptyIllustration,\n feature,\n nodeId,\n onStateChange,\n resolveRichTextAtProviders,\n service,\n state,\n workspaceId\n}: IssueManagerNodeProps): JSX.Element {\n const { controller, referencePicker, selectedIssue, selectedTask, shell } =\n useIssueManagerNodeView({\n feature,\n nodeId,\n onStateChange,\n resolveRichTextAtProviders,\n service,\n state,\n workspaceId\n });\n\n useEffect(() => {\n dispatchIssueManagerTopicHeaderState({\n activeTopicId: controller.nodeState.activeTopicId ?? null,\n nodeId,\n topics: controller.topics.value\n });\n }, [controller.nodeState.activeTopicId, controller.topics.value, nodeId]);\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 });\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 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}\n\nexport function IssueManagerNodeHeader({\n activeTopicId = null,\n className,\n copy,\n defaultActions,\n isSidebarAutoCollapsed,\n isSidebarCollapsed,\n nodeId,\n onToggleSidebar,\n title,\n ...headerProps\n}: IssueManagerNodeHeaderProps): JSX.Element {\n const { effectiveCollapsed, toggleLabel, toggleSidebar } =\n useIssueManagerNodeHeaderView({\n copy,\n isSidebarAutoCollapsed,\n isSidebarCollapsed,\n nodeId,\n onToggleSidebar\n });\n const topicState = useIssueManagerTopicHeaderStateSync({\n activeTopicId,\n nodeId\n });\n\n return (\n <header\n {...headerProps}\n className={cn(\n \"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 className=\"flex min-w-0 items-center gap-2\">\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 <div\n className=\"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 });\n }}\n onDeleteTopic={(topicId) => {\n dispatchIssueManagerTopicDelete({\n nodeId,\n topicId\n });\n }}\n onSelectTopic={(topicId) => {\n dispatchIssueManagerTopicSelection({\n nodeId,\n topicId\n });\n }}\n onUpdateTopic={(input) => {\n dispatchIssueManagerTopicUpdate({\n input,\n nodeId\n });\n }}\n />\n </div>\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\n className=\"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 { useEffect, useState, type JSX, type ReactNode } from \"react\";\nimport { Button, FileCreateIcon, cn } from \"@nextop-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 { IssueManagerTaskDrawer } from \"./IssueManagerTaskDrawer.tsx\";\nimport type { IssueManagerController } from \"../../react/index.ts\";\nimport { useIssueManagerShellView } from \"./useIssueManagerShellView.ts\";\n\nexport { shouldAutoCollapseIssueManagerSidebar } from \"./useIssueManagerShellView.ts\";\n\nconst issueManagerTaskDrawerExitDurationMs = 180;\n\nexport interface IssueManagerShellProps {\n controller: IssueManagerController;\n emptyIllustration?: ReactNode;\n onCloseTaskDrawer: () => void;\n onDismissIssueCreate: () => void;\n selectedIssue: IssueManagerIssueSummary | null;\n selectedTask: IssueManagerTaskSummary | null;\n}\n\nexport function IssueManagerShell({\n controller,\n emptyIllustration,\n onCloseTaskDrawer,\n onDismissIssueCreate,\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 [isTaskDrawerClosing, setIsTaskDrawerClosing] = useState(false);\n\n useEffect(() => {\n if (shellView.content.isTaskDrawerOpen) {\n setRenderedTaskDrawerTask(selectedTask);\n setIsTaskDrawerClosing(false);\n return undefined;\n }\n\n if (!renderedTaskDrawerTask) {\n return undefined;\n }\n\n setIsTaskDrawerClosing(true);\n const timeout = window.setTimeout(() => {\n setRenderedTaskDrawerTask(null);\n setIsTaskDrawerClosing(false);\n }, issueManagerTaskDrawerExitDurationMs);\n\n return () => {\n window.clearTimeout(timeout);\n };\n }, [\n renderedTaskDrawerTask,\n selectedTask,\n shellView.content.isTaskDrawerOpen\n ]);\n const taskDrawerTask = shellView.content.isTaskDrawerOpen\n ? selectedTask\n : renderedTaskDrawerTask;\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 className=\"relative h-full min-h-0 overflow-hidden bg-transparent @container/issue-manager-content\">\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 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 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 selectedIssue={selectedIssue}\n selectedTask={taskDrawerTask}\n onClose={onCloseTaskDrawer}\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 ?? null}\n <h2 className=\"text-lg font-semibold leading-[1.35] text-[var(--text-primary)]\">\n {controller.copy.t(\"messages.noIssues\")}\n </h2>\n <p className=\"max-w-[420px] text-base leading-[1.3] 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 { Badge, Button, ConfirmationDialog } from \"@nextop-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 IssueManagerDetailTextSection,\n IssueManagerOutputSection,\n IssueManagerSubtaskSection\n} from \"../issue/IssueManagerIssueSections.tsx\";\nimport { IssueManagerDescriptionSection } from \"../content/IssueManagerDescriptionSection.tsx\";\nimport { IssueManagerPaneLoadingState } from \"../panel/IssueManagerPanelSurface.tsx\";\nimport { resolveIssueManagerCreatorLabel } from \"../panel/IssueManagerPanelText.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 { IssueManagerEmptyIllustration } from \"../panel/IssueManagerPanelSurface.tsx\";\n\nexport function IssueManagerIssuePane({\n controller,\n selectedIssue,\n onDismissCreate\n}: {\n controller: IssueManagerController;\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 latestRun = selectedTask\n ? (controller.taskDetail.value?.latestRun ??\n controller.taskDetail.value?.recentRuns[0] ??\n null)\n : (controller.issueDetail.value?.latestRun ??\n controller.issueDetail.value?.recentRuns[0] ??\n null);\n const latestOutputs = selectedTask\n ? (controller.taskDetail.value?.latestOutputs ?? [])\n : (controller.issueDetail.value?.latestOutputs ?? []);\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 <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-[17px] 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-sm font-semibold text-[var(--text-primary)] ${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-sm font-semibold text-[var(--text-primary)] ${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 <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 <div className=\"min-h-0 flex-1 overflow-y-auto 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 <h2 className=\"line-clamp-2 text-base font-semibold leading-6 text-[var(--text-primary)]\">\n {selectedIssue.title}\n </h2>\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-sm font-normal text-[var(--text-secondary)]\">\n <Badge\n variant={issueManagerStatusBadgeVariant(selectedIssue.status)}\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>\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>\n {copy.t(\"labels.createdAt\")}{\" \"}\n {formatIssueManagerTimestamp(selectedIssue.createdAtUnix) ||\n \"-\"}\n </span>\n </div>\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 onOpen={controller.openReference}\n variant=\"plain\"\n />\n <IssueManagerDetailTextSection\n body={\n latestRun\n ? latestRun.summary?.trim() ||\n resolveIssueManagerStatusLabel(copy, latestRun.status)\n : copy.t(\"messages.noExecutionStatus\")\n }\n isPlaceholder={!latestRun}\n label={copy.t(\"labels.latestRunStatus\")}\n meta={\n latestRun\n ? formatIssueManagerTimestamp(\n latestRun.updatedAtUnix ?? latestRun.createdAtUnix\n ) || undefined\n : undefined\n }\n tone={latestRun?.status === \"failed\" ? \"destructive\" : \"muted\"}\n />\n <IssueManagerOutputSection\n copy={copy}\n outputs={latestOutputs}\n onOpen={controller.openReference}\n />\n <IssueManagerSubtaskSection\n copy={copy}\n onCreate={controller.createTaskDraft}\n onSelectTask={controller.selectTask}\n selectedTaskId={selectedTask?.taskId ?? null}\n tasks={tasks}\n />\n </div>\n )}\n </div>\n </div>\n );\n}\n","import type { IssueManagerStatus } from \"../../../contracts/index.ts\";\n\nexport function issueManagerStatusBadgeVariant(\n status: IssueManagerStatus\n): \"accent\" | \"default\" {\n return status === \"running\" ? \"accent\" : \"default\";\n}\n","import { type JSX } from \"react\";\nimport {\n Badge,\n Button,\n FileCreateIcon,\n ScrollArea,\n cn\n} from \"@nextop-os/ui-system\";\nimport type {\n IssueManagerFileReference,\n IssueManagerIssueSummary,\n IssueManagerRunOutput,\n IssueManagerTaskSummary\n} from \"../../../contracts/index.ts\";\nimport {\n formatIssueManagerTimestamp,\n resolveIssueManagerStatusLabel\n} from \"../../../services/controllerModel.ts\";\nimport {\n stripIssueManagerDescriptionTerminalPunctuation,\n summarizeIssueManagerContent\n} from \"../panel/IssueManagerPanelText.ts\";\nimport { IssueManagerTaskListLoadingState } from \"../panel/IssueManagerPanelSurface.tsx\";\nimport { issueManagerStatusBadgeVariant } from \"../status/IssueManagerStatusBadge.ts\";\nimport type { IssueManagerController } from \"../../react/index.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 return (\n <section className=\"grid gap-2.5\">\n <h3 className=\"text-sm font-semibold text-[var(--text-primary)]\">\n {label}\n </h3>\n <div className=\"rounded-[12px] border border-[var(--line-2)] px-4 py-3\">\n <p\n className={cn(\n \"truncate text-[14px] leading-5\",\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 {stripIssueManagerDescriptionTerminalPunctuation(body)}\n </p>\n {meta ? (\n <p className=\"mt-1 truncate text-xs font-normal text-[var(--text-secondary)]\">\n {stripIssueManagerDescriptionTerminalPunctuation(meta)}\n </p>\n ) : null}\n </div>\n </section>\n );\n}\n\nexport function IssueManagerOutputSection({\n copy,\n onOpen,\n outputs\n}: {\n copy: IssueManagerController[\"copy\"];\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-sm font-semibold text-[var(--text-primary)]\">\n {copy.t(\"labels.executionOutputs\")}\n </h3>\n {outputs.length === 0 ? (\n <p className=\"text-sm font-normal leading-6 text-[var(--text-secondary)]\">\n {copy.t(\"messages.noExecutionOutputs\")}\n </p>\n ) : (\n <div className=\"grid gap-2\">\n {outputs.map((output) => (\n <button\n className=\"flex items-start justify-between gap-4 rounded-xl border border-border/65 px-4 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 <span className=\"min-w-0 flex-1\">\n <span className=\"block truncate text-sm font-semibold text-[var(--text-primary)]\">\n {output.displayName}\n </span>\n <span className=\"mt-1 block truncate text-xs font-normal text-[var(--text-secondary)]\">\n {output.path}\n </span>\n </span>\n <span className=\"shrink-0 text-xs font-normal text-[var(--text-secondary)]\">\n {formatIssueManagerTimestamp(output.createdAtUnix) || \"\"}\n </span>\n </button>\n ))}\n </div>\n )}\n </section>\n );\n}\n\nexport function IssueManagerSubtaskSection({\n copy,\n onCreate,\n onSelectTask,\n selectedTaskId,\n tasks\n}: {\n copy: IssueManagerController[\"copy\"];\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-sm 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-sm 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-border/70 bg-transparent\">\n {tasks.map((task) => (\n <button\n className={cn(\n \"flex w-full items-start justify-between gap-4 border-b border-border/70 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={() => onSelectTask(task.taskId)}\n >\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex min-w-0 items-center gap-2.5\">\n <span className=\"truncate text-sm font-semibold text-[var(--text-primary)]\">\n {task.title}\n </span>\n <Badge variant={issueManagerStatusBadgeVariant(task.status)}>\n {resolveIssueManagerStatusLabel(copy, task.status)}\n </Badge>\n </div>\n <p className=\"mt-2 line-clamp-2 text-sm font-normal leading-6 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-xs 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-border/70 bg-transparent\">\n <div className=\"flex items-center justify-between gap-4 border-b border-border/60 px-8 py-4\">\n <div>\n <h3 className=\"text-base 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 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-border/70 bg-transparent\">\n <div className=\"px-4 py-10 text-center\">\n <p className=\"text-sm font-semibold leading-5 text-[var(--text-primary)]\">\n {copy.t(\"messages.noTasks\")}\n </p>\n <p className=\"mt-2 text-sm 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-border/70 bg-transparent\">\n {tasks.map((task) => (\n <button\n className={cn(\n \"block w-full border-b border-border/70 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={() => controller.selectTask(task.taskId)}\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 <span className=\"line-clamp-1 text-[14px] font-semibold leading-[1.3] text-[var(--text-primary)]\">\n {task.title}\n </span>\n <Badge\n variant={issueManagerStatusBadgeVariant(task.status)}\n >\n {resolveIssueManagerStatusLabel(copy, task.status)}\n </Badge>\n </div>\n <p className=\"text-[12px] 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-[14px] font-normal leading-[1.6] 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 { 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 \"@nextop-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-lg font-semibold leading-[1.35] text-[var(--text-primary)]\">\n {title}\n </p>\n <p className=\"max-w-[420px] text-base 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 { useEffect, useRef, useState, type JSX } from \"react\";\nimport { RichTextReadonlyContent } from \"@nextop-os/ui-rich-text/editor\";\nimport { cn } from \"@nextop-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 onOpen,\n variant = \"card\"\n}: {\n content: string;\n emptyLabel: string;\n label: string;\n minHeightClass?: string;\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-sm font-semibold leading-5 text-[var(--text-primary)]\">\n {label}\n </span>\n {displayContent ? (\n <div className=\"max-w-3xl text-sm font-normal leading-5 text-[var(--text-secondary)]\">\n <IssueManagerDescriptionContent\n content={displayContent}\n onOpen={onOpen}\n />\n </div>\n ) : (\n <p className=\"text-sm 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-sm 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 \"max-h-[18rem] overflow-y-auto pr-2 text-sm 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 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 onOpen\n}: {\n content: string;\n onOpen?: (reference: IssueManagerFileReference) => Promise<void>;\n}): JSX.Element {\n return (\n <RichTextReadonlyContent\n value={content}\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 { RichTextAtEditor } from \"@nextop-os/ui-rich-text/editor\";\nimport { Button, LinkIcon, cn } from \"@nextop-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-sm 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-sm 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.resolveRichTextAtProviders(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 <RichTextAtEditor\n focusSignal={focusSignal}\n maxResults={8}\n minQueryLength={1}\n providers={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 {\n useEffect,\n useState,\n type ChangeEvent,\n type CompositionEvent,\n type JSX\n} from \"react\";\nimport { Input } from \"@nextop-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 [localValue, setLocalValue] = useState(value);\n const [isComposing, setIsComposing] = useState(false);\n\n useEffect(() => {\n if (!isComposing) {\n setLocalValue(value);\n }\n }, [isComposing, value]);\n\n const commitValue = (nextValue: string) => {\n setLocalValue(nextValue);\n onChange(nextValue);\n };\n\n return (\n <Input\n placeholder={placeholder}\n variant=\"md\"\n value={localValue}\n onBlur={(event) => {\n commitValue(event.currentTarget.value);\n }}\n onChange={(event: ChangeEvent<HTMLInputElement>) => {\n const nextValue = event.currentTarget.value;\n setLocalValue(nextValue);\n if (!isComposing) {\n onChange(nextValue);\n }\n }}\n onCompositionEnd={(event: CompositionEvent<HTMLInputElement>) => {\n setIsComposing(false);\n commitValue(event.currentTarget.value);\n }}\n onCompositionStart={() => {\n setIsComposing(true);\n }}\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 \"@nextop-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\";\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\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={controller.isRunningTask}\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}\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 { useEffect, useState, type JSX } from \"react\";\nimport {\n Badge,\n AgentSessionsIcon,\n Button,\n CheckIcon,\n ChevronDownIcon,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n FolderIcon,\n IssueIcon,\n LinkIcon,\n NoWorkspaceLinedIcon,\n cn\n} from \"@nextop-os/ui-system\";\nimport type {\n IssueManagerExecutionDirectoryProject,\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 executionDirectoryMenuItemClassName =\n \"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)]\";\nconst executionDirectoryMenuItemCheckClassName =\n \"pointer-events-none absolute right-2 top-1/2 shrink-0 -translate-y-1/2\";\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 <Button\n className={cn(\"min-w-0\", triggerClassName)}\n disabled={controller.isRunningTask || disabled}\n size={triggerVariant === \"button\" ? \"dialog\" : \"default\"}\n type=\"button\"\n onClick={() => {\n void controller.runTask();\n }}\n >\n <AgentSessionsIcon size={16} />\n <span className=\"truncate\">\n {controller.copy.t(\"actions.askAgentToRun\")}\n </span>\n </Button>\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 <Button\n className={cn(\"min-w-0\", triggerClassName)}\n disabled={disabled}\n size={triggerVariant === \"button\" ? \"dialog\" : \"default\"}\n type=\"button\"\n variant=\"secondary\"\n onClick={() => {\n void controller.startTaskBreakdown();\n }}\n >\n <IssueIcon size={16} />\n <span className=\"truncate\">\n {controller.copy.t(\"actions.askAgentToBreakdown\")}\n </span>\n </Button>\n );\n}\n\ntype IssueManagerProviderActionTriggerVariant = \"button\" | \"default\";\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 const [projects, setProjects] = useState<\n IssueManagerExecutionDirectoryProject[]\n >([]);\n const [isLoading, setIsLoading] = useState(false);\n const selectedPath =\n controller.nodeState.selectedExecutionDirectory?.trim() ?? \"\";\n const selectedProject =\n projects.find((project) => project.path === selectedPath) ?? null;\n const triggerLabel = selectedProject\n ? selectedProject.label\n : selectedPath\n ? controller.copy.t(\"labels.customExecutionDirectory\")\n : controller.copy.t(\"labels.noProject\");\n\n useEffect(() => {\n let canceled = false;\n\n setIsLoading(true);\n void controller\n .listExecutionDirectoryProjects()\n .then((response) => {\n if (!canceled) {\n setProjects(response.projects);\n }\n })\n .catch(() => {\n if (!canceled) {\n setProjects([]);\n }\n })\n .finally(() => {\n if (!canceled) {\n setIsLoading(false);\n }\n });\n\n return () => {\n canceled = true;\n };\n }, [controller.workspaceId]);\n\n const refreshProjects = (): void => {\n void controller\n .listExecutionDirectoryProjects()\n .then((response) => setProjects(response.projects))\n .catch(() => setProjects([]));\n };\n\n if (!controller.canSelectExecutionDirectory) {\n return null;\n }\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild disabled={disabled}>\n <button\n aria-label={controller.copy.t(\"actions.selectExecutionDirectory\")}\n className={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 disabled={disabled}\n type=\"button\"\n >\n {selectedPath ? (\n <FolderIcon className=\"shrink-0\" size={15} />\n ) : (\n <NoWorkspaceLinedIcon className=\"shrink-0\" size={15} />\n )}\n <span className=\"min-w-0 truncate text-left font-normal\">\n {triggerLabel}\n </span>\n <ChevronDownIcon\n className=\"shrink-0 text-[var(--text-secondary)] transition-transform group-data-[state=open]:rotate-180\"\n size={14}\n />\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n align=\"end\"\n className=\"w-[240px] min-w-[240px]\"\n style={{ zIndex: \"var(--z-panel-popover)\" }}\n >\n {selectedPath && !selectedProject ? (\n <DropdownMenuItem\n className={executionDirectoryMenuItemClassName}\n onSelect={() => {\n void controller\n .useExecutionDirectory(selectedPath)\n .then(refreshProjects);\n }}\n >\n <span className=\"flex min-w-0 flex-1 items-center gap-2 pr-1\">\n <FolderIcon aria-hidden size={15} />\n <span className=\"min-w-0 flex-1 truncate\">\n <span>\n {controller.copy.t(\"labels.customExecutionDirectory\")}\n </span>\n <span className=\"text-[var(--text-secondary)]\">\n {\" \"}\n / {selectedPath}\n </span>\n </span>\n <CheckIcon\n className={executionDirectoryMenuItemCheckClassName}\n size={15}\n />\n </span>\n </DropdownMenuItem>\n ) : null}\n {projects.map((project) => (\n <DropdownMenuItem\n className={executionDirectoryMenuItemClassName}\n key={project.id || project.path}\n onSelect={() => {\n void controller\n .useExecutionDirectory(project.path)\n .then(refreshProjects);\n }}\n >\n <span className=\"flex min-w-0 flex-1 items-center gap-2 pr-1\">\n <FolderIcon aria-hidden size={15} />\n <span className=\"min-w-0 flex-1 truncate\">\n <span>{project.label}</span>\n <span className=\"text-[var(--text-secondary)]\">\n {\" \"}\n / {project.path}\n </span>\n </span>\n {project.path === selectedPath ? (\n <CheckIcon\n className={executionDirectoryMenuItemCheckClassName}\n size={15}\n />\n ) : null}\n </span>\n </DropdownMenuItem>\n ))}\n {isLoading ? (\n <DropdownMenuItem\n className={executionDirectoryMenuItemClassName}\n disabled\n >\n {controller.copy.t(\"labels.loadingExecutionDirectories\")}\n </DropdownMenuItem>\n ) : null}\n {projects.length > 0 || selectedPath || isLoading ? (\n <DropdownMenuSeparator />\n ) : null}\n <DropdownMenuItem\n className={executionDirectoryMenuItemClassName}\n onSelect={() => {\n void controller.selectExecutionDirectory().then(refreshProjects);\n }}\n >\n <span className=\"flex min-w-0 flex-1 items-center gap-2 pr-1\">\n <LinkIcon aria-hidden size={15} />\n <span className=\"truncate\">\n {controller.copy.t(\"actions.linkExistingExecutionDirectory\")}\n </span>\n </span>\n </DropdownMenuItem>\n <DropdownMenuItem\n className={executionDirectoryMenuItemClassName}\n onSelect={() => {\n void controller.useExecutionDirectory(null).then(refreshProjects);\n }}\n >\n <span className=\"flex min-w-0 flex-1 items-center gap-2 pr-1\">\n <NoWorkspaceLinedIcon aria-hidden size={15} />\n <span className=\"truncate\">\n {controller.copy.t(\"labels.noProject\")}\n </span>\n {!selectedPath ? (\n <CheckIcon\n className={executionDirectoryMenuItemCheckClassName}\n size={15}\n />\n ) : null}\n </span>\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\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-sm font-semibold leading-5 text-[var(--text-primary)]\">\n {copy.t(\"labels.recentRuns\")}\n </h4>\n {recentRuns.length === 0 ? (\n <p className=\"text-sm 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-sm font-semibold leading-5 text-[var(--text-primary)]\">\n {run.summary || run.runId}\n </p>\n <p className=\"mt-1 text-xs 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-xs 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-sm font-semibold leading-5 text-[var(--text-primary)]\">\n {copy.t(\"labels.outputs\")}\n </h4>\n {outputs.length === 0 ? (\n <p className=\"text-sm 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-sm font-semibold leading-5 text-[var(--text-primary)]\">\n {output.displayName}\n </p>\n <p className=\"mt-1 truncate text-xs 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 JSX } from \"react\";\nimport { ToastProvider, ToastRoot, ToastTitle } from \"@nextop-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-nowrap\">{notice.title}</ToastTitle>\n </ToastRoot>\n </ToastProvider>\n );\n}\n","import { type JSX } from \"react\";\nimport { cn } from \"@nextop-os/ui-system\";\nimport type { IssueManagerNodeState } from \"../../../contracts/index.ts\";\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 type { IssueManagerSidebarViewState } from \"./IssueManagerShellState.ts\";\n\nexport interface IssueManagerSidebarProps {\n controller: IssueManagerController;\n isCollapsed: boolean;\n isNarrowLayout: boolean;\n showStandaloneState: boolean;\n sidebarViewState: IssueManagerSidebarViewState;\n statusCounts: Record<IssueManagerNodeState[\"issueStatusFilter\"], 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\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 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 onRetry={() => controller.refreshAll()}\n onSelectIssue={controller.selectIssue}\n />\n )}\n </div>\n </aside>\n );\n}\n","import { type JSX } from \"react\";\nimport {\n Badge,\n Button,\n CloseIcon,\n FileCreateIcon,\n Input,\n ScrollArea,\n UnderlineTabs,\n cn\n} from \"@nextop-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 type IssueManagerSidebarViewState\n} from \"./IssueManagerShellState.ts\";\nimport { issueManagerStatusBadgeVariant } from \"../status/IssueManagerStatusBadge.ts\";\n\nexport function IssueManagerSidebarHeader({\n copy,\n issueSearchQuery,\n onCreateIssue,\n onIssueSearchQueryChange\n}: {\n copy: IssueManagerI18nRuntime;\n issueSearchQuery: string;\n onCreateIssue: () => 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 />\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 onRetry,\n onSelectIssue\n}: {\n copy: IssueManagerI18nRuntime;\n isNarrowLayout: boolean;\n selectedIssueId: string | null;\n sidebarViewState: IssueManagerSidebarViewState;\n onRetry: () => void;\n onSelectIssue: (issueId: string | null) => void;\n}): JSX.Element {\n return (\n <ScrollArea\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 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 placeholder,\n value\n}: {\n clearLabel: string;\n onChange: (value: string) => void;\n placeholder: string;\n value: string;\n}): JSX.Element {\n return (\n <div\n className=\"relative min-w-0 flex-1\"\n data-has-value={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-sm 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 value ? \"pr-9\" : \"pr-3\"\n )}\n placeholder={placeholder}\n type=\"search\"\n value={value}\n onChange={(event) => onChange(event.target.value)}\n />\n {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={() => onChange(\"\")}\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 onSelectIssue\n}: {\n copy: IssueManagerI18nRuntime;\n isNarrowLayout: boolean;\n issues: readonly IssueManagerIssueSummary[];\n selectedIssueId: string | null;\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 onSelect={onSelectIssue}\n />\n ))}\n </div>\n );\n}\n\nfunction IssueManagerSidebarItem({\n copy,\n isNarrowLayout,\n issue,\n onSelect,\n selected\n}: {\n copy: IssueManagerI18nRuntime;\n isNarrowLayout: boolean;\n issue: IssueManagerIssueSummary;\n onSelect: (issueId: string | null) => void;\n selected: boolean;\n}): JSX.Element {\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-[12px] leading-[1.55] text-[var(--text-secondary)]\">\n {formatIssueManagerDate(issue.updatedAtUnix ?? issue.createdAtUnix)}\n </p>\n <p className=\"line-clamp-4 text-[14px] font-semibold leading-[1.35rem] text-[var(--text-primary)]\">\n {issue.title}\n </p>\n </div>\n <div className=\"mt-2 text-[12px] leading-[1.55] text-[var(--text-secondary)]\">\n {copy.t(\"labels.taskCount\", { count: issue.taskCount ?? 0 })}\n </div>\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 body,\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 \"text-sm font-semibold leading-5 text-[var(--text-primary)]\",\n tone === \"destructive\"\n ? \"text-[var(--state-danger)]\"\n : \"text-[var(--text-primary)]\"\n )}\n >\n {title}\n </p>\n <p className=\"mt-1.5 max-w-sm text-sm leading-5 text-[var(--text-secondary)]\">\n {body}\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-sm 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} 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 if (issue.status in counts) {\n counts[issue.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\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 \"@nextop-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-[17px] 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-sm font-semibold text-[var(--text-primary)] ${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-sm font-semibold text-[var(--text-primary)] ${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 type { JSX } from \"react\";\nimport { ScrollArea, cn } from \"@nextop-os/ui-system\";\nimport type {\n IssueManagerIssueSummary,\n IssueManagerTaskSummary\n} from \"../../../contracts/index.ts\";\nimport {\n IssueManagerTaskDrawerBody,\n IssueManagerTaskDrawerFooter,\n IssueManagerTaskDrawerHeader\n} from \"./IssueManagerTaskDrawerSections.tsx\";\nimport { resolveIssueManagerTaskDrawerViewState } from \"./IssueManagerTaskDrawerState.ts\";\nimport type { IssueManagerController } from \"../../react/index.ts\";\n\nexport function IssueManagerTaskDrawer({\n controller,\n isClosing,\n selectedIssue,\n selectedTask,\n onClose\n}: {\n controller: IssueManagerController;\n isClosing: boolean;\n selectedIssue: IssueManagerIssueSummary | null;\n selectedTask: IssueManagerTaskSummary | null;\n onClose: () => void;\n}): JSX.Element {\n const view = resolveIssueManagerTaskDrawerViewState({\n controller,\n selectedTask\n });\n const taskContent = selectedTask?.content ?? \"\";\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={onClose}\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 selectedTask={selectedTask}\n view={view}\n />\n )}\n\n <ScrollArea className=\"min-h-0 flex-1 [&_[data-slot=scroll-area-viewport]]:overscroll-contain\">\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 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 { Badge, Button, ConfirmationDialog } from \"@nextop-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 {\n IssueManagerDetailTextSection,\n IssueManagerOutputSection\n} from \"../issue/IssueManagerIssueSections.tsx\";\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 { issueManagerStatusBadgeVariant } from \"../status/IssueManagerStatusBadge.ts\";\nimport { IssueManagerDraftTitleInput } from \"./IssueManagerDraftTitleInput.tsx\";\nimport {\n canIssueManagerSaveTask,\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 selectedTask,\n view\n}: {\n controller: IssueManagerController;\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 {view.showTaskMetadata && selectedTask ? (\n <h3 className=\"line-clamp-2 min-w-0 flex-1 text-base font-semibold leading-6 text-[var(--text-primary)]\">\n {view.title}\n </h3>\n ) : (\n <h3 className=\"line-clamp-2 min-w-0 flex-1 text-[17px] font-semibold leading-[1.35] text-[var(--text-primary)]\">\n {view.title}\n </h3>\n )}\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=\"flex flex-wrap items-center gap-x-2 gap-y-2 text-sm font-normal text-[var(--text-secondary)]\">\n <Badge\n variant={issueManagerStatusBadgeVariant(selectedTask.status)}\n >\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>\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>\n {copy.t(\"labels.createdAt\")}{\" \"}\n {formatIssueManagerTimestamp(selectedTask.createdAtUnix) || \"-\"}\n </span>\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={selectedTask.title}\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\nexport function IssueManagerTaskDrawerLoadingBody(): JSX.Element {\n return <IssueManagerTaskDrawerLoadingState />;\n}\n\nexport function IssueManagerTaskDrawerBody({\n controller,\n taskContent,\n view\n}: {\n controller: IssueManagerController;\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 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-[17px] 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-sm font-semibold text-[var(--text-primary)] ${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-sm font-semibold text-[var(--text-primary)] ${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 taskContent\n}: {\n controller: IssueManagerController;\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 onOpen={controller.openReference}\n variant=\"plain\"\n />\n <IssueManagerDetailTextSection\n body={\n latestRun\n ? latestRun.summary?.trim() ||\n resolveIssueManagerStatusLabel(copy, latestRun.status)\n : copy.t(\"messages.noExecutionStatus\")\n }\n isPlaceholder={!latestRun}\n label={copy.t(\"labels.latestRunStatus\")}\n meta={\n latestRun\n ? formatIssueManagerTimestamp(\n latestRun.updatedAtUnix ?? latestRun.createdAtUnix\n ) || undefined\n : undefined\n }\n tone={latestRun?.status === \"failed\" ? \"destructive\" : \"muted\"}\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\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={controller.isRunningTask}\n />\n <IssueManagerRunActionTrigger\n controller={controller}\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 type {\n IssueManagerIssueSummary,\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","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\";\n\ninterface SidebarResizeState {\n maxWidth: number;\n pointerId: number;\n startClientX: number;\n startWidth: number;\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\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 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","import { useEffect, useState, type FormEvent, type JSX } from \"react\";\nimport {\n AddIcon,\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 Input,\n MoreHorizontalIcon,\n PinIcon,\n Textarea,\n cn\n} from \"@nextop-os/ui-system\";\nimport type {\n IssueManagerCreateTopicInput,\n IssueManagerTopic,\n IssueManagerUpdateTopicInput\n} from \"../../../contracts/index.ts\";\nimport type { IssueManagerI18nRuntime } from \"../../../i18n/issueManagerI18n.ts\";\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\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={copy.t(\"labels.topic\")}\n className={cn(\n \"h-8 max-w-[220px] min-w-[128px] justify-between gap-2 rounded-md border border-[var(--border-1)] bg-transparent px-2.5 text-[13px] font-normal shadow-none hover:bg-transparent focus-visible:ring-0\",\n className\n )}\n type=\"button\"\n variant=\"ghost\"\n >\n <span className=\"min-w-0 truncate\">\n {activeTopic?.title ?? copy.t(\"labels.topic\")}\n </span>\n <ChevronDownIcon className=\"size-4 shrink-0 text-[var(--text-tertiary)]\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\" className=\"min-w-72\">\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=\"relative flex min-h-8 min-w-0 items-center gap-1 rounded-sm pr-1 pl-1 hover:bg-[var(--transparency-block)]\">\n <button\n className=\"flex h-8 min-w-0 flex-1 cursor-pointer items-center gap-2 rounded-sm pr-2 pl-1 text-left text-sm outline-none\"\n type=\"button\"\n onClick={() => {\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 </button>\n <Button\n aria-label={pinLabel}\n className={cn(\n \"shrink-0 text-[var(--text-tertiary)] hover:text-[var(--text-primary)]\",\n isPinned && \"text-[var(--text-primary)]\"\n )}\n size=\"icon-xs\"\n title={pinLabel}\n type=\"button\"\n variant=\"ghost\"\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n onUpdateTopic({\n pinned: !isPinned,\n topicId: topic.topicId\n });\n }}\n >\n <PinIcon className=\"size-3.5\" />\n </Button>\n <DropdownMenu modal={false}>\n <DropdownMenuTrigger asChild>\n <Button\n aria-label={copy.t(\"actions.moreActions\")}\n className=\"shrink-0 text-[var(--text-tertiary)] hover:text-[var(--text-primary)]\"\n size=\"icon-xs\"\n title={copy.t(\"actions.moreActions\")}\n type=\"button\"\n variant=\"ghost\"\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n }}\n >\n <MoreHorizontalIcon className=\"size-3.5\" />\n </Button>\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 <DropdownMenuItem\n disabled={topic.isDefault}\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 </DropdownMenuContent>\n </DropdownMenu>\n </div>\n </div>\n );\n })}\n {topics.length === 0 ? (\n <div className=\"px-3 py-2 text-xs leading-4 text-[var(--text-tertiary)]\">\n {copy.t(\"messages.topicListEmpty\")}\n </div>\n ) : null}\n <DropdownMenuSeparator />\n <div className=\"p-1\">\n <Button\n className=\"w-full justify-start gap-2 px-2 text-left\"\n size=\"sm\"\n type=\"button\"\n variant=\"ghost\"\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n }}\n onPointerDown={(event) => {\n event.preventDefault();\n event.stopPropagation();\n openTopicDialog({\n kind: \"create\",\n topic: null\n });\n }}\n >\n <AddIcon className=\"size-3.5\" />\n <span className=\"truncate\">{copy.t(\"actions.createTopic\")}</span>\n </Button>\n </div>\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\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-[420px]\">\n <DialogHeader>\n <DialogTitle>{dialogTitle}</DialogTitle>\n </DialogHeader>\n <form className=\"grid gap-3\" onSubmit={submit}>\n <label className=\"grid gap-1.5\">\n <span className=\"text-xs 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-1.5\">\n <span className=\"text-xs 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":["useMemo","useEffect","useEffect","useMemo","useEffect","Button","cn","useEffect","useState","Button","FileCreateIcon","cn","useState","Badge","Button","Button","FileCreateIcon","jsx","jsxs","Button","FileCreateIcon","useEffect","useState","cn","jsx","jsxs","useState","useEffect","cn","useEffect","useMemo","useRef","useState","Button","cn","jsx","jsxs","useEffect","useState","jsx","jsx","jsxs","useState","Button","Badge","Button","cn","useEffect","useState","Badge","Button","LinkIcon","cn","jsx","jsxs","Button","cn","useState","useEffect","LinkIcon","jsx","jsxs","cn","Button","jsx","cn","Badge","Button","FileCreateIcon","Input","ScrollArea","cn","jsx","jsxs","Button","FileCreateIcon","ScrollArea","cn","Input","Badge","jsx","jsxs","cn","Button","jsx","jsxs","Button","ScrollArea","cn","useState","Badge","Button","ConfirmationDialog","jsx","jsxs","useState","Button","Badge","ConfirmationDialog","jsx","jsxs","cn","ScrollArea","useEffect","useEffectEvent","useRef","useState","useRef","useState","useEffectEvent","useEffect","jsx","jsxs","useState","useEffect","cn","Button","FileCreateIcon","useEffect","useState","Button","CheckIcon","ChevronDownIcon","ConfirmationDialog","DropdownMenu","DropdownMenuContent","DropdownMenuItem","DropdownMenuSeparator","DropdownMenuTrigger","Input","cn","Fragment","jsx","jsxs","jsx","jsxs","useEffect","cn","Button"]}