@nextop-os/workspace-issue-manager 0.0.16 → 0.0.17

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/react/internal/useIssueManagerController.ts","../src/react/internal/controllerUtils.ts","../src/react/internal/controllerActions.ts","../src/react/internal/controllerState.ts","../src/react/internal/IssueManagerReferencePicker.tsx","../src/react/internal/model.ts","../src/react/internal/IssueManagerShell.tsx","../src/react/internal/IssueManagerPanels.tsx","../src/react/internal/IssueManagerPanelParts.tsx","../src/react/internal/IssueManagerPanelText.ts","../src/react/internal/IssueManagerTaskComposerPane.tsx","../src/react/internal/IssueManagerTaskDrawer.tsx","../src/react/IssueManagerNode.tsx"],"sourcesContent":["import { useDeferredValue, useEffect, useState } from \"react\";\nimport type {\n IssueManagerContextRef,\n IssueManagerFileAdapter,\n IssueManagerFileReference,\n IssueManagerIssueDetail,\n IssueManagerIssueSummary,\n IssueManagerNodeState,\n IssueManagerPriority,\n IssueManagerTaskDetail\n} from \"../../contracts/index.ts\";\nimport {\n normalizeIssueManagerNodeState,\n type IssueManagerFeature\n} from \"../../core/index.ts\";\nimport type { IssueManagerI18nRuntime } from \"../../i18n/issueManagerI18n.ts\";\nimport { createIssueManagerControllerActions } from \"./controllerActions.ts\";\nimport type {\n AsyncCollectionState,\n IssueDraft,\n IssueManagerNotice,\n TaskDraft\n} from \"./controllerTypes.ts\";\nimport { resolveIssueManagerErrorMessage } from \"./controllerUtils.ts\";\nimport {\n applyIssueManagerIssueEditorModeToNodeState,\n applyIssueManagerIssueDetailResultToNodeState,\n applyIssueManagerIssueListResultToNodeState,\n applyIssueManagerIssueSelection,\n applyIssueManagerTaskEditorModeToNodeState,\n applyIssueManagerTaskSelection,\n createIssueManagerIssueDraftFromNodeState,\n createIssueManagerTaskDraftFromNodeState,\n persistIssueManagerIssueDraftContent,\n persistIssueManagerIssueDraftTitle,\n persistIssueManagerTaskDraftContent,\n persistIssueManagerTaskDraftTitle,\n syncIssueManagerIssueDraftFromDetail,\n syncIssueManagerTaskDraftFromDetail\n} from \"./controllerState.ts\";\nimport type {\n IssueManagerEditorMode,\n IssueManagerReferenceTarget\n} from \"./model.ts\";\n\nexport interface UseIssueManagerControllerInput {\n feature: IssueManagerFeature;\n onStateChange?: (state: IssueManagerNodeState) => void;\n state?: Partial<IssueManagerNodeState> | null;\n workspaceId: string;\n}\n\nexport interface IssueManagerController {\n attachReferences: (parentKind: \"issue\" | \"task\") => Promise<void>;\n canReferenceWorkspaceFiles: boolean;\n canUploadWorkspaceFiles: boolean;\n clearNotice: () => void;\n copy: IssueManagerI18nRuntime;\n createTaskDraft: () => void;\n deleteIssue: () => Promise<void>;\n deleteTask: () => Promise<void>;\n insertReferences: (parentKind: \"issue\" | \"task\") => Promise<void>;\n issueDetail: AsyncCollectionState<IssueManagerIssueDetail | null>;\n issueDraft: IssueDraft;\n issueEditorMode: IssueManagerEditorMode;\n issues: AsyncCollectionState<IssueManagerIssueSummary[]>;\n isRunningTask: boolean;\n nodeState: IssueManagerNodeState;\n notice: IssueManagerNotice | null;\n openReference: (reference: IssueManagerFileReference) => Promise<void>;\n providerOptions: readonly string[];\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 selectIssue: (issueId: string | null) => void;\n selectTask: (taskId: string | null) => 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 setTaskContent: (content: string) => void;\n setTaskDraft: (patch: Partial<TaskDraft>) => void;\n setTaskEditorMode: (mode: IssueManagerEditorMode) => void;\n setTaskPriority: (priority: IssueManagerPriority) => void;\n setTaskTitle: (title: string) => void;\n shareSelection: () => Promise<void>;\n submitReferenceSelection: (\n refs: IssueManagerFileReference[]\n ) => Promise<void>;\n taskDetail: AsyncCollectionState<IssueManagerTaskDetail | null>;\n taskDraft: TaskDraft;\n taskEditorMode: IssueManagerEditorMode;\n uploadReferences: (\n parentKind: \"issue\" | \"task\",\n mode: \"files\" | \"folder\"\n ) => Promise<void>;\n}\n\nconst issueManagerProviderOptions = [\"codex\"] as const;\n\nexport function useIssueManagerController({\n feature,\n onStateChange,\n state,\n workspaceId\n}: UseIssueManagerControllerInput): IssueManagerController {\n const copy = feature.i18n;\n const [nodeState, setNodeStateInternal] = useState(() =>\n normalizeIssueManagerNodeState(state)\n );\n const [issueEditorMode, setIssueEditorModeState] =\n useState<IssueManagerEditorMode>(\"read\");\n const [taskEditorMode, setTaskEditorModeState] =\n useState<IssueManagerEditorMode>(\"read\");\n const [issueDraft, setIssueDraftInternal] = useState<IssueDraft>(() =>\n createIssueManagerIssueDraftFromNodeState(nodeState)\n );\n const [taskDraft, setTaskDraftInternal] = useState<TaskDraft>(() =>\n createIssueManagerTaskDraftFromNodeState(nodeState)\n );\n const [issueReloadToken, setIssueReloadToken] = useState(0);\n const [detailReloadToken, setDetailReloadToken] = useState(0);\n const [notice, setNotice] = useState<IssueManagerNotice | null>(null);\n const [isRunningTask, setIsRunningTask] = useState(false);\n const [referenceTarget, setReferenceTarget] =\n useState<IssueManagerReferenceTarget | null>(null);\n const [issues, setIssues] = useState<\n AsyncCollectionState<IssueManagerIssueSummary[]>\n >({\n error: null,\n isLoading: false,\n value: []\n });\n const [issueDetail, setIssueDetail] = useState<\n AsyncCollectionState<IssueManagerIssueDetail | null>\n >({\n error: null,\n isLoading: false,\n value: null\n });\n const [taskDetail, setTaskDetail] = useState<\n AsyncCollectionState<IssueManagerTaskDetail | null>\n >({\n error: null,\n isLoading: false,\n value: null\n });\n const deferredIssueSearch = useDeferredValue(nodeState.issueSearchQuery);\n const canReferenceWorkspaceFiles =\n hasFileAdapterMethod(feature.fileAdapter, \"requestReferences\") ||\n hasFileAdapterMethod(feature.fileAdapter, \"listDirectory\") ||\n hasFileAdapterMethod(feature.fileAdapter, \"searchReferences\");\n const canUploadWorkspaceFiles = hasFileAdapterMethod(\n feature.fileAdapter,\n \"requestUpload\"\n );\n\n const updateNodeState = (\n updater:\n | Partial<IssueManagerNodeState>\n | ((current: IssueManagerNodeState) => IssueManagerNodeState)\n ) => {\n setNodeStateInternal((current) => {\n const next =\n typeof updater === \"function\"\n ? updater(current)\n : ({\n ...current,\n ...updater\n } satisfies IssueManagerNodeState);\n onStateChange?.(next);\n return next;\n });\n };\n\n const refreshIssues = () => {\n setIssueReloadToken((current) => current + 1);\n };\n\n const refreshDetails = () => {\n setDetailReloadToken((current) => current + 1);\n };\n\n const refreshAll = () => {\n refreshIssues();\n refreshDetails();\n };\n\n useEffect(() => {\n const normalized = normalizeIssueManagerNodeState(state);\n setNodeStateInternal(normalized);\n setIssueDraftInternal(\n createIssueManagerIssueDraftFromNodeState(normalized)\n );\n setTaskDraftInternal((current) => ({\n ...createIssueManagerTaskDraftFromNodeState(normalized, current.priority)\n }));\n }, [workspaceId]);\n\n useEffect(() => {\n let canceled = false;\n setIssues((current) => ({\n ...current,\n error: null,\n isLoading: true\n }));\n\n void feature.backend\n .listIssues({\n searchQuery: deferredIssueSearch || undefined,\n statusFilter: nodeState.issueStatusFilter,\n workspaceId\n })\n .then((result) => {\n if (canceled) {\n return;\n }\n setIssues({\n error: null,\n isLoading: false,\n value: result.issues\n });\n updateNodeState((current) =>\n applyIssueManagerIssueListResultToNodeState(current, result)\n );\n })\n .catch((error) => {\n if (canceled) {\n return;\n }\n setIssues({\n error: resolveIssueManagerErrorMessage(error, copy),\n isLoading: false,\n value: []\n });\n });\n\n return () => {\n canceled = true;\n };\n }, [\n copy,\n deferredIssueSearch,\n feature.backend,\n issueReloadToken,\n nodeState.issueStatusFilter,\n workspaceId\n ]);\n\n useEffect(() => {\n const selectedIssueId = nodeState.selectedIssueId;\n if (!selectedIssueId) {\n setIssueDetail({\n error: null,\n isLoading: false,\n value: null\n });\n return;\n }\n\n let canceled = false;\n setIssueDetail((current) => ({\n ...current,\n error: null,\n isLoading: true\n }));\n void feature.backend\n .getIssueDetail({\n issueId: selectedIssueId,\n workspaceId\n })\n .then((result) => {\n if (canceled) {\n return;\n }\n setIssueDetail({\n error: null,\n isLoading: false,\n value: result\n });\n updateNodeState((current) =>\n applyIssueManagerIssueDetailResultToNodeState(current, result)\n );\n })\n .catch((error) => {\n if (canceled) {\n return;\n }\n setIssueDetail({\n error: resolveIssueManagerErrorMessage(error, copy),\n isLoading: false,\n value: null\n });\n });\n\n return () => {\n canceled = true;\n };\n }, [\n copy,\n detailReloadToken,\n feature.backend,\n nodeState.selectedIssueId,\n workspaceId\n ]);\n\n useEffect(() => {\n const selectedIssueId = nodeState.selectedIssueId;\n const selectedTaskId = nodeState.selectedTaskId;\n if (!selectedIssueId || !selectedTaskId) {\n setTaskDetail({\n error: null,\n isLoading: false,\n value: null\n });\n return;\n }\n\n let canceled = false;\n setTaskDetail((current) => ({\n ...current,\n error: null,\n isLoading: true\n }));\n void feature.backend\n .getTaskDetail({\n issueId: selectedIssueId,\n taskId: selectedTaskId,\n workspaceId\n })\n .then((result) => {\n if (canceled) {\n return;\n }\n setTaskDetail({\n error: null,\n isLoading: false,\n value: result\n });\n })\n .catch((error) => {\n if (canceled) {\n return;\n }\n setTaskDetail({\n error: resolveIssueManagerErrorMessage(error, copy),\n isLoading: false,\n value: null\n });\n });\n\n return () => {\n canceled = true;\n };\n }, [\n copy,\n detailReloadToken,\n feature.backend,\n nodeState.selectedIssueId,\n nodeState.selectedTaskId,\n workspaceId\n ]);\n\n useEffect(() => {\n setIssueDraftInternal((current) =>\n syncIssueManagerIssueDraftFromDetail(\n current,\n issueDetail.value,\n issueEditorMode\n )\n );\n }, [\n issueDetail.value?.issue.content,\n issueDetail.value?.issue.title,\n issueEditorMode\n ]);\n\n useEffect(() => {\n setTaskDraftInternal((current) =>\n syncIssueManagerTaskDraftFromDetail(\n current,\n taskDetail.value,\n taskEditorMode\n )\n );\n }, [\n taskDetail.value?.task.content,\n taskDetail.value?.task.priority,\n taskDetail.value?.task.title,\n taskEditorMode\n ]);\n\n const actions = createIssueManagerControllerActions({\n copy,\n feature,\n issueDetail,\n issueDraft,\n issueEditorMode,\n nodeState,\n referenceTarget,\n refreshAll,\n refreshDetails,\n setIsRunningTask,\n setIssueDraftInternal,\n setIssueEditorModeState,\n setNotice,\n setReferenceTarget,\n setTaskDraftInternal,\n setTaskEditorModeState,\n taskDetail,\n taskDraft,\n taskEditorMode,\n updateNodeState,\n workspaceId\n });\n\n return {\n ...actions,\n canReferenceWorkspaceFiles,\n canUploadWorkspaceFiles,\n clearNotice() {\n setNotice(null);\n },\n copy,\n issueDetail,\n issueDraft,\n issueEditorMode,\n issues,\n isRunningTask,\n nodeState,\n notice,\n providerOptions: issueManagerProviderOptions,\n refreshAll,\n referenceTarget,\n selectIssue(issueId) {\n updateNodeState((current) =>\n applyIssueManagerIssueSelection(current, issueId)\n );\n setIssueEditorModeState(\"read\");\n setTaskEditorModeState(\"read\");\n },\n selectTask(taskId) {\n updateNodeState((current) =>\n applyIssueManagerTaskSelection(current, taskId)\n );\n setTaskEditorModeState(\"read\");\n },\n setIssueContent(content) {\n setIssueDraftInternal((current) => ({\n ...current,\n content\n }));\n updateNodeState((current) =>\n persistIssueManagerIssueDraftContent(current, issueEditorMode, content)\n );\n },\n setIssueDraft(patch) {\n setIssueDraftInternal((current) => ({\n ...current,\n ...patch\n }));\n },\n setIssueEditorMode(mode) {\n setIssueEditorModeState(mode);\n if (mode === \"create\") {\n setIssueDraftInternal(\n createIssueManagerIssueDraftFromNodeState(nodeState)\n );\n }\n updateNodeState((current) =>\n applyIssueManagerIssueEditorModeToNodeState(current, mode)\n );\n },\n setIssueSearchQuery(query) {\n updateNodeState((current) => ({\n ...current,\n issueSearchQuery: query\n }));\n },\n setIssueStatusFilter(value) {\n updateNodeState((current) => ({\n ...current,\n issueStatusFilter: value\n }));\n },\n setIssueTitle(title) {\n setIssueDraftInternal((current) => ({\n ...current,\n title\n }));\n updateNodeState((current) =>\n persistIssueManagerIssueDraftTitle(current, issueEditorMode, title)\n );\n },\n setReferenceTarget,\n setSelectedAgentProvider(provider) {\n updateNodeState((current) => ({\n ...current,\n selectedAgentProvider: provider\n }));\n },\n setTaskContent(content) {\n setTaskDraftInternal((current) => ({\n ...current,\n content\n }));\n updateNodeState((current) =>\n persistIssueManagerTaskDraftContent(current, taskEditorMode, content)\n );\n },\n setTaskDraft(patch) {\n setTaskDraftInternal((current) => ({\n ...current,\n ...patch\n }));\n },\n setTaskEditorMode(mode) {\n setTaskEditorModeState(mode);\n if (mode === \"create\") {\n setTaskDraftInternal(\n createIssueManagerTaskDraftFromNodeState(nodeState)\n );\n }\n updateNodeState((current) =>\n applyIssueManagerTaskEditorModeToNodeState(current, mode)\n );\n },\n setTaskPriority(priority) {\n setTaskDraftInternal((current) => ({\n ...current,\n priority\n }));\n },\n setTaskTitle(title) {\n setTaskDraftInternal((current) => ({\n ...current,\n title\n }));\n updateNodeState((current) =>\n persistIssueManagerTaskDraftTitle(current, taskEditorMode, title)\n );\n },\n taskDetail,\n taskDraft,\n taskEditorMode\n };\n}\n\nfunction hasFileAdapterMethod(\n fileAdapter: IssueManagerFileAdapter | undefined,\n methodName:\n | \"listDirectory\"\n | \"requestReferences\"\n | \"requestUpload\"\n | \"searchReferences\"\n): boolean {\n return typeof Reflect.get(fileAdapter ?? {}, methodName) === \"function\";\n}\n","import type {\n IssueManagerIssueSummary,\n IssueManagerFileReference,\n IssueManagerPriority,\n IssueManagerTaskSummary\n} from \"../../contracts/index.ts\";\nimport type { IssueManagerWorkspaceFileLinkInput } from \"../../core/index.ts\";\nimport type { IssueManagerI18nRuntime } from \"../../i18n/issueManagerI18n.ts\";\n\nexport const defaultTaskPriority: IssueManagerPriority = \"medium\";\n\nexport function resolveIssueManagerSelectedIssueId(\n currentSelectedIssueId: string | null | undefined,\n issues: readonly IssueManagerIssueSummary[]\n): string | null {\n if (\n currentSelectedIssueId &&\n issues.some((issue) => issue.issueId === currentSelectedIssueId)\n ) {\n return currentSelectedIssueId;\n }\n return issues[0]?.issueId ?? null;\n}\n\nexport function resolveIssueManagerSelectedTaskId(\n currentSelectedTaskId: string | null | undefined,\n tasks: readonly IssueManagerTaskSummary[]\n): string | null {\n if (\n currentSelectedTaskId &&\n tasks.some((task) => task.taskId === currentSelectedTaskId)\n ) {\n return currentSelectedTaskId;\n }\n return tasks[0]?.taskId ?? null;\n}\n\nexport function toContextRefInput(ref: IssueManagerFileReference) {\n return {\n displayName: ref.displayName,\n path: ref.path,\n refType: ref.kind === \"folder\" ? \"folder\" : \"file\"\n };\n}\n\nexport function toIssueManagerWorkspaceFileLinkInput(\n ref: IssueManagerFileReference\n): IssueManagerWorkspaceFileLinkInput {\n return {\n kind: ref.kind === \"folder\" ? \"folder\" : \"file\",\n name: ref.displayName,\n path: ref.path\n };\n}\n\nexport function confirmIssueManagerMessage(message: string): boolean {\n try {\n return globalThis.confirm?.(message) ?? true;\n } catch {\n return true;\n }\n}\n\nexport function resolveIssueManagerErrorMessage(\n error: unknown,\n copy?: IssueManagerI18nRuntime\n): string {\n const raw =\n error instanceof Error\n ? error.message\n : typeof error === \"string\"\n ? error\n : String(error);\n\n if (!copy) {\n return raw;\n }\n\n if (raw === \"issue_manager.upload_type_conflict\") {\n return copy.t(\"messages.uploadTypeConflict\");\n }\n if (raw === \"issue_manager.workspace_path_unavailable\") {\n return copy.t(\"messages.workspacePathUnavailable\");\n }\n if (raw === \"issue_manager.run_status_missing\") {\n return copy.t(\"messages.runStatusMissing\");\n }\n if (raw === \"issue_manager.run_timed_out\") {\n return copy.t(\"messages.runTimedOut\");\n }\n if (raw.startsWith(\"issue_manager.run_exit_code:\")) {\n return copy.t(\"messages.runExitCode\", {\n code: raw.slice(\"issue_manager.run_exit_code:\".length)\n });\n }\n\n return raw;\n}\n","import type { Dispatch, SetStateAction } from \"react\";\nimport type {\n IssueManagerContextRef,\n IssueManagerFileReference,\n IssueManagerIssueDetail,\n IssueManagerNodeState,\n IssueManagerRun,\n IssueManagerTaskDetail\n} from \"../../contracts/index.ts\";\nimport {\n appendIssueManagerWorkspaceFileLinksToContent,\n extractIssueManagerWorkspaceFileLinksFromContent,\n normalizeIssueManagerContent,\n type IssueManagerFeature\n} from \"../../core/index.ts\";\nimport type { IssueManagerI18nRuntime } from \"../../i18n/issueManagerI18n.ts\";\nimport type {\n IssueManagerEditorMode,\n IssueManagerReferenceTarget\n} from \"./model.ts\";\nimport type {\n IssueDraft,\n IssueManagerNotice,\n TaskDraft\n} from \"./controllerTypes.ts\";\nimport {\n confirmIssueManagerMessage,\n defaultTaskPriority,\n resolveIssueManagerErrorMessage,\n toContextRefInput,\n toIssueManagerWorkspaceFileLinkInput\n} from \"./controllerUtils.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 setIsRunningTask: Dispatch<SetStateAction<boolean>>;\n setIssueDraftInternal: Dispatch<SetStateAction<IssueDraft>>;\n setIssueEditorModeState: Dispatch<SetStateAction<IssueManagerEditorMode>>;\n setNotice: Dispatch<SetStateAction<IssueManagerNotice | null>>;\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\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 setIsRunningTask,\n setIssueDraftInternal,\n setIssueEditorModeState,\n setNotice,\n setReferenceTarget,\n setTaskDraftInternal,\n setTaskEditorModeState,\n taskDetail,\n taskDraft,\n taskEditorMode,\n updateNodeState,\n workspaceId\n } = input;\n\n const submitReferences = async (\n refs: IssueManagerFileReference[],\n target: IssueManagerReferenceTarget | null = referenceTarget\n ) => {\n const dedupedRefs = refs.filter((ref) => ref.path.trim().length > 0);\n if (!target || dedupedRefs.length === 0) {\n setReferenceTarget(null);\n return;\n }\n\n if (target.mode === \"insert\") {\n if (target.parentKind === \"issue\") {\n setIssueDraftInternal((current) => ({\n ...current,\n content: appendIssueManagerWorkspaceFileLinksToContent(\n current.content,\n dedupedRefs.map(toIssueManagerWorkspaceFileLinkInput)\n )\n }));\n } else {\n setTaskDraftInternal((current) => ({\n ...current,\n content: appendIssueManagerWorkspaceFileLinksToContent(\n current.content,\n dedupedRefs.map(toIssueManagerWorkspaceFileLinkInput)\n )\n }));\n }\n setReferenceTarget(null);\n return;\n }\n\n const selectedIssueId = nodeState.selectedIssueId;\n if (!selectedIssueId) {\n setReferenceTarget(null);\n return;\n }\n\n await feature.backend.addContextRefs(\n target.parentKind === \"task\"\n ? {\n issueId: selectedIssueId,\n parentKind: \"task\",\n refs: dedupedRefs.map(toContextRefInput),\n taskId: target.taskId,\n workspaceId\n }\n : {\n issueId: selectedIssueId,\n parentKind: \"issue\",\n refs: dedupedRefs.map(toContextRefInput),\n workspaceId\n }\n );\n setReferenceTarget(null);\n refreshDetails();\n };\n\n const createInsertReferenceTarget = (\n parentKind: \"issue\" | \"task\"\n ): IssueManagerReferenceTarget =>\n parentKind === \"task\"\n ? {\n mode: \"insert\",\n parentKind: \"task\",\n taskId: nodeState.selectedTaskId ?? \"\"\n }\n : {\n mode: \"insert\",\n parentKind: \"issue\"\n };\n\n const syncContentReferences = async (payload: {\n content: string;\n existingRefs: IssueManagerContextRef[];\n issueId: string;\n parentKind: \"issue\" | \"task\";\n taskId?: string;\n }) => {\n const existingPaths = new Set(payload.existingRefs.map((ref) => ref.path));\n const missingRefs = extractIssueManagerWorkspaceFileLinksFromContent(\n payload.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 feature.backend.addContextRefs(\n payload.parentKind === \"task\"\n ? {\n issueId: payload.issueId,\n parentKind: \"task\",\n refs: missingRefs,\n taskId: payload.taskId ?? \"\",\n workspaceId\n }\n : {\n issueId: payload.issueId,\n parentKind: \"issue\",\n refs: missingRefs,\n workspaceId\n }\n );\n };\n\n return {\n async attachReferences(parentKind: \"issue\" | \"task\") {\n if (!feature.fileAdapter) {\n return;\n }\n if (parentKind === \"task\" && !nodeState.selectedTaskId) {\n return;\n }\n if (\n feature.fileAdapter.requestReferences &&\n !feature.fileAdapter.listDirectory &&\n !feature.fileAdapter.searchReferences\n ) {\n const refs = await feature.fileAdapter.requestReferences({\n workspaceId\n });\n await submitReferences(\n refs,\n parentKind === \"task\"\n ? {\n mode: \"attach\",\n parentKind: \"task\",\n taskId: nodeState.selectedTaskId ?? \"\"\n }\n : {\n mode: \"attach\",\n parentKind: \"issue\"\n }\n );\n return;\n }\n\n setReferenceTarget(\n parentKind === \"task\"\n ? { mode: \"attach\", parentKind, taskId: nodeState.selectedTaskId! }\n : { mode: \"attach\", parentKind }\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() {\n const selectedIssueId = nodeState.selectedIssueId;\n if (\n !selectedIssueId ||\n !confirmIssueManagerMessage(copy.t(\"confirmations.deleteIssue\"))\n ) {\n return;\n }\n try {\n await feature.backend.deleteIssue({\n issueId: selectedIssueId,\n workspaceId\n });\n setNotice({\n kind: \"success\",\n message: copy.t(\"messages.issueDeleted\")\n });\n setIssueEditorModeState(\"read\");\n setTaskEditorModeState(\"read\");\n updateNodeState((current) => ({\n ...current,\n selectedIssueId: null,\n selectedTaskId: null\n }));\n refreshAll();\n } catch (error) {\n setNotice({\n kind: \"error\",\n message: resolveIssueManagerErrorMessage(error, copy)\n });\n }\n },\n\n async deleteTask() {\n const selectedIssueId = nodeState.selectedIssueId;\n const selectedTaskId = nodeState.selectedTaskId;\n if (\n !selectedIssueId ||\n !selectedTaskId ||\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 setNotice({\n kind: \"success\",\n message: copy.t(\"messages.taskDeleted\")\n });\n setTaskEditorModeState(\"read\");\n updateNodeState((current) => ({\n ...current,\n selectedTaskId: null\n }));\n refreshAll();\n } catch (error) {\n setNotice({\n kind: \"error\",\n message: resolveIssueManagerErrorMessage(error, copy)\n });\n }\n },\n\n async insertReferences(parentKind: \"issue\" | \"task\") {\n if (!feature.fileAdapter) {\n return;\n }\n if (\n parentKind === \"task\" &&\n !nodeState.selectedTaskId &&\n taskEditorMode !== \"create\"\n ) {\n return;\n }\n if (\n feature.fileAdapter.requestReferences &&\n !feature.fileAdapter.listDirectory &&\n !feature.fileAdapter.searchReferences\n ) {\n const refs = await feature.fileAdapter.requestReferences({\n workspaceId\n });\n await submitReferences(refs, createInsertReferenceTarget(parentKind));\n return;\n }\n\n setReferenceTarget(createInsertReferenceTarget(parentKind));\n },\n\n async uploadReferences(\n parentKind: \"issue\" | \"task\",\n mode: \"files\" | \"folder\"\n ) {\n if (!feature.fileAdapter?.requestUpload) {\n return;\n }\n\n const refs = await feature.fileAdapter.requestUpload({\n mode,\n targetDirectoryPath: \"/\",\n workspaceId\n });\n if (refs.length === 0) {\n return;\n }\n\n await feature.fileAdapter.refreshTree?.({\n depth: 1,\n paths: refs.map((ref) => ref.path),\n workspaceId\n });\n await submitReferences(refs, createInsertReferenceTarget(parentKind));\n },\n\n async openReference(reference: IssueManagerFileReference) {\n await feature.fileAdapter?.openReference?.(reference);\n },\n\n async removeContextRef(ref: IssueManagerContextRef) {\n try {\n await feature.backend.removeContextRef(\n ref.parentKind === \"task\"\n ? {\n contextRefId: ref.contextRefId,\n issueId: ref.issueId,\n parentKind: \"task\",\n taskId: ref.taskId,\n workspaceId\n }\n : {\n contextRefId: ref.contextRefId,\n issueId: ref.issueId,\n parentKind: \"issue\",\n workspaceId\n }\n );\n refreshDetails();\n } catch (error) {\n setNotice({\n kind: \"error\",\n message: resolveIssueManagerErrorMessage(error, copy)\n });\n }\n },\n\n async runTask(providerOverride?: string) {\n if (!issueDetail.value || !taskDetail.value) {\n return;\n }\n const provider =\n providerOverride?.trim() || nodeState.selectedAgentProvider.trim();\n if (!provider) {\n return;\n }\n if (provider !== nodeState.selectedAgentProvider) {\n updateNodeState((current) => ({\n ...current,\n selectedAgentProvider: provider\n }));\n }\n\n setIsRunningTask(true);\n let createdRun: IssueManagerRun | null = null;\n try {\n const currentUser = await Promise.resolve(\n feature.identityAdapter.currentUser()\n );\n createdRun = await feature.backend.createRun({\n agentProvider: provider,\n agentUserId: currentUser?.userId ?? undefined,\n issueId: issueDetail.value.issue.issueId,\n taskId: taskDetail.value.task.taskId,\n workspaceId\n });\n setNotice({\n kind: \"success\",\n message: copy.t(\"messages.runStarted\")\n });\n refreshDetails();\n const result = await feature.agentRunner.runTask({\n issue: issueDetail.value.issue,\n provider,\n run: createdRun,\n task: taskDetail.value.task,\n workspaceId\n });\n await feature.backend.completeRun({\n errorMessage: result.errorMessage,\n issueId: issueDetail.value.issue.issueId,\n outputs: result.outputs ?? [],\n runId: createdRun.runId,\n status: result.status,\n summary: result.summary,\n taskId: taskDetail.value.task.taskId,\n workspaceId\n });\n setNotice({\n kind: result.status === \"completed\" ? \"success\" : \"error\",\n message:\n result.status === \"completed\"\n ? copy.t(\"messages.runCompleted\")\n : copy.t(\"messages.runFailed\")\n });\n } catch (error) {\n const message = resolveIssueManagerErrorMessage(error, copy);\n if (createdRun && issueDetail.value && taskDetail.value) {\n try {\n await feature.backend.completeRun({\n errorMessage: message,\n issueId: issueDetail.value.issue.issueId,\n outputs: [],\n runId: createdRun.runId,\n status: \"failed\",\n summary: copy.t(\"run.failedSummaryFallback\"),\n taskId: taskDetail.value.task.taskId,\n workspaceId\n });\n } catch {\n // Keep the original failure visible without masking it.\n }\n }\n setNotice({\n kind: \"error\",\n message\n });\n } finally {\n setIsRunningTask(false);\n refreshDetails();\n }\n },\n\n async saveIssue() {\n const title = issueDraft.title.trim();\n if (!title) {\n return;\n }\n\n try {\n const content = normalizeIssueManagerContent(issueDraft.content);\n const savedIssue =\n issueEditorMode === \"create\"\n ? await feature.backend.createIssue({\n content,\n title,\n workspaceId\n })\n : await feature.backend.updateIssue({\n content,\n issueId: nodeState.selectedIssueId ?? \"\",\n title,\n workspaceId\n });\n await syncContentReferences({\n content,\n existingRefs:\n issueEditorMode === \"create\"\n ? []\n : (issueDetail.value?.contextRefs.filter(\n (ref) => ref.parentKind === \"issue\"\n ) ?? []),\n issueId: savedIssue.issueId,\n parentKind: \"issue\"\n });\n setIssueEditorModeState(\"read\");\n setNotice({\n kind: \"success\",\n message: copy.t(\"messages.issueSaved\")\n });\n updateNodeState((current) => ({\n ...current,\n issueDraftContent: null,\n issueDraftTitle: null,\n selectedIssueId: savedIssue.issueId\n }));\n refreshAll();\n } catch (error) {\n setNotice({\n kind: \"error\",\n message: resolveIssueManagerErrorMessage(error, copy)\n });\n }\n },\n\n async saveTask() {\n const selectedIssueId = nodeState.selectedIssueId;\n if (!selectedIssueId) {\n return;\n }\n const title = taskDraft.title.trim();\n if (!title) {\n return;\n }\n\n try {\n const content = normalizeIssueManagerContent(taskDraft.content);\n const savedTask =\n taskEditorMode === \"create\"\n ? await feature.backend.createTask({\n content,\n issueId: selectedIssueId,\n priority: taskDraft.priority,\n title,\n workspaceId\n })\n : await feature.backend.updateTask({\n content,\n issueId: selectedIssueId,\n priority: taskDraft.priority,\n taskId: nodeState.selectedTaskId ?? \"\",\n title,\n workspaceId\n });\n await syncContentReferences({\n content,\n existingRefs:\n taskEditorMode === \"create\"\n ? []\n : (taskDetail.value?.contextRefs.filter(\n (ref) => ref.parentKind === \"task\"\n ) ?? []),\n issueId: selectedIssueId,\n parentKind: \"task\",\n taskId: savedTask.taskId\n });\n setTaskEditorModeState(\"read\");\n setNotice({\n kind: \"success\",\n message: copy.t(\"messages.taskSaved\")\n });\n updateNodeState((current) => ({\n ...current,\n selectedTaskId: savedTask.taskId,\n taskDraftContent: null,\n taskDraftTitle: null\n }));\n refreshAll();\n } catch (error) {\n setNotice({\n kind: \"error\",\n message: resolveIssueManagerErrorMessage(error, copy)\n });\n }\n },\n\n async shareSelection() {\n const selectedIssueId = nodeState.selectedIssueId;\n if (!feature.shareAdapter?.createIssueLink || !selectedIssueId) {\n return;\n }\n\n try {\n const link = await feature.shareAdapter.createIssueLink({\n issueId: selectedIssueId,\n taskId: nodeState.selectedTaskId ?? undefined,\n workspaceId\n });\n if (\n typeof navigator === \"undefined\" ||\n !navigator.clipboard?.writeText\n ) {\n throw new Error(copy.t(\"messages.clipboardUnavailable\"));\n }\n await navigator.clipboard.writeText(link);\n setNotice({\n kind: \"success\",\n message: copy.t(\"messages.copiedShareLink\")\n });\n } catch (error) {\n setNotice({\n kind: \"error\",\n message: resolveIssueManagerErrorMessage(error, copy)\n });\n }\n },\n\n async submitReferenceSelection(refs: IssueManagerFileReference[]) {\n await submitReferences(refs);\n }\n };\n}\n","import type {\n IssueManagerIssueDetail,\n IssueManagerListIssuesResult,\n IssueManagerNodeState,\n IssueManagerPriority,\n IssueManagerTaskDetail\n} from \"../../contracts/index.ts\";\nimport { normalizeIssueManagerContent } from \"../../core/index.ts\";\nimport type { IssueManagerEditorMode } from \"./model.ts\";\nimport type { IssueDraft, TaskDraft } from \"./controllerTypes.ts\";\nimport {\n defaultTaskPriority,\n resolveIssueManagerSelectedIssueId,\n resolveIssueManagerSelectedTaskId\n} from \"./controllerUtils.ts\";\n\nexport function createIssueManagerIssueDraftFromNodeState(\n state:\n | Pick<IssueManagerNodeState, \"issueDraftContent\" | \"issueDraftTitle\">\n | null\n | undefined\n): IssueDraft {\n return {\n content: state?.issueDraftContent ?? \"\",\n title: state?.issueDraftTitle ?? \"\"\n };\n}\n\nexport function createIssueManagerTaskDraftFromNodeState(\n state:\n | Pick<IssueManagerNodeState, \"taskDraftContent\" | \"taskDraftTitle\">\n | null\n | undefined,\n priority: IssueManagerPriority = defaultTaskPriority\n): TaskDraft {\n return {\n content: state?.taskDraftContent ?? \"\",\n priority,\n title: state?.taskDraftTitle ?? \"\"\n };\n}\n\nexport function applyIssueManagerIssueSelection(\n current: IssueManagerNodeState,\n issueId: string | null\n): IssueManagerNodeState {\n return {\n ...current,\n selectedIssueId: issueId,\n selectedTaskId: null\n };\n}\n\nexport function applyIssueManagerTaskSelection(\n current: IssueManagerNodeState,\n taskId: string | null\n): IssueManagerNodeState {\n return {\n ...current,\n selectedTaskId: taskId\n };\n}\n\nexport function applyIssueManagerIssueListResultToNodeState(\n current: IssueManagerNodeState,\n result: Pick<IssueManagerListIssuesResult, \"issues\" | \"nextPageToken\">\n): IssueManagerNodeState {\n return {\n ...current,\n issueListNextPageToken: result.nextPageToken ?? null,\n selectedIssueId: resolveIssueManagerSelectedIssueId(\n current.selectedIssueId,\n result.issues\n )\n };\n}\n\nexport function applyIssueManagerIssueDetailResultToNodeState(\n current: IssueManagerNodeState,\n detail: Pick<IssueManagerIssueDetail, \"tasks\">\n): IssueManagerNodeState {\n return {\n ...current,\n selectedTaskId: resolveIssueManagerSelectedTaskId(\n current.selectedTaskId,\n detail.tasks\n )\n };\n}\n\nexport function syncIssueManagerIssueDraftFromDetail(\n current: IssueDraft,\n detail: IssueManagerIssueDetail | null,\n editorMode: IssueManagerEditorMode\n): IssueDraft {\n if (editorMode !== \"read\") {\n return current;\n }\n return {\n content: normalizeIssueManagerContent(detail?.issue.content ?? \"\"),\n title: detail?.issue.title ?? \"\"\n };\n}\n\nexport function syncIssueManagerTaskDraftFromDetail(\n current: TaskDraft,\n detail: IssueManagerTaskDetail | null,\n editorMode: IssueManagerEditorMode\n): TaskDraft {\n if (editorMode !== \"read\") {\n return current;\n }\n return {\n content: normalizeIssueManagerContent(detail?.task.content ?? \"\"),\n priority: detail?.task.priority ?? defaultTaskPriority,\n title: detail?.task.title ?? \"\"\n };\n}\n\nexport function applyIssueManagerIssueEditorModeToNodeState(\n current: IssueManagerNodeState,\n editorMode: IssueManagerEditorMode\n): IssueManagerNodeState {\n if (editorMode === \"create\") {\n return current;\n }\n return {\n ...current,\n issueDraftContent: null,\n issueDraftTitle: null\n };\n}\n\nexport function applyIssueManagerTaskEditorModeToNodeState(\n current: IssueManagerNodeState,\n editorMode: IssueManagerEditorMode\n): IssueManagerNodeState {\n if (editorMode === \"create\") {\n return current;\n }\n return {\n ...current,\n taskDraftContent: null,\n taskDraftTitle: null\n };\n}\n\nexport function persistIssueManagerIssueDraftContent(\n current: IssueManagerNodeState,\n editorMode: IssueManagerEditorMode,\n content: string\n): IssueManagerNodeState {\n if (editorMode !== \"create\") {\n return current;\n }\n return {\n ...current,\n issueDraftContent: content\n };\n}\n\nexport function persistIssueManagerIssueDraftTitle(\n current: IssueManagerNodeState,\n editorMode: IssueManagerEditorMode,\n title: string\n): IssueManagerNodeState {\n if (editorMode !== \"create\") {\n return current;\n }\n return {\n ...current,\n issueDraftTitle: title\n };\n}\n\nexport function persistIssueManagerTaskDraftContent(\n current: IssueManagerNodeState,\n editorMode: IssueManagerEditorMode,\n content: string\n): IssueManagerNodeState {\n if (editorMode !== \"create\") {\n return current;\n }\n return {\n ...current,\n taskDraftContent: content\n };\n}\n\nexport function persistIssueManagerTaskDraftTitle(\n current: IssueManagerNodeState,\n editorMode: IssueManagerEditorMode,\n title: string\n): IssueManagerNodeState {\n if (editorMode !== \"create\") {\n return current;\n }\n return {\n ...current,\n taskDraftTitle: title\n };\n}\n","import { useEffect, useMemo, useState, type ReactNode } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport {\n Badge,\n Button,\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n DirectoryIcon,\n FileIcon,\n Input,\n LoadingIcon,\n ScrollArea,\n SearchIcon,\n UploadIcon,\n cn\n} from \"@nextop-os/ui-system\";\nimport type {\n IssueManagerFileAdapter,\n IssueManagerFileReference\n} from \"../../contracts/index.ts\";\nimport type { IssueManagerI18nRuntime } from \"../../i18n/issueManagerI18n.ts\";\nimport {\n parentDirectoryPath,\n uniqueIssueManagerFileReferences\n} from \"./model.ts\";\n\ninterface IssueManagerReferencePickerProps {\n copy: IssueManagerI18nRuntime;\n fileAdapter?: IssueManagerFileAdapter;\n onClose: () => void;\n onConfirm: (refs: IssueManagerFileReference[]) => void;\n open: boolean;\n workspaceId: string;\n}\n\nconst defaultDirectoryPath = \"/\";\n\nexport function IssueManagerReferencePicker({\n copy,\n fileAdapter,\n onClose,\n onConfirm,\n open,\n workspaceId\n}: IssueManagerReferencePickerProps) {\n const [currentPath, setCurrentPath] = useState(defaultDirectoryPath);\n const [searchQuery, setSearchQuery] = useState(\"\");\n const [entries, setEntries] = useState<IssueManagerFileReference[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [selectedRefs, setSelectedRefs] = useState<IssueManagerFileReference[]>(\n []\n );\n\n const supportsSearch = hasFileAdapterMethod(fileAdapter, \"searchReferences\");\n const supportsBrowse = hasFileAdapterMethod(fileAdapter, \"listDirectory\");\n const mode =\n searchQuery.trim().length > 0 && supportsSearch ? \"search\" : \"browse\";\n const canUpload = hasFileAdapterMethod(fileAdapter, \"requestUpload\");\n const parentPath = useMemo(\n () => parentDirectoryPath(currentPath),\n [currentPath]\n );\n\n useEffect(() => {\n if (!open) {\n return;\n }\n\n setSearchQuery(\"\");\n setCurrentPath(defaultDirectoryPath);\n setSelectedRefs([]);\n }, [open]);\n\n useEffect(() => {\n if (!open || !fileAdapter) {\n return;\n }\n\n let canceled = false;\n const load = async () => {\n setIsLoading(true);\n try {\n if (mode === \"search\" && fileAdapter.searchReferences) {\n const refs = await fileAdapter.searchReferences({\n query: searchQuery.trim(),\n workspaceId\n });\n if (!canceled) {\n setEntries(uniqueIssueManagerFileReferences(refs));\n }\n return;\n }\n\n if (mode === \"browse\" && fileAdapter.listDirectory) {\n const listing = await fileAdapter.listDirectory({\n path: currentPath,\n workspaceId\n });\n if (!canceled) {\n setCurrentPath(listing.directoryPath || defaultDirectoryPath);\n setEntries(uniqueIssueManagerFileReferences(listing.entries));\n }\n return;\n }\n\n if (fileAdapter.requestReferences) {\n const refs = await fileAdapter.requestReferences({ workspaceId });\n if (!canceled) {\n onConfirm(uniqueIssueManagerFileReferences(refs));\n onClose();\n }\n return;\n }\n\n if (!canceled) {\n setEntries([]);\n }\n } finally {\n if (!canceled) {\n setIsLoading(false);\n }\n }\n };\n\n void load();\n return () => {\n canceled = true;\n };\n }, [\n currentPath,\n fileAdapter,\n mode,\n onClose,\n onConfirm,\n open,\n searchQuery,\n workspaceId\n ]);\n\n if (!open) {\n return null;\n }\n\n const toggleRef = (ref: IssueManagerFileReference) => {\n setSelectedRefs((current) => {\n const existing = current.some((item) => item.path === ref.path);\n return existing\n ? current.filter((item) => item.path !== ref.path)\n : uniqueIssueManagerFileReferences([...current, ref]);\n });\n };\n\n const upload = async (mode: \"files\" | \"folder\") => {\n if (!fileAdapter?.requestUpload) {\n return;\n }\n const refs = await fileAdapter.requestUpload({\n mode,\n targetDirectoryPath: currentPath,\n workspaceId\n });\n setSelectedRefs((current) =>\n uniqueIssueManagerFileReferences([...current, ...refs])\n );\n };\n\n const dialog = (\n <div\n className=\"fixed inset-0 grid place-items-center bg-black/26 px-4 backdrop-blur-sm\"\n style={{ zIndex: \"var(--z-panel)\" }}\n onClick={onClose}\n >\n <Card\n aria-modal=\"true\"\n className=\"w-full max-w-4xl border-border/70 bg-popover/96 shadow-[var(--workbench-window-elevation)]\"\n role=\"dialog\"\n onClick={(event) => event.stopPropagation()}\n >\n <CardHeader className=\"gap-3 border-b border-border/70\">\n <div className=\"flex flex-wrap items-start justify-between gap-3\">\n <div className=\"space-y-1\">\n <CardTitle>{copy.t(\"referencePicker.title\")}</CardTitle>\n <CardDescription>\n {copy.t(\"referencePicker.selectedCount\", {\n count: selectedRefs.length\n })}\n </CardDescription>\n </div>\n <div className=\"flex items-center gap-2\">\n <Button type=\"button\" variant=\"outline\" onClick={onClose}>\n {copy.t(\"actions.cancel\")}\n </Button>\n <Button\n disabled={selectedRefs.length === 0}\n type=\"button\"\n onClick={() => onConfirm(selectedRefs)}\n >\n {copy.t(\"referencePicker.confirm\")}\n </Button>\n </div>\n </div>\n <div className=\"flex flex-wrap items-center gap-2\">\n <div className=\"relative min-w-[16rem] flex-1\">\n <SearchIcon className=\"pointer-events-none absolute top-1/2 left-2.5 size-3.5 -translate-y-1/2 text-muted-foreground\" />\n <Input\n className=\"pl-8\"\n placeholder={copy.t(\"referencePicker.searchPlaceholder\")}\n value={searchQuery}\n onChange={(event) => setSearchQuery(event.target.value)}\n />\n </div>\n {mode === \"browse\" ? (\n <>\n <Badge className=\"border-border/70 bg-background/80 text-muted-foreground\">\n {currentPath}\n </Badge>\n {parentPath ? (\n <Button\n size=\"sm\"\n type=\"button\"\n variant=\"outline\"\n onClick={() => setCurrentPath(parentPath)}\n >\n ..\n </Button>\n ) : null}\n </>\n ) : null}\n {canUpload ? (\n <>\n <Button\n size=\"sm\"\n type=\"button\"\n variant=\"outline\"\n onClick={() => {\n void upload(\"files\");\n }}\n >\n <UploadIcon className=\"size-3.5\" />\n {copy.t(\"actions.uploadFiles\")}\n </Button>\n <Button\n size=\"sm\"\n type=\"button\"\n variant=\"outline\"\n onClick={() => {\n void upload(\"folder\");\n }}\n >\n <UploadIcon className=\"size-3.5\" />\n {copy.t(\"actions.uploadFolder\")}\n </Button>\n </>\n ) : null}\n </div>\n </CardHeader>\n <CardContent className=\"grid min-h-[26rem] gap-4 pt-4 lg:grid-cols-[minmax(0,1fr)_18rem]\">\n <ScrollArea className=\"min-h-0 rounded-xl border border-border/70 bg-background/72\">\n <div className=\"flex flex-col p-2\">\n {isLoading ? (\n <PickerFeedback>\n <LoadingIcon className=\"size-4 animate-spin\" />\n </PickerFeedback>\n ) : entries.length === 0 ? (\n <PickerFeedback>\n {mode === \"search\"\n ? copy.t(\"referencePicker.emptySearch\")\n : copy.t(\"referencePicker.emptyDirectory\")}\n </PickerFeedback>\n ) : (\n entries.map((entry) => {\n const selected = selectedRefs.some(\n (item) => item.path === entry.path\n );\n const isFolder = entry.kind === \"folder\";\n return (\n <div\n className={cn(\n \"grid grid-cols-[minmax(0,1fr)_auto] items-center gap-2 rounded-lg px-2 py-1.5\",\n selected && \"bg-primary/[0.08]\"\n )}\n key={entry.path}\n >\n <button\n className=\"flex min-w-0 items-center gap-2 rounded-md px-2 py-1 text-left text-sm text-foreground hover:bg-accent/75\"\n type=\"button\"\n onClick={() => {\n if (isFolder && mode === \"browse\" && supportsBrowse) {\n setCurrentPath(entry.path);\n return;\n }\n toggleRef(entry);\n }}\n >\n {isFolder ? (\n <DirectoryIcon className=\"size-4 text-muted-foreground\" />\n ) : (\n <FileIcon className=\"size-4 text-muted-foreground\" />\n )}\n <span className=\"truncate\">\n {entry.displayName ||\n entry.path.split(\"/\").filter(Boolean).at(-1) ||\n entry.path}\n </span>\n </button>\n <Button\n size=\"xs\"\n type=\"button\"\n variant={selected ? \"secondary\" : \"outline\"}\n onClick={() => toggleRef(entry)}\n >\n {selected ? \"✓\" : \"+\"}\n </Button>\n </div>\n );\n })\n )}\n </div>\n </ScrollArea>\n <aside className=\"flex min-h-0 flex-col gap-3 rounded-xl border border-border/70 bg-panel/72 p-3\">\n <div className=\"space-y-1\">\n <p className=\"text-sm font-medium text-foreground\">\n {copy.t(\"referencePicker.confirm\")}\n </p>\n <p className=\"text-xs text-muted-foreground\">\n {copy.t(\"referencePicker.selectedCount\", {\n count: selectedRefs.length\n })}\n </p>\n </div>\n <ScrollArea className=\"min-h-0 flex-1 rounded-lg border border-border/70 bg-background/75\">\n <div className=\"flex flex-col gap-1.5 p-2\">\n {selectedRefs.length === 0 ? (\n <PickerFeedback>\n {copy.t(\"referencePicker.emptySearch\")}\n </PickerFeedback>\n ) : (\n selectedRefs.map((ref) => (\n <div\n className=\"flex items-center justify-between gap-2 rounded-md border border-border/60 bg-background/92 px-2.5 py-2 text-sm\"\n key={ref.path}\n >\n <div className=\"min-w-0\">\n <p className=\"truncate font-medium text-foreground\">\n {ref.displayName ||\n ref.path.split(\"/\").filter(Boolean).at(-1) ||\n ref.path}\n </p>\n <p className=\"truncate text-xs text-muted-foreground\">\n {ref.path}\n </p>\n </div>\n <Button\n size=\"icon-xs\"\n type=\"button\"\n variant=\"ghost\"\n onClick={() =>\n setSelectedRefs((current) =>\n current.filter((item) => item.path !== ref.path)\n )\n }\n >\n x\n </Button>\n </div>\n ))\n )}\n </div>\n </ScrollArea>\n </aside>\n </CardContent>\n </Card>\n </div>\n );\n\n if (typeof document === \"undefined\") {\n return dialog;\n }\n return createPortal(dialog, document.body);\n}\n\nfunction hasFileAdapterMethod(\n fileAdapter: IssueManagerFileAdapter | undefined,\n methodName: \"listDirectory\" | \"requestUpload\" | \"searchReferences\"\n): boolean {\n return typeof Reflect.get(fileAdapter ?? {}, methodName) === \"function\";\n}\n\nfunction PickerFeedback({ children }: { children: ReactNode }) {\n return (\n <div className=\"grid min-h-[10rem] place-items-center px-4 text-center text-sm text-muted-foreground\">\n {children}\n </div>\n );\n}\n","import type {\n IssueManagerFileReference,\n IssueManagerPriority,\n IssueManagerStatus\n} from \"../../contracts/index.ts\";\nimport type { IssueManagerI18nRuntime } from \"../../i18n/issueManagerI18n.ts\";\n\nexport type IssueManagerEditorMode = \"read\" | \"create\" | \"edit\";\n\nexport type IssueManagerReferenceTarget =\n | {\n mode: \"attach\";\n parentKind: \"issue\";\n }\n | {\n mode: \"attach\";\n parentKind: \"task\";\n taskId: string;\n }\n | {\n mode: \"insert\";\n parentKind: \"issue\";\n }\n | {\n mode: \"insert\";\n parentKind: \"task\";\n taskId: string;\n };\n\nexport function createIssueManagerDate(\n value: number | null | undefined\n): Date | null {\n if (!value || !Number.isFinite(value)) {\n return null;\n }\n\n const normalized = value < 1_000_000_000_000 ? value * 1000 : value;\n const date = new Date(normalized);\n return Number.isNaN(date.getTime()) ? null : date;\n}\n\nexport function formatIssueManagerTimestamp(\n value: number | null | undefined\n): string | null {\n return createIssueManagerDate(value)?.toLocaleString() ?? null;\n}\n\nexport function formatIssueManagerDate(\n value: number | null | undefined\n): string {\n return createIssueManagerDate(value)?.toLocaleDateString() ?? \"\";\n}\n\nexport function resolveIssueManagerStatusLabel(\n copy: IssueManagerI18nRuntime,\n status: IssueManagerStatus | null | undefined\n): string {\n switch (status) {\n case \"not_started\":\n return copy.t(\"status.notStarted\");\n case \"running\":\n return copy.t(\"status.running\");\n case \"pending_acceptance\":\n return copy.t(\"status.pendingAcceptance\");\n case \"completed\":\n return copy.t(\"status.completed\");\n case \"failed\":\n return copy.t(\"status.failed\");\n case \"canceled\":\n return copy.t(\"status.canceled\");\n default:\n return copy.t(\"status.unknown\");\n }\n}\n\nexport function resolveIssueManagerPriorityLabel(\n copy: IssueManagerI18nRuntime,\n priority: IssueManagerPriority | null | undefined\n): string {\n switch (priority) {\n case \"high\":\n return copy.t(\"priority.high\");\n case \"low\":\n return copy.t(\"priority.low\");\n default:\n return copy.t(\"priority.medium\");\n }\n}\n\nexport function uniqueIssueManagerFileReferences(\n refs: readonly IssueManagerFileReference[]\n): IssueManagerFileReference[] {\n const unique = new Map<string, IssueManagerFileReference>();\n for (const ref of refs) {\n const normalizedPath = ref.path.trim();\n if (!normalizedPath || unique.has(normalizedPath)) {\n continue;\n }\n unique.set(normalizedPath, {\n displayName: ref.displayName?.trim() || undefined,\n kind: ref.kind === \"folder\" ? \"folder\" : \"file\",\n path: normalizedPath\n });\n }\n return [...unique.values()];\n}\n\nexport function parentDirectoryPath(path: string): string | null {\n const trimmed = path.trim();\n if (!trimmed || trimmed === \"/\") {\n return null;\n }\n\n const normalized =\n trimmed.endsWith(\"/\") && trimmed.length > 1\n ? trimmed.slice(0, -1)\n : trimmed;\n const index = normalized.lastIndexOf(\"/\");\n if (index <= 0) {\n return \"/\";\n }\n return normalized.slice(0, index) || \"/\";\n}\n","import {\n useEffect,\n useRef,\n useState,\n type CSSProperties,\n type Dispatch,\n type JSX,\n type KeyboardEvent,\n type PointerEvent,\n type RefObject,\n type SetStateAction\n} from \"react\";\nimport {\n ArrowLeftIcon,\n ArrowRightIcon,\n Badge,\n Button,\n CloseIcon,\n FileCreateIcon,\n Input,\n RefreshIcon,\n ScrollArea,\n SearchIcon,\n cn\n} from \"@nextop-os/ui-system\";\nimport type {\n IssueManagerIssueSummary,\n IssueManagerTaskSummary\n} from \"../../contracts/index.ts\";\nimport type { IssueManagerI18nRuntime } from \"../../i18n/issueManagerI18n.ts\";\nimport type { IssueManagerController } from \"./useIssueManagerController.ts\";\nimport {\n formatIssueManagerDate,\n resolveIssueManagerStatusLabel\n} from \"./model.ts\";\nimport {\n IssueManagerEmptyIllustration,\n IssueManagerIssuePane\n} from \"./IssueManagerPanels.tsx\";\nimport { IssueManagerRunActionTrigger } from \"./IssueManagerPanelParts.tsx\";\nimport { IssueManagerTaskComposerPane } from \"./IssueManagerTaskComposerPane.tsx\";\nimport { IssueManagerTaskDrawer } from \"./IssueManagerTaskDrawer.tsx\";\n\nconst issueStatusFilters = [\n \"all\",\n \"not_started\",\n \"running\",\n \"pending_acceptance\",\n \"completed\",\n \"failed\",\n \"canceled\"\n] as const;\n\nconst sidebarDefaultWidth = 352;\nconst sidebarMinWidth = 248;\nconst sidebarMaxWidth = 520;\nconst mainMinWidth = 460;\n\ninterface SidebarResizeState {\n maxWidth: number;\n pointerId: number;\n startClientX: number;\n startWidth: number;\n}\n\nexport interface IssueManagerShellProps {\n controller: IssueManagerController;\n onClearNotice: () => void;\n onCloseTaskDrawer: () => void;\n onDismissIssueCreate: () => void;\n selectedIssue: IssueManagerIssueSummary | null;\n selectedTask: IssueManagerTaskSummary | null;\n}\n\nexport function IssueManagerShell({\n controller,\n onClearNotice,\n onCloseTaskDrawer,\n onDismissIssueCreate,\n selectedIssue,\n selectedTask\n}: IssueManagerShellProps): JSX.Element {\n const isIssueEditing = controller.issueEditorMode !== \"read\";\n const isTaskCreating =\n !isIssueEditing && controller.taskEditorMode === \"create\";\n const isTaskDrawerOpen =\n !isIssueEditing &&\n !isTaskCreating &&\n (controller.taskEditorMode === \"edit\" || selectedTask !== null);\n const layoutRef = useRef<HTMLDivElement | null>(null);\n const resizeRef = useRef<SidebarResizeState | null>(null);\n const [sidebarWidth, setSidebarWidth] = useState(sidebarDefaultWidth);\n\n useEffect(() => {\n const clamp = () => {\n const width = layoutRef.current?.getBoundingClientRect().width ?? 0;\n if (!width) {\n return;\n }\n setSidebarWidth((current) => clampSidebarWidth(current, width));\n };\n\n const layout = layoutRef.current;\n const observer =\n layout && typeof ResizeObserver !== \"undefined\"\n ? new ResizeObserver(clamp)\n : null;\n if (observer && layout) {\n observer.observe(layout);\n }\n window.addEventListener(\"resize\", clamp);\n return () => {\n observer?.disconnect();\n window.removeEventListener(\"resize\", clamp);\n };\n }, []);\n\n const layoutStyle = {\n \"--issue-manager-sidebar-width\": `${sidebarWidth}px`\n } as CSSProperties;\n\n return (\n <>\n {controller.notice ? (\n <IssueManagerNoticeBanner\n kind={controller.notice.kind}\n label={controller.notice.message}\n onClear={onClearNotice}\n copy={controller.copy}\n />\n ) : null}\n\n <div\n className=\"grid min-h-0 flex-1 grid-cols-[var(--issue-manager-sidebar-width)_12px_minmax(0,1fr)] overflow-hidden bg-transparent\"\n ref={layoutRef}\n style={layoutStyle}\n >\n <IssueManagerSidebar controller={controller} />\n <div\n aria-label={controller.copy.t(\"labels.resizeIssueList\")}\n aria-orientation=\"vertical\"\n aria-valuemax={sidebarMaxWidth}\n aria-valuemin={sidebarMinWidth}\n aria-valuenow={sidebarWidth}\n className=\"group flex cursor-col-resize items-center justify-center\"\n role=\"separator\"\n tabIndex={0}\n onKeyDown={(event) =>\n handleSidebarResizeKeyDown(event, layoutRef, setSidebarWidth)\n }\n onPointerCancel={(event) =>\n handleSidebarResizePointerEnd(event, resizeRef)\n }\n onPointerDown={(event) =>\n handleSidebarResizePointerDown(\n event,\n layoutRef,\n resizeRef,\n sidebarWidth,\n setSidebarWidth\n )\n }\n onPointerMove={(event) =>\n handleSidebarResizePointerMove(event, resizeRef, setSidebarWidth)\n }\n onPointerUp={(event) =>\n handleSidebarResizePointerEnd(event, resizeRef)\n }\n >\n <span className=\"h-full w-px rounded-full bg-border/70 transition-colors group-hover:bg-primary/40\" />\n </div>\n <div className=\"relative min-h-0 overflow-hidden bg-transparent\">\n <div className=\"flex h-full min-h-0 flex-col\">\n <div className=\"min-h-0 flex-1 overflow-hidden\">\n {isIssueEditing ? (\n <IssueManagerIssuePane\n controller={controller}\n selectedIssue={selectedIssue}\n onDismissCreate={onDismissIssueCreate}\n />\n ) : 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 <div className=\"flex h-full min-h-0 items-center justify-center px-10 py-10\">\n <div className=\"flex max-w-2xl flex-col items-center gap-5 text-center\">\n <IssueManagerEmptyIllustration />\n <div className=\"space-y-3\">\n <h2 className=\"text-[2.05rem] font-semibold tracking-tight text-foreground\">\n {controller.copy.t(\"messages.noIssues\")}\n </h2>\n <p className=\"max-w-xl text-[1.15rem] leading-8 text-muted-foreground\">\n {controller.copy.t(\"emptyState\")}\n </p>\n </div>\n <Button\n className=\"h-12 rounded-xl bg-foreground px-6 text-base font-semibold text-background hover:bg-foreground/92\"\n size=\"lg\"\n type=\"button\"\n onClick={() => controller.setIssueEditorMode(\"create\")}\n >\n <FileCreateIcon size={18} />\n {controller.copy.t(\"actions.createIssue\")}\n </Button>\n </div>\n </div>\n )}\n </div>\n <IssueManagerBottomBar\n controller={controller}\n selectedIssue={selectedIssue}\n selectedTask={selectedTask}\n />\n </div>\n\n {isTaskDrawerOpen ? (\n <IssueManagerTaskDrawer\n controller={controller}\n selectedIssue={selectedIssue}\n selectedTask={selectedTask}\n onClose={onCloseTaskDrawer}\n />\n ) : null}\n </div>\n </div>\n </>\n );\n}\n\nfunction IssueManagerNoticeBanner({\n copy,\n kind,\n label,\n onClear\n}: {\n copy: IssueManagerI18nRuntime;\n kind: \"error\" | \"success\";\n label: string;\n onClear: () => void;\n}): JSX.Element {\n return (\n <div\n className={cn(\n \"border-b px-4 py-2.5 text-sm\",\n kind === \"error\"\n ? \"border-destructive/20 bg-destructive/8 text-destructive\"\n : \"border-primary/15 bg-primary/[0.06] text-foreground\"\n )}\n >\n <div className=\"flex items-center justify-between gap-3\">\n <span>{label}</span>\n <Button\n aria-label={copy.t(\"actions.cancel\")}\n size=\"icon-xs\"\n type=\"button\"\n variant=\"ghost\"\n onClick={onClear}\n >\n <CloseIcon size={14} />\n </Button>\n </div>\n </div>\n );\n}\n\nfunction IssueManagerSidebar({\n controller\n}: {\n controller: IssueManagerController;\n}): JSX.Element {\n const copy = controller.copy;\n const counts = buildIssueManagerStatusCounts(controller.issues.value);\n const showRefreshAction =\n controller.issues.isLoading || controller.issues.error !== null;\n const tabsViewportRef = useRef<HTMLDivElement | null>(null);\n const [canScrollTabsLeft, setCanScrollTabsLeft] = useState(false);\n const [canScrollTabsRight, setCanScrollTabsRight] = useState(false);\n\n useEffect(() => {\n const viewport = tabsViewportRef.current;\n if (!viewport) {\n return;\n }\n\n const updateScrollState = () => {\n const maxScrollLeft = viewport.scrollWidth - viewport.clientWidth;\n setCanScrollTabsLeft(viewport.scrollLeft > 4);\n setCanScrollTabsRight(\n maxScrollLeft > 4 && viewport.scrollLeft < maxScrollLeft - 4\n );\n };\n\n updateScrollState();\n viewport.addEventListener(\"scroll\", updateScrollState, { passive: true });\n const observer =\n typeof ResizeObserver !== \"undefined\"\n ? new ResizeObserver(updateScrollState)\n : null;\n observer?.observe(viewport);\n if (viewport.parentElement) {\n observer?.observe(viewport.parentElement);\n }\n\n return () => {\n viewport.removeEventListener(\"scroll\", updateScrollState);\n observer?.disconnect();\n };\n }, [controller.issues.value.length]);\n\n return (\n <aside className=\"flex min-h-0 flex-col border-r border-border/70 bg-transparent\">\n <div className=\"border-b border-border/70 px-4 py-4\">\n <div className=\"flex items-center gap-3\">\n <div className=\"relative flex-1\">\n <SearchIcon className=\"pointer-events-none absolute top-1/2 left-3 -translate-y-1/2 text-muted-foreground\" />\n <Input\n className=\"h-8 rounded-lg border-0 bg-muted/45 pr-3 pl-9 text-[14px] shadow-none placeholder:text-muted-foreground\"\n placeholder={copy.t(\"labels.searchIssues\")}\n value={controller.nodeState.issueSearchQuery}\n onChange={(event) =>\n controller.setIssueSearchQuery(event.target.value)\n }\n />\n </div>\n <Button\n className=\"h-8 rounded-lg border-0 bg-secondary px-3 text-[13px] font-semibold text-foreground shadow-none hover:bg-accent/35\"\n size=\"sm\"\n type=\"button\"\n variant=\"secondary\"\n onClick={() => controller.setIssueEditorMode(\"create\")}\n >\n <FileCreateIcon size={16} />\n {copy.t(\"actions.createIssue\")}\n </Button>\n </div>\n </div>\n\n <div className=\"relative border-b border-border/70 px-4 pt-3\">\n {canScrollTabsLeft ? (\n <Button\n aria-label={copy.t(\"labels.scrollStatusTabsLeft\")}\n className=\"absolute top-1/2 left-4 z-10 h-6 w-6 -translate-y-1/2 rounded-full border-0 bg-background/96 p-0 shadow-sm\"\n size=\"icon-xs\"\n type=\"button\"\n variant=\"ghost\"\n onClick={() => scrollIssueManagerStatusTabs(tabsViewportRef, -120)}\n >\n <ArrowLeftIcon size={14} />\n </Button>\n ) : null}\n <div\n className={cn(\n \"flex h-8 items-center gap-[14px] overflow-x-auto pb-2 [scrollbar-width:none] [&::-webkit-scrollbar]:hidden\",\n canScrollTabsLeft ? \"pl-8\" : \"\",\n canScrollTabsRight ? \"pr-8\" : \"\"\n )}\n ref={tabsViewportRef}\n >\n {issueStatusFilters.map((status) => {\n const isActive = controller.nodeState.issueStatusFilter === status;\n return (\n <button\n className={cn(\n \"flex h-6 shrink-0 items-center gap-1.5 border-b-2 px-0 pb-2 text-[13px] font-semibold transition-colors\",\n isActive\n ? \"border-primary text-primary\"\n : \"border-transparent text-muted-foreground hover:text-foreground\"\n )}\n key={status}\n type=\"button\"\n onClick={() => controller.setIssueStatusFilter(status)}\n >\n <span>\n {status === \"all\"\n ? copy.t(\"labels.allStatus\")\n : resolveIssueManagerStatusLabel(copy, status)}\n </span>\n <span className=\"text-[12px] text-muted-foreground/80\">\n {counts[status] ?? 0}\n </span>\n </button>\n );\n })}\n </div>\n {canScrollTabsRight ? (\n <Button\n aria-label={copy.t(\"labels.scrollStatusTabsRight\")}\n className=\"absolute top-1/2 right-4 z-10 h-6 w-6 -translate-y-1/2 rounded-full border-0 bg-background/96 p-0 shadow-sm\"\n size=\"icon-xs\"\n type=\"button\"\n variant=\"ghost\"\n onClick={() => scrollIssueManagerStatusTabs(tabsViewportRef, 120)}\n >\n <ArrowRightIcon size={14} />\n </Button>\n ) : null}\n </div>\n\n <ScrollArea className=\"min-h-0 flex-1\">\n <div className=\"flex min-h-full flex-col px-0 py-0\">\n {controller.issues.isLoading &&\n controller.issues.value.length === 0 ? (\n <IssueManagerSidebarLoadingState />\n ) : controller.issues.error ? (\n <IssueManagerSidebarEmptyState\n body={controller.issues.error}\n title={copy.t(\"messages.noIssues\")}\n tone=\"destructive\"\n />\n ) : controller.issues.value.length === 0 ? (\n <IssueManagerSidebarEmptyState\n body={copy.t(\"messages.noIssuesForFilterBody\")}\n title={copy.t(\"messages.noIssuesForFilterTitle\")}\n />\n ) : (\n <div className=\"flex flex-col gap-2.5 px-4 pt-1.5 pb-4\">\n {controller.issues.value.map((issue) => (\n <IssueManagerSidebarItem\n copy={copy}\n issue={issue}\n key={issue.issueId}\n selected={\n controller.nodeState.selectedIssueId === issue.issueId\n }\n onSelect={controller.selectIssue}\n />\n ))}\n </div>\n )}\n </div>\n </ScrollArea>\n\n {showRefreshAction ? (\n <div className=\"border-t border-border/70 px-6 py-4\">\n <Button\n className=\"w-full justify-center\"\n size=\"sm\"\n type=\"button\"\n variant=\"ghost\"\n onClick={controller.refreshAll}\n >\n <RefreshIcon size={14} />\n {copy.t(\"actions.refresh\")}\n </Button>\n </div>\n ) : null}\n </aside>\n );\n}\n\nfunction IssueManagerBottomBar({\n controller,\n selectedIssue,\n selectedTask\n}: {\n controller: IssueManagerController;\n selectedIssue: IssueManagerIssueSummary | null;\n selectedTask: IssueManagerTaskSummary | null;\n}): JSX.Element | null {\n const copy = controller.copy;\n if (\n !selectedIssue ||\n controller.issueEditorMode !== \"read\" ||\n controller.taskEditorMode !== \"read\"\n ) {\n return null;\n }\n\n return (\n <div className=\"border-t border-border/70 bg-transparent px-6 py-4 backdrop-blur\">\n <div className=\"flex items-center justify-end gap-3\">\n <IssueManagerRunActionTrigger\n controller={controller}\n disabled={!selectedTask}\n triggerClassName=\"min-w-[14rem] rounded-xl border-border/70 bg-secondary/90 px-4 py-2\"\n />\n <Button\n disabled={!selectedIssue}\n className=\"rounded-xl bg-foreground px-4 text-background hover:bg-foreground/92\"\n size=\"sm\"\n type=\"button\"\n onClick={() => {\n void controller.shareSelection();\n }}\n >\n {copy.t(\"actions.inviteCollaborator\")}\n </Button>\n </div>\n </div>\n );\n}\n\nfunction IssueManagerSidebarItem({\n copy,\n issue,\n onSelect,\n selected\n}: {\n copy: IssueManagerI18nRuntime;\n issue: IssueManagerIssueSummary;\n onSelect: (issueId: string | null) => void;\n selected: boolean;\n}): JSX.Element {\n return (\n <button\n className={cn(\n \"w-full rounded-lg border px-3.5 py-3.5 text-left transition-colors\",\n selected\n ? \"border-border/90 bg-background-fronted\"\n : \"border-border/80 bg-transparent hover:bg-accent/18\"\n )}\n type=\"button\"\n onClick={() => onSelect(issue.issueId)}\n >\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"min-w-0 flex-1 space-y-2\">\n <p className=\"text-[12px] leading-[1.55] text-muted-foreground\">\n {formatSidebarTimestamp(issue.updatedAtUnix ?? issue.createdAtUnix)}\n </p>\n <p className=\"line-clamp-4 text-[14px] font-semibold leading-[1.35rem] text-foreground\">\n {issue.title}\n </p>\n </div>\n <Badge className=\"rounded-full border-transparent bg-muted px-2 py-1 text-[11px] text-muted-foreground\">\n {resolveIssueManagerStatusLabel(copy, issue.status)}\n </Badge>\n </div>\n <div className=\"mt-2 text-[12px] leading-[1.55] text-muted-foreground\">\n {copy.t(\"labels.taskCount\", { count: issue.taskCount ?? 0 })}\n </div>\n </button>\n );\n}\n\nfunction IssueManagerSidebarLoadingState(): JSX.Element {\n return (\n <div className=\"grid gap-2.5 px-4 pt-1.5 pb-4\" aria-hidden=\"true\">\n {Array.from({ length: 4 }, (_, index) => (\n <div className=\"rounded-lg bg-transparent px-3.5 py-3.5\" key={index}>\n <div className=\"h-3.5 w-20 rounded-full bg-muted\" />\n <div className=\"mt-3 h-4 w-4/5 rounded-full bg-muted\" />\n <div className=\"mt-4 h-3.5 w-24 rounded-full bg-muted\" />\n </div>\n ))}\n </div>\n );\n}\n\nfunction IssueManagerSidebarEmptyState({\n body,\n title,\n tone = \"default\"\n}: {\n body: string;\n title: string;\n tone?: \"default\" | \"destructive\";\n}): JSX.Element {\n return (\n <div className=\"relative flex min-h-[240px] flex-1 flex-col items-center justify-center gap-1.5 overflow-hidden px-6 py-8 text-center\">\n <div\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute inset-0 flex flex-col gap-2.5 opacity-[0.72] [mask-image:linear-gradient(to_bottom,black_0%,black_30%,transparent_100%)]\"\n >\n {Array.from({ length: 3 }, (_, index) => (\n <div className=\"mx-4 h-24 rounded-lg bg-muted/45\" key={index} />\n ))}\n </div>\n <p\n className={cn(\n \"relative z-[1] text-sm font-semibold leading-5 text-foreground\",\n tone === \"destructive\" ? \"text-destructive\" : \"text-foreground\"\n )}\n >\n {title}\n </p>\n <p className=\"relative z-[1] max-w-sm text-sm leading-5 text-muted-foreground\">\n {body}\n </p>\n </div>\n );\n}\n\nfunction buildIssueManagerStatusCounts(\n issues: readonly IssueManagerIssueSummary[]\n): Record<(typeof issueStatusFilters)[number], number> {\n const counts: Record<(typeof issueStatusFilters)[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\nfunction formatSidebarTimestamp(value: number | null | undefined): string {\n return formatIssueManagerDate(value);\n}\n\nfunction scrollIssueManagerStatusTabs(\n tabsViewportRef: RefObject<HTMLDivElement | null>,\n delta: number\n): void {\n tabsViewportRef.current?.scrollBy({\n behavior: \"smooth\",\n left: delta\n });\n}\n\nfunction clampSidebarWidth(width: number, layoutWidth: number): number {\n const maxWidth = Math.max(\n sidebarMinWidth,\n Math.min(sidebarMaxWidth, layoutWidth - mainMinWidth - 12)\n );\n return Math.min(Math.max(width, sidebarMinWidth), maxWidth);\n}\n\nfunction handleSidebarResizePointerDown(\n event: PointerEvent<HTMLDivElement>,\n layoutRef: RefObject<HTMLDivElement | null>,\n resizeRef: RefObject<SidebarResizeState | null>,\n sidebarWidth: number,\n setSidebarWidth: Dispatch<SetStateAction<number>>\n): void {\n if (event.button !== 0) {\n return;\n }\n const layoutWidth = layoutRef.current?.getBoundingClientRect().width ?? 0;\n if (!layoutWidth) {\n return;\n }\n const startWidth = clampSidebarWidth(sidebarWidth, layoutWidth);\n resizeRef.current = {\n maxWidth: clampSidebarWidth(sidebarMaxWidth, layoutWidth),\n pointerId: event.pointerId,\n startClientX: event.clientX,\n startWidth\n };\n setSidebarWidth(startWidth);\n event.currentTarget.setPointerCapture?.(event.pointerId);\n}\n\nfunction handleSidebarResizePointerMove(\n event: PointerEvent<HTMLDivElement>,\n resizeRef: RefObject<SidebarResizeState | null>,\n setSidebarWidth: Dispatch<SetStateAction<number>>\n): void {\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 sidebarMinWidth\n ),\n state.maxWidth\n )\n );\n}\n\nfunction handleSidebarResizePointerEnd(\n event: PointerEvent<HTMLDivElement>,\n resizeRef: RefObject<SidebarResizeState | null>\n): void {\n resizeRef.current = null;\n event.currentTarget.releasePointerCapture?.(event.pointerId);\n}\n\nfunction handleSidebarResizeKeyDown(\n event: KeyboardEvent<HTMLDivElement>,\n layoutRef: RefObject<HTMLDivElement | null>,\n setSidebarWidth: Dispatch<SetStateAction<number>>\n): void {\n if (event.key !== \"ArrowLeft\" && event.key !== \"ArrowRight\") {\n return;\n }\n const delta = event.key === \"ArrowRight\" ? 16 : -16;\n const layoutWidth = layoutRef.current?.getBoundingClientRect().width ?? 0;\n if (!layoutWidth) {\n return;\n }\n event.preventDefault();\n setSidebarWidth((current) => clampSidebarWidth(current + delta, layoutWidth));\n}\n","import type { JSX } from \"react\";\nimport {\n Badge,\n Button,\n FileCreateIcon,\n Input,\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 type { IssueManagerController } from \"./useIssueManagerController.ts\";\nimport {\n IssueManagerDescriptionSection,\n IssueManagerContextSection,\n IssueManagerPaneLoadingState,\n IssueManagerTaskListLoadingState\n} from \"./IssueManagerPanelParts.tsx\";\nimport {\n resolveIssueManagerCreatorLabel,\n summarizeIssueManagerContent\n} from \"./IssueManagerPanelText.ts\";\nimport {\n formatIssueManagerTimestamp,\n resolveIssueManagerStatusLabel\n} from \"./model.ts\";\n\nexport { IssueManagerEmptyIllustration } from \"./IssueManagerPanelParts.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 issueRefs =\n controller.issueDetail.value?.contextRefs.filter(\n (ref) => ref.parentKind === \"issue\"\n ) ?? [];\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 : null;\n const latestOutputs = selectedTask\n ? (controller.taskDetail.value?.latestOutputs ?? [])\n : [];\n\n if (isCreatingIssue || isEditingIssue) {\n return (\n <div className=\"flex min-h-0 flex-1 flex-col overflow-hidden\">\n <div className=\"min-h-0 flex-1 overflow-y-auto px-7 py-8\">\n <div className=\"flex w-full flex-col gap-5\">\n <div className=\"grid gap-3\">\n <h2 className=\"text-[1.65rem] font-semibold tracking-tight text-foreground\">\n {isCreatingIssue\n ? copy.t(\"actions.createIssue\")\n : copy.t(\"actions.editIssue\")}\n </h2>\n </div>\n <div className=\"grid gap-5\">\n <label className=\"grid gap-2.5\">\n <span className=\"text-sm font-semibold text-foreground\">\n {copy.t(\"labels.title\")}\n </span>\n <Input\n className=\"h-10 rounded-xl border-border/80 text-base font-semibold shadow-none\"\n placeholder={copy.t(\"composer.issueTitlePlaceholder\")}\n value={controller.issueDraft.title}\n onChange={(event) =>\n controller.setIssueTitle(event.target.value)\n }\n />\n </label>\n <div className=\"grid min-h-0 gap-2.5\">\n <div className=\"flex items-center justify-between gap-3\">\n <span className=\"text-sm font-semibold text-foreground\">\n {copy.t(\"labels.content\")}\n </span>\n <Button\n className=\"h-8 rounded-lg border-border/70 px-3 text-[13px] font-semibold\"\n size=\"sm\"\n type=\"button\"\n variant=\"outline\"\n onClick={() => {\n void controller.insertReferences(\"issue\");\n }}\n >\n {copy.t(\"actions.insertReferences\")}\n </Button>\n </div>\n <textarea\n className=\"min-h-[12rem] w-full resize-none rounded-2xl border border-border/70 bg-transparent px-4 py-3 text-sm leading-6 text-foreground outline-none\"\n placeholder={copy.t(\"composer.issueContentPlaceholder\")}\n value={controller.issueDraft.content}\n onChange={(event) =>\n controller.setIssueContent(event.target.value)\n }\n />\n </div>\n </div>\n </div>\n </div>\n <div className=\"border-t border-border/70 px-7 py-4\">\n <div className=\"flex items-center justify-end gap-3\">\n <Button\n size=\"default\"\n type=\"button\"\n variant=\"secondary\"\n onClick={onDismissCreate}\n >\n {copy.t(\"actions.cancel\")}\n </Button>\n <Button\n size=\"default\"\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 min-h-0 flex-col\">\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 max-w-[44rem] flex-col gap-9\">\n <header className=\"flex items-start justify-between gap-6\">\n <div className=\"min-w-0 flex-1\">\n <h2 className=\"line-clamp-2 text-base font-semibold leading-6 text-foreground\">\n {selectedIssue.title}\n </h2>\n <div className=\"mt-3 flex flex-wrap items-center gap-x-5 gap-y-2 text-sm text-muted-foreground\">\n <Badge className=\"rounded-full border-transparent bg-muted px-2 py-1 text-[11px] text-muted-foreground\">\n {resolveIssueManagerStatusLabel(copy, selectedIssue.status)}\n </Badge>\n <span>\n {copy.t(\"labels.creator\")}{\" \"}\n {resolveIssueManagerCreatorLabel(selectedIssue)}\n </span>\n <span>\n {copy.t(\"labels.createdAt\")}{\" \"}\n {formatIssueManagerTimestamp(selectedIssue.createdAtUnix) ||\n \"-\"}\n </span>\n </div>\n </div>\n <div className=\"flex shrink-0 items-center gap-5 pt-1\">\n <Button\n className=\"h-auto px-0 text-sm font-semibold text-muted-foreground hover:text-foreground\"\n size=\"sm\"\n type=\"button\"\n variant=\"ghost\"\n onClick={() => controller.setIssueEditorMode(\"edit\")}\n >\n {copy.t(\"actions.edit\")}\n </Button>\n <Button\n className=\"h-auto px-0 text-sm font-semibold text-destructive hover:text-destructive\"\n size=\"sm\"\n type=\"button\"\n variant=\"ghost\"\n onClick={() => {\n void controller.deleteIssue();\n }}\n >\n {copy.t(\"actions.delete\")}\n </Button>\n </div>\n </header>\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 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 {issueRefs.length > 0 ? (\n <IssueManagerContextSection\n copy={copy}\n emptyLabel={copy.t(\"messages.noIssueReferences\")}\n refs={issueRefs}\n onAdd={() => {\n void controller.attachReferences(\"issue\");\n }}\n onOpen={controller.openReference}\n onRemove={controller.removeContextRef}\n />\n ) : null}\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\nfunction IssueManagerDetailTextSection({\n body,\n label,\n meta,\n tone = \"muted\"\n}: {\n body: string;\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-foreground\">{label}</h3>\n <div className=\"grid gap-1.5\">\n <p\n className={cn(\n \"text-sm leading-6\",\n tone === \"destructive\"\n ? \"text-destructive\"\n : \"text-muted-foreground\"\n )}\n >\n {body}\n </p>\n {meta ? (\n <p className=\"text-xs leading-5 text-muted-foreground\">{meta}</p>\n ) : null}\n </div>\n </section>\n );\n}\n\nfunction 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-foreground\">\n {copy.t(\"labels.executionOutputs\")}\n </h3>\n {outputs.length === 0 ? (\n <p className=\"text-sm leading-6 text-muted-foreground\">\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-accent/18\"\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-foreground\">\n {output.displayName}\n </span>\n <span className=\"mt-1 block truncate text-xs text-muted-foreground\">\n {output.path}\n </span>\n </span>\n <span className=\"shrink-0 text-xs text-muted-foreground\">\n {formatIssueManagerTimestamp(output.createdAtUnix) || \"\"}\n </span>\n </button>\n ))}\n </div>\n )}\n </section>\n );\n}\n\nfunction 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-foreground\">\n {copy.t(\"labels.subtasks\")}\n </h3>\n <Button\n className=\"h-auto gap-1.5 px-0 text-sm font-semibold text-foreground hover:text-foreground\"\n size=\"sm\"\n type=\"button\"\n variant=\"ghost\"\n onClick={onCreate}\n >\n <FileCreateIcon size={14} />\n {copy.t(\"actions.add\")}\n </Button>\n </div>\n {tasks.length === 0 ? (\n <p className=\"text-sm leading-6 text-muted-foreground\">\n {copy.t(\"messages.noSubtasksForIssue\")}\n </p>\n ) : (\n <div className=\"grid gap-2\">\n {tasks.map((task) => (\n <button\n className={cn(\n \"flex items-start justify-between gap-4 rounded-xl border px-4 py-3 text-left transition-colors\",\n selectedTaskId === task.taskId\n ? \"border-border/90 bg-background-fronted\"\n : \"border-border/65 hover:bg-accent/18\"\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-foreground\">\n {task.title}\n </span>\n <Badge className=\"rounded-md border-transparent bg-muted px-2 py-1 text-[11px] font-medium text-muted-foreground\">\n {resolveIssueManagerStatusLabel(copy, task.status)}\n </Badge>\n </div>\n <p className=\"mt-2 line-clamp-2 text-sm leading-6 text-muted-foreground\">\n {summarizeIssueManagerContent(\n task.content,\n copy.t(\"messages.taskContentEmpty\")\n )}\n </p>\n </div>\n <span className=\"shrink-0 text-xs text-muted-foreground\">\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-foreground\">\n {copy.t(\"labels.taskList\")}\n </h3>\n </div>\n <Button\n disabled={!selectedIssue}\n size=\"sm\"\n type=\"button\"\n variant=\"ghost\"\n className=\"h-7 px-1.5 text-[13px] font-medium text-muted-foreground hover:text-foreground\"\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-foreground\">\n {copy.t(\"messages.noTasks\")}\n </p>\n <p className=\"mt-2 text-sm leading-5 text-muted-foreground\">\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-primary/[0.08]\"\n : \"bg-transparent hover:bg-accent/18\"\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-foreground\">\n {task.title}\n </span>\n <Badge className=\"rounded-full border-transparent bg-muted px-2 py-1 text-[11px] text-muted-foreground\">\n {resolveIssueManagerStatusLabel(copy, task.status)}\n </Badge>\n </div>\n <p className=\"text-[12px] leading-[18px] text-muted-foreground\">\n {formatIssueManagerTimestamp(\n task.createdAtUnix ?? task.updatedAtUnix\n )}\n </p>\n </div>\n <p className=\"line-clamp-2 text-[14px] leading-[1.6] text-muted-foreground\">\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 { useEffect, useRef, useState, type JSX } from \"react\";\nimport {\n Badge,\n Button,\n DirectoryIcon,\n FileCreateIcon,\n FileIcon,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SparkIcon,\n cn\n} from \"@nextop-os/ui-system\";\nimport { normalizeIssueManagerContent } from \"../../core/index.ts\";\nimport type {\n IssueManagerContextRef,\n IssueManagerFileReference,\n IssueManagerRun,\n IssueManagerRunOutput\n} from \"../../contracts/index.ts\";\nimport type { IssueManagerI18nRuntime } from \"../../i18n/issueManagerI18n.ts\";\nimport type { IssueManagerController } from \"./useIssueManagerController.ts\";\nimport {\n formatIssueManagerTimestamp,\n resolveIssueManagerStatusLabel\n} from \"./model.ts\";\n\nconst workspaceDockTaskImage = new URL(\n \"../../assets/workspace-dock-task.png\",\n import.meta.url\n).href;\n\nexport function IssueManagerEmptyIllustration(): 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={workspaceDockTaskImage}\n />\n );\n}\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\n useEffect(() => {\n if (variant === \"plain\") {\n setIsOverflowing(false);\n return;\n }\n if (!normalizedContent) {\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 }, [normalizedContent, variant]);\n\n if (variant === \"plain\") {\n return (\n <section className=\"grid gap-2.5\">\n <span className=\"text-sm font-semibold text-foreground\">{label}</span>\n {normalizedContent ? (\n <div className=\"max-w-3xl text-sm leading-6 text-muted-foreground\">\n <IssueManagerDescriptionContent\n content={normalizedContent}\n onOpen={onOpen}\n />\n </div>\n ) : (\n <p className=\"text-sm leading-6 text-muted-foreground\">\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 text-foreground\">{label}</span>\n <div\n className={cn(\n \"relative min-w-0 rounded-[24px] border border-border/70 bg-transparent px-5 py-4\",\n minHeightClass\n )}\n >\n <div\n className={cn(\n \"max-h-[18rem] overflow-y-auto pr-2 text-sm leading-6 text-muted-foreground\",\n isOverflowing && \"pb-8\"\n )}\n ref={contentRef}\n >\n {normalizedContent ? (\n <IssueManagerDescriptionContent\n content={normalizedContent}\n onOpen={onOpen}\n />\n ) : (\n <p className=\"text-muted-foreground\">{emptyLabel}</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(--workbench-node-surface), color-mix(in srgb, var(--workbench-node-surface) 80%, transparent), transparent)\"\n }}\n />\n ) : null}\n </div>\n </section>\n );\n}\n\nexport function IssueManagerTaskEmptyState({\n body,\n ctaLabel,\n onCreate,\n title\n}: {\n body: string;\n ctaLabel: string;\n onCreate: () => void;\n title: string;\n}): JSX.Element {\n return (\n <div className=\"flex min-h-[18rem] flex-col items-center justify-center gap-3 px-6 py-10 text-center\">\n <IssueManagerEmptyIllustration />\n <div className=\"space-y-3\">\n <p className=\"text-[1.95rem] font-semibold tracking-tight text-foreground\">\n {title}\n </p>\n <p className=\"max-w-md text-base leading-7 text-muted-foreground\">\n {body}\n </p>\n </div>\n <Button\n className=\"mt-2 rounded-xl bg-foreground px-5 text-background hover:bg-foreground/92\"\n size=\"lg\"\n type=\"button\"\n onClick={onCreate}\n >\n <FileCreateIcon size={16} />\n {ctaLabel}\n </Button>\n </div>\n );\n}\n\nexport function IssueManagerRunActionTrigger({\n controller,\n disabled = false,\n iconSize = 16,\n triggerClassName\n}: {\n controller: IssueManagerController;\n disabled?: boolean;\n iconSize?: number;\n triggerClassName?: string;\n}): JSX.Element {\n const [resetToken, setResetToken] = useState(0);\n\n return (\n <Select\n key={`${controller.nodeState.selectedAgentProvider}:${resetToken}`}\n disabled={controller.isRunningTask || disabled}\n onValueChange={(provider) => {\n setResetToken((current) => current + 1);\n void controller.runTask(provider);\n }}\n >\n <SelectTrigger\n aria-label={controller.copy.t(\"actions.askAgentToRun\")}\n className={triggerClassName}\n >\n <span className=\"flex min-w-0 flex-1 items-center gap-2\">\n <SparkIcon size={iconSize} />\n <span className=\"truncate\">\n {controller.copy.t(\"actions.askAgentToRun\")}\n </span>\n </span>\n </SelectTrigger>\n <SelectContent style={{ zIndex: \"var(--z-panel-popover)\" }}>\n {controller.providerOptions.map((provider) => (\n <SelectItem key={provider} value={provider}>\n {provider}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n );\n}\n\nfunction IssueManagerDescriptionContent({\n content,\n onOpen\n}: {\n content: string;\n onOpen?: (reference: IssueManagerFileReference) => Promise<void>;\n}): JSX.Element {\n const paragraphs = content\n .split(/\\n{2,}/)\n .map((paragraph) => paragraph.trim())\n .filter(Boolean);\n\n return (\n <div className=\"space-y-4\">\n {paragraphs.map((paragraph, paragraphIndex) => (\n <p\n className=\"whitespace-pre-wrap\"\n key={`${paragraphIndex}:${paragraph}`}\n >\n {renderIssueManagerInlineMarkdown(paragraph, onOpen)}\n </p>\n ))}\n </div>\n );\n}\n\nfunction renderIssueManagerInlineMarkdown(\n content: string,\n onOpen?: (reference: IssueManagerFileReference) => Promise<void>\n): JSX.Element[] {\n const markdownLinkPattern = /\\[([^\\]]+)\\]\\(([^)\\s]+)\\)/g;\n const parts: JSX.Element[] = [];\n let match: RegExpExecArray | null;\n let cursor = 0;\n let index = 0;\n\n while ((match = markdownLinkPattern.exec(content)) !== null) {\n const [source, label = \"\", href = \"\"] = match;\n const start = match.index;\n if (start > cursor) {\n parts.push(\n <span key={`text:${index}:${cursor}`}>\n {content.slice(cursor, start)}\n </span>\n );\n index += 1;\n }\n\n parts.push(\n <IssueManagerInlineLink\n href={href}\n key={`link:${index}:${href}`}\n label={label || href}\n onOpen={onOpen}\n />\n );\n index += 1;\n cursor = start + source.length;\n }\n\n if (cursor < content.length) {\n parts.push(\n <span key={`text:${index}:${cursor}`}>{content.slice(cursor)}</span>\n );\n }\n\n return parts;\n}\n\nfunction IssueManagerInlineLink({\n href,\n label,\n onOpen\n}: {\n href: string;\n label: string;\n onOpen?: (reference: IssueManagerFileReference) => Promise<void>;\n}): JSX.Element {\n const trimmedHref = href.trim();\n const isExternal = /^(?:[a-z]+:)?\\/\\//i.test(trimmedHref);\n if (!trimmedHref || isExternal || !onOpen) {\n return (\n <a\n className=\"font-medium text-foreground underline decoration-border underline-offset-4 hover:text-primary\"\n href={trimmedHref || undefined}\n rel=\"noreferrer\"\n target=\"_blank\"\n >\n {label}\n </a>\n );\n }\n\n return (\n <button\n className=\"font-medium text-foreground underline decoration-border underline-offset-4 hover:text-primary\"\n type=\"button\"\n onClick={() => {\n void onOpen({\n displayName: label,\n kind: trimmedHref.endsWith(\"/\") ? \"folder\" : \"file\",\n path: trimmedHref\n });\n }}\n >\n {label}\n </button>\n );\n}\n\nexport function IssueManagerContextSection({\n copy,\n emptyLabel,\n onAdd,\n onOpen,\n onRemove,\n refs\n}: {\n copy: IssueManagerI18nRuntime;\n emptyLabel: string;\n onAdd: () => void;\n onOpen: (reference: IssueManagerFileReference) => Promise<void>;\n onRemove: (ref: IssueManagerContextRef) => Promise<void>;\n refs: readonly IssueManagerContextRef[];\n}): JSX.Element {\n return (\n <section className=\"rounded-2xl border border-border/70 bg-transparent px-5 py-4\">\n <div className=\"mb-3 flex items-center justify-between gap-3\">\n <h4 className=\"text-sm font-semibold text-foreground\">\n {copy.t(\"labels.contextReferences\")}\n </h4>\n <Button\n className=\"h-8 rounded-lg border-border/70 px-3 text-[13px] font-semibold\"\n size=\"sm\"\n type=\"button\"\n variant=\"outline\"\n onClick={onAdd}\n >\n {copy.t(\"actions.addReferences\")}\n </Button>\n </div>\n {refs.length === 0 ? (\n <p className=\"text-sm leading-6 text-muted-foreground\">{emptyLabel}</p>\n ) : (\n <div className=\"grid gap-2.5\">\n {refs.map((ref) => (\n <div\n className=\"flex items-center justify-between gap-3 rounded-xl border border-border/65 bg-transparent px-3.5 py-3\"\n key={ref.contextRefId}\n >\n <button\n className=\"flex min-w-0 flex-1 items-center gap-3 text-left\"\n type=\"button\"\n onClick={() => {\n void onOpen({\n displayName: ref.displayName,\n kind: ref.path.endsWith(\"/\") ? \"folder\" : \"file\",\n path: ref.path\n });\n }}\n >\n {ref.path.endsWith(\"/\") ? (\n <DirectoryIcon\n className=\"shrink-0 text-muted-foreground\"\n size={16}\n />\n ) : (\n <FileIcon\n className=\"shrink-0 text-muted-foreground\"\n size={16}\n />\n )}\n <span className=\"min-w-0\">\n <span className=\"block truncate text-sm font-semibold text-foreground\">\n {ref.displayName}\n </span>\n <span className=\"block truncate text-xs text-muted-foreground\">\n {ref.path}\n </span>\n </span>\n </button>\n <Button\n className=\"h-7 px-2 text-[13px] font-semibold text-muted-foreground hover:text-foreground\"\n size=\"sm\"\n type=\"button\"\n variant=\"ghost\"\n onClick={() => {\n void onRemove(ref);\n }}\n >\n {copy.t(\"actions.removeReference\")}\n </Button>\n </div>\n ))}\n </div>\n )}\n </section>\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-2xl border border-border/70 bg-transparent px-5 py-4\">\n <h4 className=\"mb-3 text-sm font-semibold text-foreground\">\n {copy.t(\"labels.recentRuns\")}\n </h4>\n {recentRuns.length === 0 ? (\n <p className=\"text-sm leading-6 text-muted-foreground\">\n {copy.t(\"messages.noRecentRuns\")}\n </p>\n ) : (\n <div className=\"grid gap-2.5\">\n {recentRuns.map((run) => (\n <div\n className=\"rounded-xl border border-border/65 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 text-foreground\">\n {run.summary || run.runId}\n </p>\n <p className=\"mt-1 text-xs text-muted-foreground\">\n {formatIssueManagerTimestamp(\n run.updatedAtUnix ?? run.createdAtUnix\n )}\n </p>\n </div>\n <Badge className=\"rounded-full border-transparent bg-muted px-2.5 py-1 text-[11px] text-muted-foreground\">\n {resolveIssueManagerStatusLabel(copy, run.status)}\n </Badge>\n </div>\n {run.errorMessage ? (\n <p className=\"mt-2 text-xs text-destructive\">\n {run.errorMessage}\n </p>\n ) : null}\n </div>\n ))}\n </div>\n )}\n </section>\n\n <section className=\"rounded-2xl border border-border/70 bg-transparent px-5 py-4\">\n <h4 className=\"mb-3 text-sm font-semibold text-foreground\">\n {copy.t(\"labels.outputs\")}\n </h4>\n {outputs.length === 0 ? (\n <p className=\"text-sm leading-6 text-muted-foreground\">\n {copy.t(\"messages.noOutputs\")}\n </p>\n ) : (\n <div className=\"grid gap-2.5\">\n {outputs.map((output) => (\n <button\n className=\"rounded-xl border border-border/65 bg-transparent px-3.5 py-3 text-left transition-colors hover:bg-accent/25\"\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 text-foreground\">\n {output.displayName}\n </p>\n <p className=\"mt-1 truncate text-xs text-muted-foreground\">\n {output.path}\n </p>\n </button>\n ))}\n </div>\n )}\n </section>\n </div>\n );\n}\n\nexport function IssueManagerPaneLoadingState(): JSX.Element {\n return (\n <div\n className=\"mx-auto flex w-full max-w-4xl flex-col gap-6\"\n aria-hidden=\"true\"\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 className=\"grid gap-5\" aria-hidden=\"true\">\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 { 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 = extractIssueManagerPlainTextFromContent(\n content ?? \"\"\n ).trim();\n if (!plainText) {\n return fallback;\n }\n if (plainText.length <= 120) {\n return plainText;\n }\n return `${plainText.slice(0, 117)}...`;\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 } from \"react\";\nimport {\n Button,\n FileSearchIcon,\n Input,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n UploadIcon\n} from \"@nextop-os/ui-system\";\nimport type { IssueManagerIssueSummary } from \"../../contracts/index.ts\";\nimport type { IssueManagerController } from \"./useIssueManagerController.ts\";\nimport { resolveIssueManagerPriorityLabel } from \"./model.ts\";\n\nconst taskPriorityOptions = [\"high\", \"medium\", \"low\"] as const;\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 showAttachmentActions =\n controller.canUploadWorkspaceFiles || controller.canReferenceWorkspaceFiles;\n\n return (\n <div className=\"flex min-h-0 flex-1 flex-col overflow-hidden\">\n <div className=\"min-h-0 flex-1 overflow-y-auto px-8 py-8\">\n <div className=\"flex w-full max-w-[76rem] flex-col gap-8\">\n <div className=\"flex items-start justify-between gap-4\">\n <h2 className=\"text-base font-semibold leading-6 text-foreground\">\n {copy.t(\"actions.addSubtask\")}\n </h2>\n <div className=\"flex items-center gap-3\">\n <span className=\"text-sm text-muted-foreground\">\n {copy.t(\"labels.priority\")}\n </span>\n <Select\n value={controller.taskDraft.priority}\n onValueChange={(value) => controller.setTaskPriority(value)}\n >\n <SelectTrigger\n aria-label={copy.t(\"labels.priority\")}\n className=\"min-w-28 rounded-xl border-border/70 bg-muted/25\"\n >\n <SelectValue />\n </SelectTrigger>\n <SelectContent style={{ zIndex: \"var(--z-panel-popover)\" }}>\n {taskPriorityOptions.map((priority) => (\n <SelectItem key={priority} value={priority}>\n {resolveIssueManagerPriorityLabel(copy, priority)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n </div>\n\n <label className=\"grid gap-3\">\n <span className=\"text-sm font-semibold text-foreground\">\n {copy.t(\"labels.title\")}\n </span>\n <Input\n className=\"h-14 rounded-2xl border-0 bg-muted/28 px-5 text-base font-medium shadow-none placeholder:text-muted-foreground\"\n placeholder={copy.t(\"composer.subtaskTitlePlaceholder\")}\n value={controller.taskDraft.title}\n onChange={(event) => controller.setTaskTitle(event.target.value)}\n />\n </label>\n\n <section className=\"grid gap-3\">\n <span className=\"text-sm font-semibold text-foreground\">\n {copy.t(\"labels.requirementDescription\")}\n </span>\n <div className=\"overflow-hidden rounded-[28px] border border-border/70 bg-muted/18\">\n <textarea\n className=\"min-h-[20rem] w-full resize-none border-0 bg-transparent px-5 py-5 text-sm leading-6 text-foreground outline-none placeholder:text-muted-foreground\"\n placeholder={copy.t(\"composer.subtaskContentPlaceholder\")}\n value={controller.taskDraft.content}\n onChange={(event) =>\n controller.setTaskContent(event.target.value)\n }\n />\n {showAttachmentActions ? (\n <div className=\"flex flex-wrap items-center gap-3 border-t border-border/60 px-5 py-4\">\n {controller.canUploadWorkspaceFiles ? (\n <Button\n className=\"rounded-xl border-0 bg-background-fronted px-4 text-sm font-semibold text-foreground shadow-none hover:bg-background-fronted\"\n size=\"sm\"\n type=\"button\"\n variant=\"secondary\"\n onClick={() => {\n void controller.uploadReferences(\"task\", \"files\");\n }}\n >\n <UploadIcon size={16} />\n {copy.t(\"actions.uploadFiles\")}\n </Button>\n ) : null}\n {controller.canUploadWorkspaceFiles ? (\n <Button\n className=\"rounded-xl border-0 bg-background-fronted px-4 text-sm font-semibold text-foreground shadow-none hover:bg-background-fronted\"\n size=\"sm\"\n type=\"button\"\n variant=\"secondary\"\n onClick={() => {\n void controller.uploadReferences(\"task\", \"folder\");\n }}\n >\n <UploadIcon size={16} />\n {copy.t(\"actions.uploadFolder\")}\n </Button>\n ) : null}\n {controller.canReferenceWorkspaceFiles ? (\n <Button\n className=\"rounded-xl border-0 bg-background-fronted px-4 text-sm font-semibold text-foreground shadow-none hover:bg-background-fronted\"\n size=\"sm\"\n type=\"button\"\n variant=\"secondary\"\n onClick={() => {\n void controller.insertReferences(\"task\");\n }}\n >\n <FileSearchIcon size={16} />\n {copy.t(\"actions.referenceWorkspaceFiles\")}\n </Button>\n ) : null}\n </div>\n ) : null}\n </div>\n </section>\n </div>\n </div>\n\n <div className=\"border-t border-border/70 px-8 py-4\">\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}\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 {\n Badge,\n Button,\n CloseIcon,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n Input,\n ScrollArea,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n SparkIcon\n} from \"@nextop-os/ui-system\";\nimport type {\n IssueManagerIssueSummary,\n IssueManagerTaskSummary\n} from \"../../contracts/index.ts\";\nimport {\n IssueManagerContextSection,\n IssueManagerDescriptionSection,\n IssueManagerRunActionTrigger,\n IssueManagerRunPanels,\n IssueManagerTaskDrawerLoadingState\n} from \"./IssueManagerPanelParts.tsx\";\nimport { resolveTaskCreatorLabel } from \"./IssueManagerPanelText.ts\";\nimport {\n formatIssueManagerTimestamp,\n resolveIssueManagerPriorityLabel,\n resolveIssueManagerStatusLabel\n} from \"./model.ts\";\nimport type { IssueManagerController } from \"./useIssueManagerController.ts\";\n\nconst taskPriorityOptions = [\"high\", \"medium\", \"low\"] as const;\n\nexport function IssueManagerTaskDrawer({\n controller,\n selectedIssue,\n selectedTask,\n onClose\n}: {\n controller: IssueManagerController;\n selectedIssue: IssueManagerIssueSummary | null;\n selectedTask: IssueManagerTaskSummary | null;\n onClose: () => void;\n}): JSX.Element {\n const copy = controller.copy;\n const isCreate = controller.taskEditorMode === \"create\";\n const isEdit = controller.taskEditorMode === \"edit\";\n const isRead = !isCreate && !isEdit;\n const taskRefs =\n controller.taskDetail.value?.contextRefs.filter(\n (ref) => ref.parentKind === \"task\"\n ) ?? [];\n const title =\n isCreate || isEdit\n ? isCreate\n ? copy.t(\"actions.createTask\")\n : copy.t(\"actions.editTask\")\n : selectedTask?.title || copy.t(\"labels.taskDetails\");\n const taskContent = selectedTask?.content ?? \"\";\n\n return (\n <div\n className=\"absolute inset-0 z-20 flex justify-end bg-foreground/6 backdrop-blur-[1px]\"\n onClick={onClose}\n >\n <aside\n className=\"flex h-full w-[34rem] max-w-[92vw] flex-col border-l border-border/70 [background:var(--workbench-node-surface)] shadow-[-20px_0_60px_rgba(15,23,42,0.12)]\"\n onClick={(event) => event.stopPropagation()}\n >\n <div className=\"flex items-start justify-between gap-4 border-b border-border/70 px-6 py-5\">\n <div className=\"min-w-0 flex-1\">\n {isRead && selectedTask ? (\n <div className=\"flex flex-wrap items-center gap-2\">\n <h3 className=\"line-clamp-2 text-lg font-semibold leading-7 tracking-tight text-foreground\">\n {title}\n </h3>\n <Badge className=\"rounded-full border-transparent bg-primary/10 px-2.5 py-1 text-[11px] text-primary\">\n {resolveIssueManagerStatusLabel(copy, selectedTask.status)}\n </Badge>\n <Badge className=\"rounded-full border-transparent bg-muted px-2.5 py-1 text-[11px] text-muted-foreground\">\n {resolveIssueManagerPriorityLabel(\n copy,\n selectedTask.priority\n )}\n </Badge>\n </div>\n ) : (\n <h3 className=\"line-clamp-2 text-lg font-semibold leading-7 tracking-tight text-foreground\">\n {title}\n </h3>\n )}\n {isRead && selectedTask ? (\n <div className=\"mt-3 flex flex-wrap items-center gap-2 text-sm text-muted-foreground\">\n <span>\n {copy.t(\"labels.updatedAt\")}{\" \"}\n {formatIssueManagerTimestamp(\n selectedTask.updatedAtUnix ?? selectedTask.createdAtUnix\n ) || \"-\"}\n </span>\n <span className=\"h-1 w-1 rounded-full bg-border\" />\n <span>{resolveTaskCreatorLabel(selectedTask)}</span>\n </div>\n ) : null}\n </div>\n <div className=\"flex shrink-0 items-center gap-2\">\n {isRead && selectedTask ? (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n aria-label={copy.t(\"actions.moreActions\")}\n size=\"icon-sm\"\n type=\"button\"\n variant=\"ghost\"\n >\n <span\n aria-hidden=\"true\"\n className=\"text-base leading-none tracking-[0.18em] text-muted-foreground\"\n >\n ...\n </span>\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" sideOffset={8}>\n <DropdownMenuItem\n onClick={() => controller.setTaskEditorMode(\"edit\")}\n >\n {copy.t(\"actions.editTask\")}\n </DropdownMenuItem>\n <DropdownMenuItem\n variant=\"destructive\"\n onClick={() => {\n void controller.deleteTask();\n }}\n >\n {copy.t(\"actions.deleteTask\")}\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n ) : null}\n <Button\n aria-label={copy.t(\"actions.cancel\")}\n size=\"icon-sm\"\n type=\"button\"\n variant=\"ghost\"\n onClick={onClose}\n >\n <CloseIcon size={16} />\n </Button>\n </div>\n </div>\n\n <ScrollArea className=\"min-h-0 flex-1\">\n <div className=\"flex flex-col gap-6 px-6 py-6\">\n {controller.taskDetail.isLoading &&\n !isCreate &&\n controller.taskDetail.value === null ? (\n <IssueManagerTaskDrawerLoadingState />\n ) : isCreate || isEdit ? (\n <>\n <div className=\"grid gap-5\">\n <label className=\"grid gap-2.5\">\n <span className=\"text-sm font-semibold text-foreground\">\n {copy.t(\"labels.title\")}\n </span>\n <Input\n className=\"h-10 rounded-xl border-border/80 text-base font-semibold shadow-none\"\n placeholder={copy.t(\"composer.taskTitlePlaceholder\")}\n value={controller.taskDraft.title}\n onChange={(event) =>\n controller.setTaskTitle(event.target.value)\n }\n />\n </label>\n <div className=\"flex flex-wrap items-center justify-between gap-3\">\n <div className=\"flex items-center gap-3\">\n <span className=\"text-sm font-medium text-muted-foreground\">\n {copy.t(\"labels.priority\")}\n </span>\n <Select\n value={controller.taskDraft.priority}\n onValueChange={(value) =>\n controller.setTaskPriority(value)\n }\n >\n <SelectTrigger\n aria-label={copy.t(\"labels.priority\")}\n className=\"min-w-28 rounded-xl border-border/70 bg-muted/30\"\n >\n <SelectValue />\n </SelectTrigger>\n <SelectContent\n style={{ zIndex: \"var(--z-panel-popover)\" }}\n >\n {taskPriorityOptions.map((priority) => (\n <SelectItem key={priority} value={priority}>\n {resolveIssueManagerPriorityLabel(copy, priority)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n <Button\n className=\"h-8 justify-center rounded-lg border-border/70 px-3 text-[13px] font-semibold\"\n size=\"sm\"\n type=\"button\"\n variant=\"outline\"\n onClick={() => {\n void controller.insertReferences(\"task\");\n }}\n >\n {copy.t(\"actions.insertReferences\")}\n </Button>\n </div>\n <div className=\"grid gap-2.5\">\n <span className=\"text-sm font-semibold text-foreground\">\n {copy.t(\"labels.content\")}\n </span>\n <textarea\n className=\"min-h-[12rem] w-full resize-none rounded-2xl border border-border/70 bg-transparent px-4 py-3 text-sm leading-6 text-foreground outline-none\"\n placeholder={copy.t(\"composer.taskContentPlaceholder\")}\n value={controller.taskDraft.content}\n onChange={(event) =>\n controller.setTaskContent(event.target.value)\n }\n />\n </div>\n </div>\n\n <IssueManagerContextSection\n copy={copy}\n emptyLabel={copy.t(\"messages.noTaskReferences\")}\n refs={taskRefs}\n onAdd={() => {\n void controller.attachReferences(\"task\");\n }}\n onOpen={controller.openReference}\n onRemove={controller.removeContextRef}\n />\n\n {!isCreate ? (\n <IssueManagerRunPanels\n copy={copy}\n outputs={controller.taskDetail.value?.latestOutputs ?? []}\n recentRuns={controller.taskDetail.value?.recentRuns ?? []}\n onOpen={controller.openReference}\n />\n ) : null}\n </>\n ) : (\n <>\n <IssueManagerDescriptionSection\n content={taskContent}\n emptyLabel={copy.t(\"messages.taskContentEmpty\")}\n label={copy.t(\"labels.content\")}\n minHeightClass=\"min-h-[8rem]\"\n onOpen={controller.openReference}\n />\n\n <IssueManagerContextSection\n copy={copy}\n emptyLabel={copy.t(\"messages.noTaskReferences\")}\n refs={taskRefs}\n onAdd={() => {\n void controller.attachReferences(\"task\");\n }}\n onOpen={controller.openReference}\n onRemove={controller.removeContextRef}\n />\n\n <IssueManagerRunPanels\n copy={copy}\n outputs={controller.taskDetail.value?.latestOutputs ?? []}\n recentRuns={controller.taskDetail.value?.recentRuns ?? []}\n onOpen={controller.openReference}\n />\n </>\n )}\n </div>\n </ScrollArea>\n\n {isRead && selectedTask ? (\n <div className=\"border-t border-border/70 px-6 py-5\">\n <div className=\"flex items-center justify-between gap-3\">\n <IssueManagerRunActionTrigger\n controller={controller}\n iconSize={15}\n triggerClassName=\"min-w-[11rem] rounded-xl border-border/70 bg-secondary/90 px-3.5 py-2\"\n />\n <Button\n className=\"shrink-0 rounded-xl bg-foreground px-4 text-background hover:bg-foreground/92\"\n size=\"sm\"\n type=\"button\"\n onClick={() => {\n void controller.shareSelection();\n }}\n >\n {copy.t(\"actions.inviteCollaborator\")}\n </Button>\n </div>\n </div>\n ) : isCreate || isEdit ? (\n <div className=\"border-t border-border/70 px-6 py-5\">\n <div className=\"flex items-center justify-between gap-3\">\n <div className=\"flex items-center gap-2\">\n {!isCreate && selectedTask ? (\n <Button\n size=\"default\"\n type=\"button\"\n variant=\"destructive\"\n onClick={() => {\n void controller.deleteTask();\n }}\n >\n {copy.t(\"actions.deleteTask\")}\n </Button>\n ) : null}\n </div>\n <div className=\"flex items-center gap-3\">\n <Button\n size=\"default\"\n type=\"button\"\n variant=\"secondary\"\n onClick={() => controller.setTaskEditorMode(\"read\")}\n >\n {copy.t(\"actions.cancel\")}\n </Button>\n <Button\n disabled={!selectedIssue}\n size=\"default\"\n type=\"button\"\n onClick={() => void controller.saveTask()}\n >\n <SparkIcon size={16} />\n {copy.t(\"actions.saveTask\")}\n </Button>\n </div>\n </div>\n </div>\n ) : null}\n </aside>\n </div>\n );\n}\n","import type { JSX } from \"react\";\nimport type { IssueManagerNodeState } from \"../contracts/index.ts\";\nimport type { IssueManagerFeature } from \"../core/index.ts\";\nimport { useIssueManagerController } from \"./internal/useIssueManagerController.ts\";\nimport { IssueManagerReferencePicker } from \"./internal/IssueManagerReferencePicker.tsx\";\nimport { IssueManagerShell } from \"./internal/IssueManagerShell.tsx\";\n\nexport interface IssueManagerNodeProps {\n feature: IssueManagerFeature;\n nodeId: string;\n onStateChange?: (state: IssueManagerNodeState) => void;\n state?: Partial<IssueManagerNodeState> | null;\n workspaceId: string;\n}\n\nexport function IssueManagerNode({\n feature,\n nodeId,\n onStateChange,\n state,\n workspaceId\n}: IssueManagerNodeProps): JSX.Element {\n const controller = useIssueManagerController({\n feature,\n onStateChange,\n state,\n workspaceId\n });\n const selectedIssue = resolveSelectedIssue(controller);\n const selectedTask = resolveSelectedTask(controller);\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-foreground\"\n data-issue-manager-node-id={nodeId}\n data-issue-manager-workspace-id={workspaceId}\n >\n <IssueManagerShell\n controller={controller}\n selectedIssue={selectedIssue}\n selectedTask={selectedTask}\n onClearNotice={controller.clearNotice}\n onCloseTaskDrawer={() => {\n controller.setTaskEditorMode(\"read\");\n controller.selectTask(null);\n }}\n onDismissIssueCreate={() => {\n controller.setIssueEditorMode(\"read\");\n }}\n />\n\n <IssueManagerReferencePicker\n copy={controller.copy}\n fileAdapter={feature.fileAdapter}\n open={controller.referenceTarget !== null}\n workspaceId={workspaceId}\n onClose={() => controller.setReferenceTarget(null)}\n onConfirm={(refs) => {\n void controller.submitReferenceSelection(refs);\n }}\n />\n </section>\n );\n}\n\nexport function IssueManagerNodeHeader(): JSX.Element | null {\n return null;\n}\n\nfunction resolveSelectedIssue(\n controller: ReturnType<typeof useIssueManagerController>\n) {\n const issueId = controller.nodeState.selectedIssueId;\n if (!issueId) {\n return null;\n }\n return (\n controller.issueDetail.value?.issue ??\n controller.issues.value.find((issue) => issue.issueId === issueId) ??\n null\n );\n}\n\nfunction resolveSelectedTask(\n controller: ReturnType<typeof useIssueManagerController>\n) {\n const taskId = controller.nodeState.selectedTaskId;\n if (!taskId) {\n return null;\n }\n return (\n controller.taskDetail.value?.task ??\n controller.issueDetail.value?.tasks.find(\n (task) => task.taskId === taskId\n ) ??\n null\n );\n}\n"],"mappings":"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","names":["useEffect","useState","useState","hasFileAdapterMethod","useEffect","mode","useEffect","useRef","useState","Badge","Button","CloseIcon","FileCreateIcon","Input","ScrollArea","SearchIcon","cn","Badge","Button","FileCreateIcon","Input","ScrollArea","cn","useEffect","useState","Badge","Button","DirectoryIcon","FileIcon","cn","jsx","jsxs","useState","useEffect","cn","useState","jsxs","jsx","Button","DirectoryIcon","FileIcon","Badge","jsxs","jsx","jsx","jsxs","Input","Button","Badge","cn","FileCreateIcon","Button","Input","Select","SelectContent","SelectItem","SelectTrigger","UploadIcon","jsx","jsxs","Select","SelectTrigger","SelectContent","SelectItem","Input","Button","UploadIcon","Badge","Button","Input","ScrollArea","Select","SelectContent","SelectItem","SelectTrigger","SelectValue","SparkIcon","Fragment","jsx","jsxs","taskPriorityOptions","Badge","Button","ScrollArea","Input","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","SparkIcon","Fragment","jsx","jsxs","useRef","useState","useEffect","Button","FileCreateIcon","cn","CloseIcon","SearchIcon","Input","ScrollArea","Badge","jsx","jsxs"]}
@@ -260,13 +260,25 @@ interface IssueManagerFileReference {
260
260
  kind: "file" | "folder" | (string & {});
261
261
  path: string;
262
262
  }
263
+ interface IssueManagerFileDirectoryListing {
264
+ directoryPath: string;
265
+ entries: IssueManagerFileReference[];
266
+ rootPath?: string | null;
267
+ }
263
268
  interface IssueManagerFileAdapter {
269
+ listDirectory?(input: IssueManagerScope & {
270
+ path?: string | null;
271
+ }): Promise<IssueManagerFileDirectoryListing>;
264
272
  openReference?(reference: IssueManagerFileReference): Promise<void> | void;
265
273
  refreshTree?(input: IssueManagerScope & {
266
274
  depth?: number;
267
275
  paths?: readonly string[];
268
276
  }): Promise<void>;
269
277
  requestReferences?(input: IssueManagerScope): Promise<IssueManagerFileReference[]>;
278
+ searchReferences?(input: IssueManagerScope & {
279
+ limit?: number;
280
+ query: string;
281
+ }): Promise<IssueManagerFileReference[]>;
270
282
  requestUpload?(input: IssueManagerScope & {
271
283
  mode: "files" | "folder";
272
284
  targetDirectoryPath: string;
@@ -309,4 +321,4 @@ interface IssueManagerNodeState {
309
321
  taskListNextPageToken?: string | null;
310
322
  }
311
323
 
312
- export type { IssueManagerAddContextRefInput, IssueManagerAddContextRefsInput, IssueManagerAgentRunRequest, IssueManagerAgentRunResult, IssueManagerAgentRunner, IssueManagerBackend, IssueManagerCompleteRunInput, IssueManagerCompleteRunOutputInput, IssueManagerContextRef, IssueManagerContextRefParentKind, IssueManagerCreateIssueInput, IssueManagerCreateRunInput, IssueManagerCreateTaskInput, IssueManagerFileAdapter, IssueManagerFileReference, IssueManagerIdentityAdapter, IssueManagerIdentityProfile, IssueManagerIssueContextRef, IssueManagerIssueDetail, IssueManagerIssueSummary, IssueManagerListIssuesInput, IssueManagerListIssuesResult, IssueManagerListTasksInput, IssueManagerListTasksResult, IssueManagerNodeState, IssueManagerPriority, IssueManagerRemoveContextRefInput, IssueManagerRun, IssueManagerRunCompletionStatus, IssueManagerRunEnvelope, IssueManagerRunOutput, IssueManagerScope, IssueManagerShareAdapter, IssueManagerStatus, IssueManagerStatusCounts, IssueManagerTaskContextRef, IssueManagerTaskDetail, IssueManagerTaskSummary, IssueManagerUpdateIssueInput, IssueManagerUpdateTaskInput };
324
+ export type { IssueManagerAddContextRefInput, IssueManagerAddContextRefsInput, IssueManagerAgentRunRequest, IssueManagerAgentRunResult, IssueManagerAgentRunner, IssueManagerBackend, IssueManagerCompleteRunInput, IssueManagerCompleteRunOutputInput, IssueManagerContextRef, IssueManagerContextRefParentKind, IssueManagerCreateIssueInput, IssueManagerCreateRunInput, IssueManagerCreateTaskInput, IssueManagerFileAdapter, IssueManagerFileDirectoryListing, IssueManagerFileReference, IssueManagerIdentityAdapter, IssueManagerIdentityProfile, IssueManagerIssueContextRef, IssueManagerIssueDetail, IssueManagerIssueSummary, IssueManagerListIssuesInput, IssueManagerListIssuesResult, IssueManagerListTasksInput, IssueManagerListTasksResult, IssueManagerNodeState, IssueManagerPriority, IssueManagerRemoveContextRefInput, IssueManagerRun, IssueManagerRunCompletionStatus, IssueManagerRunEnvelope, IssueManagerRunOutput, IssueManagerScope, IssueManagerShareAdapter, IssueManagerStatus, IssueManagerStatusCounts, IssueManagerTaskContextRef, IssueManagerTaskDetail, IssueManagerTaskSummary, IssueManagerUpdateIssueInput, IssueManagerUpdateTaskInput };
@@ -0,0 +1,25 @@
1
+ import { I18nRuntime } from '@nextop-os/ui-i18n-runtime';
2
+ import { IssueManagerI18nRuntime } from './i18n/index.js';
3
+ import { IssueManagerAgentRunner, IssueManagerBackend, IssueManagerFileAdapter, IssueManagerIdentityAdapter, IssueManagerShareAdapter, IssueManagerNodeState } from './contracts/index.js';
4
+
5
+ interface IssueManagerFeature {
6
+ agentRunner: IssueManagerAgentRunner;
7
+ backend: IssueManagerBackend;
8
+ fileAdapter?: IssueManagerFileAdapter;
9
+ i18n: IssueManagerI18nRuntime;
10
+ identityAdapter: IssueManagerIdentityAdapter;
11
+ shareAdapter?: IssueManagerShareAdapter;
12
+ }
13
+ interface CreateIssueManagerFeatureInput {
14
+ agentRunner: IssueManagerAgentRunner;
15
+ backend: IssueManagerBackend;
16
+ fileAdapter?: IssueManagerFileAdapter;
17
+ i18n?: I18nRuntime<string>;
18
+ identityAdapter: IssueManagerIdentityAdapter;
19
+ shareAdapter?: IssueManagerShareAdapter;
20
+ }
21
+ declare const defaultIssueManagerNodeState: IssueManagerNodeState;
22
+ declare function createIssueManagerFeature(input: CreateIssueManagerFeatureInput): IssueManagerFeature;
23
+ declare function normalizeIssueManagerNodeState(state: Partial<IssueManagerNodeState> | null | undefined): IssueManagerNodeState;
24
+
25
+ export { type CreateIssueManagerFeatureInput as C, type IssueManagerFeature as I, createIssueManagerFeature as c, defaultIssueManagerNodeState as d, normalizeIssueManagerNodeState as n };